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).