DE102013022168B4 - Unified Virtual Storage System Migration Scheme - Google Patents

Unified Virtual Storage System Migration Scheme Download PDF

Info

Publication number
DE102013022168B4
DE102013022168B4 DE102013022168.4A DE102013022168A DE102013022168B4 DE 102013022168 B4 DE102013022168 B4 DE 102013022168B4 DE 102013022168 A DE102013022168 A DE 102013022168A DE 102013022168 B4 DE102013022168 B4 DE 102013022168B4
Authority
DE
Germany
Prior art keywords
page
memory
ppu
cpu
virtual
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102013022168.4A
Other languages
German (de)
Other versions
DE102013022168A1 (en
Inventor
Jerome F. Duluk jr.
Cameron Buschardt
Sherry CHEUNG
James Leroy Deming
Samuel H. Duncan
Lucien DUNNING
Robert George
Arvind GOPALAKRISHNAN
Mark HAIRGROVE
Chenghuan JIA
John Mashey
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/055,382 external-priority patent/US10303616B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102013022168A1 publication Critical patent/DE102013022168A1/en
Application granted granted Critical
Publication of DE102013022168B4 publication Critical patent/DE102013022168B4/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Ein computerimplementiertes Verfahren zum Zugreifen auf Daten in einem virtuellen Speichersubsystem, wobei das Verfahren umfasst:Ausgeben eines Seitenfehlers in Reaktion auf eine Speicherzugriffsanforderung, wobei eine lokale Seitentabelle (208) einen Eintrag nicht enthält, der einer virtuellen Speicheradresse entspricht, die in der Speicherzugriffsanforderung enthalten ist;reagierend auf den Seitenfehler, Ausführen einer Seitenfehlersequenz, die beinhaltet:Ermitteln eines Eintrags in einem Seitenzustandsverzeichnis (210), der einer Speicherseite entspricht, die mit der virtuellen Speicheradresse verknüpft ist;Auslesen eines Besitzzustands, der mit der Speicherseite verknüpft ist, aus dem Eintrag in dem Seitenzustandsverzeichnis (210), wobei der Besitzzustand auf Grundlage eines Verwendungsverlaufs der Speicherseite bestimmt wird; undAktualisieren der lokalen Seitentabelle (208) derart, dass sie einen Eintrag enthält, der der virtuellen Speicheradresse entspricht und die virtuelle Speicheradresse mit der Speicherseite verknüpft.A computer-implemented method for accessing data in a virtual memory subsystem, the method comprising: issuing a page fault in response to a memory access request, wherein a local page table (208) does not contain an entry corresponding to a virtual memory address contained in the memory access request ;responsive to the page fault, performing a page fault sequence that includes:locating an entry in a page state table (210) that corresponds to a memory page associated with the virtual memory address;reading an ownership state associated with the memory page from the entry in the page state directory (210), the state of ownership being determined based on a usage history of the memory page; and updating the local page table (208) to include an entry corresponding to the virtual memory address and linking the virtual memory address to the memory page.

Description

HINTERGRUND DER ERFINDUNGBACKGROUND OF THE INVENTION

Gebiet der Erfindungfield of invention

Ausführungsformen der vorliegenden Erfindung betreffen generell einen virtuellen Speicher und insbesondere eine Migrationsschema bzw. Verschiebungsschema für ein vereinheitlichtes virtuelles Speichersystem.Embodiments of the present invention relate generally to virtual memory, and more particularly to a migration scheme for a unified virtual memory system.

Beschreibung des Stands der TechnikDescription of the prior art

Die meisten modernen Computersysteme realisieren typischerweise eine gewisse Art an virtueller Speicherarchitektur. Unter anderem macht es die virtuelle Speicherarchitektur möglich, auf einen Speicher unter Anwendung virtueller Speicheradressen anstatt physikalische Speicheradressen zuzugreifen. Durch die Bereitstellung dieser virtuellen Speicherschicht zwischen dem physikalischen Speicher und einer Anwendungssoftware wird die Software auf Anwenderebene von den Details der physikalischen Speicherverwaltung abgeschirmt, die einem speziellen Speicherverwaltungssystem überlassen werden.Most modern computer systems typically implement some type of virtual memory architecture. Among other things, the virtual memory architecture makes it possible to access memory using virtual memory addresses rather than physical memory addresses. By providing this virtual storage layer between physical storage and an application software, the user-level software is shielded from the details of physical storage management that are left to a dedicated storage management system.

Ein typisches Computersystem, das eine virtuelle Speicherarchitektur realisiert, umfasst eine zentrale Recheneinheit (CPU) und eine oder mehrere Parallelverarbeitungseinheiten (GPU). Im Betrieb kann ein Softwareprozess, der in einer CPU oder einer GPU ausgeführt wird, Daten über eine virtuelle Speicheradresse anfordern. In vielen üblichen Architekturen sind die virtuellen Speichersysteme, die Anforderungen für Daten über virtuelle Speicheradressen für eine CPU und eine GPU handhaben, unabhängig. Insbesondere können ein separates CPU-Speicherverwaltungssystem und ein separates GPU-Speicherverwaltungssystem Anforderungen für Daten entsprechend aus der CPU und der GPU behandeln.A typical computer system implementing a virtual memory architecture includes a central processing unit (CPU) and one or more parallel processing units (GPU). In operation, a software process running on a CPU or a GPU may request data through a virtual memory address. In many common architectures, the virtual memory systems that handle requests for data via virtual memory addresses for a CPU and a GPU are independent. In particular, a separate CPU memory management system and a separate GPU memory management system can handle requests for data from the CPU and GPU accordingly.

Es gibt einige Nachteile, die mit derartigen unabhängigen Speicherverwaltungssystemen einhergehen. Beispielsweise hat nicht jedes unabhängige Speicherverwaltungssystem notwendigerweiser Kenntnis über den Inhalt der Speichereinheiten, die zu dem anderen Speicherverwaltungssystem gehören. Daher können die Speicherverwaltungssysteme gegebenenfalls nicht miteinander zusammenarbeiten, um gewisse Effizienzen bereitzustellen, etwa die Bestimmung, wo Daten im Hinblick auf eine verbesserte Zugriffsverarbeitungszeit gespeichert werden sollten. Da ferner die Speicherverwaltungssysteme unabhängig sind, sind Zeiger für ein derartiges System nicht notwendigerweise kompatibel mit dem anderen System. Daher muss ein Programmierer einer Anwendung die zwei unterschiedlichen Arten von Zeigern überwachen. Die US 2010 / 0 321 397 A1 beschreibt ein System mit einem ersten Speicher und einem Host Speicher, wobei beide Speicher Seitentabellen aufweisen für die Zuweisung von virtuellen zu physikalischen Speicheradressen.There are some disadvantages associated with such independent memory management systems. For example, each independent storage management system does not necessarily have knowledge of the contents of the storage units belonging to the other storage management system. Therefore, the storage management systems may not cooperate with each other to provide certain efficiencies, such as determining where data should be stored for improved access processing time. Furthermore, since the memory management systems are independent, pointers for one such system are not necessarily compatible with the other system. Therefore, a programmer of an application must monitor the two different types of pointers. The U.S. 2010/0 321 397 A1 describes a system having a first memory and a host memory, both memories having page tables for assigning virtual to physical memory addresses.

Wie das Vorhergehende zeigt, ist das, was auf diesem Gebiet der Technik benötigt wird, eine effizientere Vorgehensweise zur Verwaltung eines virtuellen Speichers in einem System mit heterogenen Prozessoren, etwa einer CPU und einer GPU.As the foregoing indicates, what is needed in this field of technology is a more efficient way to manage virtual memory in a system with heterogeneous processors, such as a CPU and a GPU.

ÜBERBLICK ÜBER DIE ERFINDUNGOVERVIEW OF THE INVENTION

Eine Ausführungsform der vorliegenden Erfindung stellt ein System gemäß Anspruch 10 bereit zur Verwaltung von Zuordnungen von einem virtuellen Speicher zu einem physikalischen Speicher mittels eines Seitenzustandsverzeichnisses. Das System umfasst eine erste Verarbeitungseinheit, die ausgebildet ist, eine erste Operation auszuführen, die eine erste virtuelle Speicheradresse referenziert bzw. auf diese verweist. Das System umfasst ferner eine erste Speicherverwaltungseinheit (MMU), die mit der ersten Verarbeitungseinheit verbunden und ausgebildet ist, einen ersten Speicherfehler zu erzeugen, wenn ermittelt wird, dass eine erste Seitentabelle, die in einer mit der erste Verarbeitungseinheit verbundenen ersten Speichereinheit gespeichert ist, keine Zuordnung, die der ersten virtuellen Speicheradresse entspricht, enthält. Das System umfasst ferner eine erste Kopiereinheit, die mit der Datenverarbeitungseinheit verbunden ist. Die erste Kopiereinheit ist ausgebildet, eine erste Befehlswarteschlange auszulesen, um eine erste Zuordnung zu ermitteln, die mit der ersten virtuellen Speicheradresse verknüpft ist, und die in einem ersten Seitenzustandsverzeichnis enthalten ist. Die erste Kopiereinheit ist ferner ausgebildet, die erste Seitentabelle so zu aktualisieren, dass sie die erste Zuordnung enthält.An embodiment of the present invention provides a system according to claim 10 for managing mappings from virtual memory to physical memory using a page state map. The system includes a first processing unit configured to perform a first operation that references a first virtual memory address. The system further includes a first memory management unit (MMU) coupled to the first processing unit and configured to generate a first memory error upon determining that a first page table stored in a first memory unit coupled to the first processing unit does not Allocation corresponding to the first virtual memory address contains. The system further comprises a first copying unit connected to the data processing unit. The first copy unit is configured to read a first command queue to determine a first mapping associated with the first virtual memory address and contained in a first page state table. The first copy engine is further configured to update the first page table to include the first mapping.

Ein Vorteil der offenbarten Vorgehensweise besteht darin, dass Anwendungen auf Anwenderebene nicht mehrere Zeiger überwachen müssen, abhängig davon, wo ein spezielles Datenelement gespeichert ist. Ein weiterer Vorteil besteht darin, dass Speicherseiten zwischen Speichereinheiten auf der Grundlage der Verwendung migriert bzw. verschoben werden, was es möglich macht, dass Speicherseiten lokal für die Einheiten angeordnet werden können, die auf die Speicherseiten häufiger zugreifen. Ein weiterer Vorteil besteht darin, dass ein Fehlerpuffer bereitgestellt ist, der es ermöglicht, dass von der PPU erzeugte Fehler für eine effiziente Ausführung vereinigt werden.An advantage of the disclosed approach is that user-level applications do not need to keep track of multiple pointers depending on where a particular data item is stored. Another advantage is that memory pages are migrated between memory devices based on usage, which allows memory pages to be localized to the devices that access the memory pages more frequently. Another advantage is that an error buffer is provided that allows errors generated by the PPU to be merged for efficient execution.

Figurenlistecharacter list

Um die Art und Weise, in der die oben genannten Merkmale der vorliegenden Erfindung detailliert verstanden werden können, anzugeben, wird eine speziellere Beschreibung der Erfindung, die zuvor kurz zusammengefasst ist, durch Bezugnahme zu Ausführungsformen angegeben, wovon einige in den angefügten Zeichnungen dargestellt sind. Es ist jedoch zu beachten, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung zeigen und daher nicht als Einschränkung ihres Schutzbereichs zu betrachten sind, da die Erfindung andere gleichermaßen effektive Ausführungsformen zulässt.

  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren;
  • 2 ist eine Blockansicht, das ein vereinheitlichtes bzw. vereinigtes virtuelles Speichersystem gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
  • 3 ist eine Konzeptdarstellung eines Systems 300 zur Verfolgung des Zustands von Speicherseiten gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist eine Konzeptdarstellung eines Systems, das eine Migrationsoperation gemäß einer Ausführungsform der vorliegenden Erfindung realisiert;
  • 5 zeigt ein virtuelles Speichersystem zur Speicherung von Fehlern in einem Fehlerpuffer gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6 zeigt ein virtuelles Speichersystem zur Auflösung von Seitenfehlern, die von der GPU erzeugt werden, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 7 gibt ein Flussdiagramm von Verfahrensschritten zur Verwaltung von Zuordnungen vom virtuellen Speicher zum physikalischen Speicher mittels eines Seitenzustandsverzeichnis gemäß einer Ausführungsform der vorliegenden Erfindung an;
  • 8 gibt ein Flussdiagramm von Verfahrensschritten zur Verfolgung von Seitenfehlern gemäß einer Ausführungsform der vorliegenden Erfindung an;
  • 9 gibt ein Flussdiagramm von Verfahrensschritten zur Auflösung von Seitenfehlern in einem Fehlerpuffer gemäß einer Ausführungsform der vorliegenden Erfindung an;
  • 10 gibt ein Flussdiagramm von Verfahrensschritten zur Erzeugung und zur Verwaltung gemeinsamer Zeiger in einer virtuellen Speicherarchitektur gemäß einer Ausführungsform der vorliegenden Erfindung an; und
  • 11 zeigt ein Flussdiagramm von Verfahrensschritten zur Verwaltung des Besitzzustands in einem virtuellen Speichersubsystem gemäß einer Ausführungsform der vorliegenden Erfindung.
In order to indicate the manner in which the above features of the present invention can be understood in detail, a more specific description of the invention, briefly summarized above, is given by reference to embodiments, some of which are illustrated in the accompanying drawings. However, it should be noted that the attached drawings show only typical embodiments of this invention and therefore should not be considered as limiting its scope, since the invention admits of other equally effective embodiments.
  • 1 Figure 12 is a block diagram illustrating a computer system configured to implement one or more aspects of the present invention;
  • 2 12 is a block diagram showing a unified virtual memory system according to an embodiment of the present invention;
  • 3 Figure 300 is a conceptual representation of a system 300 for tracking the state of memory pages according to an embodiment of the present invention;
  • 4 Fig. 12 is a conceptual diagram of a system realizing a migration operation according to an embodiment of the present invention;
  • 5 Figure 12 shows a virtual memory system for storing errors in an error buffer according to an embodiment of the present invention;
  • 6 Figure 12 shows a virtual memory system for resolving page faults generated by the GPU according to an embodiment of the present invention;
  • 7 Figure 12 provides a flow chart of method steps for managing virtual memory to physical memory mappings using a page state table in accordance with an embodiment of the present invention;
  • 8th Figure 12 provides a flowchart of method steps for tracking page faults according to an embodiment of the present invention;
  • 9 Figure 12 provides a flowchart of method steps for resolving page faults in a fault buffer according to an embodiment of the present invention;
  • 10 Figure 12 provides a flowchart of method steps for creating and managing shared pointers in a virtual memory architecture according to an embodiment of the present invention; and
  • 11 12 shows a flow diagram of method steps for managing ownership in a virtual storage subsystem according to an embodiment of the present invention.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

Systemüberblicksystem overview

1 ist eine Blockansicht, die ein Computersystem 100 zeigt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren. Das Computersystem 100 umfasst eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über einen Verbindungspfad, der eine Speicherbrücke 105 enthalten kann, kommunizieren. Die Speicherbrücke 105, die beispielsweise ein Nordbrücken-Chip sein kann, ist über einen Bus oder einen anderen Kommunikationspfad 106 (beispielsweise eine HyperTransport-Verbindung) mit einer I/O-(Eingabe/Ausgabe-) Brücke 107 verbunden. Die I/O-Brücke 107, die beispielsweise ein Südbrücken-Chip sein kann, empfängt eine Anwendereingabe aus einem oder mehreren Anwender-Eingabegeräten 108 (beispielsweise Tastatur, Maus) und leitet die Eingabe an die CPU 102 über den Kommunikationspfad 106 und die Speicherbrücke 105 weiter. Ein Parallelverarbeitungssubsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen zweiten Kommunikationspfad 113 (beispielsweise ein peripherer Komponenten-Verbindungs-(PCI-) Express, beschleunigter Graphikport oder HyperTransport-Verbindung) verbunden; in einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein grafisches Subsystem, das Pixel an ein Anzeigegerät 110 liefert, das eine konventionelle Kathodenstrahlröhre, eine Flüssigkristallanzeige, eine Anzeige mit lichtemittierenden Dioden oder dergleichen sein kann. Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden und ist ausgebildet, Inhalt und Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112 zu speichern. Die Systemdiskette 114 stellt nicht-flüchtigen Speicherplatz für Anwendungen und Daten bereit und kann fest installierte oder entfernbare Festplattenlaufwerke, Flash-Speichereinrichtungen und CD-(Kompaktdisketten-Nur-Lese-Speicher), DVD-(digitale Vielseitigkeitsdisketten-ROM), Blu-ray, HD-DVD (DVD mit hoher Auflösung) oder andere magnetische, optische oder Halbleiterspeichereinrichtungen umfassen. 1 1 is a block diagram showing a computer system 100 configured to implement one or more aspects of the present invention. The computer system 100 includes a central processing unit (CPU) 102 and a system memory 104 that communicate over an interconnect path that may include a memory bridge 105 . The memory bridge 105, which may be, for example, a Northbridge chip, is connected to an I/O (input/output) bridge 107 via a bus or other communication path 106 (e.g., a HyperTransport connection). The I/O bridge 107, which may be, for example, a south bridge chip, receives user input from one or more user input devices 108 (e.g. keyboard, mouse) and routes the input to the CPU 102 via the communication path 106 and the memory bridge 105 further. A parallel processing subsystem 112 is connected to the memory bridge 105 via a bus or second communication path 113 (e.g connected via a Peripheral Component Interconnect (PCI) Express, Accelerated Graphics Port, or HyperTransport connection); In one embodiment, parallel processing subsystem 112 is a graphics subsystem that provides pixels to a display device 110, which may be a conventional cathode ray tube, liquid crystal display, light emitting diode display, or the like. A system disk 114 is also connected to I/O bridge 107 and is configured to store content and applications and data for use by CPU 102 and parallel processing subsystem 112 . The system disk 114 provides non-volatile storage space for applications and data and can be fixed or removable hard drives, flash memory devices, and CD (Compact Disk Read Only Memory), DVD (Digital Versatility Disk ROM), Blu-ray, HD-DVD (high definition DVD) or other magnetic, optical or semiconductor storage devices.

Ein Schalter 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten, etwa einem Netzwerkadapter 118 und diversen Zusatzkarten 120 und 121 bereit. Andere Komponenten (nicht explizit gezeigt), einschließlich eines universellen seriellen Busses (USB) oder anderer Portverbindungen, Kompaktdisketten-(CD) Laufwerke, digitale Vielseitigkeitsdisketten-(DVD) Laufwerke, Filmaufzeichnungsgeräte und dergleichen können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die in 1 gezeigten diversen Kommunikationspfade, einschließlich der speziell bezeichneten Kommunikationspfade 106 und 113, können unter Anwendung beliebiger geeigneter Protokolle eingerichtet werden, etwa durch PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Busprotokolle oder Punkt-Zu-Punkt-Kommunikationsprotokolle, und Verbindungen zwischen unterschiedlichen Einrichtungen können unterschiedliche Protokolle benutzen, wie dies im Stand der Technik bekannt ist.A switch 116 provides connections between the I/O bridge 107 and other components such as a network adapter 118 and various add-in cards 120 and 121 . Other components (not explicitly shown), including a universal serial bus (USB) or other port connections, compact disk (CD) drives, digital versatile disk (DVD) drives, movie recorders, and the like may also be connected to the I/O bridge 107 . In the 1 The various communication paths shown, including specifically designated communication paths 106 and 113, may be implemented using any suitable protocol, such as PCI-Express, AGP (Accelerated Graphics Port), HyperTransport, or one or more other bus protocols or point-to-point communication protocols , and connections between different devices may use different protocols, as is known in the art.

In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafik-und Videoverarbeitung optimiert ist, wozu beispielsweise eine Videoausgabeschaltung gehört, und sie bildet eine oder mehrere Parallelverarbeitungseinheiten (PPU) 202. In einer weiteren Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für eine Verarbeitung für Allgemeinzwecke optimiert ist, wobei die zu Grunde liegende Rechenarchitektur, wie nachfolgend detaillierter beschrieben ist, beibehalten wird. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 mit einem oder mehreren anderen Systemelementen in einem einzelnen Subsystem integriert sein, etwa durch die Vereinigung der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden. Wie gut bekannt ist, sind viele grafische Verarbeitungseinheiten (GPU) so gestaltet, dass sie Operationen und Berechnungen parallel ausführen und können daher als eine Klasse von Parallelverarbeitungseinheiten (PPU) betrachtet werden.In one embodiment, parallel processing subsystem 112 includes circuitry optimized for graphics and video processing, including, for example, video output circuitry, and forms one or more parallel processing units (PPU) 202. In another embodiment, parallel processing subsystem 112 includes circuitry designed for general purpose processing is optimized while maintaining the underlying computational architecture as described in more detail below. In yet another embodiment, parallel processing subsystem 112 may be integrated with one or more other system elements into a single subsystem, such as by unifying memory bridge 105, CPU 102, and I/O bridge 107 to form a system on a chip (SoC ) to build. As is well known, many graphics processing units (GPU) are designed to perform operations and computations in parallel and can therefore be viewed as a class of parallel processing units (PPU).

Es kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 in einer einzelnen Zusatzkarte bereitgestellt sein, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 113 verbunden sein, oder eine oder mehrere PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können unterschiedliche PPUs 202 eine unterschiedliche Anzahl an Verarbeitungskernen, unterschiedliche Größen des lokalen Parallelverarbeitungsspeichers, usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, um Daten mit einem höheren Durchsatz zu verarbeiten, als dies mit einer einzelnen PPU 202 möglich wäre. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren realisiert werden, wozu Tischrechner, mobile Rechner oder Personalcomputer in Form von Handgeräten, Dienstleister, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen gehören.Any number of PPUs 202 can be included in a parallel processing subsystem 112 . For example, multiple PPUs 202 can be provided in a single option card, or multiple option cards can be connected to the communication path 113, or one or more PPUs 202 can be integrated in a bridge chip. The PPUs 202 in a multi-PPU system may be identical to or different from one another. For example, different PPUs 202 may have different numbers of processing cores, different amounts of local parallel processing memory, and so on. If multiple PPUs 202 are present, these PPUs can operate in parallel to process data at a higher throughput than would be possible with a single PPU 202. Systems incorporating one or more PPUs 202 may be implemented in a variety of configurations and form factors, including desktop, mobile or handheld personal computers, service providers, workstations, game consoles, embedded systems, and the like.

Die PPU 202 realisiert vorteilhafterweise eine äußerst parallele Verarbeitungsarchitektur. Die PPU 202 enthält eine Anzahl von allgemeinen Verarbeitungs-Clustern (GPC). Jeder GPC ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) von Strängen gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In einigen Ausführungsformen werden Einzelbefehl-Mehrfachdaten-(SIMD-) Befehlsausgabetechniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an Strängen zu handhaben, ohne dass mehrere unabhängige Befehlseinheiten vorgesehen sind. In anderen Ausführungsformen werden Einzelbefehl-Mehrfach-Strang-(SIMT-) Techniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an allgemein synchronisierten Strängen zu handhaben. Anders als ein SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, erlaubt es die SIMT-Ausführung, dass unterschiedliche Stränge besser divergenten Ausführungspfaden durch ein gegebenes Strangprogramm hindurch folgen können.The PPU 202 advantageously implements a highly parallel processing architecture. The PPU 202 contains a number of general processing clusters (GPC). Each GPC is capable of executing a large number (e.g., hundreds or thousands) of threads simultaneously, with each thread being an instance of a program. In some embodiments, single-instruction-multiple-data (SIMD) instruction issue techniques are employed to handle parallel execution of a large number of threads without providing multiple independent instruction units. In other embodiments, single instruction multiple thread (SIMT) techniques are employed to handle parallel execution of a large number of commonly synchronized threads. Unlike a SIMD execution regime, in which all processing units typically execute identical instructions, SIMT execution allows different threads to better follow divergent execution paths through a given thread program.

GPCs enthalten eine Anzahl an Datenstrom-Multiprozessoren (SM), wobei jeder SM ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Die Reihe von Befehlen, die einem speziellen GPC zugeleitet wird, bildet einen Strang, wie dies zuvor hierin definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen über die Parallelverarbeitungseinheiten innerhalb eines SM hinweg, wird hierin als eine „Kette“ oder „Stranggruppe“ bezeichnet. Im hierin verwendeten Sinne bezeichnet eine „Stranggruppe“ eine Gruppe von Strängen, die gleichzeitig das gleiche Programm an unterschiedlichen Eingangsdaten ausführen, wobei ein einzelner Strang der Stranggruppe jeweils einer anderen Verarbeitungseinheit innerhalb eines SM zugeordnet ist. Ferner können mehrere zusammengehörende Stranggruppen gleichzeitig (in unterschiedlichen Phasen der Ausführung) innerhalb eines SM aktiv sein. Diese Ansammlung an Stranggruppen wird hierin als ein „kooperatives Strang- Array“ („CTA“) oder „Strang-Array“ bezeichnet.GPCs contain a number of stream multiprocessors (SM), each SM configured to process one or more thread groups. The set of instructions dispatched to a particular GPC forms a thread, as previously defined herein, and the aggregation of a certain number of concurrently executing threads across the parallel processing units within an SM is referred to herein as a "chain" or " strand group”. As used herein, a "thread group" means a group of threads that are concurrently executing the same program on different input data, with a single thread of the thread group being dedicated to a different processing unit within an SM. Furthermore, several related thread groups can be active simultaneously (in different phases of execution) within an SM. This collection of strand groups is referred to herein as a "cooperative strand array"("CTA") or "strand array".

In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder einen oder mehrere andere Prozessoren eines Rechensystems zu verwenden, um Berechnungen für Allgemeinzwecke unter Anwendung von Strang-Arrays auszuführen. Jeder Strang in dem Strang-Array hat eine zugeordnete eindeutige Strangkennung-Kennung („Strang-ID“), auf die der Strang während der Ausführung des Strangs zugreifen kann. Die Strang-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert diverse Aspekte des Verarbeitungsverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welchen Bereich des Eingangsdatensatzes ein Strang zu verarbeiten hat, und/oder um zu bestimmen, welchen Bereich eines Ausgangsdatensatzes ein Strang zu erzeugen oder zu schreiben hat.In embodiments of the present invention, it is desirable to use the PPU 202 or one or more other processors of a computing system to perform general purpose computations using thread arrays. Each thread in the thread array has an associated unique thread identifier identifier ("thread ID") that the thread can access during execution of the thread. The thread ID, which can be defined as a one-dimensional or multi-dimensional numeric value, controls various aspects of the processing behavior of the thread. For example, a thread ID may be used to determine which portion of the input data set a thread is to process and/or to determine which portion of an output data set a thread is to create or write.

Während des Betriebs ist die CPU 102 der übergeordnete Prozessor des Computersystems 100, um den Betrieb anderer Systemkomponenten zu steuern und zu koordinieren. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Express-Verbindung, in der spezielle Bahnen jeder PPU 202 zugewiesen sind, wie dies im Stand der Technik bekannt ist. Andere Kommunikationspfade können ebenfalls verwendet werden. Die PPU 202 realisiert vorteilhafterweise eine äußerst parallele Verarbeitungsarchitektur. Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungsspeicher (PPU-Speicher) versehen sein.During operation, CPU 102 is the master processor of computer system 100 to control and coordinate the operation of other system components. In particular, the CPU 102 issues commands that control the operation of the PPUs 202. In one embodiment, communication path 113 is a PCI Express connection in which specific lanes are assigned to each PPU 202, as is known in the art. Other communication paths can also be used. The PPU 202 advantageously implements a highly parallel processing architecture. A PPU 202 can be provided with any amount of local parallel processing (PPU) memory.

In einigen Ausführungsformen umfasst der Systemspeicher 104 einen vereinheitlichten bzw. vereinigten virtuellen Speicher-(UVM) Treiber 101. Der UVM-Treiber 101 enthält Befehle zur Ausführung diverser Aufgaben, die die Verwaltung eines vereinheitlichten virtuellen Speicher-(UVM) Systems, das gemeinsam für die CPU 102 und die PPUs 202 vorliegt, betrifft. Unter anderem ermöglicht die Architektur, dass die CPU 102 und die PPU 202 auf eine physikalische Speicherstelle zugreifen, wobei eine gemeinsame virtuelle Speicheradresse verwendet wird, unabhängig davon, ob die physikalische Speicherstelle innerhalb des Systemspeichers 104 oder in einem Speicher liegt, der für die PPU 202 lokal ist.In some embodiments, system memory 104 includes a unified virtual memory (UVM) driver 101. UVM driver 101 contains instructions for performing various tasks related to management of a unified virtual memory (UVM) system common to the CPU 102 and the PPUs 202 is concerned. Among other things, the architecture allows the CPU 102 and the PPU 202 to access a physical memory location using a common virtual memory address, regardless of whether the physical memory location is within system memory 104 or in memory dedicated to the PPU 202 is local.

Zu beachten ist, dass das hierin gezeigte System anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und der Anordnung von Brücken, die Anzahl an CPUs 102 und die Anzahl an Parallelverarbeitungssubsystemen 112 können nach Bedarf modifiziert werden. Beispielsweise ist in einigen Ausführungsformen der Systemspeicher 104 mit der CPU 102 direkt anstatt über eine Brücke verbunden, und andere Einrichtungen kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt mit der Speicherbrücke 105 verbunden. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als eine oder mehrere diskrete Einrichtungen vorliegen. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehr Parallelverarbeitungssubsysteme 112 aufweisen. Die speziellen hierin gezeigten Komponenten sind optional; beispielsweise kann eine beliebige Anzahl an Zusatzkarten oder peripheren Geräten gehandhabt werden. In einigen Ausführungsformen ist der Schalter 116 weggelassen und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 sind direkt mit der I/O-Brücke 107 verbunden.It should be noted that the system shown herein is illustrative in nature and that variations and modifications are possible. The interconnect topology, including the number and placement of bridges, the number of CPUs 102, and the number of parallel processing subsystems 112 can be modified as needed. For example, in some embodiments, system memory 104 is connected to CPU 102 directly rather than through a bridge, and other devices communicate with system memory 104 through memory bridge 105 and CPU 102. In other alternative topologies, parallel processing subsystem 112 is coupled to the I/O Bridge 107 or connected directly to CPU 102 instead of memory bridge 105. In still other embodiments, I/O bridge 107 and memory bridge 105 may be integrated into a single chip rather than existing as one or more discrete devices. Large embodiments may have two or more CPUs 102 and two or more parallel processing subsystems 112 . The specific components shown herein are optional; for example, any number of add-on cards or peripheral devices can be handled. In some embodiments, switch 116 is omitted and network adapter 118 and add-in cards 120, 121 connect directly to I/O bridge 107.

Vereinheitlichte virtuelle Speichersystem ArchitekturUnified virtual storage system architecture

2 ist eine Blockansicht, die ein vereinheitlichtes bzw. vereinigtes virtuelles Speicher-(UVM) System 200 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Wie gezeigt, umfasst das vereinheitlichte virtuelle Speichersystem 200, ohne Einschränkung, die CPU 102, den Systemspeicher 104 und die Parallelverarbeitungseinheit (PPU) 202, die mit einem Speicher der Parallelverarbeitungseinheit (PPU-Speicher) 204 verbunden ist. Die CPU 102 und der Systemspeicher 104 sind miteinander und mit der PPU 202 über die Speicherbrücke 105 verbunden. 2 12 is a block diagram showing a unified virtual memory (UVM) system 200 according to an embodiment of the present invention. As shown, the unified virtual memory system 200 includes, without limitation, the CPU 102, the system memory 104, and the parallel processing unit (PPU) 202 coupled to parallel processing unit (PPU) memory 204 memory. The CPU 102 and the system memory 104 are connected to each other and to the PPU 202 via the memory bridge 105 .

Die CPU 102 führt Stränge aus, die Daten, die in dem Systemspeicher 104 oder in dem PPU-Speicher 204 gespeichert sind, über eine virtuelle Speicheradresse anfordern können. Virtuelle Speicheradressen verhindern, dass Stränge, die in der CPU 102 ausgeführt werden, Kenntnis über die interne Arbeitsweise eines Speichersystems haben müssen. Daher kann ein Strang gegebenenfalls nur Kenntnis über virtuelle Speicheradressen haben, und kann auf Daten zugreifen, indem Daten über eine virtuelle Speicheradresse angefordert werden.The CPU 102 executes threads that can request data stored in the system memory 104 or in the PPU memory 204 via a virtual memory address. Virtual memory addresses prevent threads executing on CPU 102 from having to be aware of the internal workings of a memory system. Therefore, a thread may only have knowledge of virtual memory addresses, and may access data by requesting data through a virtual memory address.

Die CPU 102 umfasst eine CPU MMU 209, die Anforderungen aus der CPU 102 zur Übersetzung virtueller Speicheradressen in physikalische Speicheradressen verarbeitet. Die physikalischen Speicheradressen sind erforderlich, um auf Daten zuzugreifen, die in einer physikalischen Speichereinheit, etwa dem Systemspeicher 104 und dem PPU-Speicher 204 gespeichert sind. Die CPU 102 umfasst eine CPU-Fehlerbehandlungseinheit 211, die Schritte in Reaktion darauf hin ausführt, dass die CPU MMU 209 einen Seitenfehler erzeugt, um angeforderte Daten für die CPU 102 verfügbar zu machen. Die CPU-Fehlerbehandlungseinheit 211 ist generell eine Software, die in dem Systemspeicher 104 liegt und in der CPU 102 ausgeführt wird, wobei die Software von einem Interrupt der CPU 102 aufgerufen wird.The CPU 102 includes a CPU MMU 209 that processes requests from the CPU 102 to translate virtual memory addresses to physical memory addresses. The physical memory addresses are required to access data stored in a physical memory unit such as system memory 104 and PPU memory 204 . The CPU 102 includes a CPU error handler 211 that performs steps in response to the CPU MMU 209 generating a page fault to make requested data available to the CPU 102. The CPU error handler 211 is generally software residing in the system memory 104 and executing on the CPU 102, the software being invoked by a CPU 102 interrupt.

Der Systemspeicher 104 speichert diverse Speicherseiten (nicht gezeigt), die Daten zur Verwendung durch die Stränge, die in der CPU 102 oder der PPU 202 ausgeführt werden, enthalten. Wie gezeigt, speichert der Systemspeicher 104 eine CPU-Seitentabelle 206, die Zuordnungen zwischen virtuellen Speicheradressen und physikalischen Speicheradressen enthält. Der Systemspeicher 104 speichert ferner ein Seitenzustandsverzeichnis 210, das als eine „Haupt-Seitentabelle“ für das UVM-System 200 fungiert, wie dies nachfolgend detaillierter erläutert ist. Der Systemspeicher 104 enthält einen Fehlerpuffer 216, der Einträge enthält, die von der PPU 202 beschrieben werden, um die CPU 102 über einen Seitenfehler zu informieren, der von der PPU 202 erzeugt wurde. In einigen Ausführungsformen enthält der Systemspeicher 104 den vereinheitlichten virtuellen Speicher-(UVM) Treiber 101, der Befehle enthält, die, wenn sie ausgeführt werden, die CPU 102 veranlassen, Befehle für, unter anderem, die Behebung eines Seitenfehlers auszuführen. In alternativen Ausführungsformen kann eine beliebige Kombination des Seitenzustandsverzeichnisses 210, des Fehlerpuffers 216 und einer oder mehrerer Befehlswarteschlangen 214 in dem PPU-Speicher 204 gespeichert sein. Ferner kann eine PPU-Seitentabelle 208 in dem Systemspeicher 104 gespeichert sein.System memory 104 stores various memory pages (not shown) containing data for use by threads executing in CPU 102 or PPU 202 . As shown, system memory 104 stores a CPU page table 206 containing mappings between virtual memory addresses and physical memory addresses. The system memory 104 also stores a page state table 210 that functions as a "master page table" for the UVM system 200, as discussed in more detail below. The system memory 104 includes a fault buffer 216 which contains entries written by the PPU 202 to notify the CPU 102 of a page fault generated by the PPU 202. In some embodiments, system memory 104 includes unified virtual memory (UVM) driver 101, which includes instructions that, when executed, cause CPU 102 to execute instructions for, among other things, page fault recovery. In alternative embodiments, any combination of the page state table 210, the error buffer 216, and one or more command queues 214 may be stored in the PPU memory 204. A PPU page table 208 may also be stored in system memory 104 .

Ähnlich wie bei der CPU 102 führt die PPU 202 Befehle aus, die Daten, die in dem Systemspeicher 104 oder in dem PPU-Speicher 204 gespeichert sind, über eine virtuelle Speicheradresse anfordern können. Die PPU 202 umfasst eine PPU MMU 213, die Anforderungen aus der PPU 202 zur Übersetzung virtueller Speicheradressen in physikalische Speicheradressen verarbeitet. Die PPU 202 enthält eine Kopiereinheit 212, die Befehle ausführt, die in der Befehlswarteschlange 214 gespeichert sind, um Speicherseiten zu kopieren, Daten in der PPU-Speichertabelle 208 zu modifizieren, und führt auch andere Befehle aus. Eine PPU-Fehlerbehandlungseinheit 215 führt Schritte in Reaktion auf einen Seitenfehler in der PPU 202 aus. Die PPU-Fehlerbehandlungseinheit 215 kann eine Software sein, die in einem Prozessor oder in einer speziellen Mikrosteuerung in der PPU 202 ausgeführt wird, oder die PPU-Fehlerbehandlungseinheit 215 kann eine Software sein, die in der CPU 102 ausgeführt wird, wobei das zuletzt genannte die bevorzugte Wahl ist. In einigen Ausführungsformen sind die CPU-Fehlerbehandlungseinheit 211 und die PPU-Fehlerbehandlungseinheit 215 ein vereinheitlichtes bzw. vereinigtes Softwareprogramm, das durch einen Fehler in der CPU 102 oder in der PPU 202 aufgerufen wird. Die Befehlswarteschlange 214 kann in dem PPU-Speicher 204 oder in dem Systemspeicher 104 liegen, ist aber vorzugsweise in dem Systemspeicher 104 angeordnet.Similar to CPU 102, PPU 202 executes instructions that may request data stored in system memory 104 or PPU memory 204 via a virtual memory address. The PPU 202 includes a PPU MMU 213 that processes requests from the PPU 202 to translate virtual memory addresses to physical memory addresses. The PPU 202 includes a copy unit 212 that executes commands stored in the command queue 214 to copy memory pages, modify data in the PPU memory table 208, and also executes other commands. A PPU error handler 215 performs steps in response to a page fault in the PPU 202. The PPU error handler 215 may be software running in a processor or dedicated microcontroller in the PPU 202, or the PPU error handler 215 may be software running in the CPU 102, the latter being the preferred choice is. In some embodiments, CPU error handler 211 and PPU error handler 215 are a unified software program that is invoked by an error in CPU 102 or PPU 202 . The command queue 214 may reside in the PPU memory 204 or in the system memory 104, but is preferably located in the system memory 104.

In einigen Ausführungsformen sind die CPU-Fehlerbehandlungseinheit 211 und der UVM-Treiber 101 ein vereinheitlichtes Softwareprogramm. In derartigen Fällen kann das vereinheitlichte Softwareprogramm eine Software sein, die in dem Systemspeicher 104 liegt und in der CPU 102 ausgeführt wird. Die PPU-Fehlerbehandlungseinheit 215 kann ein separates Softwareprogramm sein, das in einem Prozessor oder einer speziellen Mikrosteuerung in der PPU 202 abläuft, oder die PPU-Fehlerbehandlungseinheit 215 kann ein separates Softwareprogramm sein, das in der CPU 102 ausgeführt wird.In some embodiments, the CPU error handler 211 and the UVM driver 101 are a unified software program. In such cases, the unified software program may be software residing in system memory 104 and executing on CPU 102 . The PPU error handler 215 may be a separate software program running on a processor or dedicated microcontroller in the PPU 202, or the PPU error handler 215 may be a separate software program running on the CPU 102.

In anderen Ausführungsformen sind die PPU-Fehlerbehandlungseinheit 215 und der UVM-Treiber 101 ein vereinheitlichtes Softwareprogramm. In derartigen Fällen kann das vereinheitlichte Softwareprogramm eine Software sein, die in dem Systemspeicher 104 liegt und in der CPU 102 ausgeführt wird. Die CPU-Fehlerbehandlungseinheit 211 kann ein separates Softwareprogramm sein, das in dem Systemspeicher 104 liegt und in der CPU 102 ausgeführt wird.In other embodiments, the PPU error handler 215 and the UVM driver 101 are a unified software program. In such cases, the unified software program may be software residing in system memory 104 and executing on CPU 102 . CPU error handling unit 211 may be a separate software program residing in system memory 104 and executing on CPU 102 .

In anderen Ausführungsformen sind die CPU-Fehlerbehandlungseinheit 211, die PPU-Fehlerbehandlungseinheit 215 und der UVM-Treiber 101 ein vereinheitlichtes Softwareprogramm. In derartigen Fällen kann das vereinheitlichte Softwareprogramm eine Software sein, die in dem Systemspeicher 104 liegt und in der CPU 102 ausgeführt wird.In other embodiments, the CPU error handler 211, the PPU error handler 215, and the UVM driver 101 are a unified software program. In such cases the unified software program may be software residing in system memory 104 and executing on CPU 102 .

In einigen Ausführungsformen können die CPU-Fehlerbehandlungseinheit 211, die PPU-Fehlerbehandlungseinheit 215 und der UVM-Treiber 101 jeweils in dem Systemspeicher 104 liegen, wie dies zuvor beschrieben ist. Wie in 2 gezeigt ist, liegt der UVM-Treiber 101 in dem Systemspeicher 104, während die CPU-Fehlerbehandlungseinheit 211 und die PPU-Fehlerbehandlungseinheit 215 in der CPU 102 liegen.In some embodiments, CPU error handler 211, PPU error handler 215, and UVM driver 101 may each reside in system memory 104, as previously described. As in 2 As shown, the UVM driver 101 resides in the system memory 104, while the CPU error handler unit 211 and the PPU error handler unit 215 reside in the CPU 102.

Die CPU-Fehlerbehandlungseinheit 211 und die PPU-Fehlerbehandlungseinheit 215 reagieren auf Hardware-Interrupte, die aus der CPU 102 oder der PPU 202 stammen, etwa Interrupte, die sich aus einem Seitenfehler ergeben. Wie nachfolgend beschrieben ist, enthält der UVM-Treiber 101 Befehle zur Ausführung diverser Aufgaben, die mit der Verwaltung des UVM-Systems 200 in Beziehung stehen, wozu gehören, ohne Einschränkung, die Behebung eines Seitenfehlers und der Zugriff auf die CPU-Seitentabelle 206, das Seitenzustandsverzeichnis 210, die Befehlswarteschlange 214 und/oder den Fehlerpuffer 216.CPU error handler 211 and PPU error handler 215 respond to hardware interrupts originating from CPU 102 or PPU 202, such as interrupts resulting from a page fault. As described below, the UVM driver 101 contains instructions for performing various tasks related to the administration of the UVM system 200, including, without limitation, recovering a page fault and accessing the CPU page table 206, the page state table 210, the command queue 214 and/or the error buffer 216.

In einigen Ausführungsformen haben die CPU-Seitentabelle 206 und die PPU-Seitentabelle 208 unterschiedliche Formate und enthalten eine unterschiedliche Information; beispielsweise kann die PPU-Seitentabelle 208 das folgende enthalten, während die CPU-Seitentabelle 206 dies nicht tut: ein Atomar-Deaktivierungs-Bit; Komprimierungsmarken; und Speicheraustauschtyp.In some embodiments, CPU page table 206 and PPU page table 208 have different formats and contain different information; for example, PPU page table 208 may include the following while CPU page table 206 does not: an atomic disable bit; compression marks; and memory exchange type.

Ähnlich wie bei dem Systemspeicher 104 enthält der PPU-Speicher 204 diverse Speicherseiten (nicht gezeigt). Wie gezeigt, kann der PPU-Speicher 204 auch die PPU-Seitentabelle 208 enthalten, die Zuordnungen zwischen virtuellen Speicheradressen und physikalische Speicheradressen enthält. Alternativ kann die PPU-Seitentabelle 208 in dem Systemspeicher 104 gespeichert sein.Similar to system memory 104, PPU memory 204 includes various pages of memory (not shown). As shown, PPU memory 204 may also include PPU page table 208, which contains mappings between virtual memory addresses and physical memory addresses. Alternatively, PPU page table 208 may be stored in system memory 104 .

SeitenzustandsverzeichnisPage State Directory

3 ist eine Konzeptansicht eines Systems 300 zur Verfolgung des Zustands von Speicherseiten gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das System 301 ein Seitenzustandsverzeichnis 210, das mit einer CPU-Seitentabelle 206 und eine PPU-Seitentabelle 208 gekoppelt ist. 3 Figure 300 is a conceptual view of a system 300 for tracking the state of memory pages according to an embodiment of the present invention. As shown, the system 301 includes a page state table 210 coupled to a CPU page table 206 and a PPU page table 208 .

Das Seitenzustandsverzeichnis 210 ist eine Datenstruktur, die Zuordnungen speichert, die jeder Speicherseite in einem speziellen virtuellen Speicheradressenraum verknüpft sind. Um eine physikalische Adresse aus dem PSD 210 zu erhalten, liefert eine Anforderungseinheit eine angeforderte virtuelle Adresse an das PSD 210, das eine Nachschlagoperation auf der Grundlage der virtuellen Adresse ausführt. In einigen Ausführungsformen ist das PSD 210 in der Lage, Speicherseiten mit unterschiedlichen Größen zu verfolgen. Um dies zu bewerkstelligen, enthält das PSD 210 mehrere Arrays bzw. Felder. Beispielsweise verwaltet ein erstes Array CPU-dimensionierte Seiten, und ein zweites Array verwaltet PPU-dimensionierte Seiten.The page state table 210 is a data structure that stores allocations associated with each memory page in a specific virtual memory address space. To obtain a physical address from the PSD 210, a requestor provides a requested virtual address to the PSD 210, which performs a lookup operation based on the virtual address. In some embodiments, PSD 210 is capable of tracking memory pages of different sizes. To accomplish this, PSD 210 includes several arrays. For example, a first array manages CPU-sized pages and a second array manages PPU-sized pages.

Obwohl das Seitenzustandsverzeichnis 210 in einer beliebigen technisch machbaren Weise realisiert werden kann, enthält in einer Ausführungsform das Seitenzustandsverzeichnis 210 eine Mehrebenen-Tabelle. Jede Nicht-Blatt-Ebene enthält ein Array aus Zeigern auf Einträge in der nächsten Ebene. Zeiger können auf Einträge in dem PPU-Speicher 204 oder dem Systemspeicher 104 zeigen.Although page state table 210 may be implemented in any technically feasible manner, in one embodiment page state table 210 includes a multi-level table. Each non-leaf level contains an array of pointers to entries in the next level. Pointers may point to entries in PPU memory 204 or system memory 104.

Die CPU 102 oder die PPU 202 aktualisiert das PSD 210. Aktualisierungen an einer Seite des PSD 210 in dem Systemspeicher 104 können bewerkstelligt werden, indem atomare bzw. unteilbare Operationen in Form von vergleichen-undvertauschen über den PCI-E-Bus verwendet werden. Aktualisierungen an Seiten des PSD 210 in dem PPU-Speicher 204 können bewerkstelligt werden, indem eine Aktualisierungsanforderung in einem PSD-Aktualisierung-Ringpuffer angeordnet wird, der in dem Systemspeicher enthalten ist. Ein Agent prüft den Ringpuffer, um Aktualisierungen vor einer Leseoperation an dem PSD 210 anzuwenden.The CPU 102 or the PPU 202 updates the PSD 210. Updates to a page of the PSD 210 in the system memory 104 can be accomplished using atomic compare-and-swap operations over the PCI-E bus. Updates to the PSD 210 side in PPU memory 204 may be accomplished by placing an update request in a PSD update ring buffer contained in system memory. An agent checks the ring buffer to apply updates to the PSD 210 before a read operation.

Wie nachfolgend beschrieben ist, können mehrere virtuelle Speicheradressenräume existieren. Zwei unterschiedliche Prozesse, die in der CPU 102 ausgeführt werden, können zwei unterschiedlichen virtuellen Speicheradressenräumen zugeordnet sein. Einige Prozesse können Adressenräume gemeinsam benutzen. Für jeden virtuellen Speicheradressenraum gibt es ein PSD 210.As described below, multiple virtual memory address spaces can exist. Two different processes executing on CPU 102 may be associated with two different virtual memory address spaces. Some processes can share address spaces. There is a PSD 210 for each virtual memory address space.

Unterschiedliche PSD 210 können jeweils eine Zuordnung für die gleiche Speicherstelle in dem Systemspeicher 104 oder dem PPU-Speicher 204 enthalten. In einem derartigen Falle kann ein einzelner Prozess als der Besitzer der Speicherstelle ausgewiesen werden. Das PSD 210, das diesem einzelnen Prozess entspricht, wird als das „Besitzer-PSD“ betrachtet. Das Besitzer-PSD enthält eine Zuordnung zu dem Speicherplatz, und das PSD 210 für alle anderen Prozesse, die Zuordnungen für diese Speicherstelle, beinhalten eine Verknüpfung zu der Zuordnung in dem Besitzer-PSD.Different PSD 210 may each contain a mapping for the same memory location in system memory 104 or PPU memory 204 . In such a case, a single process can be designated as the owner of the memory location. The PSD 210 corresponding to this single process is considered the "owner PSD". The owner PSD contains a mapping to the store memory space, and the PSD 210 for all other processes that have allocations for that memory location, contain a link to the allocation in the owning PSD.

Wenn ein Prozess, der mit einem speziellen PSD 210 verknüpft ist, eine spezielle Zuordnung, die zu einer speziellen Speicherstelle gehört, nicht mehr benötigt, bewirkt der Prozess, dass die Zuordnung aus dem PSD 210, das zu diesem Prozess gehört, entfernt wird. Die Zuordnung wird in einer Abschlussliste angeordnet. Zu diesem Zeitpunkt können andere PSD 210 weiterhin Zuordnungen auf die Speicherstelle enthalten. Diese PSD 210 enthalten weiterhin diese Zuordnung, bis die mit diesen PSD 210 verknüpften Prozesse ermitteln, dass die Zuordnung nicht mehr benötigt wird. Wenn kein PSD 210 Zuordnungen enthält, die mit der Speicherstelle verknüpft sind, dann wird die Zuordnung aus der Abschlussliste entfernt.When a process associated with a particular PSD 210 no longer requires a particular mapping associated with a particular memory location, the process causes the mapping to be removed from the PSD 210 associated with that process. The assignment is arranged in a final list. At this point, other PSDs 210 may still contain mappings to the storage location. Those PSD 210 will continue to contain that mapping until the processes associated with that PSD 210 determine that the mapping is no longer needed. If no PSD 210 contains assignments associated with the location, then the assignment is removed from the final list.

Einträge in dem PSD 210 enthalten eine Zuordnung zwischen einer virtuellen Speicheradresse und einer physikalischen Speicheradresse. Die Einträge enthalten ferner eine Zustandsinformation für die Speicherseite, die mit dem Eintrag verknüpft ist. Die folgende Liste enthält einige beispielhafte Zustände, die in den PSD- Einträgen in diversen Ausführungsformen der Erfindung enthalten sein können. „Exklusiv“ - eine Speicherseite kann als „Exklusiv“ betrachtet werden, was bedeutet, dass die Speicherseite nicht dupliziert und sichtbar ist für eine PPU 202 oder eine CPU 102 oder für beide. Der „exklusive“ Zustand ist ähnlich zu dem „PPUeigen“ oder „CPU-eigen“ Zustand, der nachfolgend erläutert wird. „Gemeinsam-nicht zwischengespeichert“ - eine Speicherseite kann als „gemeinsam-nicht zwischengespeichert“ betrachtet werden, was bedeutet, dass die Speicherseite nicht dupliziert ist, dass sie aber für eine oder mehrere PPUs 202 und/oder eine oder mehrere CPUs 102 sichtbar ist. Der „gemeinsam-nicht zwischengespeichert“ Zustand ist ähnlich zu dem „CPU-gemeinsam“ Zustand, der nachfolgend erläutert ist, mit der zusätzlichen Eigenschaft „nicht zwischengespeichert“, was bedeutet „nicht dupliziert“. Eine Speicherseite kann in mehr als einer Speichereinheit vorhanden sein (beispielsweise sowohl in dem Systemspeicher 104 als auch in dem PPU-Speicher 204) und kann somit „dupliziert“ sein. „Lesen-dupliziert“ - eine Speicherseite wird als „Lesen-dupliziert“ betrachtet, was bedeutet, dass mehr als eine Kopie der Speicherseite existiert und das mindestens eine der Kopien lokal für eine CPU 102 oder eine PPU 202 ist und nur für das Lesen durch diese CPU 102 oder PPU 202 verfügbar ist. „Migrieren bzw. Verschieben-nur-lesen“ - eine Speicherseite wird als „Migrieren bzw. Verschieben-nur-lesen“ betrachtet, was bedeutet, dass die Speicherseite gerade dabei ist, verschoben zu werden. Beispielsweise ist das UVM-System 200 im Prozess des Verschiebens der Speicherseite von dem PPU-Speicher 204 zu dem Systemspeicher 104. Da die Speicherseite als „Migrieren bzw. Verschiben-nur-lesen“ betrachtet wird, kann die Speicherseite nur gelesen aber nicht beschrieben werden, wenn sie in diesen Zustand ist. „Migrieren-unsichtbar“ - eine Speicherseite kann als „Migrieren bzw. Verschieben-unsichtbar“ betrachtet werden, was bedeutet, dass die Speicherseite gerade verschoben wird, aber die Speicherseite „unsichtbar“ ist, was bedeutet, dass kein Prozess die Speicherseite lesen oder beschreiben kann. „Eintrag-Weiterleitung-Eintrag“ - ein spezieller Eintrag in einem PSD 210 wird als ein „Eintrag-Weiterleitung-Eintrag“ betrachtet, was bedeutet, dass der Eintrag eine Verknüpfung zu einem anderen Eintrag in dem PSD 210 enthält, der eine Zuordnung enthält, die mit der Speicherseite verknüpft ist.Entries in the PSD 210 contain a mapping between a virtual memory address and a physical memory address. The entries also contain state information for the memory page associated with the entry. The following list includes some example states that may be included in the PSD entries in various embodiments of the invention. "Exclusive" - a memory page may be considered "exclusive" meaning that the memory page is non-duplicated and visible to a PPU 202 or a CPU 102 or both. The "exclusive" state is similar to the "PPU native" or "CPU native" state discussed below. "Shared-uncached" - a memory page can be considered "shared-uncached", meaning that the memory page is not duplicated, but that it is visible to one or more PPUs 202 and/or one or more CPUs 102. The "shared-uncached" state is similar to the "CPU-shared" state discussed below, with the additional property "uncached" meaning "not duplicated". A memory page may reside in more than one memory unit (e.g., both system memory 104 and PPU memory 204) and thus may be "duplicated". "Read-duplicated" - a memory page is considered "read-duplicated", meaning that more than one copy of the memory page exists and that at least one of the copies is local to a CPU 102 or PPU 202 and for read-through only that CPU 102 or PPU 202 is available. "Migrate or move read-only" - a memory page is considered "migrate or move read-only", meaning that the memory page is in the process of being moved. For example, the UVM system 200 is in the process of moving the memory page from the PPU memory 204 to the system memory 104. Since the memory page is considered to be "migrating-read-only", the memory page can only be read but not written when she is in this state. "Migrate-invisible" - a memory page can be considered "migrate-invisible", meaning the memory page is in the process of being moved, but the memory page is "invisible", meaning no process can read or write to the memory page can. "Entry-Forward-Entry" - a particular entry in a PSD 210 is considered an "Entry-Forward-Entry", meaning that the entry contains a link to another entry in the PSD 210 that contains an association, associated with the memory page.

Das UVM-System 200 kann Speicherseiten in einem Hintergrundspeicher speichern, etwa einem Speicherplatz auf einer Festplatte. Der UVM-Treiber 101 oder das Betriebssystem überwacht die Speicherseiten, die in dem Hintergrund Speicher gespeichert sind. Wenn eine Nachschlagoperationen, die an dem PSD 210 ausgeführt wird, anzeigt, dass eine Speicherseite im Hintergrundspeicher gespeichert ist, dann verschiebt der UVM-Treiber 101 die Speicherseite von dem Hintergrundspeicher zu dem Systemspeicher 104 oder dem PPU-Speicher 204. Nachdem die Speicherseite von dem Hintergrund Speicher kopiert ist, wiederholt der UVM-Treiber 101 das Nachschlagen bzw. den Suchvorgang an dem PSD 210.The UVM system 200 may store pages of memory in a backing store, such as a location on a hard drive. The UVM driver 101 or the operating system monitors the memory pages stored in the background memory. If a lookup operation performed on the PSD 210 indicates that a memory page is stored in the backing memory, then the UVM driver 101 moves the memory page from the backing memory to the system memory 104 or the PPU memory 204. After the memory page from the background memory is copied, the UVM driver 101 repeats the lookup at the PSD 210.

Die folgende Tabelle zeigt Beispiele von PSD-Einträgen. Jede Zeile zeigt einen unterschiedlichen anschaulichen Eintrag. Zustand Daten es gibt weitere Seiten zu der Seite Weiterleitung der Adresse Unzulässiger Eintrag Keine Verschieben (nur lesen) Keine Verschieben (unsichtbar) Keine Exklusiver Eintrag Erlaubter Zugriff Physikalische Adresse Gemeinsam-nicht zwischengespeicherter-Eintrag Physikalische Adresse Erlaubter Zugriff Lesen duplizierter Eintrag Bloom-Filter, für welchen der Prozessor diese Seite hat Physikalische Adresse The table below shows examples of PSD entries. Each row shows a different illustrative entry. Condition Data there are other pages to the site address forwarding Invalid entry No Move (read only) No move (invisible) No Exclusive entry Allowed access physical address Shared non-cached entry physical address Allowed access Read duplicate entry Bloom filter for which the processor has this page physical address

Übersetzen virtueller SpeicheradressenTranslation of virtual memory addresses

Es sei zurück auf 2 verwiesen; wenn ein Strang, der in der CPU 102 ausgeführt wird, Daten über eine virtuelle Speicheradresse anfordert, dann fordert die CPU 102 die Übersetzung der virtuellen Speicheradresse in eine physikalische Speicheradresse aus der CPU-Speicherverwaltungseinheit (CPU MMU) 209 an. Daraufhin versucht die CPU MMU 209 die virtuelle Speicheradresse in eine physikalische Speicheradresse zu übersetzen, die eine Stelle in einer Speichereinheit, etwa in dem Systemspeicher 104, angibt, die die von der CPU 102 angeforderten Daten speichert.It's back up 2 referred; when a thread executing in the CPU 102 requests data via a virtual memory address, then the CPU 102 requests the translation of the virtual memory address to a physical memory address from the CPU memory management unit (CPU MMU) 209 . The CPU MMU 209 then attempts to translate the virtual memory address to a physical memory address that specifies a location in a memory unit, such as system memory 104, that stores the data requested by the CPU 102.

Um eine virtuelle Speicheradresse in eine physikalische Speicheradresse zu übersetzen, führt die CPU MMU 209 eine Nachschlagoperation aus, um zu ermitteln, ob die CPU-Seitentabelle 206 eine Zuordnung, die mit der virtuellen Speicheradresse verknüpft ist, enthält. Zusätzlich zu einer virtuellen Speicheradresse kann eine Anforderung zum Zugreifen auf Daten ferner einen virtuellen Speicheradressenraum angeben. Das vereinheitlichte virtuelle Speichersystem 200 kann mehrere virtuelle Speicheradressenräume realisieren, wovon jeder einem oder mehreren Strängen zugeordnet ist. Virtuelle Speicheradressen sind in einem gegebenen virtuellen Speicheradressenraum eindeutig. Ferner sind virtuelle Speicheradressen innerhalb eines gegebenen virtuellen Speicheradressenraums konsistent in Bezug auf die CPU 102 und die PPU 202, so dass es möglich ist, dass die gleiche virtuelle Adresse die gleichen Daten für die CPU 102 und die PPU 202 kennzeichnet. In einigen Ausführungsformen können zwei virtuelle Speicheradressen in dem gleichen virtuellen Adressenraum die gleichen Daten bezeichnen, aber sind generell nicht der gleichen physikalischen Speicheradresse zugeordnet (beispielsweise haben die CPU 102 und die PPU 202 jeweils eine lokale Kopie der Daten mit nur lesendem Zugriff.)To translate a virtual memory address to a physical memory address, the CPU MMU 209 performs a lookup operation to determine if the CPU page table 206 contains a mapping associated with the virtual memory address. In addition to a virtual memory address, a request to access data may also specify a virtual memory address space. The unified virtual memory system 200 may implement multiple virtual memory address spaces, each associated with one or more threads. Virtual memory addresses are unique within a given virtual memory address space. Furthermore, within a given virtual memory address space, virtual memory addresses are consistent between CPU 102 and PPU 202, so it is possible for the same virtual address to identify the same CPU 102 and PPU 202 data. In some embodiments, two virtual memory addresses in the same virtual address space may refer to the same data, but generally do not map to the same physical memory address (e.g., CPU 102 and PPU 202 each have a local read-only copy of the data.)

Für eine gegebene virtuelle Speicheradresse kann die CPU-Seitentabelle 206 eine Zuordnung zwischen der virtuellen Speicheradresse und einer physikalischen Speicheradresse enthalten oder auch nicht. Wenn die CPU-Seitentabelle 206 eine Zuordnung enthält, dann liest die CPU MMU 290 diese Zuordnung aus, um eine physikalische Speicheradresse zu ermitteln, die mit der virtuellen Speicheradresse verknüpft ist, und liefert diese physikalische Speicheradresse an die CPU 102. Wenn jedoch die CPU-Seitentabelle 206 keine Zuordnung enthält, die mit der virtuellen Speicheradresse verknüpft ist, dann ist die CPU MMU 209 nicht in der Lage, die virtuelle Speicheradresse in die physikalische Speicheradresse zu übersetzen, und die CPU MMU 209 erzeugt einen Seitenfehler. Um einen Seitenfehler zu beheben und um die angeforderten Daten für die CPU 102 verfügbar zu machen, wird eine „Seitenfehlersequenz“ ausgeführt. Insbesondere liest die CPU 102 das PSD 210, um den aktuellen Zuordnungszustand der Seite zu ermitteln und bestimmt dann die geeignete Seitenfehlersequenz. Die Seitenfehlersequenz ordnet generell die Speicherseite, die mit der angeforderten virtuellen Speicheradresse verknüpft ist, zu oder ändert die Art von Zugriffen, die zulässig sind (beispielsweise Lesezugriff, Schreibzugriff, atomarer bzw. ungeteilter Zugriff), sofern nicht ein fataler Fehler aufgetreten ist. Die unterschiedlichen Arten von Seitenfehlersequenzen, die in den UVM-System 200 eingerichtet sind, sind nachfolgend detaillierter erläutert.For a given virtual memory address, the CPU page table 206 may or may not contain a mapping between the virtual memory address and a physical memory address. If the CPU page table 206 contains a mapping, then the CPU MMU 290 reads that mapping to determine a physical memory address associated with the virtual memory address and provides that physical memory address to the CPU 102. However, if the CPU If the page table 206 does not contain a mapping associated with the virtual memory address, then the CPU MMU 209 is unable to translate the virtual memory address to the physical memory address and the CPU MMU 209 generates a page fault. In order to recover from a page fault and make the requested data available to the CPU 102, a "page fault sequence" is executed. Specifically, the CPU 102 reads the PSD 210 to determine the current allocation state of the page and then determines the appropriate page fault sequence. The page fault sequence generally allocates the memory page associated with the requested virtual memory address or changes the type of accesses that are allowed (e.g., read, write, atomic, or atomic, respectively) unless a fatal error has occurred. The different types of page fault sequences implemented in the UVM system 200 are explained in more detail below.

In dem UVM-System 200 können Daten, die zu einer gegebenen virtuellen Speicheradresse gehören, in dem Systemspeicher 104, in dem PPU-Speicher 204 oder sowohl in dem Systemspeicher 104 als auch in dem PPU-Speicher 204 als Kopien der gleichen Daten für nur lesenden Zugriff gespeichert werden. Ferner können für derartige Daten die CPU-Seitentabelle 206 und/oder die PPU-Seitentabelle 208 eine Zuordnung enthalten, die mit diesen Daten verknüpft ist. Zu beachten ist, dass gewisse Daten existieren können, für die eine Zuordnung in einer Seitentabelle besteht, aber nicht in der anderen. Jedoch enthält das PSD 210 alle Zuordnungen, die in der PPU-Seitentabelle 208 gespeichert sind und die PPUrelevanten Zuordnungen, die in der CPU-Seitentabelle 206 gespeichert sind. Das PSD 210 dient somit als eine „Haupt-“ Seitentabelle für das vereinheitlichte virtuelle Speichersystem 200. Wenn daher die CPU MMU 209 keine Zuordnung in der CPU-Seitentabelle 206, die mit einer speziellen virtuellen Speicheradresse verknüpft ist, findet, liest die CPU 102 das PSD 210 aus, um zu ermitteln, ob das PSD 210 eine mit dieser speziellen virtuellen Speicheradresse verknüpfte Zuordnung enthält. Diverse Ausführungsformen des PSD 210 können unterschiedliche Arten von Information enthalten, die mit virtuellen Speicheradressen verknüpft sind, zusätzlich zu den Zuordnungen, die mit der virtuellen Speicheradresse verknüpft sind.In the UVM system 200, data associated with a given virtual memory address may be stored in system memory 104, in PPU memory 204, or in both system memory 104 and PPU memory 204 as read-only copies of the same data access are saved. Further, for such data, the CPU page table 206 and/or the PPU page table 208 may contain a mapping associated with that data. Note that there may be some data that is mapped in one side table but not in the other. However, the PSD 210 contains all mappings stored in the PPU page table 208 and the PPU relevant mappings stored in the CPU page table 206. The PSD 210 thus serves as a "master" page table for the unified virtual memory system 200. Therefore, if the CPU MMU 209 does not find a mapping in the CPU page table 206 associated with a particular virtual memory address, the CPU 102 reads that PSD 210 to determine if PSD 210 contains a mapping associated with that particular virtual memory address. Various embodiments of PSD 210 may include different types of information associated with virtual memory addresses, in addition to mappings associated with the virtual memory address.

Wenn die CPU MMU 209 einen Seitenfehler erzeugt, führt die CPU-Fehlerbehandlungseinheit 211 eine Sequenz an Operationen für die geeignete Seitenfehlersequenz aus, um den Seitenfehler zu beheben. Während einer Seitenfehlersequenz liest wiederum die CPU 102 das PSD 210 aus und führt weitere Operationen durch, um die Zuordnungen oder Freigaben in der CPU-Seitentabelle 206 und der PPU-Seitentabelle 208 zu ändern. Derartige Operationen können das Lesen und/oder Modifizieren der CPU-Seitentabelle 206, das Lesen und/oder Modifizieren von Einträgen des Seitenzustandsverzeichnisses 210 und/oder die Migration bzw. Verschiebung von Datenblöcken, die als „Speicherseiten“ bezeichnet werden, zwischen Speichereinheiten (beispielsweise dem Systemspeicher 104 und dem PPU-Speicher 204) beinhalten.When the CPU MMU 209 generates a page fault, the CPU fault handler unit 211 performs a sequence of operations on the appropriate page fault sequence to recover from the page fault. Again, during a page fault sequence, the CPU 102 reads the PSD 210 and performs other operations to change the CPU page table 206 and PPU page table 208 allocations or deallocations. Such operations may include reading and/or modifying CPU page table 206, reading and/or modifying page state table 210 entries, and/or migrating blocks of data, referred to as "memory pages", between memory devices (e.g., the system memory 104 and the PPU memory 204).

4 ist eine Konzeptdarstellung eines Systems 400 zur Implementierung einer Verschiebungsoperation gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das System 401 ein Seitenzustandsverzeichnis 210, den Systemspeicher 104 und den PPU-Speicher 204. 4 Figure 4 is a conceptual representation of a system 400 for implementing a relocation operation according to an embodiment of the present invention. As shown, the system 401 includes a page state table 210, system memory 104, and PPU memory 204.

Wie zuvor erläutert ist, speichert das Seitenzustandsverzeichnis 210 PSD-Einträge 401, die die gesamte oder einen Teil einer virtuellen Speicheradresse 402, die gesamte oder einen Teil einer physikalischen Speicheradresse 404 und eine Zustandsinformation 406 angeben. Die PSD-Einträge 401 bilden somit virtuelle Speicheradressen 402 auf physikalische Speicheradressen 404 ab.As previously explained, the page state directory 210 stores PSD entries 401 specifying all or part of a virtual memory address 402, all or part of a physical memory address 404, and state information 406. The PSD entries 401 thus map virtual memory addresses 402 to physical memory addresses 404 .

In Reaktion auf einen Seitenfehler kann der UVM-Treiber 101 ermitteln, dass eine Speicherseite, etwa eine Speicherseite 408, von einer Speichereinheit zu einer anderen Speichereinheit zu migrieren bzw. verschieben ist, um den Seitenfehler zu beheben. Beispielsweise kann der UVM-Treiber 101 ermitteln, dass die Speicherseite 408 von dem Systemspeicher 104 zu dem PPU-Speicher 204 zu verschieben ist. In Reaktion auf diese Ermittlung führt der UVM-Treiber 101 eine Reihe von Operationen, die nachfolgend als eine Seitenfehlersequenz bezeichnet sind, aus, um zu bewirken, dass die Speicherseite 408 verschoben wird. Ferner kann die Seitenfehlersequenz einen Teil des Eintrags des Seitenzustandsverzeichnisses 401 verändern, der mit der Speicherseite 408 verknüpft ist. Insbesondere kann die Seitenfehlersequenz die physikalische Speicheradresse 404 auf die physikalische Stelle der Speicherseite 408 aktualisieren, nachdem die Speicherseite verschoben worden ist. Jedoch bleibt die virtuelle Speicheradresse 402 in dem Eintrag 401 des Seitenzustandsverzeichnisses unverändert, wodurch Zeiger in Anwendungsprogrammen gleich bleiben und auf Speicherseiten 408 verweisen, unabhängig davon, wo die Speicherseiten 408 gespeichert sind.In response to a page fault, UVM driver 101 may determine that a memory page, such as memory page 408, is to be migrated or moved from one storage device to another storage device to recover from the page fault. For example, UVM driver 101 may determine that memory page 408 is to be moved from system memory 104 to PPU memory 204 . In response to this determination, UVM driver 101 performs a series of operations, hereinafter referred to as a page fault sequence, to cause memory page 408 to be moved. Furthermore, the page fault sequence may alter a portion of the page state table 401 entry associated with the memory page 408. In particular, the page fault sequence may update the physical memory address 404 to the physical location of the memory page 408 after the memory page has been moved. However, the virtual memory address 402 in the page state table entry 401 remains unchanged, causing pointers in application programs to remain the same and point to memory pages 408 regardless of where the memory pages 408 are stored.

Um zu ermitteln, welche Operationen in einer Seitenfehlersequenz auszuführen sind, ermittelt die CPU 102 die Speicherseite, die zu der virtuellen Speicheradresse gehört. Die CPU 102 liest dann Zustandsinformation für die Speicherseite aus dem PSD 210 aus, die die virtuelle Speicheradresse betrifft, die mit der Speicherzugriffsanforderung verknüpft ist, die einen in Seitenfehler hervorgerufen hat. Eine derartige Zustandsinformation kann unter anderem den Besitzzustand für die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist, umfassen. Für eine gegebene Speicherseite sind mehrere Besitzzustände möglich. Beispielsweise kann eine Speicherseite „CPU-Eigen“, „PPU-Eigen“ oder „CPU-gemeinsam“ sein. Eine Speicherseite wird als CPU-Eigen betrachtet, wenn die CPU 102 auf die Speicherseite über eine virtuelle Adresse zugreifen kann, und wenn die PPU 202 auf die Speicherseite nicht über eine virtuelle Adresse zugreifen kann, ohne dass ein Seitenfehler hervorgerufen wird. Vorzugsweise liegt eine CPU-eigene Seite in dem Systemspeicher 104, kann aber auch in dem PPU-Speicher 204 liegen. Eine Speicherseite wird als PPU-Eigen betrachtet, wenn die PPU 202 auf die Seite über eine virtuelle Adresse zugreifen kann, und wenn die CPU 102 nicht auf die Speicherseite mittels einer virtuellen Adresse zugreifen kann, ohne einen Seitenfehler hervorzurufen. Vorzugsweise liegt eine PPU-eigene Seite in dem PPU-Speicher 204, kann aber auch in dem Systemspeicher 104 liegen, wenn eine Verschiebung aus dem Systemspeicher 104 in den PPU-Speicher 204 allgemein aufgrund der kurzzeitigen Natur des PPU-Besitzes nicht ausgeführt wird. Eine Speicherseite wird als CPU-gemeinsam betrachtet, wenn die Speicherseite in dem Systemspeicher 104 gespeichert ist und eine Zuordnung zu der Speicherseite in der PPU-Seitentabelle 208 existiert, die es der PPU 202 ermöglicht, auf die Speicherseite in dem Systemspeicher 104 mittels einer virtuellen Speicheradresse zuzugreifen.To determine which operations to perform in a page fault sequence, CPU 102 determines the memory page associated with the virtual memory address. The CPU 102 then reads memory page state information from the PSD 210 pertaining to the virtual memory address associated with the memory access request that caused a page fault. Such state information may include, among other things, the state of ownership for the memory page associated with the virtual memory address. Multiple ownership states are possible for a given memory page. For example, a memory page can be CPU-native, PPU-native, or CPU-shared. A memory page is considered CPU owned if the CPU 102 can access the memory page via a virtual address and the PPU 202 cannot access the memory page via a virtual address without incurring a page fault. Preferably, a CPU-owned page resides in system memory 104, but may reside in PPU memory 204 as well. A memory page is considered PPU owned if the PPU 202 can access the page via a virtual address and if the CPU 102 cannot access the memory page via a virtual address without causing a page fault. Preferably, a PPU owned page resides in PPU memory 204, but may reside in system memory 104 if a move from system memory 104 to PPU memory 204 is generally not performed due to the short-term nature of PPU ownership. A memory page is considered CPU-shared if the memory page is stored in system memory 104 and there is a mapping to the memory page in PPU page table 208 that allows the PPU 202 to access the memory page in system memory 104 using a virtual memory address access.

Das UVM-System 200 kann Besitzzustände Speicherseiten auf der Grundlage einer Vielzahl von Faktoren zuweisen, wozu der Verwendungsverlauf der Speicherseite gehört, wobei der Verwendungsverlauf optional in Einträgen in dem PSD 210 gespeichert ist. Der Verwendungsverlauf kann Information im Hinblick darauf enthalten, ob die CPU 102 oder die PPU 202 vor kurzem auf die Speicherseite zugegriffen haben, und wie oft derartige Zugriffe durchgeführt wurden. Beispielsweise kann das UVM-System 200 einen Besitzzustand mit „CPU-Eigen“ für die gegebene Speicherseite zuweisen und die Seite in dem Systemspeicher 104 anordnen, wenn aufgrund des Verwendungsverlaufs der Speicherseite das UVM-System 200 ermittelt, dass die Speicherseite wahrscheinlich hauptsächlich oder ausschließlich von der CPU 102 verwendet wird. In ähnlicher Weise kann das UVM-System 200 einen Besitzzustand mit „PPU-Eigen“ für die gegebene Speicherseite zuweisen und die Seite in dem PPU-Speicher 204 anordnen, wenn auf der Grundlage des Verwendungsverlaufs der Speicherseite das UVM-System 200 ermittelt, dass die Speicherseite wahrscheinlich meisten oder ausschließlich von der PPU 202 verwendet wird. Schließlich kann das UVM-System 200 den Besitzzustand mit „CPU-gemeinsam“ für eine gegebene Speicherseite zuweisen, wenn auf der Grundlage des Verwendungsverlaufs der Speicherseite das UVM-System 200 ermittelt, dass die Speicherseite wahrscheinlich sowohl von der CPU 102 als auch von der PPU 202 verwendet wird, und dass eine Verschiebung der Speicherseite zwischen dem Systemspeicher 104 und dem PPU-Speicher 204 zu viel Zeit erfordern würde.The UVM system 200 may assign ownership states to memory pages based on a variety of factors, including usage history of the memory page, where usage history is optionally stored in entries in the PSD 210 . The usage history may include information regarding whether the CPU 102 or the PPU 202 recently accessed the memory page and how often such accesses were made. For example, the UVM system 200 may assign an ownership state of "CPU Own" for the given memory page and place the page in the system memory 104 if, based on the usage history of the memory page, the UVM system 200 determines that the memory page is likely to be primarily or exclusively owned by of the CPU 102 is used. Similarly, if, based on the usage history of the memory page, the UVM system 200 determines that the memory page is likely to be used mostly or exclusively by the PPU 202. Finally, the UVM system 200 may assign the ownership state to "CPU-shared" for a given memory page if, based on the usage history of the memory page, the UVM system 200 determines that the memory page is likely shared by both the CPU 102 and the PPU 202 is used and that moving the memory page between the system memory 104 and the PPU memory 204 would take too much time.

Als Beispiele können die Fehlerbehandlungseinheit 211 und 215 einige oder alle der folgenden heuristischen Aktionen für das Migrieren bzw. die Verschiebung ausführen:

  • (a) bei Zugriff der CPU 102 auf eine nicht zugeordnete Seite, die auf die PPU 202 abgebildet ist, die noch nicht vor kurzem verschoben wurde, Aufheben der Zuordnung der fehlererzeugenden Seite für die PPU 202, Verschieben der Seite zu der CPU 102 und Zuordnen der Seite zu der CPU 102;
  • (b) bei Zugriff der PPU 202 auf nicht zugeordnete Seite, die der CPU 102 zugeordnet ist, die nicht vor kurzem verschoben worden ist, Aufheben der Zuordnung der fehlererzeugenden Seite zu der CPU 102, Verschieben der Seite zu der PPU 202 und Zuordnen der Seite zu der PPU 202;
  • c) bei Zugriff der CPU 102 auf nicht zugeordnete Seite, die der PPU 202 zugeordnet ist und die vor kurzem verschoben wurde, Verschieben der fehlererzeugenden Seite zu der CPU 102 und Zuordnen der Seite zu der CPU 102 und der PPU 202;
  • (d) bei Zugriff der PPU 202 auf nicht zugeordnete Seite, die der CPU 102 zugeordnet ist, die vor kurzem verschoben worden ist, Zuordnen der Seite der CPU 102 und der PPU 202;
  • (d) bei atomaren Zugriff der PPU 102 auf die Seite, die der CPU 102 und der PPU 202 zugeordnet ist, die aber für atomare Operationen durch die PPU 202 nicht freigegeben ist, Aufheben der Zuordnung der Seite zu der CPU 102 und Zuordnen zu der PPU 202, wobei atomare Operationen freigegeben sind;
  • (f) bei Schreibzugriff der PPU 202 auf Seite, die der CPU 102 und der PPU 202 als Kopie-bei-Schreiben (COW) zugeordnet ist, Kopieren der Seite in die PPU 202, wodurch unabhängige Kopien der Seite erzeugt werden, Zuordnen der neuen Seite als Lesen-Schreiben in der PPU und Belassen der aktuellen Seite als der CPU 102 zugeordnet;
  • (d) bei Lesezugriff der PPU 202 auf Seite, die der CPU 102 und der PPU 202 mit Nullen-Auffüllung-auf-Verlangen (ZFOD) zugeordnet ist, Zuweisen einer Seite an physikalischem Speicher in der PPU 202 und Füllen dieser Seite mit Nullen, und Zuordnen dieser Seite der PPU, aber Ändern auf nicht zugeordnet in der CPU 102.
  • (h) bei Zugriff durch eine erste PPU 202(1) auf eine nicht zugeordnete Seite, die einer zweiten PPU 202(2) zugeordnet ist, die nicht vor kurzem verschoben worden ist, Aufheben der Zuordnung der fehlererzeugenden Seite zu der zweiten PPU 202(2), Verschieben der Seite zu der ersten PPU 202(1) und Zuordnen der Seite zu der ersten PPU 202 (1); und
  • (i) bei Zugriff durch eine erste PPU 202(1) auf eine nicht zugeordnete Seite, die einer zweiten PPU 202(2) zugeordnet ist und die nicht vor kurzem verschoben worden ist, Zuordnen der fehlererzeugenden Seite zu der ersten PPU 202(1) und Beibehalten der Zuordnung der Seite zu der zweiten PPU 202(2).
As examples, error handlers 211 and 215 may perform some or all of the following heuristic actions for migration and relocation, respectively:
  • (a) when the CPU 102 accesses an unallocated page mapped to the PPU 202 that has not been recently moved, deallocating the error-producing page for the PPU 202, moving the page to the CPU 102, and allocating it the side to the CPU 102;
  • (b) if the PPU 202 accesses an unallocated page allocated to the CPU 102 that has not recently been moved, deallocating the error-producing page to the CPU 102, moving the page to the PPU 202, and allocating the page to the PPU 202;
  • c) if the CPU 102 accesses an unallocated page that is allocated to the PPU 202 and that has recently been moved, moving the error-producing page to the CPU 102 and allocating the page to the CPU 102 and the PPU 202;
  • (d) when the PPU 202 accesses an unallocated page allocated to the CPU 102 that has recently been moved, allocating the page to the CPU 102 and the PPU 202;
  • (d) if the PPU 102 atomically accesses the page that is allocated to the CPU 102 and the PPU 202 but is not enabled for atomic operations by the PPU 202, deallocating the page to the CPU 102 and allocating it to the PPU 202 with atomic operations enabled;
  • (f) upon PPU 202 write access to page allocated to CPU 102 and PPU 202 as copy-on-write (COW), copying the page to PPU 202, thereby creating independent copies of the page, allocating the new one page allocated as read-write in the PPU and leaving the current page as the CPU 102;
  • (d) upon PPU 202 read access to page allocated to CPU 102 and PPU 202 with zero-pad-on-demand (ZFOD), allocating a page of physical memory in PPU 202 and zero-padding that page, and allocating that side of the PPU but changing it to unallocated in the CPU 102.
  • (h) upon access by a first PPU 202(1) to an unallocated page allocated to a second PPU 202(2) that has not recently been relocated, deallocating the offending page from the second PPU 202( 2) move the page to the first PPU 202(1) and allocate the page to the first PPU 202(1); and
  • (i) upon access by a first PPU 202(1) to an unallocated page which is allocated to a second PPU 202(2) and which has not recently been moved, allocating the error-producing page to the first PPU 202(1) and retaining the page's association with the second PPU 202(2).

Insgesamt sind viele heuristischen Regeln möglich, und der Schutzbereich der vorliegenden Erfindung ist nicht auf diese Beispiele beschränkt.Overall, many heuristic rules are possible and the scope of the present invention is not limited to these examples.

Ferner können beliebige heuristische Konzepte für die Migration bzw. Verschiebung „erweitert“ werden, um mehr Seiten oder eine größere Seitengröße beispielsweise einzuschließen:

  • (j) bei Zugriff der CPU 102 auf eine nicht zugeordnete Seite, die der PPU 202 zugeordnet ist und die nicht vor kurzem verschoben worden ist, Afheben der Zuordnung der fehlerhaften Seite, plus weiterer Seiten, die benachbart zu der fehlerhaften Seite in dem virtuellen Adressenraum liegen, zu der PPU 202, Verschieben der Seiten zu der CPU 102 und Zuordnen der Seiten zu der CPU 102 (in einem detaillierteren Beispiel: für eine 4 kB fehlerhafte Seite, Verschieben des dazu ausgerichteten 64 kB-Gebiets, das die für 4 kB fehlerhafte Seite enthält);
  • (k) bei Zugriff der PPU 202 auf nicht zugeordnete Seite, die der CPU 102 zugeordnet ist und nicht vor kurzem verschoben worden ist, Aufheben der Zuordnung der fehlerhaften Seite plus weiterer Seiten, die benachbart zu der fehlerhaften Seite in dem virtuellen Adressenraum liegen, zu der CPU 102, Verschieben der Seiten zu der PPU 202 und Zuordnen der Seiten zu der PPU 202 (in einem detaillierteren Beispiel: für eine 4 KB fehlerbehaftete Seite, Verschieben des dazugehörenden 64 kB-Gebiets, das die 4 kB fehlerhafte Seite enthält);
  • (l) bei Zugriff der CPU 102 auf nicht zugeordnete Seite, die der PPU 202 zugeordnet ist und die nicht kürzlich verschoben worden ist, Aufheben der Zuordnung der fehlererzeugenden Seite plus weiterer Seiten, die benachbart zu der fehlererzeugenden Seite in dem virtuellen Adressenraum liegen, zu der PPU 202, Verschieben der Seiten zu der CPU 102, Zuordnen der Seiten zu der CPU 102 und Behandeln aller verschobener Seiten als eine oder mehrere größere Seiten in der CPU 102 (in einem detaillierteren Beispiel: für eine 4 kB fehlerhafte Seite, Verschieben des dazu ausgerichteten 64 kB-Gebiets, das die 4 kB fehlerbehaftete Seite enthält, und Behandeln des ausgerichteten 64 kB-Gebiets als eine 64 kB-Seite);
  • (m) bei Zugriff der PPU 202 auf nicht zugeordnete Seite, die der CPU 102 zugeordnet ist, und die nicht kürzlich verschoben worden ist, Aufheben der Zuordnung der fehlererzeugenden Seite plus weiterer Seiten, die benachbart zu der fehlererzeugenden Seite in dem virtuellen Adressenraum liegen, zu der CPU 102, Verschieben der Seiten zu der PPU 202, Zuordnen der Seiten zu der PPU 202 und Behandeln aller verschobener Seiten als eine oder mehrere größere Seiten in der PPU 202 (in einem detaillierteren Beispiel: für eine 4 kB-fehlerbehaftete Seite, Verschieben des dazu ausgerichteten 64 kB-Gebiets, das die 4 kB fehlerbehaftete Seite enthält, und Behandeln des ausgerichteten 64 kB-Gebiets als eine 64 kB-Seite);
  • (n) bei Zugriff durch eine erste PPU 202(1) auf eine nicht zugeordnete Seite, die einer zweiten PPU 202(2) zugeordnet ist und die nicht vor kurzem verschoben worden ist, Aufheben der Zuordnung der fehlererzeugenden Seite plus weiterer Seiten, die benachbart zu der fehlererzeugenden Seite in dem virtuellen Adressenraum liegen, zu der zweiten PPU 202(2), Verschieben der Seiten zu der ersten PPU 202(1) und Zuordnen der Seiten zu der ersten PPU 202(1); und
  • (o) bei Zugriff durch eine erste PPU 202(1) auf eine nicht zugeordnete Seite, die einer zweiten PPU 202(2) zugeordnet ist und vor kurzem verschoben worden ist, Zuordnen der fehlererzeugenden Seite plus weiterer Seiten, die benachbart zu der fehlererzeugenden Seite in dem virtuellen Adressenraum liegen, zu der ersten PPU 202(1), und Beibehalten der Zuordnung der Seite zu der zweiten PPU 202(2).
Furthermore, any heuristic concepts for migration or movement can be "extended" to include more pages or a larger page size, for example:
  • (j) upon CPU 102 accessing an unallocated page allocated to PPU 202 that has not recently been relocated, deallocating the faulty page, plus other pages adjacent to the faulty page in the virtual address space lying, to the PPU 202, shifting the pages to the CPU 102 and allocating the pages to the CPU 102 (in a more detailed example: for a 4 KB faulty page, shift the aligned 64 KB region containing the 4 KB faulty page contains);
  • (k) upon PPU 202 access to an unallocated page that is allocated to CPU 102 and has not recently been moved, deallocating the faulty page plus other pages adjacent to the faulty page in the virtual address space the CPU 102, moving the pages to the PPU 202 and allocating the pages to the PPU 202 (in a more detailed example: for a 4 KB bad page, move the associated 64 KB region containing the 4 KB bad page);
  • (l) upon CPU 102 access to an unallocated page that is allocated to PPU 202 and has not recently been relocated, deallocating the faulting page plus other pages adjacent to the faulting page in the virtual address space of the PPU 202, moving the pages to the CPU 102, allocating the pages to the CPU 102, and treating all the moved pages as one or more larger pages in the CPU 102 (in a more detailed example: for a 4 kB bad page, moving the to aligned 64 KB area containing the 4 KB errored page and treating the aligned 64 KB area as a 64 KB page);
  • (m) when the PPU 202 accesses an unallocated page that is allocated to the CPU 102 and has not recently been moved, deallocating the fault-producing page plus other pages that are adjacent to the fault-producing page in the virtual address space, to the CPU 102, shifting the pages to the PPU 202, allocating the pages to the PPU 202, and treating all shifted pages as one or more larger pages in the PPU 202 (in a more detailed example: for a 4 KB bad page, shift the aligned 64 KB region thereto containing the 4 KB errored page and treating the aligned 64 KB region as a 64 KB page);
  • (n) upon access by a first PPU 202(1) to an unallocated page which is allocated to a second PPU 202(2) and which has not recently been moved, deallocating the fault-producing page plus other pages that are adjacent to the faulting page in the virtual address space, to the second PPU 202(2), moving the pages to the first PPU 202(1), and allocating the pages to the first PPU 202(1); and
  • (o) upon access by a first PPU 202(1) to an unallocated page that is allocated to a second PPU 202(2) and has recently been moved, allocating the faulting page plus other pages adjacent to the faulting page reside in the virtual address space, to the first PPU 202(1), and maintaining the association of the page with the second PPU 202(2).

Insgesamt sind viele heuristischen Regeln, die eine „Erweiterung“ enthalten, möglich, und der Schutzbereich der vorliegenden Erfindung ist nicht auf diese Beispiele beschränkt.Overall, many heuristic rules that include "expansion" are possible, and the scope of the present invention is not limited to these examples.

In einigen Ausführungsformen können die PSD-Einträge Information über Übergangszustände enthalten, um eine korrekte Synchronisierung zwischen diversen Anforderungen sicherzustellen, die von Einheiten innerhalb der CPU 102 und der PPU 202 ausgeführt werden. Beispielsweise kann ein Eintrag des PSD 210 einen Übergangszustand enthalten, der angibt, dass eine spezielle Seite in dem Prozess des Übergangs von CPU-Eigen zu PPU-Eigen ist. Diverse Einheiten in der CPU 102 und der PPU 202, etwa die PPU-Fehlerbehandlungseinheit 211 und die PPU-Fehlerbehandlungseinheit 215 können bei der Erkennung, dass eine Seite in einem derartigen Übergangszustand ist, die Ausführung von Bereichen einer Seitenfehlersequenz unterlassen, um Schritte in der Seitenfehlersequenz zu vermeiden, die von einem früheren virtuellen Speicherzugriff auf die gleiche virtuelle Speicheradresse ausgelöst wurden. Als spezielles Beispiel sei genannt, dass, wenn ein Seitenfehler in einer Seite auftritt, die gerade von dem Systemspeicher 104 zu dem PPU-Speicher 204 verschoben wird, ein anderer Seitenfehler, der die gleiche Verschiebung hervorrufen würde, keine weitere Seitenverschiebung hervorgerufen wird. Wenn es ferner mehr als einen Schreiber in das PSD 210 gibt, können diverse Einheiten in der CPU 102 und der PPU 202 atomare Operationen für die korrekte Anordnung von Operationen an den PSD 210 realisieren. Beispielsweise können für Modifizierungen an Einträgen des PSD 210 die CPU-Fehlerbehandlungseinheit 211 oder die PPU-Fehlerbehandlungseinheit 215 eine atomare bzw. nicht teilbare Vergleichen-und-Austauschen-Operation ausgeben, um den Seitenzustand eines speziellen Eintrags in dem PSD 210 zu modifizieren. Daher wird die Modifizierung ausgeführt, ohne dass eine Störung durch Operationen anderer Einheiten hervorgerufen wird.In some embodiments, the PSD entries may contain transition state information to ensure proper synchronization between various requests executed by entities within CPU 102 and PPU 202 . For example, a PSD 210 entry may contain a transition state indicating that a particular page is in the process of transitioning from CPU owned to PPU owned. Various units in the CPU 102 and the PPU 202, such as the PPU error handling unit 211 and the PPU error handling unit 215, upon detecting that a page is in such a transitional state, may refrain from executing portions of a page fault sequence to steps in the page fault sequence to avoid being triggered by a previous virtual memory access to the same virtual memory address. As a specific example, if a page fault occurs in a page that is being moved from system memory 104 to PPU memory 204, another page fault that would cause the same move will not cause another page move. Furthermore, when there is more than one writer to the PSD 210, various units in the CPU 102 and the PPU 202 can implement atomic operations for the correct ordering of operations on the PSD 210. For example, for modifications to PSD 210 entries, the CPU error handler 211 or the PPU error handler 215 may issue an atomic compare-and-swap operation to modify the page state of a particular entry in the PSD 210. Therefore, the modification is carried out without being disturbed by operations of other units.

Es können mehrere PSD 210 in dem Systemspeicher 104 gespeichert sein - eines für jeden virtuellen Speicheradressenraum. Eine Speicherzugriffsanforderung, die von der CPU 102 oder der PPU 202 erzeugt wird, kann daher eine virtuelle Speicheradresse enthalten und kann ferner den virtuellen Speicheradressenraum angeben, der mit dieser virtuellen Speicheradresse verknüpft ist. Weitere Details im Hinblick auf Seitenzustandsverzeichnisse sind nachfolgend mit Bezug zu 3 angegeben.Multiple PSDs 210 may be stored in system memory 104 - one for each virtual memory address space. A memory access request generated by CPU 102 or PPU 202 may therefore include a virtual memory address and may also specify the virtual memory address space associated with that virtual memory address. Further details regarding page state dictionaries are provided below with reference to 3 specified.

Genauso wie die CPU 102 Speicherzugriffsanforderungen ausführen kann, die virtuelle Speicheradressen enthalten (d.h., Befehle, die Anforderungen zum Zugreifen auf Daten über eine virtuelle Speicheradresse enthalten), kann die PPU 202 ebenfalls ähnliche Arten von Speicherzugriffsanforderungen ausführen. Insbesondere enthält die PPU 202 mehrere Ausführungseinheiten, etwa GPC und SM, die zuvor in Verbindung mit 1 beschrieben sind, die ausgebildet sind, mehrere Stränge und Stranggruppen auszuführen. Während des Betriebs können diese Stränge Daten aus dem Speicher (beispielsweise dem Systemspeicher 104 oder dem PPU-Speicher 204) anfordern, indem eine virtuelle Speicheradresse angegeben wird. Wie bei der CPU 102 und der CPU MMU 209 enthält die PPU 202 die PPU Speicherverwaltungseinheit (MMU) 213. Die PPU MMU 213 empfängt Anforderungen zur Übersetzung von virtueller Speicheradressen aus der PPU 202 und versucht eine Übersetzung aus der PPU-Seitentabelle 208 für die virtuellen Speicheradressen bereitzustellen. Ähnlich wie bei der CPU-Seitentabelle 206 enthält die PPU-Seitentabelle 208 Zuordnungen zwischen virtuellen Speicheradressen und physikalischen Speicheradressen. Ebenso wie für die CPU-Seitentabelle 206 kann für eine gegebene virtuelle Adresse die PPU-Speichertabelle 208 gegebenenfalls keinen Seitentabelleneintrag enthalten, der die virtuelle Speicheradresse der physikalischen Speicheradressen zuordnet. Wie bei der CPU MMU 209 erzeugt die PPU MMU 213 einen Seitenfehler, wenn die PPU MMU 213 eine Übersetzung für eine virtuelle Speicheradresse aus der PPU-Seitentabelle 208 anfordert und keine Zuordnung in der PPU-Seitentabelle 208 existiert oder die Art des Zugriffes durch die PPU-Seitentabelle 208 nicht zulässig ist. Wiederum sind unterschiedliche Arten von Seitenfehlersequenzen, die in dem SM-System 200 eingerichtet sind, nachfolgend detaillierter beschrieben.Just as CPU 102 can perform memory access requests that include virtual memory addresses (ie, instructions that include requests to access data through a virtual memory address), PPU 202 can also perform similar types of memory access requests. In particular, PPU 202 includes multiple execution units, such as GPC and SM, previously described in connection with 1 are described which are designed to carry out multiple strands and strand groups. During operation, these threads can request data from memory (e.g., system memory 104 or PPU memory 204) by specifying a virtual memory address. As with the CPU 102 and the CPU MMU 209, the PPU 202 contains the PPU memory management unit (MMU) 213. The PPU MMU 213 receives requests for translation of virtual memory addresses from the PPU 202 and attempts a translation from the PPU page table 208 for the virtual to provide memory addresses. Similar to CPU page table 206, PPU page table 208 contains mappings between virtual memory addresses and physical memory addresses. As with the CPU page table 206, for a given virtual address, the PPU memory table 208 may not contain a page table entry that maps the virtual memory address to the physical memory addresses. As with the CPU MMU 209, the PPU MMU 213 generates a page fault when the PPU MMU 213 requests a translation for a virtual memory address from the PPU page table 208 and there is no mapping in the PPU page table 208 or the type of access by the PPU -Page table 208 is not allowed. Again, different types of page fault sequences implemented in the SM system 200 are described in more detail below.

Wie zuvor angegeben ist, erzeugt in Reaktion auf den Empfang einer Anforderung für eine Übersetzung einer virtuelle Speicheradresse die CPU MMU 209 einen Seitenfehler, wenn die CPU-Seitentabelle 206 keine Zuordnung enthält, die mit der angeforderten virtuellen Speicheradresse verknüpft ist, oder wenn die Art des angeforderten Zugriffs nicht zulässig ist. In ähnlicher Weise erzeugt in Reaktion auf den Empfang einer Anforderung für die Übersetzung einer virtuellen Speicheradresse die PPU MMU 213 einen Seitenfehler, wenn die PPU-Seitentabelle 208 keine Zuordnung enthält, die mit der angeforderten virtuellen Speicheradresse verknüpft ist, oder wenn diese Art des angeforderten Zugriffes nicht erlaubt ist. Wendet die CPU MMU 209 oder die PPU MMU 213 einen Seitenfehler erzeugen, wird der Strang, der Daten aus der virtuellen Speicheradresse angefordert hat, angehalten, und eine „lokale Fehlerbehandlungseinheit“ - die CPU-Fehlerbehandlungseinheit 211 für die CPU 102 oder die PPU-Fehlerbehandlungseinheit 215 für die PPU 202 - wird den Seitenfehler zu beheben, indem eine „Seitenfehlersequenz“ ausgeführt wird. Wie zuvor angegeben ist, enthält eine Seitenfehlersequenz eine Reihe von Operationen, die es der fehlererzeugenden Einheit (d.h., die Einheit - die CPU 102 oder die PPU 202 - die Seitenfehler erzeugte) erlauben, auf die Daten zu zugreifen, die mit der virtuellen Speicheradresse verknüpft sind. Nachdem die Seitenfehlersequenz abgeschlossen ist, nimmt der Strang, der die Daten über die virtuelle Speicheradresse angefordert hat, die Ausführung wieder auf. In einigen Ausführungsformen wird die Fehlerwiederherstellung vereinfacht, indem es der Fehlerwiederherstellungslogik erlaubt ist, fehlererzeugende Speicherzugriffe im Gegensatz zu fehlererzeugenden Befehlen zu verfolgen.As previously indicated, in response to receiving a request for a virtual memory address translation, the CPU MMU 209 generates a page fault if the CPU page table 206 does not contain an allocation associated with the requested virtual memory address or if the type of the requested access is not allowed. Similarly, in response to receiving a request for translation of a virtual memory address, PPU MMU 213 generates a page fault if PPU page table 208 does not contain an allocation associated with the requested virtual memory address or if that type of requested access is not allowed. When the CPU MMU 209 or the PPU MMU 213 generate a page fault, the thread that requested data from the virtual memory address is stopped, and a "local error handler" - the CPU 211 error handler for the CPU 102 or the PPU error handler 215 for the PPU 202 - will fix the page fault by running a "page fault sequence". As previously indicated, a page fault sequence includes a series of operations that allow the faulting entity (i.e., the entity - the CPU 102 or the PPU 202 - that generated the page fault) to access the data associated with the virtual memory address are. After the page fault sequence completes, the thread that requested the virtual memory address data resumes execution. In some embodiments, error recovery is simplified by allowing error recovery logic to track error-producing memory accesses as opposed to error-producing instructions.

Die Operationen, die während einer Seitenfehlersequenz ausgeführt werden, hängen von der Änderung im Besitzzustand oder einer Änderung für die Freigaben für Zugriffe ab, wenn es welche gibt, die die Speicherseite, die mit dem Seitenfehler verknüpft ist, auszuführen hat. Der Übergang von einem aktuellen Besitzzustand in einen neuen Besitzzustand oder eine Änderung der Freigaben für Zugriffe kann Teil der Seitenfehlersequenz sein. In einigen Fällen ist die Verschiebung der Speicherseite, die mit dem Seitenfehler verknüpft ist, von dem Systemspeicher 104 zu dem PPU-Speicher 204 ebenfalls Teil der Seitenfehlersequenz. In anderen Fällen ist die Verschiebung der Speicherseite, die mit dem Seitenfehler verknüpft ist, von dem PPU-Speicher 204 zu dem Systemspeicher 104 ebenfalls Teil der Seitenfehlersequenz. Es sind diverse heuristische Vorgehensweisen ausführlicher beschrieben, die verwendet werden können, um das UVM-System 200 zu konfigurieren, einen Speicherseiten-Besitzzustand zu ändern oder um Speicherseiten unter diversen Gruppen von Betriebszuständen und Mustern zu verschieben. Nachfolgend sind detaillierter Speicherfehlersequenzen für die folgenden vier Speicherseiten-Besitzzustandsübergänge beschrieben: CPU-Eigen zu CPU-gemeinsam, CPU-Eigen zu PPU-Eigen, PPU-Eigen zu CPU-Eigen, und PPU-Eigen zu PPU-gemeinsam.The operations performed during a page fault sequence depend on the change in ownership or a change in the access enables, if any, that the memory page associated with the page fault has to perform. Transitioning from a current ownership state to a new ownership state or changing access permissions may be part of the page fault sequence. In some cases, moving the memory page associated with the page fault from system memory 104 to PPU memory 204 is also part of the page fault sequence. In other cases, moving the memory page associated with the page fault from PPU memory 204 to system memory 104 is also part of the page fault sequence. Various heuristics are described in more detail that may be used to configure the UVM system 200, to change a memory page ownership state, or to move memory pages under various sets of operating states and patterns. Described below in more detail are memory error sequences for the following four memory page ownership transitions: CPU-native to CPU-shared, CPU-native to PPU-native, PPU-native to CPU-native, and PPU-native to PPU-shared.

Ein Fehler durch die PPU 202 kann einen Übergang von CPU-Eigen zu CPU-gemeinsam bewirken. Vor einem derartigen Übergang versucht ein Strang, der in der PPU 202 ausgeführt wird, auf Daten an einer virtuellen Speicheradresse zu zugreifen, die nicht in der PPU-Seitentabelle 208 zugeordnet ist. Dieser Zugriffsversuch bewirkt einen PPU-basierten Seitenfehler, der dann bewirkt, dass auf einen Fehlerpuffereintrag in dem Fehlerpuffer 216 geschrieben wird. Daraufhin liest die PPU-Fehlerbehandlungseinheit 215 den Eintrag im PSD 210, der der virtuellen Speicheradresse entspricht, aus und ermittelt die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist. Nach dem Auslesen des PSD 210 ermittelt die PPU-Fehlerbehandlungseinheit 215, dass der aktuelle Besitzzustand für die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist, CPU-Eigen ist. Auf der Grundlage des aktuellen Besitzzustands sowie andere Faktoren, etwa von Verwendungseigenschaften für die Speicherseite oder die Art des Speicherzugriffs, ermittelt die PPU-Fehlerbehandlungseinheit 215, dass ein neuer Besitzzustand für die Seite CPU-gemeinsam sein sollte.A fault by the PPU 202 can cause a transition from CPU native to CPU common. Prior to such a transition, a thread executing in the PPU 202 attempts to access data at a virtual memory address that is not mapped in the PPU page table 208. This access attempt causes a PPU-based page fault, which then causes an error buffer entry in error buffer 216 to be written to. The PPU error handler 215 then reads the entry in the PSD 210 that corresponds to the virtual memory address and determines the memory page that associated with the virtual memory address. After reading the PSD 210, the PPU error handler 215 determines that the current state of ownership for the memory page associated with the virtual memory address is CPU owned. Based on the current ownership state, as well as other factors, such as usage characteristics for the memory page or the type of memory access, the PPU error handler 215 determines that a new ownership state for the page should be CPU-shared.

Um den Besitzzustand zu ändern, schreibt die PPU-Fehlerbehandlungseinheit 215 einen neuen Eintrag in die PPU-Seitentabelle 208, der der virtuellen Speicheradresse entspricht, und der die virtuelle Speicheradresse mit der Speicherseite in Beziehung setzt, die durch den Eintrag des PSD 210 gekennzeichnet ist. Die PPU-Fehlerbehandlungseinheit 215 modifiziert ferner den Eintrag des PSD 210 für diese Speicherseite, um anzuzeigen, dass der Besitzzustand CPU-gemeinsam ist. In einigen Ausführungsformen wird ein Eintrag in einem Translations-Nebenschaupuffer (TLB) in der PPU 202 ungültig gemacht, um dem Fall Rechnung zu tragen, in welchem die Übersetzung in einer unzulässigen Seite gespeichert ist. An diesem Punkt ist die Seitenfehlersequenz abgeschlossen. Der Besitzzustand für die Speicherseite ist CPU-gemeinsam, was bedeutet, dass die Speicherseite für die CPU 102 und auch für die PPU 202 ansprechbar ist. Sowohl die CPU-Seitentabelle 206 als auch die PPU-Seitentabelle 208 enthalten Einträge, die die virtuelle Speicheradresse mit der Speicherseite verknüpfen.To change ownership, the PPU error handler 215 writes a new entry in the PPU page table 208 that corresponds to the virtual memory address and relates the virtual memory address to the memory page identified by the PSD 210 entry. The PPU error handler 215 also modifies the PSD 210 entry for that memory page to indicate that the ownership state is CPU-shared. In some embodiments, an entry in a translation preview buffer (TLB) in PPU 202 is invalidated to account for the case where the translation is stored in an illegal page. At this point the page fault sequence is complete. The ownership state for the memory page is CPU-shared, which means that the memory page is accessible to both the CPU 102 and the PPU 202. Both the CPU page table 206 and the PPU page table 208 contain entries that associate the virtual memory address with the memory page.

Ein Fehler durch die PPU 202 kann einen Übergang von CPU-Eigen zu PPU-Eigen hervorrufen. Vor einem derartigen Übergang versucht eine Operation, die in der PPU 202 ausgeführt wird, auf einen Speicher an einer virtuellen Speicheradresse zuzugreifen, die nicht in der PPU-Seitentabelle 208 zugeordnet ist. Dieser Speicherzugriffsversuch ruft einen PPU-basierten Seitenfehler hervor, der dann bewirkt, dass ein Fehlerpuffereintrag in dem Fehlerpuffer 216 beschrieben wird. In Reaktion darauf liest die PPU-Fehlerbehandlungseinheit 215 den Eintrag des PSD 210, der der virtuellen Speicheradresse entspricht, aus und ermittelt die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist. Nach dem Auslesen des PSD 210 ermittelt die PPU-Fehlerbehandlungseinheit 215, dass der aktuelle Besitzzustand für die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist, CPU-Eigen ist. Auf der Grundlage des aktuellen Besitzzustands sowie anderer Faktoren, etwa von Verwendungseigenschaften für die Seite oder die Art Speicherzugriffs, ermittelt die PPU-Fehlerbehandlungseinheit 215, dass ein neuer Besitzzustand für die Seite PPU-Eigen ist.A fault by the PPU 202 can cause a transition from CPU own to PPU own. Prior to such a transition, an operation executing in the PPU 202 attempts to access memory at a virtual memory address that is not mapped in the PPU page table 208. This memory access attempt causes a PPU-based page fault, which then causes a fault buffer entry in fault buffer 216 to be written. In response, the PPU error handler 215 reads the PSD 210 entry corresponding to the virtual memory address and determines the memory page associated with the virtual memory address. After reading the PSD 210, the PPU error handler 215 determines that the current state of ownership for the memory page associated with the virtual memory address is CPU owned. Based on the current ownership state, as well as other factors, such as usage characteristics for the page or the type of memory access, the PPU error handler 215 determines that a new ownership state for the page is PPU native.

Die PPUs 202 schreibt einen Fehlerpuffereintrag in den Fehlerpuffer 216, der angibt, dass die PPU 202 einen Seitenfehler erzeugt hat, und der die virtuelle Speicheradresse angibt, die mit dem Seitenfehler verknüpft ist. Die PPU-Fehlerbehandlungseinheit 215, die in der CPU 102 ausgeführt wird, liest den Fehlerpuffereintrag aus und darauf reagierend entfernt die CPU 102 die Zuordnung in der CPU-Seitentabelle 206, die mit der virtuellen Speicheradresse verknüpft ist, die den Seitenfehler hervorgerufen hat. Die CPU 102 kann vor und/oder nach der Entfernung der Zuordnung die Cache-Speicher leeren. Die CPU 102 kann ferner Befehle in die Befehlswarteschlange 214 schreiben, die die PPU 202 anweisen, die Speicherseite von dem Systemspeicher 104 in den PPU-Speicher 204 zu kopieren. Die Kopiereinheit 212 in der PPU 202 liest die Befehle in der Befehlswarteschlange 214 aus und kopiert die Seite aus dem Systemspeicher 104 in den PPU-Speicher 204. Die PPU 202 schreibt einen Seitentabelleneintrag in die PPU-Seitentabelle 208, der der virtuellen Speicheradresse entspricht und der die virtuelle Speicheradresse mit der neu kopierten Speicherseite in dem PPU-Speicher 204 verknüpft. Das Schreiben in die PPU-Seitentabelle 208 kann mittels der Kopiereinheit 212 erfolgen. Alternativ kann die CPU 102 die PPU-Seitentabelle 208 aktualisieren. Die PPU-Fehlerbehandlungseinheit 215 modifiziert ebenfalls den Eintrag des PSD 210 für diese Speicherseite, um anzugeben, dass der Besitzzustand PPU-Eigen ist. In einigen Ausführungsformen können die Einträge in TLB in der PPU 202 oder der CPU 102 als ungültig gesetzt werden, um dem Fall Rechnung zu tragen, in welchem die Translationen zwischengespeichert wurden. An diesem Punkt ist die Seitenfehlersequenz abgeschlossen. Der Besitzzustand für die Speicherseite ist PPU-Eigen, was bedeutet, dass auf die Speicherseite nur durch die PPU 202 zugegriffen werden kann. Nur die PPU-Seitentabelle 208 enthält einen Eintrag, der die virtuelle Speicheradresse mit der Speicherseite verknüpft.The PPUs 202 writes a fault buffer entry to the fault buffer 216 indicating that the PPU 202 generated a page fault and indicating the virtual memory address associated with the page fault. The PPU fault handler 215 executing on the CPU 102 reads the fault buffer entry and in response the CPU 102 removes the allocation in the CPU page table 206 associated with the virtual memory address that caused the page fault. CPU 102 may flush caches before and/or after removing the association. CPU 102 may also write commands to command queue 214 that instruct PPU 202 to copy the memory page from system memory 104 to PPU memory 204 . The copy unit 212 in the PPU 202 reads the commands in the command queue 214 and copies the page from the system memory 104 to the PPU memory 204. The PPU 202 writes a page table entry in the PPU page table 208 corresponding to the virtual memory address and the associates the virtual memory address with the newly copied memory page in PPU memory 204. Writing to the PPU page table 208 can be done by the copy unit 212 . Alternatively, the CPU 102 can update the PPU page table 208. The PPU error handler 215 also modifies the PSD 210 entry for this memory page to indicate that the ownership state is PPU-native. In some embodiments, the entries in TLBs in PPU 202 or CPU 102 may be invalidated to account for the case where the translations have been cached. At this point the page fault sequence is complete. The ownership state for the memory page is PPU Own, which means that the memory page can only be accessed by the PPU 202. Only the PPU page table 208 contains an entry linking the virtual memory address to the memory page.

Ein Fehler durch die CPU 102 kann einen Übergang von PPU-Eigen zu CPU-Eigen in Gang setzen. Vor einem derartigen Übergang versucht eine Operation, die in der CPU 102 ausgeführt wird, einen Speicherzugriff auf eine virtuelle Speicheradresse, die in der CPU-Seitentabelle 206 nicht zugeordnet ist, wodurch ein CPU-basierter Seitenfehler hervorgerufen wird. Die CPU-Fehlerbehandlungseinheit 211 liest den Eintrag des PSD 210, der der virtuellen Speicheradresse entspricht, aus und ermittelt die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist. Nach dem Auslesen des PSD 210 ermittelt die CPU-Fehlerbehandlungseinheit 211, dass der aktuelle Besitzzustand für die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist, PPU-Eigen ist. Auf der Grundlage des aktuellen Besitzzustands sowie anderer Faktoren, etwa von Verwendungseigenschaften für die Seite oder die Art des Zugriffes, ermittelt die CPU-Fehlerbehandlungseinheit 211, dass ein neuer Besitzzustand für die Seite CPU-Eigen ist.A fault by the CPU 102 can initiate a transition from PPU native to CPU native. Prior to such a transition, an operation executing in the CPU 102 attempts a memory access to a virtual memory address that is not mapped in the CPU page table 206, causing a CPU-based page fault. The CPU error handler 211 reads the PSD 210 entry corresponding to the virtual memory address and determines the memory page associated with the virtual memory address. After reading the PSD 210, the CPU error handler 211 determines that the current state of ownership for the memory page associated with the virtual memory address is PPU owned. Based on current ownership status and other factors, such as usage characteristics for the page or the type of access, the CPU error handler 211 determines that a new ownership state for the page is CPU native.

Die CPU-Fehlerbehandlungseinheit 211 ändert den Besitzzustand, der zu der Speicherseite gehört, auf CPU-Eigen. Die CPU-Fehlerbehandlungseinheit 211 schreibt einen Befehl in die Befehlswarteschlange 214, um die Kopiereinheit 212 zu veranlassen, den Eintrag aus der PPU-Seitentabelle 208 zu entfernen, der die virtuelle Speicheradresse mit der Speicherseite verknüpft. Es können diverse TLB-Einträge ungültig gemacht werden. Die CPU-Fehlerbehandlungseinheit 211 kopiert ferner die Speicherseite aus dem PPU-Speicher 204 in den Systemspeicher 104, was mittels der Befehlswarteschlange 214 und der Kopiereinheit 212 bewerkstelligt werden kann. Die CPU-Fehlerbehandlungseinheit 211 schreibt einen Seitentabelleneintrag in die CPU-Seitentabelle 206, der die virtuelle Speicheradresse mit der Speicherseite verknüpft, die in den Systemspeicher 104 kopiert wird. Die CPU-Fehlerbehandlungseinheit 211 aktualisiert ferner das PSD 210, um die virtuelle Speicheradresse mit der neu kopierten Speicherseite zu verknüpfen. An diesem Punkt ist die Seitenfehlersequenz abgeschlossen. Der Besitzzustand für die Speicherseite ist CPU-Eigen, was bedeutet, dass auf die Speicherseite nur die CPU 102 zugreifen kann. Nur die CPU-Seitentabelle 206 enthält einen Eintrag, der die virtuelle Speicheradresse mit der Speicherseite verknüpft.The CPU error handling unit 211 changes the ownership state associated with the memory page to CPU own. The CPU error handler unit 211 writes an instruction to the instruction queue 214 to cause the copy unit 212 to remove the entry from the PPU page table 208 that links the virtual memory address to the memory page. Various TLB entries can be invalidated. The CPU error handler unit 211 also copies the memory page from the PPU memory 204 to the system memory 104, which can be accomplished by means of the command queue 214 and the copy unit 212. The CPU error handler 211 writes a page table entry into the CPU page table 206 that associates the virtual memory address with the memory page being copied into the system memory 104. The CPU error handler 211 also updates the PSD 210 to associate the virtual memory address with the newly copied memory page. At this point the page fault sequence is complete. The ownership state for the memory page is CPU owned, which means that only the CPU 102 can access the memory page. Only the CPU page table 206 contains an entry linking the virtual memory address to the memory page.

Ein Fehler durch die CPU 102 kann einen Übergang von PPU-Eigen zu CPU-gemeinsam hervorrufen. Vor einem derartigen Übergang versucht eine Operation, die in der CPU 102 ausgeführt wird, auf einen Speicher an einer virtuellen Speicheradresse zuzugreifen, die nicht in der CPU-Seitentabelle 206 zugeordnet ist, wodurch ein CPU-basierter Seitenfehler hervorgerufen wird. Die CPU-Fehlerbehandlungseinheit 211 liest den Eintrag des PSD 210 aus, der der virtuellen Speicheradresse entspricht, und ermittelt die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist. Nach dem Auslesen des PSD 210 ermittelt die CPU-Fehlerbehandlungseinheit 211, dass der aktuelle Besitzzustand für die Speicherseite, die mit der virtuellen Speicheradresse verknüpft ist, PPU-Eigen ist. Auf der Grundlage des aktuellen Besitzzustands oder der Art des Zugriffes sowie anderer Faktoren, etwa Verwendungseigenschaften für die Seite, ermittelt die CPU-Fehlerbehandlungseinheit 211, dass ein neuer Besitzzustand für die Speicherseite CPU-gemeinsam ist.A fault by the CPU 102 can cause a transition from PPU native to CPU common. Prior to such a transition, an operation executing in the CPU 102 attempts to access memory at a virtual memory address not mapped in the CPU page table 206, causing a CPU-based page fault. The CPU error handler 211 reads the PSD 210 entry corresponding to the virtual memory address and determines the memory page associated with the virtual memory address. After reading the PSD 210, the CPU error handler 211 determines that the current state of ownership for the memory page associated with the virtual memory address is PPU owned. Based on the current ownership state or type of access, as well as other factors such as usage characteristics for the page, the CPU error handler 211 determines that a new ownership state for the memory page is CPU-common.

Die CPU-Fehlerbehandlungseinheit 211 ändert den Besitzzustand, der zu der Speicherseite gehört, auf CPU-gemeinsam. Die CPU-Fehlerbehandlungseinheit 211 schreibt einen Befehl in die Befehlswarteschlange 214, um die Kopiereinheit 212 zu veranlassen, den Eintrag aus der PPU-Seitentabelle 208 zu entfernen, der die virtuelle Speicheradresse mit der Speicherseite verknüpft. Es können diverse TLB-Einträge als ungültig gesetzt werden. Die CPU-Fehlerbehandlungseinheit 211 kopiert ferner die Speicherseite aus dem PPU-Speicher 204 in den Systemspeicher 104. Diese Kopieroperation kann mittels der Befehlswarteschlange 214 und der Kopiereinheit 212 durchgeführt werden. Die CPU-Fehlerbehandlungseinheit 211 schreibt dann einen Befehl in die Befehlswarteschlange 214, um die Kopiereinheit 212 zu veranlassen, den Eintrag in der PPU-Seitentabelle 208 so zu ändern, dass die virtuelle Speicheradresse mit der Speicherseite in dem Systemspeicher 104 verknüpft wird. Es können diverse TLB-Einträge ungültig gesetzt werden. Die CPU-Fehlerbehandlungseinheit 211 schreibt einen Seitentabelleneintrag in die CPU-Seitentabelle 206, um die virtuelle Speicheradresse mit der Speicherseite in dem Systemspeicher 104 zu verknüpfen. Die CPU-Fehlerbehandlungseinheit 211 aktualisiert auch das PSD 210, um die virtuelle Speicheradresse mit der Speicherseite in dem Systemspeicher 104 zu verknüpfen. An diesem Punkt ist die Seitenfehlersequenz beendet. Der Besitzzustand für die Seite ist CPU-gemeinsam, und die Speicherseite ist in den Systemspeicher 104 kopiert worden. Die CPU 102 kann auf die Seite zugreifen, da die CPU-Seitentabelle 206 einen Eintrag enthält, der die virtuelle Speicheradresse mit der Speicherseite in dem Systemspeicher 104 verknüpft. Die Seite ist auch für die PPU 202 ansprechbar, da die PPU-Seitentabelle 208 einen Eintrag enthält, der die virtuelle Speicheradresse mit der Speicherseite in dem Systemspeicher 104 verknüpft.The CPU error handler 211 changes the ownership state associated with the memory page to CPU shared. The CPU error handler unit 211 writes an instruction to the instruction queue 214 to cause the copy unit 212 to remove the entry from the PPU page table 208 that links the virtual memory address to the memory page. Various TLB entries can be set as invalid. The CPU error handling unit 211 also copies the memory page from the PPU memory 204 to the system memory 104. This copy operation can be performed by means of the command queue 214 and the copy unit 212. The CPU error handler unit 211 then writes an instruction to the instruction queue 214 to cause the copy unit 212 to change the entry in the PPU page table 208 so that the virtual memory address is linked to the memory page in the system memory 104. Various TLB entries can be invalidated. The CPU error handler 211 writes a page table entry into the CPU page table 206 to associate the virtual memory address with the memory page in the system memory 104. The CPU error handler 211 also updates the PSD 210 to associate the virtual memory address with the memory page in the system memory 104. At this point the page fault sequence is complete. Ownership for the page is CPU shared and the memory page has been copied to system memory 104 . The CPU 102 can access the page because the CPU page table 206 contains an entry that links the virtual memory address to the memory page in system memory 104 . The page is also accessible to the PPU 202 because the PPU page table 208 contains an entry that links the virtual memory address to the memory page in the system memory 104.

Detailliertes Beispiel einer SeitenfehlersequenzDetailed example of a page fault sequence

In diesem Zusammenhang wird nun eine detaillierte Beschreibung einer Seitenfehlersequenz, die von der PPU-Fehlerbehandlungseinheit 215 in dem Falle eines Übergangs von CPU-Eigen zu CPU-gemeinsam ausgeführt wird, nunmehr bereitgestellt, um zu zeigen, wie atomare bzw. unteilbare Operationen und Übergangszustände verwendet werden können, um eine Seitenfehlersequenz effektiver zu verwalten. Die Seitenfehlersequenz wird von einem Strang in der PPU 202 ausgelöst, der versucht, auf eine virtuelle Adresse zu zugreifen, für die eine Zuordnung in der PPU-Seitentabelle 208 nicht existiert. Wenn ein Strang versucht, auf Daten über eine virtuelle Speicheradresse zuzugreifen, fordert die PPU 202 (insbesondere ein Strang auf Anwenderebene) eine Übersetzung aus der PPU-Seitentabelle 208 an. In Reaktion darauf tritt ein PPU-Seitenfehler auf, da die PPU-Seitentabelle 208 keine Zuordnung, die mit der angeforderten virtuellen Speicheradresse verknüpft ist, enthält.In this regard, a detailed description of a page fault sequence performed by the PPU fault handler 215 in the event of a transition from CPU native to CPU common is now provided to show how atomic operations and transition states are used can be used to more effectively manage a page fault sequence. The page fault sequence is triggered by a thread in the PPU 202 attempting to access a virtual address for which a mapping in the PPU page table 208 does not exist. When a thread attempts to access data via a virtual memory address, the PPU 202 (particularly a user-level thread) requests a translation from the PPU page table 208 . In response, a PPU page fault occurs because the PPU page table 208 does not contain an allocation associated with the requested virtual memory address.

Nach dem Auftreten des Seitenfehlers tritt der Strang in einen Einfangzustand ein, hält an und die PPU-Fehlerbehandlungseinheit 215 führt eine Seitenfehlersequenz aus. Die PPU-Fehlerbehandlungseinheit 215 liest das PSD 210 aus, um zu ermitteln, welche Speicherseite mit der virtuellen Speicheradresse verknüpft ist, und den Zustand für die virtuelle Speicheradresse zu ermitteln. Die PPU-Fehlerbehandlungseinheit 215 ermittelt aus dem PSD 210, dass der Besitzzustand für diese Speicherseite CPU-Eigen ist. Folglich kann auf die von der PPU 202 angeforderten Daten durch die CPU 202 über eine virtuelle Speicheradresse nicht zugegriffen werden. Eine Zustandsinformation für die Speicherseite gibt ferner an, dass die angeforderten Daten nicht in den PPU-Speicher 204 verschoben werden können.After the page fault occurs, the thread enters a trap state, stops, and the PPU fault handler 215 executes a page fault sequence. The PPU error handler 215 reads the PSD 210 to determine which memory page is associated with the virtual memory address and to determine the state for the virtual memory address. The PPU error handler 215 determines from the PSD 210 that the ownership state for this memory page is CPU native. Consequently, the data requested by the PPU 202 cannot be accessed by the CPU 202 via a virtual memory address. State information for the memory page also indicates that the requested data cannot be moved to the PPU memory 204 .

Auf der Grundlage der Zustandsinformation, die aus dem PSD 210 erhalten wird, ermittelt die PPU-Fehlerbehandlungseinheit 215, dass ein neuer Zustand für die Speicherseite CPU-gemeinsam sein sollte. Die PPU-Fehlerbehandlungseinheit 215 ändert den Zustand auf „Übergang zu CPU-gemeinsam“. Dieser Zustand gibt an, dass die Seite aktuell im Prozess des Übergangs zu CPU-gemeinsam ist. Wenn die PPU-Fehlerbehandlungseinheit 215 in einer Mikrosteuerung in der Speicherverwaltungseinheit ausgeführt wird, dann aktualisieren zwei Prozessoren das PSD 210 in asynchroner Weise, wobei atomare vergleichen-und-austauschen („CAS“) Operationen an dem PSD 210 angewendet werden, um den Zustand auf „Übergang zu GPU-sichtbar“ (CPU-gemeinsam) zu ändern.Based on the state information obtained from the PSD 210, the PPU error handler 215 determines that a new state for the memory page should be CPU common. The PPU error handler 215 changes the state to transition to CPU shared. This state indicates that the page is currently in the process of transitioning to CPU shared. When the PPU error handler 215 executes in a microcontroller in the memory management unit, two processors update the PSD 210 in an asynchronous manner, applying atomic compare-and-swap ("CAS") operations to the PSD 210 to update the state Change "GPU-visible transition" (CPU-shared).

Die PPU 202 aktualisiert die PPU-Seitentabelle 208, um die virtuelle Adresse mit der Speicherseite zu verknüpfen. Die PPU 202 setzt ferner die TLB-Cache-Speichereinträge auf ungültig. Als nächstes führt die PPU 202 eine weitere atomare Vergleichen-und-Austauschen-Operation an dem PSD 210 aus, um den Besitzzustand, der mit der Speicherseite verknüpft ist, auf CPU-gemeinsam zusetzen. Schließlich endet die Seitenfehlerfrequenz und der Strang, der die Daten über die virtuelle Speicheradresse angefordert hat, nimmt die Verarbeitung wieder auf.The PPU 202 updates the PPU page table 208 to associate the virtual address with the memory page. The PPU 202 also invalidates the TLB cache entries. Next, the PPU 202 performs another atomic compare-and-swap operation on the PSD 210 to set the ownership state associated with the memory page to CPU-shared. Eventually, the page fault frequency ends and the thread that requested the virtual memory address data resumes processing.

Fehlerpuffererror buffer

Die Behebung von Seitenfehlern, die von der CPU 102 erzeugt wurden, beinhaltet nicht den Fehlerpuffer 216. Jedoch die Behebung von Seitenfehlern, die von der PPU MMU 213 erzeugt wurden, betreffen den Fehlerpuffer 216. Die Rolle des Fehlerpuffers 216 bei der Behebung von Seitenfehlern, die von der PPU MMU 213 erzeugt wurden, ist nachfolgend detaillierter mit Bezug zu den 5 und 6 beschrieben.Page fault recovery generated by the CPU 102 does not involve the fault buffer 216. However, page fault recovery generated by the PPU MMU 213 does involve the fault buffer 216. The role of the fault buffer 216 in page fault recovery, generated by the PPU MMU 213 is described in more detail below with reference to the 5 and 6 described.

5 zeigt ein virtuelles Speichersystem 500 zur Speicherung von Fehlern in einem Fehlerpuffer gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das virtuelle Speichersystem 500 eine PPU-Fehlerbehandlungseinheit 215, einen Fehlerpuffer 216 und eine PPU 202 mit mehreren Datenstrom-Multiprozessoren 504. 5 FIG. 5 shows a virtual memory system 500 for storing errors in an error buffer according to an embodiment of the present invention. As shown, the virtual memory system 500 includes a PPU error handler 215, an error buffer 216, and a PPU 202 with multiple data stream multiprocessors 504.

Der Fehlerpuffer 216 speichert Fehlerpuffereinträge 502, die Information angeben, die mit Seitenfehlern in Beziehung steht, die von der PPU 202 erzeugt wurden. Die Fehlerpuffereinträge 502 können beispielsweise die Art des Zugriffs, der versucht wurde (beispielsweise lesen, schreiben oder atomar), die virtuelle Speicheradresse, für die ein versuchter Zugriff einen Seitenfehler hervorrief, den virtuellen Adressenraum und eine Angabe einer Anhaltung eines Strangs, der einen Seitenfehlern hervorgerufen hat, enthalten. Wenn während des Betriebs die PPU 202 einen Seitenfehler hervorruft, kann die PPU 202 einen Fehlerpuffereintrag 502 in den Fehlerpuffer 216 schreiben, um die PPU-Fehlerbehandlungseinheit 215 über die fehlererzeugende Speicherseite und die Art des Zugriffs, die den Fehler hervorrief, zu informieren. Die PPU-Fehlerbehandlungseinheit 215 führt dann Aktionen aus, um den Seitenfehler zu beheben. Der Fehlerpuffer 216 kann mehrere Fehler speichern, da die PPU 202 mehrere Stränge ausführt, wobei jeder Strang einen oder mehrere Fehler aufgrund der Pipeline-Natur der Speicherzugriffe der PPU 202 hervorrufen kann. Jeder der Fehlerpuffereinträge 502 kann von einem oder mehreren Datenstrom-Multiprozessoren 504, die in der PPU 202 enthalten sind, erzeugt werden.The fault buffer 216 stores fault buffer entries 502 that indicate information related to page faults generated by the PPU 202. FIG. The error buffer entries 502 may include, for example, the type of access attempted (e.g., read, write, or atomic), the virtual memory address for which an attempted access caused a page fault, the virtual address space, and an indication of a thread halt that caused a page fault did contain. During operation, if the PPU 202 generates a page fault, the PPU 202 may write an error buffer entry 502 to the error buffer 216 to inform the PPU error handler 215 of the memory page generating the error and the type of access that generated the error. The PPU error handler 215 then takes actions to recover from the page fault. The error buffer 216 may store multiple errors as the PPU 202 executes multiple threads, where each thread may generate one or more errors due to the pipelined nature of the PPU 202 memory accesses. Each of the error buffer entries 502 may be generated by one or more data stream multiprocessors 504 included in the PPU 202.

6 zeigt ein virtuelles Speichersystem 600 zur Behebung von Seitenfehlern, die von der PPU 202 erzeugt werden, gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das virtuelle Speichersystem 600 eine PPU-Fehlerbehandlungseinheit 215, einen Fehlerpuffer 216, einen Systemspeicher 104 mit einer Befehlswarteschlange 214, und eine PPU 202 mit einer Kopiereinheit 212. 6 FIG. 6 shows a virtual memory system 600 for recovering from page faults generated by the PPU 202 according to an embodiment of the present invention. As shown, the virtual memory system 600 includes a PPU error handling unit 215, an error buffer 216, a system memory 104 with a command queue 214, and a PPU 202 with a copy unit 212.

Die PPU-Fehlerbehandlungseinheit 215 liest Fehlerpuffereinträge 502 aus, die in dem Fehlerpuffer 216 gespeichert sind, um zu bestimmen, wie die Seitenfehler aufzulösen sind, die mit den Fehlerpuffereinträgen 502 verknüpft sind. Zur Behebung der Seitenfehler führt die PPU-Fehlerbehandlungseinheit 215 eine Seitenfehlersequenz aus, um unter anderem einen PSD-Eintrag, der mit Speicherseiten verknüpft ist, die den Fehlerpuffereinträgen 502 entsprechen, zu modifizieren, und/oder um Speicherseiten, die mit den Fehlerpuffereinträgen 502 verknüpft sind, zu verschieben. Während einer Seitenfehlersequenz können die CPU 102 oder die PPU 202 Befehle in die Befehlswarteschlange 214 zur Ausführung durch die Kopiereinheit 212 schreiben. Eine derartige Vorgehensweise macht die CPU 102 oder die PPU 202 dafür frei, andere Aufgaben auszuführen, während die Kopiereinheit 212 die Befehle, die in der Befehlswarteschlange 214 gespeichert sind, ausliest und ausführt, ferner ist damit möglich, dass alle Befehle für eine Fehlersequenz gleichzeitig aufgereiht werden, wodurch die Überwachung des Fortschritts der Fehlersequenz vermieden wird. Befehle, die von der Kopiereinheit 212 ausgeführt werden, können unter anderem die Löschung, die Erzeugung oder die Modifizierung von Seitentabelleneinträgen in der PPU-Seitentabelle 208, das Auslesen oder Schreiben von Daten aus dem Systemspeicher 104 und das Auslesen oder Schreiben von Daten in den PPU-Speicher 204 beinhalten.The PPU error handler 215 reads error buffer entries 502 stored in the error buffer 216 to determine how to resolve the page faults associated with the error buffer entries 502. To recover from the page faults, the PPU fault handler 215 executes a page fault sequence to, among other things, remove a PSD entry associated with memory pages that corresponding to the error buffer entries 502, and/or to move memory pages associated with the error buffer entries 502. During a page fault sequence, the CPU 102 or the PPU 202 may write instructions to the instruction queue 214 for the copy unit 212 to execute. Such an approach frees the CPU 102 or PPU 202 to perform other tasks while the copy unit 212 reads and executes the instructions stored in the instruction queue 214, and allows all instructions for an error sequence to be queued at the same time which avoids monitoring the progress of the error sequence. Instructions executed by copy unit 212 may include, but are not limited to, deleting, creating or modifying page table entries in PPU page table 208, reading or writing data from system memory 104, and reading or writing data to the PPU -include memory 204.

Die CPU 102 und die PPU 202 können separat eine Kontextumschaltung ausführen. Anders ausgedrückt, eine PPU 202 kann einen Fehlerpuffereintrag in den Fehlerpuffer 216 in Reaktion darauf schreiben, dass ein Fehler erkannt wird. Dieser Fehlerpuffer wird gegebenenfalls nicht sofort von der PPU-Fehlerbehandlungseinheit 215 in der CPU abgearbeitet. Stattdessen kann die CPU 102 andere Verarbeitungsaufgaben ausführen und kann dann die PPU-Fehler behandlen. Daher arbeiten die CPU 102 und die PPU 202 gegebenenfalls nicht notwendigerweise gleichzeitig im gleichen Kontext. Anders ausgedrückt, die CPU 102 kann einen Prozess ausführen, der sich von dem Prozess unterscheidet, der die Arbeit erzeugte, die aktuell in der PPU 202 ausgeführt wird. Um die PPU-Fehlerbehandlungseinheit 215 darüber zu informieren, welcher Prozess zu der Arbeit der PPU 202 gehört, die einen Fehlerpuffereintrag 502 erzeugt hat, stellt die PPU 202 einen Instanzenzeiger mit dem Fehlerpuffereintrag bereit, um die CPU 102 über den Adressenraum zu informieren, in welchem die PPU 202 den Fehler erzeugt hat. Der Fehlerpuffer 216 kann mehrere Seitenfehlereinträge enthalten, die mit der gleichen Speicherseite verknüpft sind, da mehrere Datenstrom-Multiprozessoren 504 parallel ausgeführt werden und Seitenfehler erzeugen können, die die gleiche Speicherseite betreffen. Die PPU-Fehlerbehandlungseinheit 215 untersucht den Fehlerpuffer 216, um zu bestimmen, welche Fehler zu beheben sind.CPU 102 and PPU 202 may separately perform context switching. In other words, a PPU 202 may write an error buffer entry to the error buffer 216 in response to an error being detected. This error buffer may not be processed immediately by the PPU error handling unit 215 in the CPU. Instead, the CPU 102 can perform other processing tasks and then handle the PPU errors. Therefore, the CPU 102 and the PPU 202 may not necessarily be operating concurrently in the same context. In other words, the CPU 102 can execute a process that is different from the process that generated the work currently executing in the PPU 202 . To inform the PPU error handler 215 which process belongs to the work of the PPU 202 that created an error buffer entry 502, the PPU 202 provides an instance pointer with the error buffer entry to inform the CPU 102 of the address space in which the PPU 202 generated the error. Fault buffer 216 may contain multiple page fault entries associated with the same memory page, since multiple stream multiprocessors 504 are executing in parallel and may generate page faults affecting the same memory page. The PPU error handler 215 examines the error buffer 216 to determine which errors to fix.

Variationen der UVM-SystemarchitekturVariations in UVM system architecture

Es sind diverse Modifizierungen an dem vereinheitlichten virtuellen Speichersystem 200 möglich. Beispielsweise kann in einigen Ausführungsformen nach dem Schreiben eines Fehlerpuffereintrags in den Fehlerpuffer 216 die PPU 202 einen CPU-Interrupt auslösen, um die CPU 102 zu veranlassen, Fehlerpuffereinträge in dem Fehlerpuffer 216 auszulesen und jegliche Operationen auszuführen, die in Reaktion auf den Fehlerpuffereintrag geeignet sind. In anderen Ausführungsformen kann die CPU 102 periodisch den Fehlerpuffer 216 abfragen. Im Falle, dass die CPU 102 einen Fehlerpuffereintrag in dem Fehlerpuffer 216 findet, führt die CPU 102 eine Reihe von Operationen in Reaktion auf den Fehlerpuffereintrag aus.Various modifications to the unified virtual memory system 200 are possible. For example, in some embodiments, after writing an error buffer entry to error buffer 216, PPU 202 may issue a CPU interrupt to cause CPU 102 to read error buffer entries in error buffer 216 and perform any operations appropriate in response to the error buffer entry. In other embodiments, CPU 102 may poll error buffer 216 periodically. In the event CPU 102 finds an error buffer entry in error buffer 216, CPU 102 performs a series of operations in response to the error buffer entry.

In einigen Ausführungsformen speichert der Systemspeicher 104 anstelle des PPU-Speichers 204 die PPU-Seitentabelle 208. In anderen Ausführungsformen kann eine Cache-Hierarchie mit einer oder mehreren Ebenen, etwa eine Hierarchie mit einer einzelnen oder mehreren Ebenen an Translations-Nebenschaupuffern (TLB) (nicht gezeigt) realisiert werden, um virtuelle Speicherübersetzungen für die CPU-Seitentabelle 206 oder die PPU-Seitentabelle 208 zu speichern.In some embodiments, system memory 104 stores PPU page table 208 instead of PPU memory 204. In other embodiments, a single or multiple level cache hierarchy, such as a single or multiple level translation lookaside buffer (TLB) hierarchy ( not shown) can be implemented to store virtual memory translations for the CPU page table 206 or the PPU page table 208.

In noch anderen Ausführungsformen kann in dem Falle, dass ein Strang, der in der PPU 202 ausgeführt wird, einen PPU-Fehler hervorruft (ein „fehlererzeugender Strang“) die PPU 202 eine oder mehrere Aktionen durchführen. Diese Aktionen enthalten: Anhalten der gesamten PPU 202, Anhalten des SM, der den fehlererzeugenden Strang ausführt, Anhalten der PPU MMU 213, Anhalten lediglich des fehlererzeugenden Strangs, Anhalten einer Gruppe an Strängen, die den fehlererzeugenden Strang enthält, oder Anhalten einer oder mehrerer Ebenen von TLB. In einigen Ausführungsformen geht, nachdem ein PPU-Seitenfehler auftrat, und eine Seitenfehlersequenz von dem vereinheitlichten virtuellen Speichersystem 200 ausgeführt ist, die Ausführung des fehlererzeugenden Strangs weiter, und der fehlererzeugenden Strang versucht wieder, die Speicherzugriffsanforderung auszuführen, die den Seitenfehler hervorrief. In einigen Ausführungsformen wird das Anhalten eines TLB so ausgeführt, dass dieses als ein Speicherzugriff mit langer Verarbeitungszeit für den fehlererzeugenden SM oder den fehlererzeugenden Strang erscheint, so dass der SM keine spezielle Operation für den Fehler ausführen muss.In still other embodiments, in the event that a thread executing on PPU 202 causes a PPU fault (a "faulting thread"), PPU 202 may take one or more actions. These actions include: stopping the entire PPU 202, stopping the SM executing the fault-producing thread, stopping the PPU MMU 213, stopping only the fault-producing thread, stopping a group of threads that includes the fault-producing thread, or stopping one or more levels by TLB. In some embodiments, after a PPU page fault has occurred and a page fault sequence is executed by the unified virtual memory system 200, execution of the faulting thread continues and the faulting thread again attempts to execute the memory access request that caused the page fault. In some embodiments, stopping a TLB is performed so that it appears as a long-running memory access to the faulting SM or thread, so that the SM does not have to perform a special operation on the fault.

Schließlich kann in anderen alternativen Ausführungsformen der UVM-Treiber 101 Befehle enthalten, die die CPU 102 veranlassen, eine oder mehrere Operationen zur Verwaltung des UVM-Systems 200 und zur Behebung eines Seitenfehlers auszuführen, etwa Zugreifen auf die CPU-Seitentabelle 206, das PSD 210 und/oder den Fehlerpuffer 216. In anderen Ausführungsformen kann ein Betriebssystem-Kernel (nicht gezeigt) ausgebildet sein, das UVM-System 200 zu verwalten und einen Seitenfehler zu beheben, indem auf die CPU-Seitentabelle 206, das PSD 210 und/oder den Fehlerpuffer 216 zugegriffen wird. In noch anderen Ausführungsformen kann ein Betriebssystem-Kernel in Verbindung mit dem UVM-Treiber 101 arbeiten, um das UVM-System 200 zu verwalten und einen Seitenfehler zu beheben, indem auf die CPU-Seitentabelle 206, das PSD 210 und/oder den Fehlerpuffer 21 zugegriffen wird.Finally, in other alternative embodiments, the UVM driver 101 may contain instructions that cause the CPU 102 to perform one or more operations to manage the UVM system 200 and recover from a page fault, such as accessing the CPU page table 206, the PSD 210 and/or the fault buffer 216. In other embodiments, an operating system kernel (not shown) may be configured to manage the UVM system 200 and recover from a page fault by accessing the CPU page table 206, the PSD 210, and/or the error buffer 216 is accessed. In still other embodiments, an operating system kernel may work in conjunction with UVM driver 101 to manage UVM system 200 and recover a page fault by accessing CPU page table 206, PSD 210, and/or fault buffer 21 is accessed.

7 zeigt ein Flussdiagramm von Verfahrensschritten zur Verwaltung von Zuordnungen von virtuellem Speicher zu physikalischem Speicher mittels eines Seitenzustandsverzeichnisses gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den 1-6 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt. 7 12 is a flow diagram of method steps for managing virtual memory to physical memory mappings using a page state map according to an embodiment of the present invention. Although the process steps in connection with the 1-6 are described, those skilled in the art will recognize that any system suitable for performing the method steps in any order is within the scope of the present invention.

Wie gezeigt, beginnt das Verfahren 700 beim Schritt 702, in welchem eine PPU 202 eine erste Operation ausführt, die eine erste virtuelle Speicheradresse anspricht. Im Schritt 704 liest die PPU MMU 213 die PPU-Seitentabelle 208 aus und ermittelt, dass die PPU-Seitentabelle 208 keine Zuordnung, die mit der ersten virtuellen Speicherpreise verknüpft ist, enthält. Die PPU MMU 213 erzeugt einen ersten Seitenfehler, wenn diese Ermittelung vorgenommen wird. Im Schritt 706 behebt die PPU-Fehlerbehandlungseinheit 215 Seitenfehler und fügt Befehle in der Befehlswarteschlange 214 ein, die Kopiereinheit 212 in der PPU 202 liest die Befehlswarteschlange 214 aus, um eine Zuordnung zu ermitteln, die der ersten virtuellen Speicheradresse entspricht. Im Schritt 708 aktualisiert die Kopiereinheit 212 die PPU-Seitentabelle 208, so dass sie die Zuordnung enthält.As shown, method 700 begins at step 702 in which a PPU 202 performs a first operation that addresses a first virtual memory address. In step 704, the PPU MMU 213 reads the PPU page table 208 and determines that the PPU page table 208 does not contain an allocation associated with the first virtual memory price. The PPU MMU 213 generates a first page fault when making this determination. In step 706, the PPU error handler 215 fixes page faults and inserts commands into the command queue 214, the copy unit 212 in the PPU 202 reads the command queue 214 to determine a mapping corresponding to the first virtual memory address. In step 708, the copy unit 212 updates the PPU page table 208 to contain the allocation.

8 gibt ein Flussdiagramm von Verfahrensschritten zur Verfolgung von Seitenfehlern gemäß einer Ausführungsform der vorliegenden Erfindung an. Obwohl die Verfahrensschritte in Verbindung mit den 1-6 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt. 8th Figure 12 provides a flowchart of method steps for tracking page faults according to an embodiment of the present invention. Although the process steps in connection with the 1-6 are described, those skilled in the art will recognize that any system suitable for performing the method steps in any order is within the scope of the present invention.

Wie gezeigt, beginnt das Verfahren 800 im Schritt 802, in welchem eine PPU 202 einen ersten Befehl ausführt, der mit einer ersten virtuellen Speicheradresse verknüpft ist. Im Schritt 804 ermittelt die PPU MMU 213, dass die PPU-Seitentabelle 208 eine erste Zuordnung, die mit der ersten virtuellen Speicheradresse verknüpft ist, nicht enthält. Im Schritt 805 wird der Datenstrom-Multiprozessor 504 oder eine andere Einheit, die den ersten Befehl ausführt, angehalten. Im Schritt 806 sendet die PPU 202 einen ersten Seitenfehler zu dem Fehlerpuffer 216.As shown, the method 800 begins at step 802 in which a PPU 202 executes a first command associated with a first virtual memory address. In step 804, the PPU MMU 213 determines that the PPU page table 208 does not contain a first mapping associated with the first virtual memory address. In step 805, the stream multiprocessor 504 or other entity executing the first instruction is halted. In step 806, the PPU 202 sends a first page fault to the fault buffer 216.

9 gibt ein Flussdiagramm von Verfahrensschritten zur Behebung von Seitenfehlern mit einem Fehlerpuffer gemäß einer Ausführungsform der vorliegenden Erfindung an. Obwohl die Verfahrensschritte in Verbindung mit den 1-6 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt. 9 Figure 12 provides a flowchart of method steps for recovering from page faults with a fault buffer according to an embodiment of the present invention. Although the process steps in connection with the 1-6 are described, those skilled in the art will recognize that any system configured to perform the method steps in any order is within the scope of the present invention.

Wie gezeigt, beginnt das Verfahren 900 in einem Schritt 902, in welchem ein Fehlerpuffer 216 mehrere Fehlerpuffereinträge speichert. Im Schritt 904 liest eine PPU-Fehlerbehandlungseinheit 215 die Fehlerpuffereinträge aus, um die Fehlerpuffereinträge zu behandeln. Im Schritt 906 ermittelt die PPU-Fehlerbehandlungseinheit 215, welche Schritte auszuführen sind, um den Fehlerpuffer zu behandeln, und löst eine Seitenfehlersequenz aus, um einen oder mehrere Seitenfehler, die mit den Fehlerpuffereinträgen verknüpft sind, zu beheben. Im Schritt 908 sendet die PPU-Fehlerbehandlungseinheit 215 Befehle an eine Befehlswarteschlange 214, um die PPU-Seitentabelle 208 zu aktualisieren. Im Schritt 910 fahren der Datenstrom-Multiprozessoren 504 oder eine andere Einheit, die angehalten war, mit der Ausführung fort.As shown, the method 900 begins at a step 902 in which an error buffer 216 stores a plurality of error buffer entries. In step 904, a PPU error handling unit 215 reads the error buffer entries to handle the error buffer entries. In step 906, the PPU error handler 215 determines what steps to take to handle the error buffer and initiates a page fault sequence to fix one or more page faults associated with the error buffer entries. In step 908, the PPU error handler 215 sends commands to a command queue 214 to update the PPU page table 208. FIG. At step 910, the stream multiprocessor 504 or other entity that was halted continues execution.

10 zeigt ein Flussdiagramm von Verfahrensschritten zur Erzeugung und zur Verwaltung von gemeinsamen Zeigern in einer virtuellen Speicherarchitektur gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den 1-6 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt. 10 12 shows a flowchart of method steps for creating and managing common pointers in a virtual memory architecture according to an embodiment of the present invention. Although the process steps in connection with the 1-6 are described, those skilled in the art will recognize that any system suitable for performing the method steps in any order is within the scope of the present invention.

Wie gezeigt, beginnt das Verfahren 1000 im Schritt 1002, in welchem der UVM-Treiber 101 einen ersten Eintrag für ein Seitenzustandverzeichnis speichert, der eine Zuordnung zwischen einer ersten virtuellen Speicheradresse und einer ersten physikalischen Speicheradresse enthält. Im Schritt 1004 übersetzt die CPU MMU 209 oder die PPU MMU 213 die erste virtuelle Speicheradresse in die erste physikalische Adresse auf der Grundlage des ersten Seitenzustandsverzeichnisses. Im Schritt 1005 wird eine Speicherseite, die mit der ersten virtuellen Adresse verknüpft ist, kopiert oder verschoben. Im Schritt 1006 speichert der UVM-Treiber 101 einen zweiten Eintrag des Seitenzustandsverzeichnisses (oder modifiziert alternativ den ersten Eintrag des Seitenzustandsverzeichnisses), der eine Zuordnung zwischen der ersten virtuellen Speicheradresse und einer zweiten physikalischen Speicheradresse enthält. Dieser zweite Eintrag des Zustandverzeichnisses wird in Reaktion auf die Modifizierung des Zustands der Speicherseite gespeichert, die mit dem ersten Eintrag des Seitenzustandsverzeichnisses verknüpft ist. Beispielsweise kann die Speicherseite von einer Speichereinheit zu einer weiteren verschoben werden, oder kann von einer Speichereinheit in eine andere kopiert werden. Im Schritt 1008 übersetzt die CPU MMU 209 oder die PPU MMU 213 die erste virtuelle Speicheradresse in die zweite physikalische Speicheradresse auf der Grundlage des zweiten Eintrags des Seitenzustandsverzeichnisses.As shown, the method 1000 begins at step 1002 in which the UVM driver 101 stores a first entry for a page state table containing a mapping between a first virtual memory address and a first physical memory address. In step 1004, the CPU MMU 209 or the PPU MMU 213 translates the first virtual memory address into the first physical address based on the first page state dictionary. In step 1005, a memory page associated with the first virtual address is copied or moved. In step 1006, the UVM driver 101 stores a second page state table entry (or alternatively modifies the first page state table entry) containing a mapping between the first virtual memory address and a second physical memory address. This second state table entry is stored in response to the modification of the state of the memory page linked to the first page state table entry. For example, the memory page can be moved from one memory unit to another, or copied from one memory unit to another. In step 1008, the CPU MMU 209 or the PPU MMU 213 translates the first virtual memory address to the second physical memory address based on the second page state table entry.

11 gibt ein Flussdiagramm von Verfahrensschritten zur Verwaltung des Besitzzustands in einem virtuellen Speichersubsystem gemäß einer Ausführungsform der vorliegenden Erfindung an. Obwohl die Verfahrensschritte in Verbindung mit den 1 - 6 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt. 11 Figure 12 provides a flowchart of method steps for managing ownership in a virtual memory subsystem according to an embodiment of the present invention. Although the process steps in connection with the 1 - 6 are described, those skilled in the art will recognize that any system configured to perform the method steps in any order is within the scope of the present invention.

Wie gezeigt, beginnt das Verfahren 1100 im Schritt 1102, in welchem die CPU MMU 209 oder die PPU MMU 213 einen Seitenfehler in Reaktion auf eine Speicherzugriffsanforderung der CPU 102 oder der PPU 202 ausgibt. Im Schritt 1104 ermittelt die CPU-Fehlerbehandlungseinheit 211 oder die PPU-Fehlerbehandlungseinheit 215 einen Eintrag in einem Seitenzustandsverzeichnis 210, der einer Speicherseite entspricht, die mit der virtuellen Speicheradresse verknüpft ist. Im Schritt 1107 wird der Besitzzustand der Speicherseite in dem Seitenzustandsverzeichnis 210 modifiziert und die Speicherseite wird bei Bedarf verschoben. Im Schritt 1106 liest die CPU-Fehlerbehandlungseinheit 211 oder die PPU-Fehlerbehandlungseinheit 215 einen Besitzzustand, der mit der Speicherseite verknüpft ist, aus dem Eintrag in dem Seitenzustandsverzeichnis 210 aus. Im Schritt 1108 aktualisiert die CPU-Fehlerbehandlungseinheit 211 oder die PPU-Fehlerbehandlungseinheit 115 die lokale Seitentabelle derart, dass diese einen Eintrag enthält, der der virtuellen Speicheradresse entspricht, und die virtuelle Speicheradresse mit der Speicherseite verknüpft.As shown, method 1100 begins at step 1102 in which CPU MMU 209 or PPU MMU 213 issues a page fault in response to a CPU 102 or PPU 202 memory access request. In step 1104, the CPU error handler 211 or the PPU error handler 215 locates an entry in a page state table 210 that corresponds to a memory page associated with the virtual memory address. In step 1107 the ownership state of the memory page is modified in the page state table 210 and the memory page is moved if necessary. In step 1106, the CPU error handler 211 or the PPU error handler 215 reads an ownership state associated with the memory page from the page state table 210 entry. At step 1108, the CPU error handler 211 or the PPU error handler 115 updates the local page table to include an entry corresponding to the virtual memory address and associates the virtual memory address with the memory page.

Zusammengefasst gilt: es ist ein vereinheitlichtes virtuelles Speichersystem bereitgestellt, das Speicher in gemeinsamer Weise für eine CPU und eine oder mehrere PPUs verwaltet. Das vereinheitlichte virtuelle Speichersystem umfasst ein Seitenzustandsverzeichnis, das Zuordnungen speichert, die in einer Seitentabelle, die zu der CPU gehört, und einer Seitentabelle, die zu der PPU gehört, enthalten sind. Wenn eine PPU oder die CPU einen Seitenfehler auslöst, ist das Seitenzustandsverzeichnis verfügbar, um den Zustand von Speicherseiten, die mit dem Seitenfehler verknüpft sind, bereitzustellen. Wenn ferner eine PPU einen Seitenfehler auslöst, sendet die PPU einen Seitenfehler zu einem Fehlerpuffer. Die PPU-Fehlerbehandlungseinheit untersucht den Inhalt des Fehlerpuffers, um die Seitenfehler zu beheben. Die Bereitstellung eines Fehlerpuffers erlaubt es der PPU-Fehlerbehandlungseinheit, Seitenfehler, die von der PPU ausgeführt werden, „zu vereinigen“. Desweiteren verwaltet ein vereinheitlichter virtueller Speicher-Treiber das Seitenzustandsverzeichnis und zugehörige virtuelle Speicheradressen derart, dass virtuelle Speicheradressen gemeinsam sind für die CPU und die PPU. Schließlich realisiert der vereinheitlichte virtuelle Speicher-Treiber ein Migrationsschema bzw. ein Verschiebungsschema, das Speicherseiten auf der Grundlage einer Nutzung durch die CPU und PPU verschiebt.In summary, a unified virtual memory system is provided that manages memory in a common manner for a CPU and one or more PPUs. The unified virtual memory system includes a page state table that stores mappings contained in a page table associated with the CPU and a page table associated with the PPU. When a PPU or the CPU triggers a page fault, the page state table is available to provide the state of memory pages associated with the page fault. Furthermore, when a PPU triggers a page fault, the PPU sends a page fault to a fault buffer. The PPU error handler examines the contents of the error buffer to fix the page faults. The provision of a fault buffer allows the PPU fault handler to "merge" page faults executed by the PPU. Furthermore, a unified virtual memory driver manages the page state map and associated virtual memory addresses such that virtual memory addresses are common to the CPU and the PPU. Finally, the unified virtual memory driver implements a migration scheme that moves memory pages based on usage by the CPU and PPU.

Ein Vorteil der offenbarten Vorgehensweise besteht darin, dass Anwendungen auf Anwenderebene nicht mehrere Zeiger verfolgen müssen, abhängig davon, wo spezielle Datenelemente gespeichert sind. Ein weiterer Vorteil besteht darin, dass Speicherseiten zwischen Speichereinheiten auf der Grundlage der Verwendung verschoben werden, was es möglich macht, dass Speicherseiten lokal für Einheiten angeordnet werden, die auf die Speicherseiten häufiger zugreifen. Ein weiterer Vorteil besteht darin, dass ein Fehlerpuffer bereitgestellt wird, der es möglich macht, dass von der PPU erzeugte Fehler für eine effiziente Behandlung vereinigt werden.An advantage of the disclosed approach is that user-level applications do not need to keep track of multiple pointers depending on where particular data items are stored. Another advantage is that memory pages are moved between memory devices based on usage, allowing memory pages to be localized to devices that access the memory pages more frequently. Another advantage is that an error buffer is provided, allowing errors generated by the PPU to be pooled for efficient handling.

Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert werden. Das bzw. die Programme des Programmprodukts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können in einer Vielzahl von computerlesbaren Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne Einschränkung: (i) nichtbeschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen in einem Computer, etwa CD-ROM-Disketten, die von einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, ROM-Chips oder eine andere Art eines nicht flüchtigen Halbleiterspeichers), auf welchen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder ein Festplattenlaufwerk oder eine andere Art eines Halbleiterspeichers mit wahlfreiem Zugriff), auf welchen änderbare Information gespeichert ist.An embodiment of the invention may be implemented as a program product for use in a computer system. The program(s) of the program product define functions of the embodiments (including the methods described herein) and may be embodied on a variety of computer-readable storage media. Illustrative computer-readable storage media include, without limitation: (i) non-writable storage media (e.g., read-only memory devices in a computer, such as CD-ROM disks readable by a CD-ROM drive, flash memory, ROM chips or some other type of non-volatile semiconductor memory) on which information is permanently stored; and (ii) writable storage media (e.g., floppy disks in a floppy disk drive or a hard disk drive or other type of random access semiconductor memory) on which alterable information is stored.

Claims (10)

Ein computerimplementiertes Verfahren zum Zugreifen auf Daten in einem virtuellen Speichersubsystem, wobei das Verfahren umfasst: Ausgeben eines Seitenfehlers in Reaktion auf eine Speicherzugriffsanforderung, wobei eine lokale Seitentabelle (208) einen Eintrag nicht enthält, der einer virtuellen Speicheradresse entspricht, die in der Speicherzugriffsanforderung enthalten ist; reagierend auf den Seitenfehler, Ausführen einer Seitenfehlersequenz, die beinhaltet: Ermitteln eines Eintrags in einem Seitenzustandsverzeichnis (210), der einer Speicherseite entspricht, die mit der virtuellen Speicheradresse verknüpft ist; Auslesen eines Besitzzustands, der mit der Speicherseite verknüpft ist, aus dem Eintrag in dem Seitenzustandsverzeichnis (210), wobei der Besitzzustand auf Grundlage eines Verwendungsverlaufs der Speicherseite bestimmt wird; und Aktualisieren der lokalen Seitentabelle (208) derart, dass sie einen Eintrag enthält, der der virtuellen Speicheradresse entspricht und die virtuelle Speicheradresse mit der Speicherseite verknüpft.A computer-implemented method for accessing data in a virtual storage subsystem, the method comprising: issuing a page fault in response to a memory access request, wherein a local page table (208) does not contain an entry corresponding to a virtual memory address contained in the memory access request; responsive to the page fault, executing a page fault sequence that includes: finding an entry in a page state table (210) corresponding to a memory page associated with the virtual memory address; retrieving an ownership state associated with the memory page from the entry in the page state table (210), the ownership state being determined based on a usage history of the memory page; and updating the local page table (208) to include an entry corresponding to the virtual memory address and linking the virtual memory address to the memory page. Das Verfahren nach Anspruch 1, wobei: vor der Ausführung der Seitenfehlersequenz der Besitzzustand, der mit der Speicherseite verknüpft ist, angibt, dass die Speicherseite Zentrale-Recheneinheit-Eigen (CPU-Eigen) ist; Ausführen der Seitenfehlersequenz umfasst: Modifizieren des Besitzzustands, der mit der Speicherseite verknüpft ist, auf CPU-gemeinsam; und die lokale Speichertabelle (208) eine Parallelverarbeitungseinheit-(PPU) Seitentabelle umfasst.The procedure after claim 1 wherein: prior to execution of the page fault sequence, the ownership state associated with the memory page indicates that the memory page is central processing unit owned (CPU owned); Executing the page fault sequence includes: modifying the ownership state associated with the memory page to CPU shared; and the local memory table (208) comprises a parallel processing unit (PPU) page table. Das Verfahren nach Anspruch 2, wobei die Speicherseite in einem Systemspeicher (104) liegt, und wobei die PPU-Seitentabelle und eine CPU-Seitentabelle (206) Einträge aufweisen, die die virtuelle Speicheradresse mit der Speicherseite verknüpfen.The procedure after claim 2 , wherein the memory page resides in a system memory (104), and wherein the PPU page table and a CPU page table (206) have entries associating the virtual memory address with the memory page. Das Verfahren nach Anspruch 1, wobei: vor der Ausführung der Seitenfehlersequenz der Besitzzustand, der mit der Speicherseite verknüpft ist, angibt, dass die Speicherseite CPU-Eigen ist; Ausführen der Seitenfehlersequenz ferner umfasst: Modifizieren des Besitzzustands, der mit der Speicherseite verknüpft ist, auf PPU-Eigen; und die lokale Seitentabelle (208) eine PPU-Seitentabelle umfasst.The procedure after claim 1 , wherein: prior to execution of the page fault sequence, the ownership state associated with the memory page indicates that the memory page is CPU-owned; Executing the page fault sequence further comprises: modifying the ownership state associated with the memory page to PPU owned; and the local page table (208) comprises a PPU page table. Das Verfahren nach Anspruch 4, wobei Ausführung der Seitenfehlersequenz ferner umfasst: Verschieben der Speicherseite von einem Systemspeicher zu einem PPU-Speicher.The procedure after claim 4 , wherein execution of the page fault sequence further comprises: moving the memory page from a system memory to a PPU memory. Das Verfahren nach Anspruch 1, wobei: vor der Ausführung der Seitenfehlersequenz der Besitzzustand, der mit der Speicherseite verknüpft ist, angibt, dass die Speicherseite PPU-Eigen ist; Ausführen der Seitenfehlersequenz ferner umfasst: Modifizieren des Besitzzustands, der mit der Speicherseite verknüpft ist, auf CPU-Eigen; und die lokale Seitentabelle eine CPU-Seitentabelle (206) umfasst.The procedure after claim 1 , wherein: prior to execution of the page fault sequence, the ownership state associated with the memory page indicates that the memory page is PPU owned; Executing the page fault sequence further comprises: modifying the ownership state associated with the memory page on CPU native; and the local page table comprises a CPU page table (206). Das Verfahren nach Anspruch 6, wobei Ausführen der Seitenfehlersequenz ferner umfasst: Verschieben der Speicherseite von einem PPU-Speicher (204) in einen Systemspeicher (104).The procedure after claim 6 , wherein executing the page fault sequence further comprises: moving the memory page from a PPU memory (204) to a system memory (104). Das Verfahren nach Anspruch 1, wobei: vor der Ausführung der Seitenfehlersequenz der Besitzzustand, der mit der Speicherseite verknüpft ist, angibt, dass die Speicherseite PPU-Eigen ist; Ausführen der Seitenfehlersequenz ferner umfasst: Modifizieren des Besitzzustands, der mit der Speicherseite verknüpft ist, auf CPU-gemeinsam; und die lokale Seitentabelle (208) eine CPU-Seitentabelle umfasst.The procedure after claim 1 , wherein: prior to execution of the page fault sequence, the ownership state associated with the memory page indicates that the memory page is PPU owned; Executing the page fault sequence further comprises: modifying the ownership state associated with the memory page to CPU shared; and the local page table (208) comprises a CPU page table. Das Verfahren nach Anspruch 8, wobei Ausführen der Seitenfehlersequenz ferner umfasst: Verschieben der Speicherseite von einem PPU-Speicher (204) in einen Systemspeicher (104).The procedure after claim 8 , wherein executing the page fault sequence further comprises: moving the memory page from a PPU memory (204) to a system memory (104). Ein System zum Zugreifen auf Daten in einem virtuellen Speichersubsystem, mit: einer lokalen Seitentabelle (208); und einer ersten Verarbeitungseinheit, die ausgebildet ist, um: zu ermitteln, dass die lokale Speichertabelle (208) einen Eintrag, der einer virtuellen Speicheradresse entspricht, nicht enthält, einen Seitenfehler in Reaktion auf die Ermittelung auszugeben, dass die lokale Seitentabelle (208) den Eintrag nicht enthält; einen Eintrag in einem Seitenzustandverzeichnis (210) zu ermitteln, der einer Speicherseite entspricht, die mit der virtuellen Speicheradresse verknüpft ist; einen Besitzzustand, der mit der Speicherseite verknüpft ist, aus dem Eintrag in dem Seitenzustandsverzeichnis (210) auszulesen, wobei der Besitzzustand auf Grundlage eines Verwendungsverlaufs der Speicherseite bestimmt wird; und die lokale Seitentabelle (208) so zu aktualisieren, dass sie einen Eintrag enthält, der der virtuellen Speicheradresse entspricht und die virtuelle Speicheradresse mit der Speicherseite verknüpft.A system for accessing data in a virtual memory subsystem, comprising: a local page table (208); and a first processing unit configured to: determine that the local memory table (208) does not contain an entry corresponding to a virtual memory address, issue a page fault in response to determining that the local page table (208) contains the entry does not contain; determining an entry in a page state table (210) corresponding to a memory page associated with the virtual memory address; retrieving an ownership state associated with the memory page from the entry in the page state table (210), the ownership state being determined based on a usage history of the memory page; and update the local page table (208) to include an entry corresponding to the virtual memory address and linking the virtual memory address to the memory page.
DE102013022168.4A 2013-03-14 2013-12-29 Unified Virtual Storage System Migration Scheme Active DE102013022168B4 (en)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201361782349P 2013-03-14 2013-03-14
US61/782,349 2013-03-14
US201361800004P 2013-03-15 2013-03-15
US61/800,004 2013-03-15
US14/055,382 2013-10-16
US14/055,382 US10303616B2 (en) 2013-03-14 2013-10-16 Migration scheme for unified virtual memory system

Publications (2)

Publication Number Publication Date
DE102013022168A1 DE102013022168A1 (en) 2014-09-18
DE102013022168B4 true DE102013022168B4 (en) 2023-03-09

Family

ID=51418515

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013022168.4A Active DE102013022168B4 (en) 2013-03-14 2013-12-29 Unified Virtual Storage System Migration Scheme

Country Status (2)

Country Link
CN (1) CN104049903A (en)
DE (1) DE102013022168B4 (en)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020226880A1 (en) 2019-05-03 2020-11-12 University Of Pittsburgh-Of The Commonwealth System Of Higher Education Method and apparatus for adaptive page migration and pinning for oversubscribed irregular applications

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100321397A1 (en) 2009-06-23 2010-12-23 Boris Ginzburg Shared Virtual Memory Between A Host And Discrete Graphics Device In A Computing System
US20120194524A1 (en) 2010-12-15 2012-08-02 Advanced Micro Devices, Inc. Preemptive Context Switching

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6961840B2 (en) * 2002-09-30 2005-11-01 International Business Machines Corporation Method and apparatus for managing a dynamic alias page table
US7073043B2 (en) * 2003-04-28 2006-07-04 International Business Machines Corporation Multiprocessor system supporting multiple outstanding TLBI operations per partition
CN101916181B (en) * 2009-08-28 2014-04-23 威盛电子股份有限公司 Microprocessor and execution method thereof

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100321397A1 (en) 2009-06-23 2010-12-23 Boris Ginzburg Shared Virtual Memory Between A Host And Discrete Graphics Device In A Computing System
US20120194524A1 (en) 2010-12-15 2012-08-02 Advanced Micro Devices, Inc. Preemptive Context Switching

Also Published As

Publication number Publication date
DE102013022168A1 (en) 2014-09-18
CN104049903A (en) 2014-09-17

Similar Documents

Publication Publication Date Title
DE112018002951B4 (en) USING A TRACK FORMAT CODE IN A CACHE CONTROL BLOCK FOR A TRACK IN A CACHE TO PROCESS READ AND WRITE REQUESTS REGARDING THE TRACK IN THE CACHE
US10031856B2 (en) Common pointers in unified virtual memory system
DE202007019502U1 (en) Global overflow for virtualized transaction store
DE102014014076A1 (en) Reduced address translation with multiple page sizes
DE102010035603A1 (en) Providing hardware support for shared virtual memory between physical local and remote storage
DE102013205886A1 (en) Dynamic bank mode addressing for memory access
DE102012222394A1 (en) Method and apparatus for collecting buffers of source operands
DE102013202173A1 (en) Uniform load processing for subsets of parallel threads
DE112010005821T5 (en) context switching
US10423354B2 (en) Selective data copying between memory modules
US11741015B2 (en) Fault buffer for tracking page faults in unified virtual memory system
DE102013209643A1 (en) Mechanism for optimized message exchange data transfer between nodelets within a tile
DE102018005453A1 (en) Methods to provide cache coherency based on cache type
DE102013022166B4 (en) PAGE STATE DIRECTORY FOR MANAGING A UNIFIED VIRTUAL STORAGE
DE102018204931A1 (en) Persistent caching of memory-side cache content
DE102021102746A1 (en) READ / WRITE PAGE REPLICATION FOR MULTIPLE COMPUTER UNITS
DE102013022168B4 (en) Unified Virtual Storage System Migration Scheme
DE112016007538T5 (en) TECHNOLOGY FOR REALIZING A BINARY DISCONTINUED NON-VOLATILE MEMORY EXPRESS DRIVER
DE102016124749B4 (en) TLB SHOOTDOWNS FOR LOW OVERHEAD
DE102016222041A1 (en) VOIDING AN IMPLEMENTATION ENTRY IN A MULTITHREAD DATA PROCESSING SYSTEM
DE102013021996A1 (en) Repetition of memory transactions while handling memory access errors
DE102013021997A1 (en) Move pages of different sizes between heterogeneous processors
US11561906B2 (en) Rinsing cache lines from a common memory page to memory
DE102022116841A1 (en) THREAD SYNCHRONIZATION ACROSS STORE SYNCHRONIZATION DOMAINS
DE102014117891B4 (en) By charging failure mechanism

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final