Analyse des latences mémoires sur les GPU

Aujourd’hui, nous vous proposons la traduction d’un article l’utilisation du cache et donc des latences mémoire des cartes graphiques. Pour ceux qui préfèrent lire l’article dans sa langue officielle, vous pouvez le retrouver à cette adresse.

Nous avons pris l’habitude de mesurer les latences de cache et de mémoire des CPU. Chip and Cheese s’est alors posé la question suivante : pourquoi ne pas faire de même pour les GPU ? Comme les CPU, les GPU ont évolué pour utiliser plusieurs niveaux de cache afin de combler l’écart croissant entre les performances de calcul et de mémoire. Comme les CPU, nous pouvons utiliser des benchmarks (en OpenCL) pour mesurer la latence du cache et de la mémoire.

Ampere contre RDNA2

Le cache du RDNA 2 est rapide et en plus, il en dispose de beaucoup. Par rapport à Ampere, la latence est faible à tous les niveaux. Infinity Cache n’ajoute qu’environ 20 ns pour un accès au niveau L2 et sa latence est inférieure à celle du cache L2 d’Ampere. Étonnamment, la latence de la VRAM de RDNA 2 est à peu près la même que celle d’Ampere. Pourtant, RDNA 2 vérifie sur le deux niveaux de cache sur son parcours vers la mémoire.

Nvidia s’en tient à un sous-système de mémoire plus conventionnel avec seulement deux niveaux de cache et une latence L2 élevée. Passer du niveau L1 d’Ampere au L2 prend plus de 100 ns. Le cache L2 de RDNA est à ~66 ns de la L0, même avec un cache L1 entre les deux. Contourner la puce massive du GA102 semble prendre beaucoup de cycles.

Cela pourrait expliquer les excellentes performances d’AMD à des résolutions inférieures. Les caches L2 et L3 à faible latence du RDNA 2 peuvent lui donner un avantage avec les petites charges de travail. Dans ce cas, l’occupation est trop faible pour occulter la latence. En comparaison, les puces Ampère de Nvidia ont besoin de plus de tâches pour briller.

CPUs vs GPUs : C’est un massacre

Les CPU sont conçus pour exécuter des charges de travail en série aussi rapidement que possible. Les GPU sont conçus pour exécuter des charges massives en parallèles. Comme le test est écrit en OpenCL, nous pouvons l’exécuter sans modification sur un CPU.

Les latences du cache et de la DRAM de Haswell sont si faibles que nous avons dû placer la latence sur une échelle logarithmique. Sinon, cela aurait ressemblé à une ligne plate bien en dessous des chiffres de RDNA 2. Le i7-4770 avec DDR3-1600 CL9 peut faire un aller-retour à la mémoire en 63 ns. Tandis qu’une 6900 XT avec GDDR6 met 226 ns pour faire la même chose.

D’un autre point de vue, la latence de la GDDR6 n’est pas si mauvaise. Un CPU ou un GPU doit vérifier le cache (et constater une erreur) avant d’aller en mémoire. Nous pouvons donc obtenir une vue plus « brute » de la latence de la mémoire en regardant simplement combien de temps il faut pour aller en mémoire par rapport à un accès au dernier niveau de cache. Le delta entre un accès au cache de dernier niveau et une erreur est de 53,42 ns sur Haswell contre 123,2 ns sur RDNA2.

À titre d’expérience intéressante, un Haswell hypothétique avec un contrôleur mémoire en GDDR6 placé aussi près de L3 que possible pourrait obtenir environ 133 ns. C’est élevé pour un CPU client, mais pas tellement plus que la latence de la mémoire du serveur.

Notez que cette section et les suivantes ne sont pas comparables à la précédente. En effet, elles utilisent une version plus récente du déroulement de la boucle. Nous n’avons pas été en mesure d’obtenir une deuxième exécution sur Ampere. Cependant, les GPU Nvidia plus anciens comme Pascal n’ont montré aucune amélioration à partir de la dixième fois. Il y a donc de fortes chances que les résultats d’Ampere ne changent pas.

Comparaison des générations de GPU Nvidia

Maxwell et Pascal sont largement similaires, la GTX 980 Ti souffre probablement d’une plus grande puce et de fréquences plus faibles. Les données mettent simplement plus de temps à circuler dans la puce. Nvidia ne laisse pas OpenCL utiliser le cache de texture L1 sur les deux architectures. Donc malheureusement la première chose que nous voyons, c’est la latence du cache L2.

Turing commence à ressembler davantage à Ampère. Il y a une latence L1 relativement faible, puis une L2, et enfin la mémoire. La latence L2 ressemble à peu près à celle de Pascal. La latence de la mémoire brute semble similaire jusqu’à 32 Mo. Elle est plus élevée ensuite, mais je ne peux exclure un problème parasite.

Comparaison des générations de GPU AMD

Je n’ai aucune explication pour la latence inférieure de Terascale en dessous de 32 Ko. AMD dit que Terascale a un cache de données L1 de 8 Ko, et mes résultats ne correspondent pas. Le test pourrait toucher une sorte de cache de réutilisation des sommets (puisque les charges de mémoire se résument à des clauses de récupération des sommets).

GCN et RDNA 2 sont conformes aux attentes. Et il est assez intéressant de voir la latence d’AMD à tous les niveaux diminuer au fil du temps.

Retrouvez l’actualité hardware ici

Gregory

Toujours intéressé par l’évolution informatique, j’ai voulu être plus actif en intégrant Pause Hardware. Depuis je traite les nouvelles et les tests au quotidien avec l’équipe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page