La RX 6700 con SAM gana muchos FPS en The Last of US, ¿por qué?

Si tienes a The Last of Us en una RX 6700 te encontrarás con un efecto curioso si activas el Shared Access Memory. De repente, la tasa de frames por segundo subirá una media de un 35 %. Sin embargo, lo extraño del suceso es que se trata de algo que no ocurre en el resto de las RX 6000, pero todo ello tiene una explicación y si queréis saberla solo tenéis que continuar leyendo.

Uno de los mitos más repetidos es que las consolas actuales por el hecho de llevar componentes de PC son literalmente eso, sin embargo, estas tienen una serie de diferencias que si no se tienen en cuenta a la hora de trasladar los juegos de una plataforma a otra pueden tener consecuencias desastrosas o efectos más bien inesperados. El que os vamos a hablar hoy no es uno que haya sido buscado por el desarrollador, sino efecto colateral de una serie de coincidencias.

El extraño comportamiento de The Last of Us con la RX 6700

RX 6700 The Last of US SAM rendimiento

El streamer Ancient GamePlays ha hecho notar un extraño comportamiento que tiene el juego The Last of Us con la AMD RX 6700 si se tiene el AMD SAM, Smart Access Memory. Y es que tal y como se puede ver en el gráfico que acompaña a estas líneas, es la única que sufre un aumento cercano al 35%. ¿Lo más extraño? No se da en otra tarjeta gráfica de AMD.

¿La explicación general que se está dando por la red? Pues por desconocimiento se está diciendo que la RX 6700 tiene la misma GPU que el chip Oberon de la PS5, sin embargo, no es del todo así, por el hecho que:

  • La APU de PS5, la cual también contiene una CPU con 8 núcleos con arquitectura Zen 2, tiene un bus de 256 bits, compartido en acceso entre CPU y GPU. La RX 6700 tiene como chip principal una GPU Navi 22 con un bus de 160 bits.
  • La tarjeta gráfica para PC dispone de Infinity Cache, la cual es totalmente inédita en el chip de la consola de Sony.
  • Debido a que el bus es de 160 bits en la RX 6700 y las particiones de la caché L2 están asociadas a las interfaces de memoria, la cantidad de caché L2 en el chip Navi 22 es menor. La ventaja que tiene respecto a su contrapartida en la PlayStation de nueva generación es que el nivel adicional de caché sirve puede absorber cada "Cache Miss" al buscar datos.

Por lo que no estamos exactamente ante la misma GPU si somos literalmente estrictos, pero sí que tienen la misma cantidad de Compute Units y configuradas de la misma manera. Y es ahí donde está el quid de la cuestión.

La clave: ocupación en la GPU

Radeon GPU Profiles Ocupancia GPU

Uno de los problemas de cara a aprovechar el mayor rendimiento de una GPU en los juegos es la ocupación de sus unidades de ejecución. Esto se traduce en buscar en cada instante que la mayor cantidad de unidades se encuentre ocupada en todo momento. Y, de paso, hemos de aclarar que rendimiento no va relativo a la potencia, solemos usarlo mal en general, pero si nos atenemos a la definición de las palabras más bien hace referencia a la porción de las capacidades totales que se aprovechan en cada momento.

En PC, donde hay muchos modelos distintos de tarjetas gráficas, no se optimiza el trabajo de la GPU de manera eficiente, dado que hay muchas configuraciones distintas. En cambio, en consolas esto sí que se puede hacer por el hecho que todas las configuraciones son fijas. No olvidemos que todas las PS5 tienen el mismo chip. Por lo que el extraño rendimiento de The Last of Us en la RX 6700 es por el hecho que a la hora de gestionar el trabajo que ha de ejecutar la tarjeta gráfica, lo que hace es gestionarlo como si estuviese en una PS5, llegando a un porcentual de rendimiento más cercano al ideal.

En otras tarjetas, en cambio, si tienen más Compute Units estas acaban sin usarse, por el hecho de que el código gráfico del juego no las usa. Y sin menos también se pierde rendimiento. Es decir, es esa configuración simétrica de 36 Compute Units lo que en parte le da el mayor rendimiento. Sin embargo, esa es solo la mitad de la historia.

Un repaso a lo que es el AMD Smart Access Memory

AMD SAM Shared Access Memory

Lo que viene a continuación es sumamente interesante, el AMD SAM no es más que una función del bus PCI Express llamada Resizable BAR, pero hemos de entender que todos los dispositivos conectados a dicha interfaz pueden acceder a la RAM del sistema. En el caso de una tarjeta gráfica esto lo pueden hacer usando unidades DMA conectadas al bus. Cuando una GPU opera de forma normal, está lo que hará si será acceder a la RAM y copiar datos a la VRAM. Para ello usará dichas unidades y el bus PCI Express para transmitir la información.

En el caso del AMD Smart Access Memory es al revés, en este caso es la CPU la que tiene un acceso directo a la memoria de la GPU. Es decir, si quisiera podría usarla como memoria RAM y es este el motivo por el cual últimamente estamos viendo a gente que instala Windows en una tarjeta gráfica y le funciona. Si embargo, para que cualquier procesador se entienda sin problemas con una memoria externa, esta ha de estar en su mismo direccionamiento de memoria y que sea totalmente coherente.

Pues bien, la otra función del AMD SAM/Resizable BAR es que le da acceso a todo el espacio de memoria de la CPU y no solo a 256 MB de golpe, lo que nos permite copiar grandes cantidades de memoria de un solo envío, En consolas la memoria está físicamente unificada, no tenemos un puerto PCI Express, sino un enorme pozo común de memoria GDDR6. Sin embargo, esto no explica el comportamiento de The Last of Us con la RX 6700, pero era necesario explicarlo con tal de colocar las piezas.

Por esto The Last of Us en RX 6700 con SAM rinde mucho mejor

The Last of Us PS5 PC

Toda CPU tiene un procesador de comandos, el cual se encarga de leer la lista de comandos gráficos, o también conocida como lista de pantalla, para generar el siguiente frame. Su trabajo no es ejecutar la lista, sino distribuir el trabajo de la lista entre las diferentes unidades disponibles.

Y es aquí donde la explicación se simplifica al máximo. Ya que cuando ese procesador de comandos ha realizado el trabajo lo que hace es copiar dicha información a la RAM de vídeo, la cual se copiará a continuación en la caché de último nivel de la GPU de vuelta para que todas y cada una de las unidades de esta sepan lo que tienen que hacer en cada momento. Dichas órdenes se copian en una dirección de memoria concreta que depende de cada modelo de GPU en PC, pero desde el momento en que la RX 6700 y PS5 son RDNA 2 podemos asumir que tienen un direccionamiento de la memoria gráfica idéntico.

Es decir, y ya para concluir, The Last of US en la RX 6700 está haciendo que sea la CPU la encargada de gestionar como ha de trabajar la GPU en cada frame, algo que solo puede hacer si tiene el SAM abierto y por tanto acceso desde el mismo procesador a la memoria de la tarjeta gráfica. Por lo que la gente de Iron Galaxy al portar el juego no ha cambiado mucho el código respecto a la versión original de PS5 y ha dejado algunas cosas, que provocan efectos curiosos como este.