この記事は、インテル® デベロッパー・ゾーンに公開されている「Get Started with Intel® oneAPI Math Kernel Library」の日本語参考訳です。
この記事の PDF 版はこちらからご利用になれます。
バージョン 2021.1 (最終更新日: 2020 年 12 月 4 日)
インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、CPU および GPU 向けに高度に最適化され、広範囲に並列化されたルーチンからなる数学計算ライブラリーにより、最高のパフォーマンスを実現するのを支援します。CPU 上のほとんどのルーチンには C と Fortran インターフェイスが用意されており、CPU と GPU 上の一部のルーチンでは DPC++ インターフェイスが用意されています。さまざまなインターフェイスで数学演算の包括的なサポートを提供しています。
CPU 上の C および Fortran
- 線形代数
- 高速フーリエ変換 (FFT)
- ベクトル演算
- 直接法および反復法スパースソルバー
- 乱数ジェネレーター
CPU および GPU 上の DPC++ (詳細は、『インテル® oneAPI マス・カーネル・ライブラリー – データ並列 C++ デベロッパー・リファレンス』 (英語) を参照)
- 線形代数
- BLAS
- 一部のスパース BLAS 機能
- 一部の LAPACK 機能
- 高速フーリエ変換 (FFT)
- 1D r2c FFT
- 1D c2c FFT
- 乱数ジェネレーター
- 単精度の一様分布、ガウス分布、対数正規分布
- 一部のベクトル演算機能
はじめに
既知の問題と最新情報は、「リリースノート」 (英語) を参照してください。
動作環境は、「インテル® oneAPI マス・カーネル・ライブラリー の動作環境」 (英語) を参照してください。
DPC++ コンパイラーの動作環境は、「インテル® oneAPI DPC++/C++ コンパイラー導入ガイド」 (英語) を参照してください。
ステップ 1: インテル® oneMKL のインストール
インテル® oneAPI ベース・ツールキットからインテル® oneMKL (英語) をダウンロードします。
ステップ 2: 関数またはルーチンの選択
問題に最適なインテル® oneMKL の関数またはルーチンを選択します。次のリソースを利用できます。
リソースのリンク | 説明 |
---|---|
インテル® oneMKL デベロッパー・ガイド Linux* 版 (英語) Windows* 版 (英語) macOS* 版 (英語) |
デベロッパー・ガイドには、次のようなトピックに関する詳細な情報があります。
|
インテル® oneMKL デベロッパー・リファレンス C 言語 (英語) Fortran 言語 (英語) DPC++ 言語 (英語) |
デベロッパー・リファレンス (C、Fortran、および DPC++ 版) には、すべてのライブラリー・ドメインの関数とインターフェイスの詳細な説明があります。 |
インテル® oneMKL 関数検索アドバイザー (英語) | LAPACK 関数検索アドバイザーを使用して、特定の問題に役立つ LAPACK ルーチンを調査できます。例えば、次のような条件で検索できます。
|
ステップ 3: コードのリンク
インテル® oneMKL リンク行アドバイザー (英語) を使用して、プログラムの特徴に応じてリンクコマンドを設定します。
いくつかの制限と追加の要件:
DPC++ 向けインテル® oneAPI MKL は、mkl_intel_ilp64 インターフェイス・ライブラリーとシーケンシャルまたは TBB スレッドのみをサポートしています。
Linux* 上で静的リンクを使用する DPC++ インターフェイス |
dpcpp -fsycl-device-code-split=per_kernel -DMKL_ILP64 <typical user includes and linking flags and other libs> ${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 インターフェイスと TBB スレッドを使用する main.cpp をビルドして静的にリンクする場合: dpcpp -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* 上で動的リンクを使用する DPC++ インターフェイス |
dpcpp -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 例えば、ILP64 インターフェイスと TBB スレッドを使用する main.cpp をビルドして動的にリンクする場合: dpcpp -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 |
Windows* 上で静的リンクを使用する DPC++ インターフェイス |
dpcpp -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 インターフェイスと TBB スレッドを使用する main.cpp をビルドして静的にリンクする場合: dpcpp -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* 上で動的リンクを使用する DPC++ インターフェイス |
dpcpp -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 例えば、ILP64 インターフェイスと TBB スレッドを使用する main.cpp をビルドして動的にリンクする場合: dpcpp -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 |
OpenMP* オフロードをサポートする C/Fortran インターフェイス |
インテル® oneMKL の C/Fortran インターフェイスを使用して GPU への OpenMP* オフロード機能を利用できます。 詳細は、「GPU への OpenMP* オフロード導入ガイド」 (英語) を参照してください。 次の変更をインテル® oneMKL の C/Fortran コンパイル/リンク行に適用して GPU への OpenMP* 機能を有効にします。
例えば、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 その他のサポートされるすべての設定は、「インテル® oneMKL リンク行アドバイザー」 (英語) を参照してください。 |
関連情報
リソース | 説明 |
---|---|
チュートリアル: インテル® oneMKL を使用した行列乗算
|
このチュートリアルでは、インテル® oneMKL を使用して行列乗算を行い、行列乗算のパフォーマンスを測定して、スレッドを制御する方法を説明します。 |
インテル® oneMKL リリースノート (英語) | リリースノートには、新機能と変更された機能を含む、最新バージョンのインテル® oneMKL に関する情報が記載されています。リリースに関連する主要なオンラインリソースへのリンクも含まれています。次の情報が得られます。
|
インテル® oneMKL (英語) | インテル® oneMKL 製品ページサポートとオンライン・ドキュメントに関する情報を入手できます。 |
法務上の注意書きと最適化に関する注意事項
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。さらに詳しい情報をお知りになりたい場合は、http://www.intel.com/benchmarks/ (英語) を参照してください。
インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
実際の費用と結果は異なる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。
詳細は、www.Intel.com/PerformanceIndex (英語) を参照してください。