2013-09-02 5 views
5

コンピュータには、64KBのL1キャッシュと512KBのL2キャッシュがあるとします。CPUがキャッシュメモリにロードされる内容を決定する方法を理解する

プログラマは、メインメモリ(例えば、3dモデルの頂点/インデックスデータ)内に、例えば10mbのデータの配列を作成/投入した。

アレイは次のように構造体のシリーズを含む場合があります

struct x 
{ 
    vec3 pos; 
    vec3 normal; 
    vec2 texcoord; 
}; 

次にプログラマは、例えば、すべてのこのデータに何らかの操作を行わなければなりませんデータをGPUに渡す前に、1回の通常の計算を行います。

CPUはデータをL2キャッシュにロードする方法をどのように決定しますか?

どのようなアーキテクチャのキャッシュラインがどのくらいのサイズであるかをプログラマが確認できますか?

どのようにデータがキャッシュラインに収まるように構成されていることをプログラマが確認できますか?

このプロセスを支援するために行うことができるのは、データ境界をバイト境界に合わせることだけですか。

キャッシュミスを最小限に抑えるためにプログラマは何ができますか?

WindowsおよびLinuxプラットフォームの最適化プロセスを視覚化するのに役立つプロファイリングツールは何ですか?

+0

これは非常に大きな質問です。だから、キャッシュの使用効率を上げるためには、構造体の配列レイアウトに切り替えることを検討してください。これにより、直ちに使用していないデータにキャッシュスペースを無駄にすることはほとんどありません。 vecxを分割することはおそらく良い考えですが、別の理由でベクトル化します。 – harold

+1

キャッシュミスを最小限に抑えるには、http://stackoverflow.com/questions/460666/decreasing-cache-misses-through-good-designを参照してください。 – fizzbuzz

+0

私は主に閉鎖の質問に反対しています。 "近い"と言います)、ここには非常に多くの疑問があり、それは一種のものです。これは、大学のクラスの大規模なカリキュラム単位の材料になるでしょう。これらのうちの少なくともいくつかに対する回答が分かっている場合は、その質問に回答してください。キャッシュラインが何であるかを知っているという事実は、CPUがL2にデータをロードする方法を決定する方法も知っていることを示唆しています。 – Potatoswatter

答えて

12

ここには多くの質問がありますので、私は答えを簡潔にしておきます。

CPUがデータをL2キャッシュにロードする方法を決定するにはどうすればよいですか?

使用するものはすべて読み込まれます。 L2はそれ以上のものを除いてL1と同じように振る舞い、折れ線が広がり、連想率が低くなるため、エイリアシング(早すぎるエビクションを招く可能性があります)が一般的です。一部のCPUはL1からプッシュされたデータだけをL2にロードしますが、プログラマに大きな違いはありません。

ほとんどのMMUにはキャッシュされていないメモリ用の機能がありますが、これはデバイスドライバ用です。 L1を無効にしないでL2を無効にするオプションを見たことはありません。キャッシングなしでは、パフォーマンスは得られません。

どのようなアーキテクチャのキャッシュラインがどのくらいのサイズであるかをプログラマが確認できますか?

ユーザーマニュアルを参照してください。一部のオペレーティングシステムでは、sysctlのようなクエリ機能が提供されています。

プログラマは、どのようにデータがキャッシュラインに収まるように構成されていることを確認できますか?

重要なアイデアは、空間ローカリティです。同じ内部ループによって同時にアクセスされるデータは、同じデータ構造に入る必要があります。最適な構成は、その構造をキャッシュラインに合わせ、それをキャッシュラインサイズに合わせることです。

プロファイラを慎重にガイドとして使用しない限り、問題にはなりません。

このプロセスを支援するために、データ境界をバイト境界に合わせることは唯一可能ですか?

いいえ、他の部分は、余分なデータでキャッシュを埋めることを避けています。いくつかのフィールドが他のアルゴリズムによってのみ使用される場合、それらは現在のアルゴリズムが実行されている間にキャッシュスペースを浪費しています。しかし、常にすべてを最適化することはできず、データ構造の再編成にはプログラミングが必要です。

キャッシュミスを最小限に抑えるためにプログラマは何ができますか?

実世界のデータを使用してプロファイルを作成し、過剰なミスをバグとして扱います。

WindowsおよびLinuxプラットフォームの最適化プロセスを視覚化するのに役立つプロファイリングツールは何ですか?

Cachegrindは非常にいいですが、仮想マシンを使用しています。 Intel V-Tuneは、実際のハードウェアをより良くまたは悪く使用します。私は後者を使用していません。

+1

素敵な要約:) –

関連する問題