|
Compiler Techniques for High Performance Sequentially Consistent Java Programs
Zehra Sura1, Xing Fang2, Chi-Leung Wong3, Samuel P. Midkiff2,
Jaejin Lee4 and David Padua3
1 IBM T.J. Watson Research Center, USA
2 Purdue University, USA
3 University of Illinois at Urbana-Champaign,
USA
4 Seoul National University, Korea
The rise of Java, C#, and other explicitly parallel languages
has increased the importance of compiling for different software
memory models. In this work, we aim to assess the performance
impact of using sequential consistency as the Java memory model.
We use co-operating escape analysis, thread structure analysis,
and delay set analysis that enable high performance for
sequentially consistent programs. Escape analysis determines
references to memory locations that may be accessed by multiple
threads. Synchronization analysis determines orders on shared
memory accesses enforced by synchronization in the source
program. Delay set analysis determines pairs of shared memory
accesses in a thread that, subject to memory model requirements,
must be constrained to execute in the same sequential order that
they occur in the source program. We describe fast and
effective algorithms for delay set analysis and synchronization
analysis, and implement them in the IBM Jikes Research Virtual
Machine compiler (an open-source, just-in-time Java compiler).
We compare the performance of a set of Java programs compiled for
sequential consistency with the performance of the same programs
compiled for weak consistency. For sequential consistency, we
observe a slowdown of 10% on average for an architecture based on
the Intel Xeon processor, and 26% on average for an architecture
based on the IBM Power3. Moreover, 7 of 10 programs on the Xeon
platform, and 8 of 10 programs on the Power3 platform, show a
performance loss of 7% or less.
|