Haswell de Intel (o al menos los productos que incorporan la GPU Iris Pro 5200) y POWER7 y POWER8 de IBM incluyen DRAM integrado, "eDRAM".
Una cuestión importante que ha llevado a que eDRAM no sea común hasta hace poco es que el proceso de fabricación de DRAM no es inherentemente compatible con procesos lógicos, por lo que deben incluirse pasos adicionales (que aumentan el costo y disminuyen el rendimiento) cuando se desea eDRAM. Por lo tanto, debe haber una razón convincente para querer incorporarlo para compensar esta desventaja económica. Alternativamente, la DRAM se puede colocar en un troquel separado que se fabrica independientemente, pero luego se integra en el mismo paquete que la CPU. Esto proporciona la mayoría de los beneficios de la localidad sin las dificultades de fabricar los dos de una manera verdaderamente integrada.
Otro problema es que la DRAM no es como la SRAM, ya que no almacena su contenido indefinidamente mientras se aplica la alimentación, y leerla también destruye los datos almacenados, que deben escribirse nuevamente. Por lo tanto, debe actualizarse periódicamente y después de cada lectura. Y, debido a que una celda DRAM se basa en un condensador, cargarla o descargarla lo suficiente como para que la fuga no corrompa su valor antes de que la próxima actualización tarde un tiempo finito. Este tiempo de carga no se requiere con SRAM, que es solo un pestillo; en consecuencia, puede sincronizarse a la misma velocidad que la CPU, mientras que la DRAM se limita a aproximadamente 1 GHz mientras se mantiene un consumo de energía razonable. Esto hace que la DRAM tenga una latencia inherente más alta que la SRAM, lo que hace que no valga la pena usarla para todos, excepto para los cachés más grandes, donde la tasa de fallas reducida dará sus frutos.
Además, en lo que respecta a la latencia, una gran parte de la dificultad es la distancia física que deben recorrer las señales. La luz solo puede viajar 10 cm en el período de reloj de una CPU de 3 GHz. Por supuesto, las señales no viajan en línea recta a través de la matriz y tampoco se propagan a algo cercano a la velocidad de la luz debido a la necesidad de almacenamiento en búfer y despliegue, que generan retrasos en la propagación. Por lo tanto, la distancia máxima que una memoria puede estar alejada de una CPU para mantener 1 ciclo de latencia de reloj es de unos pocos centímetros como máximo, lo que limita la cantidad de memoria que se puede acomodar en el área disponible. El procesador Nehalem de Intel en realidad redujo la capacidad de la caché L2 frente a Penryn en parte para mejorar su latencia, lo que condujo a un mayor rendimiento. * Si no nos importa tanto la latencia, entonces no hay razón para poner la memoria en el paquete,
También se debe tener en cuenta que la tasa de aciertos de caché es muy alta para la mayoría de las cargas de trabajo: muy por encima del 90% en casi todos los casos prácticos, y no es raro incluso por encima del 99%. Por lo tanto, el beneficio de incluir memorias más grandes en el dado está inherentemente limitado a reducir el impacto de este pequeño porcentaje de fallas. Los procesadores destinados al mercado de servidores empresariales (como POWER) generalmente tienen enormes cachés y pueden incluir de manera rentable eDRAM porque es útil para acomodar los grandes conjuntos de trabajo de muchas cargas de trabajo empresariales. Haswell lo tiene para soportar la GPU, porque las texturas son grandes y no se pueden acomodar en la memoria caché. Estos son los casos de uso de eDRAM en la actualidad, no las cargas de trabajo de escritorio o HPC típicas, que están muy bien atendidas por las jerarquías de caché típicas.
Para abordar algunos problemas planteados en los comentarios:
Estas memorias caché de eDRAM no se pueden usar en lugar de la memoria principal porque están diseñadas como memorias caché de víctimas L4. Esto significa que son volátiles y efectivamente direccionables por el contenido, por lo que los datos almacenados en ellos no se tratan como residiendo en una ubicación específica y pueden descartarse en cualquier momento. Estas propiedades son difíciles de conciliar con el requisito de RAM para ser mapeado directamente y persistente, pero cambiarlas haría que los cachés fueran inútiles para su propósito previsto. Por supuesto, es posible incrustar memorias de un diseño más convencional, como se hace en microcontroladores, pero esto no es justificable para sistemas con memorias grandes, ya que la baja latencia no es tan beneficiosa en la memoria principal como en un caché, por lo que se amplía o agregar un caché es una propuesta más valiosa.
En cuanto a la posibilidad de cachés muy grandes con capacidad del orden de gigabytes, solo se requiere un caché que tenga como máximo el tamaño del conjunto de trabajo para la aplicación. Las aplicaciones de HPC pueden tratar con conjuntos de datos de terabytes, pero tienen una buena ubicación temporal y espacial, por lo que sus conjuntos de trabajo generalmente no son muy grandes. Las aplicaciones con grandes conjuntos de trabajo son, por ejemplo, bases de datos y software ERP, pero solo hay un mercado limitado para procesadores optimizados para este tipo de carga de trabajo. A menos que el software realmente lo necesite, agregar más caché proporciona rendimientos que disminuyen muy rápidamente. Recientemente hemos visto a los procesadores obtener instrucciones de captación previa, por lo que los cachés se pueden usar de manera más eficiente: se pueden usar estas instrucciones para evitar errores causados por la imprevisibilidad de los patrones de acceso a la memoria, en lugar del tamaño absoluto del conjunto de trabajo,
* La mejora en la latencia no se debió solo al menor tamaño físico de la memoria caché, sino también a que se redujo la asociatividad. Hubo cambios significativos en toda la jerarquía de caché en Nehalem por varias razones diferentes, no todas centradas en mejorar el rendimiento. Entonces, si bien esto es suficiente como ejemplo, no es una cuenta completa.