Atop the cluster hardware, Linux
provides system services, augmented
with parallel file systems (such as Lustre)
and batch schedulers (such as PBS and
SLURM) for parallel job management.
MPI and OpenMP are used for internode
and intranode parallelism, augmented
with libraries and tools (such as CUDA and
OpenCL) for coprocessor use. Numerical
libraries (such as LAPACK and PETSc) and
domain-specific libraries complete the
software stack. Applications are typically
developed in FORTRAN, C, or C++.