This cluster has 3 different kinds of compilers
- GNU
- Portland Group (PGI)
- Intel
Below is a table that shows the different compilers:
LANGUAGE |
GNU COMMAND(S) |
PGI COMMAND |
INTEL COMMAND |
FILE SUFFIX |
---|---|---|---|---|
Fortran 77 | gfortran | pgf77 | ifort | .f .for .FOR ** .F .fpp .FPP |
Fortran 90 | gfortran | pgf90 | ifort | .f .for ** .F .f90 .F90 .fpp |
Fortran 95 | gfortran | N/A | N/A | .f95 |
C | gcc | pgcc | icc | .c |
C++ | g++ | pgCC | icc | .cc .cpp .cxx .C |
** Use these suffixes for code that needs preprocessing with cpp.
-
- No one compiler works best for all kinds of code.
- If you are interested in speeding up your application, you will want to test various compiler options and compilers to see which ones work the best for your application.
- There is a man page for each compiler that lists the compiler options.
- In general, gcc/g++ is the most flexible since it runs on a variety of different computer platforms.
- Many people use gcc/g++ so it will be easy to port their code to other platforms.
- g77 was previously the fortran77 GNU compiler and is now retired and replaced by gfortran.
- The PGI compilers will compile f77,f90, C, and C++ codes.
-
- They compile a variety of codes with fewer errors than the Intel compilers.
- Many Fortran codes use extensions to the language and the Portland Group compilers support those extensions.
- Portland Group recommends that you use the pgf90 for both Fortran 90 and fortran 77 codes to gain additional code speed up.
-
- All of the compiler commands listed above are in the standard user path.
Useful Compiler Options
-
- Here are some useful compilers optimizations options to know about for each of the three kinds of compilers.
- All three kinds of compilers generate code that is optimized for the platform where they are compiled.
- The comments below apply to both C/C++ and Fortran77/90 codes.
- These optimizations will not necessarily speed up all kinds of code and should be tested individually.
Portland Group: pgcc, pgCC, pgf77, pgf90
-
- If you want to use a number of more aggressive optimizations that makes use of the features of the AMD processors to speed up your code and use the options -fastsse -O4.
- In addition, there are other optimization options to try.
PG COMPILER OPTION |
DESCRIPTION OF OPTION |
---|---|
-Munroll |
unroll loops |
-Mvect |
vectorize code |
-Mvect=sse |
make use of the sse/see2 vectorization |
-Mconcur |
auto-parallelization using OpenMP |
–Mipa |
inter-procedural analysis |
GNU compilers: gcc, g++
Use option -O3 for the most aggressive optimization. Here are some optimization options.
GCC/G++ COMPILER OPTION |
DESCRIPTION OF OPTION |
---|---|
-march=machinetype (i.e. pentium4) |
Generate instruction of the machine type (i.e. pentium4) |
–ffast-math |
use optimized math functions (this should be used with caution) |
-mfpmath=sse |
make use of sse vectorization for math calculations |
–funroll-loops |
unroll loops |
Intel Compilers: ifort, icc
-
- Use the option -O3 to obtain more aggressive optimization.
- You can use the -parallel option to have the compiler insert multi-threaded code in loops that can be safely parallelized.
- Here are some other optimization options.
INTEL COMPILER OPTION |
DESCRIPTION OF OPTION |
---|---|
-ipo |
multi-file interprocedural analysis |
-unroll[n] |
unroll loops |
-openmp |
generate OpenMP code in loops that can be parallelized |