インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
ループ内でコンパイラーが生成するプリフェッチに使用されるプリフェッチの距離を指定します。
Linux*: | -qopt-prefetch-distance=n1[, n2] |
macOS*: | なし |
Windows*: | /Qopt-prefetch-distance:n1[, n2] |
n1、n2 |
(ベクトル化された) 反復回数で示されたプリフェッチの距離。設定可能な値は、負でない数 (>=0) です。 n2 はオプションです。 n1 = 0 は、コンパイラーにより発行されるメモリーから L2 へのすべてのプリフェッチをオフにします。n2 = 0 は、コンパイラーにより発行される L2 から L1 へのすべてのプリフェッチをオフにします。n1 > 0 で n2 を指定する場合、n1 は >= n2 にします。 |
オフ |
コンパイラーはデフォルトのヒューリスティックを使用して、プリフェッチの距離を決定します。 |
このオプションは、ループ内でコンパイラーが生成するプリフェッチに使用されるプリフェッチの距離を指定します。単位 (n1 とオプションの n2) は反復回数です。コンパイラーによりループがベクトル化される場合、単位はベクトル化された反復回数です。
n1 の値は、メモリーから L2 へのプリフェッチ (例えば、vprefetch1 命令) の距離として使用されます。n2 を指定すると、その値は L2 から L1 へのプリフェッチ (例えば、vprefetch0 命令) の距離として使用されます。
-qopt-prefetch=0 (Linux*) または /Qopt-prefetch:0 (Windows*) オプションが指定されると、このオプションは無視されます。インテル® Xeon Phi™ 製品をターゲットとする場合、-qopt-prefetch=3 および /Qopt-prefetch:3 が最適化レベル O2 以上のデフォルトです。
なし
次の Linux* の例について考えてみます。
-qopt-prefetch-distance=64,32
上記の例で、コンパイラーは、メモリーから L2 へのプリフェッチの距離として 64 反復を使用し、L2 から L1 へのプリフェッチの距離として 32 反復を使用します。
-qopt-prefetch-distance=24
上記の例で、コンパイラーは、メモリーから L2 へのプリフェッチの距離として 24 反復を使用します。L2 から L1 へのプリフェッチの距離は、コンパイラーにより決定されます。
-qopt-prefetch-distance=0,4
上記の例は、ループ内のコンパイラーにより挿入されるメモリーから L2 へのすべてのプリフェッチをオフにします。コンパイラーは、L2 から L1 へのプリフェッチの距離として 4 反復を使用します。
-qopt-prefetch-distance=16,0
上記の例で、コンパイラーは、メモリーから L2 へのプリフェッチの距離として 16 反復を使用します。コンパイラーにより L2 から L1 へのループのプリフェッチは発行されません。