条件付き数値再現性の導入ガイド

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) には、再現性のある結果を得る関数と環境変数が用意されています。関数と環境変数のどちらかを使用してインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) を設定できますが、関数のほうがより柔軟性があります。

次の例は、条件付き数値再現性用の設定方法を示しています。

これらの例では、入力データと出力データをアライメントすることを推奨していますが、CNR モードで実行するインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数でアライメントされていないデータを使用することもできます。データ・アライメントの詳細については、再現性の条件を参照してください。

インテル® AVX2 対応のインテル® プロセッサー

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の呼び出しがインテル® AVX2 対応のインテル® プロセッサーで同じ結果になることを保証するには、次の操作を行います。

  1. アプリケーションが固定のスレッド数を使用していることを確認します

  2. (推奨) インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数呼び出しの入力配列と出力配列を適切にアライメントします

  3. 以下のいずれかの操作を行います。

    • mkl_cbwr_set(MKL_CBWR_AVX2) 呼び出します

    • 次の環境変数を設定します。

      export MKL_CBWR = AVX2

インテル以外のプロセッサーと、インテル® AVX2 命令をサポートしていないインテル® プロセッサーでは、上記の関数呼び出しでエラーが返されて CNR モードが有効にならず、代わりに AUTO 分岐が使用されるため、この環境設定の結果が異なる場合があります。

インテル® SSE2 対応のインテル® プロセッサー

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の呼び出しがインテル® SSE2 対応のインテル® プロセッサーで同じ結果になることを保証するには、次の操作を行います。

  1. アプリケーションが固定のスレッド数を使用していることを確認します

  2. (推奨) インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数呼び出しの入力配列と出力配列を適切にアライメントします

  3. 以下のいずれかの操作を行います。

    • mkl_cbwr_set(MKL_CBWR_SSE2) 呼び出します

    • 次の環境変数を設定します。

      export MKL_CBWR = SSE2

インテル以外のプロセッサーでは、上記の関数呼び出しでエラーが返されて CNR モードが有効にならず、代わりに AUTO 分岐が使用されるため、この環境設定の結果が異なる場合があります。

インテル® SSE2 対応のインテル® プロセッサーまたは互換プロセッサー

インテル以外のプロセッサーでは、関数呼び出しでは MKL_CBWR_AUTO および MKL_CBWR_COMPATIBLE オプションのみ、環境変数では AUTO および COMPATIBLE オプションのみをサポートしています。

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の呼び出しがインテル® SSE2 対応のインテル® プロセッサーまたは互換プロセッサーで同じ結果になることを保証するには、次の操作を行います。

  1. アプリケーションが固定のスレッド数を使用していることを確認します。

  2. (推奨) インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数呼び出しの入力配列と出力配列を適切にアライメントします

  3. 以下のいずれかの操作を行います。

    • Call mkl_cbwr_set(MKL_CBWR_COMPATIBLE) 呼び出します

    • 次の環境変数を設定します。

      export MKL_CBWR = COMPATIBLE

インテル® プロセッサーと互換プロセッサーには、近似命令 (rcpps/rsqrtps) のように異なる結果を返す命令がいくつかあるため、特別な MKL_CBWR_COMPATIBLE/COMPATIBLE オプションが提供されています。このオプションは、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) がそれらの命令を使用することなく単一のインテル® SSE2 用コードパスを実行することを保証します。

インテル® GPU

oneMKL の呼び出しがインテル® AVX2 対応のインテル® プロセッサーで同じ結果になることを保証するには、次の操作を行います。

次のステップ

コード分岐の指定

環境変数を使用した分岐の指定の詳細。

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) デベロッパー・リファレンスの次のセクションを参照してください。

条件付き数値再現性 (CNR) 用サポート関数

関数を使用したインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の CNR モードの設定方法。

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) PARDISO (並列直接法スパースソルバー・インターフェイス)

PARDISO 用の CNR モードの設定方法。

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

性能は、使用状況、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) をご覧ください。

改訂 #20201201

関連情報