Research Interests

I am a computer scientist studying programming technology for data-processing, especially for deterministic data processing. My expertise is in all aspects of the programming-language implementation process, particularly for parallel and distributed languages. My previous work includes: (1) compilers for embedded architectures and GPU accelerators; (2) statically and dynamically-enforced deterministic execution of programs; and (3) low-overhead concurrent binary instrumentation, which can drive profiling and sandboxing

Here at Indiana, I am a member of PL Wonks, and was part of the Center for Research in Extreme Scale Technologies, or CREST.


These are links to ongoing research and software projects:

  • System-level Determinism: See our OOPSLA'17 and a recent draft paper for our take on process-level, user-space deterministic parallelism.
  • Lightweight binary-instrumentation: See our PLDI'16 and PLDI'17 papers for our approach to probing a multi-threaded application without stopping it.
  • Compiling code to work on serialized data: See our ICFP'15, ECOOP'17, and PLDI'19(A) papers about representing data in a dense, contiguous form, but compiling regular code to work with it anyway.
  • LVars and LVish: code here, and a paper here -- extending the reach of guaranteed-deterministic parallel computing and exploring a new class of quasi-deterministic languages. Applications include bioinformatics, such as our PhyBin software. This work is supported by NSF award #1218375.

Past Projects

Research group members

An up-to-date list of group members (with links to their pages) can be found in my CV.

Prospective Students

If you are interested in any ongoing projects mentioned on this page, or the list of potential projects here, or other related topics, look at my calendar and email me to set up a meeting. Or just come find me! Also, taking a course with me or looking at some of the materials linked from this site are good ways to get a sense for what I work on.

Other Software

Many of these are simple utilities that I've written for my own convenience. If you know of common unix commands that accomplish the same behavior let me know -- I missed them!

  • wordsetdiff: Simple utility to compare file contents, treating files as unorded collections of N-tuples of words. Source here (haskell), also binaries for Mac and for 64 bit Linux.
  • ds: A somewhat more precise and portable replacement for the unix du utility. It lists the exact number of bytes in files, disregarding symlinks and directories---anything that might differ between platforms. You can probably accomplish this with ls and a little summing. I use this utility almost every day for quickly confirming that I have successfully unisoned directories across different operating systems. OCaml sources here), also binaries for Mac and for Linux (32 bit). The source package also includes a similar mods utility for summarizing the modtimes in directories.
  • PhyBin: Cluster unrooted Newick tree files by tree topology.

Hackage Links: Here's a list of links for some of the packages I've released, contributed to substantially, or maintain on Hackage. You can see a fuller list on my github account.

Blog Entries

Below are some blog posts of mine. I used Yahoo Pipes and feedburner to aggregate my posts from different locations into one feed that is available here. Specifically, this is the union of my personal blog and my posts on the Intel Software Netork.