A compiler is a program which translates a program source code to an executable machine code. As the machine code is hardware and operating system dependant, machine vendors usually offer a suitable compiler for their hardware.

Furthermore different compilers are needed for the different programming languages. The Compute-Cluster User's Guide describes all installed compilers in detail.

Offered Programming Languages


Fortran (FORmularTRANslation) is the historic high performance programming language. There are still many Fortran projects around. Fortran handles multi-dimensional arrays comfortably. “C programs are the fastest” is usually not true. As C has very few syntax limitations, this often gives the compiler a hard time optimizing. The passing of pointers is in most cases the biggest handicap. More and more projects use C++, as it offers them a lot of programming comfort. However there are also performance pitfalls one should take care of.
Java is a widely used programming language, but due to performance issues in most cases not suited for high performance computing.
Other languages are rarely-seen in context of HPC, but yet you are also able to program in Python, Matlab et cetera.
 

Parallel Programming

Most compiler offer support for OpenMP shared memory parallelization directives. For the more general message passing approach MPI no compiler support is necessary.

Performance

The quality of a compiler and the use of suiting compiler flags greatly effect the execution speed of a program. Often a lot of money is invested into hardware, where it would be more cost efficient to invest in better software, e.g. compilers or operating systems. Furthermore often to little effort is spend on choosing the right optimization compiler flags.

Tuning Tips

Adept programming can greatly enhance the execution speed of a program, which e.g. requires knowledge in:

  • cost of different program constructs (e.g. creating objects, string comparison)

  • layout of data structures (e.g. arrays in C and in Fortran)

  • hardware design (size and layout of caches, Pipelining)

  • optimization abilities of the compiler (vercorisation, inlining, loop unrolling)

Further hints can be found in the tuning section of the Compute-Cluster User's Guide.

Do not hesitate to contact the HPC Team in case of any questions.

Seite: C Seite: C++ Seite: Fortran