La potencial compra de ARM por parte de NVIDIA por un lado y el desarrollo de una extensión de las instrucciones RISC-V para la creación de GPU con dicho set de registros e instrucciones hace que nos venga a la cabeza la siguiente pregunta: ¿sería posible la creación una GPU basada en la ISA ARM? y ¿Cuáles serían las limitaciones con las que se encontrarían?
Antes de nada, hay que aclarar que no vamos a hablar de una GPU al completo, sino solo de las unidades shader y dentro de las mismas de aquellas partes encargadas de ejecutar los programas shader, ya sean para computación o para gráficos. Recordemos que estas son una unidad en sí mismas con la capacidad de ejecutar programas como una CPU, pero lo hace de manera totalmente distinta, lo que nos hace preguntar si sería posible hacer uso de una ISA como ARM para crear no solo este tipo de unidades, sino algo más avanzado y que daría una sinergia de ambos conceptos.
En busca del núcleo universal como CPU y GPU
Con el interés de NVIDIA por ARM es normal que nos preguntemos si la empresa de verde tiene en su mapa de ruta la creación de un nuevo tipo de núcleo, el cual pueda operar tanto como una CPU como una GPU. Por lo que no estamos hablando de una APU en la que CPU y GPU se encuentran separadas en unidades diferenciadas, sino en núcleos universales que pudiesen hacer ambas tareas.
Esto que por el momento es ciencia ficción sobre el papel tiene ciertas ventajas, por ejemplo en una GPU no podemos hacer uso de lenguajes de programación convencionales y estas pese a ser muy buenas en el cálculo en paralelo son muy malas en otras cosas en las que las CPU son mucho mejores, como es por ejemplo en la predicción de saltos, la cual es clave de cara a recorrer estructuras de datos para el Ray Tracing.
No obstante se aumentaría la cantidad de transistores de cada unidad shader, en especial en las unidades de control, ya que los planificadores de las GPU son sumamente simples en comparación con sus equivalentes en las CPU. La integración de un sistema de captación y descodificación de instrucciones en una GPU como los que hay en una CPU acabaría por reducir la cantidad de núcleos por área, haciendo que se perdiese potencia bruta.
La única vez que se intentó fue con el Intel Larrabee que se diseñó a finales de la década de los 2000, pero no se tomó como referencia a los Intel Core de la época, sino que Intel usó como base los núcleos del primer Intel Pentium para crear las unidades shader debido a la complejidad de la unidad de control de sus CPU.
La ISA en una GPU realmente no tiene importancia alguna
Tanto en el caso de NVIDIA como en el de AMD las ISA no son estáticas e inmutables como es el caso de las CPU, por ejemplo de una generación a otra nos podemos encontrar que hay instrucciones que han sido eliminadas de la lista, se han añadido de nuevas y un largo etcétera. Lo que seguramente os lleva a la pregunta: ¿cómo lo hacen entonces para ejecutar los programas shader en las diferentes generaciones de GPU de cada compañía?
En el caso concreto de NVIDIA ellos tienen desarrollada una ISA intermedia o virtual llamada PTX, la cual es compatible hacia adelante con todas las arquitecturas gráficas de la compañía. Pensad en PTX como algo similar a la interfaz de lenguaje común de Microsoft .NET o la máquina virtual de Java. Por lo que es el driver de la tarjeta gráfica el que se encarga de traducir el código PTX a la ISA de cada GPU de NVIDIA, sea esta de la generación que sea.
Es por ello que el hecho de utilizar una ISA como ARM en la creación de la unidad shader de una futura GPU de NVIDIA no aportaría nada de nada a la ecuación. Por lo tanto, si NVIDIA termina comprando a ARM, ¿lanzará un nuevo tipo de núcleo y redefinirá el concepto de ISA de CPU y GPU?