インテル® MKL 11.3 ユーザーズガイド

条件付き数値再現性用の設定

インテル® MKL には、再現性のある結果を得るための関数と環境変数が用意されています。いずれかを使用してインテル® MKL を設定できますが、関数のほうがより柔軟性があります。

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

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

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

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

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

  2. (推奨) インテル® MKL 関数呼び出しの入力配列と出力配列を適切にアライメントします。

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

    • 次の呼び出しを行います。

      mkl_cbwr_set(MKL_CBWR_AVX2)

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

      set MKL_CBWR = "AVX2"

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

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

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

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

  2. (推奨) インテル® MKL 関数呼び出しの入力配列と出力配列を適切にアライメントします。

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

    • 次の呼び出しを行います。

      mkl_cbwr_set(MKL_CBWR_SSE2)

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

      set MKL_CBWR = "SSE2"

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

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

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

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

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

  2. (推奨) インテル® MKL 関数呼び出しの入力配列と出力配列を適切にアライメントします。

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

    • 次の呼び出しを行います。

      mkl_cbwr_set(MKL_CBWR_COMPATIBLE)

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

      set MKL_CBWR = "COMPATIBLE"

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

次のステップ

コード分岐の指定

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

『インテル® MKL リファレンス・マニュアル』の次のセクション:

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

関数を使用したインテル® MKL の CNR モードの設定方法。

PARDISO - 並列直接法スパース・ソルバー・インターフェイス

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

最適化に関する注意事項

インテル® コンパイラーは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。

改訂 #20110804

関連情報