====== Compilers and Libraries ====== Describes how to use the compiler and libraries on a Large-Scale Parallel Computing Server. ===== Compiler ===== Following compilers are available on the supercomputer.\\ ^Compiler ^Version ^Notes ^ |Cray Compiler Fortran/C/C++ |8.7.10\\ 8.6.5 |default: 8.6.5 | |Intel Compiler Fortran/C/C++ |19.1.3.304\\ 19.1.0.166\\ 19.0.2.187\\ 18.0.2.199\\ 17.0.4.196 |default: 18.0.2.199 | |PGI Compiler Fortran/C/C++ |19.1-0\\ 18.5-0 |default: 19.1-0 | |GNU Compiler Fortran/C/C++ |4.9.3\\ 5.3.0\\ 6.1.0\\ 7.3.0\\ 8.3.0 |default: 7.3.0 | ------ ==== Programming environment ==== \\ **Command**\\ The command names of the Fortran, C, C ++ compiler are unified to ftn, cc, and CC.\\ The compiler called by the command will switch automatically by switching the programming environment.\\ ^Compiler ^Command ^Cray Compiler ^Intel Compiler ^PGI Compiler ^gnu compiler ^ |Fortran |ftn |crayftn |ifort |pgf90 |gfortran | |C |cc |craycc |icc |pgcc |gcc | |C++ |CC |crayCC |icpc |pgc++ |g++ | Use ftn, cc, CC command in the case compiling MPI programs.\\ MPI libraries are linked automatically. \\ **Switching programming environment**\\ The module files is as follows.\\ ^Cray compiler ^Intel compiler ^PGI compiler ^gnu compiler ^ |PrgEnv-cray |PrgEnv-Intel |PrgEnv-pgi |PrgEnv-gnu | Switch the programming environment with the module switch command.\\ PrgEnv-cray is default.\\ To switch to the Intel compiler, execute as follows. $ module switch PrgEnv-cray PrgEnv-intel \\ **Common options**\\ The following options are common to all programming environments.\\ ^Option ^Description ^ |-craype-verbose |Display set options. | |-static |Set static linking. | |-dynamic |Set dynamic linking. | |-shared |Make shared library. | |-help |Display available options in the loaded programming environment. | ------ ==== Cray Compiler ==== \\ **Setting of program environment**\\ Cray compiler is the default one on super.\\ If you want to change the compiling environment to other, execute a following command.\\ \\ ・Example change to the environment of Intel compiler. $ module switch PrgEnv-intel PrgEnv-cray \\ If you want to change the compiler version, execute a following command.\\ \\ ・Example change the compiler version $ module avail cce cce/8.6.5(default) cce/8.7.10 $ module switch cce cce/8.7.10 \\ **Compile Options**\\ \\ ・Optimization Options ^Option ^Description ^ |-o outfile |Set output file. If ‘-o’ option is not specified, the default output file is a.out.| |-llibrary_name |Specify libraries to be linked. | |-Llibrary_path |Specify paths to be searched for the libraries. | |-h autothread |Enables auto threading (default: disabled) | |-h omp/noomp |Enable / disables OpenMP directives. (default: enabled) | |-h thread[0-3] |Specify optimization level of OpenMP (3:Full optimization, default is 2) | |-O [0-3] |Specify automatic threading level. (3:Highest level, default is 2) | |-h ipa[0-5] |Specify the level of interprocedural optimization. | \\ ・Options for Fortran ^Option ^Description ^ |-e0 |Initialize undefined local stack variables to 0. | |-ev |Assign variables to stack (There are exceptions.) | |-ez |Initialize the memory allocated by allocate() statements to zero. | |-f [free|fixed] |Set the format of source files. | \\ ・Options for C ^Option ^Description ^ |-h c99 |Compile with C99 standard manner. | |-h noc99 |Compile without C99 standard manner. | |-h zero |Initialize undefined local stack variables to 0. | \\ ・Debugging options ^Option ^Description ^ |-g |Output debugging information. | |-G [0-2] |Manage debugging information. (0: Most detailed. -G0=-g) | |-K trap=... |Trap exception handling. [fp | divz | denorm | ... ] | \\ **Example**\\ \\ ・Make the execution module ’hello.out’ from the Fortran source file ’hello.f.’ in fixed form. $ ftn -f fixed -o hello.out hello.f \\ ・Make the execution module ’hello.out’ from the Fortran source file ‘hello.f90’ in free form. $ ftn -f free -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' auto-threaded from the Fortran source file 'hello.f' in fixed form. $ ftn -h autothread -f fixed -o hello.out hello.f \\ ・Make the execution module 'hello.out' auto-threaded from the Fortran source file 'hello.f90' in free form. $ ftn -h autothread -f free -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' from the C source file 'hello.c'. $ cc hello.c -o hello.out \\ ・Make the execution module 'hello.out' auto-threaded from the C source file 'hello.c'. $ cc -h autothread hello.c -o hello.out \\ ・Make the execution module 'hello.out' from the C++ source file 'hello.cpp'. $ CC hello.cpp -o hello.out \\ ・Make the execution module 'hello.out' auto-threaded from the C++ source file 'hello.cpp'. $ CC -h autothread hello.cpp -o hello.out ------ ==== Intel Compiler ==== \\ **Setting of program environment**\\ Change the program environment by the following line, because Cray compiler is default on super.\\ \\ ・Example change to the environment of Intel compiler. $ module switch PrgEnv-cray PrgEnv-intel \\ If you want to change the compiler version, execute a following command.\\ \\ ・Example change the compiler version $ module avail intel intel/17.0.4.196 intel/18.0.2.199(default) intel/19.0.2.187 intel/19.1.0.166 $ module switch intel intel/19.0.2.187 \\ **Compile Options**\\ \\ ・Optimization options and others ^Option ^Description ^ |-o outfile |Set output file. If ‘-o’ option is not specified, the default output file is a.out. | |-llibrary_name |Specify libraries to be linked. | |-Llibrary_path |Specify paths to be searched for the libraries. | |-O0|-O1|-O2|-O3 |Set optimizing options. -O2 is default. | |-fast |Set the whole program execution speed maximum. The following options are set automatically.\\ -ipo、-O3、-no-prec-div、-static、-fp-model fast=2、-xHost | |-parallel |Compile the input source file enabling auto-threading. | |-openmp |Compile the input source file enabling OpenMP. | \\ ・Options for Fortran ^Option ^Description ^ |-free|-fixed |Set the format of source files. | \\ ・Debugging Options ^Option ^Description ^ |-g |Output debugging information. | |-traceback |Output traceback when an error occurs. | |-fpe[0-3] |Trap exception handling. (-fpe0 is most detailed) | \\ **Example**\\ \\ ・Make the execution module 'hello.out' from Fortran source file 'hello.f' in fixed form. $ ftn -fixed -o hello.out hello.f \\ ・Make the execution module ’hello.out’ from the Fortran source file ‘hello.f90’ in free form. $ ftn -free -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' auto-threaded from the Fortran source file 'hello.f' in free form. $ ftn -fixed -parallel -o hello.out hello.f \\ ・Make the execution module 'hello.out' auto-threaded from the Fortran source file 'hello.f90' in free form. $ ftn -free -parallel -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' from C source file 'hello.c'. $ cc -o hello.out hello.c \\ ・Make the execution module 'hello.out' auto-threaded from C source file 'hello.c'. $ cc -parallel -o hello.out hello.c \\ ・Make the execution module 'hello.out' from the C++ source file 'hello.cpp'. $ CC -o hello.out hello.cpp \\ ・Make the execution module 'hello.out' auto-threaded from the C++ source file 'hello.cpp'. $ CC -parallel -o hello.out hello.cpp ------ ==== PGI Compiler ==== \\ **Setting of program environment**\\ Change the environment by the following line, because Cray compiler is default on super.\\ \\ ・Example change from environment of Cray compiler $ module switch PrgEnv-cray PrgEnv-pgi \\ If you want to change the compiler version, execute a following command.\\ \\ ・Example change the compiler version $ module avail pgi pgi/18.5 pgi/19.1(default) $ module switch pgi pgi/18.5 \\ **Compile Options**\\ \\ ・Optimization Options and Others ^Option ^Description ^ |-o outfile |Set output file. If ‘-o’ option is not specified, the default output file is a.out. | |-llibrary_name |Specify libraries to be linked. | |-Llibrary_path |Specify paths to be searched for the libraries. | |-O0|-O1|-O2|-O3|-O4 |Set optimizing options. -O2 is default. | |-fast |Enable general optimization flag. | |-Mconcur |Compile the input source file enabling auto threading. | |-mp |Compile the input source file enabling OpenMP. | \\ ・Option for Fortran ^Option ^Description ^ |-Mfree|-Mfixed |Set Specify program format of free or fixed. | \\ ・Debugging options ^Option ^Description ^ |-g|-gopt |Output debugging information. | \\ **Example**\\ \\ ・make the execution module 'hello.out' from the Fortran source file 'hello.f' in fixed form. $ ftn -Mfixed -o hello.out hello.f \\ ・make the execution module 'hello.out' which is autothreaded from the Fortran source file 'hello.f' in fixed form. $ ftn -Mfixed -Mconcur -o hello.out hello.f \\ ・make the execution module 'hello.out' using OpenMP from the Fortran source file 'hello.f' in fixed form. $ ftn -mp -Mfixed -o hello.out hello.f \\ ・Make the execution module ’hello.out’ from the Fortran source file ‘hello.f90’ in free form. $ ftn -Mfree -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' auto threaded from the Fortran source file 'hello.f90' in free form. $ ftn -Mfree -Mconcur -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' using OpenMP from the Fortran source file 'hello.f90' in free form. $ ftn -mp -Mfree -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' from C source file 'hello.c'. $ cc -o hello.out hello.c \\ ・Make the execution module 'hello.out' which is auto-threaded from C source file 'hello.c'. $ cc -Mconcur -o hello.out hello.c \\ ・Make the execution module 'hello.out' using OpenMP from C source file 'hello.c'. $ cc -mp -o hello.out hello.c \\ ・Make the execution module 'hello.out' from the C++ source file 'hello.cpp' $ CC -o hello.out hello.cpp \\ ・Make the execution module 'hello.out' auto threaded from the C++ source file 'hello.cpp'. $ CC -Mconcur -o hello.out hello.cpp \\ ・Make the execution module 'hello.out' using OpenMP from the C++ source file 'hello.cpp'. $ CC -mp -o hello.out hello.cpp ------ ==== GNU Compiler ==== \\ **Setting of program environment**\\ Change the program environment by the following line, because Cray compiler is default on super.\\ \\ ・Example change to the environment of Intel compiler. $ module switch PrgEnv-cray PrgEnv-gnu \\ If you want to change the compiler version, execute a following command.\\ \\ ・Example change the compiler version $ module avail gcc gcc/4.9.3 gcc/5.3.0 gcc/6.1.0 gcc/7.3.0(default) gcc/8.3.0 $ module switch gcc gcc/8.3.0 \\ **Compile Options**\\ \\ ・Optimization options and others ^Option ^Description ^ |-o outfile |Set output file. If ‘-o’ option is not specified, the default output file is a.out. | |-llibrary_name |Specify libraries to be linked. | |-Llibrary_path |Specify paths to be searched for the libraries. | |-O0|-O1|-O2|-O3|-O4 |Set optimizing options. -O2 is default. | |-fopenmp |Compile the input source file enabling OpenMP. | \\ ・Options for Fortran ^Option ^Description ^ |-ffree-form|-ffixed-form |Set the format of source files. | \\ ・Debugging options ^Option ^Description ^ |-g |Output debugging information. | |-g0|-g1|-g2|-g3 |Manage debugging information.(-g2 = -g) | \\ **Example**\\ \\ ・Make the execution module 'hello.out' from Fortran source file 'hello.f' in fixed form. $ ftn -ffixed-form -o hello.out hello.f \\ ・Make the execution module ’hello.out’ from the Fortran source file ‘hello.f90’ in free form. $ ftn -ffree-form -o hello.out hello.f90 \\ ・Make the execution module 'hello.out' from C source file 'hello.c'. $ cc -o hello.out hello.c \\ ・Make the execution module 'hello.out' from the C++ source file 'hello.cpp'. $ CC -o hello.out hello.cpp \\ ===== Libraries ===== Following libraries are available for compiling and linking. ^Library ^Version ^Compiler ^ |CSML(Cray Scientific and Math Libraries) |19.05.5\\ 18.03.1 |all compilers | |Intel MKL (Intel Math Kernel Library) |19.1.3.304\\ 19.1.0.166\\ 19.0.2.187\\ 18.0.2.199\\ 17.0.4.196 |Intel compiler | |Third Party Products |- |all compilers | ------ ==== CSML(Cray Scientific and Math Libraries) ==== \\ CSML (Cray Scientific and Math Libraries) is a set of libraries provide by Cray.\\ Following libraries are available. ^Library ^Description ^Included libraries ^Module ^Option ^ |Cray LibSci |Scientific library optimized for XC50 system\\ Default |BLAS, \\ LAPACK, \\ BLACS, \\ ScaLAPCK, \\ IRT, etc |cray-libsci | | |Cray PETSc(Portable, Extensible Toolkit for Scientific Computation) |Linear / nonlinear equation parallel solver library |MUMPS, \\ SuperLU, \\ SuperLU_dist, \\ ParMETIS, \\ HYPRE, etc |cray-petsc | | |Cray Trilinos Packages |Object-oriented interface of scientific library\\ Load cray-petsc in advance. |PETSc, \\ Metis/ParMetis, \\ SuperLU, \\ Aztec, \\ BLAS, \\ LAPACK |cray-trilinos | | |TPSL(Third Party Scientific Libraries) |Math library available with PETSc/Trilinos |MUMPS, \\ Super_LU, \\ Super_LU_dist, \\ ParMetis, \\ Hypre, \\ Sumdials, \\ Scotch, etc|cray-tpsl | | |FFTW3.3 Library |FFTW version 3.3 |FFTW3.3 |cray-fftw |-lfftw3\\ (MPI parallel)\\ -lfftw3_mpi\\ (thread parallel)\\ -lfftw3_threads| |FFTW2.1 Library |FFTW version2.1\\ Library name depends on single precision and double precision.|FFTW2.1 |fftw |(single precision)\\ -lsrfftw_mpi\\ -lsfftw_mpi\\ -lsrfftw\\ -lsfftw\\ (double precision)\\ -ldrfftw_mpi\\ -ldfftw_mpi\\ -ldrfftw\\ -ldfftw| \\ **Setting of program environment**\\ Change the program environment by the following line, because Cray compiler is default on super.\\ \\ ・Example change to environment of Intel compiler. $ module switch PrgEnv-cray PrgEnv-intel \\ **Example**\\ \\ ・ex1: Using FFTW 3.3 Library from MPI parallel program with Cray compiler $ module load cray-fftw $ cc main.c -L${FFTW_DIR} -lfftw3_mpi -lfftw3 \\ ・ex2: Using FFTW 3.3 Library from MPI and thread parallel program with Intel compiler $ module switch PrgEnv-cray PrgEnv-intel $ module load cray-fftw $ cc -qopenmp main.c -L${FFTW_DIR} -lfftw3_mpi -lfftw3_threads -lfftw3 \\ ・ex3: Using FFTW 2.1 Library with single precision $ module load fftw $ cc main.c -lsrfftw_mpi -lsfftw_mpi -lsrfftw -lsfftw \\ ・ex4: Using FFTW 2.1 Library with double precision $ module load fftw $ cc main.c -ldrfftw_mpi -ldfftw_mpi -ldrfftw -ldfftw ------ ==== Intel MKL ==== \\ Intel MKL (Intel Math Kernel Library) contains BLAS, LAPACK, SparseBLAS, PARDISO, Iterative Sparse Solver, FFT, random number generation and so on.\\ \\ **Setting of program environment**\\ In order to use Intel MKL, it is necessary to load the Intel program environment(PrgEnv-intel) and unload the Cray-libsci to avoid contention. \\ ・Example change from environment of Intel compiler. $ module switch PrgEnv-cray PrgEnv-intel $ module unload cray-libsci \\ **Example**\\ \\ ・Make the execution module 'hello.out' from the Fortran source file 'hello.f' using BLAS in fixed form. $ ftn -mkl -o hello.out -fixed hello.f \\ ・Make the execution module 'hello.out' from C source file 'hello.c' using BLAS. $ cc -mkl -o hello.out hello.c ------ ==== Third Party Products ==== \\ The following libraries are available. ^Library ^Module ^Note ^ |NetCDF(Unidata’s Network Common Data Format) Library |cray-netcdf |serial version | |::: |cray-parallel-netcdf |parallel version| |HDF5(Hierarchical Data Format 5) Libraries & Utilities |cray-hdf5 |serial version | |::: |cray-hdf5-parallel |parallel version | \\ ~~NOCACHE~~