Developer Guide

Contents

Using Predefined Preprocessor Symbols for Intel® MKL Version-Dependent Compilation

Preprocessor symbols (macros) substitute values in a program before it is compiled. The substitution is performed in the preprocessing phase.
The following preprocessor symbols are available:
Predefined Preprocessor Symbol
Description
__INTEL_MKL__
Intel® MKL
major version
__INTEL_MKL_MINOR__
Intel® MKL
minor version
__INTEL_MKL_UPDATE__
Intel® MKL
update number
INTEL_MKL_VERSION
Intel® MKL
full version in the following format:
INTEL_MKL_VERSION
= (
__INTEL_MKL__
*100+
__INTEL_MKL_MINOR__
)*100+
__INTEL_MKL_UPDATE__
These symbols enable conditional compilation of code that uses new features introduced in a particular version of the library.
To perform conditional compilation:
  1. Depending on your compiler, include in your code the file where the macros are defined:
    C/C++ compiler:
    mkl_version.h
    ,
    or
    mkl.h
    , which includes
    mkl_version.h
    Intel®
    Fortran compiler:
    mkl.fi
    Any Fortran compiler with enabled preprocessing:
    mkl_version.h
    Read the documentation for your compiler for the option that enables preprocessing.
  2. [Optionally] Use the following preprocessor directives to check whether the macro is defined:
    • #ifdef, #endif
      for C/C++
    • !DEC$IF DEFINED, !DEC$ENDIF
      for Fortran
  3. Use preprocessor directives for conditional inclusion of code:
    • #if, #endif
      for C/C++
    • !DEC$IF, !DEC$ENDIF
      for Fortran
Example
This example shows how to compile a code segment conditionally for a specific version of
Intel® MKL
. In this case, the version is 11.2 Update 4:
Intel®
Fortran Compiler:
include "mkl.fi" !DEC$IF DEFINED INTEL_MKL_VERSION !DEC$IF INTEL_MKL_VERSION .EQ. 110204 * Code to be conditionally compiled !DEC$ENDIF !DEC$ENDIF
C/C++ Compiler
. Fortran Compiler with Enabled Preprocessing
:
#include "mkl.h" #ifdef INTEL_MKL_VERSION #if INTEL_MKL_VERSION == 110204 ... Code to be conditionally compiled #endif #endif

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804