2010-12-29 14 views
3

この簡単な質問についてはお詫び申し上げます。まだここではいくつかのメモリコンセプトに苦しんでいます。質問は:私が繰り返しアクセスしたい事前に計算された配列Aを持っているとします。この配列をできるだけCPUキャッシュに近づけて最速アクセスにするようにCプログラムに指示する方法はありますか?ありがとう。L1キャッシュにいくつかのデータを強制する

答えて

15

ほとんどのアーキテクチャでL1/L2キャッシュにアレイを強制的に切り替える方法はありません。通常は必要ありません。頻繁にアクセスすると、キャッシュから追い出される可能性は低いです。

アーキテクチャによっては、プロセッサに、すぐにL1/L2キャッシュへのロードを開始できるようにメモリの場所がすぐに必要になるというヒントを与えるための一連の命令があります。これはプリフェッチと呼ばれ、たとえば_mm_prefetch命令(http://msdn.microsoft.com/en-us/library/84szxsww(v=vs.80).aspx)を参照してください。それでも、小さな配列にアクセスする場合はこれは必要ではありません。

一般的なアドバイスは、まずデータ構造をキャッシュ効率的にする(関連するデータをまとめる、データをパックするなど)、プロファイラーがあなたにキャッシュミスの時間を費やしていると後で先読みを試み、これ以上データレイアウトを改善することはできません。

+1

その情報にgccを追加するには、gccを使用している場合は、__builtin_prefetchという拡張子があります。http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/Other-Builtins.html –

関連する問題