複数のCPU /コアが同じRAMに同時にアクセスできますか?


15

これは私が推測するものです

  1. 2つのコアがRAM内の同じアドレスにアクセスしようとした場合、一方が他方にアクセスするのを待つ必要があります。、彼らはそれぞれアクセスすることができましたように、各コアが同じアドレスにアクセスしようとしている時間は、彼らはまだ、そのRAMがキャッシュされていて、同時にキャッシュを

  2. 2つのコアが同じRAMの異なるアドレスにアクセスしようとする、一方が他方にアクセスするのを待たなければなりません

言い換えれば、RAMを集中的に使用するプログラミングタスクでは、コアごとに複数回RAMの同じアドレスから読み取る必要がなければ、マルチプロセッシングはあまり役に立たないと思います。

だから、複数のCPU /コアが同じRAMに同時にアクセスできますか、または私が言っていることは正しいですか?


あなたが言及しているハードウェアのレベルについて話すことはできませんが、RAMを集中的に使用するタスクは、使用量を分割するだけでマルチプロセッシングによって支援できると言えます。つまり、処理する必要のあるRAMに500 MBのデータがある場合、250 MBのデータ/ RAMを1つのprocに、250 MBを別のprocに渡すと、可能なスループットが事実上2倍になります(RAM帯域幅の制限に耐えられません)。ハードウェアがそれを実行できるかどうかは別として、複数のプロセッサが同じRAMアドレスにアクセスすることは本当に悪い考えであり、ほとんどのマルチプロセスコードはそれを回避しようとします。
ジミー・ホッファ

1
@JimmyHoffaしかし、RAM帯域幅の制限はまさに彼が話していることです(仮定はタスクがメモリにバインドされていることです)。

@Jimmy 2つのプロセッサーが同じRAMアドレスから読み取ろうとしても問題は見られません。問題が発生するのは、彼らが同時に書き込みを試みた場合のみです。
ロストホビット

1
私が使っていた特定のマルチコアプロセッサでは、コアはローカルキャッシュ以外に何も「知りません」でした。共有キャッシュと同期する必要があるものは、指定されたプロセッササイクル数でこれらに対して透過的に行われていました。これを考慮に入れるプログラマーnopは、アセンブリコードに必要な量のsを手動で追加しただけです
-gnat

2
簡単な答え:システムバスアーキテクチャ、キャッシュコヒーレンスプロトコル、DDRコントローラーのポート数、およびDDRコントローラーの数に依存します。長い答えは、システムのデータシートにあります。
SKロジック

回答:


11

まとめ:メモリアクセスだけで済む場合、一般的にシングルコアがメモリバスを飽和させる可能性があります。

マシンのメモリ帯域幅を確立すると、シングルスレッドプロセスがこれを実際に達成できるかどうかを確認できるはずです。


詳細は、使用しているアーキテクチャによって異なります。最新のSMPやSDRAMのようなものを想定:

  1. 2つのコアがRAMの同じアドレスにアクセスしようとした場合...

    いくつかの方法があります:

    • 両方とも同時に読みたい:

      • 同じチップ上の2つのコアは、おそらくあるレベル(2または3)で中間キャッシュを共有するため、読み取りは1回だけ実行されます。最新のアーキテクチャでは、各コアはキャッシュラインの準備ができるまで1つ以上のパイプラインからµ-opを実行し続けることができます。
      • 異なるチップ上の2つのコアはキャッシュを共有しない場合がありますが、それでもバスへのアクセスを調整する必要があります。理想的に、読み取りを発行しなかったチップ応答をスヌープします
    • 両方とも書きたい場合:

      • 同じチップ上の2つのコアが同じキャッシュに書き込むだけで、RAMに一度フラッシュするだけで済みます。実際、メモリはキャッシュラインごとにRAMから読み書きされるため、明確ではあるが十分に近いアドレスでの書き込みは、RAMへの単一書き込みに合体できます

      • 異なるチップ上の2つのコアには競合があり、キャッシュラインは、chip1によってRAMに書き戻され、chip2のキャッシュにフェッチされ、変更されてから再び書き戻される必要があります(書き込み/フェッチがスヌーピングによって合体できるかどうかはわかりません)

  2. 2つのコアが異なるアドレスにアクセスしようとした場合...

    以下のために、単一のアクセス、CASレイテンシの手段2つの操作は、潜在的に、もはや(またはおそらく少しだけ長い)を取らないためにインターリーブすることができるバスがアイドル状態であればより。


もう1つのリスト項目は、1つのコアがDMA転送を開始し、別のコアがターゲット領域を突くときです。
ott--

7

だから、複数のCPU /コアが同じRAMに同時にアクセスできますか、または私が言っていることは正しいですか?

さまざまなマシンアーキテクチャがあり、それぞれに独自の機能セットがあります。マルチプロセッシングマシンの1つのカテゴリは、Multiple Instruction Single DataのMISDと呼ばれ、このようなマシンは、同時に複数のプロセッサに同じデータを提供するように設計されています。SIMDアーキテクチャ(単一命令複数データ)として知られる関連クラスのマシンはより一般的であり、同時に同じメモリへのアクセスも提供しますが、メモリにはデータの代わりに命令が含まれます。MIMDとSIMDの両方で、「アクセス」は読み取りアクセスを意味します。2つのユニットが同時に同じ場所に書き込もうとした場合に発生する問題を想像できます。


3

ほとんどの答えはソフトウェアおよび/またはハードウェアモデルの側面からアプローチしますが、最もクリーンな方法は物理RAMチップの動作を考慮することです。(キャッシュはプロセッサとメモリの間に配置され、同じアドレスバスを使用するだけで、その動作はプロセッサに対して完全に透過的です。)RAMチップには、メモリセルのアドレスを受信する単一のアドレスデコーダがあります。アドレスバス(および同様に、入力または出力のデータバス)。現在のメモリは「シングルプロセッサアプローチ」で構築されています。つまり、1つのプロセッサが1つのバスを介して1つのメモリチップに接続されています。言い換えれば、これは「フォン・ノイマンのボトルネック」です。すべての命令が少なくとも1回はメモリを参照する必要があるからです。このため、1本のワイヤ(またはワイヤ、別名バス)では、一度に1つの信号しか存在できません。そのため、RAMチップは一度に1つのセルアドレスを受け取る場合があります。2つのコアが同じアドレスをアドレスバスに配置できるようになるまで、2つの異なるバスドライバー(コアなど)による同時バスアクセスは物理的に不可能です。(そして、同じである場合、それは冗長です)。

残りはいわゆるハードウェアアクセラレーションです。コヒーレンスバス、キャッシュ、SIMDアクセスなどは、物理RAMの前にある素敵なファサードに過ぎません。前述のアクセラレータは、アドレスバスを排他的に使用するための戦いをカバーする可能性があり、プログラミングモデルはあなたの質問とはあまり関係ありません。また、同時アクセスは抽象化「プライベートアドレス空間」にも反することに注意してください。

だから、あなたの質問に:同じアドレスでも異なるアドレスでも、同時の直接RAMアクセスは不可能です。キャッシュを使用すると、この事実がカバーされ、場合によっては明らかに同時アクセスが可能になります。キャッシュレベルと構造、およびデータの空間的および時間的な局所性に依存します。はい、あなたは正しいです。強化されたRAMアクセスなしのマルチ(コア)処理は、RAMを集中的に使用するアプリケーションにはあまり役立ちません。

理解を深めるために、Direct Memory Accessの仕組みを思い出してください。CPUとDMAデバイスの両方がバスにアドレスを配置できるため、バスの同時使用からお互いを除外する必要があります。


1

実際には、物理​​RAMは気にせず、プロセスまたはスレッドの仮想メモリアドレス空間(同じプロセスのすべてのスレッドが共通のアドレス空間を共有します)に関心があります。

もちろん、マルチコアのオペレーティングシステムカーネルをコーディングしている場合、RAMとキャッシュの一貫性は非常に重要です。

ほとんどのマルチコアプロセッサには、何らかの形のキャッシュコヒーレンスメカニズムがあります。詳細はプロセッサ固有です。プロセッサはCPUキャッシュを使用しているため、プロセッサの複数のコアが同じメモリ位置に同時にアクセスしているように動作する場合があります。

C11C ++ 11などの産業用言語の最近の標準には、(マルチスレッド対応)メモリモデルがあります。


0

最新のCPUは、最大のデータ転送帯域幅を得るために、外部メモリデバイスに物理的に関連付けられています。これは、高い転送レートを維持するために必要なシグナルインテグリティ要件(トレース長、終端、クロックスキューなど)によるものです。たとえば、マルチCPUマザーボードでは、各CPUに専用のDIMMスロットのセットがあります。ソフトウェアプログラマが何を考えているかに関係なく、1つのCPUが別のCPUの外部メモリデータに単純にアクセスすることはできません。システムのメモリ管理ソフトウェアは、OSカーネル、ハイパーバイザー、データプレーンコアなどのレベルにかかわらず、CPU間メモリデータ転送を処理します。


1
この投稿は読みにくい(テキストの壁)。それをより良い形に編集してもいいですか?
グナット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.