私は最近、複数の種類のメモリが使用可能で、特定のメモリセグメントの容量とそれにアクセスする速度の間でトレードオフがある状況でメモリ使用量を最適化する一般的な問題に興味を持ちました。
身近な例では、を決めるのプログラムですから読み取る / に書き込みプロセッサキャッシュ、RAMおよび(仮想メモリを介して)ハードドライブ。
ロードする必要があるデータの量(プログラム自体を含む)が、利用可能な最速のストレージの容量を大幅に超える特別なケースに特に興味があります(つまり、「すべてをロードする」という些細な解決策は適用できません)。
いくつかの一般的なキャッシュアルゴリズムを説明するウィキペディアのページを見つけました。残念ながら、これらは少し低レベルです。
- LRUやMRUなどの多くは、何度もアクセスされるサブルーチンがある場合にのみ意味があります。多数のサブルーチンを含むプログラムがあり、その一部は特定の実行でアクセスされず、一部は1回または2回アクセスされる場合、この戦略は何に関するデータを十分に構築できないため機能しません一般的に使用され、そうでないもの。
- CLOCKなどのその他のものは、実際に問題の根本を攻撃するのではなく、実装の特性に対処しているようです。
- テスト実行中に最初にプログラムのプロファイルを作成し、次にオペレーティングシステムのプロファイルを提供して、それに応じて最適化する戦略があることを知っています。ただし、プロファイルを作成する際に、真に代表的な「使用例」を提供するという問題を解決する必要があります。
私が本当に学びたいのはこれです:ハードウェアとソフトウェアのすべての技術を抽象化し、純粋に理論的な文脈で話すとき、アルゴリズムの構造を何らかの方法で分析し、効果的なキャッシュ戦略を立てることが可能ですか?アルゴリズムが何をしているかの高レベルの理解に基づいていますか?
「アクセスグラフ」モデルに興味があるかもしれません。
—
ニールヤング