Comment le CPU communique-t-il avec le GPU avant le chargement des pilotes? [dupliquer]

24

Si je comprends bien, les GPU ont leurs propres jeux d'instructions, dont les instructions sont générées par les pilotes graphiques. Les instructions du GPU sont ensuite envoyées au GPU. Alors, comment fonctionne la communication graphique avant le chargement des pilotes? Existe-t-il des instructions de base que les GPU doivent implémenter au minimum pour garantir que l'ordinateur puisse effectuer des tâches d'affichage de base?

VortixDev
la source

Réponses:

34

"Y a-t-il des instructions de base ...?" Oui, exactement. Tous les GPU sont requis pour implémenter l'une des nombreuses interfaces simples - elles sont trop primitives pour être appelées "jeux d'instructions" - avec quel micrologiciel de plate-forme ("BIOS" ou "UEFI") et quels pilotes inclus avec le système d'exploitation savent comment parler . Le choix habituel d'une "interface simple" de nos jours est "VGA" ("Video Graphics Array"), l'interface au niveau du registre initialement définie pour les cartes vidéo de cette norme. (Maintenant 30+ ans!)

Par exemple, si le Gestionnaire de périphériques sur un système Windows identifie la carte graphique en tant que «carte vidéo de base Microsoft», le système d'exploitation n'a pas pu trouver un pilote spécifique pour la carte et a chargé le pilote compatible VGA à la place.

Eh bien, techniquement, Windows charge toujours ce pilote (pour qu'il puisse afficher par exemple les écrans de progression du démarrage), puis (assez tard dans le démarrage) identifie et charge le "vrai" pilote pour votre carte graphique.

La norme VGA ne prend en charge que quelques modes graphiques et modes texte basse résolution, et n'implique pas ce que j'appellerais des "programmes en cours d'exécution" ni même des "instructions" sur le GPU. En substance, le micrologiciel du système ou le "pilote vidéo de base" le met simplement dans le mode souhaité, puis écrit des bits dans une image bitmap; les bits du bitmap correspondent directement aux pixels de l'écran. Toute arithmétique qui doit être effectuée pour tracer des lignes ou des courbes est effectuée dans le CPU. Ce qui est un moyen très bas et lent de faire apparaître des choses à l'écran. Mais cela suffit pour les affichages et les interactions simples avec le micrologiciel, pour les installations de système d'exploitation et les écrans de progression de démarrage précoce, etc.

Wikipédia: tableau graphique vidéo

Jamie Hanrahan
la source
1
La situation est compliquée. Les toutes premières cartes "VGA" étaient en effet aussi limitées. Pendant longtemps, Windows NT a requis la prise en charge de 800 x 600, mais oui, seulement 16 couleurs. Ça avait l'air assez terrible! Voir l'article Wikipedia que j'ai lié.
Jamie Hanrahan
9
Windows utilise plus probablement les extensions du BIOS VESA (VBE) pour son adaptateur de base. VBE est assez largement pris en charge et permet des couleurs 16-24 bits et jusqu'à 1600x1200 pixels.
8bittree
3
Ce ne serait pas une extension du BIOS VESA, car Windows n'invoque catégoriquement pas le code BIOS / UEFI pour quoi que ce soit après les toutes premières étapes du bootstrap.
Jamie Hanrahan
2
J'ai vu certains ordinateurs, y compris mon ordinateur portable, où l'écran de démarrage de Windows "points tournants" commence avec une résolution extrêmement basse (320x200, je dirais, le mode 256 couleurs de VGA), puis passe rapidement à une résolution plus élevée.
Artelius
1
Même 800x600 à 16 couleurs dépasse les capacités de VGA. VGA maximisé à 640x480 16 couleurs. Cependant, les fabricants de puces graphiques sont allés au-delà et ajouteraient des modes "SuperVGA" alias SVGA qui augmenteraient les couleurs et la résolution, tout en ayant leurs propres modes propriétaires. VESA est venu pour un moyen standard d'accéder à ces modes propriétaires, mais c'était à peu près au moment où le PC a commencé à être principalement piloté par interface graphique, et donc les pilotes étaient un bon choix. C'était aussi lorsque l'accélération 3D commençait à être ajoutée. Ainsi, alors que la plupart des cartes sont devenues compatibles VESA, personne n'en a parlé.
trlkly
16

Je vais essayer de clarifier le "vaudou" derrière tout cela, en expliquant comment fonctionnait l'ancien matériel. Les GPU modernes ne fonctionnent pas comme cela, mais ils émulent l'interface CPU-carte graphique.

tl; dr

Les puces / cartes graphiques des années 80 et du début des années 90 ont dû produire une sortie extrêmement rapidement (par rapport à la vitesse d'horloge), de sorte qu'elles n'ont pas exécuté d'instructions, mais plutôt des circuits fixes. Ils ont juste aspiré les données de la RAM au fur et à mesure, alors le CPU avait simplement besoin de vider les données dans la RAM au bon endroit, et la puce graphique les récupérait et les jetait sur l'écran. Le processeur peut également définir diverses variables de configuration sur la puce graphique.

Détails:

Dans les années 80, les ordinateurs personnels avaient une puce graphique vraiment "stupide" qui avait quelques comportements fixes. Ce sera plus logique si je passe par le pipeline à l'envers.

Moniteurs CRT

Ces moniteurs avaient besoin d'entrées analogiques. En d'autres termes, une tension plus élevée = une sortie plus lumineuse. Les moniteurs couleur avaient 3 canaux (rouge, vert et bleu (ou, par exemple, YUV ou YIQ ) ). Ces tensions ont ajusté la force d'un faisceau d'électrons. Des trucs simples.

CRT surveille littéralement les électroaimants utilisés pour dévier le faisceau d'électrons de gauche à droite, puis recommencez un peu plus bas et allez de gauche à droite, et ainsi de haut en bas. Revenez ensuite en haut et répétez.

DAC

Les puces graphiques avaient un convertisseur "numérique-analogique" (un composant électrique très courant ). Cela a converti les valeurs numériques (par exemple 2, 4 ou 8 bits) en tensions pouvant être fournies au moniteur.

Balayage

Les puces graphiques devaient "suivre" le faisceau d'électrons, envoyant la bonne valeur au DAC afin qu'il puisse émettre la tension correspondante au bon moment. (Des horloges ont été utilisées pour cela que je n'entrerai pas dans les détails.) Il n'y avait pas de temps pour exécuter les instructions ici. Tout était câblé et prenait un petit nombre fixe de cycles d'horloge.

Modes vidéo

Les premières puces n'étaient pas très rapides et avaient une mémoire RAM limitée. De ce fait, ils avaient tendance à permettre la sélection de divers modes et autres paramètres de configuration, par exemple la couleur d'arrière-plan, la sélection de police, l'emplacement et la taille du curseur, la sélection de palette et les sprites. La plupart offraient un mode haute résolution "caractère uniquement" et des modes pixel par pixel de résolution inférieure.

Les trois modes VGA remarquables sont:

  • Mode texte 16 (ish) couleur 80x25 (c'est essentiellement à quoi ressemble un écran de chargement du BIOS)
  • Mode haute résolution 16 couleurs 640x480
  • Mode haute couleur 256 couleurs 320x200

Pixels de peinture

En gros, selon le système graphique, le pipeline ressemble à ceci:

Emplacement actuel des pixels ⇒ Traiter les données de caractère / police / sprite / pixel / config ⇒ Valeurs des pixels ⇒ Palette ⇒ DAC

C'est cette 2e étape qui doit lire à partir de quelques emplacements RAM. Par exemple, en mode texte, un caractère d'un octet serait recherché. Cela formerait un index dans une table de polices. Un peu serait recherché dans ce tableau, indiquant si ce pixel devrait être la couleur de premier plan ou d'arrière-plan. Un troisième octet serait récupéré pour obtenir cette couleur de premier plan / arrière-plan. Dans l'ensemble, 3 octets lus à partir de la RAM.

Mais ce «flux» est à peu près un ensemble de circuits fixes simples qui sont disposés exactement comme, bien, le flux qui vient d'être décrit.

Interface de bus mémoire

Les processeurs Intel ont cet héritage ennuyeux appelé bus IO, mais ce n'est pas important, donc je ferai comme si ce n'était pas le cas.

Les CPU accèdent à la RAM en diffusant une requête READ ou WRITE et une adresse sur le bus mémoire. Bien que la plupart des adresses valides suscitent une réponse de la RAM, certaines plages sont gérées par les périphériques à la place. Par exemple, la LECTURE à partir d'une adresse particulière peut vous donner des informations sur les touches du clavier.

En écrivant dans les bonnes parties de la "gamme graphique", vous pouvez écrire à la fois le contenu de l'écran et également définir les paramètres de configuration de la carte graphique. La puce graphique "stupide" n'exécute aucune instruction. Il continue simplement à avancer, avec quelques octets circulant dans ses circuits et des tensions de sortie.

Avec VGA, il y a en fait de la RAM sur la carte graphique, car vous pouvez configurer la carte graphique pour des données prétraitées avant qu'elles ne soient écrites dans la RAM graphique, pour améliorer les performances dans certaines situations.

VESA

Les cartes graphiques après VGA offraient des résolutions plus élevées et une bonne profondeur de couleur mais fonctionnaient avec des principes similaires. De nombreuses cartes graphiques modernes offrent toujours une compatibilité avec cela pour permettre une résolution plus élevée lors du démarrage. Mais VGA est le "infaillible" que pratiquement toutes les cartes émuleront.

Artelius
la source