Software development
Apollo offers many software packages to support software development.
MPI Libraries
We generally advise that you choose 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.