Comment les instructions de pilote de périphérique programment-elles le GPU?


9

Supposons que je me sers plus ou moins d'un ordinateur moderne typique. Un pilote de périphérique est responsable de tout ce que je vois sur mon écran, y compris dès que je tape cet écran, celui-ci est mis à jour (bien entendu, cela relève d'un système d'exploitation, comme Windows).

Mettons cela au niveau où le matériel ne se soucie pas de savoir s'il y a un noyau ou non, et prend juste des instructions.

En gros, comment les GPU "savent-ils" comment tout faire? Un pilote contrôle-t-il fondamentalement toutes les fonctions minuscules, intrinsèques, ou de niveau de circuit matériel possibles ou nécessaires pour calculer des données binaires à afficher à l'aide d'instructions spéciales fournies par un pilote?

Si tel est le cas, le processeur graphique utilise-t-il un langage "spécial" ou un "assemblage" pour comprendre les instructions qui lui sont envoyées comme le fait un processeur?

J'ai trop de lacunes dans mes connaissances et il y a ce "mystère" déplaisant derrière les GPU et leur accès direct via le matériel.

Par exemple, un GPU et une CPU doivent pouvoir se connecter d’une manière ou d’une autre, de sorte qu’il est possible d’accéder à un GPU via l’assemblage de la CPU et l’implémentation des bus de données / adresses appropriés. Aucun fournisseur de périphériques ne peut empêcher l'accès au GPU en dehors d'un pilote, car un pilote est également un code compilé et le GPU, en tant que circuit programmable, doit fonctionner avec des instructions binaires.

J'ai posé ces types de questions et elles sont supprimées violemment rapidement sans réponse pourquoi sur de nombreux sites, alors quel est le grand mystère / secret ici? C'est un élément de matériel sur une carte mère auquel on accède comme un autre.

Alors vraiment ... en supposant que la question soit "ok" ici concernant les logiciels et le matériel, tout le monde peut accéder directement à un GPU sans fichiers spécifiques au fournisseur, car ces fichiers ne sont pas magiques.

Alors, comment les GPU sont-ils "programmés" du point de vue matériel direct, en métal nu, au niveau matériel spécifique?


À mon avis, il me semble que c'est une question "OK" (bien que compliquée et nécessitant peut-être un livre pour répondre - ce qui n'est pas un bon format, commencez par consulter le centre d'aide et les pages de la visite pour vous familiariser avec le type de questions que vous pouvez poser ici). .
Doktoro Reichard

Je ne lis pas le centre d'aide.

Ça vous dérange si je vous demande pourquoi pas?
Doktoro Reichard

Parce que vous pouvez passer plus de temps à réfléchir, à essayer de résoudre et de répondre à ma question "OK" en l’état.

Et comme je l’ai dit, pour répondre correctement à cette question, vous auriez probablement besoin d’un livre… Les réponses longues ne sont généralement pas de bonnes réponses.
Doktoro Reichard

Réponses:


8

En gros, comment les GPU "savent-ils" comment tout faire? Un pilote contrôle-t-il fondamentalement toutes les fonctions minuscules, intrinsèques, ou de niveau de circuit matériel possibles ou nécessaires pour calculer des données binaires à afficher à l'aide d'instructions spéciales fournies par un pilote?

Non, le dispositif possède ses propres circuits intégrés qui contrôlent tous les aspects du fonctionnement du dispositif au niveau du matériel. Ils communiquent également avec un processeur central qui coordonne les aspects intégrés au dispositif et fournit une interface de programmation de niveau supérieur qui peut être utilisée. accéder, lire, écrire et contrôler le périphérique.

Si tel est le cas, le processeur graphique utilise-t-il un langage "spécial" ou un "assemblage" pour comprendre les instructions qui lui sont envoyées comme le fait un processeur?

Oui et non. Comme la plupart des appareils, les cartes vidéo utilisent des normes pour simplifier les choses. Ils utilisent des normes telles que VESA pour accéder aux fonctions habituelles telles que la vidéo au démarrage, ou CUDA pour accéder aux fonctions de programmation GPU. De plus, les programmes peuvent accéder directement aux fonctions non standard ou dépendantes du périphérique à l'aide du code machine (souvent compilé en C en assembleur), en association avec les documentations de programmation du périphérique (disponibles sur le site Web de l'adaptateur).

J'ai trop de lacunes dans mes connaissances et il y a ce "mystère" déplaisant derrière les GPU et leur accès direct via le matériel.

Les pilotes accèdent directement au périphérique, ce qui explique leur accès spécial (les programmes standard destinés aux utilisateurs ne sont pas autorisés à accéder au matériel directement sous Vista + pour des raisons de sécurité et de stabilité). L'accès au périphérique à l'aide des ports, de l' accès direct à la mémoire (DMA ) et du mappage de la mémoire .

Par exemple, un GPU et une CPU doivent pouvoir se connecter d’une manière ou d’une autre, de sorte qu’il est possible d’accéder à un GPU via l’assemblage de la CPU et l’implémentation des bus de données / adresses appropriés. Aucun fournisseur de périphériques ne peut empêcher l'accès au GPU en dehors d'un pilote, car un pilote est également un code compilé et le GPU, en tant que circuit programmable, doit fonctionner avec des instructions binaires.

Un pilote peut lire et écrire le périphérique avec des instructions régulières de la CPU en accédant à des ports mappés en mémoire, etc. Comme exemple facile à comprendre, vous pouvez mettre un caractère à l’écran en mode texte en écrivant dans «mémoire» à l’adresse B8000. Cette adresse n'était pas de la RAM, mais plutôt, elle avait été mappée pour correspondre à la mémoire de la carte vidéo. Son écriture était donc écrite à l'écran. De même, vous pouvez écrire Tothe écran en plaçant le caractère que vous voulez écrire dans le ALregistre, 0x09dans le AHregistre, puis d' appeler l'interruption du BIOS 0x10. Des fonctions plus avancées ne sont pas différentes; vous pouvez lire et écrire la mémoire de l'adaptateur, appeler les fonctions de sa puce, etc. en utilisant les interfaces que le périphérique expose et documente.

Alors vraiment ... en supposant que la question soit "ok" ici concernant les logiciels et le matériel, tout le monde peut accéder directement à un GPU sans fichiers spécifiques au fournisseur, car ces fichiers ne sont pas magiques.

Seulement pour les fonctionnalités conformes aux normes, mais pour tout le reste (c'est-à-dire les éléments les plus avancés), vous devrez consulter les documents de programmation du fabricant.

Alors, comment les GPU sont-ils "programmés" du point de vue matériel direct, en métal nu, au niveau matériel spécifique?

À travers plusieurs couches:

  1. Les composants à l'état solide comme les transistors et autres
  2. ASIC de bas niveau
  3. Processeur (s) intégré (s) et chipsets
  4. Interfaces de programmation bas niveau (assemblage)
  5. Interfaces de programmation de niveau supérieur (DirectX, OpenGL)
  6. Langage de programmation de haut niveau (C ++, C #, Python, etc.)

1
note sur le «métal nu»; dans le cas où la plupart des développeurs de jeux en parlent, ils se plaignent de devoir utiliser des abstractions de haut niveau telles que DirectX / OpenGL plutôt que d'écrire du code qui compile sur la machine Langague. Voir ici pour plus d'informations sur l'assembleur langague utilisé par les GPU FERMI de Nvidia code.google.com/p/asfermi. Notez que même CUDA se trouve au sommet d'un langague de haut niveau (PTX) compilé en code machine. ne pas être identique à la sortie compilée.
Frank Thomas

Hé, pourriez-vous avoir une bonne suggestion de livre digne d'un étudiant qui couvre les sujets dont vous avez parlé dans ce billet? Travailler dans la programmation GPU ne m'intéresse pas, mais ma compréhension de la façon dont tout cela fonctionne est frustrante.
Lanza

2

Je ne suis pas vraiment un génie de l'architecture informatique, mais je vais essayer de traiter votre question par points, au meilleur de mes connaissances.


Un pilote de périphérique est responsable de tout ce que je vois sur mon écran, y compris dès que je tape cet écran, celui-ci est mis à jour (bien entendu, cela relève d'un système d'exploitation, comme Windows).

C'est vrai, principalement parce que l'interaction directe avec le GPU n'est pas facile à mettre en œuvre. D'où le développement de cadres graphiques tels que DirectX et OpenGL.

Cette définition pratique de Wikipedia explique ceci plus en détail:

Un pilote de périphérique simplifie la programmation en faisant office de traducteur entre un périphérique matériel et les applications ou systèmes d'exploitation qui l'utilisent. Les programmeurs peuvent écrire le code d'application de niveau supérieur indépendamment du matériel spécifique utilisé par l'utilisateur final.


En gros, comment les GPU "savent-ils" comment tout faire? Un pilote contrôle-t-il fondamentalement toutes les fonctions minuscules, intrinsèques, ou de niveau de circuit matériel possibles ou nécessaires pour calculer des données binaires à afficher à l'aide d'instructions spéciales fournies par un pilote?

Les GPU sont des microprocesseurs. En tant que tels, ils traitent. Ils traitent les données fournies par la CPU (c.-à-d. La position des éléments) vers un affichage correct. Ils "savent" comment tout faire car ils sont fabriqués de cette manière et un grand groupe de personnes s'est mis d'accord sur les moyens appropriés pour envoyer des données vers et à partir du GPU.

Considérez le pilote d’affichage comme un tampon ou un proxy. Imaginez que vous soyez une fenêtre de programme et que l'utilisateur vous déplace vers le haut. Vous demandez au GPU d’actualiser l’affichage. Mais comme le GPU parle Klingon et que vous parlez Vulcan , le pilote reçoit votre commande, la traduit en GPU qui fait ce que vous avez commandé.

Si tel est le cas, le processeur graphique utilise-t-il un langage "spécial" ou un "assemblage" pour comprendre les instructions qui lui sont envoyées comme le fait un processeur?


De Wikipedia :

Le langage d'assemblage ARB est un langage d'ombrage de bas niveau, qui peut être qualifié de langage d'assemblage. Il a été créé par ARB (OpenGL Architecture Review Board) pour standardiser les instructions GPU contrôlant le pipeline graphique matériel.

Il existe cet exemple et rappelez-vous que les fabricants individuels (NVIDIA, ATI) ont leurs propres jeux d'instructions.

En outre, il existe OpenCL et de nombreuses autres manières de programmer directement des instructions pour le GPU.

Tout cela devrait répondre à votre question, dans une certaine mesure.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.