Ouverture de l’hôte du processeur
Pour les unités de traitement graphiques discrètes (GPU) de système d’exploitation 32 bits, qui ne prennent pas en charge la barre d’accès redimensionnable ou en cas d’échec du redimensionnement de la barre de mémoire tampon d’images, le modèle WDDM (Windows Display Driver Model) v2 offre un autre mécanisme permettant d’accéder efficacement à une VRAM GPU discrète. Pour les GPU, qui prennent en charge un espace d’adressage BAR programmable, une nouvelle fonctionnalité d’ouverture de l’hôte du processeur est introduite dans WDDM v2 pour abstraction de cette fonctionnalité.
Lors de l’exposition de l’ouverture d’un hôte processeur, le pilote en mode noyau remplit une nouvelle structure de majuscules DXGK_CPUHOSTAPERTURE pour chaque segment prenant en charge une ouverture de l’hôte du processeur. Cela définit la taille de l’ouverture de l’hôte du processeur, ce qui permet au pilote de réserver une partie de la barre d’accès à des fins internes. La taille de page est identique aux pages GPU du segment de mémoire.
Le pilote en mode noyau expose ensuite deux nouvelles interfaces de pilote de périphérique (DDI) pour gérer l’espace d’adressage BAR, en particulier DxgkDdiMapCpuHostAperture et DxgkDdiUnmapCpuHostAperture.
La mémoire de la table de pages derrière l’ouverture de l’hôte du processeur est gérée par le pilote et configurée tôt lors de l’initialisation du pilote. DxgkDdiMapCpuHostAperture et DxgkDdiUnmapCpuHostAperture sont censés être opérationnels immédiatement après l’énumération de segment et sont utilisés lors de l’initialisation du gestionnaire de mémoire vidéo pour mapper l’adresse virtuelle du processeur au répertoire de pages et à la table de pages du processus de pagination système lors de l’initialisation de l’adaptateur.
Lorsque l’accès du processeur à un segment de mémoire est requis, le gestionnaire de mémoire vidéo réserve des pages dans l’ouverture de l’hôte du processeur et mappe les pages de segment de mémoire via celui-ci. En voici une illustration :
Dans la configuration de l’adaptateur d’affichage lié, les choses se ressemblent, à l’exception de ce qui suit.
- L’allocation par défaut ou LinkMirrored est toujours mappée à GPU0.
- L’allocation LinkInstanced a une plage d’adresses virtuelle d’AllocationSize*NumberOfGPUInLink associée à différentes parties de l’allocation mappées à différents GPU.
Ceci est illustré ci-dessous :