Estos son los secretos del set de instrucciones RDNA 3, ¿cómo mejoran a las AMD RX 7000?

No podríamos programar ningún chip sin que este tuviese una ISA asociada que a su vez permitiese compilar dichos programas y crearlos, y esto no solo se limita a las CPU, sino también a las GPU y los chips gráficos. En esta ocasión os traemos el set de instrucciones RDNA 3 del que os hablaremos de sus novedades para que tengáis una idea general de lo que pueden hacer las tarjetas gráficas de última generación de AMD.

Cada nueva generación de tarjetas gráficas trae consigo una serie de novedades que van más allá de su arquitectura, capacidades adicionales que antes no eran posibles y que para su uso necesitan su instrucción relacionada. En el caso de la arquitectura RDNA 3 hemos podido ver mejoras en la tasa de operaciones por ciclo, nuevas instrucciones dedicadas para inteligencia artificial y mejoras en el Ray Tracing.

¿Qué hay de nuevo en el set de instrucciones AMD RDNA 3?

AMD-RDNA-3

El set de instrucciones RDNA 3 es el conjunto de las mismas que permite a los programas Shader de bajo nivel, es decir, más cercanos al código máquina, ejecutarse en las GPU bajo arquitectura homónima. Las cuales son las tarjetas gráficas de la serie RX 7000 y las integradas en procesador de la serie RX 700 correspondiente a las APU Ryzen 7000, disponibles por el momento solamente para ordenadores portátiles.
En este artículo no os hablaremos de la organización interna o arquitectura de las mismas, sino que haremos un repaso por las nuevas capacidades a nivel de hardware que permiten el nuevo set de instrucciones y en especial nos centraremos en las que son novedad, dejando de lado las ya previamente existentes en la anterior generación.

Modo Wave32 versus Wave64

Instrucciones RDNA 3 Wave32 Wave64

El set de instrucciones RDNA 3, al igual que sus antecesores, soporta dos modos de funcionamiento, ¿su diferencia entre ambos? La cantidad de elementos que se organizan en conjunto y como máximo por ola. Siendo el modo natural de RDNA desde la primera generación son las olas de 32 elementos y una de las cosas que más se rumoreaban de cara a la nueva ISA para GPU de AMD mucho antes del lanzamiento de estas era que solo habría modo de 32 olas, descartando al de 64, al final, y por el momento no ha sido así.

  • El shader admite tanto olas de 32 elementos de trabajo ("Wave32") como olas de 64 elementos de trabajo ("Wave64").
    • Ambos tamaños de ola son compatibles para todas las instrucciones (excepto las que son Dual Issue o VLIW2 que solo funcionan con las de 32).
  • Los programas de shader deben compilarse y ejecutarse para un tamaño de oleada específico, independientemente de cuántos elementos de trabajo estén activos en una oleada dada.
    • Por lo que implica que si un juego tiene sus shaders precompilados para Wave64, si queremos aprovecharnos de las ventajas de usar Wave32 deberemos recompilarlo. Este punto es importante de cara a potenciales versiones mejoradas de las consolas de videojuegos.
  • Las olas de Wave32 emiten cada instrucción como máximo una vez.
  • Las olas Wave64 suelen emitir cada instrucción dos veces: una vez para la mitad baja (elementos de trabajo 31-0) y luego nuevamente para la mitad alta (elementos de trabajo 63-32).

Este punto es importante, ya que pese a que a nivel de programación tenemos un solo set de instrucciones RDNA 3, a nivel interno la GPU funciona bajo dos codificaciones diferentes de instrucciones, de ahí el hecho que usar dos compilaciones distintas. Ya sea por parte del driver o con shaders precompilados.

Dual Issue en RDNA 3

AMD-RDNA-3-CU-arquitectura
El concepto de Dual Issue se refiere al hecho de codificar dos instrucciones iguales o distintas en paralelo. Esto se hace posible por el hecho que ciertas combinaciones son posibles teniendo en cuenta la disponibilidad de las unidades de ejecución. No nos olvidemos que no hay una sola ALU, sino varias unidades, cada una de ellas especializada en uno o varias instrucciones, lo cual es normal en cualquier tipo de procesador.

Tenemos dos tipos de combinaciones en el set de instrucciones RDNA 3, la primera es la que dos instrucciones distintas se ejecutan al mismo tiempo como una sola y depende de la disponibilidad de las ALU en cada momento. Es decir, es una forma de aprovechar los recursos cuando se encuentran en desuso. La otra hace referencia a una capacidad que tienen las ALU de poder hacer SIMD sobre registros y afecta a pares gemelos de instrucciones.

Rapid Packed Math, pero de 32 bits

Debido a que es posible combinar dos instrucciones FMADD, 2 operaciones por ciclo cada una. Esto le da la capacidad de duplicar la tasa en TFLOPS en dicho modo respecto a RDNA 2. Sin embargo, las combinaciones de una misma instrucción son posibles gracias a la capacidad de SIMD sobre registro. Es decir, un mismo registro para una ALU de N bits se puede convertir en dos registros para dos ALU N/2 bits trabajando al unísono.

Buena parte de las combinaciones que permiten el Dual Issue en el set de instrucciones RDNA 3 ya se encontraban en el modo Rapid Packed Math que vimos por primera vez en AMD Vega. La diferencia aquí es que se pueden combinar no dos instrucciones de 16 bits, sino dos de 32 bits.

Lo que de retruco podría servir para una futura iteración de RDNA con ALU de 64 bits que reemplace a CDNA como GPU para computación científica y de alto rendimiento. Sin embargo, esto es una posibilidad remota y no guarda relación con el set de instrucciones RDNA 3, sino más bien para un futuro superconjunto.

WMMA, operaciones con matrices y unidades para la IA

Instrucciones WMMA
AMD ha decidido no adaptar las Matrix Core Units de CDNA en RDNA 3, posiblemente por estar preparadas para funcionar solo con olas de 64 elementos. Sin embargo, la falta de unidades de matrices sistólicas se ha paliado adaptando las unidades SIMD para ello. El modo de WMMA añade una serie de instrucciones en RDNA 3 que aceleran los algoritmos de Deep Learning y Machines Learning, pero sin llegar a la velocidad de una unidad especializada.

En especial, estas unidades están pensadas para acelerar el cálculo de la operación de matrices, los arrays sistólicos, pero las GPU con set de instrucciones RDNA 3 carecen de dichas unidades, pero a su vez han integrado una serie de instrucciones que permiten realizar operaciones WMMA, es decir, suma y multiplicación de matrices en las unidades SIMD. ¿Lo que se consigue? Duplicar la velocidad a la hora de ejecutar dichas instrucciones, pero no es un x8 como ocurre al usar cualquier tipo de unidad sistólica.

La forma de acelerar la ejecución de instrucciones WMMA en RDNA 3 es sencilla, las operaciones matriciales suelen ser fila multiplicada por columna muchas veces, por lo que el sistema almacena como información filas y columnas por separado para tratarlas como vectores a ejecutar. Así pues, en una matriz de 3 x 3, tendríamos, por un lado, A1, B1 y C1 como fila, y A1, A2 y A3, y, como columna, como dos vectores diferentes. Cada uno de ellos gestionado por una unidad SIMD dentro de la Compute Unit a la hora de operar.

Ray Tracing

RDNA 3 RayTracing Ray Accelerator Unit
AMD ha mejorado su Ray Accelerator Unit respecto a la paupérrima versión para RDNA 2, ya que ahora por fin dicha unidad puede recorrer la estructura de datos BVH, por lo que ya no dependeremos de un programa Shader. Lo cual era uno de los cuellos de botella previamente existentes, sin embargo, dicha capacidad no se ve reflejada en la documentación de las instrucciones RDNA 3.

Sin embargo, en set de instrucciones RDNA 3 solamente tenemos documentada la instrucción de intersección. Por lo que suponemos que el recorrido en el árbol BVH que guarda la organización de la escena en 3D y que se usa durante la ejecución del algoritmo de Ray Tracing es llevado a cabo por el driver o se invoca desde el mismo.

Esto es curioso por qué nos indica que el viejo modo puede usarse, pero al mismo tiempo que será necesario replantear el código Shader para hacer uso de las nuevas características, pero estás quedan fuera del set de instrucciones RDNA 3, lo que le permite a AMD usar la unidad en futuras arquitecturas, aunque no sean binariamente compatibles.

¿El set de instrucciones AMD RDNA 3 en PS5 Pro?

Sony consola accesorios PS5 Pro

No, no se nos han traspapelado ninguna sección, pero si hacemos caso a la rumorología todo apuntaría a que una eventual PS5 Pro, de existir, se podría basar en versión a medida de RDNA 3.

En todo caso, hemos de tener en cuenta que realmente AMD llega a crear versiones a retazos para consola, especialmente para mantener la compatibilidad hacia atrás. Por lo que más bien tendrá del conjunto de instrucciones RDNA 3 lo que a SONY, y en concreto a Mark Cerny le interese colocar en una potencial iteración mejorada de la arquitectura.

Lo que no nos queda muy claro es si RDNA 3 es un superconjunto del set de instrucciones RDNA 2 o en su defecto es una ISA diferente. En todo caso, a nivel interno han suprimido el modo Wave64, por lo que desde el punto de vista del chip este ha desaparecido.

Esto, que puede parecer banal, podría crear programas Shader que dependan del timing de las instrucciones. En todo caso, una eventual PS5 Pro debería mantener el modo de 64 elementos por ola de instrucciones de GCN para la retrocompatibilidad con el enorme catálogo de PS4 y PS4 Pro disponible por parte de los usuarios de PlayStation.