Using Intel oneAPI and MKL with CMake
There can be substantial speed boosts from Intel compilers. Intel oneAPI gives advanced debuggers and performance measurements. Intel oneMKL can give a significant speed boost even to non-Intel compilers for certain math operations.
On any OS and particularly Windows we generally use CMake Ninja generator. Visual Studio backend often causes additional difficulties, so unless you know you need Visual Studio we recommended making the default CMake generator Ninja by setting environment variable:
or do this one-time by:
cmake -G Ninja
Specify the environment variables
CC, CXX, FC to indicate desired compilers.
export FC=ifx CC=icx CXX=icpx cmake -B build cmake --build build
For Windows, the procedure is similar:
set FC=ifx set CC=icx set CXX=icx cmake -B build cmake --build build
CMakeLists.txt using the factory
project(MKLtest Fortran) # allows selecting parallel, sequential, 32/64 bit # This example is sequential 32 bit set(BLA_VENDOR Intel10_64lp_seq) find_package(LAPACK REQUIRED) add_executable(mytest main.f90) target_link_libraries(mytest LAPACK::LAPACK)
We have created an easier to use FindLAPACK.cmake that handles MKL and non-MKL LAPACK.
To see the compiler commands CMake is issuing, use
cmake --build build -v
Refer to Intel Link Advisor for supported compiler / operating system / MKL combinations.
Get runtime confirmation that MKL is being used via
Linux / MacOS:
set MKL_VERBOSE=1 mytest.exe
That gives verbose text output upon use of MKL functions. That runtime option does slow down MKL performance, so normally we don’t use it.