Software development

Lovelace offers many software packages to support software development.

Compilers

There are two main groups of compilers available for C, C++ and FORTRAN: Intel and GCC. Generally it works best to stick to one family of compilers, using matching maths libraries and MPI library.

Libraries

When building software a key decision is often whether you will be using Intel's Maths Kernel Library (MKL) or a selection of open-source alternatives. MKL can deliver very significant performance advantages on today's complex Intel Xeon processors.

MPI Libraries

We generally advise that you choose either Intel MPI or OpenMPI, although we do have other MPI implementations available.

Build Tools

The main options for build tools are make and cmake. For small projects we advise that you use make.

GNU make's website is https://www.gnu.org/software/make/.

Approaches to Parallel Programming

There are many ways to implement parallelism within programs. Describing them in depth is beyond the scope of this site but as a starting point we list the common options:

  • MPI - lots of (usually identical) processes communicating through messages.
  • OpenMP - annotating a program with comments advising the compiler on exploiting data-parallelism and loop-parallelism.
  • Vectorisation - data parallelism, most appropriate for work with numerical arrays.
  • Threading - spawning separate processes for computational tasks.
  •  GPU - essentially GPUs are large vector machines but the approach to describing this differs significantly between CUDA and OpenCL.
  • Auto-parallelisation - letting the compiler try to extract parallelism from your program. This is quick to try but please note that there might not be any potential parallelism present in your program for the compielr to exploit.

For running across multiple compute nodes MPI is usually the best option.