I work on parallelism and functional programming. In my lab, the two main things we work on are:
- Extending the scope of deterministic parallelism. That is, we're asking "how much can you do outside of the IO monad".
- Implementing DSLs for high-performance, high-programmer-productivity parallelism, mostly targeting GPUs and/or stream processing.
Ultimately, I want to see how high-level models of computation can enable performance portability — for example, across today's parallel platforms and tomorrow's radical new parallel architectures. In the past, I have targeted sensor networks as an emerging parallel/distributed platform (Regiment & WaveScope).
- (Ph.D.) Lindsey Kuper -- research scientist at Intel Labs, Programming Systems Lab
- (M.S.) Adam Foltzer -- now a reseach engineer at Galois, Inc
- (B.S.) Chris Zakian -- now at Amazon
- (B.S.) Eric Jiang
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.
These are links to ongoing research and software projects:
- LVars and LVish: code here, recent 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.
- FLOOD and Flange: these are ongoing DSL projects, supported by NSF awards #1337242 and #1320659. More info to come.
- Wavescope/WaveScript: website here.
- Intel Concurrent Collections: website here.
- Haskell CnC: on Hackage, on github.
- CnC Spec Compiler: on Hackage, on github.
- Embedded Domain Specific Languages for Performance: Including ArBB-VM for Haskell and the Accelerate backend built on it.
- Bringing IVars to Modern Parallel Programming Environments: Including via the Monad Par package.
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.