Blog Personal.

Conceptos Básicos

Cache Scrubbing

En el Discord me habéis preguntado lo siguiente:

Hola Urian! Me gustaría que nos explicaras sobre el tema de los cache scrubbers de la GPU de PS5. En la presentación «Road to PS5», Cerny los mencionó en dos ocasiones. En la parte de la presentación que hablaba del SSD, unidad I/O y el Coherency Engine. Y en la parte que hablaba de la GPU, comentado que a diferencia de otras tecnologías que aparecerían también en tarjetas gráficas de AMD. Esto es algo especifico de la PS5.

Por si te sirve. Las palabras de Cerny fueron:

  • Hay un Coherency Engine para asistir a los coprocesadores.
  • La Cohrencia esta en un montón de lugares.
  • Probablemente el problema con la coherencia más grande son los datos obsoletos en las caches de la GPU.
  • Vaciar hacía abajo todas las caches de la GPU cuando se lee el SSD es una opción poco atractiva que podría perjudicar seriamente el rendimiento de la GPU.
  • Así que hemos implementado una forma más amable de hacer las cosas, donde el Coherency Engine le informa a la GPU de los rangos de direcciones re-escritos y u corrige (los datos) en docenas de caches de la GPU, provocando los desalojos de datos correspondientes de solo esos rangos de direcciones.

Ah, es sencillo, hay que tener en cuenta que las caches no tienen un direccionamiento de memoria aparte sino que lo que hacen es copiar datos de la RAM en bloque en ellas, normalmente una página de memoria entera en las caches más cercanas al procesador y si es posible una tabla de páginas entera en las caches más alejadas o en su defecto varias páginas dentro de una misma tabla de páginas.

El caso es que cuando modificamos un dato en la cache el sistema se ha de encargar de corregir el contenido correspondiente en la dirección de memoria, pero cuando otro procesador manipula esa dirección de memoria la cache queda desfasada, ya no contiene los datos actualizados por lo que se tiene que realizar un Cache «Flush» que no es otra cosa que invalidar las lineas de cache en todos los niveles asociadas a una dirección de memoria física o un grupo de direcciones de memoria físicas. Esto se hace normalmente con un bit de invalidación por cada linea de cache, el problema es que ese dato dejamos de tenerlo en memoria y es necesario repescar los datos actualizados de nuevo.

En una CPU cuando buscando un dato que supuestamente esta en la cache y no se encuentra se producen varios cache «miss» entonces se activa un mecanismo que automáticamente carga esos datos en las caches para cuando se carguen de nuevo en las caches para la siguiente búsqueda. Pero una GPU con decenas de núcleos necesitaría un mecanismo una orden de magnitud más complejo por lo que no tiene estos mecanismos y si se ha invalidado una linea de cache provocando un cache miss a la hora de buscar los datos entonces no hay un proceso de corrección del contenido de dichas caches.

¿Y que hacen los Cache Scrubbers? Pues lo que hacen es corregir los datos en las líneas de cache cuando hay una actualización de los datos originales en memoria, no anulan esas líneas de cache sino que actualizan su contenido por lo que con ello se evitan los cache misses por no encontrar el dato.

Pero el mecanismo de Cache Scrubbing no esta en el Coherency Engine, sino que lo que hace el Coherency Engine es informar que direcciones de memoria del SSD se han modificado y como. Dicha información es tomada por los mecanismos de «Cache Scrubbing»… ¿Pero es algo nuevo que hayan colocado los de Sony? El Coherency Engine si que es nuevo en las nuevas consolas, el mecanismo para actualizar las caches no y he hablado varias veces de estos. Son las llamadas Address Translation Cache que AMD ya coloco a partir de la familia de SoCs Carrizo.

El ATC es necesario a nivel de RAM para tener total coherencia en el direccionamiento de memoria, pero el Coherency Engine lo que hace es añadir un punto adicional de complejidad el encargarse de la coherencia del SSD. Puede que una linea de memoria del SSD haya sido modificada y de informar de ello se encarga el Coherency Engine, lo que le permite una visión coherente de todo el espacio de direccionamiento de memoria tanto a la CPU como a la GPU.

La gracia del ATC es que en el fondo es el mecanismo que corrige los datos en las caches pero universalizado, no solo para la CPU como he comentado antes sino también para la GPU. Montar un mecanismo así creedme que es de las cosas más complejas que existen con un coste en transistores y por tanto de espacio en el chip enorme, en realidad esto es algo que AMD solo aplica a sus SoC y el ATC no se encuentra en las GPUs dedicadas de PC.

La desgracia del ATC es que no ve más allá de la RAM y es un problema si queremos utilizar un SSD, de ahí la necesidad del Coherency Engine cuyo trabajo es informar que direcciones de memoria han cambiado para que los datos se corrijan, no haga falta una invalidación de las líneas de cache y una captación posterior.

La última parte que tenéis que tener en cuenta es que las Compute Units de las GPUs tienen un planificador que reciben un total de n olas, cada ola tiene m instrucciones y si una instrucción no tiene el dato a tiempo lo que hace el planificador es retrasar esa instrucción y la pone en la cola hasta que el datos se encuentra pero la ola no se resuelve hasta que todas las instrucciones de la misma han sido resueltas y el resto de olas en el planificador…

El hecho de un dato no se encuentre cercano a las Compute Units mata en rendimiento a las GPUs por completo. Los Cache Miss son mortales para el rendimiento de una GPU y enlentecen enormemente el rendimiento de la misma.

PD: Aunque hable de Playstation 5, Xbox Series X y Lockhart tienen un mecanismo idéntico en su SoC.

Esto es todo, tenéis los comentarios de esta misma entrada para comentar y no olvideis que tenemos Discord.

5 2 votes
Article Rating
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Tokra_Kree

Muchas gracias Urian!

El tener que actualizar las caches de la GPU por un cambio en los datos en el SSD.

¿Quiere decir que los datos se podrían cargar directamente desde el SSD a la GPU?
¿O tienen copiarse obligatoriamente antes por RAM?

Tokra_Kree

¿Y a nivel de rendimiento esto supone alguna mejora con respecto al sistema normal utilizado en PC?

Tokra_Kree

Y sobre esto de los cache scrubbers, no se si XSX tendrá algo parecido, per Cerny habló como si fuera algo especifico de PS5: «That feauture set is malleable which is to say that we have our own needs for PS5 and that can factor into what the AMD roadmap becomes. So collaboration is born. If we bring concepts to AMD that are felt to be widely useful then they can be adpoted into RDNA2 and used broadly include in PC GPUs. if the ideas are sufficiently specific to what we’re trying to accomplish like the GPU cache scrubbers I… Read more »

4
0
Would love your thoughts, please comment.x
()
x