Skip to content
Snippets Groups Projects
intel-compilers.md 2.75 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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.