The Intel MKL ILP64 libraries use the 64-bit integer type (necessary for indexing large arrays, with more than 231-1 elements), whereas the LP64 libraries index arrays with the 32-bit integer type.
The LP64 and ILP64 interfaces are implemented in the Interface layer. Link with the following interface libraries for the LP64 or ILP64 interface, respectively:
The ILP64 interface provides for the following:
The LP64 interface provides compatibility with the previous Intel MKL versions because "LP64" is just a new name for the only interface that the Intel MKL versions lower than 9.1 provided. Choose the ILP64 interface if your application uses Intel MKL for calculations with large data arrays or the library may be used so in future.
Intel MKL provides the same include directory for the ILP64 and LP64 interfaces.
The table below shows how to compile for the ILP64 and LP64 interfaces:
Fortran |
|
---|---|
Compiling for ILP64 |
ifort -i8 -I<mkl directory>/include ... |
Compiling for LP64 |
ifort -I<mkl directory>/include ... |
C or C++ |
|
Compiling for ILP64 |
icc -DMKL_ILP64 -I<mkl directory>/include ... |
Compiling for LP64 |
icc -I<mkl directory>/include ... |
Linking of an application compiled with the -i8 or -DMKL_ILP64 option to the LP64 libraries may result in unpredictable consequences and erroneous output.
You do not need to change existing code if you are not using the ILP64 interface.
To migrate to ILP64 or write new code for ILP64, use appropriate types for parameters of the Intel MKL functions and subroutines:
Integer Types |
Fortran |
C or C++ |
---|---|---|
32-bit integers |
INTEGER*4 or
|
int |
Universal integers for ILP64/LP64:
|
INTEGER
|
MKL_INT |
Universal integers for ILP64/LP64:
|
INTEGER*8 or
|
MKL_INT64 |
FFT interface integers for ILP64/LP64 |
INTEGER
|
MKL_LONG |
The Reference Manual does not explain which integer parameters of a function become 64-bit and which remain 32-bit for ILP64. To get to know this, browse the include files, examples, and tests for the ILP64 interface details.
Some function domains that support only a Fortran interface provide header files for C/C++ in the include directory. Such *.h files enable using a Fortran binary interface from C/C++ code. These files can also be used to understand the ILP64 usage.
All Intel MKL function domains support ILP64 programming with the following exceptions:
FFTW 2.x wrappers do not support ILP64.
FFTW 3.2 wrappers support ILP64 by a dedicated set of functions plan_guru64.
GMP* Arithmetic Functions do not support ILP64.
GMP Arithmetic Functions are deprecated and will be removed in a future release.