インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 導入ガイド

インテル® oneAPIインテル® oneMKL

この資料は、インテルの「Downloadable Documentation: Intel® oneAPI Toolkits and Components」からダウンロードした『Intel® oneAPI Math Kernel Library』 (mkl_docs_2025.0.0.zip) の「Get Started with Intel® oneAPI Math Kernel Library」 (documentation\en\mkl\oneapi_gsg_mkl_dpcpp\) を iSUS で翻訳した日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。

本ドキュメントはレイアウト調整および校閲を行っておりません。誤字脱字、製品名や用語の表記、レイアウト等の不具合が含まれる可能性があることを予めご了承ください。


インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、CPU および GPU 向けに高度に最適化され、広範囲に並列化されたルーチンからなる数学計算ライブラリーにより、最高のパフォーマンスを実現するのを支援します。CPU 上のほとんどのルーチンには C と Fortran インターフェイスが用意されており、CPU と GPU 上の一部のルーチンでは SYCL* インターフェイスが用意されています。さまざまなインターフェイスで数学演算の包括的なサポートを提供しています。

CPU 上の C および Fortran

  • 線形代数
  • 高速フーリエ変換 (FFT)
  • ベクトル演算
  • 直接法および反復法スパースソルバー
  • 乱数ジェネレーター

CPU および GPU 上の SYCL* (詳細は、『インテル® oneAPI マス・カーネル・ライブラリー – データ並列 C++ デベロッパー・リファレンス』 (英語) を参照)

  • 線形代数
    • BLAS
    • 一部のスパース BLAS 機能
    • 一部のスパース LAPACK (Linear Algebra PACKage) 機能
  • 高速フーリエ変換 (FFT)
    • 1D、2D、および 3D
  • 乱数ジェネレーター

    • 一部の LAPACK 機能
  • 一部のベクトル演算機能

はじめに

既知の問題やその他の最新情報については、リリースノート (英語) のページをご覧ください。

システム要件については、インテル® oneAPI マス・カーネル・ライブラリーのシステム要件 (英語) のページをご覧ください。

DPC++ コンパイラーの要件については、インテル® oneAPI DPC++/C++ コンパイラーの導入ガイド (英語) を参照してください。

ステップ 1: インテル® oneAPI マス・カーネル・ライブラリーのインストール

インテル® oneAPI ベース・ツールキットからインテル® oneAPI マス・カーネル・ライブラリー (英語) をダウンロードします。

Python* ディストリビューションについては、インテル® ディストリビューションの Python* (英語) を参照してください。

Python* ディストリビューションについては、次の制限に注意してください。

Linux* 上の PIP ディストリビューション向けの oneMKL devel パッケージ (mkl-devel) は、動的ライブラリーのシンボリック・リンクを提供していません (詳細については、PIP GitHub の問題 #5919 (英語) を参照してください)。

oneMKL 開発パッケージと動的に、または単一の動的ライブラリーをリンクする場合 (詳細については、インテル® oneMKL リンク・ライン・アドバイザー (英語) を参照)、リンクラインをインテル® oneMKL ライブラリーの完全な名称とバージョンに変更する必要があります。

pkg-config ツールを使用したコンパイルとリンクの詳細については、インテル® oneAPI マス・カーネル・ライブラリーおよび pkg-config ツール (英語) を参照してください。

以下は、oneAPI ベース・ツールキットをシンボリック・リンクしたインテル® oneMKL リンクラインの例です。

Linux*:

icx app.obj -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64-lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl

PIP 開発パッケージでライブラリーの完全な名称とバージョンとを使用したインテル® oneMKL リンクラインの例:

Linux*:

icx app.obj ${MKLROOT}/lib/intel64/libmkl_intel_lp64.so.2 ${MKLROOT}/lib/intel64/libmkl_intel_thread.so.2 ${MKLROOT}/lib/intel64/libmkl_core.so.2 -liomp5 -lpthread -lm -ldl

ステップ 2: 関数またはルーチンの選択

問題に最適なインテル® oneMKL の関数またはルーチンを選択します。次のリソースを利用できます。

リソースのリンク 説明

インテル® oneMKL デベロッパー・ガイド (Linux*) (英語)

インテル® oneMKL デベロッパー・ガイド (Windows*) (英語)

デベロッパー・ガイドには、次のようなトピックに関する詳細な情報があります。

  • アプリケーションのコンパイルとリンク
  • カスタム DLL のビルド
  • スレッド化
  • メモリー管理

インテル® oneMKL デベロッパー・リファレンス – C (英語)

インテル® oneMKL デベロッパー・リファレンス – Fortran (英語)

インテル® oneMKL デベロッパー・リファレンス – DPC++ (英語)

デベロッパー・リファレンス (C、Fortran、および DPC++ 版) には、すべてのライブラリー・ドメインの関数とインターフェイスの詳細な説明があります。

ステップ 3: ライブラリーをリンクします。

インテル® oneMKL リンク・ライン・アドバイザー (英語) を使用して、プログラムの特徴に応じてリンクコマンドを設定します。

コードをリンクする前に、次の制限と追加要件を考慮してください。

  • SYCL* 対応のインテル® oneAPI マス・カーネル・ライブラリーは、mkl_intel_ilp64 インターフェイス・ライブラリーのみをサポートする実験的なデータ・フィッティング・ドメインを除く、すべてのインターフェイス・ライブラリーの使用をサポートします。
  • SYCL* 対応のインテル® oneAPI マス・カーネル・ライブラリーは、あらゆるスレッド・ライブラリーの使用をサポートしています。ただし、インテル® oneMKL の OpenMP スレッド・ライブラリーを使用すると、oneTBB を使用する他の SYCL* カーネルを実行する CPU デバイスで潜在的な構成上の問題が発生する可能性があることに注意してください。

Linux* 上で静的リンクを使用する SYCL* インターフェイス

icpx -fsycl -fsycl-device-code-split=per_kernel -DMKL_ILP64 <典型的なユーザー・インクルードとリンクフラグおよびその他のライブラリー> ${MKLROOT}/lib/intel64/libmkl_sycl.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_<sequential | tbb_thread>.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lsycl -lOpenCL -lpthread -ldl -lm

ILP64 インターフェイスと oneTBB スレッドを使用する main.cpp をビルドして静的にリンクする例:

icpx -fsycl -fsycl-device-code-split=per_kernel -DMKL_ILP64 -I${MKLROOT}/include main.cpp ${MKLROOT}/lib/intel64/libmkl_sycl.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_tbb_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -L${TBBROOT}/lib/intel64/gcc4.8 -ltbb -lsycl -lOpenCL -lpthread -lm -ldl

Linux* 上で動的リンクを使用する SYCL* インターフェイス

icpx -fsycl -DMKL_ILP64 <typical user includes and linking flags and other libs> -L${MKLROOT}/lib/intel64 -lmkl_sycl -lmkl_intel_ilp64 -lmkl_<sequential|tbb_thread> -lmkl_core -lsycl -lOpenCL -lpthread -ldl -lm

すべての SYCL* ドメインを含む ILP64 インターフェイスと oneTBB スレッドを使用する main.cpp をビルドして動的にリンクする例:

icpx -fsycl -DMKL_ILP64 -I${MKLROOT}/include main.cpp -L${MKLROOT}/lib/intel64 -lmkl_sycl -lmkl_intel_ilp64 -lmkl_tbb_thread -lmkl_core -lsycl -lOpenCL -ltbb -lpthread -ldl -lm

または、BLAS SYCL* ドメインのみを使用した同じ構成 (SYCL* ドメイン固有のライブラリーは oneMKL ドメインの名前空間と整合されていることに注意してください)。

icpx -fsycl -DMKL_ILP64 -I${MKLROOT}/include main.cpp -L${MKLROOT}/lib/intel64 -lmkl_sycl_blas -lmkl_intel_ilp64 -lmkl_tbb_thread -lmkl_core -lsycl -lOpenCL -ltbb -lpthread -ldl -lm

Windows* 上で静的リンクを使用する SYCL* インターフェイス

icpx -fsycl -fsycl-device-code-split=per_kernel -DMKL_ILP64 <typical user includes and linking flags and other libs> "%MKLROOT%"\lib\intel64\mkl_sycl.lib mkl_intel_ilp64.lib mkl_<sequential|tbb_thread>.lib mkl_core_lib sycl.lib OpenCL.lib

ILP64 インターフェイスと oneTBB スレッドを使用する main.cpp をビルドして静的にリンクする例:

icpx -fsycl -fsycl-device-code-split=per_kernel -DMKL_ILP64 -I"%MKLROOT%\include" main.cpp"%MKLROOT%"\lib\intel64\mkl_sycl.lib mkl_intel_ilp64.lib mkl_tbb_thread.lib mkl_core.lib sycl.lib OpenCL.lib tbb.lib

Windows* 上で動的リンクを使用する SYCL* インターフェイス

icx -fsycl -DMKL_ILP64 <typical user includes and linking flags and other libs> "%MKLROOT%"\lib\intel64\mkl_sycl_dll.lib mkl_intel_ilp64_dll.lib mkl_<sequential|tbb_thread>_dll.lib mkl_core_dll.lib tbb.lib sycl.lib OpenCL.lib

すべての SYCL* ドメインを含む ILP64 インターフェイスと oneTBB スレッドを使用する main.cpp をビルドして動的にリンクする例:

icx -fsycl -fsycl-device-code-split=per_kernel -DMKL_ILP64 -I"%MKLROOT%\include" main.cpp "%MKLROOT%"\lib\intel64\mkl_sycl_dll.lib mkl_intel_ilp64_dll.lib mkl_tbb_thread_dll.lib mkl_core_dll.lib tbb.lib sycl.lib OpenCL.lib

または、BLAS SYCL* ドメインのみを使用した同じ構成 (SYCL* ドメイン固有のライブラリーは oneMKL ドメインの名前空間と整合されていることに注意してください)。

icx -fsycl -fsycl-device-code-split=per_kernel -DMKL_ILP64 -I"%MKLROOT%\include" main.cpp "%MKLROOT%"\lib\intel64\mkl_sycl_blas_dll.lib mkl_intel_ilp64_dll.lib mkl_tbb_thread_dll.lib mkl_core_dll.lib tbb.lib sycl.lib OpenCL.lib

OpenMP* オフロードをサポートする C/Fortran インターフェイス

インテル® oneAPI マス・カーネル・ライブラリーの C/Fortran インターフェイスを使用して GPU への OpenMP* オフロード機能を利用できます。

次の変更を oneMKL の C/Fortran コンパイル/リンク行に適用して GPU への OpenMP* 機能を有効にします。

  • 追加のコンパイル/リンクオプション:-fiopenmp -fopenmp-targets=spir64 -mllvm -vpo-paropt-use-raw-dev-ptr -fsycl
  • 追加の oneMKL ライブラリー: oneMKL SYCL* ライブラリー

例えば、Linux* 上で ilp64 インターフェイスと OpenMP* スレッドを使用する main.cpp をビルドして静的にリンクする場合:

icx -fiopenmp -fopenmp-targets=spir64 -mllvm -vpo-paropt-use-raw-dev-ptr -fsycl -DMKL_ILP64 -m64 -I$(MKLROOT)/include main.cpp L${MKLROOT}/lib/intel64 -lmkl_sycl -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lsycl -lOpenCL -lstdc++ -lpthread -lm -ldl

その他のサポートされるすべての設定は、インテル® oneAPI マス・カーネル・ライブラリーのリンク・ライン・アドバイザー (英語) を参照してください。

さらに詳しく

リソース

説明

GitHub の oneMKL SYCL* サンプル (英語)

これらのサンプルは、CPU および GPU をターゲットとしたマルチ・アーキテクチャー対応のアプリケーション開発、オフロード、および最適化を支援するように作成されています。

チュートリアル: インテル® oneAPI マス・カーネル・ライブラリーを使用した行列乗算:

このチュートリアルでは、oneMKL を使用して行列乗算を行い、行列乗算のパフォーマンスを測定して、スレッドを制御する方法を説明します。

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) リリースノート (英語)

リリースノートには、新機能と変更された機能を含む、最新バージョンのインテル® oneMKL に関する情報が記載されています。リリースに関連する主要なオンラインリソースへのリンクも含まれています。次の情報が得られます。

  • 新機能
  • 製品の内容
  • テクニカルサポートの利用方法
  • ライセンス定義

インテル® oneAPI マス・カーネル・ライブラリー (英語)

サポートとオンライン・ドキュメントについては、このインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 製品ページを参照してください。

インテル® oneAPI マス・カーネル・ライブラリー・クックブック インテル® oneAPI マス・カーネル・ライブラリーには、行列を乗算する、連立方程式を解く、フーリエ変換を行うなど、さまざまな数値問題を解く際に役立つ多くのルーチンが含まれています。
インテル® oneAPI マス・カーネル・ライブラリーのベクトル統計 (VS) に関する注意事項 (英語)

このドキュメントには、VS に含まれる乱数ジェネレーターの概要、使用モデル、およびテスト結果が記載されています。

インテル® oneAPI マス・カーネル・ライブラリー・ベクトル統計乱数ジェネレータのパフォーマンス・データ (英語)

VS (ベクトル統計)、CPE (要素あたりのクロック数) を含む RNG (乱数ジェネレーター)、BRNG (基本乱数ジェネレーター)、生成された分布ジェネレーター、および生成されたベクトルの長さを使用して取得されたパフォーマンス・データの詳細は、このドキュメントを参照してください。

インテル® oneAPI マス・カーネル・ライブラリー・ベクトル演算のパフォーマンスと精度データ (英語)

ベクトル演算 (VM) は、ベクトル引数に関する基本関数を計算します。VM には、ベクトルを操作する計算コストの高いコア数学関数 (累乗、三角関数、指数関数、双曲線関数など) の高度に最適化された実装セットが含まれています。

インテル® oneAPI マス・カーネル・ライブラリーのサマリー統計に関するアプリケーションの注意事項 (英語)

サマリー統計は、インテル® oneAPI マス・カーネル・ライブラリーのベクトル統計ドメインのサブコンポーネントです。サマリー統計は、初期の統計分析機能を提供し、多次元データセットの並列処理のソリューションを提供します。

LAPACK の例 (英語)

このドキュメントでは、oneMKL LAPACK (Linear Algebra PACKage) ルーチンのコード例を示します。

法務上の注意書き

性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。

SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。

詳細については、http://www.intel.com/performance/ (英語) を参照してください。

インテルのテクノロジーを使用するには、対応したハードウェア、特定のソフトウェア、またはサービスの有効化が必要となる場合があります。

絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。

実際の費用と結果は異なる場合があります。

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

製品および性能に関する情報

性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。

改訂 #20201201

本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。

本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。

インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。

タイトルとURLをコピーしました