Processeurs de commande sur les GPU et comment ils affectent les performances

by Jack
GPU NVIDIA

Un GPU est en fait un type de processeur très complexe, un système hétérogène composé de plusieurs types d’unités différents qui doivent être coordonnés pour donner un résultat cohérent. Dans cet article, nous allons décrire les processeurs de commande, la partie du GPU en charge de cette tâche.

Dans chaque GPU, il y a toujours une partie centrale qui, quelle que soit l’architecture et la marque dont nous parlons, est commune à tous, ce sont les processeurs de commande, l’unité chargée de gérer automatiquement le fonctionnement des dizaines d’unités différentes qui existent sur un GPU.

Qu’est-ce qu’un processeur de commandes?

GPU NVIDIA

Le processeur de commande d’un GPU est un microcontrôleur chargé de lire la liste d’écrans générée par le CPU, pour ce faire, il fait servir l’unité DMA dans le GPU lui-même pour accéder non pas à la VRAM mais à la RAM principale du système où elle est stockée. liste de commandes. Après avoir trouvé la liste des écrans dans la RAM, il la copie dans la mémoire interne du microcontrôleur.

La liste des commandes comprend toutes les instructions que les différentes unités d’un GPU doivent exécuter pour rendre une image, soit en 2D ou en 3D, mais depuis l’arrivée de DirectX 11 sur le PC, les soi-disant Compute Shaders sont arrivés, ceux-ci sont des programmes de shader qui ne sont pas associés au pipeline graphique et qui permettent d’utiliser le GPU pour résoudre des algorithmes dans lesquels le CPU est moins efficace.

Aujourd’hui, un GPU n’est pas seulement utilisé pour rendre des graphismes impressionnants pour les jeux vidéo, il a de nombreuses autres utilisations et est utilisé sur plusieurs marchés différents, mais l’évolution des cartes graphiques vers ces marchés est allée en parallèle avec l’évolution du processeur de commande. et ses possibilités.

Que signifie le calcul asynchrone?

Calcul ASYNC

Tout d’abord, il faut préciser que les Compute Shaders sont également utilisés dans le cas du pipeline graphique, notamment en post-traitement et pré-traitement de l’image. Par exemple, ils sont utilisés pour calculer l’éclairage dans le rendu retardé. Dans ces cas, comme l’exécution des Compute Shaders dépend de l’exécution du reste du pipeline graphique, on dit qu’il est synchronisé, mais il y a des tâches qui bénéficient de l’utilisation du GPU et qui ne font pas partie du rendu de la scène, ils fonctionnent donc de manière asynchrone.

Processeurs de commande ASYNC Compute

Pour mieux le visualiser, il suffit de voir deux situations différentes:

  • Dans le premier, nous faisons du pain mais nous constatons que nous manquons de farine et donc nous demandons à quelqu’un de ne pas aller le chercher, cela signifie que nous ne pouvons rien faire pendant que nous attendons que la farine nous soit apportée.
  • La deuxième situation vient de la première, car nous ne pouvons pas faire de pain, nous décidons donc de faire la vaisselle. Quelque chose que nous pouvons faire à tout moment et qui n’a rien à voir avec cela.

Les concepteurs des différents GPU se sont rendu compte que dans tous les GPU, il y avait des bulles dans l’exécution où certaines parties du GPU de ceux-ci ne faisaient rien en peu de temps. C’est pourquoi, il y a quelques années, ils ont décidé de mettre en œuvre l’informatique asynchrone et de collaborer au développement d’API qui les utilisent, comme DirectX 12 et Vulkan.

Que sont les listes de commandes?

Types de commandes de processeurs

Aujourd’hui, le CPU lui-même est en charge de faire les différentes listes de commandes, soit à travers un seul cœur, soit plusieurs cœurs pour les créer en parallèle. Dans les jeux vidéo, un noyau est généralement affecté à la création de la liste graphique, qui est beaucoup plus complexe que les autres et provient généralement d’un seul anneau de mémoire. Les listes de commandes pour le calcul sont beaucoup plus simples, elles cherchent à ce que les unités de shader résolvent un problème spécifique et fournissent la solution.

Dans le cas des listes de commandes pour le calcul, celles-ci sont généralement constituées de plusieurs listes différentes, qui peuvent être résolues simultanément les unes avec les autres et par rapport à la liste des écrans. La raison en est qu’ils sont asynchrones et ne dépendent donc pas les uns des autres pour fonctionner, cela les rend totalement indépendants et permet de profiter de parties du GPU qui seraient autrement gaspillées en raison de l’inactivité.

L’autre type de commandes sont celles liées à l’accès à la RAM ou à la VRAM du système, ces commandes sont exécutées à la fois en informatique et en graphique. Dans le cas des graphiques, les opérations de mémoire se font uniquement et exclusivement en VRAM, tandis qu’en mode informatique les données peuvent être importées ou exportées à la fois en RAM et en VRAM, car dans certains cas le GPU répond à une demande de calcul du CPU.

API graphiques et processeurs de commandes

DX11 contre DX12

À l’origine, la liste graphique et la liste de calcul étaient gérées ensemble, ce qui était totalement inefficace. Ce n’est qu’à l’avènement des GPU avec des processeurs de commande séparés pour les graphiques et l’informatique, avec la possibilité de fonctionner de manière synchrone et asynchrone les uns avec les autres, qu’ils n’ont pas été en mesure de gérer plusieurs listes de commandes différentes en parallèle.

Les listes de commandes sont également appelées tampons en anneau, la raison en est que chaque processeur de commande se voit attribuer une ou plusieurs adresses mémoire dans une liste, lorsqu’il atteint l’adresse mémoire à laquelle il peut accéder, la mémoire redémarre. C’est comme tourner en rond. Et c’est pourquoi nous l’appelons un ring buffer ou Ring Bufffer en anglais. C’est pourquoi nous les avons représentés sous forme de petits anneaux dans le schéma ci-dessus.

Types de processeurs de commande

GPU AMD VRAM

Il existe différents types de processeurs de commandes, chacun a son utilité et dépend du type de marché pour lequel la carte graphique est dirigée, il utilise un type de processeur de commande ou un autre:

  • Graphiques uniquement: Il est en désuétude totale à ce jour, car dans le passé il n’y avait qu’un seul processeur de commande et c’était exclusivement pour le graphisme.
  • Avec un planificateur intelligent: Une des choses lors de la gestion de plusieurs listes de commandes en parallèle, spécifiquement pour le calcul, est que la propre CPU du système doit généralement coordonner l’exécution des différentes listes de commandes. Un processeur de commandes avec un planificateur intelligent est capable de réorganiser la liste de commandes en temps réel sans intervention du processeur.
  • Calculer uniquement: Utilisés dans le calcul scientifique et haute performance, ces GPU ne peuvent pas générer de graphiques car ils n’ont pas de processeur de commande graphique ou sont inactifs. C’est le cas des GPU CDNA pour AMD Instinct, de différentes NVIDIA Tesla et de différentes cartes graphiques pour l’informatique.
  • Virtualisé: utilisé dans les centres de données, en particulier pour le cloud computing. Ils permettent de gérer plusieurs listes de commandes graphiques en même temps, indépendantes les unes des autres. Chaque liste correspond à une machine virtuelle exécutant à distance un système d’exploitation différent pour un utilisateur différent.

Interaction du processeur de commande avec le reste du GPU

Unité de processeur de commande Shader

Le processeur de commande ne traite aucun programme, mais est un excellent organisateur qui est chargé de répartir les tâches entre les différentes unités disponibles à tout moment. Si nous parlons du processeur de commande graphique, il aura accès non seulement aux unités de shader du GPU, mais également aux unités de fonction fixes. En informatique, par contre, il n’a accès qu’aux unités de shader et le mode de fonctionnement des processeurs de commande pour le calcul est différent.

Comment les différentes unités se coordonnent-elles les unes avec les autres? Eh bien, chaque unité de fonction fixe et unité de shader a une sorte de boîte aux lettres qui peut envoyer et recevoir des messages dans deux directions différentes:

  • Lors de l’exportation de données, l’unité de shader peut exporter vers un niveau inférieur du cache, vers une unité de fonction fixe, vers une autre unité de shader ou même vers la RAM qui lui est assignée, que ce soit un type de RAM ou de VRAM.
  • Concernant l’importation des données, ce sont le processeur de commande et l’unité d’envoi qui sont en charge d’envoyer les données à l’unité de shader. De temps en temps, le processeur de commandes est celui qui remplit les caches de données et d’instructions de chaque unité de shader avec les tâches qu’elle devra effectuer, car les unités de shader n’ont pas la capacité de capturer des instructions comme un CPU.

Il va sans dire que dans la liste des instructions et des données que le processeur de commande envoie à chaque unité, il y a une commande finale qui lui indique où exporter ces données une fois qu’il a fini de les calculer. Quelles unités reçoivent les listes de données et / ou d’instructions à traiter et où elles sont envoyées dépendent du processeur de commande, qui effectue la tâche sans que nous ayons à nous inquiéter.

Related Articles

Leave a Comment