Noyau d'un GPU: comment cela fonctionne sur un graphique

L'une des confusions créées par le marketing des fabricants de cartes graphiques est quand il s'agit de parler du nombre de cœurs qu'un GPU a, nous prévoyons qu'ils mentent pour exagérer les chiffres. Mais qu'entend-on par cœur dans un GPU, peut-on les comparer avec ceux d'un Processeur et quelles différences y a-t-il?

Lorsque vous achetez le dernier modèle de carte graphique, la première chose que vous voyez est qu'ils vous parlent d'énormes quantités de cœurs ou de processeurs, mais que se passe-t-il si nous vous disons que la nomenclature est erronée?

Noyau d'un GPU: comment ça marche

Le piège que font les fabricants est d'appeler des ALU simples ou des unités d'exécution sous le nom de cœurs, par exemple NVIDIA appelle ses ALU cœurs CUDA qui fonctionnent en virgule flottante 32 bits, mais si nous sommes stricts, nous ne pouvons plus les appeler cœurs ou processeurs. Ils ne répondent pas aux exigences de base pour être considérés de cette manière.

Alors, qu'est-ce qu'un cœur ou un processeur dans un GPU?

Ciclo Instrucción Unidad Contrôle

Un cœur ou processeur est tout circuit intégré ou une partie de celui-ci qui, ensemble, peut exécuter un cycle d'instructions complet, c'est la capture d'instructions à partir d'une mémoire, le décodage et l'exécution de celles-ci.

Une ALU n'est qu'une unité d'exécution, elle a donc besoin d'une unité de contrôle pour être un noyau complet. Et que considérons-nous comme un noyau complet? Eh bien, ce que NVIDIA appelle SM, Intel appelle Sub-Slice et AMD Unité de calcul.

La raison en est que c'est dans ces unités que se déroule tout le cycle d'instructions, et non dans les ALU ou unités d'exécution, qui ne sont en charge que d'une partie du cycle d'instructions.

Les GPU ne «exécutent» pas de programmes

GPU NVIDIA

Gardez à l'esprit que les GPU n'exécutent pas les programmes tels que nous les connaissons, il s'agit d'une séquence d'instructions. L'exception concerne les programmes de shader qui s'exécutent sur ce qui sont en réalité les cœurs GPU.

Les programmes de shader manipulent des ensembles de données ou des primitives graphiques dans les différentes étapes. Mais au niveau des fonctionnalités matérielles, celles-ci sont présentées sous forme de noyaux.

Les noyaux, à ne pas confondre avec ceux des systèmes d'exploitation, sont des données autonomes + jeux d'instructions, également appelés threads dans le contexte d'un GPU.

En quoi un cœur GPU est-il différent d'un cœur CPU?

GPU du processeur

La principale différence est que Les processeurs sont principalement conçus pour le parallélisme au niveau des instructions , tandis que Les GPU sont spécialisés pour le parallélisme au niveau des threads.

Le parallélisme au niveau des instructions est destiné à réduire le temps d'instruction d'un programme en exécutant plusieurs instructions de celui-ci simultanément. Les noyaux basés sur le parallélisme au niveau des threads prennent plusieurs programmes en même temps et les exécutent en parallèle ,

Les processeurs contemporains combinent ILP et TLP dans leurs architectures, tandis que les GPU restent purement TLP sans ILP afin de simplifier l'unité de contrôle et de pouvoir placer autant de cœurs que possible.

Exécution sur un GPU ou exécution sur un CPU

Chip par dentro

La plupart du temps, lorsqu'un thread atteint les ALU principales du GPU, il contient directement l'instruction et les données, mais il y a des moments où les données doivent être recherchées dans les caches et en mémoire, pour éviter des retards dans l'exécution du planificateur du noyau du GPU. ce qu'il fait, c'est ce qu'on appelle un Round-Robin et passe ce thread pour qu'il s'exécute ensuite.

Dans un CPU, cela ne peut pas être fait, la raison en est que les threads sont des ensembles d'instructions très complexes et avec une forte dépendance entre eux, tandis que dans un GPU, cela ne pose aucun problème, car les threads d'exécution sont extrêmement petits car ils sont autonomes dans des «noyaux» plusieurs fois d'une durée d'instruction unique.

En réalité, ce que font les GPU est de rassembler un ensemble de noyaux dans ce qu'on appelle une vague, en assignant chaque vague à une ALU du GPU, ceux-ci sont exécutés en cascade et dans l'ordre. Chaque noyau a une limite de threads ou de noyaux, ce qui le tiendra occupé pendant un certain temps jusqu'à ce qu'il ait besoin d'une nouvelle liste, évitant ainsi que le grand nombre de cœurs fasse constamment des requêtes en mémoire.