GPU での oneMKL 初期化

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 バージョンを参照してください。