OverviewManticore is a compiler and runtime system for a language that is a parallel dialect of Standard ML. As we focus on providing a simple language to the user that transparently takes advantage of the increasing cores of machines, most of our research is on compiler and runtime techniques for creating efficient programs that scale dynamically based on the computing environment. All projects involve an initial period of learning the entire toolchain through creation of a benchmark program and analysis of its performance by tracing the program from the initial source through each processing phase to the resulting assembly code. After that is complete, we then move on to a project that answers a research question, such as the ones below.
The final phase of a compiler involves producing a form of systems-level assembly code and then creating the binary file. Today, we use a very old compiler framework, but we would like to move to LLVM, a modern compiler framework that is being broadly adopted both in research and industry. We anticipate opportunities to gain performance through generation of efficient code for function calls and identifying places where we can generate vectorized instructions, which perform many arithmetic operations in the same time as a single one.
Loop unrolling in a managed, functional language provides even more opportunities for optimization, as in addition to some bounds check removals we can also remove redundant garbage collection checks. But, in a functional language, we need to do extra analysis in the compiler to detect the loops, since there is no "for" loop construct and they must be reconstructed from the control-flow graph of the program. This work will involve creating scalable graph analysis algorithms to detect loops along with code to unroll them.
Control-flow analysis answers the question: at each function call in this program, what is the set of possible functions that could be called? We have recently created an increased-precision version of this analysis that we believe make several novel optimizations available. These optimizations might help to reduce the overheads of a functional programming style, and none of them are currently implemented in other functional compilers.