たとえば512KBの64ビットのdouble型のLUTを想定します。一般に、CPUはどのようにL1またはL2の構造をキャッシュしますか?LUTなどのL1/L2キャッシュの動作とは何ですか?
例えば: - そしてnは、後続の要素を中央の要素を言うと、私は真ん中の要素にアクセスし、それが全体のLUTまたはそれの一部をキャッシュしようとしていますか?
L2キャッシュに保持されているものをCPUがどのようなアルゴリズムで判断するのですか?これは、データ構造に依存する。.. SPARCなど、
たとえば512KBの64ビットのdouble型のLUTを想定します。一般に、CPUはどのようにL1またはL2の構造をキャッシュしますか?LUTなどのL1/L2キャッシュの動作とは何ですか?
例えば: - そしてnは、後続の要素を中央の要素を言うと、私は真ん中の要素にアクセスし、それが全体のLUTまたはそれの一部をキャッシュしようとしていますか?
L2キャッシュに保持されているものをCPUがどのようなアルゴリズムで判断するのですか?これは、データ構造に依存する。.. SPARCなど、
を私は、x86を仮定しているが、私は力をどのように動作するか、他のアーキテクチャを知ることに興味があるだろう:それは
注意を以下の特定の先読み戦略があります
キャッシュは連続してレイアウトされているものは、周囲に散らばっているのではなく、メモリ(配列やstd :: vectorsなど)です。あなたはメモリ位置にアクセスするときに簡単に言えば
は、RAM(「キャッシュ・ライン」の価値 - のx86上の64バイト)のブロックは、おそらくいくつかの以前にキャッシュされたデータを追い出し、キャッシュにロードされます。
一般に、階層を形成するいくつかのレベルのキャッシュがあります。各レベルでアクセス時間は増えますが、容量も増えます。
はい、私はあなたがWhat Every Programmer Should Know About Memoryを読むことを示唆しているという単純なアルゴリズムとページの境界を越えることができないことによって制限される先読み、(メモリページは、x86上で、通常4キロバイトのサイズである。)
があります。それは主題についてたくさんの素晴らしい情報を持っています。
キャッシュは、通常、キャッシュラインの集合として形成されます。各キャッシュ・ラインの細分性はキャッシュ・ラインのサイズに揃えられているので、たとえば、128バイトのキャッシュ・ラインを持つキャッシュは、128バイトにアライメントされたデータをキャッシュするアドレスを持つことになります。
CPUキャッシュは、一般に、メモリアドレスから特定のキャッシュラインセットへのマッピングを持つだけでなく、いくつかのLRU追い出しメカニズム(キャッシュミス時に最も古いキャッシュラインを退去させるように、 (あなたは4Kまたは16M境界に整列複数のアドレスから読み取るしようとしている場合、これは、x86の多くの偽の共有エラーのいずれかになります。)
をので、あなたはキャッシュミスを持っているとき、CPUが読み込まれますアドレス範囲が失われているメモリのキャッシュライン。キャッシュライン境界を越えて読んでしまうと、2つのキャッシュラインを読み込むことになります。
通常は、その場所の周りに*キャッシュライン*バイトをロードします。ほとんどのx86プロセッサでは64バイトです。 – ruslik