Language
Developer
Command
MPI
OpenMP
Fortran 77
GNU
gfortran
mpif77
gfortran -fopenmp
Fortran 90/95/03
GNU
gfortran
mpif90
gfortran -fopenmp
C
GNU
gcc (cc)
mpicc
gcc -fopenmp
C++
GNU
g++ (c++)
mpicxx (mpic++, mpiCC)
g++ -fopenmp
Fortran 77
PGI
pgfortran (pgf77)
mpif77
pgfortran -mp
Fortran 90/95/03
PGI
pgfortran (pgf90, pgf95)
mpif90
pgfortran -mp
C
PGI
pgcc
mpicc
pgcc -mp
C++
PGI
pgc++
mpicxx (mpic++, mpiCC)
pgc++ -mp
Fortran 77/90/95/03
Intel
ifort
mpifort (mpif90, mpif77)
ifort -openmp
C
Intel
icc
mpicc
icc -openmp
C++
Intel
icpc
mpicxx (mpic++, mpiCC)
icpc -openmp
General compiler flags (GCC/Clang)
-g
- turn on debugging (so GDB gives more friendly output)
-Wall
- turns on most warnings
-std=c++11
- specify C++ version 11
-fPIC
- Position Independent Code to avoid error when building shared libraries for dynamic linking
-O0
- no optimization, faster compilation, better for debugging builds
-O1
- turn on optimizations - minimize code size
-O2
- turn on optimizations - maximize speed
-O3
- turn on higher level of optimizations, slow compiling-time, better for production builds
-OFast
- higher level of optimizations than -O3
-o <name>
- name of the output file
-c
- output an object file (.o)
-D_GLIBCXX_USE_CXX11_ABI=0
- if you use GCC 5 or higher
-I<include path>
- specify an include directory
-L<library path>
- specify a lib directory
-l<library>
- link with library lib.a
Tricks for C++ compilation
Parallelism: -J N
, where N
is number of jobs
Build on local disk instead of a network file system like NFS. SSD is better than HDD.
Upgrade to a newer version of gcc
The more RAM your machine has, the faster compilation
Guard condition for header
#ifndef SOME_NAME_h
#define SOME_NAME_h
...
#endif
Forward declaration
int sum (int , int );
int sum (int a, int b)
{
return a+b;
}
unnamed or anonymous namespaces