インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
集約 (Gather)/分散 (Scatter) ループの代替アンロールシーケンスを指定します。 -qopt-gather-scatter-unroll は、古いオプション -opt-gather-scatter-unroll の後継オプションです。
インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャーでのみ利用できます。
Linux*: | -qopt-gather-scatter-unroll=n -qno-opt-gather-scatter-unroll |
OS X*: | なし |
Windows®: | /Qopt-gather-scatter-unroll:n /Qopt-gather-scatter-unroll- |
n |
集約 (Gather)/分散 (Scatter) ループのアンロールファクター。0 ~ 8 の整数値でなければなりません。 n=0 は、オプションの否定形を指定するのと同じです。 |
-qno-opt-gather-scatter-unroll または /Qopt-gather-scatter-unroll |
コンパイラーは、集約 (Gather)/分散 (Scatter) ループをアンロールするときにデフォルトのヒューリスティックを使用します。 |
このオプションは、集約 (Gather)/分散 (Scatter) ループの代替アンロールシーケンスを指定します。
このオプションを使用すると、集約 (Gather)/分散 (Scatter) 操作のパフォーマンスが向上する可能性があります。
最適なパフォーマンスをもたらす n の値はデータに依存します。
集約 (Gather)/分散 (Scatter) 操作で使用するキャッシュラインの数が 1 または 2 のように少ない場合は、デフォルトのシーケンス (n が小さな値) で最適なパフォーマンスが得られます。 個々のデータが別々のキャッシュラインにある場合は、n を大きな値にしたほうが良いでしょう。
なし
通常、"ワンショット" の集約 (Gather)/分散 (Scatter) 命令はありません。コンパイラーは、集約 (Gather)/分散 (Scatter) を行うためにループを生成します。 デフォルトでは、次のようなループが生成されます。
L1: gather jkz L2 gather jknz L1 L2:
一部のアプリケーションは、このループがアンロールされるとより高速に実行することができます。アプリケーションごとに最適なアンロールファクターは異なります。 また、アンロールされるループの前に gather/scatter hint 命令を追加するとより多くの利点が得られます。
[q または Q]opt-gather-scatter-unroll オプションを指定すると、コンパイラーは n で指定された値でアンロールされたループを生成します。
次の例は、-qopt-gather-scatter-unroll=3 (Linux*) または /Qopt-gather-scatter-unroll:3 (Windows®) を指定した場合に生成されるループを示します。 代替シーケンスでは、ループの前に 2 つの gather/scatter hint 命令も生成されます。
gather hint gather hint nop L1: gather jkz L2 gather | gather | -> n で指定した 集約 (Gather) 回数分 gather | jknz L1 L2: