インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
コンパイラーにより、メモリーからのデータ・プリフェッチ要求を発行または無効にします。 このプラグマは、インテル® MIC アーキテクチャーおよびインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) にのみ適用されます。
#pragma prefetch #pragma prefetch *:hint[:distance] #pragma prefetch [var1[:hint1[:distance1]][, var2 [:hint2[:distance2]]]...] #pragma noprefetch [var1 [, var2]...] |
var |
オプションのメモリー参照 (プリフェッチされるデータ) |
hint |
プリフェッチの型を指定するコンパイラーへのオプションのヒント。 値は以下のいずれかになります。
この引数を使用するには、var も指定してください。 |
distance |
オプションの引数 (1 以上の値)。 対応するロード命令やストア命令の前に、プリフェッチの発行に先立ってループの反復数を示します。 この引数を使用するには、var と hint も指定してください。 |
このプラグマは、コンパイラーにメモリーのデータ・プリフェッチを生成するヒントを与えます。 これのヒントは、コンパイラーが使用するヒューリスティックに影響します。 データをプリフェッチすると、メモリー・レイテンシーの影響を最小限に抑えられます。
引数を使用せずに prefetch プラグマを指定すると、直後のループにアクセスされたすべての配列がプリフェッチされます。
ループの前に #pragma prefetch を置いて、ループ内で式 A(j) を使用する場合、コンパイラーはループ内の A(j+d) にプリフェッチを挿入します。 ここで、d はデータをプリフェッチするための残りの反復回数で、コンパイラーによって決定されます。
#pragma prefetch * を指定すると、hint と distance はループのすべての配列アクセスをプリフェッチします。
これらのプラグマを使用するには、[Q]opt-prefetch コンパイラー・オプションを指定する必要があります (コンパイラーの全般の最適化レベルが O2 以上の場合はデフォルトでオンになります)。
noprefetch プラグマは、コンパイラーにメモリーのデータ・プリフェッチを生成しないようヒントを与えます。 これは、コンパイラーが使用するヒューリスティックに影響します。
prefetch プラグマの使用例 |
---|
|
noprefetch および prefetch プラグマの使用例 |
---|
|
noprefetch および prefetch プラグマの使用例 |
---|
|