この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® oneAPI Math Kernel Library (oneMKL) Release Notes」の日本語参考訳です。
この記事の PDF 版はこちらからご利用になれます。
2020 年 12 月 4 日
リリースの入手方法
新機能
2021.1 初期リリース
機能
本リリースでは、製品の名称がインテル® マス・カーネル・ライブラリー (インテル® MKL) からインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) に変更されました。
インテルが長年にわたって提供してきた CPU 用の C および Fortran API は引き続きサポートされるため、既存のインテル® MKL 製品ユーザーは安心してインテル® oneMKL に移行できます。
インテル® oneMKL は従来の C および Fortran API を拡張して、インテル® GPU 向けのプログラミングに対応した 2 つのプログラミング・モデルを新たにサポートしています。データ並列 C++ (DPC++) API は、CPU とインテル® GPU 向けの両方のプログラミングをサポートし、OpenMP* オフロードの C/Fortranインターフェイスはインテル® GPU 向けのプログラミングをサポートします。
本リリースでは、共有ライブラリーのバージョンモデルが変更されています。詳細は、『インテル® oneMKL デベロッパー・リファレンス』 (英語) を参照してください。
次の表は、インテル® oneMKL に含まれる一般的なドメインと、新しい DPC++ および OpenMP* オフロード・プログラミング・モデルで提供されるドメインを示します。
ドメイン | CPU API | インテル® GPU API | ||||
DPC++ | C | Fortran | DPC++ | OpenMP* オフロード C |
OpenMP* オフロード Fortran |
|
BLAS および BLAS 拡張 | ○ | ○ | ○ | ○ | ○ | ○ |
LAPACK および LAPACK 拡張 | ○1 | ○ | ○ | ○1 | ○2 | ○2 |
ScaLAPACK | × | ○ | ○ | × | × | × |
ベクトル数学 | ○ | ○ | ○ | ○5 | ○5 | ○3.5 |
ベクトル統計 (乱数ジェネレーター) | ○1 | ○ | ○ | ○1 | ○2 | ○2.3 |
ベクトル統計 (サマリー統計) | ○1 | ○ | ○ | ○1 | × | × |
データ適合 | × | ○ | ○ | × | × | × |
FFT/DFT | ○ | ○ | ○ | ○ | ○4 | ○4 |
スパース BLAS | ○1 | ○ | ○ | ○1 | ○2 | × |
スパースソルバー | × | ○ | ○ | × | × | × |
1 一部の機能を利用可能。サポートされる DPC++ 機能の一覧は、『DPC++ デベロッパー・リファレンス』 (英語) を参照してください。
2 一部の機能を利用可能。機能の一覧は、デベロッパー・リファレンス (C (英語) および Fortran (英語)) を参照してください。
3 Linux* でのみサポート。
4 DFTI インターフェイスはサポート、FFTW インターフェイスはみサポート。
5 一部の機能を利用可能。サポートされる DPC++ 機能の一覧は、『DPC++ デベロッパー・リファレンス』 (英語) またはデベロッパー・リファレンス (C (英語) および Fortran (英語)) を参照してください。GPU 向けに実装されていない関数も使用可能であり、ホスト CPU 上で透過的に実行されます。
パフォーマンスの推奨事項:
- Windows* 上の DPC++ および OpenMP* オフロードでは、BLAS と LAPACK 機能のパフォーマンスを最大限に高めるため OpenCL* ランタイムを使用します。OpenCL* ランタイムを有効するには、次の環境変数を設定します。
- SYCL_BE=PI_OPENCL
- LIBOMPTARGET_PLUGIN=opencl
DPC++ の既知の問題と制限事項
- Windows* では、動的リンクは BLAS と LAPACK ドメインでのみサポートされます。
- カスタム・ダイナミック・ビルダーツールは、DPC++ インターフェイス用のカスタム・ダイナミック・ライブラリーのビルドをサポートしていません。
- デバイス RNG ルーチンは、CPU デバイス上で “-fno-sycl-early-optimizations” コンパイラー・オプションを指定して使用する必要があります。
- インテル® GPU 上での離散フーリエ変換 (DFT) とインテル® oneAPI レベルゼロ・バックエンドは、大規模なバッチサイズの場合、正しくない結果になることがあります。インテル® GPU 上で DFT を実行するには、環境変数 SYCL_BE=PI_OPENCL を設定します。
- 実数の逆方向アウトオブプレース DFT はインテル® GPU 上で正しくない結果になることがあります。回避策として、インプレース変換を使用してください。
- インテル® GPU 上での LU 因数分解 (getrf) は、OpenCL* バックエンドで倍精度を使用すると、無効な引数エラーで失敗することがあります。回避策として、インテル® oneAPI レベルゼロ・バックグラウンドを使用してください。
- Windows* では静的リンクに時間がかかります (最大 10 分)。スタティック・ライブラリーをリンクすると、GPU カーネルの影響でアプリケーション・サイズが大きくなります。
- スパース BLAS の USM API は malloc_shared で割り当てられた入力配列でのみ動作するため、ホストから常にデータにアクセスできます。
- Windows* では、DPC++ ライブラリーは Release バージョンのみ提供されており、DPC++ アプリケーションの Debug バージョンのビルドには使用できません。
- GPU 上の DFT では、パディングを含むユーザー定義のストライドはサポートされていません。
C/Fortan の既知の問題と制限事項
- OpenMP* オフロードは。Windows* 上のスタティック・ライブラリーでのみサポートされます。
- Windows* (LAPACK (C のみ) と DFT ドメイン) では、OpenMP* オフロードはインテル® oneAPI レベルゼロ・バックエンドをサポートしておらず、OpenCL* バックエンドでのみ動作します。OpenMP* オフロードを実行するには、環境変数 LIBOMPTARGET_PLUGIN=opencl を設定します。
- Linux* (DFT ドメイン) では、OpenMP* オフロードはインテル® oneAPI レベルゼロ・バックエンドをサポートしておらず、OpenCL* バックエンドでのみ動作します。OpenMP* オフロードを実行するには、環境変数 LIBOMPTARGET_PLUGIN=opencl を設定します。
- カスタム・ダイナミック・ビルダー・ツールは、OpenMP* オフロードの C および Fortran インターフェイス用のカスタム・ダイナミック・ライブラリーのビルドをサポートしていません。
- インテル® Fortran コンパイラー・クラシック (ifx) は、特定の SYCL* リンクオプション (-fsycl-device-code-split) をサポートしていないため、SYCL* ベースの関数の最初の呼び出しに時間がかかることがあります。また、DG1 の機能も影響を受ける可能性があります。後述する倍精度のエミュレーションの有効化に関する注意を参照してください。
- OpenMP* オフロードの LU 分解 (dgetrf) は、OpenCL* バックエンドで倍精度で使用すると、無効な引数エラーで失敗することがあります。回避策として、インテル® oneAPI レベルゼロ・バックグラウンドを使用してください。
- インテル® Fortran コンパイラー・クラシック 2021.1 (ifx) はベータ版であり、言語を完全にサポートしていません。そのため、一部のインテル® oneMKL の Fortran サンプルはインテル® Fortran コンパイラー・クラシック 2021.1 (ifx) でコンパイルできない場合があります。
- Windows* 10 バージョン 2004 では、x パラメーターがゼロの状態で fmod 関数が呼び出されると、浮動小数点スタックが不正な状態になります (英語)。問題のある fmod 関数呼び出しの後に zgetrs などの特定のインテル® oneMKL 関数が呼び出された場合、戻り値 (特に、NaNs) は正しくない可能性があります。可能な場合、Microsoft* によって修正が提供されるまで、Windows* 10 バージョン 2004 以降の使用を避けてください。あるいは、fmod を呼び出した後に、emms 命令を呼び出して浮動小数点スタックをクリアすることもできます。
- Fortran のベクトル数学とサービスドメインのヘッダー (mkl_vml.f90、mkl_service.fi) は、GNU* Fortran 10.10 でコンパイルするとエラーを出力する場合があります。回避策として、コンパイル行に -fallow-invalid-boz を追加してください。
- 反復法スパースソルバー (ISS RCI) の <solver>_init と <solver>_check 機能の動作が変更され、後者の呼び出しがオプションとなり、呼び出された場合はパラメーターの不整合を修正します。
- スパース BLAS の利用モデルには、作成/検査、実行、および破棄の 3 つのステージがあります。C の OpenMP* オフロードを使用するスパース BLAS では、データ依存関係に問題がなければ、実行ステージのみを非同期に行うことができます。既知の制限事項: C の OpenMP* 非同期オフロードを使用するスパース BLAS では、安全に実行するため mkl_sparse_?_create_csr と mkl_sparse_destroy 呼び出しから “nowait” 節を削除して、mkl_sparse_destroy の前に “#pragma omp taskwait” を追加する必要があります。
- Fortran の OpenMP* オフロードを使用する DFT では、ランク 1 の入力配列のみがサポートされます。多次元入力データはランク 1 配列で表現する必要があります。
- GPU への DFT の OpenMP* オフロードでは、パディングを含むユーザー定義のストライドはサポートされていません。
インテル® Iris® Xe MAX グラフィックスの既知の問題と制限事項
サポートされていない機能:
- 倍精度の機能はこのプラットフォームではサポートされていません。
- また、次の単精度ベクトル数学関数は、非正規化数を含む非常に大きな、または非常に小さな引数に対して、CPU の対応する関数よりも精度が低くなります: atan2pi、atanpi、cdfnorm、cdfnorminv、cosd、cosh、erfc、erfcinv、erfinv、expm1、frac、hypot、invcbrt、invsqrt、ln、powx、sind、sinh、および tand。
- いくつかのベクトル数学関数には高精度 (HA) バージョンがなく、低精度 (LA) バージョンと拡張精度 (EP) バージョンのみがあります: atan2pi、atanpi、cos、cosd、cospi、log2、log10、pow、powx、sin、sincos、sind、sinpi、tan。
その他の問題:
- Windows* では、一部の BLAS および LAPACK 機能に OpenCL* バックエンドを使用する必要があります。
法務上の注意書きと最適化に関する注意事項
インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
実際の費用と結果は異なる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴ、Iris は、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。
詳細は、www.Intel.com/PerformanceIndex (英語) を参照してください。