Skip to content
Snippets Groups Projects
intel-compilers.md 2.75 KiB
Newer Older
Lukáš Krupčík's avatar
Lukáš Krupčík committed
Intel Compilers 
===============

  

The Intel compilers version 13.1.1 are available, via module intel. The
compilers include the icc C and C++ compiler and the ifort fortran
77/90/95 compiler.

    $ module load intel
    $ icc -v
    $ ifort -v

The intel compilers provide for vectorization of the code, via the AVX
instructions and support threading parallelization via OpenMP

For maximum performance on the Anselm cluster, compile your programs
using the AVX instructions, with reporting where the vectorization was
used. We recommend following compilation options for high performance

    $ icc   -ipo -O3 -vec -xAVX -vec-report1 myprog.c mysubroutines.c -o myprog.x
    $ ifort -ipo -O3 -vec -xAVX -vec-report1 myprog.f mysubroutines.f -o myprog.x

In this example, we compile the program enabling interprocedural
optimizations between source files (-ipo), aggresive loop optimizations
(-O3) and vectorization (-vec -xAVX)

The compiler recognizes the omp, simd, vector and ivdep pragmas for
OpenMP parallelization and AVX vectorization. Enable the OpenMP
parallelization by the **-openmp** compiler switch.

    $ icc -ipo -O3 -vec -xAVX -vec-report1 -openmp myprog.c mysubroutines.c -o myprog.x
    $ ifort -ipo -O3 -vec -xAVX -vec-report1 -openmp myprog.f mysubroutines.f -o myprog.x

Read more at
<http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-lin/index.htm>

Sandy Bridge/Haswell binary compatibility
-----------------------------------------

Anselm nodes are currently equipped with Sandy Bridge CPUs, while
Salomon will use Haswell architecture. >The new processors are
backward compatible with the Sandy Bridge nodes, so all programs that
ran on the Sandy Bridge processors, should also run on the new Haswell
nodes. >To get optimal performance out of the Haswell
processors a program should make use of the special >AVX2
instructions for this processor. One can do this by recompiling codes
with the compiler flags >designated to invoke these
instructions. For the Intel compiler suite, there are two ways of
doing >this:

-   >Using compiler flag (both for Fortran and C): 
    -xCORE-AVX2. This will create a
    binary  class="s1">with AVX2 instructions, specifically
    for the Haswell processors. Note that the
    executable >will not run on Sandy Bridge nodes.
-   >Using compiler flags (both for Fortran and C): 
    -xAVX -axCORE-AVX2. This
    will >generate multiple, feature specific auto-dispatch
    code paths for Intel® processors, if there is >a
    performance benefit. So this binary will run both on Sandy Bridge
    and Haswell >processors. During runtime it will be
    decided which path to follow, dependent on
    which >processor you are running on. In general this
    will result in larger binaries.