コンピュータには、64KBのL1キャッシュと512KBのL2キャッシュがあるとします。CPUがキャッシュメモリにロードされる内容を決定する方法を理解する
プログラマは、メインメモリ(例えば、3dモデルの頂点/インデックスデータ)内に、例えば10mbのデータの配列を作成/投入した。
アレイは次のように構造体のシリーズを含む場合があります
struct x
{
vec3 pos;
vec3 normal;
vec2 texcoord;
};
次にプログラマは、例えば、すべてのこのデータに何らかの操作を行わなければなりませんデータをGPUに渡す前に、1回の通常の計算を行います。
CPUはデータをL2キャッシュにロードする方法をどのように決定しますか?
どのようなアーキテクチャのキャッシュラインがどのくらいのサイズであるかをプログラマが確認できますか?
どのようにデータがキャッシュラインに収まるように構成されていることをプログラマが確認できますか?
このプロセスを支援するために行うことができるのは、データ境界をバイト境界に合わせることだけですか。
キャッシュミスを最小限に抑えるためにプログラマは何ができますか?
WindowsおよびLinuxプラットフォームの最適化プロセスを視覚化するのに役立つプロファイリングツールは何ですか?
これは非常に大きな質問です。だから、キャッシュの使用効率を上げるためには、構造体の配列レイアウトに切り替えることを検討してください。これにより、直ちに使用していないデータにキャッシュスペースを無駄にすることはほとんどありません。 vecxを分割することはおそらく良い考えですが、別の理由でベクトル化します。 – harold
キャッシュミスを最小限に抑えるには、http://stackoverflow.com/questions/460666/decreasing-cache-misses-through-good-designを参照してください。 – fizzbuzz
私は主に閉鎖の質問に反対しています。 "近い"と言います)、ここには非常に多くの疑問があり、それは一種のものです。これは、大学のクラスの大規模なカリキュラム単位の材料になるでしょう。これらのうちの少なくともいくつかに対する回答が分かっている場合は、その質問に回答してください。キャッシュラインが何であるかを知っているという事実は、CPUがL2にデータをロードする方法を決定する方法も知っていることを示唆しています。 – Potatoswatter