インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

qopt-gather-scatter-unroll、Qopt-gather-scatter-unroll

集約 (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 を大きな値にしたほうが良いでしょう。

IDE オプション

なし

代替オプション

なし

通常、"ワンショット" の集約 (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: