E-Mail: Memorias 3D

Buenos días Urian.

En primer lugar felicitarte por el blog, lo sigo desde hace unos meses y disfruto enormemente leyéndolo, sobre todo las entradas más técnicas. Nunca he participado en los comentarios, pero llevo un tiempo dándole vueltas a un tema y pensé que tal vez te interesaría compartir tu opinión al respecto. Voy a soltarte un tocho tremendo, así que entendería que no te lo leyeras, pero es que no sabría exponerte mis dudas sin antes poner todas las cartas sobre la mesa. En fin, vamos allá.
Hace unos meses comencé a interesarme por el desarrollo de las llamadas memorias 3D, sobre todo a raíz de varios anuncios de que serían la opción escogida para las nuevas arquitecturas de procesadores gráficos: “Pascal” en Nvidia y “Pirate Islands” en AMD. Cada fabricante parece estar enfocado en “distintos sabores” de memorias 3D, pero en ambos casos se promete un aumento enorme de anchos de banda acompañado de un importante descenso en el consumo energético.
Últimamente no le había dedicado mucha atención al tema hasta que el otro día, leyendo por encima el libro que colgaste recientemente en el blog (el “Real-time rendering” de Akenine-Möller), pude ver una interesante reflexión sobre como la ley de Moore ha ido dejando el ancho de banda de las memorias cada vez más retrasado con respecto al avance de los microprocesadores. Además, hoy me encuentro con un nuevo post en tu blog en el que tratas la misma problemática. Me ha dado bastante que pensar y he estado indagando un poco sobre el tema “DRAM Vs SRAM” y sobre lo que se espera de las próximas arquitecturas gráficas en lo que respecta a memoria.
AMD se supone que va a implementar memorias HBM desarrolladas en conjunto con SK Hynix. Éstos nuevos chips alcanzarían en su primera generación 128 Gbps de ancho de banda y densidades de hasta 1GB (gigabyte completo, es decir 8Gb) apilando 4 capas. En la segunda generación tendríamos 256 Gbps de ancho de banda y densidades de 4GB u 8GB dependiendo de si se apilaran 4 u 8 capas. Lo que más me intriga es lo siguiente: si yo lo he entendido todo correctamente, esta tecnología permitiría sustituir los chips de memoria que llevan las tarjetas gráficas por unos chips mas rápidos y densos, pero no supondría un cambio estructural en la arquitectura del sistema, de hecho no me parece que esté pensado para memorias “on-die”, como las que llevan las APUs, sino para chips externos en tarjetas gráficas dedicadas.
Sin embargo Nvidia, que no ha facilitado tantos datos sobre sus futuras memorias, sí que ha hecho alusión a cambios en la arquitectura de memoria para “Pascal”, acercándose más al concepto de computación hetereogénea. Para ello se supone que quieren desarrollar un bus ultrarápido de comunicación entre CPU y GPU (llamado “NVLink”), implementar una arquitectura de memoria unificada y apoyar todo este nuevo sistema por memorias 3D de alto ancho de banda que textualmente irían “inside the same package as the GPU”. Nótese como se hace referencia explícita al “package” y no al “die”.
Lo llamativo para mi de todo esto es que, si no lo estoy entendiendo mal, la apuesta de Nvidia pasa por llevar los beneficios de la computación heterogénea al ámbito de las tarjetas gráficas añadidas, utilizando para ello nuevos buses de comunicación, nueva arquitectura de memoria unificada y nuevos chips de memoria más rápidos. Incluso presentaron un prototipo de “módulo gráfico” tres veces más pequeño que las actuales tarjetas de expansión. Mientras tanto parece que AMD ha dejado un poco de lado sus avances en el campo de las APUs y se está centrando en aumentar la potencia bruta de sus gráficas dedicadas a base de nuevas memorias.
¿Está AMD descuidando un campo en el que por primera vez en años ha podido superar a Nvidia? ¿Va Nvidia a tomar lo aprendido de las APUs de AMD para mejorar sus propios productos? Si Nvidia decide adoptar el camino de la computación heterogénea ¿podría llegar a convertirse en el estándar “de facto” de aquí a unos años? ¿Cómo afectaría esto al futuro desarrollo de videojuegos? ¿Puede resultar viable el desarrollo de nuevos factores forma para tarjetas gráficas dedicadas? Y volviendo al tema de las memorias: ¿podemos esperar una “puesta al día de las memorias” respecto a las GPUs en la próxima generación de arquitecturas gráficas? ¿Supondrá esto una diferencia significativa en la calidad gráfica de los juegos a medio plazo? Y ya la última pregunta que te lanzo ¿tienen las memorias 3D alguna aplicación a medio/largo plazo en las actuales consolas? ¿o la diferencia de arquitecturas obligaría a retrasar su adopción en consolas hasta la próxima generación?

Espero no haber sido demasiado tostón con todo esto y, por supuesto, no espero que me respondas a todas las preguntas que he hecho, es más bien una forma de expresar todo lo que me da que pensar este asunto. Espero poder leer entradas tan interesantes como la última en el futuro y seguir aprendiendo cosas nuevas cada día.
Un saludo de un lector agradecido.
Respecto a estas dos preguntas hay varios temas y me gustaría tocarlos uno por uno.
#1 HBM
Es completamente falso que el estándar de memoria HBM sea algo exclusivo de AMD, una cosa es que su desarrollo lo empezarán AMD y SK Hynix pero es desde Octubre del año pasado un estándar de la JEDEC. Es más, la desconocida memoria 3D que utilizara Nvidia… es HBM.  No en vano, el ponente de la presentación de Nvidia trabajo previamente en AMD (Fuente).
#2 Computación Heterogénea
Es completamente falso que AMD haya abandonado por completo la computación heterogénea, al contrario y tecnologías como el HSA y el Onion+ (añadido en las APU Kaveri de PC y Liverpool de PS4) demuestran que no es así. Es más, el soporte de la computación heterogénea es uno de los requisitos de Direct3D 11 pero creo que lo confundes con los cambios que se están produciendo en lo que a la memoria se refiere con la computación heterogénea.
Uno de los problemas que tiene la computación heterogénea es que a simple vista es una idea cojonuda ya que permite descargar la CPU de trabajos que requieren aplicar la misma operación en colecciones de datos (algo en lo que las GPUs son mucho más eficientes) directamente a una GPU pero el problema esta en la organización de la memoria ya que la CPU ha de tener acceso a los resultados generados por la GPU y en PC por ejemplo la CPU no tiene acceso a la memoria de la gráfica por lo que la GPU tiene que escribir lo resultados en la RAM principal a través del PCI Express, por lo que los pasos son los siguientes:
  1. La CPU envia una lista de comandos/tareas a realizar a la GPU a través del puerto PCI Express.
  2. La GPU los recibe y los procesa.
  3. Los resultados son enviados de nuevo a través del bus PCI Express de nuevo a la memoria principal.
  4. La CPU lee lo resultados.

El primer intento fue unificar CPU y GPU en un mismo chip junto a la interfaz (esto se ve en sistemas como Xbox 360 y Wii U) pero la tabla de direcciones de memoria era distinta y pese a compartir memoria física y acceso a la misma se comportaban como si fuesen memoria distintas por lo que se tenia que copiar dentro e una misma memoria un dato de una sección a otra para que lo pudiese leer el otro procesador. Por suerte en el caso de Xbox One y PS4 no ocurre esto ya que tanto CPU como GPU comparten la misma tabla de paginación de la memoria y la CPU tiene acceso a toda la memoria entera al igual que la GPU, por lo que el proceso pasa a ser el siguiente:

  1. La CPU envia una lista de comandos/tareas a realizar a la GPU a través del bus interno del SoC que comunica ambos procesadores.
  2. La GPU los recibe y los procesa.
  3. Los resultados son enviados a memoria para que la CPU los pueda leer (en el caso de PS4 es posible enviarlos a la cache L2 de la CPU de forma directa a través del Onion+, lo que reduce aún más la latencia de la operación).

#3 NVLink

El NVlink es una interfaz para comunicar las GPUs de Nvidia entre ellas y con las CPUs en un entorno de computación de alto rendimiento y es un sustituto al PCI Express en dicho entorno, no sabemos si derivará en un estándar pero si deriva puede ocurrir como con la memoria HBM. En todo caso hay que tener en cuenta que la única empresa que puede realizar sistemas combinados de CPU x86-64 y GPU es AMD por lo que Nvidia se encuentra con el problema de que no puede desarrollar tecnologías como el HSA por no tener competencias en ese aspecto. ¿Cual es la mejor solución? Pues intentar unificar la memoria en un solo entorno pero las GPUs son enormes devoradoras de ancho de banda por lo que los 16GB/seg por dirección del PCI Express 3.0 no es suficiente así que lo mejor es crear un sustituto que como mínimo pueda transmitir por dirección unos 80GB/seg y permitir el uso de memorias de alto rendimiento como memorias de un sistema HPC/Computación de Alto Rendimiento. Es también cierto que con esto Nvidia podría crear un SoC de alto rendimiento con CPU basada en arquitectura ARM de 64 bits, una de sus GPUs de escritorio y el NVLink como interfaz para comunicar la CPU y la GPU entre ellas y la memoria.

El problema de Nvidia es que no tienen una licencia x86-64 y por tanto no pueden hacer un SoC para PC como los que esta realizando AMD, esto hace que Nvidia tenga que tener en cuenta dos pozos de memoria separados en dicho entorno, en cambio en el mundo de la computación científica/alto rendimiento no importa tanto la compatibilidad con x86-64 (en realidad no importa nada) por lo que gracias al NVLink podrán crear SoCs de alto rendimiento o en su defecto combinaciones de CPU+GPU sin que haya un puerto por el medio y con sistemas de memoria realmente unificados.

Hasta ahora el SoC más avanzado que tienen es el Tegra K1 y no han desarrollado nada más potente en ese aspecto por el hecho que necesitaban una interfaz de comunicación entre memoria y componentes que estuviese pensado para GPUs de alto rendimiento en un SoC e incluso se podría hacer una futura consola con todo eso al nivel de PS4 o incluso mejor.

#4 Futuro

Lo ideal sería que en PC la memoria gráfica y la de la CPU se unificaran en una sola y desapareciese el PCI Express, me gustaría ver una configuración como la de PS4 con memoria GDDR5 como memoria del sistema y todo en una misma placa, obviamente esto no lo veremos nunca por intereses comerciales y las memorias en PC seguirán estando separadas, no en vano el HBM es el estándar de la JEDEC para sustituir a la GDDR5 pero al mismo tiempo hay un estándar para memoria 3D (La DDR3 y la DDR4) para memoria apilada. Aunque la idea tanto del HBM como del 3DS-DDRn parten de la misma necesidad, la creación de sistemas que resulten más pequeños y consuman menos energía. No es un tema de ganar ancho de banda sino un tema de ahorro de componentes y ahorro energético realmente ya que las tendencias en cuanto al diseño industrial de ordenadores va en ese sentido.

La idea detrás de todo esto es sencilla:

  • La velocidad de reloj de las memorias y su voltaje están relacionadas, a cuanto más voltaje más velocidad de reloj.
  • El consumo por ciclo de reloj crece cuadraticamente, por lo que una memoria a 2Ghz no consumen el doble que 1Ghz sino cuatro veces más.
  • En cambio se duplicamos el número de pinas/interfaces y mantenemos la velocidad a 1Ghz en cada uno de ellos el consumo no se cuadriplica sino que se mantiene por lo que al final el consumo por duplicar los pines se dobla.
  • ¿Que ocurre si pasamos de una interfaz de 256 bits a una de 1024 bits? Pues que el consumo baja en picado enormemente.

Pero todo esto nos lleva a una pregunta… si memorias como la GDDR5 tiene una interfaz de 32 bits por chip entonces un sistema de 1024 bits necesitaría 32 chips de memoria y sería muy caro, es aquí donde entra la idea de apilar las memoria en TSV y utilizar una interfaz no en serie (1×1024 bits) sino en matriz (32×32) que ocupa mucho menos espacio para una pila de 8 chips de memoria. Esto no significa que los sistemas con HBM puedan utilizar una sola pila de memoria, pueden utilizar varias y cada una de ellas con su interfaz de 1024 bits. En el caso de la 3DS-DDRn la cosa esta más en el ahorro de espacio ya que la interfaz seguirá siendo la misma de siempre.

2GBDDR3

¿Veis el chip que hay entremedio de los chips de memoria del modulo? Pues la idea de la 3DS-DDRn es colocar ese chip debajo y los de memoria encima utilizando una interfaz TSV, en este caso no hace falta un sustrato/interposer y ayudará a ganar espacio en las placas bases de los ordenadores futuros y por tanto diseños industriales más compactos. El caso es que si la 3DS-DDR3 al final se estandariza como memoria RAM para sistemas futuros entonces Microsoft podrá utilizarla en una futura iteración de Xbox One con un diseño industrial mucho más compacto. Al fin y al cabo la memoria DDR3 apilada utilizando TSV es también un estándar de la JEDEC, en cambio Sony tendría problemas al no haber un estándar para GDDR5 apiladas y el hecho que la interfaz del HBM es diferente a la del GDDR5 por lo que por temas de tiempo y coste no me veo a Sony utilizando memorias 3D en un futura iteración de PS4 ya que los cambios que tendrían que hacer son demasiado profundos por lo que le veo más números a Microsoft.

En cuanto a la pregunta de como será el futuro, no lo se, pero una cosa tengo muy clara y es que no vamos a ver un avance gráfico hasta que no avance el mecanismo de iluminación y si al final el futuro acaba siendo más resolución y más fotogramas por segundo (por el tema de la Realidad Virtual) entonces todo se convertirá en el día de la marmota ya que estamos llegando al limite económico que el mercado puede soportar. Dicho de otra manera, no creo que se puedan avanzar los gráficos haciendo crecer mas los costes de producción y con ello los equipos, solo se pueden mejorar de VERDAD a través de potencia bruta de futuros procesadores. Mientras sigamos atrapados en el mecanismo de iluminación de solo 2 rebotes por foco de luz los gráfico avanzarán poco.

Anuncios