# Intel® Math Kernel Library (Intel® MKL) 2018 Getting Started

Published: 03/25/2017

Last Updated: 09/12/2017

 contents Preparation stage Implementation stage #1: Set build environment variable #2:  Write your first intel® MKL program #3:  Use intel® MKL Source Code Examples Run stage •   Set run time environment variable and executing Advanced stage •   Multi-threading (Multi-Core) Support •   Building a Custom Dynamic (Shared) Library

Before getting started, it may be helpful to take a look at the following links available online for the latest information regarding the Intel® MKL library:

Links to documentation can be found on the main Intel MKL product page. For technical support visit the Intel MKL technical support forum and review the articles in the Intel MKL knowledgebase.

#### Implementation stage #1: Environment Variables

A script (batch file on Windows, shell script on other platforms) located in the <mkl install directory>>\ compilers_and_libraries_2018\windows\mkl\bin\ directory (by default, it is C:\Program Files (x86)\IntelSWTools\ compilers_and_libraries_2018\windows\mkl\bin\)  can be used to set the MKLROOT, LIB, INCLUDE and any required system-specific environment variables to point to the appropriate MKL library directories. Use of this script is an optional, but convenient, means by which to configure your development system for compiling and linking with Intel® MKL.

You run the script with a single input that specifies the primary processor architecture of interest. For example, mklvars.bat ia32 configures the environment variables for compiling and linking a 32-bit Intel MKL application. Likewise, mklvars.bat intel64 configures your development environment to build 64-bit intel® MKL applications.

Note: in the text that follows, <arch> refers to the primary processor architecture, such as ia32 or intel64 and <MKLROOT> refers to the Intel MKL installation directory. Additionally, '\' and '/' are used interchangeably as directory separators.

An alternate architecture-specific script file is located in the <MKLROOT>\bin\<arch> directory that can be run without any input parameters. It calls the mklvars script mentioned above with the appropriate architecture as an input parameter.

Once defined, you can reference the MKLROOT variable within your makefiles and/or project files to locate the header and library files necessary to compile and link applications using Intel MKL.

Before running the build scripts provided with the Intel MKL example programs you must first be sure to set the MKLROOT environment variable to point to the MKL installation directory on your system. MKLROOT must point to that directory which contains the Intel MKL bin, lib, include and tools directories. The sample build scripts will reference the MKLROOT environment variable in order to locate Intel MKL and any additional tools required.

On a Windows system the following batch files are available to configure the environment for building Intel MKL applications:

mkl\bin\mklvars.bat  <arch>

On a Linux* system the following shell scripts are available to configure the environment for building Intel MKL applications:

/opt/intel/compilers_and_libraries_2018/linux/mkl/bin/mklvars.sh  <arch>

#### Implementation stage #2: Write your first MKL program

Step1: Include Files

Intel MKL functions and structures are defined within several header files for C and interface files and modules for Fortran. These can be found in the <MKLROOT>\include directory and for Fortran several nested directories depending on architecture and interface. The "mkl.h" and "mkl.fi" files include all of these. The environment variable scripts can be used to point to the appropriate directories.

Step 2: Calling Intel MKL Functions

Calling Intel MKL function is as simple as calling any C function or FORTRAN function in your program. MKL provides both FORTRAN and C interface for most routines. Please see the MKL manual to find the function list you hope to use.

For example. compute C=A*B, A is mxn matrix, B is nxk matrix.

sgemm(transatransbmnkalphaAldaBldbbetaCldc)

cblas_dgemm(CblasRowMajor,CblasNoTrans,CblasNoTrans,N,N,N,Alpha,B,N,a,N,beta,C,N);

The dynamic library dispatcher and static library mechanisms in Intel MKL are designed to make the process of calling Intel MKL functions as simple as calling any library.  Multiple SIMD-optimized versions of each function are concealed behind a single entry point. But you don't need to worry about the optimized code for get started, just make sure link the right libraries for your application.

Under Windows*:
The command line is like below:

> ..\compilers_and_libraries_2018\windows\mkl\bin\mklvars.bat" ia32

>  cl.exe mkl_lab_solution.c  mkl_intel_c.lib mkl_core.lib mkl_intel_thread.lib libiomp5md.lib

If with Intel(R) Parallel Studio XE 2018, as intel mkl is integrated to it. The command line is simpler,
> icl.exe mkl_lab_solution.c /Qmkl    ( Please see more details in MKL's  Developer Guide - Linking Your Application with the Intel® Math Kernel Library - Quick start )

If with Microsoft* Visual Studio, please refer to Compile and Link MKL with Microsoft* Visual C/C++*  or Automatically Linking Your Intel® Visual Fortran Project with Intel® MKL

Under Linux:

1) if with gcc
$source /opt/intel/compilers_and_libraries_2018/linux/mkl/bin/mklvars.sh ia32$gcc -m32 mkl_lab_solution.c -lmkl_intel -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

2) If with Intel(R) Parallel Studio XE 2018, the command line is easy
$source /opt/intel/bin/iccvars.sh intel64 ( or ia32 )$ icc mkl_lab_solution.c -mkl
$icc mkl_lab_solution.c -mkl #### Implementation stage #3: Intel® MKL Source Code Sample 1. Intel® MKL provide source code samples, almost for each function, like BLAS, LAPACK, FFT etc, both C and Fortran source code. You may find them under the <mkl install directory>\ compilers_and_libraries\windows\mkl\examples. 2. Intel® MKL knowledge base also provide many source code sample, please explore sample there, for example, #### Run Stage: Executing program You can set run-time environment as above description. If you have done with script, you can run the executable program directly.$ source /opt/intel/compilers_and_libraries_2018/linux/mkl/bin/mklvars.sh intel64
$./a.out Enter matrix size N=1024 Dgemm_multiply(). Elapsed time = 0.49 seconds or set LD_LIBRARY_PATH under linux and PATH under windows.$ export LD_LIBRARY_PATH=/opt/intel/compilers_and_libraries_2018/linux/mkl/lib/intel64:$LD_LIBRARY_PATH$ ./a.out

Intel MKL 2018 uses OpenMP/TBB threading internally to support parallelism and leverage the performance benefits of multicore architectures.

• In some cases you can use OpenMP environment variables and APIs to control OpenMP threading behavior within Intel MKL. In addition, dedicated functions have been introduced to control threading behavior of Intel MKL functions independent of the OpenMP controls.  For detailed information regarding OpenMP and Intel MKL, please refer to the reference manuals and the following knowledge base articles:  Intel® MKL 10.x Threading  Note: You must include the appropriate OpenMP shared-library file in your PATH. There are known incompatibilities between various versions of the OpenMP libraries. If you encounter problems, make sure that there is only one version of OpenMP located in your PATH environment variable.
• In the case of TBB Threading, please refer to the MKL User's Guide and Using Intel MKL and Intel TBB in the same application knowledge  base article to get more details

#### Product and Performance Information

1

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