Press Corner

Press Releases

Press Coverage

Multimedia Corner

Partners' Spotlights


Annual Reports


Technical Documents



openlab Phase III

Automation Controls CC

Database CC

Networking CC

Platform CC

Previous Phases


Education Corner


Student Programme

What is it?

How to apply-2012



About CERN openlab

What is it?


Guiding Principles


openlab II

Platform CC



Grid IC



Database CC

Networking & Security


openlab I



LCG on Itanium 2



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.


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)



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.



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