GPU での oneMKL 初期化#
GPU 上で oneMKL 関数を使用してアプリケーションを実行する場合、いくつかのサービスルーチンにも時間がかかります。GPU 上で oneMKL 関数を呼び出すと、ライブラリー内で何が発生するか示します。
最初のステップは、どの oneMKL verbose モードが選択されたか確認することです。アプリケーションでの oneMKL の使用状況をプロファイルするには、oneMKL verbose モードが必要です。oneMKL Verbose モードの詳細については、次のドキュメントを参照してください。
oneMKL Verbose 機能は、BLAS (および BLAS-like 拡張機能)、LAPACK、FFT、および (DPC++ API のみ) RNG によってサポートされています。
リストの次の項目は、最適なコード実装を実行するためシステムにどの GPU が存在するかをチェックする oneMKL GPU 情報検出器です。アーキテクチャー、ステッピング、タイル、バックエンド、その他の重要なパラメーターを探します。
次のステップは、カーネルとそれに必要なものをすべて (プログラムキャッシュの作成、キャッシュへの新しいカーネルの追加、既存のカーネルの検索など) 作成することです。
最後に、oneMKL メモリー・マネージャーで若干の時間が費やされます。ここでは、内部の oneMKL 実装を使用して必要なメモリーが割り当てられたり、解放されます。oneMKL には、サポート関数 (英語) のリスト、メモリー関数の再定義 (英語) 機能、メモリー再利用による内部の高速メモリー割り当てを提供するメモリー・マネージャーがあります。
${ONEAPI_ROOT}/share/doc/mkl/examples/examples_sycl.tgz/sycl/blas/source/gemm.cpp (Linux*) または %ONEAPI_ROOT%\share\doc\mkl\examples\examples_sycl.zip\sycl\blas\source\gemm.cpp (Windows*) から oneMKL gemm の例を実行する詳細を見てみましょう。インテル® データセンター GPU マックスシリーズでは、単精度実数データタイプを使用した BLAS gemm の実行に 48.795 ミリ秒かかりました:
oneMKL Verbose モードの設定確認には 0.012 ミリ秒かかっています。
GPU デバイスに関する情報を取得する時間の合計は約 1.568 ミリ秒でした。
gemm カーネルの作成には約 0.958 ミリ秒かかりました。
カーネルキャッシュの割り当てには約 0.01 ミリ秒かかりました。
アプリケーションの最後で oneMKL ライブラリーがアンロードされると、キャッシュも消去されます。これには 0.111 ミリ秒かかりました。
上記の時間に加えて、gemm 関数を実行する前に、A、B、C 行列に必要なメモリーがすべて割り当て済みであることを確認する必要があります。これにはさらに 0.084 ミリ秒かかりました。そして、gemm を実行した後、割り当てられたすべてのメモリーをクリーンアップする必要があり、これには約 0.14 ミリ秒かかりました。
CPU 上で gemm を実行する場合、従来の C/Fortran 実装が使用されます。これら初期化コストの詳細については、デベロッパー・リファレンスの C/Fortran バージョンを参照してください。