Back to Home

Portfolio

Here is a rough list of things that I have worked on, organized by topic and years. Some projects span multiple topics, in which case I have listed them under each associated topic, albeit with a different focus.

Compilers and Computer Architecture

2010 to 2012 at TACC
At the Texas Advanced Computing Center, I researched techniques to improve the visibility of program execution on complex architectures such as x86, with the goal of improving performance, which led to tools like PerfExpert and MACPO.
2012 to 2014 at UT Austin
Initially, I fought the compiler to prevent it from applying optimizations that mangled source code structure, but over time, I realized that I can work with the compiler. I augmented LLVM optimizations with metadata information so that IR-level optimizations could be applied using binary instrumentation without hindering compiler optimizations.

I also worked closely with members of the Intel compiler team and the Intel VTune team to demonstrate how compilers can be augmented with runtime information to improve inner- and outer-loop vectorization.
2014 to 2019 at UT Austin
I developed compiler-based defenses for detecting and preventing side-channel information leakage, with the goal of re-writing programs so that they are functionally equivalent to the original program but the re-written programs do not leak information.

Program transformation fits nicely here, but side channels arise because of implementation details, often in the microarchitecture. So my work involved analyzing microarchitectural implementations, abstracting the relevant leakage properties into the compiler IR, and transforming programs to eliminate or reduce leakage. The tools and results are described in my PhD dissertation.
2019 to present at Groq
I work on the compiler and programming tools at Groq, where I help with developing abstractions for easier programmability, implementing fast kernels, and debugging functional and performance problems. I work closely with both the hardware and software teams.

Security, Specifically Side-Channel Defenses

2014 to 2019 at UT Austin
Side channels exist in a variety of applications, but the majority of the attention has been directed to only cryptographic applications, which are tiny and very carefully crafted compared to a large majority of sensitive applications like parsers, databases, and renderers. At the same time, there exists a diverse list of side channels.

My dissertation work tries to protect non-cryptographic applications against different side-channel defenses running on a broad list of modern microarchitectures by augmenting the compiler with various abstract domains such as timing, cache usage, power consumption, etc.
2016 at Microsoft Research
At Microsoft Research, I worked towards Project Everest to implement a proven-correct digital side-channel leakage analyzer in the Dafny program verifier. This code analyzed x86, x64, and armv7 assembly instructions.
2018 at Galois
At Galois, I worked towards the DARPA SSITH project to implement tools for evaluating side-channel defenses. Specifically, I built both black-box and white-box tools for analyzing RISC-V microarchitectural implementations for timing channel information leakage. Part of this work involved writing a static analyzer for Verilog.

Performance Optimization

2009 at Salesforce
At Salesforce.com, I was responsible for the end-to-end performance of Apex and VisualForce runtimes, which are used to customize the logic and presentation of applications running on the Salesforce.com CRM. This work involved discovering performance bottlenecks in the parser, the Java implementation, and the Java Virtual Machine.
2010 to 2012 at TACC
At the Texas Advanced Computing Center (TACC), I worked with several domain scientists to help them improve the performance of their applications running on TACC machines. We developed PerfExpert, a tool that simplifies the diagnosis of performance problems and AutoSCOPE, an extension to PerfExpert to automatically suggesting code changes to improve performance.
2013 at Google
At Google, I worked with the CloudSQL team to improve the performance of MySQL running on Borg, Google's cluster manager. This work involved profiling and fixing problems in MySQL running industry-standard benchmarks like TPC-C.

Program Verification

2016 at Microsoft Research
I worked with members of the Project Everest group to implement a verified digital side-channel leakage analyzer using the Dafny program verifier. This work exposed me to writing basic proofs and lemmas for verifying non-interference.
2017 and 2018
I incorporated my learning from my time at Microsoft Research into my dissertation research. Specifically, I started working on proving the functional equivalence of programs before and after transformation by my compiler.

I also leveraged SMT solvers equipped with floating-point theory to prove the bounds on floating-point operations, which was useful in pruning the number of operations transformed by my research compiler for closing side channels.

Programming Microcontrollers

Early 2000s
Swapnil, a close friend who has since gone to run a leading 3D printing company, and I developed a series of tiny robots, which we programmed using Atmel and Microchip microcontrollers. The artifacts included toy robots such as line followers to industrial applications such as airflow monitors custom made for a fumehood manufacturing company.

Graphic Design

2010 onwards
Although I do not have any formal education in design, I have been trying to learn and practice good techniques for conveying information through visual media. Along these lines, I have developed style guides for presentations, created websites for non-profit organizations, and experimented with the typography and layout of my own website.

Since 2016, I have been writing HTML, CSS, and JS by hand, sometimes starting with a small template. This has helped me keep my websites lean, while still being functional and cross-browser compliant.