Teaching.
I teach a variety of courses in the area of
software systems design,
spanning the low level details of operating systems kernels, compilers and interpreters
for languages, and large scale distributed systems that span thousands of machines around
the world. In all of my courses, students gain substantial experience in designing,
building, and troubleshooting robust software from beginning to end.
(read more)
Research.
My research focuses on the design of software systems for large scale distributed computing.
We design new programming models and runtime systems that can scale up to thousands of
machines organized into clusters, clouds and grids. Running at this scale requires solving
challenging problems in fault tolerance, resource management, predictive modeling, and more.
Such systems are essential for the conduct of science today, spanning fields such as high
energy physics, computational biology, economic modeling, machine learning, and many more.
(read more)
Software.
To conduct research into large scale distributed systems,
hands-on experience is a must. My team in the
Cooperative Computing Lab
design software
systems, run them daily on thousands of machines at the ND Center for Research Computing,
and deploy applications to leadership class machines at national labs. Our open-source
software is engineered, battle-tested, and production ready so that it can be used reliably
around the world for advanced discovery.
(read more)