Shader Cache : définition et impact sur les performances de jeu

Plusieurs fois, vous aurez vu parmi les fichiers temporaires à supprimer de Windows ou pour gagner de l'espace le soi-disant cache de shader DirectX ou Shader Cache. Si vous vous êtes déjà demandé ce que c'est et pourquoi les performances des jeux chutent lorsque vous les supprimez, il vous suffit de lire cet article.

Les GPU sont des processeurs tout comme les CPU, mais ils sont différents en ce sens que leur parallélisme est orienté thread. C'est pourquoi on dit qu'un processeur graphique est de type TLP alors qu'un processeur central est de type ILP. A cela il faut ajouter que tandis que les threads d'exécution dans le graphe ne sont pas orientés vers les processus mais vers les primitives graphiques ou les données.

Cache de shader

En d'autres termes, chaque triangle, pixel ou fragment a son propre programme de shader pour chaque étape du pipeline 3D. Qui est écrit dans un langage de haut niveau, par exemple HLSL si on parle de DirectX ou GLSL si on parle d'OpenGL ou Vulkan. Bien qu'il y en ait aussi qui sont exclusifs à certains systèmes, comme le PSGL de SONY PlayStation consoles. Eh bien, ces programmes doivent être compilés et, par conséquent, passés du code source au binaire.

Qu'est-ce que Shader Cache ?

Cache de shaders CoD

Le problème vient lorsque, contrairement à ce qui se passe avec les CPU où ils sont tous x86, dans le cas des GPU, l'ensemble des registres et des instructions n'est pas commun, non pas entre marques, mais aussi entre architectures d'une même marque. Cela signifie que le code des shaders doit être compilé pendant que nous jouons, ce qui provoque des problèmes de bégaiement et de performances. Par conséquent, le binaire généré est stocké dans un fichier qui, lorsque le jeu sera rechargé, sera rechargé sur la mémoire vidéo de la carte graphique, que nous connaissons sous le nom de shader cache ou shader cache.

Donc, si nous mettons à jour notre carte graphique, celles-ci devront être générées à nouveau pour chacun de nos jeux, si nous la supprimons du disque dur ou du SSD aussi bien. D'ailleurs, c'est une des raisons pour lesquelles il n'est pas bon de juger une carte graphique lorsque l'on joue à un jeu pour la première fois. Surtout si nous voulons mesurer leurs performances régulières.

La VRAM prend également de la place

Cache Shader Panneau de configuration NVIDIA

La GPU de votre carte graphique n'accède qu'au système RAM via l'interface PCI Express et en utilisant son unité DMA, le cache de shader sera chargé avec les informations visuelles nécessaires pour composer la scène de l'unité de stockage à la RAM et de la RAM à la mémoire vidéo. Bien qu'avec DirectStorage, on s'attend à ce que le matériel graphique puisse accéder directement au SSD, ce qui réduit la latence d'accès et le problème de devoir dépendre du Processeur.

De nombreux jeux sont bien développés et le cache de shader prend peu de place, mais d'autres pas tellement et il finit par occuper une grande quantité de mémoire graphique. Ce qui signifie que si le pilote a une limite associée ou le jeu lui-même, on constate soudain que les nouvelles compilations remplacent les anciennes et les problèmes de performances initiaux reviennent.

Dans tous les cas, il faut garder à l'esprit que si le jeu auquel nous jouons nécessite de l'espace dans la RAM vidéo, il privilégiera le rendu de l'image en cours. Il cherchera donc à récupérer temporairement le cache de shader stocké dans la mémoire système. Rappelons également que les dumps vers l'unité de stockage se font en continu, puisqu'une fois le shader d'une primitive graphique généré, il ne sera plus nécessaire de le refaire.

Le lancer de rayons et le cache de shader

En ray tracing la question la plus souvent posée du GPU est de type booléen. Ce rayon coupe-t-il cette primitive de graphe ? La réponse n'est pas toujours oui et, par conséquent, il y a une condition qui se produira ou non selon les circonstances. Par conséquent, lors de la première exécution de ce shader, il sera nécessaire de compiler et de générer le shader de cache pour tous les résultats possibles.

Cache de shader sur les consoles

Consoles XSX, XSS, PS5

Une console de jeu vidéo aura toujours les mêmes composants, du premier modèle sorti d'usine au dernier. Bien que plusieurs années se soient écoulées, ses spécifications ne changeront pas. Par exemple, aujourd'hui, vous pouvez trouver des modèles plus anciens que la plus ancienne carte graphique. Une façon de tirer parti de son immuabilité matérielle consiste à utiliser les soi-disant shaders déjà compilés dans l'installation du jeu. Cela rend inutile la génération d'un cache de shader pour chaque jeu, mais c'est aussi une épée à double tranchant.

Par exemple, si vous souhaitez créer une console plus puissante et rétrocompatible, vous avez les options suivantes :

  • Exportez l'ISA vers le GPU du nouveau système, en le faisant fonctionner comme un sur-ensemble de l'ancien. C'est ce qu'AMD a fait dans la PlayStation 5 et la Xbox Series avec l'architecture RDNA 2 pour exécuter en douceur les jeux de la génération précédente conçus pour GCN.
  • Intégrez tous les circuits graphiques du système précédent dans le nouveau système. C'est quelque chose que Nintendo a fait sur ses consoles jusqu'à 3DS et SONY avec sa deuxième PlayStation et certains modèles de la troisième.

Au niveau de l'émulateur, ce qui est fait dans de nombreux cas est de prendre les shaders déjà compilés et de faire le processus inverse, en générant un code intermédiaire qui peut générer un Shader Cache généré pour fonctionner avec votre carte graphique. Cependant, ce n'est pas une science exacte et vous pouvez rencontrer certains problèmes graphiques lors de l'exécution des jeux.

Optimisations pour les fabricants de GPU

Organisation Lovelace Hopper

Les deux NVIDIA et AMD incluent généralement des optimisations dans les derniers pilotes pour les plusbord Jeux. Ceux-ci incluent non seulement les paramètres optimaux pour des performances supérieures, mais également le cache de shader déjà optimisé pour chaque jeu et de meilleures spécifications que le jeu de base. Et c'est que les deux fabricants sont intéressés par leur carte graphique la plus avancée ayant les performances maximales possibles dans le jeu le plus puissant de tout ce qui existe aujourd'hui.

Ceux-ci laissent donc de l'argent aux différents studios de développement, qui optimisent les programmes de shader pour certaines architectures graphiques et génèrent un cache de shader qui fonctionne mieux que celui fourni avec le jeu de base. Ceci est fait pour encourager l'achat de nouveaux modèles et créer une obsolescence du programme, ce qui est nécessaire pour qu'il y ait un flux de consommation qui soutienne l'industrie. C'est pourquoi de nombreux jeux avec pratiquement aucun changement visuel par rapport à leurs versions précédentes finissent par avoir de moins bonnes performances.