Digital Agriculture: 21st century agriculture presents a number of major challenges and opportunities for researchers in computer science and engineering: heterogeneous data analysis, IOT and sensor networks, computer vision, robotics, edge computing, machine learning with limited and sparse data, and others. I lead the AIFARMS Institute, a National Artificial Intelligence Research Institute funded by NIFA and NSF, which is exploring foundational AI challenges and how they can play a role in tackling major agriculture research goals.
Edge Computing with HPVM, ApproxHPVM, and ApproxTuner: Many important and emerging application domains require increasingly powerful computing capabilities at the “edge of the network,” near the sensors, displays and actuators that interact with the physical world. Heterogenous computing with specialized accelerators and often system-on-chip designs are critical to deliver these computing capabilities under tight constraints on memory capacity, compute capacity, energy, power, weight, and heat dissipation. Building on the HPVM project, we are exploring how compilers, autotuners, and approximate computing techniques can be used to achieve these computing capabilities under such tight resource constraints. We are exploring the use of automatically tuned approximation algorithms to trade off small amounts of accuracy (or result “quality”) to achieve reduced energy or higher performance or both. We are focusing on three broad edge computing application domains: mobile robots in agriculture, autonomous vehicles, and distributed AR/VR systems.
Heterogeneous Parallel Virtual Machine: The slowdown of Moore’s Law and the end of Dennard scaling are putting an end to computing speed increases from general-purpose architectures and processor design techniques. Modern computing systems, ranging from smart speakers to mobile phones to laptops to the cloud, now rely on increasing numbers of specialized computing elements (or “accelerators”), such as GPUs, DSPs, FPGAs, image processors, cryptographic hardware, and — increasingly — tensor accelerators for machine learning. The major drawback of these heterogeneous systems is that they are highly challenging to program. The underlying hardware usually has diverse programming interfaces (both languages and instruction sets), differing forms of parallelism, different memory architectures, and even diverse, mutually incompatible programming tools that prevent developing unified applications that can use all components flexibly. In the HPVM project, we are developing a retargetable compiler infrastructure and parallel program representation for heterogeneous parallel systems, with the goal of making it much easier to write performance-portable parallel programs. A single program in the HPVM representation can be compiled to diverse hardware compute units in a heterogeneous system, using the HPVM program representation to target parallelism and data movement. Current targets include GPUs, CPUs with vector extensions, FPGAs, and custom accelerators for convolutional neural networks, FFT and Viterbi.
ALLVM: Exploring the benefits for software performance, security and reliability if all software on a system (either all userspace software or or userspace+OS software) is available in a rich virtual instruction set that can be analyzed and transformed by sophisticated compiler techniques (think Java bytecode, but for all software).
The LLVM Compiler Infrastructure: A novel virtual instruction set and compiler infrastructure that enables lifelong analysis and transformation of programs in arbitrary programming languages. The LLVM infrastructure has been distributed in open source form under a liberal license since October 2003. Since then it has been adopted by a large number of commercial and academic organizations, including many major commercial products. LLVM is also a key foundation for some of our other ongoing projects, including ALLVM and HPVM.
Deterministic-by-default Parallel Programming: Language and compiler techniques to make parallel programming far easier than it is today, by enabling programmers to write provably deterministic parallel programs, and by enforcing that any non-deterministic behavior is made explicit and isolated.
SVA: Secure Virtual Architecture: A compiler-based virtual machine for commodity operating systems that can greatly enhance the security and reliability of today’s systems.
SAFECode: Compiler techniques to enforce memory safety and other safety properties efficiently for unmodified C programs.
Automated Debugging for Software Failures: We are developing automated static and dynamic analysis techniques to understand the causes of failures in software systems, in order to help programmers diagnose and fix software bugs with as little effort as possible. The project is investigating automated fault localization and diagnosis techniques for both standalone and distributed programs.
Information for Prospective Students
If you are interested in joining our research group, please read the following.
I am always looking for outstanding graduate or undergraduate students for the projects listed above. More than anything else, I am looking for students who are (a) creative and intellectually strong, and (b) ambitious and hard-working.
I take on undergraduates, Masters (MS) students and Ph.D. students. I can generally give Research Assistantships only to Ph.D. students because our research funding is nearly always intended for long term research projects that require a sustained effort over several years. Note that if you join our group as a Ph.D. student, you should not expect to stop after 1.5 or 2 years with an MS degree: the research projects will generally not be appropriate for an MS thesis, which is relatively narrow research.
I am willing to take on students interested in an MS for shorter term projects. An MS thesis nearly always must be publishable research, though in exceptional circumstances, I think an MS might be justified for development or experimental work that contributes significantly to one or more of our projects.
I am always looking for outstanding undergraduate students interested in research and/or programming experience. I have taken on students ranging from seniors to freshmen: what I look for is someone with an interest in experimental software research, and the drive to work hard and succeed.
If you fit these criteria, send me email with a subject line that has the prefix:
“[Prospective Student] ”
Or, use this link to send me email — just so I know you have read this (I am not filtering such email!). Include an up-to-date CV or resumé, and say what degree you seek and what project(s) in our group interest you. I will contact you if I want to follow up. I get a lot of such email, so do not take it personally if I do not reply.
Thanks for your interest!