インテル® MKL は、サポートしている命令セット・アーキテクチャー (ISA) によって決定されるコード分岐のために、条件付きビット単位演算の再現性 (CBWR) モードを提供しています。次のいずれかの形式で、MKL_CBWR 環境変数に値を指定します。
MKL_CBWR="<branch>"
MKL_CBWR="BRANCH=<branch>"
<branch> は、CBWR 分岐を表します。値は次のいずれかになります。
CBWR 分岐を指定するときは、次の点に注意してください。
一貫した結果は、以下の条件の下で提供されます。
スレッド数が固定で定数。
特に、複数のプロセッサーでプログラムを実行している場合、一貫した結果を得るにはスレッド数を指定する必要があります。
入力配列と出力配列が 128 バイト境界でアライメントされている。
一般的な 128 バイトのアライメントの代わりに、ISA 固有のアライメントを使用することもできます。例えば、インテル® SSE2 以上では 16 バイトのアライメント、インテル® AVX およびインテル® AVX2 では 32 バイトのアライメントで十分です。配列を適切にアライメントするには、mkl_malloc を使用してメモリーを割り当てます。
AUTO および COMPATIBLE 以外の設定は、インテル® プロセッサーでのみ利用可能です。 COMPATIBLE で指定されたコード分岐は、インテル以外のプロセッサーでも動作します。
現在プログラムを実行しているプロセッサー向けに最適化された CBWR 分岐を取得するには、AUTO を選択するか、mkl_cbwr_get_auto_branch 関数を呼び出します。
MKL_CBWR 環境変数を設定するか、mkl_set_cbwr_branch 関数を呼び出すと、コード分岐が固定され、再現性モードが設定されます。
分岐の値が正しくないか、プロセッサーが指定された分岐をサポートしていない場合、CBWR はその値を無視して AUTO 分岐を使用します。警告メッセージは表示されません。
CBWR の動作を定義する関数の呼び出しは、CBWR で制御する算術ライブラリー関数の前に行う必要があります。
関数で指定された設定は、環境変数で指定された設定よりも優先されます。
関数を使用した分岐の指定方法は、『インテル® MKL リファレンス・マニュアル』を参照してください。
| インテル® コンパイラーは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。
改訂 #20110804 |