2

線形配列を取得し、各要素を別の配列の任意の場所(CPUの観点からはランダムなど)に書き込むことで、プログラムを最適化することを考えています。私は単純な書き込みのみを行っており、要素を読み戻すことはしていません。

従来のCPUのスキャット読み取りは、アクセスごとにキャッシュミスが発生し、プロセッサが待機するため、非常に遅くなる可能性があることを理解しています。しかし、プロセッサが結果を待機していないため、分散書き込みは技術的に高速である可能性があると考えていました。したがって、トランザクションが完了するのを待つ必要がない場合があります。

残念ながら、私は従来のCPUメモリアーキテクチャのすべての詳細に精通していないため、これも非常に遅くなる可能性のあるいくつかの問題が発生する可能性があります。

誰かがこれを試しましたか?

(私は自分が抱えている問題を逆転させようとしていると言わなければなりません。現在、任意の値を読み取る線形配列(分散読み取り)があり、すべてのキャッシュミスのために非常に遅いです。私の考えはこの操作を分散書き込みに反転して、速度を大幅に向上させることができます。)

4

2 に答える 2

3

一般に、書き込みごとにキャッシュ ライン全体をロードして保存する必要があるため、まだキャッシュにないアドレスへの散在する書き込みには高いペナルティが課されます。そのため、FSB と DRAM の帯域幅の要件は、順次書き込みの場合よりもはるかに高くなります。もちろん、書き込みのたびにキャッシュ ミスが発生し (最新の CPU では通常数百サイクル)、自動プリフェッチ メカニズムの助けはありません。

于 2010-06-23T13:11:05.873 に答える
2

認めざるを得ませんが、これはちょっとハードコアに聞こえます。しかし、私はリスクを冒してとにかく答えます。

入力配列をページに分割し、各ページを複数回読み取り/スキャンすることは可能ですか? ページを通過するたびに、限られた量のページに属するデータのみを処理 (または出力) します。この方法では、各入力ページ ループの開始時にのみキャッシュ ミスが発生します。

于 2010-06-23T13:12:09.353 に答える