0

私はCでマルチスレッドプログラムを書いています.1つのコアが定期的にリンクされたリストの先頭からアイテムを取得し、他のコアがリストの後ろにアイテムを追加します(スレッドセーフのためにCASマジックを使用し、他の誰かがそれを提供してくれました) . リストの先頭からアイテムを取得するコアが次のアイテムのプリフェッチを開始するだけで、別のコアのキャッシュにあるはずの次のアイテムのプリフェッチを開始すると、私のプログラムはより高速に実行されるようです。

現在、Debian Linux で gcc を使用してコンパイルしている AMD Opteron 6168 をターゲットにしています。私が見つけることができるのは、 -O3 を使用してコンパイラが挿入したプリフェッチを有効にすること(ループの場合だと思います)と、PREFETCHWのようなAMDプリフェッチ命令名についての言及だけです。

私が求めているものの参照を見つける方法、またはそのようなステートメントをおそらくアセンブリのブロックとして C に挿入する方法がわかりませんか?

4

2 に答える 2

2

gcc には、そのための組み込み関数がいくつか付属しています。できるよ

__builtin_prefetch(&yourData);
于 2010-10-13T22:38:19.513 に答える
2

インテル アーキテクチャ ドキュメントを確認してください。

VCでは、このようなことができるはずです

asm
{
  prefetch POINTER_NAME
}

GCCで -

asm("prefetch %0", POINTER_NAME); //May have syntax slightly off

私は前にこれを見てきました。

于 2010-10-13T21:57:59.330 に答える