16

私のアプリケーションでは、ある時点でメモリ データの大きな連続ブロック (数百 MB) に対して計算を実行する必要があります。私が考えていたのは、プログラムが将来触れるブロックの部分をプリフェッチし続けて、その部分で計算を実行すると、データが既にキャッシュにあるようにすることでした。

誰かがgccでこれを達成する方法の簡単な例を教えてもらえますか? どこかで読ん_mm_prefetchだのですが、正しい使い方がわかりません。また、マルチコア システムを使用していますが、各コアはメモリの異なる領域で並行して動作することに注意してください。

4

2 に答える 2

18

gcc低レベル命令のインターフェースとして組み込み関数を使用します。特にあなたの場合__builtin_prefetch。ただし、アクセス パターンを自動的に予測するのが容易でない場合にこれを使用すると、測定可能な違いだけが見られるはずです。

于 2012-04-25T21:05:35.697 に答える
16

最新の CPU は非常に優れた自動プリフェッチ機能を備えており、ソフトウェアのプリフェッチを開始しようとすると、良いことよりも悪いことをすることに気付くかもしれません。実際にパフォーマンスの問題があることがわかった場合に、最適化に集中できる「簡単に達成できる成果」がもっとたくさんある可能性が高いです。プリフェッチは、数パーセントのスループットがどうしても必要な場合に、最後に試す方法の 1 つになる傾向があります。

于 2012-04-25T20:45:41.277 に答える