Intel® Fortran Compiler 17.0 Developer Guide and Reference

Using the OpenMP* Libraries

This section describes the steps needed to set up and use the OpenMP* Libraries from the command line. On Windows* systems, you can also build applications compiled with the OpenMP libraries in the Microsoft Visual Studio* development environment.

For a summary of the support provided by the libraries provided with Intel compilers, see OpenMP* Source Compatibility and Interoperability with Other Compilers.

For a list of the options and libraries used by the OpenMP* libraries, see OpenMP* Support Libraries.

Set up your environment for access to the Intel® Fortran Compiler to ensure that the appropriate OpenMP* library is available during linking. On Windows* systems, you can either execute the appropriate batch (.bat) file or use the command-line window supplied in the compiler program folder that already has the environment set up. On Linux* and OS X* systems, you can source the appropriate script file (ifortvars file).

To use the gfortran compiler with the Intel OpenMP library along with the OpenMP* API functions, do the following:

  1. Use the use omp_lib statement to compile the omp_lib.f90 source file, which is in the Intel® Fortran Compiler include directory.

  2. Add the -I option to the compile command line with appropriate path to the directory containing the resulting module file.

During compilation, ensure that the version of omp_lib.h or omp_lib.mod used when compiling is the version provided by that compiler.

CAUTION

Be aware that when using the gcc* or Microsoft* compiler, you may inadvertently use inappropriate header/module files. To avoid this, copy the header/module file(s) to a separate directory and put it in the appropriate include path using the -I option.

If a program uses data structures or classes that contain members with data types defined in omp_lib.h file, then source files that use those data structures should all be compiled with the same omp_lib.h file.

The command for the Intel® Fortran Compiler is ifort.

For information on the OpenMP* libraries and options used by the Intel® Fortran Compiler, see OpenMP* Support Libraries.

Command-Line Examples, Windows*

To compile and link (build) the entire application with one command using the Compatibility libraries, specify the following Intel® Fortran Compiler command:

Type of File

Commands

Fortran source, dynamic link

ifort /MD /Qopenmp hello.f90

When using the Microsoft* Visual C++* compiler, you should link with the Intel OpenMP compatibility library. You need to avoid linking the Microsoft* OpenMP run-time library (vcomp) and explicitly pass the name of the Intel OpenMP compatibility library as linker options (following /link):

Type of File

Commands

C source, dynamic link

cl /MD /openmp hello.c /link /nodefaultlib:vcomp libiomp5md.lib

You can also use the Intel® Fortran Compiler with the Visual C++* compiler to compile parts of the application and create object files (object-level interoperability). In this example, the Intel® Fortran Compiler compiles and links the entire application:

Type of File

Commands

Mixed C and Fortran sources, dynamic link

cl /MD /openmp /c f1.c f2.c

ifort /MD /Qopenmp /c f3.f f4.f

ifort /MD /Qopenmp f1.obj f2.obj f3.obj f4.obj /Feapp /link /nodefaultlib:vcomp

The first command produces two object files compiled by Visual C++* compiler, and the second command produces two more object files compiled by the Intel® Fortran Compiler. The final command links all four object files into an application.

Alternatively, the third line below uses the Visual C++* linker to link the application and specifies the Compatibility library libiomp5md.lib at the end of the third command:

Type of File

Commands

Mixed C and Fortran sources, dynamic link

cl /MD /openmp /c f1.c f2.c

ifort /MD /Qopenmp /c f3.f f4.f

link f1.obj f2.obj f3.obj f4.obj /out:app.exe /nodefaultlib:vcomp libiomp5md.lib

The following example shows the use of interprocedural optimization by the Intel® Fortran Compiler on several files, the Visual C++* compiler compiles several files, and the Visual C++* linker links the object files to create the executable:

Type of File

Commands

Mixed C and Fortran sources, dynamic link

ifort /MD /Qopenmp /O3 /Qipo /Qipo-c f1.f f2.f f3.f

cl /MD /openmp /O2 /c f4.c f5.c

cl /MD /openmp /O2 ipo_out.obj f4.obj f5.obj /Feapp /link /nodefaultlib:vcomp libiomp5md.lib

The first command uses the Intel® Fortran Compiler to produce an optimized multi-file object file named ipo_out.obj by default (the /Fe option is not required). The second command uses the Visual C++* compiler to produce two more object files. The third command uses the Visual C++* cl command to link all three object files using the Intel® Fortran Compiler OpenMP library.

Command-Line Examples, Linux*

To compile and link (build) the entire application with one command using the Intel OpenMP libraries, specify the following Intel® Fortran Compiler command on Linux* platforms:

Type of File

Commands

Fortran source

ifort -qopenmp hello.f90

By default, the Intel® Fortran Compiler performs a dynamic link of the OpenMP* libraries. To perform a static link (not recommended), add the option -qopenmp-link=static. The Intel® Fortran Compiler option -qopenmp-link controls whether the linker uses static or dynamic OpenMP* libraries on Linux* and OS X* systems (default is -qopenmp-link=dynamic).

You can also use the Intel® C++ Compiler icc/icpc with gcc/g++ compilers to compile parts of the application and create object files (object-level interoperability).

In this example, gcc compiles the C file foo.c (the gcc option -fopenmp enables OpenMP* support), and the Intel® Fortran Compiler links the application using the Intel OpenMP library:

Type of File

Commands

C source

gcc -fopenmp -c foo.c

C++ source

g++ -fopenmp -c foo.cpp

When using gcc or g++ compiler to link the application with the Intel® Fortran Compiler OpenMP compatibility library, you need to explicitly pass the Intel OpenMP library name using the -l option, the Linux* pthread library using the -l option, and path to the Intel® libraries where the Intel® C++ compiler is installed using the -L option:

Type of File

Commands

C source

gcc -fopenmp -c foo.c bar.c

gcc foo.o bar.o -liomp5 -lpthread -L<icc_dir>/lib

You can mix object files, but it is easier to use the Intel® Fortran Compiler to link the application so you do not need to specify the gcc-l option, -L option, and the -lpthread option:

Type of File

Commands

C source

gcc -fopenmp -c foo.c

icc -qopenmp -c bar.c (Linux* and OS X*)

icc -qopenmp foo.o bar.o (Linux* and OS X*)

You can mix OpenMP* object files compiled with gcc, the Intel® C++ Compiler, and the Intel® Fortran Compiler.

Note

You cannot mix object files compiled by the Intel® Fortran compiler and the gfortran compiler.

The table illustrates examples of using the Intel® Fortran compiler or the GNU Fortran compiler to link all the objects:

Type of File

Commands

Mixed C and Fortran sources

icc -qopenmp -c ibar.c

gcc -fopenmp -c gbar.c

ifort -qopenmp -c foo.f

ifort -qopenmp foo.o ibar.o gbar.o

When using the Intel® Fortran compiler, if the main program does not exist in a Fortran object file that is compiled by the Intel® Fortran Compiler ifort, specify the -nofor-main option on the ifort command line during linking.

Note

Do not mix objects created by the Intel® Fortran Compiler (ifort) with the GNU Fortran Compiler (gfortran); instead, recompile all Fortran sources with the same Fortran compiler. The GNU Fortran Compiler is only available on Linux operating systems.

Similarly, you can mix object files compiled with the Intel® C++ Compiler, the GNU C/C++ compiler, and the GNU Fortran Compiler (gfortran), if you link with the GNU Fortran Compiler (gfortran). When using GNU gfortran compiler to link the application with the Intel® Fortran Compiler OpenMP compatibility library, you need to explicitly pass the Intel OpenMP compatibility library name and the Intel irc libraries using the -l options, the Linux* pthread library using the -l option, and path to the Intel® libraries where the Intel® C++ Compiler is installed using the -L. option. You do not need to specify the -fopenmp option on the link line:

Type of File

Commands

Mixed C and GNU Fortran sources

icc -qopenmp -c ibar.c

gcc -fopenmp -c gbar.c

gfortran -fopenmp -c foo.f

gfortran foo.o ibar.o gbar.o -lirc -liomp5 -lpthread -lc -L<icc_dir>/lib

Alternatively, you could use the Intel® Fortran Compiler to link the application, but need to pass multiple gfortran libraries using the -l options on the link line:

Type of File

Commands

Mixed C and Fortran sources

gfortran -fopenmp -c foo.f

icc -qopenmp -c ibar.c

icc -qopenmp foo.o bar.o -lgfortranbegin -lgfortran

Command-Line Examples, OS X*

To compile and link (build) the entire application with one command using the Intel OpenMP libraries, specify the following Intel® Fortran Compiler command on OS X* platforms:

Type of File

Commands

Fortran source

ifort -qopenmp hello.f90

By default, the Intel® Fortran Compiler performs a dynamic link of the OpenMP* libraries. To perform a static link (not recommended), add the option -qopenmp-link=static. The Intel® Fortran Compiler option -qopenmp-link controls whether the linker uses static or dynamic OpenMP* libraries on Linux* and OS X* systems (default is -qopenmp-link=dynamic).

You can also use the Intel® C++ Compiler icc/icpc/icl with gcc/g++ compilers to compile parts of the application and create object files (object-level interoperability).

Note

Mixed compiling using Intel® C++ Compiler with GCC compilers is possible only on older OS X* platforms. The latest OS X* v10.x platforms do not include the GCC compiler, and the Clang compiler included in the latest OS X* 10.x does not support OpenMP* implementation. Future versions of Clang compiler may support OpenMP* implementation.

In this example, icl oricc compiles the C file foo.c, the option Qopenmp (Windows*) or qopenmp (Linux* or OS X*) enables OpenMP* support, and the Intel® Fortran Compiler links the application using the Intel OpenMP library:

Type of File

Commands

C source

icc -qopenmp foo.o

C++ source

icpc -qopenmp foo.o

Note

GCC is absent on OS X* v10.9 and later (that is, Xcode 5.x and later). However, you may install GCC along with the Intel® C++ Compiler.

You can mix object files, but it is easier to use the Intel compiler to link the application so you do not need to specify the gcc-l option, -L option, and the -lpthread option:

Type of File

Commands

C source

icc -qopenmp -c bar.c

icc -qopenmp foo.o bar.o

When using the Intel® Fortran compiler, if the main program does not exist in a Fortran object file that is compiled by the Intel® Fortran Compiler ifort, specify the -nofor-main option on the ifort command line during linking.

Alternatively, you could use the Intel® Fortran Compiler to link the application, but need to pass multiple gfortran libraries using the -l options on the link line:

Type of File

Commands

Mixed C and Fortran sources

icc -qopenmp -c ibar.c

icc -qopenmp foo.o bar.o -lgfortranbegin -lgfortran

See Also