UofT Jasmine Compiler Project
Compiler Optimizations for Locality and Parallelism for Scalable
Shared Memory Multiprocessors
The goal of the Jasmine project is to investigate new code and data transformations for enhancing cache and memory locality while preserving existing parallelism in programs. Today's parallelizing compilers are capable at detecting loop-level parallelism, but the performance of the parallel code they produce is typically poor. This is particularly true for scalable shared-memory multiprocessors, where the physically-distributed shared memory and reliance on high-speed caches dictate careful attention to memory and cache locality. Today's parallelizing compilers typically abandon locality for the sake of greater parallelism. We have developed a number of techniques to address this problem:
The Jasmine compiler uses Polaris as infrastructure to implement and evaluate the new transformations. Polaris provides a robust base for detecting parallelism in programs. Jasmine extends his base by adding passes that implement the new transformations. These passes utilize the rich analysis performed by Polaris. We found Polaris extensible and easy and use. We have incorporated minor enhancements to the Polaris infrastructure.
The compiler currently targets two platforms under development at the University of Toronto: the NUMAchine shared memory multiprocessor and the POW network of workstations.