インテルは有用にプリフェッチプラグマを提供します。コンパイラによって決定されるように、例えばオブジェクト内にデータが隠されている場合にintel prefetchプラグマを使用するには?
#pragma prefetch a
for(i=0; i<m; i++)
a[i]=b[i]+1;
は、前方ループサイクルのa
一定数をプリフェッチします。
しかし、a
が配列ではなく、[]
のクラスがオーバーライドされている場合はどうなりますか? operator[]
が単純な配列アクセスを行う場合、プリフェッチはこのように使用できますか?
(おそらく質問はstd::vectors
にも当てはまります)。
私は、x86とItaniumの両方のためにコンパイルしている - とパフォーマンスを心配し、誰もが(グリッド上)、後者を使用すると仮定します。ハードウェアプリフェッチャーが何をしているのかを指摘してくれてありがとう。私は気づいていなかった。 –
2018年、このプラグマは、インテル®MICアーキテクチャーおよびインテル®アドバンスト・ベクトル・エクステンション512(インテル®AVX-512)にのみ適用されます。 – Olsonist
プリフェッチは一般的にはx86では機能しますが、プリフェッチプラグマでは機能しません。代わりに、-qopt-prefetchフラグを使用します。 – Olsonist