C, C++ and Fortran are supported on the Owens cluster. Intel, PGI and GNU compiler suites are available. The Intel development tool chain is loaded by default. Compiler commands and recommended options for serial programs are listed in the table below. See also our compilation guide.
The Haswell and Broadwell processors that make up Owens support the Advanced Vector Extensions (AVX2) instruction set, but you must set the correct compiler flags to take advantage of it. AVX2 has the potential to speed up your code by a factor of 4 or more, depending on the compiler and options you would otherwise use.
In our experience, the Intel and PGI compilers do a much better job than the GNU compilers at optimizing HPC code.
With the Intel compilers, use
-O2 or higher. With the GNU compilers, use
-O3. The PGI compilers by default use the highest available instruction set, so no additional flags are necessary.
This advice assumes that you are building and running your code on Owens. The executables will not be portable. Of course, any highly optimized builds, such as those employing the options above, should be thoroughly validated for correctness.
|LANGUAGE||INTEL EXAMPLE||PGI EXAMPLE||GNU EXAMPLE|
|C||icc -O2 -xHost hello.c||pgcc -fast hello.c||gcc -O3 -march=native hello.c|
|Fortran 90||ifort -O2 -xHost hello.f90||pgf90 -fast hello.f90||gfortran -O3 -march=native hello.f90|
|C++||icpc -O2 -xHost hello.cpp||pgc++ -fast hello.cpp||g++ -O3 -march=native hello.cpp|
OSC systems use the MVAPICH2 implementation of the Message Passing Interface (MPI), optimized for the high-speed Infiniband interconnect. MPI is a standard library for performing parallel processing using a distributed-memory model. For more information on building your MPI codes, please visit the MPI Library documentation.
Parallel programs are started with the
mpiexec command. For example,
The mpiexec command will normally spawn one MPI process per CPU core requested in a batch job. Use the
-ppn option to change that behavior.
The table below shows some commonly used options. Use
mpiexec -help for more information.
||One process per node|
||procs processes per node|
||At most totalprocs processes per node|
||Prepend rank to output|
||Get a list of available options|
The Intel, PGI and GNU compilers understand the OpenMP set of directives, which support multithreaded programming. For more information on building OpenMP codes on OSC systems, please visit the OpenMP documentation.
160 Nvidia P100 GPUs are available on Owens. Please visit our GPU documentation.