Visible to Intel only — GUID: GUID87821148338B40228C90F24C866F2878
Visible to Intel only — GUID: GUID87821148338B40228C90F24C866F2878
Using the ILP64 Interface vs. LP64 Interface
The Intel® oneAPI Math Kernel Library ILP64 libraries use the 64bit integer type (necessary for indexing large arrays, with more than 2^{31}1 elements), whereas the LP64 libraries index arrays with the 32bit 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:
 libmkl_intel_lp64.a or libmkl_intel_ilp64.a for static linking
 libmkl_intel_lp64.dylib or libmkl_intel_ilp64.dylib for dynamic linking
The ILP64 interface provides for the following:
 Support large data arrays (with more than 2^{31}1 elements)
 Enable compiling your Fortran code with the i8 compiler option
The LP64 interface provides compatibility with the previous Intel® oneAPI Math Kernel Library versions because "LP64" is just a new name for the only interface that the Intel® oneAPI Math Kernel Library versions lower than 9.1 provided. Choose the ILP64 interface if your application uses Intel® oneAPI Math Kernel Library for calculations with large data arrays or the library may be used so in the future.
On 64bit platforms, selected domains provide API extensions with the _64 suffix (for example, SGEMM_64) for supporting large data arrays in the LP64 library. This enables you to mix data types in one application. The selected domains and APIs include the following:
 BLAS: Fortranstyle APIs for C applications and CBLAS APIs with integer arguments
 LAPACK: Fortranstyle APIs for C applications and LAPACKE APIs with integer arguments
Intel® oneAPI Math Kernel Library provides the same include directory for the ILP64 and LP64 interfaces.
Compiling for LP64/ILP64
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.
Coding for ILP64
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® oneAPI Math Kernel Library functions and subroutines:
Integer Types 
Fortran 
C or C++ 

32bit 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 
To determine the type of an integer parameter of a function, use appropriate include files. For functions that support only a Fortran interface, use the C/C++ include files *.h.
The above table explains which integer parameters of functions become 64bit and which remain 32bit for ILP64. The table applies to most Intel® oneAPI Math Kernel Library functions except some Vector Mathematics and Vector Statistics functions, which require integer parameters to be 64bit or 32bit regardless of the interface:
Vector Mathematics: The mode parameter of the functions is 64bit.
Random Number Generators (RNG):
All discrete RNG except viRngUniformBits64 are 32bit.
The viRngUniformBits64 generator function and vslSkipAheadStream service function are 64bit.
 Summary Statistics: The estimate parameter of the vslsSSCompute/vsldSSCompute function is 64bit.
Refer to the Intel® oneAPI Math Kernel Library Developer Reference for more information.
To better understand ILP64 interface details, see also examples.
Limitations
All Intel® oneAPI Math Kernel Library function domains support ILP64 programming but FFTW interfaces to Intel® oneAPI Math Kernel Library:
FFTW 2.x wrappers do not support ILP64.
FFTW 3.x wrappers support ILP64 by a dedicated set of functions plan_guru64.