Andrew

I'm a second-year PhD student at the University of Washington's Computer Science & Engineering Department. I'm advised by Michael Ernst and Simon Kahan, studying a variety of techniques for scientific computing. I hold a B.S. in computer science & mathematics from Harvey Mudd College, where I worked with (a number of people including but not limited to) Nicholas Pippenger, Melissa O'Neill, and Christopher Stone.

My research is aimed at letting mathematicians and scientists quickly and effectively solve problems. I am interested in a wide spectrum of projects along the theory-systems axis that achieve this overarching goal, from deriving new mathematical techniques amenable to efficient implementation, to optimizing existing algorithms on modern architectures. I've also been known to try my hand at complexity theory, modern language design, formal logic, and pure mathematics. I'm actively seeking new projects, so if you have something interesting and computational to do, drop me a line.

My CV is available here. I maintain presences at Twitter, LinkedIn, and Google Buzz. This page was last updated April 2011.

Research interests and papers

  • Multigrid on GPUs: GPUs are fast in theory, but difficult to program at all and even harder to fully exploit. I've worked on OpenCurrent's multigrid solver for Poisson's equation, a well-studied problem used heavily in scientific applications, trying to improve the usage of memory bandwidth (the main bottleneck.)
  • Sparse matrix orderings: A perennial interest of mine are the family of matrix reordering algorithms---fill minimization, bandwidth reduction, graph partitioning---used in sparse linear algebra and related applications. In undergrad, I investigated bandwidth reduction with Tzu-Yi Chen, and the minimum degree algorithm is still my favorite hard to parallelize, highly irregular graph algorithm.
  • Path search problem: I wrote my HMC senior thesis (supervised by Nicholas Pippenger) on the path search problem: given a graph representing lines in a communication network, where each line is probabilistically available or busy, in what cases can we efficiently find a path through the network? In what cases can we efficiently demonstrate no path exists? Our paper in submission to Networks is here.
  • Haskell age profiling: a very interesting question to garbage collector designers is the distribution of lifetimes of heap objects. As part of the HMC CS REU, I wrote a lightweight system allowing easy computation of approximate lifetimes for all objects allocated in a program, without modifying source code at all or language runtime anywhere but the garbage collector.

Contact

Email (best):
a h h {at} cs.no.spam.washington.edu
Cell (rarely on):
413.570.0499
Office (irregular) :
Paul G. Allen Center, Office 503
Post (seriously?):
UW CSE Box 352350, Seattle, WA 98195-2350
My Google Calendar controls my life, and you can see it here. If you'd like to schedule something with me, please send me a calendar invitation. 12-4 Monday to Friday is best.