CERN openlab II - Platform CC -
Optimization
The Compiler Project
The compiler project originates from
the fact that almost all LHC programs (simulation,
reconstruction, data analysis, and so on) are written by
ourselves. One way of improving the performance of such
programs on a broad front is to work with the compiler
writers to seek improvements that will have a broad impact
on our source codes.
openlab-I
The project started between CERN and
Intel, Santa Clara in
openlab-I as a targeted effort to improve the performance of
our C++ programs on the 64-bit Itanium platform using the
Intel C++ compiler. Test programs, such as the
Geant4 EM
tests and the ROOT stress
tests, were used as benchmarks. The chosen methodology was
typically an analysis of generated machine-code sequences
from relevant source code sections. Since the Itanium
processor executes all instructions in-order, it is
relatively easy to deduce how the processor will execute a
given code sequence, with the result that improvements
identified on paper normally lead to corresponding
improvements in real life. One caveat is the fact that the
memory subsystem is weakly ordered and operates
asynchronously. (Note that the same methodology cannot be
applied to out-of-order processors with the same ease).
Some of typical focus areas have been:
-
Pointer disambiguation
-
Devirtualization of methods
-
Optimization of memory
setting and memory copying
-
Efficient use of
speculative loading of data members
-
Loop optimizations (mainly
through software pipelining)
Snippets
With the help of several openlab summer
students we started creating test jobs around the most
interesting pieces of source code (typically representing a
few methods of a class or two), so that the codes could be
used for various “lab experiments” without having to cope
with all of
Geant4 or all of ROOT
for a simple test of a new hypothesis. Today there are 16
snippets (with more to come) covering areas, such as
navigation in geometries, transformations between coordinate
systems, random number generation, sparse matrix
multiplications, I/O buffer management (including byte
swapping), etc. An unexpected use of the snippets is to
carry out quick regression testing of new compiler versions.
openlab-II
In openlab II the compiler effort has broadened in the
following way;
-
The project
now concentrates on the 64-bit Xeon as well as the
64-bit Itanium (with the caveat already mentioned
concerning out-of-order execution)
-
Other
compilers are being involved, such as
g++ and
Open64 (Note that an
established contact with the compiler writers was a
prerequisite for this addition)
-
Small assembly
routines are occasionally generated to demonstrate upper
limits of potential compiler improvements
|