RAMがCPUチップに配置されないのはなぜですか?


55

最新のCPUは、メモリ(RAM)を含むすべての外部のものと比較して非常に高速です。

CPUクロック周波数は、電気信号がCPUからバスを介してRAMチップに行き来するまでに数クロックティックかかるポイントに達しているため、理解できます。

また、多くのレベルでの生活を複雑にします。マルチレベルキャッシュ階層は、CPUにより近いデータを配信するために構築され、チップ内の複雑な同期ロジックが必要になります。データがフェッチされる間の待機サイクルを回避するために、プログラムはキャッシュに優しい方法で作成する必要があります。

これらの問題の多くは、大量のRAMがCPUチップに直接配置されていれば回避できます。排他的な配置にする必要はありません。クラスに応じてチップに1〜4 GBを追加し、追加のメモリを個別にインストールできるようにします。

IntelやAMDなどがこれを行っていないのには十分な理由があると確信しています。これらの理由は何ですか?チップに余裕がないのですか?


29
キャッシュはRAMです。ダイ上のスペースとピンは貴重です。
copper.hat

2
@ copper.hatキャッシュはRAMですが、キャッシュサイズはインストールされたRAMのごく一部です(通常、Mバイト対Gバイトの範囲について話します)。CPUチップに1 GBを入れないのはなぜでしょうか。
レッサーハリネズミ

5
一般的に、いくつかの命令/データフローミックス用に最適化されています。また、RAMとの間のすべてのデータがCPUを通過するわけではありません。
copper.hat

1
ダイが単純であるほど、安価になります。また、異なるプロセスサイズとプロセスメソッドを使用できることも意味します。
ジャーニーマンオタク

@LesserHedgehog一般にキャッシュヒット率に制限があるため、キャッシュを追加しても効果はありません。また、特にモバイル/組み込みスペース(たとえば、多くのARMベースのSoC)に多くのCPUが実際にDRAMを組み込んでいます。
ふわふわ

回答:


79

IntelのHaswell(または少なくともIris Pro 5200 GPUを組み込んだ製品)およびIBMのPOWER7およびPOWER8にはすべて、組み込みDRAM「eDRAM」が含まれています。

最近までeDRAMが一般的ではなかった重要な問題の1つは、DRAM製造プロセスが本質的にロジックプロセスと互換性がないため、eDRAMが必要な場合は追加のステップを含める必要がある(コストが増加し、歩留まりが低下する)ことです。したがって、この経済的不利益を相殺するために、それを組み込みたいと思わざるを得ない理由がなければなりません。また、DRAMは、CPUとは独立して製造されているが、CPUと同じパッケージに統合されている別のダイに配置することもできます。これにより、2つの製品を真に統合された方法で製造することなく、地域の利点のほとんどが提供されます。

もう1つの問題は、DRAMはSRAMのようなものではなく、電力が供給されている間はその内容を無期限に保存せず、読み取りも保存されたデータを破壊するためです。したがって、定期的に、および読み取りのたびに更新する必要があります。また、DRAMセルはコンデンサに基づいているため、次のリフレッシュにある程度の時間がかかる前にリークが値を破壊しないように十分に充電または放電します。この充電時間は、単なるラッチであるSRAMでは必要ありません。そのため、CPUと同じレートでクロックすることができますが、DRAMは適切な電力消費を維持しながら約1 GHzに制限されています。これにより、DRAMはSRAMよりも固有のレイテンシが高くなり、ミス率の減少が報われる非常に大きなキャッシュ以外には使用する価値がなくなります。

また、待ち時間に関する限り、困難の大部分は信号が移動しなければならない物理的な距離です。光は3 GHz CPUのクロック周期で10 cmしか移動できません。もちろん、信号はダイを直線的に移動せず、伝搬遅延を招くバッファリングとファンアウトが必要なため、光の速度に近い場所で伝搬しません。したがって、1クロックサイクルのレイテンシを維持するためにメモリがCPUから離れることができる最大距離は最大で数センチメートルであり、利用可能な領域に収容できるメモリの量が制限されます。IntelのNehalemプロセッサは、実際にはレイテンシーを改善するために、Penrynと比較してL2キャッシュの容量を削減し、それによりパフォーマンスが向上しました。

キャッシュヒット率は、ほとんどのワークロードで非常に高いことに注意してください。ほとんどすべての実際のケースで90%を大きく上回り、99%を超えることも珍しくありません。したがって、より大きなメモリをダイに含める利点は、本質的に、この数パーセントのミスの影響を軽減することに限定されます。エンタープライズサーバー市場向け(POWERなど)のプロセッサには通常、膨大なキャッシュがあり、多くのエンタープライズワークロードの大規模なワーキングセットに対応するのに役立つため、eDRAMを有益に搭載できます。テクスチャは大きく、キャッシュに収容できないため、HaswellはGPUをサポートしています。これらは、今日のeDRAMの使用例であり、一般的なデスクトップまたはHPCワークロードではなく、一般的なキャッシュ階層によって十分に機能します。

コメントで提起されたいくつかの問題に対処するには:

これらのeDRAMキャッシュは、L4犠牲キャッシュとして設計されているため、メインメモリの代わりに使用できません。これは、それらが揮発性で効果的にコンテンツアドレス指定可能であることを意味します。そのため、それらに格納されたデータは特定の場所に存在するものとして扱われず、いつでも破棄されます。これらのプロパティは、RAMが直接マップされて永続的であるという要件と一致させることは困難ですが、変更すると、キャッシュが意図した目的に役に立たなくなります。マイクロコントローラーで行われているように、より一般的な設計のメモリを埋め込むことはもちろん可能ですが、大きなメモリを備えたシステムでは、メインメモリでは低レイテンシがキャッシュほど有益ではないため、これを正当化することはできません。または、キャッシュを追加する方が価値があります。

ギガバイト程度の容量を持つ非常に大きなキャッシュの可能性については、キャッシュはせいぜいアプリケーションのワーキングセットのサイズである必要があります。HPCアプリケーションはテラバイトのデータセットを処理できますが、時間的および空間的な局所性が優れているため、通常、ワーキングセットはそれほど大きくありません。ワーキングセットが大きいアプリケーションは、たとえばデータベースやERPソフトウェアですが、この種のワークロード向けに最適化されたプロセッサの市場は限られています。ソフトウェアが本当にそれを必要としない限り、キャッシュを追加すると、非常に急速に収益が減少します。最近、プロセッサがプリフェッチ命令を取得するのを見てきたので、キャッシュをより効率的に使用することができます。これらの命令を使用して、ワーキングセットの絶対サイズではなく、メモリアクセスパターンの予測不可能性によるミスを回避できます。

*レイテンシの改善は、キャッシュの物理サイズが小さいためだけでなく、結合性が低下したためでもありました。いくつかの異なる理由でNehalemのキャッシュ階層全体に大きな変更がありましたが、そのすべてがパフォーマンスの改善に焦点を当てていたわけではありません。したがって、これは例としては十分ですが、完全なアカウントではありません。


1
@OleksandrR。簡単に言えば、CPUとDRAMの間に「インピーダンスミスマッチ」のようなものがあり、それが2つの結合を困難にしているように思えます。
レッサーハリネズミ

3
そしてもちろん、SRAMはまだ非常に巨大です-小さい(RAMと比較して)キャッシュでさえ、最新のCPUのダイの約半分の領域を占有します(統合GPUを備えたCPUを除く:D)。
ルアーン

2
メインメモリなしで実行する方法があるのだろうか。スリム化されたLinuxディストリビューション(または古いバージョンのWindows)を実行するには、128MBで十分です。
user253751

「GPU-on-package」ではなく、「GPU-on-die」と呼ばれます。
AStopher

4
@cybermonkey:命令は、実際にはメインメモリではなく、L1キャッシュから取得されます。メインメモリからそれらを取得するのは恐ろしいことです-60 nsのサイクル時間、これはシングルコアデザインのCPUを16 Mhzに制限します。
–MSalters

17

メモリ(GBのDRAM)がCPUダイ自体に含まれない主な理由は、主にコストに関するものです。CPUのダイスペースは、非常に小さなフィーチャを作成するために必要な製造プロセスのため、非常に高価です。同じダイで2つを製造することもできないかもしれませんが、ここで決定的な答えを出すための詳細については十分に知りません。

大量のDRAMをCPUダイに直接置くことの実現可能性を評価しましょう。

22

ただし、メモリをCPUに近づけるという考えは、完全に失われた原因ではありません。これは、光の速度が有限であり、特定の距離で非常に高速に通信することしかできないため、将来メモリが移動する場所です。

メモリをCPUに近づけるための現実的な手法(従来の手法とのトレードオフもあることに注意してください):

  1. それらをCPU自体の上にスタックします。これは既にRaspberry Piで行われており、Wide I / Oメモリ標準の一部です。メモリは、別のプロセスで製造された別のダイのままです。ただし、これには、CPUで放散された熱がヒートシンクに到達する前にメモリを通過する必要があるという問題があります。これは、高出力プロセッサでは機能しないことを意味し、このテクノロジの主なアプリケーションが、CPUが数十または数百ワットを消費しないモバイルプロセッサ/その他の組み込みアプリケーションである理由です。

  2. 低コストの素材の上に本当に密着させてください。これが、HBMが動作するように設計された方法であり、非常に大きなバスを低コストの「インターポーザー」ダイ上で製造し、帯域幅が大幅に高いためにハイエンドGPUメモリが進む方向です。メモリチップとインターポーザはすべて、実際のプロセッサとは異なるダイで製造されています。


5
1つの大きなダイに数十億個のトランジスタを詰め込むと、歩留まりが低下することが予想されます。故障や欠陥の可能性は、デバイスを追加するたびに増加します。システムをいくつかの小さなピースに分割すると、1つのピースに障害が発生する可能性が大幅に低下し、その1つの障害のあるピースを廃棄するコストも低くなります。非常に大きなダイも、他のすべてが同じである場合、製造がはるかに困難になると思います。
ジョンU

4
2

@JohnU-多数の繰り返しモジュールをダイに配置することには、欠陥が発生した場合、発生したモジュールを無効にして、低コストの標準に準拠するようにダイを解放できるという利点があります(これはDRAMでよく起こります。 32KBモジュールを搭載した多くのマシンが実際に64Kチップを使用していて、障害のあるセクションを無効にしていた80年代に戻ります)。これは、実際にその降伏を意味するかもしれ増加をあなたはプロセッサとDRAMを統合する際に...
ジュール・

7

CPUに大量のDRAMを追加することが実行不可能になる理由はいくつかあります。

  1. プロセスとファブは、DRAM用に設定されていない場合があります。DRAMには、製造に余分な製造ステップが必要な特別な回路要素が必要です。これにより、製造コストが増加します。

  2. そのすべてのメモリをテストする必要があります。メモリテストでは、テスト時間が長くなります。それは別のコスト増加です。

  3. ダイを大きくすること自体は、ウェーハあたりのダイの数が少なくなるため、コストの増加になります。また、歩留まりにも影響します。1つの欠陥がウェーハの大部分を占めます。この極端な例については、カメラのフルフレーム(35mm)イメージセンサーのコストを見てください。

  4. 特別な種類のメモリを処理できるプロセスを開発するには、より多くの時間、お金、作業が必要であり、失敗のリスクが高くなります。DRAMに問題があると、CPUのリリースが遅れます。デスクトップCPUは半導体製造の最先端にあるため、遅延は競争上の大きな不利益になる可能性があります。(過去数年間のAMD対Intelを参照してください。)

  5. DRAMでは、読み取りのためのアナログセンシングと定期的なリフレッシュが必要です。私はDRAMの専門家ではありませんが、オフチップかオンチップかに関係なく、ハイエンドCPUほど高速になるとは思えません。そのため、おそらくSRAMキャッシングに悩まされるでしょう。

  6. 上記の問題を克服してCPUダイに数ギガバイトのDRAMを詰め込んでも、デスクトップPC、ラップトップ、またはサーバーを実行するにはまだ十分ではないので、とにかくオフチップメモリ​​が必要です。


1
ほとんどのキャッシュはECCで実装されており、最近のIntelプロセッサの中には、チップキルとキャッシュのブロック冗長性を組み込んでいるものがあります。これにより、テスト要件が削減され、大きなダイの歩留まりが大幅に向上します。対照的に、イメージセンサーでは、情報がアプリオリにわからないため、エラー修正の可能性はありません。また、ピクセルのブロックが適切に機能していない場合、それを無視して予備のピクセルを使用することも決定できませんその場所。
オレクサンドルR.

確かに、メモリを使用してより高い歩留まりを得るのは簡単です。私が言ったように、それは極端な例でした。
アダムハウ

3

他の答えに加えて、そのようなシステムについて言えることは他にもあります。メモリをメインダイに移動すると、他の多くのエンジニアリング上の問題が発生します。バスを再ルーティングし、DMAコントローラーをメインプロセッサに構築し、IRQバスを再構築し、集中エリアに出す余分な熱を取り除く方法を決定する必要があります。これは、マザーボードの製造業者もこのような大幅な変更をサポートするために関与する必要があることを意味します。ローエンドシステムはおそらくこのような変更の恩恵を受けるでしょうが、ハイエンドシステムはおそらく大幅な冷却を必要とします。たとえば、平均的なラップトップがそのようなチップを処理できるとは思えません。

このようなチップは非常に高価ですが、メインのマザーボードの価格は下がります(ただし、おそらくそれほど大きくはないでしょう)。DMAコントローラーのパッケージに加えてRAMのパッケージを見た場合、そのロジックはすべて、それほど大きくない単一のダイに押し込められると信じるのは難しいでしょう。また、CPUは特定のサイズの大きなウェーハから切り取られることも覚えておいてください。これは、製造業者のウェーハあたりのプロセッサ数がはるかに少なくなり、全体的なコストも増加することを意味します。

システム全体でのワット数の使用量については話していませんが、それは減少しますが、1つのエリアにワットが集中し(したがって熱が)なり、おそらく失敗。

最後に、ここには別の欠点があります。それは、カスタマイズされたシステムを提供する能力です。現在、製造業者は、顧客の好みに基づいて、同一のプロセッサで異なるメモリ量のシステム、または異なるプロセッサで同じメモリ量のシステムを出すことを選択できます。多数の異なる構成を提供するには、それぞれが異なる組立ラインで異なるダイを構築する必要があります。

AMDは、実際にそのように機能するテクノロジーを積極的に使用しています。プロセッサーダイの各部分は、異なる構成に交換できる個別の論理ユニットです。将来、そのような設計が実行可能であれば、チップメモリ​​を提供するCPUが高価なモジュールアップグレードとして機能する可能性が非常に高くなります。たとえば、ある日、内蔵メモリのない256コア、内蔵メモリのある128コア、またはGPU、CPU、RAMのような他の構成を選択できる場合があります。


この答えの主な問題は、スマートフォン用のSoC設計に実際にRAMが含まれていることです。それらはそれほど高価ではありません、実際、それらはより安いです。
–MSalters

@MSaltersそれらは同じダイに統合されていません。メモリダイは個別にテストされ、正しく動作することが確認されており、マイクロプロセッサダイと一緒にパッケージ化されているだけです。
歯ブラシ

2

上記のほぼすべて+もう1つの追加の問題:熱。

DRAMセルは本質的に漏れやすいコンデンサです。そして、ここでの誘電体はSiO2層そのものです。温度が上昇すると、漏れ電流が比例して増加します。これらは、DRAMセルをはるかに高速で放電するため、はるかに高速のリフレッシュレートが必要になり、複雑さが増し、必要な電流が増加し、当然ながら熱が追加されます。


2

すでに与えられた答えに加えて、1つの追加の側面があります。生産の欠陥による無駄:

たとえば、生産された特定のモデルのすべてのCPUの1/100に障害があり(実際には、実際にはそれよりも少なく、計算が簡単です)、生産されたすべてのRAMの1/100に障害があります。

1つのチップで両方のコンポーネントを組み合わせると、すべてのチップの1/100に欠陥のあるCPUがあり、すべてのチップの1/100に欠陥のあるRAMがあります。

これは次のことを意味します。

  • 10000チップのうち1チップに欠陥のあるRAMとCPUの両方がある
  • 99個のチップにRAMの欠陥がある
  • 99個のチップのCPUに欠陥がある
  • 生産された10000個の部品の全部で199個はすべて廃棄物になります

個別のチップを製造する場合の計算は次のとおりです。

  • 5000個のRAMのうち50個に欠陥がある
  • 5000個のCPUのうち50個に欠陥がある
  • 生産された10000個の部品のうち100個は無駄になります

通常、1 GBのRAMは8つのチップで構成されるバンクの形式で作成されるため、RAMとCPUを同じチップに配置する場合は、2つではなく9つのコンポーネントを1つのチップに結合する必要があります。これにより、上記の簡単な例では10000の約865個の不良部品が生産されます。

「IBM Cell」CPUにはまさにこの問題がありました。「プレイステーション」コンソールは、部分的に欠陥のあるチップを使用していました。プレイステーションソフトウェアは、欠陥のあるコアとSRAMを使用しない方法で作成されました。


1
AMDは、同じ理由でしばらくの間3コアCPUを提供していました。実際には、通常、部品はパッケージ化される前にダイレベルでテストされるため、懸念事項はモノリシックCPUとメモリの組み合わせに最も当てはまると思います。
オレクサンドルR.

Darpaは、IntelとQualcomのエンジニアに比べて幻想的な土地である3dSoCを使用してメモリ壁を克服することで、50倍の電力効率の賞を受賞しました。ただし、darpaはdarpaです。monolithic3d.com/blog/…SoC(チップ上のシステム)は並列プロセッサに最適です。つまり、2/16ではなく1000dsのグループがあります。
com.prehensible

1

実際には2種類のRAMがあります。静的RAMと動的RAMです。静的メモリは非常に高速ですが、コストが高くなります。一方、ダイナミックRAMはスタティックRAMと比較して低速ですが、スタティックRAMと比較して安価です。

キャッシュメモリは静的RAMに分類されます。KBまたはMBサイズで提供されていることがわかります。彼らは速いです。しかし、高コスト。


正確ではない、はい、それらは高速ですが、それは主にデータが移動しなければならない距離がDRAMに比べてはるかに短いためです。
AStopher

3
実際、SRAMセルは単純なので、高速です。それはデジタル双安定回路です。誤ってアナログ値0.8に設定した場合、安定した位置1.0に移動することで自動的に修正されます。DRAMには、このような安定した状態はありません。中間状態から離れることはありません。さらに悪いことに、それは移動に向けて、あなたが余分な是正「リフレッシュ」回路を必要とする理由である、そのような状態。
-MSalters

@MSalters:SRAMセルはDRAMセルよりも単純ではありません。はるかに安定しているため、使用が簡単になります(サポート回路とタイミング図の両方の面で)。しかし、SRAMセルはDRAMのビットあたりおよそ6倍の回路です。
ベンフォークト

1
@BenVoigt:トランジスタ数で、はい-6T対1T。しかし、DRAMにはコンデンサがあり、これは非常に奇妙なコンポーネントです。SRAMは、互いに接続された単なるトランジスタです。
-MSalters

DRAMのコンデンサもトランジスタとして実装されることが判明
Ben Voigt

1

前述の他の理由に加えて、多くのシステムには複数のCPUコアがあります。メインDRAMに保存されている情報がすべてのキャッシュされたコピーと一致している場合、キャッシュされた情報を持たないすべてのプロセッサは、同等のアクセス権を持ちます。一部のアーキテクチャは、各CPUコアが一定範囲のアドレス空間を「所有」するという前提で設計されており、CPUが他のプロセッサが所有するメモリにアクセスできる場合でも、そのようなアクセスは自身のメモリへのアクセスよりもはるかに遅くなります、しかし、x86は一般的にそのような方法で実装されていません。

プロセッサコアが特定のアドレス範囲を所有するという前提に基づいてシステムが設計され、コードが他のプロセッサのアドレス範囲の使用を最小限に抑える必要がある場合、各プロセッサコードに十分な量のオンチップメモリ​​を含めることは理にかなっています。このような設計により、プロセッサコアが自身のメモリにアクセスするのに必要な時間は短縮される可能性がありますが、別のプロセッサのメモリにアクセスするのに必要な時間が長くなる可能性があります。ただし、システムがそのような想定に基づいて設計されていない限り、誰がいつそれを必要としているかに関係なく、データがプロセッサ間で分散される可能性があります。別のCPU内からデータにアクセスするのに必要な余分な時間(外部メモリシステムに対して)が、内部アクセスで節約された時間の半分しかなかったとしても、

今日の技術に合わせてシステムをゼロから設計している場合、不均一なメモリアーキテクチャは、すべてのプロセッサがすべてのメモリに効率的にアクセスできるようにする必要があるものよりも多くの「負担」を許容できます。しかし、今日のソフトウェア設計を考えると、プロセッサ間で共有される外部メモリシステムを使用する方が、プロセッサ内に大量のデータストレージを配置するよりも効率的です。


2
現在、不均一なメモリアーキテクチャがすでに使用されています(さらには一般的です)。マルチプロセッサシステムで使用される統合メモリコントローラを備えたCPUの場合、別のプロセッサの物理メモリに格納されたデータは、ローカルに接続されたRAMのデータよりも遠くにあり、高いレイテンシでアクセスできます。実際には、これらのシステムで起こることは、プロセッサに追加レベルのキャッシュが装備され、コヒーレンシトラフィックが接続ファブリックによって部分的に処理されることです。POWER7とPOWER8はこのタイプです。
オレクサンドルR.

1

CPUにメモリを追加するのが非常に難しい理由を指摘する上で、上記の答えはすべて正しいですが、現代のCPUには非常に多くのメモリがあることも事実です。

確定的な遅延が重要なリアルタイム操作では、オンチップキャッシュをコードおよび/またはデータのアドレス可能なメモリとして使用することは珍しいことではありません。利点は高速で一定のアクセス時間であり、欠点はオンチップメモリ​​がかなり制限されることです。


1

元の質問で説明した問題は、マシンのメモリがすべてCPUに含まれている場合にのみ回避できます。メインボードのスロットを介してマシンに追加されたメモリは、説明したものと同じ遅延の影響を受け、CPU / RAMとオンボードRAM間のマーシャリングとロジック制御デバイスが必要になります。

RAMは安価で、通常はユーザーがCPUをアップグレードする間に1〜2回拡張されます。

また、典型的な「フェッチ」呼び出しは、RAMがCPUクロック速度で実行されている場合でも、CPUで多数のアイドルティックが発生することに注意してください。

マシン上のメモリの従来の構成は、CPUレジスタが先頭にあり、キャッシュ、RAM、ディスクの順になっているピラミッドです。通常、パフォーマンスの高いマシンには、適切なクロック速度、適切な量のキャッシュ、十分な量のRAM、および高速のハードディスク(またはアレイ)の組み合わせがあります。近年、ディスクパフォ​​ーマンスは通常、ほとんどのPCおよび高RPMディスクで最高のパフォーマンスの向上をもたらし、キャッシュ付きディスクとソリッドステートディスクは優れたパフォーマンスの向上をもたらします。

はい、すべてのRAMをチップに搭載したマシンは、最新のアプリケーションで良好に動作しますが、標準のオペレーティングシステムを実行する一部のRAMを搭載したマシンは、おそらく期待したほどのパフォーマンス向上をもたらさないでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.