Scientific Computing & Visualization
Help Contact
About Accounts Computation Visualization Documentation Services

Programming for the Linux Cluster

The primary purpose of the SCV Linux Cluster is to run multiprocessor applications. The system consists of 1 login nodes, cootie.bu.edu, and 30 compute nodes. The login node is for code development and compilation, while the compute nodes are dedicated to serial and multiprocessor batch processing.

Before proceeding to compile your code, be sure to go to the Code Porting page first to see if there are any hardware or software constraints that might affect your code. If your code requires external packages (e.g., linear algebra subroutines ), go to the Packages page to see what is available. On the Cluster, all multiprocessor jobs must be submitted to the batch system to run on the back-end. This topic is covered in the Running Jobs page.

Compile  

The primary means for multiprocessing on the Cluster is MPI. Technically, OpenMP is also supported. However, because shared-memory support is limited to the 2 processors within each node, running a code parallelized with OpenMP alone is not practical.

There are several C and Fortran compilers from different vendors available on the Cluster. Overall, they perform comparably, both in single processor and multiprocessor (MPI) modes. Hence, the compiler choice should probably be based on your familiarity and preference, rather than on performance grounds. However, if you use a compiler's automatic parallelization feature, it is possible that one compiler may be more effective than another. This is highly code-dependent.

In addition, there may be more than one version of a vendor's compiler available on the system at any given time. To see which versions of compilers are currently selected by the system, use the command:

cootie:~ % module list
Currently Loaded Modulefiles:
  1) gcc/3.4.5(default)
  2) intel/9.0(default)
  3) mpichgm/1.2.6..14b_gcc(default:mpich-gcc)

For users who prefer to use the system's default compilers, no action is required. For users who prefer to use a specific version of a compiler, there are three approaches.

If your code does not require a specific compiler, then the first approach is to simply use the system default compilers (i.e., GNU compilers). In this case, you don't have to take any action. On the other hand, if you must use a particular compiler, then you may want to consider one of the two approaches below.

The second approach is to find out where the particular compiler resides and provide the exact path for it when you use it -- thereby bypassing the system default. The advantage of this method is that you know exactly what you are using.

The third approach is to override the system default via the module command. The advantage of this method, especially if you make the selection via the module command in your starting shell script, is essentially that you picked your own default compiler and no absolute path needs to be provided.

Shown below is a table which includes all of the available compilers with details on two key parallel features: OpenMP and MPI.

Language    Serial File Suffix MPI OpenMP      
Fortran 77 ifort* .f mpif77 ifort -openmp
  g77 .f, .F, .for, .FOR, .fpp, .FPP mpif77  
Fortran 90 ifort .f,.f90 mpif90 ifort -openmp
C icc .c mpicc icc -openmp
  gcc† .c mpicc  
C++ icc .c mpiCC icc -openmp
  g++ .c mpiCC  
* The leading character, "i", represents an Intel compiler.
†   GNU C compiler. This is the system default C ( cc) compiler.

Scratch Space Usage  

Each Cluster node has its own /scratch filesystem. These filesystems are intended to be used for temporary storage space by a local compute node. You can access a remote scratch space via the pathname "/net/nodexxx/scratch", where xxx is the node number. Please note that scratch files older than 10 days are automatically removed by the system. Files in /scratch are NOT BACKED UP.

In regards to using scratch space, you should use only the local scratch whenever possible as it will be more efficient than accessing scratch of another node. Here are some additional details on /scratch:

  • If you are on a node, a reference to /scratch automatically points to the local node's /scratch, which is equivalent to /net/`hostname`/scratch.
  • From any of the compute nodes, you will NOT be able to access either Skate or Cootie's scratch.
  • You CANNOT access cootie scratch from skate or vice versa.
  • To access cootie or skate's own (local) scratch, type "cd /scratch" at system prompt.

Programming Tools

Boston University
Boston University
 
OIT | CCS | September 15, 2009  
Scientific Computing & Visualization Boston University home page Boston University home page