web-dev-qa-db-ja.com

CPUはどのようにRAMに情報を書き込みますか?

私の質問は、CPUがどのようにRAMにデータを書き込むのかということです。

私が理解していることから、最近のCPUは、RAMアクセスを高速化するためにさまざまなレベルのキャッシュを使用しています。 RAMは情報のコマンドを取得し、必要なデータ(およびCPUが必要とするアドレスに近い追加データの束)を格納するデータのバーストをCPUに送信します。次に、最高レベルのキャッシュであるCPUは、レベル1のキャッシュに入るまで、データのチャンクをキャッシュのレベルに送信するようにさまざまなキャッシュに徐々に要求します。このデータは、CPUレジスタに直接読み込まれます。

CPUがメモリに書き込むとき、このプロセスはどのように機能しますか?コンピューターはキャッシュのレベルを逆方向​​に下げますか(読み取りとは逆の順序で)?もしそうなら、異なるキャッシュの情報をメインメモリと同期させるのはどうですか?また、書き込み操作の速度は読み取り操作と比較してどうですか?バケットソートの場合など、RAMに継続的に書き込みを行うとどうなりますか?

前もって感謝します、

-偽物

編集:私はまだ完全に受け入れることができる答えを本当に得ていません。特にRAM書き込みの同期部分について知りたいです。CPUから直接L1キャッシュに書き込み、さまざまなレベルを同期するとデータがキャッシュレベルにプッシュダウンされることを知っています。キャッシュの数と最終的にメインRAMは最上位層のキャッシュと同期されます。しかし、私が知りたいのは、キャッシュがメインRAM =および読み取りコマンドに関連する速度の速さ。

10
Faken

ああ、これは本当に複雑な答えを持っているそれらの単純な質問の1つです。簡単な答えは、まあ、それは書き込みがどのように行われたか、そしてどのような種類のキャッシュがあるかに依存します。 キャッシュがどのように機能するかについての便利な入門書です

CPUはさまざまな方法でデータを書き込むことができます。キャッシュがない場合、データはすぐにメモリに保存され、CPUは書き込みが完了するのを待ちます。キャッシュを使用すると、CPUは通常、データをプログラム順に格納します。つまり、プログラムがアドレスA、アドレスBの順に書き込む場合、キャッシュに関係なく、メモリAはメモリBの前に書き込まれます。キャッシュは、物理メモリが更新されたときにのみ影響します。これは、使用されるキャッシュのタイプによって異なります(上記のリンクを参照)。一部のCPUは、データを非一時的に保存することもできます。つまり、メモリ帯域幅を最大限に活用するために書き込みを並べ替えることができます。したがって、A、次にB、次に(A + 1)への書き込みは、1回のバーストでA、次にA + 1、次にBへの書き込みに並べ替えることができます。

もう1つの問題は、複数のCPUが存在する場合です。システムの設計方法によっては、データがまだ最初のCPUキャッシュにある(キャッシュがダーティである)ため、1つのCPUによる書き込みが他のCPUに表示されません。複数のCPUシステムでは、各CPUのキャッシュを物理メモリにあるものと一致させることをキャッシュ整合性と呼びます。これを達成するにはさまざまな方法があります。

もちろん、上記はPentiumプロセッサを対象としています。他のプロセッサは他の方法で物事を行うことができます。たとえば、PS3のCellプロセッサを考えてみましょう。セルCPUの基本アーキテクチャは、複数のセルコアを備えた1つのPowerPCコアです(PS3には8つのセルがあり、そのうちの1つは歩留まりを向上させるために常に無効になっています)。各セルには独自のローカルメモリがあり、システムRAMに書き込まれることのないL1キャッシュのようなものです。このローカルRAMとシステムRAM DMA(ダイレクトメモリアクセス)転送を使用して)間でデータを転送できます。セルはアクセスシステムRAMおよび他のセルのRAMは、通常の読み取りと書き込みのように見えますが、これはDMA =転送(したがって、速度が遅く、実際には避ける必要があります)。このシステムの背後にある考え方は、ゲームが1つのプログラムだけでなく、同じことを行うために組み合わされる多くの小さなプログラムであるということです(* nixを知っている場合は、コマンドのパイプのようなものです)より複雑なタスクを達成するためのラインプログラム)。

要約すると、RAMへの書き込みは、CPU速度がRAM速度と一致した時代には非常に簡単でしたが、CPU速度が増加し、キャッシュが導入されると、プロセスは、多くの異なる方法でより複雑になりました。

スキズ

11
Skizz

はい、キャッシュのレベルを逆方向​​に下げてメモリに保存しますが、重要な注意点は、マルチプロセッシングシステムでは、キャッシュは2つ以上のプロセッサ(コア)間で共有され、データは一貫している必要があります。これは、すべてのマルチプロセッサの共有キャッシュを作成することによって行われました。または異なるキャッシュですが、クリティカルセクションを使用して一貫性を保存します(1つのキャッシュのデータが変更された場合、メモリへの書き込みと他のキャッシュの更新を強制します)

2
Am1rr3zA