条件付きビット単位演算の再現性用の設定

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

次の例は、条件付きビット単位演算の再現性用の設定方法を示しています。

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

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

  1. 次の項目を確認します。

    • アプリケーションが固定のスレッド数を使用している。

    • インテル® MKL 関数呼び出しの入力配列と出力配列が適切にアライメントされている。

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

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

      mkl_cbwr_set(MKL_CBWR_AVX)

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

      MKL_CBWR_BRANCH = AVX

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

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

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

  1. 次の項目を確認します。

    • アプリケーションが固定のスレッド数を使用している。

    • インテル® MKL 関数呼び出しの入力配列と出力配列が適切にアライメントされている。

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

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

      mkl_cbwr_set(MKL_CBWR_SSE2)

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

      MKL_CBWR_BRANCH = SSE2

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

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

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

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

  1. 次の項目を確認します。

    • アプリケーションが固定のスレッド数を使用している。

    • インテル® MKL 関数呼び出しの入力配列と出力配列が適切にアライメントされている。

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

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

      mkl_cbwr_set(MKL_CBWR_COMPATIBLE)

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

      MKL_CBWR_BRANCH = COMPATIBLE

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

次のステップ

コード分岐の指定

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

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

条件付きビット単位演算の再現性用サポート関数

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

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

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

最適化に関する注意事項

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

改訂 #20110804

関連情報


このヘルプトピックについてのフィードバックを送信