Interprocedural Load Elimination for Dynamic Optimization of Parallel Programs

Rajkishore Barik and Vivek Sarkar

Load elimination is a classical compiler transformation that isincreasing in importance for multi-core and many-core architectures.The effect of the transformation is to replace a heap access, such asa read of an object field or an array element, by a read of acompiler-generated temporary that can be allocated in faster and moreenergy-efficient storage structures such as registers and localmemories (scratchpads). Unfortunately, current just-in-time anddynamic compilers perform load elimination only in limited situations.Specifically, there are two major challenges that need to be overcometo make load elimination more broadly applicable in dynamiccompilation. First, load elimination must be parallelism-aware i.e.,must be extended to take parallel constructs into account. Second,load elimination must be performed interprocedurally i.e., must beextended to take into account the side effects of method calls.In this paper, we introduce an interprocedural load eliminationalgorithm suitable for use in dynamic optimization of parallelprograms. The main contributions of the paper include: a) support forload elimination in the presence of three core parallel constructs --async, finish, and isolated, b) side-effect analysisof method calls, c) a weak isolation memory model thatestablishes the legality of our load elimination transformation forparallel constructs, and d) performance results to study the impact ofload elimination on a set of standard benchmarks using animplementation of the algorithm in Jikes RVM for optimizing programswritten in a subset of the X10 v1.5 language.

Back to Program