Research

 

CSI ]   [ ETH ]


Lab Manager ]

LST Home ]     [ People ]     [ Research ]     [ Teaching ]
[ Publications ]     [ Research Opportunities ]     [ Partners & Supporters ]     [ Earlier Work ]

Exploiting Task-Order Information in Compilers for Shared-Memory Parallel Programs

Christoph Angerer,  Exploiting Task-Order Information in Compilers for Shared-Memory Parallel Programs, ETH Zurich. (Diss. ETH No. 20022), November 2011. [DISS_ETH_20022.pdf]
With the arrival of multicore systems, parallel programming is becoming increasingly mainstream. Writing correct parallel programs, however, has turned out to be difficult and prone to errors without proper support from the employed programming languages, compilers, and runtime systems. Over the last years, researchers and engineers have developed numerous abstractions and programming models that make developing parallel programs easier, safer, and more efficient. Despite the advances made in parallel programming models, libraries, and runtime systems, the corresponding compilers still remain largely ignorant of the parallelism exhibited by the program execution. In particular, current compilers do not have any knowledge about what tasks are scheduled when in the program and how they are ordered---even though many higher-level parallel programming models and libraries contain a wealth of task-order information that can be exploited by the compiler. Without task-scheduling knowledge, however, compilers are missing important optimization and verification opportunities. This dissertation explores how compilers for parallel programs with shared memory can gather and exploit knowledge about the scheduling of tasks at runtime. By analyzing potential orderings between tasks, the compiler can decide whether accesses to shared memory by different tasks may conflict and thus result in data races. We present a concrete schedule analysis that can extract task-ordering information from real-world programs. The schedule analysis can be combined with standard program analyses such as points-to and escape analyses to improve the precision of known optimizations as well as enable new optimizations. We present two case studies to evaluate the effectiveness of the schedule analysis. The first case study is an optimizing compiler for a version of Java that uses sequential consistency as its memory model. Sequential consistency solves many inconsistencies of the Java Memory Model. However, it comes at the cost of large runtime overhead, because it prevents many of the standard optimization techniques. Our compiler exploits task-order information to decide whether or not a program operation may conflict with a parallel task. If not, the compiler is allowed to aggressively apply all standard optimizations to this program part. The second case study is an optimizing compiler for a system with dynamic fractional permissions. In this system, every object is associated with a list of tasks that have read and/or write permission for the object. Tasks can grant read permission to subtasks by splitting their own permission into fractions and later collect those fractions back to re-gain the original permission. The overhead of checking permissions is reduced by an optimizing compiler that uses task-ordering information to minimize the places where permission checks must be inserted. In addition to the two case studies, we describe multiple smaller optimization and verification techniques that benefit from task-order information. While we do not present a thorough evaluation of those techniques, we do report anecdotal evidence where we have data available.
[ Publications ]     [ Research Opportunities ]     [ Partners & Supporters ]     [ Earlier Work ]