oneMKL バージョン依存コンパイルで定義済みのプリプロセッサー・シンボルを使用

プリプロセッサー・シンボル (マクロ) は、プログラムがコンパイルされる前にプログラム内の値を置き換えます。置換は前処理フェーズで実行されます。

次のプリプロセッサー・シンボルが利用できます。

定義済みプリプロセッサー・シンボル

説明

__INTEL_MKL__

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のメジャーバージョン

__INTEL_MKL_MINOR__

下位互換のため、このマクロの値は 0 です。

__INTEL_MKL_UPDATE__

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のアップデート・バージョン

__INTEL_MKL_PATCH__

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のパッチバージョン

INTEL_MKL_VERSION

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のフルバージョンは次の形式です。

INTEL_MKL_VERSION = (__INTEL_MKL__*100+__INTEL_MKL_UPDATE__)*100+__INTEL_MKL_PATCH__

これらのシンボルにより、ライブラリーの特定バージョンで導入された新機能を使用するコードの条件付きコンパイルが可能になります。

条件付きコンパイルを行うには:

  1. コンパイラーに応じて、マクロが定義されているファイルをコードにインクルードします:

    C/C++ コンパイラー:

    mkl_version.h

    または mkl.h (mkl_version.h をインクルードする)

    インテル® Fortran コンパイラー:

    mkl.fi

    プリプロセッサーが有効な Fortran コンパイラー:

    mkl_version.h

    前処理を有効にするオプションについては、コンパイラーのドキュメントを参照してください。

  2. [オプション] 次のプリプロセッサー・ディレクティブを使用して、マクロが定義されているか確認します:
    • C/C++ の場合、#ifdef、#endif
    • Fortran の場合、!DEC$IF DEFINED、!DEC$ENDIF
  3. 条件付きコードの組み込みには、プリプロセッサー・ディレクティブを使用します:
    • C/C++ の場合、#if、#endif
    • Fortran の場合、!DEC$IF、!DEC$ENDIF

この例は、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の固有のバージョンに対して条件付きでコードセグメントをコンパイルする方法を示しています。ここで対象とするバージョンは 2025.0 です。

インテル® Fortran コンパイラー:

include "mkl.fi"
!DEC$IF DEFINED INTEL_MKL_VERSION
!DEC$IF INTEL_MKL_VERSION .EQ.20250000
*   条件付きでコンパイルするコード 
!DEC$ENDIF
!DEC$ENDIF

C/C++ コンパイラー/プリプロセッサーが有効な Fortran コンパイラー:

#include "mkl.h"
#ifdef INTEL_MKL_VERSION
#if INTEL_MKL_VERSION ==  20250000
...     条件付きでコンパイルするコード
#endif
#endif