8

Intelは、プリフェッチプラグマを提供しています。例えば

#pragma prefetch a
for(i=0; i<m; i++)
  a[i]=b[i]+1;

aコンパイラによって決定されるように、一定数のループサイクル先をプリフェッチします。

しかしa、配列ではなく、[]オーバーライドされたクラスである場合はどうなるでしょうか。単純な配列アクセスを行う場合operator[]でも、プリフェッチをこのように使用できますか?

(おそらく、質問は同様に当てはまりstd::vectorsます)。

4

1 に答える 1

2

調べる方法の1つは、それを試してアセンブリを確認することです。そして、他に何があるとしても、プラグマがある場合とない場合のベンチマークを行ってください。ただし、プリフェッチプラグマが必要かどうかはわかりません。

プリフェッチプラグマは、インテル®Itanium®プロセッサーでのみサポートされています。

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/cref_cls/common/cppref_pragma_prefetch_noprefetch.htm

あなたは本当にItaniumのためにこれを書いていますか?

x86 / x64システムでは、シーケンシャルメモリアクセスを使用するような単純なループは、ハードウェアプリフェッチャーによってすでに適切に処理されています。したがって、手動でプリフェッチを実行してもまったく役に立たない場合があります。

プリフェッチの例については、ここを参照してください:プリフェッチの例?

于 2011-09-14T13:24:12.380 に答える