Intels Haswell (oder zumindest jene Produkte, die die Iris Pro 5200-GPU enthalten) und IBMs POWER7 und POWER8 enthalten alle eingebetteten DRAM, "eDRAM".
Ein wichtiges Problem, das dazu geführt hat, dass eDRAM bis vor kurzem nicht verbreitet war, ist, dass der DRAM-Herstellungsprozess nicht inhärent mit Logikprozessen kompatibel ist, so dass zusätzliche Schritte eingeschlossen werden müssen (die die Kosten erhöhen und die Ausbeute verringern), wenn eDRAM gewünscht wird. Es muss also einen zwingenden Grund dafür geben, ihn aufnehmen zu wollen, um diesen wirtschaftlichen Nachteil auszugleichen. Alternativ kann der DRAM auf einem separaten Chip platziert werden, der unabhängig von der CPU hergestellt, dann aber in dasselbe Gehäuse integriert wird. Dies bietet die meisten Vorteile der örtlichen Gegebenheiten, ohne die Schwierigkeiten zu haben, die beiden auf wirklich integrierte Weise herzustellen.
Ein weiteres Problem ist, dass DRAM nicht wie SRAM ist, da es seinen Inhalt nicht unbegrenzt speichert, während Strom angelegt wird, und das Lesen zerstört auch die gespeicherten Daten, die anschließend zurückgeschrieben werden müssen. Daher muss es regelmäßig und nach jedem Lesevorgang aktualisiert werden. Und da eine DRAM-Zelle auf einem Kondensator basiert, dauert das Aufladen oder Entladen des Kondensators so lange, bis die nächste Auffrischung einen bestimmten Zeitraum in Anspruch nimmt. Diese Ladezeit ist bei SRAM nicht erforderlich, da es sich lediglich um eine Verriegelung handelt. Folglich kann es mit der gleichen Taktrate wie die CPU getaktet werden, wohingegen der DRAM auf ungefähr 1 GHz begrenzt ist, während ein angemessener Energieverbrauch aufrechterhalten wird. Dies hat zur Folge, dass der DRAM eine höhere inhärente Latenz als der SRAM aufweist, weshalb er nur für die größten Caches verwendet werden sollte, bei denen sich die verringerte Fehlerrate auszahlt.
Auch in Bezug auf die Latenz besteht ein großer Teil der Schwierigkeit darin, dass die physikalischen Abstandssignale übertragen werden müssen. In der Taktperiode einer 3-GHz-CPU kann sich das Licht nur 10 cm bewegen. Natürlich laufen die Signale nicht geradlinig über den Chip und breiten sich auch nicht mit einer Geschwindigkeit aus, die der Lichtgeschwindigkeit nahe kommt, da Pufferung und Fan-Out erforderlich sind, was zu Laufzeitverzögerungen führt. Die maximale Entfernung, die ein Speicher von einer CPU entfernt sein kann, um 1 Takt-Latenzzyklus aufrechtzuerhalten, beträgt daher höchstens einige Zentimeter, wodurch die Menge an Speicher begrenzt wird, die in dem verfügbaren Bereich untergebracht werden kann. Der Nehalem-Prozessor von Intel hat die Kapazität des L2-Caches im Vergleich zu Penryn reduziert, um die Latenz zu verbessern, was zu einer höheren Leistung führte.
Es sollte auch beachtet werden, dass die Cache-Trefferrate für die meisten Workloads sehr hoch ist: in fast allen praktischen Fällen weit über 90% und nicht selten sogar über 99%. Daher beschränkt sich der Vorteil des Einbindens größerer Speicher in den Chip inhärent darauf, die Auswirkung dieser wenigen Prozent der Fehler zu verringern. Prozessoren, die für den Enterprise-Server-Markt vorgesehen sind (wie z. B. POWER), haben normalerweise enorme Caches und können eDRAM rentabel einschließen, da es nützlich ist, die großen Arbeitsmengen vieler Enterprise-Workloads zu berücksichtigen. Haswell muss die GPU unterstützen, da die Texturen groß sind und nicht im Cache gespeichert werden können. Dies sind die Anwendungsfälle für eDRAM heute, keine typischen Desktop- oder HPC-Workloads, die von den typischen Cache-Hierarchien sehr gut bedient werden.
So gehen Sie auf einige in Kommentaren angesprochene Probleme ein:
Diese eDRAM-Caches können nicht anstelle des Hauptspeichers verwendet werden, da sie als L4-Opfer-Caches ausgelegt sind. Dies bedeutet, dass sie flüchtig und effektiv inhaltsadressierbar sind, sodass die darin gespeicherten Daten nicht als an einem bestimmten Ort befindlich behandelt werden und jederzeit verworfen werden können. Diese Eigenschaften lassen sich nur schwer mit der Anforderung vereinbaren, dass RAM direkt zugeordnet und dauerhaft sein muss. Wenn Sie sie jedoch ändern, werden die Caches für den beabsichtigten Zweck unbrauchbar. Es ist natürlich möglich, Speicher konventionellerer Bauart einzubetten, wie dies bei Mikrocontrollern der Fall ist. Dies ist jedoch für Systeme mit großen Speichern nicht gerechtfertigt, da eine geringe Latenz im Hauptspeicher nicht so vorteilhaft ist wie in einem Cache, was zu einer Vergrößerung führt oder das Hinzufügen eines Cache ist eine lohnendere Angelegenheit.
Hinsichtlich der Möglichkeit sehr großer Caches mit einer Kapazität in der Größenordnung von Gigabyte ist es nur erforderlich, dass ein Cache höchstens die Größe des Arbeitssatzes für die Anwendung hat. HPC-Anwendungen können Terabyte-Datasets verarbeiten, haben jedoch eine gute zeitliche und räumliche Lokalität, sodass ihre Arbeitssets in der Regel nicht sehr groß sind. Anwendungen mit großen Arbeitsmengen sind z. B. Datenbanken und ERP-Software, aber es gibt nur einen begrenzten Markt für Prozessoren, die für diese Art von Arbeitslast optimiert sind. Wenn die Software dies nicht wirklich benötigt, führt das Hinzufügen von mehr Cache zu sehr schnell sinkenden Erträgen. Kürzlich haben wir gesehen, dass Prozessoren Prefetch-Anweisungen erhalten, sodass Caches effizienter genutzt werden können: Mit diesen Anweisungen können Fehler vermieden werden, die durch die Unvorhersehbarkeit von Speicherzugriffsmustern und nicht durch die absolute Größe der Arbeitsgruppe verursacht werden.
* Die Verbesserung der Latenz war nicht nur auf die geringere physische Größe des Caches zurückzuführen, sondern auch auf die verringerte Assoziativität. Die gesamte Cache-Hierarchie in Nehalem wurde aus verschiedenen Gründen erheblich geändert, wobei nicht alle auf die Verbesserung der Leistung abzielten. Obwohl dies als Beispiel ausreicht, ist es kein vollständiger Account.