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?
Réponses:
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.
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).
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 .
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
AL
registre,0x09
dans leAH
registre, puis d' appeler l'interruption du BIOS0x10
. 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.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.
À travers plusieurs couches:
la source
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.
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:
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é.
De Wikipedia :
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.
la source