Partager via


Utilisation des segments de mémoire pour décrire l'espace d'adressage du GPU

Le gestionnaire de mémoire vidéo (VidMm) est chargé de gérer l’espace d’adressage du GPU. Avant de pouvoir le faire, le pilote de miniport d’affichage en mode noyau (KMD) doit décrire l’espace d’adressage du GPU à VidMm en utilisant des segments de mémoire.

KMD crée des segments de mémoire pour généraliser et virtualiser les ressources de mémoire vidéo. Il peut configurer des segments de mémoire en fonction des types de mémoire pris en charge par le matériel (par exemple, mémoire de tampon ou ouverture de mémoire système).

Pendant l’initialisation du pilote, le KMD doit renvoyer la liste des types de segments qui décrivent comment VidMm peut gérer les ressources mémoire. Le KMD spécifie le nombre de types de segments qu’il prend en charge et décrit chacun d’eux en répondant aux appels à sa fonction DxgkDdiQueryAdapterInfo. Le pilote décrit chaque segment à l’aide d’une structure DXGK_SEGMENTDESCRIPTOR. Pour en savoir plus, consultez Initialisation de l’utilisation des segments de mémoire.

Par la suite, le nombre et les types de segments restent inchangés. VidMm :

  • Garantit que chaque processus reçoit une part équitable des ressources dans un segment donné,

  • Gère tous les segments indépendamment.

Les segments ne se chevauchent pas. Ainsi, VidMm peut allouer une quantité équitable de ressources de mémoire vidéo à partir d’un segment, quelle que soit la quantité de ressources qu’une application détient à partir d’un autre segment.

Le KMD affecte un identificateur de segment à chacun de ses segments de mémoire. Ensuite, lorsque VidMm demande de créer des allocations pour les ressources vidéo et de restituer ces ressources, le KMD :

  • Identifie les segments qui prennent en charge la requête.

  • Spécifie, dans l’ordre, les segments que le pilote préfère que VidMm utilise.

Pour en savoir plus, consultez Spécification de segments lors de la création d’allocations.

Le KMD n’est pas tenu de spécifier toutes les ressources de mémoire vidéo disponibles pour le GPU dans ses segments de mémoire. Toutefois, il doit spécifier toutes les ressources de mémoire que VidMm gère parmi tous les processus qui s’exécutent sur le système. Par exemple :

  • Un microcode de nuanceur de sommets qui implémente un pipeline de fonctions fixes peut résider dans l’espace d’adressage du GPU, mais en dehors de la mémoire gérée par VidMm (autrement dit, il ne fait pas partie d’un segment). Cette configuration est possible, car le microcode est toujours disponible pour tous les processus et n’est jamais la source de conflits entre les processus.

  • Pour les ressources telles que les mémoires tampons de sommets, les textures, les cibles de rendu et le code de nuanceur spécifique à l’application, VidMm doit allouer des ressources de mémoire vidéo à partir de l’un des segments de mémoire du pilote. Cette exigence s’explique par le fait que les types de ressources doivent être disponibles de manière équitable pour tous les processus.

La figure suivante présente un exemple de la manière dont un KMD peut configurer des segments de mémoire à partir de l’espace d’adressage du GPU.

Diagramme qui illustre la division de l’espace d’adressage GPU en segments de mémoire.

Les nombres de la figure correspondent aux segments de mémoire suivants :

  1. Le segment linéaire accessible par le processeur : ce segment est accessible par le processeur et est organisé comme un espace d’adressage linéaire.

  2. Le segment linéaire non accessible par le processeur : ce segment est organisé comme un espace d’adressage linéaire, mais n’est pas accessible par le processeur. Il est utilisé pour les ressources qui ne nécessitent pas d’accès au processeur.

  3. Segment d’ouverture AGP en lecture seule : ce segment est utilisé pour l’accès en lecture seule à la mémoire AGP (Accelerated Graphics Port).

  4. Segment d’ouverture : ce segment est utilisé pour les ressources accessibles via l’ouverture AGP.

Les zones masquées représentent des segments de mémoire que le KMD n’expose pas à VidMm. La mémoire vidéo masquée à partir de VidMm ne peut pas être mappée dans l’espace utilisateur ou mise exclusivement à la disposition d’un processus particulier. Cela enfreint les règles fondamentales de la mémoire virtuelle qui exigent que tous les processus en cours d’exécution sur le système aient accès à l’ensemble de la mémoire.