Haswell di Intel (o almeno quei prodotti che incorporano la GPU Iris Pro 5200) e POWER7 e POWER8 di IBM includono DRAM, "eDRAM" incorporati.
Un problema importante che ha portato eDRAM a non essere comune fino a poco tempo fa è che il processo di fabbricazione DRAM non è intrinsecamente compatibile con i processi logici, quindi è necessario includere passaggi aggiuntivi (che aumentano il costo e diminuiscono il rendimento) quando si desidera eDRAM. Quindi, ci deve essere un motivo convincente per voler incorporarlo al fine di compensare questo svantaggio economico. In alternativa, la DRAM può essere posizionata su un die separato che viene prodotto indipendentemente, ma poi integrato nello stesso pacchetto della CPU. Ciò fornisce la maggior parte dei vantaggi della località senza le difficoltà di produrre i due in modo veramente integrato.
Un altro problema è che la DRAM non è come la SRAM in quanto non memorizza il suo contenuto indefinitamente mentre viene applicata l'alimentazione e la lettura distrugge anche i dati memorizzati, che devono essere riscritti in seguito. Quindi, deve essere aggiornato periodicamente e dopo ogni lettura. Inoltre, poiché una cella DRAM si basa su un condensatore, la carica o scarica sufficientemente affinché la perdita non danneggi il suo valore prima che il prossimo aggiornamento richieda una quantità limitata di tempo. Questo tempo di ricarica non è richiesto con SRAM, che è solo un fermo; di conseguenza può essere sincronizzato alla stessa velocità della CPU, mentre la DRAM è limitata a circa 1 GHz pur mantenendo un consumo energetico ragionevole. Questo fa sì che la DRAM abbia una latenza intrinseca più alta rispetto alla SRAM, il che rende inutile usarla per tutti tranne che per le cache molto più grandi, dove il tasso di miss ridotto pagherà.
Inoltre, per quanto riguarda la latenza, gran parte della difficoltà è che i segnali di distanza fisica devono viaggiare. La luce può percorrere solo 10 cm nel periodo di clock di una CPU da 3 GHz. Naturalmente, i segnali non viaggiano in linea retta attraverso il dado e non si propagano a nulla vicino alla velocità della luce a causa della necessità di buffering e fan-out, che comportano ritardi di propagazione. Pertanto, la distanza massima che una memoria può essere lontana da una CPU per mantenere 1 ciclo di clock di latenza è di qualche centimetro al massimo, limitando la quantità di memoria che può essere ospitata nell'area disponibile. Il processore Nehalem di Intel ha effettivamente ridotto la capacità della cache L2 rispetto a Penryn in parte per migliorare la sua latenza, il che ha portato a prestazioni più elevate. * Se non ci preoccupiamo così tanto della latenza, allora non c'è motivo di mettere la memoria sul pacchetto,
Va inoltre notato che la percentuale di riscontri nella cache è molto elevata per la maggior parte dei carichi di lavoro: ben al di sopra del 90% in quasi tutti i casi pratici e non di rado anche al di sopra del 99%. Pertanto, il vantaggio di includere memorie on-die più grandi è intrinsecamente limitato alla riduzione dell'impatto di questo pochi percento di incidenti. I processori destinati al mercato dei server aziendali (come POWER) in genere hanno enormi cache e possono includere proficuamente eDRAM perché è utile per ospitare i grandi gruppi di lavoro di molti carichi di lavoro aziendali. Haswell lo supporta per supportare la GPU, poiché le trame sono grandi e non possono essere sistemate nella cache. Questi sono i casi d'uso per eDRAM oggi, non i carichi di lavoro desktop o HPC tipici, che sono molto ben serviti dalle gerarchie cache tipiche.
Per affrontare alcuni problemi sollevati nei commenti:
Queste cache eDRAM non possono essere utilizzate al posto della memoria principale perché sono progettate come cache delle vittime L4. Ciò significa che sono volatili ed effettivamente indirizzabili sui contenuti, in modo che i dati in essi memorizzati non vengano trattati come residenti in alcuna posizione specifica e possano essere eliminati in qualsiasi momento. Queste proprietà sono difficili da conciliare con il requisito della RAM di essere mappate direttamente e persistenti, ma modificarle renderebbe le cache inutili per lo scopo previsto. Ovviamente è possibile incorporare memorie di un design più convenzionale, come avviene nei microcontrollori, ma ciò non è giustificabile per i sistemi con memorie di grandi dimensioni poiché la bassa latenza non è vantaggiosa nella memoria principale come in una cache, quindi ingrandendo o l'aggiunta di una cache è una proposta più utile.
Per quanto riguarda la possibilità di cache molto grandi con capacità dell'ordine dei gigabyte, è necessario solo che una cache abbia le dimensioni massime del working set per l'applicazione. Le applicazioni HPC possono gestire set di dati terabyte, ma hanno una buona località temporale e spaziale e quindi i loro set di lavoro in genere non sono molto grandi. Le applicazioni con grandi set di lavoro sono ad esempio database e software ERP, ma esiste solo un mercato limitato per i processori ottimizzati per questo tipo di carico di lavoro. A meno che il software non ne abbia veramente bisogno, l'aggiunta di più cache fornisce rendimenti che diminuiscono molto rapidamente. Di recente abbiamo visto i processori ottenere istruzioni di prefetch, quindi le cache possono essere utilizzate in modo più efficiente: si possono usare queste istruzioni per evitare errori causati dall'imprevedibilità dei modelli di accesso alla memoria, piuttosto che dalle dimensioni assolute del set di lavoro,
* Il miglioramento della latenza non era dovuto solo alla minore dimensione fisica della cache, ma anche alla riduzione dell'associatività. Ci sono stati cambiamenti significativi nell'intera gerarchia della cache in Nehalem per diversi motivi, non tutti focalizzati sul miglioramento delle prestazioni. Quindi, sebbene ciò sia sufficiente come esempio, non è un account completo.