Freigeben über


GpuMmu-Modell

Im GpuMmu-Modell verfügt die Gpu (Graphics Processing Unit) über eine eigene Speicherverwaltungseinheit (Memory Management Unit, MMU), die virtuelle GPU-Adressen pro Prozess in physische Adressen übersetzt.

Jeder Prozess verfügt über separate virtuelle CPU- und GPU-Adressräume, die unterschiedliche Seitentabellen verwenden. Der Videospeicher-Manager verwaltet den virtuellen GPU-Adressraum aller Prozesse und ist für die Zuweisung, Erweiterung, Aktualisierung, Residency und Freigabe von Seitentabellen verantwortlich. Das Hardwareformat der Seitentabellen, die von der GPU-MMU verwendet werden, ist dem Videospeicher-Manager unbekannt und wird über Gerätetreiberschnittstellen (Device Driver Interfaces, DDIs) abstrahiert. Die Abstraktion unterstützt eine Übersetzung auf mehreren Ebenen, einschließlich einer Seitentabelle mit fester Größe und einer veränderbaren Stammseitentabelle.

Obwohl der Videospeicher-Manager für die Verwaltung des virtuellen GPU-Adressraums und der zugrunde liegenden Seitentabellen zuständig ist, weist der Videospeicher-Manager Zuordnungen nicht automatisch virtuelle GPU-Adressen zu. Diese Verantwortung liegt beim Benutzermodustreiber.

Der Videospeicher-Manager bietet zwei Dienste für den Benutzermodustreiber. Erstens kann der Benutzermodustreiber Videospeicher über den vorhandenen Allocate-Rückruf zuweisen und diesen Speicher über den vorhandenen Deallocate-Rückruf freigeben. Genau wie heute gibt dies dem Benutzermodustreiber ein Handle zu einer Videospeicher-Manager-Zuordnung zurück, die von einer GPU-Engine betrieben werden kann. Diese Zuordnung stellt nur den physischen Teil einer Zuordnung dar und kann von einer Engine referenziert werden, die physisch über die Zuordnungsliste verwendet wird.

Für Engines, die im virtuellen Modus ausgeführt werden, muss einer Zuordnung explizit eine virtuelle GPU-Adresse zugewiesen werden, bevor virtuell darauf zugegriffen werden kann. Zu diesem Zweck bietet der Videospeicher-Manager den Treiberdiensten für den Benutzermodus an, um virtuelle GPU-Adressen zu reservieren oder freizugeben und bestimmte Zuordnungsbereiche in den virtuellen GPU-Adressraum eines Prozesses zuzuordnen. Diese Dienste sind sehr flexibel und ermöglichen dem Benutzermodustreiber eine präzise Kontrolle über einen virtuellen GPU-Prozessadressraum. Der Benutzermodustreiber kann sich entscheiden, einer Zuordnung entweder eine sehr spezifische virtuelle GPU-Adresse zuzuweisen oder den Videospeicher-Manager automatisch eine verfügbare Adresse auswählen zu lassen, wobei möglicherweise einige minimale und maximale Einschränkungen für virtuelle GPU-Adressen angegeben werden. Einer einzelnen Zuordnung sind möglicherweise mehrere virtuelle GPU-Adresszuordnungen zugeordnet, und dem Benutzermodustreiber werden Dienste bereitgestellt, um den Kachelressourcenvertrag zu implementieren.

Ebenso kann der Benutzermodustreiber in einer konfiguration des verknüpften Grafikkarten die virtuelle GPU-Adresse explizit bestimmten Zuordnungsinstanzen zuordnen und für jede Zuordnung auswählen, ob die Zuordnung selbst oder einer bestimmten Peer-GPU erfolgen soll. In diesem Modell sind die virtuellen CPU- und GPU-Adressen, die einer Zuordnung zugewiesen sind, unabhängig. Ein Benutzermodustreiber kann entscheiden, ob er in beiden Adressräumen gleich bleibt oder unabhängig bleibt.

Virtuelle GPU-Adressen werden logisch mit einer festen Granularität von 4 KB Seiten über die DDI-Schnittstelle verwaltet. Virtuelle GPU-Adressen können auf Zuordnungen verweisen, die sich entweder in einem Arbeitsspeichersegment oder im Systemspeicher befinden. Der Systemspeicher wird mit einer physischen Granularität von 4 KB verwaltet, während Speichersegmente nach Wahl des Treibers mit 4 KB oder 64 KB verwaltet werden. Alle Videospeicher-Manager-Zuordnungen sind ausgerichtet und so groß, dass sie ein Vielfaches der vom Treiber gewählten Seitengröße aufweisen.

Der Zugriff auf einen ungültigen Bereich von virtuellen GPU-Adressen führt zu einer Zugriffsverletzung und beendigung des Kontexts und/oder Geräts, der den Zugriffsfehler verursacht hat. Um einen solchen Fehler wiederherzustellen, initiiert der Videospeicher-Manager eine Engine-Zurücksetzung, die zu einer Adapterweite Timeouterkennungswiederherstellung (TDR) heraufgestuft wird, wenn sie nicht erfolgreich ist.

Das GpuMmu-Modell wird unten veranschaulicht:

Diagramm, das das GpuMmu-Modell mit seinen Komponenten und Interaktionen zeigt.