En la presentación «Road to PS5», Cerny menciono los depuradores de caché 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.

Las palabras de Cerny fueron:

Hay un Coherency Engine para asistir a los coprocesadores.

La Coherencia esta en un montón de lugares.

Probablemente el problema con la coherencia más grande son los datos obsoletos en las cachés de la GPU.

Vaciar hacía abajo todas las cachés 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 cachés de la GPU, provocando los desalojos de datos correspondientes de solo esos rangos de direcciones.

Hay que tener en cuenta que las cachés 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 cachés más cercanas al procesador y si es posible una tabla de páginas entera en las cachés más alejadas o en su defecto varias páginas dentro de una misma tabla de páginas.

cuando modificamos un dato en la caché 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 caché queda desfasada, ya no contiene los datos actualizados por lo que se tiene que realizar un vaciado de la caché que no es otra cosa que invalidar las líneas de caché 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 caché y no se encuentra se producen varios caché «miss» entonces se activa un mecanismo que automáticamente carga esos datos en las cachés para cuando se carguen de nuevo en las cachés 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 caché provocando un caché miss a la hora de buscar los datos entonces no hay un proceso de corrección del contenido de dichas cachés.

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

El mecanismo de depuración de la caché no esta en el Coherency Engine, sino que lo que hace este último es informar al resto que direcciones de memoria del SSD se han modificado y como. Dicha información es tomada por los mecanismos de depuración de la caché para hacer su trabajo. 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 cachés tanto de CPU cómo de GPU 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 para PC.

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.

¿Qué entendemos por coherencia? Pues que la visión de la RAM por parte de varios elementos en el sistema sea universal, es decir, que todas puedan utilizar las mismas direcciones de memoria y sepan quién y cómo se han modificado. No tiene que ver con tener un pozo de RAM en común, porque podemos tener un sistema de RAM unificado y direccionamientos separados y no coherentes entre si.

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 para el SSD 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.

Claro esta, que no podemos olvidarnos que la Address Translation Caché se encuentra en todos los SoC de AMD basados en arquitectura Zen, por lo que es muy posible que hayan terminado también en el interior de las unidades de Xbox Series X y Xbox Series S.

Otra cosa son los depuradores de caché, ya que la parte custom para ambas consolas parece ser la encargada de la gestión de datos con el SSD, aunque no tenemos muchos datos de que planteamiento ha decidido seguir Microsoft y es posible que las Xbox Series X tengan también los llamados depuradores de la caché.

En todo caso parece ser que las Xbox Series hacen uso de dos direccionamientos de memoria distintos.