DE102013020968A1 - Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher - Google Patents

Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher Download PDF

Info

Publication number
DE102013020968A1
DE102013020968A1 DE102013020968.4A DE102013020968A DE102013020968A1 DE 102013020968 A1 DE102013020968 A1 DE 102013020968A1 DE 102013020968 A DE102013020968 A DE 102013020968A DE 102013020968 A1 DE102013020968 A1 DE 102013020968A1
Authority
DE
Germany
Prior art keywords
unit
bit
memory
virtual address
bits
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.)
Ceased
Application number
DE102013020968.4A
Other languages
English (en)
Inventor
Brian Fahs
Eric T. Anderson
Nick BARROW-WILLIAMS
Shirish Gadre
Joel James McCormack
Bryon S. Nordquist
Nirmal Raj Saxena
Lacky V. Shah
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
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102013020968A1 publication Critical patent/DE102013020968A1/de
Ceased legal-status Critical Current

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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables

Abstract

Eine Markierungseinheit, die zur Verwaltung einer Cache-Einheit ausgebildet ist, umfasst eine Vereinigungseinheit, die eine Gruppen-Zerlegungs-Funktion realisiert. Die Gruppen-Zerlegungs-Funktion ordnet eine virtuelle Adresse einer speziellen inhaltsadressierbaren Speichereinheit (CAM) zu. Die Vereinigungseinheit realisiert die Gruppen-Zerlegungs-Funktion, indem die virtuelle Adresse in einen oberen, einen mittleren und einen unteren Bereich aufgeteilt wird. Der obere Bereich wird weiter in gerade indizierte Bits und ungerade indizierte Bits aufgeteilt. Die gerade indizierten Bits werden zu einem einzelnen Bit unter Anwendung eines XOR-Baums reduziert, und die ungerade indizierten Bits werden in der gleichen Weise reduziert. Diese einzelnen Bits werden mit dem mittleren Bereich der virtuellen Adresse kombiniert, um eine CAM-Nummer bereitzustellen, die einen speziellen CAM kennzeichnet. Der gekennzeichnete CAM wird abgefragt, um die Anwesenheit eines Markierungsbereichs der virtuellen Adresse zu ermitteln, wodurch ein Cache-Treffer oder ein Cache-Fehltreffer angezeigt werden.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft allgemein Speicherzugriffsoperationen und insbesondere eine Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher.
  • Beschreibung des Stands der Technik
  • Eine konventionelle Cache-Speichereinheit arbeitet in Verbindung mit einer Markierungseinheit, die die virtuellen Adressenmarkierungen bewahrt, die mit Daten verknüpft sind, die aktuell in der Cache-Speichereinheit vorhanden sind. Wenn eine Speicherzugriffsanforderung verarbeitet wird, fragt die Markierungseinheit eine oder mehrere der inhaltsadressierbare Speichereinheiten (CAM) ab, die diese virtuellen Adressenmarkierungen enthalten, um zu ermitteln, ob einer der CAM eine virtuelle Adressenmarkierung enthält, die mit der Speicherzugriffsanforderung verknüpft ist. Jeder CAM entspricht typischerweise einer „Gruppe bzw. Menge” innerhalb der Cache-Speichereinheit. Wenn ein gegebener CAM die virtuelle Adressenmarkierung enthält, liegen Daten, die mit dieser Markierung verknüpft sind, in einer entsprechenden Gruppe innerhalb des Cache-Speichers (d. h., es tritt ein Cache-Treffer auf). Wenn ein gegebener CAM die virtuelle Adressenmarkierung nicht enthält, liegen Daten, die mit dieser Markierung verknüpft sind, gänzlich nicht in dem Cache-Speicher (d. h., es tritt ein Cache-Fehltreffer auf).
  • Die Markierungseinheit verwendet typischerweise eine spezielle Gruppen-Zerlegungs-Funktion bzw. Gruppen-Hash-Funktion, die eine spezielle Gruppe auf der Grundlage der virtuellen Adressenmarkierung ermittelt. Bei der Ermittlung der speziellen Gruppe kann die Markierungseinheit dann den entsprechenden CAM in der zuvor beschriebenen Weise abfragen und dann ermitteln, ob ein Cache-Treffer oder ein Cache-Fehltreffer aufgetreten ist. Typischerweise sind die Gruppen-Zerlegungs-Funktionen mit dem erwarteten Nutzungsmuster der Cache-Speichereinheit verknüpft. Beispielsweise könnte eine konventionelle Gruppen-Zerlegungs-Funktion die Gruppe für eine gegebene virtuelle Adresse auf der Grundlage eines Indexteils der virtuellen Adresse berechnen. Diese Vorgehensweise ist für Nutzungsmuster ausreichend, in denen sequenzielle Speicherzugriffe unterschiedliche Indexbereich enthalten, da in einem derartigen Fall sequenzielle CAM-Zugriffe auf unterschiedliche CAM verteilt wurden.
  • Jedoch beinhalten einige Nutzungsmuster nicht-sequenzielle Speicherzugriffe, wobei der Markierungsbereich jedes Speicherzugriffs in der Sequenz sich ändert, wobei jedoch der Indexbereich gleich bleibt. In diesen Situationen erkennt die konventionelle Gruppen-Zerlegungs-Funktion, die zuvor beschrieben ist, lediglich einen einzelnen CAM immer wieder. Folglich kann dieser eine CAM mit mehreren Einträgen überladen werden, wodurch die Geschwindigkeit reduziert wird, mit der die Markierungseinheit arbeiten kann. Ferner lässt es diese Vorgehensweise zu, dass die verbleibenden CAM ungenutzt bleiben, und somit werden die Ressourcen der Markierungseinheit nicht effizient genutzt.
  • Was daher auf diesem Gebiet der Technik erforderlich ist, ist eine effizientere Technik zum Zugreifen auf CAM-Einheiten.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Ein computerimplementiertes Verfahren zum Zugreifen auf ein Speichermodul aus mehreren Speichermodulen umfasst: Zergliedern einer virtuellen Adresse in einen ersten Bereich, einen zweiten Bereich und einen dritten Bereich, Zergliedern des ersten Bereichs in gerade indizierte Bits und ungerade indizierte Bits, wobei jedes der gerade indizierten Bits einen anderen gerade nummerierten Index innerhalb der virtuellen Adresse hat und wobei jedes der ungerade indizierten Bits einen anderen ungerade nummerierten Index in der virtuellen Adresse aufweist, Reduzieren der gerade indizierten Bits auf ein erstes Bit, Reduzieren der ungerade indizierten Bits auf ein zweites Bit, und Erzeugen einer Speichermodulnummer durch Kombinieren des ersten Bits und des zweiten Bits mit dem zweiten Bereich, wobei die Speichermodulnummer das Speichermodul in den mehreren Speichermodulen kennzeichnet.
  • Ein Vorteil der offenbarten Technik besteht darin, dass eine zu starke Nutzung eines speziellen Speichermoduls vermieden werden kann, wodurch die Ansammlung an Speichermodulen effizienter genutzt werden kann im Vergleich zu konventionellen Vorgehensweisen.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 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, mit Bezug zu Ausführungsformen angegeben, wovon einige in den angefügten Zeichnungen dargestellt sind. Es sollte jedoch beachtet werden, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und daher nicht als Einschränkung ihres Schutzbereichs zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulässt.
  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung einzurichten;
  • 2 ist eine Blockansicht eines Parallelverarbeitungssubsystems für das Computersystem aus 1 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3A ist eine Blockansicht des Frontbereichs aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3B ist eine Blockansicht eines allgemeinen Verarbeitungs-Clusters in einer der Parallelverarbeitungseinheiten aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3C ist eine Blockansicht eines Teils des Datenstrom-Multiprozessors aus 3B gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline, in die eine oder mehrere der Parallelverarbeitungseinheiten aus 2 zur Realisierung konfiguriert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5 ist eine Konzeptansicht einer Textur-Verarbeitungs-Pipeline, in die eine Textureinheit in dem allgemeinen Verarbeitungs-Cluster aus 3B zur Realisierung konfiguriert werden kann, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6 ist eine Konzeptansicht einer Markierungseinheit, die in der Textur-Verarbeitungs-Pipeline aus 5 gemäß einer Ausführungsform der vorliegenden Erfindung enthalten ist;
  • 7 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Gruppen-Zerlegungs-Funktion, die von einer Vereinigungseinheit aus 6 gemäß einer Ausführungsform der vorliegenden Erfindung ausgeführt werden kann; und
  • 8 ist eine Konzeptansicht einer anschaulichen Schaltung, die ausgebildet ist, die Gruppen-Zerlegungs-Funktion, die in Verbindung mit 7 beschrieben ist, gemäß einer Ausführungsform der vorliegenden Erfindung auszuführen.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung sind diverse spezielle Details dargestellt, um ein gründlicheres Verständnis der vorliegenden Offenbarung zu ermöglichen. Es ist jedoch für den Fachmann ersichtlich, dass die Erfindung ohne eines oder mehrere dieser speziellen Details praktiziert werden kann.
  • Systemüberblick
  • 1 ist eine Blockansicht, die ein Computersystem 100 darstellt, 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 in Verbindung stehen, der eine Speicherbrücke 105 enthalten kann. 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-(Eingangs/Ausgangs-)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 peripherer Komponentenverbindungs-Express (PCI), beschleunigter Graphikport oder eine HyperTransport-Verbindung) verbunden; in einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein grafisches Subsystem, das Pixel an eine Anzeigeeinrichtungen 110 liefert (beispielsweise ein Monitor auf Basis einer konventionellen Kathodenstrahlröhre oder einer Flüssigkristallanzeige). Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden. 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 her. Andere Komponenten (nicht explizit gezeigt) einschließlich eines universellen seriellen Busses (USB) oder andere Portverbindungen, Kompaktdisketten-(CD) Laufwerke, digitale Video Disketten-(DVD)Laufwerke, Filmaufzeichnungsgeräte und dergleichen können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die diversen Kommunikationspfade, die in 1 gezeigt sind, wozu die speziell genannten Kommunikationspfade 106 und 113 gehören, können unter Anwendung beliebiger geeigneter Protokolle eingerichtet werden, etwa PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder einem beliebigen anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll bzw. Protokollen, und für Verbindungen zwischen unterschiedlichen Geräten können unterschiedliche Protokolle verwenden, wie dies im Stand der Technik bekannt ist.
  • In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafik- und Videoverarbeitung optimiert ist mit beispielsweise einer Videoausgabeschaltung, und bildet eine grafische Verarbeitungseinheit (GPU). 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 sie in größerem Detail beschrieben ist, bewahrt ist. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 in einem oder mehreren anderen Systemelementen in einem einzelnen Subsystem integriert sein, etwa durch Verbinden der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hierin beschriebene System nur anschaulich ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, wozu die Anzahl und die Anordnung von Brücken, die Anzahl von CPUs 102 und die Anzahl von Parallelverarbeitungssubsystemen 112 gehören, kann 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 vorgesehen sind. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehrere parallele Verarbeitungssysteme 112 enthalten. Die hierin gezeigten speziellen Komponenten sind optional; beispielsweise kann eine beliebige Anzahl an Zusatzkarten oder peripheren Geräten unterstützt werden. In einigen Ausführungsformen kann der Schalter 116 nicht vorhanden sein, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 können direkt mit der I/O-Brücke 107 verbunden sein.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, enthält das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten (PPU) 202, wovon jede mit einem lokalen Parallelverarbeitungs-(PP)Speicher 204 verbunden ist. Generell enthält ein Parallelverarbeitungssubsystem eine Anzahl an PPUs, wobei U ≥ 1 ist. (Hierin sind mehrere Vertreter gleicher Objekte mit Bezugszeichen belegt, die das Objekt angeben und Ziffern in Klammern geben den Vertreter an, wenn dies erforderlich ist.) Die PPUs 202 und die Parallelverarbeitungs-Speicher 204 können unter Verwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC) oder Speichereinrichtungen oder in anderer technisch machbarer Weise realisiert sein.
  • Es sei wieder auf 1 sowie 2 verwiesen; in einigen Ausführungsformen sind einige oder alle PPUs 202 in dem Parallelverarbeitungssubsystem 112 grafische Prozessoren mit Bilderzeugungspipelines, die ausgebildet sein können, diverse Operationen auszuführen, die mit der Erzeugung von Pixeldaten aus Grafikdaten in Beziehung stehen, die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und dem zweiten Kommunikationspfad 113 zugeleitet sind, wobei mit dem lokalen Parallelverarbeitungs-Speicher 204 interagiert wird (der als Grafikspeicher verwendbar ist, beispielsweise einen konventionellen Blockpuffer enthält), um Pixeldaten zu speichern und zu aktualisieren, Pixeldaten zu der Anzeigeeinrichtungen 110 zu liefern, und dergleichen. In einigen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 umfassen, die als Grafikprozessoren arbeiten, und kann eine oder mehrere andere PPUs 202 aufweisen, die für Berechnungen für Allgemeinzwecke verwendet werden. Die PPUs können identisch oder unterschiedlich sein, und jede PPU kann eine spezielle Parallelverarbeitungs-Speichereinrichtung bzw. Einrichtungen oder keine spezielle Parallelverarbeitungs-Speicher bzw. Einrichtungen aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 können Daten an die Anzeigeeinrichtungen 110 ausgeben, oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 kann Daten an eine oder mehrere Anzeigeeinrichtungen 110 ausgeben.
  • Im Betrieb ist die CPU 102 der übergeordnete Prozessor des Computersystems 100, und steuert und koordiniert die Operationen anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom von Befehlen für jede PPU 202 in eine Datenstruktur (in 1 oder 2 nicht explizit gezeigt), die in dem Systemspeicher 104, in dem Parallelverarbeitungs-Speicher 204 oder an einer weiteren Speicherstelle angeordnet sein kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen können. Einen Zeiger auf jede Datenstruktur wird in einem Schiebepuffer (das heißt einem Puffer im Speicher, der einen Befehlsstrom für die PPU 202 speichert) abgelegt, um die Verarbeitung des Befehlsstroms in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Schiebepuffern aus und führt dann Befehle asynchron relativ zur Betriebsweise der CPU 102 aus. Die Prioritäten für die Ausführung können jedem Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 angegeben werden, um die Disponierung bzw. den Ablauf der unterschiedlichen Schiebepuffer zu steuern.
  • Es sei nun wieder zurückverwiesen auf 2 sowie auf 1; jede PPU 202 enthält eine I/O-(Eingangs/Ausgangs-)Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 in Verbindung steht, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) verbunden ist. Die Verbindung der PPU 202 mit dem Rest des Computersystems 100 kann auch anders sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Zusatzkarte realisiert, die in einen Erweiterungsplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 auf einem einzelnen Chip zusammen mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 in einem einzelnen Chip zusammen mit der CPU 102 integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Express-Verbindung, in der jeder PPU 202 spezielle Bahnen zugewiesen sind, wie dies im Stand der Technik bekannt ist. Es können auch andere Kommunikationspfade verwendet werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113, wobei die eintreffenden Pakete zu entsprechenden Komponenten der PPU 202 geleitet werden. Beispielsweise können Befehle, die mit Verarbeitungsaufgaben in Beziehung stehen, zu einer übergeordneten Schnittstelle 206 geleitet werden, während Befehle, die mit Speicheroperationen in Verbindung stehen (beispielsweise Lesen aus oder schreiben in den Parallelverarbeitungs-Speicher 204) können zu einer Speicherkreuzungseinheit 210 geleitet werden. Die übergeordnete Schnittstelle 206 liest jeden Schiebepuffer aus und gibt den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212 aus.
  • Jede PPU 202 realisiert vorteilhafterweise eine hoch parallele Verarbeitungsarchitektur. Wie im Detail gezeigt ist, enthält die PPU 202(0) ein Verarbeitung-Cluster-Array 230, das eine Anzahl C an allgemeinen Verarbeitungs-Clustern (GPCs) 208 enthält, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) an Strängen gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPC 208 unterschiedlichen Arten von Programmen zugewiesen werden oder für das Ausführen unterschiedlicher Arten von Berechnungen zugewiesen werden. Die Zuweisung von GPCs 208 kann in Abhängigkeit von der Arbeitsauslastung variieren, die für jede Art von Programmen oder Berechnung entsteht.
  • Die GPCs 208 empfangen auszuführende Verarbeitungsaufgaben von einer Arbeitsverteilungseinheit innerhalb einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Meta-Daten (TMD) codiert und im Speicher gespeichert sind. Die Zeiger auf die TMD sind in dem Befehlstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der übergeordneten Schnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indizes von zu verarbeitenden Daten, sowie Zustandsparameter und Befehle, die festlegen, wie die Daten zu verarbeiten sind (beispielsweise welches Programm auszuführen ist). Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass die GPCs 208 auf einen zulässigen Zustand konfiguriert sind, bevor die von jeweiligen der TMD spezifizierte Verarbeitung initiiert wird. Es kann eine Priorität für alle TMD festgelegt werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können auch aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Kopf oder dem Endbereich für eine Liste von Verarbeitungsaufgaben hinzugefügt werden (oder eine Liste aus Zeigern auf die Verarbeitungsaufgaben), wodurch eine weitere Ebene einer Steuerung für die Priorität bereitgestellt wird.
  • Die Speicherschnittstelle 214 enthält eine Anzahl D an Partitionseinheiten 215, die jeweils direkt mit einem Teilbereich des Parallelverarbeitungs-Speichers 204 verbunden sind, wobei D ≥ 1 ist. Wie gezeigt, ist die Anzahl an Partitionseinheiten 215 generell gleich der Anzahl an dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 215 unter Umständen nicht gleich der Anzahl an Speichereinrichtungen. Der Fachmann erkennt, dass der DRAM 220 durch andere geeignete Speichereinrichtungen ersetzt werden kann und generell von konventioneller Gestaltung sein kann. Eine detaillierte Beschreibung wird daher weggelassen. Bilderzeugungsziele, etwa Blockpuffer oder Texturzuordnungen können über die DRAMs 220 hinweg gespeichert werden, wodurch es den Partitionseinheiten 215 möglich ist, Teilbereiche jedes Bilderzeugungsziels parallel zu beschreiben, um effizient die verfügbare Bandbreite des Parallelverarbeitungs-Speichers 204 auszunutzen.
  • Jede der GPCs 208 kann Daten verarbeiten, die in einem der DRAMs 220 in dem Parallelverarbeitungs-Speicher 204 zu schreiben sind. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 zum Eingang einer beliebigen Partitionseinheit 215 oder einer weiteren GPC 208 für die Weiterverarbeitung zu leiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um aus diversen externen Speichereinrichtungen zu lesen oder in diese zu schreiben. In einer Ausführungsform besitzt die Kreuzungseinheit 210 eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 in Verbindung zu treten, und besitzt auch eine Verbindung zu dem lokalen Parallelverarbeitungs-Speicher 204, wodurch die Verarbeitungskerne in den unterschiedlichen GPCs 208 in der Lage sind, mit dem Systemspeicher 104 oder einem anderen Speicher, der nicht lokal für die PPU 202 ist, zu kommunizieren. In der in 2 gezeigten Ausführungsform ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzungseinheit 210 kann virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Wiederum können die GPCs 208 programmiert sein, um Verarbeitungsaufgaben, die mit einer Fülle von Anwendungen in Beziehung stehen, auszuführen, wozu, ohne einschränkend zu sein, lineare und nicht-lineare Datentransformationen, die Filterung von Video- und/oder Audiodaten, Modelloperationen (beispielsweise Anwendung physikalischer Gesetze zur Bestimmung von Position, Geschwindigkeit und anderen Attributen von Objekten), Bilderzeugungsoperation (beispielsweise Programmen für Parkettierungs-Schattierung, Eckpunkte-Schattierung, Geometrie-Schattierung, und/oder Pixel-Schattierung) usw. gehören. Die PPUs 202 können Daten von dem Systemspeicher 104 und/oder von lokalen Parallelverarbeitungs-Speicher 204 in interne (chipinterne) Speicher übertragen, können die Daten verarbeiten und Ergebnisdaten zurück in den Systemspeicher 104 und/oder die lokalen Parallelverarbeitungs-Speicher 204 schreiben, wodurch auf derartige Daten von anderen Systemkomponenten zugegriffen werden kann, wozu die CPU 102 oder ein weiteres Parallelverarbeitungssubsystem 112 gehören.
  • Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungs-Speicher 204 versehen sein, wozu auch kein lokaler Speicher gehört, und kann den lokalen Speicher und den Systemspeicher in beliebiger Kombination verwenden. Beispielsweise kann eine PPU 202 ein Grafikprozessor sein in einer vereinheitlichten Speicherarchitektur-(UMA)Ausführungsform. In derartigen Ausführungsformen würde wenig oder kein spezieller Grafikspeicher (Parallelverarbeitungs-Speicher) bereitgestellt werden, und die PPU 202 würde ausschließlich oder nahezu ausschließlich den Systemspeicher verwenden. In UMA-Ausführungsformen kann eine PPU 202 in einen Brückenchip oder einem Prozessorchip integriert sein oder kann als ein diskreter Chip mit einem Hochgeschwindigkeitsanschluss, beispielsweise PCI-Express) vorgesehen werden, die die PPU 202 mit dem Systemspeicher über einen Brückenchip oder andere Kommunikationseinrichtungen verbindet.
  • Wie zuvor angegeben ist, 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 der 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 an lokalem Parallelverarbeitungs-Speicher 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 ist. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren realisiert sein, wozu Tischrechner, mobile Rechner, oder Hand-Personalcomputer, Dienstleistungsrechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme usw. gehören.
  • Mehrfache gleichzeitige Aufgabendisponierung
  • Es können mehrere Verarbeitungsaufgaben gleichzeitig in den GPCs 208 ausgeführt werden, und eine Verarbeitungsaufgabe kann während der Ausführung ein oder mehrere „Kind-”Verarbeitungsaufgaben erzeugen. Die Aufgaben/Arbeitseinheit 207 empfängt die Aufgaben und disponiert dynamisch die Verarbeitungsaufgaben und die Kind-Verarbeitungsaufgaben für die Ausführung durch die GPCs 208.
  • 3A ist eine Blockansicht der Aufgaben/Arbeitseinheit 207 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Die Aufgaben/Arbeitseinheit 207 umfasst eine Aufgabenverwaltungseinheit 300 und die Arbeitsverteilungseinheit 340. Die Aufgabenverwaltungseinheit 300 verwaltet Aufgaben derart, dass diese auf der Grundlage des Grades an Aufgabenpriorität disponiert werden. Für jede Prioritätsebene speichert die Aufgabenverwaltungseinheit 300 eine Liste aus Zeigern auf die TMD 322, die den Aufgaben in der Disponiertabelle 321 entsprechen, wobei die Liste als eine verknüpfte Liste realisiert werden kann. Die TMD 322 können in dem PP-Speicher 204 oder in dem Systemspeicher 104 gespeichert sein. Die Rate, mit der die Aufgabenverwaltungseinheit 300 Aufgaben annimmt und die Aufgaben in der Disponiertabelle 321 speichert, ist unabhängig von der Rate, mit der die Aufgabenverwaltungseinheit 300 Aufgaben für die Ausführung disponiert. Daher kann die Aufgabenverwaltungseinheit 300 mehrere Aufgaben vor dem Disponieren der Aufgaben sammeln. Die gesammelten Aufgaben können dann auf der Grundlage einer Prioritätsinformation oder unter Anwendung von Techniken, etwa einer Rundlauf-Disponierung, disponiert werden.
  • Die Arbeitsverteilungseinheit 340 umfasst eine Aufgabentabelle 345 mit Spalten bzw. Zeitnischen, die jeweils von den TMD 322 für eine Aufgabe, die gerade ausgeführt wird, besetzt sein können. Die Aufgabenverwaltungseinheit 300 kann Aufgaben für die Ausführung disponieren, wenn es eine freie Spalte in der Aufgabentabelle 345 gibt. Wenn es keine freie Spalte bzw. Zeitnische gibt, kann eine Aufgabe mit höherer Priorität, die keine Spalte besetzt, eine Aufgabe mit geringerer Priorität verdrängen, die eine Spalte einnimmt. Wenn eine Aufgabe verdrängt wird, wird die Aufgabe angehalten, und wenn die Ausführung der Aufgabe nicht abgeschlossen ist, dann kann ein Zeiger auf die Aufgabe zu einer Liste aus Aufgabenzeiger, die zu disponieren sind, hinzugefügt werden, so dass die Ausführung der Aufgabe zu einer späteren Zeit wieder fortgesetzt wird. Wenn eine Kind-Verarbeitungsaufgabe während der Ausführung einer Aufgabe erzeugt wird, wird ein Zeiger auf die Kind-Aufgabe der Liste aus Aufgabenzeiger, die zu disponieren sind, hinzugefügt. Eine Kind-Aufgabe kann von den TMD 322 erzeugt werden, die in dem Verarbeitungs-Cluster-Array 230 abgearbeitet werden.
  • Anders als eine Aufgabe, die von der Aufgaben/Arbeitseinheit 207 aus dem Frontbereich 212 empfangen wird, werden Kind-Aufgaben aus dem Verarbeitungs-Cluster-Array 230 empfangen. Kind-Aufgaben werden nicht in Schiebepuffer eingefügt oder an den Frontbereich gesendet. Die CPU 102 wird nicht verständigt, wenn eine Kind-Aufgabe erzeugt wird oder Daten für die Kind-Aufgabe in dem Speicher gespeichert werden. Ein weiterer Unterschied zwischen den Aufgaben, die mittels Schiebepuffern bereitgestellt werden, und Kind-Aufgaben besteht darin, dass die durch die Schiebepuffer bereitgestellten Aufgaben von dem Anwendungsprogramm definiert sind, wohingegen die Kind-Aufgaben während der Ausführung der Aufgaben dynamisch erzeugt werden.
  • Überblick über die Aufgabenverarbeitung
  • 3B ist eine Blockansicht einer GPC 208 innerhalb einer der PPUs 202 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann ausgebildet sein, eine große Anzahl an Strängen parallel auszuführen, wobei der Begriff „Strang” eine Instanz eines speziellen Programms bezeichnet, das auf einem speziellen Satz an Eingangsdaten operiert. In einigen Ausführungsformen werden Einzelbefehl, Mehrfach-Daten-(SIMD)Befehlsausgabetechniken angewendet, um eine parallele Abarbeitung einer großen Anzahl an Strängen ohne das Vorsehen mehrerer unabhängiger Befehlseinheiten zu unterstützen. In anderen Ausführungsformen werden Einzelbefehl, Mehrfach-Strang-(SIMT)Techniken eingesetzt, um eine parallele Abarbeitung einer großen Anzahl an generell synchronisierten Strängen zu unterstützen, wobei eine übliche Befehlseinheit verwendet wird, die ausgebildet ist, Befehle an eine Gruppe von Verarbeitungseinheiten innerhalb jeder einzelnen der GPCs 208 auszugeben. Anders als bei einem SIMD-Ausführungsregime, in welchem Verarbeitungseinheiten typischerweise identische Befehle ausführen, erlaubt eine SIMT-Ausführung, dass unterschiedliche Stränge besser divergenten Ausführungspfaden durch ein gegebenes Strangprogramm folgen. Der Fachmann auf dem Gebiet versteht, dass ein SIMD-Verarbeitungsregime eine funktionale Untergruppe eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des GPC 208 wird vorteilhafterweise über einen Pipeline-Verwalter 305 gesteuert, der Verarbeitungsaufgaben an Datenstrom-Multi-Prozessoren (SM) 310 verteilt. Der Pipeline-Verwalter 305 kann auch ausgebildet sein, eine Arbeitsverteilungskreuzungseinheit 330 dadurch zu steuern, dass spezielle Ziele durch den SM 310 für verarbeitete Datenausgaben angegeben werden.
  • In einer Ausführungsform umfasst jeder GPC 208 eine Anzahl M aus SM 310, wobei M ≥ 1 ist, wobei jeder SM 310 ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Ferner enthält jeder SM 310 vorteilhafterweise eine identische Gruppe aus Funktionsausführungseinheiten (beispielsweise Ausführungseinheiten und Lade-Speicher-Einheiten – die als Exec-Einheiten 302 und LSUs 303 in 3C gezeigt sind), die als Pipeline betrieben werden können, wodurch ein neuer Befehl ausgegeben werden kann, bevor ein vorhergehender Befehl fertig bearbeitet ist, wie dies im Stand der Technik bekannt ist. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten bereitgestellt werden. In einer Ausführungsform unterstützen die Funktionseinheiten eine Vielzahl von Operationen, wozu Ganzzahl- oder Gleitkommazahlarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, XOR), Bit-Verschiebung und Berechnung diverser algebraischer Funktionen (beispielsweise ebene Interpolation, Trigonometrie, exponentielle und logarithmische Funktionen usw.) gehören; und die gleiche Funktionseinheiten-Hardware kann wirksam eingesetzt werden, um unterschiedliche Operationen auszuführen.
  • Die Reihe von Befehlen, die einem speziellen GPC 208 zugeleitet werden, bilden einen Strang, wie dies zuvor hierin definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen über die Parallelverarbeitungseinheiten hinweg (nicht gezeigt) innerhalb eines SM 310 wird hierin als eine „Wölbung” oder „Stranggruppe” bezeichnet. Im hierin verwendeten Sinne bezeichnet eine „Stranggruppe” eine Gruppe aus Strängen, die gleichzeitig das gleiche Programm an verschiedenen Eingangsdaten ausführt, wobei ein einzelner Strang der Gruppe einer anderen Verarbeitungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 enthalten, in welchem Falle gewisse Verarbeitungseinheiten in Zyklen untätig sind, wenn diese Stranggruppe verarbeitet wird. Eine Stranggruppe kann ferner mehr Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 enthalten, in welchem Falle die Verarbeitung über aufeinanderfolgende Taktzyklen hinweg erfolgen wird. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig handhaben kann, folgt, dass bis zu G·M Stranggruppen in dem GPC 208 zu jeder Zeit ausgeführt werden können.
  • Ferner können mehrere in Beziehung stehende Stranggruppen (in unterschiedlichen Phasen der Ausführung) gleichzeitig innerhalb eines SM 310 aktiv sein. Diese Ansammlung aus Stranggruppen wird hierin als ein „kooperatives Strang-Array” („CTA”) oder „Strang-Array” bezeichnet. Die Größe eines speziellen CTA ist gleich m·k, wobei k die Anzahl gleichzeitig ausgeführter Stränge in einer Stranggruppe ist und typischerweise ein ganzzahliges Vielfaches der Anzahl an Parallelverarbeitungseinheiten innerhalb des SM 310 ist, und m ist die Anzahl an Stranggruppen, die gleichzeitig innerhalb des SM 310 aktiv sind. Die Größe eines CTA ist generell von dem Programmierer und der Menge an Hardwareressourcen, etwa Speichern oder Registern, die für das CTA verfügbar sind, bestimmt.
  • Jeder SM 310 enthält einen Cache-Speicher der Ebene 1 (L1) (in 3C gezeigt) oder verwendet Speicherplatz in einem entsprechenden L1-Cache-Speicher außerhalb des SM 310, der verwendet wird, um Lade- und Speicheroperationen auszuführen. Jeder SM 310 hat ferner Zugriff auf Cache-Speicher der Ebene 2 (L2), die gemeinsam von allen GPCs 208 benutzt werden und die verwendet werden können, um Daten zwischen Strängen auszutauschen. Schließlich haben die SMs 310 auch Zugriff auf einen chipexternen „globalen” Speicher, der beispielsweise den Parallelverarbeitungs-Speicher 204 und/oder den Systemspeicher 104 umfassen kann. Zu beachten ist, dass ein beliebiger Speicher außerhalb der PPU 202 als globaler Speicher verwendet werden kann. Ferner kann ein Cache-Speicher der Ebene eins-Punkt-fünf (L1.5) in dem GPC 208 enthalten und ausgebildet sein, Daten zu empfangen und zu halten, die aus dem Speicher über die Speicherschnittstelle 214 abgerufen werden und von dem SM 310 angefordert sind, wozu Befehle, gleichmäßige Daten und konstante Daten gehören, und die angeforderten Daten dem SM 310 zuzuführen. Ausführungsformen mit mehreren SMs 310 in dem GPC 208 verwenden vorteilhafterweise gemeinsame Befehle und Daten, die in dem Cache-Speicher L1.5 335 abgelegt sind.
  • Jeder GPC 208 kann eine Speicherverwaltungseinheit (MMU) 328 enthalten, die ausgebildet ist, virtuelle Adressen physikalischen Adressen zuzuordnen. In anderen Ausführungsformen kann bzw. können die MMU(s) 328 innerhalb der Speicherschnittstelle 214 angeordnet sein. Die MMU 328 enthält eine Gruppe aus Seitentabelleneinträgen (PTEs), die zum Zuordnen einer virtuellen Adresse zu einer physikalischen Adresse einer Kachel verwendet ist, und optional einen Cache-Zeilenindex. Die MMU 328 kann Adressen-Translations-Nebenschau-Puffer (TLB) oder Cache-Speicher enthalten, die in dem Multiprozessor SM 310 oder dem L1-Cache-Speicher oder dem GPC 208 angeordnet sind. Die physikalische Adresse wird verarbeitet, um Oberflächendaten-Zugriffslokalität zu verteilen, so dass eine effiziente Anforderungsverschachtelung zwischen Partitionseinheiten 215 möglich ist. Der Cache-Zeilenindex kann verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cache-Zeile ein Treffer oder kein Treffer ist.
  • In grafischen Anwendungen und Rechenanwendungen kann ein GPC 208 so ausgebildet sein, dass jeder SM 310 mit einer Textureinheit 315 zum Ausführen von Texturzuordnungsoperationen verbunden ist, beispielsweise die Bestimmung von Texturprobenpositionen, das Auslesen von Texturdaten und das Filtern der Texturdaten. Texturdaten werden aus einem internen Textur-L1-Cache-Speicher (nicht gezeigt) oder in einigen Ausführungsformen aus dem L1-Cache-Speicher innerhalb des SM 310 ausgelesen und aus einem L2-Cache-Speicher, der für alle GPCs 208 gemeinsam ist, aus dem Parallelverarbeitungs-Speicher 204 oder dem Systemspeicher 104 nach Bedarf abgerufen. Jeder SM 310 gibt verarbeitete Aufgaben an die Arbeitsverteilungskreuzungseinheit 330 aus, um die verarbeitete Aufgabe einem weiteren GPC 208 für die weitere Verarbeitung zuzuleiten oder um die verarbeitete Aufgabe in einem L2-Cache-Speicher, in dem Parallelverarbeitungs-Speicher 204 oder in dem Systemspeicher 104 über die Kreuzungseinheit 210 zu speichern. Eine Vor-ROP-Einheit (Vor-Rasteroperationen) 325 ist ausgebildet, Daten aus dem SM 310 zu empfangen, Daten an ROP-Einheiten innerhalb der Partitionseinheiten 215 weiterzuleiten und Optimierungen für die Farbmischung auszuführen, Pixel-Farbdaten zu organisieren und Adressenübersetzungen auszuführen.
  • Es ist zu beachten, dass die hierin beschriebene Kernarchitektur anschaulich ist und dass Variationen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungseinheiten, beispielsweise SMs 310 oder Textureinheiten 315, Vor-ROP-Einheiten 325 in einem GPC 208 enthalten sein. Wie ferner in 2 gezeigt ist, kann eine PPU 202 eine beliebige Anzahl an GPCs 208 enthalten, die vorteilhafterweise in funktionaler Hinsicht ähnlich zueinander sind, so dass das Arbeitsverhalten nicht davon abhängt, welcher GPC 208 eine spezielle Verarbeitungsaufgaben empfängt. Ferner arbeitet jeder GPC 208 vorteilhafterweise unabhängig von anderen GPCs 208 unter Verwendung separater und unabhängiger Verarbeitungseinheiten, L1-Cache Speicher, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen.
  • Der Fachmann auf diesem Gebiet weiß, dass die in den 1, 2, 3A und 3B beschriebene Architektur in keiner Weise den Schutzbereich der vorliegenden Erfindung beschränkt und dass die hierin gelehrten Techniken in einer beliebigen geeignet konfiguriertem Verarbeitungseinheit realisiert werden können, wozu, ohne Einschränkung, gehören: eine oder mehrere CPUs, eine oder mehrere CPUs mit mehreren Kernen, eine oder mehrere PPUs 202, ein oder mehrere GPCs 208, eine oder mehrere grafische Verarbeitungseinheiten oder Verarbeitungseinheiten für spezielle Zwecke, usw., ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen.
  • In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder einen anderen Prozessor oder Prozessoren eines Rechnersystems zu verwenden, um Berechnungen für Allgemeinzwecke unter Verwendung von Strang-Arrays auszuführen. Jedem Strang in dem Strang-Array ist eine eindeutige Strangkennung („Strang-ID”) zugewiesen, auf die von dem Strang während der Ausführung des Strangs zugegriffen werden kann. Die Strang-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert diverse Aspekte des Prozessverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welcher Teilbereich des Eingangsdatensatzes von einem Strang verarbeitet werden soll, und/oder um zu bestimmen, welcher Teilbereich eines Ausgangsdatensatzes von einem Strang erzeugt oder geschrieben werden soll.
  • Eine Sequenz aus Befehlen pro Strang kann mindestens einen Befehl umfassen, der ein kooperatives Verhalten zwischen dem repräsentativen Strang und einem oder mehreren anderen Strängen des Strang-Arrays festlegt. Beispielsweise kann die Sequenz aus Befehlen pro Strang einen Befehl enthalten, um die Ausführung von Operationen für den repräsentativen Strang an einem speziellen Punkt in der Sequenz auszusetzen, bis zu dem Zeitpunkt, an welchem ein oder mehrere der anderen Stränge diesen speziellen Punkt erreichen, einen Befehl für den repräsentativen Strang enthalten, um Daten in einem gemeinsamen Speicher zu speichern, auf den ein oder mehrere der anderen Stränge Zugriff haben, einen Befehl für den repräsentativen Strang enthalten, um Daten in atomarer Weise zu lesen und zu aktualisieren, die in einem gemeinsamen Speicher abgelegt sind, auf den ein oder mehrere der anderen Stränge auf Grundlage ihrer Strang-ID Zugriff haben, oder dergleichen. Das CTA-Programm kann ferner einen Befehl enthalten, um eine Adresse für den gemeinsamen Speicher zu berechnen, aus dem Daten auszulesen sind, wobei die Adresse eine Funktion der Strang-ID ist. Durch das Definieren geeigneter Funktionen und das Bereitstellen von Synchronisiertechniken können Daten an eine gegebene Speicherstelle in einem gemeinsamen Speicher durch einen Strang eines CTA geschrieben und aus dieser Speicherstelle durch einen anderen Strang des gleichen CTA in einer vorhersagbaren Weise ausgelesen werden. Folglich kann ein beliebiges gewünschtes Muster für die gemeinsame Nutzung von Daten zwischen Strängen unterstützt werden, und jeder Strang in einem CTA kann Daten mit einem anderen Strang in dem gleichen CTA gemeinsam benutzen. Der Grad, falls verhandeln, der gemeinsamen Datennutzung zwischen den Strängen eines CTA ist durch das CTA-Programm bestimmt; es ist daher zu beachten, dass in einer speziellen Anwendung, die CTAs verwendet, die Stränge eines CTA gemeinsam Daten nutzen können oder auch nicht, wobei dies von dem CTA-Programm abhängt, und die Begriffe „CTA” und „Strang-Array” werden hierin als Synonym verwendet.
  • 3C ist eine Blockansicht des SM 310 aus 3B gemäß einer Ausführungsform der vorliegenden Erfindung. Der SM 310 umfasst einen Befehls-L1-Cache-Speicher 370, der ausgebildet ist, Befehle und Konstanten aus dem Speicher über den L1.5-Cache-Speicher 335 zu empfangen. Eine Wölbungs-Disponier- und Befehlseinheit 312 empfängt Befehle und Konstanten aus dem Befehls-L1-Cache-Speicher 370 und steuert eine lokale Registerdatei 304 und die SM 310-Funktionseinheiten entsprechend den Befehlen und den Konstanten. Die SM 310-Funktionseinheiten enthalten N Exec-(Ausführungs- oder Verarbeitungs-)Einheiten 302 und P Lade-Speicher-Einheiten (LSU) 303.
  • Der SM 310 stellt chipinternen (internen) Datenspeicherplatz bereit mit unterschiedlichen Ebenen an Zugreifbarkeit. Spezialregister (nicht gezeigt) können ausgelesen aber nicht beschrieben werden durch die LSU 303 und werden verwendet, um Parameter zu speichern, die die „Position” jedes Strangs festlegen. In einer Ausführungsform umfassen die Spezialregister ein einzelnes Register pro Strang (oder pro Exec-Einheit 302 innerhalb des SM 310), das eine Strang-ID speichert; jedes Strang-ID-Register kann nur von einer entsprechenden einen der Exec-Einheiten 302 ausgelesen werden. Die Spezialregister können ferner zusätzliche Register umfassen, die von allen Strängen ausgelesen werden können, die die gleiche Verarbeitungsaufgaben ausführen, die von einem Satz an TMD 322 repräsentiert ist (oder von allen LSUs 303), die eine CTA-Kennung, die CTA-Dimensionen, die Dimensionen eines Gitters, zu welchen das CTA gehört (oder Warteschlangenposition, wenn die TMD 322 eine Warteschlangeaufgabe anstelle einer Gitteraufgabe kodieren) und eine Kennung der TMD 322 speichern, denen das CTA zugeordnet ist.
  • Wenn die TMD 322 Gitter-TMD sind, verursacht die Ausführung der TMD 322, dass eine feste Anzahl an CTA gestartet und ausgeführt wird, um die festgelegte Menge an Daten zu verarbeiten, die in der Warteschlange 525 gespeichert sind. Die Anzahl an CTAs ist als das Produkt der Gitterbreite, Gitterhöhe und Gittertiefe spezifiziert. Die festgelegte Menge an Daten kann in den TMD 322 gespeichert sein oder die TMD 322 können einen Zeiger auf die Daten speichern, die von den CTAs verarbeitet werden. Die TMD 322 speichern ferner eine Startadresse des Programms, das von den CTAs ausgeführt wird.
  • Wenn die TMD 322 Warteschlangen-TMD sind, dann wird ein Warteschlangemerkmal der TMD 322 verwendet, was bedeutet, dass die zu verarbeitende Datenmenge nicht notwendigerweise festgelegt ist. Warteschlangeneinträge speichern Daten für die Verarbeitung durch die CTAs, die den TMD 322 zugeordnet sind. Die Warteschlangeneinträge können auch eine Kind-Aufgabe repräsentieren, die von weiteren TMD 322 während der Ausführung eines Strangs erzeugt wird, wodurch eine eingebettete Parallelität bereitgestellt wird. Typischerweise wird die Ausführung des Strangs oder des CTA, der bzw. das den Strang enthält, ausgesetzt, bis die Ausführung der Kind-Aufgabe abgeschlossen ist. Die Warteschlange kann in den TMD 322 oder separat zu den TMD 322 gespeichert sein, in welchem Falle die TMD 322 einen Warteschlangenzeiger auf die Warteschlange speichern. Vorteilhafterweise können Daten, die von der Kind-Aufgabe erzeugt sind, in die Warteschlange geschrieben werden, während die TMD 322, die die Kind-Aufgabe repräsentieren, abgearbeitet werden. Die Warteschlange kann als eine Ring-Warteschlange realisiert werden, so dass die gesamte Menge an Daten nicht durch die Größe der Warteschlange begrenzt ist.
  • CTA, die zu einem Gitter gehören, besitzen implizite Parameter für die Gitterbreite, Höhe und Tiefe, wodurch die Position des jeweiligen CTA innerhalb des Gitters angegeben ist. Die Spezialregister werden während der Initialisierung in Reaktion auf Befehle beschrieben, die über den Frontbereich 212 aus dem Gerätetreiber 103 empfangen werden, und die Register ändern sich nicht während der Ausführung einer Verarbeitungsaufgabe. Der Frontbereich 212 disponiert jede Verarbeitungsaufgabe für die Ausführung. Jedes CTA ist mit speziellen TMD 322 für die gleichzeitige Ausführung einer oder mehrerer Aufgaben verknüpft. Ferner kann ein einzelner GPC 208 mehrere Aufgaben gleichzeitig ausführen.
  • Ein Parameterspeicher (nicht gezeigt) speichert Laufzeitparameter (Konstanten), die von einem beliebigen Strang innerhalb des gleichen CTA (oder einer LSU 303) ausgelesen aber nicht geschrieben werden können. In einer Ausführungsform leitet der Gerätetreiber 103 Parameter dem Parameterspeicher zu, bevor der SM 310 angewiesen wird, die Ausführung einer Aufgabe zu beginnen, die diese Parameter verwendet. Ein beliebiger Strang innerhalb eines beliebigen CTA (oder einer Exec-Einheit 302 in dem SM 310) kann auf den globalen Speicher über eine Speicherschnittstelle 214 zugreifen. Bereiche des globalen Speichers können in dem L1-Cache-Speicher 320 gespeichert werden.
  • Die lokale Registerdatei 304 wird von jedem Strang als Arbeitsraum verwendet; jedes Register ist für die ausschließliche Verwendung durch einen einzelnen Strang reserviert, und Daten in einer beliebigen lokalen Registerdatei 304 sind nur von dem Strang abrufbar, dem das Register zugewiesen ist. Die lokale Registerdatei 304 kann als eine Registerdatei realisiert werden, die physikalisch oder logisch in P Bahnen unterteilt ist, wobei jede eine gewisse Anzahl an Einträgen besitzt (wobei jeder Eintrag beispielsweise ein 32-Bit-Wort speichern kann). Es ist jeweils eine Bahn jeder der N Exec-Einheiten 302 und jeder der P Lade-Speicher-Einheiten LS 303 zugewiesen, und entsprechende Einträge in unterschiedlichen Bahnen können mit Daten für unterschiedliche Stränge, die das gleiche Programm ausführen, angereichert werden, um eine SIMD-Ausführung zu ermöglichen. Unterschiedliche Bereiche der Bahnen können unterschiedlichen Gruppen der G gleichzeitigen Stranggruppen zugewiesen werden, so dass ein gegebener Eintrag in der lokalen Registerdatei 304 nur von einem speziellen Strang abgerufen werden kann. In einer Ausführungsform sind gewisse Einträge innerhalb der lokalen Registerdatei 304 zur Speicherung von Strangkennungen reserviert, wodurch eines der Spezialregister realisiert wird. Ferner enthält ein Gleichmäßigkeits-L1-Cache-Speicher 375 gleichmäßige oder konstante Werte für jede Bahn der N Exec-Einheiten 302 und der P Lade-Speicher-Einheiten LS 303.
  • Auf den gemeinsamen Speicher 306 kann von Strängen innerhalb eines einzelnen CTA zugegriffen werden; anders ausgedrückt, jede Speicherstelle in dem gemeinsamen Speicher 306 ist für jeden Strang innerhalb des gleichen CTA ansprechbar (oder eine beliebige Verarbeitungseinheit innerhalb des SM 310). Der gemeinsame Speicher 306 kann als eine gemeinsame Registerdatei oder ein gemeinsamer chipinterner Cache-Speicher mit einer Verbindung realisiert sein, die es einer beliebigen Verarbeitungseinheit ermöglicht, eine beliebige Stelle in dem gemeinsamen Speicher zu beschreiben oder diese auszulesen. In anderen Ausführungsformen kann ein gemeinsamer Zustandsraum auf ein Gebiet pro CTA eines chipexternen Speichers abgebildet sein, und kann in dem L1-Cache-Speicher 320 zwischengespeichert sein. Der Parameterspeicher kann als ein spezieller Abschnitt innerhalb der gleichen gemeinsamen Registerdatei oder des gemeinsamen Cache-Speichers realisiert sein, der den gemeinsamen Speicher 306 bildet, oder kann als eine separate gemeinsame Registerdatei oder ein chipinterner Cache-Speicher realisiert sein, auf den die LSUs 303 einen Nur-Lese-Zugriff besitzen. In einer Ausführungsform wird der Bereich, der den Parameterspeicher realisiert, auch verwendet, um die CTA-ID und die Aufgaben-ID sowie CTA- und Gitterabmessungen oder Warteschlangenposition zu speichern, wodurch Bereiche der Spezialregister realisiert werden. Jede LSU 303 in dem SM 310 ist mit einer vereinheitlichten Adressenzuordnungseinheit 352 verbunden, die eine Adresse, die für ade- und Speicherbefehle bereitgestellt ist, die in einem vereinheitlichten Speicherbereich angegeben sind, in eine Adresse in jedem separaten Speicherbereich umwandelt. Folglich kann ein Befehl verwendet werden, um auf den lokalen, gemeinsamen oder globalen Speicherbereich zuzugreifen, indem eine Adresse in dem vereinheitlichten Speicherbereich angegeben wird.
  • Der L1-Cache-Speicher 320 in jedem SM 310 kann verwendet werden, um private lokale Daten pro Strang und auch globale Daten pro Anwendung zwischenzuspeichern. In einigen Ausführungsformen können die gemeinsamen Daten pro CTA in dem L1-Cache-Speicher 320 zwischengespeichert werden. Die LSUs 303 sind mit dem gemeinsamen Speicher 306 und dem L1-Cache-Speicher 320 über eine Speicher- und Cache-Verbindung 380 verbunden.
  • Architektur der Grafik-Pipeline
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline 400, die in eine oder mehrere der PPUs 202 aus 2 zur Realisierung konfiguriert werden können gemäß einer Ausführungsform der vorliegenden Erfindung. Beispielsweise kann einer der SM 310 so gestaltet sein, dass er die Funktionen einer oder mehrerer Vertex-Verarbeitungseinheiten 415, einer Geometrie-Verarbeitungseinheit 425 und einer Fragment-Verarbeitungseinheit 460 ausführt. Die Funktionen eines Daten-Assemblers 410, eines Grundelemente-Assemblers 420, einer Rastereinheit 455 und einer Rasteroperationen-Einheit 465 können ebenfalls durch andere Verarbeitungseinheiten innerhalb eines GPC 208 und einer entsprechenden Partitionseinheit 215 ausgeführt werden. Andernfalls kann die Grafikverarbeitungs-Pipeline 400 unter Verwendung spezieller Verarbeitungseinheiten für eine oder mehrere Funktionen realisiert werden.
  • Die Verarbeitungseinheit in Form des Daten-Assemblers 410 sammelt Vertex-Daten für Oberflächen höherer Ordnung, Grundelemente und dergleichen und gibt die Vertex-Daten, wozu die Vertex-Attribute gehören, an die Vertex-Verarbeitungseinheit 415 aus. Die Vertex-Verarbeitungseinheit 415 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Vertex-Schattierungsprogramme auszuführen, um Beleuchtung und die Transformation von Vertex-Daten anzugeben, wie sie durch die Vertex-Schattierungsprogramme spezifiziert sind. Beispielsweise kann die Vertex-Verarbeitungseinheit 415 programmiert sein, um die Vertex-Daten von einer objektbasierten Koordinatendarstellung (Objektraum) in ein Koordinatensystem mit alternativer Basis zu transformieren, etwa in einen Welt-Raum oder in einen normierten Gerätekoordinaten-(NDC)Raum. Die Vertex-Verarbeitungseinheit 415 kann Daten auslesen, die in dem L1-Cache-Speicher 320, in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 von dem Daten-Assemblers 410 zur Verwendung bei der Verarbeitung der Vertex-Daten gespeichert sind.
  • Der Assembler für Grundelemente 420 empfängt Vertex-Attribute aus der Vertex-Verarbeitungseinheit 415, wobei gespeicherte Vertex-Attribute nach Bedarf ausgelesen werden, und baut grafische Grundelemente für die Verarbeitung durch die Geometrie-Verarbeitungseinheit 425 auf. Zu grafischen Grundelementen gehören Dreiecke, Liniensegmente, Punkte und dergleichen. Die Geometrie-Verarbeitungseinheit 425 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Geometrie-Schattierungsprogramme auszuführen, wobei grafische Grundelemente, die von dem Assembler für Grundelemente 420 empfangen werden, transformiert werden, wie dies durch die Geometrie-Schattierungsprogramme angegeben ist. Beispielsweise kann die Geometrie-Verarbeitungseinheit 425 so programmiert sein, dass sie die grafischen Grundelemente in ein oder mehrere neue grafische Grundelemente unterteilt und Parameter berechnet, etwa Koeffizienten für die Ebenengleichung, die verwendet werden, um die neuen grafischen Grundelemente in Raster einzuteilen.
  • In einigen Ausführungsformen kann die Geometrie-Verarbeitungseinheit 425 auch Elemente dem Geometrie-Strom hinzufügen oder aus diesem löschen.
  • Die Geometrie-Verarbeitungseinheit 425 gibt die Parameter und Vertices bzw. Eckpunkte, die die neuen grafischen Grundelemente angeben, an eine Darstellungsfeld-Skalierungs-, Auswahl-, und Schneideeinheit 450 aus. Die Geometrie-Verarbeitungseinheit 425 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 gespeichert sind und zur Weiterverarbeitung der Geometriedaten verwendet werden. Die Darstellungsfeld-Skalier-, Auswahl-, und Schneideeinheit 450 führt einen Schneiden, Auswählen und eine Darstellungsfeldskalierung aus und gibt die verarbeiteten grafischen Grundelemente an eine Rastereinheit 455 aus.
  • Die Rastereinheit 455 konvertiert in abtastender Weise die neuen grafischen Grundelemente und gibt Fragmente und Abdeckungsdaten an die Fragment-Verarbeitungseinheit 460 aus. Ferner kann die Rastereinheit 455 ausgebildet sein, eine z-Auswahl und andere z-basierte Optimierungen durchzuführen.
  • Die Fragment-Verarbeitungseinheit 460 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Fragment-Schattierungsprogramme auszuführen, wobei Fragmente, die aus der Rastereinheit 455 erhalten werden, transformiert werden in der Art, wie dies durch die Fragment-Schattierungsprogramme angegeben ist. Beispielsweise kann die Fragment-Verarbeitungseinheit 460 so programmiert sein, dass Operationen ausgeführt werden, etwa eine perspektivische Korrektur, eine Texturzuordnungen, eine Schattierung, eine Mischung und dergleichen, um schattierte Fragmente zu erzeugen, die an die Rasteroperationen-Einheit 465 ausgegeben werden. Die Fragment-Verarbeitungseinheit 460 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 zur Verwendung bei der Verarbeitung der Fragmentdaten gespeichert sind. Fragmente können schattiert sein auf Ebene von Pixel, Abtastwerten oder entsprechend einer anderen Auflösung, wobei dies von der programmierten Abtastrate abhängig.
  • Die Rasteroperationseinheit 465 ist eine Verarbeitungseinheit, die Rasteroperationen ausführt, etwa Schablonenbildung, z-Test, Mischung, und dergleichen, und die Pixeldaten als verarbeitete Grafikdaten zur Speicherung an den Grafikspeicher ausgibt. Die verarbeiteten Grafikdaten können in dem Grafikspeicher, beispielsweise den Parallelverarbeitungsspeicher 204 und/oder den Systemspeicher 104 zur Anzeige auf dem Anzeigegerät 110 oder zur weiteren Verarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In einigen Ausführungsformen der vorliegenden Erfindung ist die Rasteroperationseinheit 465 ausgebildet, z- oder Farbdaten zu komprimieren, die in den Speicher geschrieben werden, und z- oder Farbdaten zu dekomprimieren, die aus dem Speicher ausgewiesen werden.
  • Zugreifen auf einen inhaltsadressierbaren Speicher
  • Wie zuvor in Verbindung mit 3B erwähnt ist, ist die in 3B gezeigte Textureinheit 315 ausgebildet, Textur-Verarbeitungsoperationen anstelle des SM 310 (der ebenfalls in 3B gezeigt ist) zu auszuführen. Beispielsweise kann der SM 310 die Textureinheit 315 so einrichten, dass eine oder mehrere Textur-bezogenen Operationen ausgeführt werden, die mit der in 4 gezeigten Grafikverarbeitungs-Pipeline 400 verknüpft sind. Ferner könnte der SM 310 auch die Textureinheit 315 so einrichten, dass sie allgemeine Verarbeitungsoperationen ausführt, die bestehende Texturdaten-Pfade nutzen.
  • Wenn die Textureinheit 315 in Verbindung mit dem SM 310 arbeitet, ist sie ausgebildet, Texturdaten aus einer beliebigen der in den 13C gezeigten Speichereinheiten auszulesen. Ferner kann die Textureinheit 315 auch ausgebildet sein, allgemeine Speicherzugriffsoperationen auszuführen, um beliebige Daten aus diesen Speichereinheiten auszulesen, wobei die bestehenden Texturdatenpfade verwendet werden, wie dies zuvor erwähnt ist. Wenn der SM 310 ausgebildet ist, Verarbeitungsoperationen für Allgemeinzwecke auszuführen, kann die Textureinheit 315 ausgebildet sein, eine Textur-Verarbeitungs-Pipeline einzurichten, wie dies nachfolgend in Verbindung mit 5 erläutet ist. Die Textur-Verarbeitungs-Pipeline, die nachfolgend erläutert ist, erlaubt es der Textureinheit 315, Zugriffsoperationen für allgemeine Daten oder Zugriffsoperationen für Texturdaten über den gleichen Datenpfad auszuführen.
  • 5 ist eine Konzeptansicht einer Textur-Verarbeitungs-Pipeline 500, in die die Textureinheit 315 in dem allgemeinen Verarbeitungs-Cluster 208 aus 3B zur Realisierung konfiguriert werden kann, gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst die Textur-Verarbeitungs-Pipeline 500 eine Adresseneinheit 502, eine Markierungseinheit 504, eine Fehltreffer-Verarbeitungseinheit 506 und eine Dateneinheit 508, die einen ersten zuerst-hinein-zuerst-heraus-Speicher (FIFO) 510 und eine Cache-Einheit 512 enthält.
  • Die Textur-Verarbeitungs-Pipeline 500 ist ausgebildet, Speicherzugriffsanforderungen, die aus dem SM 310 empfangen werden, der in 3B gezeigt ist, zu verarbeiten. Eine gegebene Speicherzugriffsanforderung könnte eine Zugriffsoperation für Texturdaten repräsentieren, beispielsweise eine Leseoperation, die eine Textur aus dem Speicher ausliest. Alternativ kann eine Speicherzugriffsanforderung eine Zugriffsoperation für allgemeine Daten repräsentieren, etwa eine Ladeoperation aus einem globalen Speicher. Die Textur-Verarbeitungs-Pipeline 500 kann Speicherzugriffsanforderungen abarbeiten, die mit mehreren unterschiedlichen Strängen verknüpft sind, die zu einer gegebenen Stranggruppe gehören, und diese Speicherzugriffsanforderungen können Zugriffsoperationen für allgemeine (d. h. Nicht-Textur-)Daten oder Zugriffsoperationen für Texturdaten repräsentieren.
  • In Situationen, in denen die Textur-Verarbeitungs-Pipeline 500 ausgebildet ist, Zugriffsoperationen für allgemeine Daten auszuführen, kann die Adresseneinheit 502 eine Speicherzugriffsanforderung aus dem SM 310, der in 3B gezeigt ist, empfangen, wobei die Anforderung eine virtuelle Adresse enthält. Die virtuelle Adresse enthält einen Markierungsbereich, einen Indexbereich und einen Offset-Bereich. Der Markierungsbereich kann die signifikantesten Bits (MSB) der virtuellen Adresse repräsentieren, während der Offset-Bereich die wenigsten signifikanten Bits (LSB) der virtuellen Adresse repräsentieren kann. Die Adresseneinheit 502 ist ausgebildet, die virtuelle Adresse in der Speicherzugriffsanforderung in den Markierungsbereich, den Indexbereich und den Offset-Bereich zu zergliedern.
  • Die Markierungseinheit 504 empfängt den Markierungsbereich, den Indexbereich und den Offset-Bereich der virtuellen Adresse aus der Adresseneinheit 502 und führt eine Prozedur zum Suchen nach einer Markierung durch. Dabei ermittelt die Markierungseinheit 504, ob Daten, die mit der Speicherzugriffsanforderung verknüpft sind, in der Cache-Einheit 512 vorhanden sind. Die Markierungseinheit 504 führt die Prozedur zur Suche nach der Markierung aus, indem auf eine Ansammlung inhaltsadressierbarer Speichereinheiten (CAM) zugegriffen wird und indem ein spezieller CAM ermittelt wird, der die Markierung speichern kann. Die Markierungseinheit 504 ermittelt den speziellen CAM, indem eine Gruppen-Zerlegungs-Funktion eingerichtet wird, die eine CAM-Nummer auf der Grundlage des Markierungsbereichs der virtuellen Adresse berechnet. Beispielsweise könnte die Gruppen-Zerlegungs-Funktion den ersten, den zweiten, den dritten und den vierten CAM in einer Ansammlung aus vier CAM auf der Grundlage des Markierungsbereichs der virtuellen Adresse ermitteln. Die CAM in der Markierungseinheit 504 und die Gruppen-Zerlegungs-Funktion, die zur Ermittelung eines speziellen CAM verwendet wird, sind nachfolgend detaillierter in Verbindung mit 6 geschrieben.
  • Wenn die Markierungseinheit 504 ermittelt, dass der Markierungsbereich in einem der CAM, die zuvor genannt sind, liegt, wodurch ein Cache-Treffer angezeigt wird, extrahiert die Markierungseinheit 504 eine Zeilennummer aus diesem CAM. Die Zeilennummer repräsentiert eine Cache-Zeile in der Cache-Einheit 512. Die Markierungseinheit 504 schiebt die Zeilennummer in den FIFO 510. Die Cache-Einheit 512 entnimmt die Zeilennummer aus dem FIFO 510, wenn diese Zeilennummer verfügbar wird, und ruft dann Daten, die mit dieser Zeilennummer verknüpft sind, aus der entsprechenden Cache-Zeile ab.
  • Wenn die Markierungseinheit 504 ermittelt, dass der Markierungsbereich nicht in einem der CAM liegt, die zuvor genannt sind, wodurch ein Cache-Fehltreffer angezeigt wird, dann gibt die Markierungseinheit 504 den Markierungsbereich und den Offset-Bereich der virtuellen Adresse an die Fehltreffer-Verarbeitungseinheit 506 weiter. Nachfolgende Zugriffe auf einen der CAM auf der Grundlage dieses Markierungsbereichs können dann als Treffer ermittelt werden, da Daten, die mit diesen Markierungsbereich verknüpft sind, abgerufen werden und die Cache-Einheit 512 verschoben werden. Diese Zugriffe können als Treffer ermittelt werden, bis ein CAM-Eintrag, der mit dem Markierungsbereich verknüpft ist, als ungültig gekennzeichnet oder ersetzt wird. Die Fehltreffer-Verarbeitungseinheit 506 führt eine Übersetzung von virtueller in physikalische Adresse aus, und greift dann auf Daten zu, die an der physikalischen Speicherstelle, die mit der resultierenden physikalischen Adresse verknüpft ist, gespeichert sind. Die Fehltreffer-Verarbeitungseinheit 506 stellt dann die abgerufenen Daten für die Dateneinheit 508 bereit.
  • Sobald Daten, die mit der Speicherzugriffsanforderung verknüpft sind, verfügbar sind, beispielsweise werden die Daten aus der Cache-Einheit 512 ausgelesen oder von dem globalen Speicher durch die Fehltreffer-Verarbeitungseinheit 506 abgerufen, gibt die Dateneinheit 508 die angeforderten Daten zurück an den SM 310. Auf diese Weise kann die Textur-Verarbeitungs-Pipeline 500 ausgebildet sein, eine Speicherzugriffsanforderung anstelle eines oder mehrerer Stränge in einer Stranggruppe abzuarbeiten.
  • 6 ist eine Konzeptansicht der Markierungseinheit 504, die in der Textur-Verarbeitungs-Pipeline 500 aus 5 gemäß einer Ausführungsform der vorliegenden Erfindung liegt. Wie gezeigt, umfasst die Markierungseinheit 504 eine Vereinigungseinheit 602, die mit CAM 604-0, 604-1, 604-2 und 604-3 verbunden ist. Jeder der CAM 604 ist mit einer Kombiniereinheit 606 verbunden.
  • Wenn die Markierungseinheit 504 eine Speicherzugriffsoperation verarbeitet, empfängt die Vereinigungseinheit 602 einen Markierungsbereich, einen Indexbereich und einen Offset-Bereich einer virtuellen Adresse, die mit dieser Speicherzugriffsanforderung verknüpft ist, aus der Adresseneinheit 502. Die Vereinigungseinheit 602 kann ferner mehrere Markierungsbereiche, Indexbereiche und Offset-Bereiche gleichzeitig empfangen, wobei jede Gruppe aus Markierungsbereich, Indexbereich und Offset-Bereich einer anderen Speicherzugriffsanforderung entspricht. Wie zuvor erwähnt ist, kann jede derartige Speicherzugriffsanforderung mit einem unterschiedlichen Strang in einer Stranggruppe verknüpft sein, die in der in 5 gezeigten Textur-Verarbeitungs-Pipeline 500 ausgeführt wird.
  • Für eine gegebene Speicherzugriffsanforderung und entsprechende Bereiche für die Markierung, den Index und den Offset der zugehörigen virtuellen Adresse ist die Vereinigungseinheit 602 ausgebildet zu ermitteln, ob der Markierungsbereich in einem der CAM 604 liegt. Wenn dies bewerkstelligt wird, ist die Vereinigungseinheit 602 ausgebildet, die in Verbindung mit 5 genannte Gruppen-Zerlegungs-Funktion einzurichten. In einer Ausführungsform realisiert die in 5 gezeigte Adresseneinheit 502 die hierin beschriebene Gruppen-Zerlegungs-Funktion. Die Gruppen-Zerlegungs-Funktion berechnet eine CAM-Nummer auf der Grundlage des Markierungsbereichs, des Indexbereichs und des Offset-Bereichs der virtuellen Adresse. In einer Ausführungsform kann die Vereinigungseinheit 602 mehrere Speicherzugriffsanforderungen für die gleichen Daten empfangen, und kann diese Anforderungen in nur eine einzelne Anforderung „vereinigen”. Die Vereinigungseinheit 606 kann diese „vereinigte” Anforderung als eine einzelne Anforderung verarbeiten, und richtet daher die Gruppen-Zerlegungs-Funktion nur einmal für die vereinigte Anforderung ein.
  • Sobald ein gegebener CAM 604 ermittelt ist, gibt die Vereinigungseinheit 602 den Markierungsbereich der virtuellen Adresse an den ermittelten CAM 604 weiter. Der ermittelte CAM 604 kann dann ermitteln, dass die Markierung in diesem CAM 604 liegt (wodurch ein Cache-Treffer angegeben wird), oder er kann bestimmen, dass die Markierung nicht in diesem CAM 604 liegt (wodurch ein Cache-Fehltreffer angezeigt wird).
  • Im Falle eines Cache-Treffers liefert der ermittelte CAM 604 eine Zeilennummer, die in diesem CAM 604 gespeichert ist, zusammen mit dem Markierungsbereich an die Kombiniereinheit 606. Die Kombiniereinheit 606 ist ausgebildet, Zeilennummern zu sammeln und dann diese Zeilennummern an den FIFO 510 in einer Weise zu senden, wie dies zuvor in Verbindung mit 5 beschrieben ist.
  • Im Falle eines Cache-Fehltreffers leitet der ermittelte CAM 604 den Markierungsbereich, den Indexbereich und den Offset-Bereich der virtuellen Adresse der Kombiniereinheit 606 zu, die dann virtuelle Adressenbereiche, die mit Cache-Fehltreffern verknüpft sind, sammeln kann und diese Information an die Fehltreffer-Verarbeitungseinheit 506 weiterleiten kann. Die Fehltreffer-Verarbeitungseinheit 506 verarbeitet dann diese Cache-Fehltreffer in der Weise, wie dies in Verbindung mit 5 beschrieben ist.
  • Die Vereinigungseinheit 602 ist ausgebildet, die Gruppen-Zerlegungs-Funktion der vorliegenden Erfindung zu realisieren, um eine CAM-Nummer zu berechnen, indem eine Sequenz an Schritten ausgeführt wird. Zunächst teilt die Vereinigungseinheit 606 die virtuelle Adresse in untere, mittlere und obere Bereiche auf, wobei der obere Bereich einige der MSB enthält, und wobei der untere Bereich einige der LSB enthält. Die Vereinigungseinheit 606 verwirft den unteren Bereich und teilt dann den oberen Bereich in einen Bereich mit geraden Bits und einen Bereich mit ungeraden Bits auf. Der Bereich mit geraden Bits enthält die Bits des oberen Bereichs, die einen geraden Index besitzen, und der Bereich mit ungeraden Bits enthält die Bits des oberen Bereichs, die einen ungeraden Index besitzen.
  • Anschließend reduziert die Vereinigungseinheit 606 den Bereich mit den geraden Bits zu einem ersten Bits unter Anwendung eines XOR- bzw. EXKLUSIV ODER-Baums und reduziert auch den Bereich mit den ungeraden Bits zu einem zweiten Bit unter Anwendung eines XOR- bzw. EXKLUSIV ODER-Baums. Die Vereinigungseinheit 602 kombiniert dann das erste Bit und das zweite Bit mit dem mittleren Bereich der virtuellen Adresse. In einer Ausführungsform enthält der mittlere Bereich der virtuellen Adresse 2 Bits, und die Vereinigungseinheit 602 kombiniert das erste Bit, das zweite Bit und den mittleren Bereich, indem das erste Bit und das zweite Bit an die 2 Bits angefügt werden und indem das Ergebnis zu dem mittleren Bereich der virtuellen Adresse addiert wird. Das Ergebnis der Kombination des ersten Bits, des zweiten Bits und des mittleren Bereichs ist eine Binärzahl mit 2 Bits, die eine CAM-Nummer repräsentiert.
  • Die Vereinigungseinheit 602 ist ausgebildet, die Gruppen-Zerlegungs-Funktion, die zuvor beschrieben ist, einzurichten, wenn sie konfiguriert ist, dies zu bewerkstelligen, wobei dies durch eine Software-Anwendung erfolgen kann, die in dem allgemeinen Verarbeitungs-Cluster 208 ausgeführt wird. Die Vereinigungseinheit 602 kann ferner von der Software-Anwendung konfiguriert werden, andere Gruppen-Zerlegungs-Funktionen einzurichten. In einer Ausführungsform verwendet die Gruppen-Zerlegungs-Funktion eine Galois-Division auf der Grundlage eines primitiven Polynoms, um einen Teilungsrest zu erzeugen. Der Rest kann berechnet werden, indem das primitive bzw. elementare Polynom iterativ als ein XOR-Filter auf eine Eingangsadresse angewendet wird, die nach jeder Iteration nach links geschoben wird. Das Ergebnis des Filters wird in das niedrigste Bit der Restberechnung zurückgespeist, bis der Vorgang abgeschlossen ist. Der Prozess ist abgeschlossen, wenn alle Bits der ursprünglichen Eingangsadresse durch die Verschiebungen nach links aufgebraucht worden sind.
  • Eine Hardware-Realisierung kann die Iterationsschritte, die bei der Berechnung des Teilungsrests ausgeführt werden, benutzen, um einen parallelen XOR- bzw. EXKLUSIV ODER-Baum auf der Grundlage des elementaren Polynoms zu definieren. Jedes Ausgabebit wird durch einen separaten XOR-Baum definiert, jedoch können viele Terme in dem Strukturbaum mehrere Male über alle Ausgangsbits hinweg verwendet werden, wodurch optional eine effizientere Realisierung möglich ist. Die Baumstrukturen werden auf eine Weise spezifiziert, um sicherzustellen, dass die Gruppen-Zerlegungs-Funktion eine gleichmäßige Verteilung von Werten über den vollständigen Bereich virtueller Eingangsadressen erzeugt. Es kann dann die relevante Anzahl an Bits dieser Berechnung verwendet werden, um die CAM-Nummer darzustellen. Die Vereinigungseinheit 602 ist ausgebildet, eine Gruppen-Zerlegungs-Funktion einzurichten, etwa wie sie hierin beschrieben ist, um die CAM 604 abzufragen, wenn eine virtuelle Adresse verarbeitet wird, oder wenn diese CAM aktualisiert werden, so dass sie Markierungsbereiche von virtuellen Adressen enthalten, für die Daten vor kurzem zwischengespeichert wurden.
  • 7 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Gruppen-Zerlegungs-Funktion gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 13 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 700 im Schritt 702, in welchem die Vereinigungseinheit 602, die in 6 gezeigt ist, eine virtuelle Adresse aus der Adresseneinheit 502 empfängt, die in 5 gezeigt ist. Die virtuelle Adresse gehört zu einer Speicherzugriffsanforderung, die gerade von der Textur-Verarbeitungs-Pipeline 500 für einen oder mehrere Stränge in einer Stranggruppe verarbeitet wird.
  • Im Schritt 704 teilt die Vereinigungseinheit 606 die virtuelle Adresse in einen unteren, einen mittleren und einen oberen Bereich auf, wobei der obere Bereich einige der MSB enthält, und wobei der untere Bereich einige der LSB enthält. Im Schritt 706 verwirft die Vereinigungseinheit 606 den unteren Bereich. Im Schritt 708 teilt die Vereinigungseinheit 606 den oberen Bereich in einen Bereich mit geraden Bits und einen Bereich mit ungeraden Bits auf. Der Bereich mit geraden Bits enthält Bits des oberen Bereichs, die einen geraden Index besitzen, und der Bereich mit den ungeraden Bits enthält die Bits des oberen Bereichs, die einen ungeraden Index besitzen.
  • Im Schritt 710 reduziert die Vereinigungseinheit 606 den Bereich mit den geraden Bits zu einem ersten Bit unter Anwendung eines XOR-Baums. Im Schritt 712 reduziert die Vereinigungseinheit 606 den Bereich mit den ungeraden Bits zu einem zweiten Bit unter Anwendung eines XOR-Baums. Im Schritt 714 kombiniert die Vereinigungseinheit 602 das erste Bit und das zweite Bit mit dem mittleren Bereich der virtuellen Adresse. In einer Ausführungsform enthält der mittlere Bereich der virtuellen Adresse 2 Bits, und die Vereinigungseinheit 602 kombiniert das erste Bit, das zweite Bit und den mittleren Bereich, indem das erste Bit und das zweite Bit zu einer Sequenz aus 2 Bits verbunden werden und indem die resultierenden 2 Bits zu dem mittleren Bereich der virtuellen Adresse addiert werden. Im Schritt 716 extrahiert die Vereinigungseinheit 602 eine CAM-Nummer aus dem kombinierten Wert. Der kombinierte Wert, der durch die Kombination des ersten Bits, des zweiten Bits und des mittleren Bereichs erzeugt wurde, ist eine Binärzahl mit 2 Bits, die die CAM-Nummer repräsentiert. Das Verfahren 700 endet dann.
  • 8 ist eine Konzeptansicht einer anschaulichen Schaltung 800, die ausgebildet ist, die in Verbindung mit 7 beschriebene Gruppen-Zerlegungs-Funktion gemäß einer Ausführungsform der vorliegenden Erfindung auszuführen. Wie gezeigt, teilt die Schaltung 800 einen mittleren Bereich einer virtuellen Adresse 802 in Bereiche mit ungeraden Bits 804 und Bereiche mit geraden Bits 806 auf. Die unteren 8 Bits der virtuellen Adresse 802 können verworfen werden. Ein XOR-Baum 810 reduziert die Bereiche mit geraden Bits 806 auf ein erstes Bit 814, und ein XOR-Baum 808 reduziert die Bereiche mit ungeraden Bits 808 auf ein zweites Bit 812. Eine Vereinigung 816 verbindet das erste Bit 814 mit dem zweiten Bit 812, und dann wird durch eine 2-Bit-Addition 820 das 2-Bit-Ergebnis zu dem mittleren Bereich 818 addiert. Der mittlere Bereich 818 repräsentiert das 7-te und das 8-te Bit der virtuellen Adresse 802. Das Ergebnis der 2-Bit-Addition 820 ist eine Binärzahl mit 2 Bits, die die CAM-Nummer repräsentiert.
  • Durch die Realisierung der hierin beschriebenen Gruppen-Zerlegungs-Technik ist die Vereinigungseinheit 602 in der Lage, CAM-Zugriffe, die mit unterschiedlichen Speicherzugriffsanforderungen verknüpft sind, auf unterschiedliche CAM 604 aufzuteilen, wodurch die CAM-Ressourcennutzung verbessert wird. Mit dieser Vorgehensweise sind unterschiedliche CAM 604 in der Lage, Markierungsinformation, die mit unterschiedlichen Speicherzugriffsanforderungen verknüpft ist, parallel zueinander abzurufen, wodurch die Geschwindigkeit erhöht wird, mit der die Markierungseinheit 504 als Ganzes in der Lage ist, mehrere Speicherzugriffsanforderungen abzuarbeiten.
  • Zusammengefasst gilt: eine Markierungseinheit, die ausgebildet ist, eine Cache-Einheit zu verwalten, umfasst eine Vereinigungseinheit, die eine Gruppen-Zerlegungs-Funktion realisiert. Die Gruppen-Zerlegungs-Funktion ordnet eine virtuelle Adresse einer speziellen inhaltsadressierbaren Speichereinheit (CAM) zu. Die Vereinigungseinheit realisiert die Gruppen-Zerlegungs-Funktion, indem die virtuelle Adresse in einen oberen Bereich, einen mittleren Bereich und einen unteren Bereich aufgeteilt wird. Der obere Bereich wird ferner in gerade indizierte Bits und ungerade indizierte Bits aufgeteilt. Die gerade indizierten Bits werden auf ein einzelnes Bit unter Verwendung eines XOR-Baums reduziert, und die ungerade indizierten Bits werden in gleicher Weise reduziert. Diese einzelnen Bits werden mit dem mittleren Bereich der virtuellen Adresse kombiniert, um eine CAM-Nummer bereitzustellen, die einen speziellen CAM kennzeichnet. Der gekennzeichnete CAM wird abgefragt, um die Anwesenheit eines Markierungsbereichs der virtuellen Adresse zu ermitteln, wodurch ein Cache-Treffer oder ein Cache-Fehltreffer angezeigt wird.
  • Vorteilhafterweise wird durch die hierin beschriebene Gruppen-Zerlegungs-Funktion die zu starke Auslastung eines speziellen CAM vermieden, wodurch CAM-Ressourcen effizienter genutzt werden im Vergleich zu konventionellen Vorgehensweisen.
  • Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert sein. 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änkend zu sein: (i) nicht-flüchtige beschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen innerhalb eines Computers, etwa Kompaktdisketten-Nur-Lese-Speicher-(CD-ROM)Disketten, die mit einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, Nur-Lese-Speicher-(ROM)Chips oder andere Arten von nicht-flüchtigen Halbleiterspeichern), auf denen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder einem Festplattenlaufwerk oder eine andere Art an Halbleiterspeicher mit wahlfreiem Zugriff), auf denen veränderbare Information gespeichert ist.
  • Die Erfindung ist zuvor mit Bezug zu speziellen Ausführungsformen beschrieben. Der Fachmann erkennt jedoch, dass diverse Modifizierungen und Änderungen daran vorgenommen werden können, ohne von dem breiteren Grundgedanken und dem Schutzbereich der Erfindung abzuweichen, wie sie in den angefügten Patentansprüchen angegeben ist. Die vorhergehende Beschreibung und die Zeichnungen sind daher als anschaulich und nicht in beschränkendem Sinne zu betrachten.

Claims (10)

  1. Ein computerimplementiertes Verfahren zum Zugreifen auf ein Speichermodul aus mehreren Speichermodulen, wobei das Verfahren umfasst: Zergliedern einer virtuellen Adresse in einen ersten Bereich, einen zweiten Bereich und einen dritten Bereich; Zergliedern des ersten Bereichs in gerade indizierte Bits und ungerade indizierte Bits, wobei jedes der gerade indizierten Bits einen anderen gerade nummerierten Index in der virtuellen Adresse besitzt, und wobei jedes der ungerade indizierten Bits einen anderen ungerade nummerierten Index in der virtuellen Adresse besitzt; Reduzieren der gerade indizierten Bits zu einem ersten Bit; Reduzieren der ungerade indizierten Bits zu einem zweiten Bit; und Erzeugen einer Speichermodulnummer durch Kombinieren des ersten Bits und des zweiten Bits mit dem zweiten Bereich, wobei die Speichermodulnummer das Speichermodul in den mehreren Speichermodulen kennzeichnet.
  2. Das computerimplementierte Verfahren nach Anspruch 1, wobei Reduzieren der gerade indizierten Bits zu einem ersten Bit umfasst: Verarbeiten der gerade indizierten Bits mittels eines ersten XOR-Baums, und wobei Reduzieren der ungerade indizierten Bits zu einem zweiten Bit umfasst: Verarbeiten der ungerade indizierten Bits mittels eines zweiten XOR-Baums.
  3. Ein Subsystem, das ausgebildet ist, auf ein Speichermodul aus mehreren Speichermodulen zuzugreifen, mit: einer Vereinigungseinheit, die ausgebildet ist, um: eine virtuelle Adresse in einen ersten Bereich, einen zweiten Bereich und einen dritten Bereich zu zergliedern; den ersten Bereich in gerade indizierte Bits und ungerade indizierte Bits zu zergliedern, wobei jedes der gerade indizierten Bits einen anderen gerade nummerierten Index in der virtuellen Adresse und jedes der ungerade indizierten Bits einen anderen ungerade nummerierten Index innerhalb der virtuellen Adresse besitzt; die gerade indizierten Bits zu einem ersten Bit zu reduzieren; die ungerade indizierten Bits zu einem zweiten Bit zu reduzieren; und eine Speichermodulnummer zu erzeugen, indem das erste Bit und das zweite Bit mit dem zweiten Bereich kombiniert werden, wobei die Speichermodulnummer das Speichermodul in den mehreren Speichermodulen kennzeichnet.
  4. Das Subsystem nach Anspruch 3, wobei der erste Bereich ein oder mehrere signifikanteste Bits der virtuellen Adresse enthält und wobei der dritte Bereich ein oder mehrere am wenigsten signifikanteste Bits der virtuellen Adresse enthält.
  5. Das Subsystem nach Anspruch 3, wobei die Vereinigungseinheit ferner ausgebildet ist, die gerade indizierten Bits zu dem ersten Bit zu reduzieren, indem die gerade indizierten Bits mittels eines ersten XOR-Baums verarbeitet werden, und die ungerade indizierten Bits zu dem zweiten Bit zu reduzieren, indem die ungerade indizierten Bits mittels eines zweiten XOR-Baums verarbeitet werden.
  6. Das Subsystem nach Anspruch 3, wobei der zweite Bereich 2 Bits enthält, und wobei die Vereinigungseinheit ferner ausgebildet ist, das erste Bit und das zweite Bit mit dem zweiten Bereich zu kombinieren, durch: Verbinden des ersten Bits mit dem zweiten Bit, um eine Bit-Folge zu erzeugen; und Ausführen einer 2-Bit-Addition zwischen der Bit-Folge und dem zweiten Bereich, um den Speichermodulindex zu erzeugen.
  7. Das Subsystem nach Anspruch 3, wobei das Speichermodul eine inhaltsadressierbare Speichereinheit (CAM) umfasst, die ausgebildet ist, Markierungsbereiche von virtuellen Adressen und Zeilennummern, die mit einer Cache-Speichereinheit verknüpft sind, zu speichern.
  8. Das Subsystem nach Anspruch 7, wobei die Vereinigungseinheit ferner ausgebildet ist, um: das Speichermodul nach einem Markierungsbereich der virtuellen Adresse abzufragen; zu ermitteln, dass der Markierungsbereich der virtuellen Adresse in dem Speichermodul vorhanden ist; eine Zeilennummer aus der Cache-Speichereinheit zu extrahieren, die eine Position in der Cache-Speichereinheit angibt, an der Daten liegen, die mit der virtuellen Adresse verknüpft sind; und die Daten, die mit der virtuellen Adresse verknüpft sind, auf der Grundlage der Zeilennummer auszulesen.
  9. Das Subsystem nach Anspruch 7, wobei die Vereinigungseinheit ferner ausgebildet ist, um: das Speichermodul nach einem Markierungsbereich der virtuellen Adresse abzufragen; zu ermitteln, dass der Markierungsbereich der virtuellen Adresse nicht in dem Speichermodul liegt; eine Übersetzung von virtueller in physikalische Adresse mit der virtuellen Adresse auszuführen, um eine physikalische Adresse zu erzeugen; Daten, die mit der virtuellen Adresse verknüpft sind, aus einer physikalischen Stelle, die mit der physikalischen Adresse verknüpft ist, auszulesen.
  10. Das Subsystem nach Anspruch 9, wobei die Vereinigungseinheit ferner ausgebildet ist, die Cache-Speichereinheit so zu aktualisieren, dass sie Daten enthält, die mit der virtuellen Adresse verknüpft sind, die aus der physikalischen Stelle, die zu der physikalischen Adresse gehört, ausgelesen wurden.
DE102013020968.4A 2012-12-19 2013-12-11 Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher Ceased DE102013020968A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/720,755 2012-12-19
US13/720,755 US9348762B2 (en) 2012-12-19 2012-12-19 Technique for accessing content-addressable memory

Publications (1)

Publication Number Publication Date
DE102013020968A1 true DE102013020968A1 (de) 2014-06-26

Family

ID=50878815

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013020968.4A Ceased DE102013020968A1 (de) 2012-12-19 2013-12-11 Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher

Country Status (4)

Country Link
US (1) US9348762B2 (de)
CN (1) CN103885893A (de)
DE (1) DE102013020968A1 (de)
TW (1) TW201435591A (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140354658A1 (en) * 2013-05-31 2014-12-04 Microsoft Corporation Shader Function Linking Graph
DE102015205827A1 (de) 2015-03-31 2016-10-06 Siemens Aktiengesellschaft Verfahren zum Schutz sicherheitsrelevanter Daten in einem Cachespeicher
US9514061B1 (en) * 2015-05-20 2016-12-06 Qualcomm Incorporated Method and apparatus for cache tag compression
US9934150B1 (en) * 2015-10-21 2018-04-03 Marvell International Ltd. Data caching circuit and method
US20170301382A1 (en) * 2016-04-14 2017-10-19 Cavium, Inc. Method and apparatus for shared multi-port memory access
GB2551529B (en) * 2016-06-21 2018-09-12 Advanced Risc Mach Ltd Switching between private cache and shared memory to handle atomic operations
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
US10909037B2 (en) * 2017-04-21 2021-02-02 Intel Corpor Ation Optimizing memory address compression
CN109992529B (zh) * 2018-01-03 2021-07-16 华为技术有限公司 虚拟地址确定方法及装置、处理器、存储介质
US11442867B2 (en) 2018-12-20 2022-09-13 Micron Technology, Inc. Using a second content-addressable memory to manage memory burst accesses in memory sub-systems
US11487671B2 (en) * 2019-06-19 2022-11-01 Advanced Micro Devices, Inc. GPU cache management based on locality type detection
CN113377684B (zh) * 2020-03-09 2024-03-08 瑞昱半导体股份有限公司 数据写入系统与方法
US11693585B2 (en) 2021-04-26 2023-07-04 Apple Inc. Address hashing in a multiple memory controller system
US11803471B2 (en) 2021-08-23 2023-10-31 Apple Inc. Scalable system on a chip

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000004482A2 (en) 1998-07-17 2000-01-27 Intergraph Corporation Multi-processor graphics accelerator
US6851038B1 (en) * 2000-05-26 2005-02-01 Koninklijke Philips Electronics N.V. Background fetching of translation lookaside buffer (TLB) entries
JP3895909B2 (ja) 2000-08-01 2007-03-22 株式会社東芝 携帯型情報機器及び携帯型情報機器の駆動方法
RU2005115094A (ru) 2002-11-18 2006-01-20 Арм Лимитед (Gb) Отображение адресов виртуальной памяти на физические адреса в системе с наличием защищенного домена и незащищенного домена
US6973557B2 (en) 2003-02-04 2005-12-06 Sun Microsystems, Inc. Apparatus and method for dual access to a banked and pipelined data cache memory unit
TWI221221B (en) 2003-02-27 2004-09-21 Via Tech Inc Address decoding method and related apparatus by comparing mutually exclusive bit-patterns of address
US7532537B2 (en) 2004-03-05 2009-05-12 Netlist, Inc. Memory module with a circuit providing load isolation and memory domain translation
US7290116B1 (en) * 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
US6972769B1 (en) 2004-09-02 2005-12-06 Nvidia Corporation Vertex texture cache returning hits out of order
US8144149B2 (en) 2005-10-14 2012-03-27 Via Technologies, Inc. System and method for dynamically load balancing multiple shader stages in a shared pool of processing units
US20080028181A1 (en) 2006-07-31 2008-01-31 Nvidia Corporation Dedicated mechanism for page mapping in a gpu
US7793038B2 (en) * 2007-06-26 2010-09-07 International Business Machines Corporation System and method for programmable bank selection for banked memory subsystems
US8219778B2 (en) 2008-02-27 2012-07-10 Microchip Technology Incorporated Virtual memory interface
US8489801B2 (en) 2009-03-04 2013-07-16 Henry F. Huang Non-volatile memory with hybrid index tag array
TWI379195B (en) 2009-04-13 2012-12-11 Realtek Semiconductor Corp Method and device for accessing memory and central processing unit using the same
US8806144B2 (en) 2009-05-12 2014-08-12 Stec, Inc. Flash storage device with read cache
US8799553B2 (en) 2010-04-13 2014-08-05 Apple Inc. Memory controller mapping on-the-fly
US8626989B2 (en) 2011-02-02 2014-01-07 Micron Technology, Inc. Control arrangements and methods for accessing block oriented nonvolatile memory
US20130262787A1 (en) * 2012-03-28 2013-10-03 Venugopal Santhanam Scalable memory architecture for turbo encoding

Also Published As

Publication number Publication date
TW201435591A (zh) 2014-09-16
US9348762B2 (en) 2016-05-24
US20140173193A1 (en) 2014-06-19
CN103885893A (zh) 2014-06-25

Similar Documents

Publication Publication Date Title
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE102013016871A1 (de) Technik zur Steigerung der Effizienz in mehrsträngigen Verarbeitungseinrichtngen
DE102012211670A1 (de) Simultanes Unterbreiten an eine Mehr-Produzenten-Queue mittels mehrerer Threads
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102012222558B4 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102013020966B4 (de) Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten
DE102013017511A1 (de) Effiziente speichervirtualisierung in mehrsträngigen verarbeitungseinheiten
DE102013208554A1 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102013017510A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102013017639A1 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichen L2-Cache-Speicher mit Oberflächenkomprimierung
DE102009039231A1 (de) Einzeldurchgang-Kachelung
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: VERSCHT, THOMAS K., DIPL.-PHYS.(UNIV.), DE

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

R016 Response to examination communication
R016 Response to examination communication
R082 Change of representative

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

R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final