# Compiling on the crill cluster

All nodes on the crill and whale cluster share the home file system. Users can move therefore files to the front-end node without having to allocate a compute partition on crill/whale. It is strongly recommended to compile on the front end node.

Many packages are configured using some kind of script environment: the most popular are make and the GNU configure. These environments perform a number of tests to detect capabilities of the target system. The crill cluster has a mixture of nodes: the newer crill nodes have (of course) newer CPUs than the original nodes. Some of the detection tests look for processor-specific assembly instructions; thus compiling software on the crill nodes can, in some cases, result in libraries and executables that cannot run on the older shark nodes. A common symptom of this scenario is program runs aborting with illegal instruction errors.

## Temporary Directories

Each node has 3 temporary directories:

/var/tmp  :  persistent, disk-based
/tmp      :  not-persistent, disk-based
/fast-tmp :  volatile, memory-based


Usually, most programs will use /tmp to write temporary files e.g. GCC will create intermediate files here. You can redirect to e.g. /fast-tmp by setting the environment variable \texttt{TMPDIR} as follows:

smith@crill:~> export TMPDIR=/fast-tmp


## Compiling MPI applications

All MPI libraries have so-called wrapper compilers that automatically set the correct pathes and include the libraries required for MPI application. These wrapper compilers are typically called mpicc, mpif77, mpif90, mpiCC , and can be used similarly to a regular compiler. E.g to compile a C MPI code, you can simply use

smith@crill:~>mpicc -o simplecode simplecode.c


All compiler flags that are used without MPI can still be utilized with the MPI wrapper compiler. Note however, that you must use the same compiler that has been used to compile the MPI library. This is the reason that the modules of the MPI library are not just sorted by the name of the MPI library itself, but also by the compiler used to compile it.