Nous utilisons des cookies pour améliorer votre expérience.

MacBidouille

Le Dynamic Caching de la famille M3

Apple a annoncé dans son évènement du 30 octobre que la famille M3 intégrait une nouveauté du coté de la GPU, le Dynamic Caching, le décrivant ainsi:

"Dynamic Caching, unlike traditional GPUs, allocates the use of local memory in hardware in real time. With Dynamic Caching, only the exact amount of memory needed is used for each task. This is an industry first, transparent to developers, and the cornerstone of the new GPU architecture. It dramatically increases the average utilization of the GPU, which significantly increases performance for the most demanding pro apps and games." - Apple PR

Certains ont compris que l'allocation mémoire était dynamique pour économiser de la RAM, et c'est en fait tout sauf cela. Ça n'économise la RAM en rien.

On était beaucoup y-compris Anandtech à se demander ce que ça voulait bien dire jusqu'à ceci...

La mémoire locale d'une GPU

Une GPU accède à plusieurs types et classes de mémoire, effectivement la mémoire globale qui dans le cas des familles M est partagée avec la CPU. La mémoire globale n'est pas concernée directement par le Dynamic Caching.

Le type de mémoire dont parlait Apple est la "local memory" ou mémoire locale, qui n'est pas de la mémoire traditionnelle mais crée en réservant et en bloquant de l'espace dans le système de cache des groupes d'exécution de la GPU.
Ça peut aussi inclure le concept de mémoire privée. C'est probable mais pas certain.

Si on réserve trop, inutilement, cela va diminuer les performances d'accès aux autres types de mémoire dont la mémoire globale, ça peut aussi amener à saturer les échanges avec les caches de plus haut niveau.

Qu'est-ce qu'un Shader?

Un Shader est un petit bout de code travaillant sur des informations d'une image (des pixels), ils sont similaires aux Threads et aux ThreadGroup en Metal, chacun faisant une action simple et définie, et on peut en avoir de milliers ou des dizaines de milliers s'exécutant en parallèle pour traiter toute une image.

Ensuite quand on parle de Shaders, il faut savoir qu'ils s'exécutent par Block, en groupe, et les Threads en ThreadGroups, en meute si on peut dire!

Certains Blocks ou ThreadGroups ne s'exécutent d'ailleurs pas du tout, et tout laisse à penser que c'est à ce niveau que l'optimisation est faite.

Le Dynamic Caching dans tout cela

C'est dans ce cadre-là que le Dynamic Caching intervient: la mémoire locale est virtuellement attribuée initialement aux Blocks ou Threadgroups avant leur exécution, et seuls ceux effectivement exécutés se verront attribuer une adresse mémoire physique via la MMU et donc de l'espace réservé dans le cache interne aux groupes d'exécution de la GPU.

Cet espace mémoire réservable est limité, et dans certains cas avec trop d'allocation, cela peut retarder leur exécution par manque de ressources disponibles, ou rendre celle-ci extrêmement lente à cause des échanges alors nécessaires avec les caches de plus haut-niveau.

Le Dynamic Caching permet d'économiser de l'espace dans le cache interne de la GPU rendant celui-ci plus efficace, et on peut effectivement parler d'Allocation Dynamique de Cache.

Cela permet, comme Apple l'a présenté, de faire tourner simultanément plus de groupes (ou Block) de Shaders, et donc d'augmenter les performances dans certains types de rendus.

En résumé

Le Dynamic Caching fait en sorte de ne pas bloquer de l'espace dans les caches lorsque trop de shaders sont lancés d'un coup et que beaucoup ne s'exécutent en fait pas, optimisant ainsi les performances pour ceux qui s'exécutent ainsi que pour les échanges mémoire.

C'est effectivement transparent pour les développeurs et pour le code, en optimisant les Shaders ou codes existants, et aussi une avancée architecturale pour les GPU.

En revanche cette technologie ne fait pas économiser de la RAM partagée avec la CPU.

Sondage

Comptez-vous acheter un Vision Pro ?