Developer Guide

Developer Guide for Intel® oneAPI Math Kernel Library Windows*

ID 766692
Date 12/16/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Using the Custom Dynamic-link Library Builder in the Command-line Mode

To build a custom DLL, use the following command:

nmake target [<options>]

The following table lists possible values of target and explains what the command does for each value:

Value

Comment

libia32

The builder uses static Intel® oneAPI Math Kernel Library interface, threading, and core libraries to build a customDLL for the IA-32 architecture.

libintel64

The builder uses static Intel® oneAPI Math Kernel Library interface, threading, and core libraries to build a customDLL for the Intel® 64 architecture.

dllia32

The builder uses the single dynamic library libmkl_rt.dll to build a custom DLL for the IA-32 architecture.

dllintel64

The builder uses the single dynamic library libmkl_rt.dll to build a custom DLL for the Intel® 64 architecture.

help

The command prints Help on the custom DLL builder

The <options> placeholder stands for the list of parameters that define macros to be used by the makefile. The following table describes these parameters:

Parameter [Values]

Description

interface

Defines which programming interface to use.Possible values:

  • For the IA-32 architecture, {cdecl}. The default value is cdecl.
  • For the Intel 64 architecture, {lp64|ilp64}. The default value is lp64.
threading = {parallel|sequential}

Defines whether to use the Intel® oneAPI Math Kernel Library in the threaded or sequential mode. The default value isparallel.

Prallel = {intel|tbb}

Specifies whether to use Intel OpenMP or Intel® oneTBB. The default value isintel.

cluster = {yes|no}

(For libintel64only) Specifies whether Intel® oneAPI Math Kernel Library cluster components (BLACS, ScaLAPACK and/or CDFT) are needed to build the custom shared object. The default value isno.

blacs_mpi = {intelmpi|msmpi}

Specifies the pre-compiled Intel® oneAPI Math Kernel Library BLACS library to use. Ignored if'cluster=no'. The default value is intelmpi.

All of the above parameters are optional. However, you must make the system and c-runtime (crt) libraries and link.exe available by setting the PATH and LIB environment variables appropriately. You can do this in the following ways:

  • Manually
  • If you are using Microsoft Visual Studio (VS), call the vcvarsall.bat script with the appropriate 32-bit (x86) or 64-bit (x64 or amd-64) architecture flag.
  • If you are using the Intel compiler, use the compilervars.bat script with the appropriate 32-bit (x86) or 64-bit (x64 or amd-64) architecture flag.

In the simplest case, the command line is:

#source Visual Studio environment variables
call vcvarsall.bat x86
#run custom dll builder script
nmake ia32

and the missing options have default values. This command creates the  mkl_custom.dll and mkl_custom.lib libraries with the cdecl interface for processors using the IA-32 architecture . The command takes the list of functions from the functions_listfile and uses the native Intel® oneAPI Math Kernel Library error handlerxerbla.

Here is an example of a more complex case:

#source Visual Studio environment variables
call vcvarsall.bat x86
#run custom dll builder script
nmake ia32 interface=cdecl export=my_func_list.txt name=mkl_small xerbla=my_xerbla.obj

In this case, the command creates the mkl_small.dll and mkl_small.lib libraries with the cdecl interface for processors using the IA-32 architecture. The command takes the list of functions from my_func_list.txt file and uses the error handler of the user my_xerbla.obj.

To build a UWD-compatible custom dll, use the uwd_compat=yes option. For this purpose, you must make a different set of universal system (OneCore.lib) and universal c-runtime (ucrt.lib) libraries available. You can get these libraries by downloading Windows 10 SDK 10.0.17134.0 (version 1803) or newer. Make sure to source the Visual Studio environment with the appropriate native architecture to add the libraries to your path.

This example shows how to create a 64-bit architecture library, mkl_uwd_compat.dll, that is UWD-compatible with the lp64 interface using my_function_list.txt for specific functionality:

#source Visual Studio environment variables, LIB should have paths to desired OneCore.lib and universal crt libraries
call vcvarsall.bat x64
#run custom dll builder script
nmake intel64 interface=lp64 export=my_func_list.txt uwd_compat=yes name=mkl_uwd_compat

Product and Performance Information

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.

Notice revision #20201201