DE102012222913A1 - Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten - Google Patents

Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten Download PDF

Info

Publication number
DE102012222913A1
DE102012222913A1 DE102012222913A DE102012222913A DE102012222913A1 DE 102012222913 A1 DE102012222913 A1 DE 102012222913A1 DE 102012222913 A DE102012222913 A DE 102012222913A DE 102012222913 A DE102012222913 A DE 102012222913A DE 102012222913 A1 DE102012222913 A1 DE 102012222913A1
Authority
DE
Germany
Prior art keywords
instruction
scheduling
unit
decode data
instructions
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.)
Pending
Application number
DE102012222913A
Other languages
English (en)
Inventor
Jack Hilaire Choquette
Robert J. Stoll
Olivier Giroux
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 DE102012222913A1 publication Critical patent/DE102012222913A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

Abstract

Systeme und Verfahren zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten, welche jeder Anweisung entsprechen. In einer Ausführungsform umfasst ein Mehrkern-Prozessor eine Planungs-Einheit in jedem Kern zum Auswählen von Anweisungen von zwei oder mehr Threads in jedem Planungs-Zyklus zur Ausführung auf diesem bestimmten Kern. Wenn Threads zur Ausführung auf dem Kern geplant werden, werden Anweisungen von den Threads in einen Puffer geholt, ohne dekodiert zu werden. Die Zuvor-Dekodieren-Daten werden mittels eines Compilers bestimmt und werden mittels der Planungs-Einheit während der Laufzeit extrahiert und benutzt, um Auswahl von Threads zur Ausführung zu steuern. Die Zuvor-Dekodieren-Daten können eine Zahl von Planungs-Zyklen spezifizieren, zu warten, bevor die Anweisung geplant wird. Die Zuvor-Dekodieren-Daten können auch eine Planungs-Priorität für die Anweisung spezifizieren. Sobald die Planungs-Einheit eine Anweisung zur Ausführung auszustellen auswählt, dekodiert eine Dekodier-Einheit vollständig die Anweisung.

Description

  • HINTERGRUND DER ERFINDUNG
  • GEBIET DER ERFINDUNG
  • Die Offenbarung betrifft im Allgemeinen Mehrprozess-gestütztes Anweisungs-Planen (multi-threaded instruction scheduling) und insbesondere Verfahren und Apparat zum Planen von Anweisungen unter Benutzen von Zuvor-Dekodieren-Daten (pre-decode data).
  • BESCHREIBUNG DER BETREFFENDEN TECHNIK
  • Parallel-Prozessoren haben mehrere unabhängige Kerne, welche es mehreren Threads erlaubt, simultan unter Benutzung verschiedener Hardware-Ressourcen ausgeführt zu werden. SIMD(Einfach-Anweisung, Mehrfach-Daten)-Architektur-Prozessoren führen dieselbe Anweisung auf jedem der mehreren Kerne aus, wobei jeder Kern verschiedene Eingabe-Daten verarbeitet. MIMD-(Mehrfach-Anweisungen, Mehrfach-Daten)-Architektur-Prozessoren führen verschiedene Anweisungen auf verschiedenen Kernen aus, wobei verschiedene Eingabe-Daten zu jedem Kern zugeführt sind. Parallel-Prozessoren können auch Mehrprozess-gestützt sein (multi-threaded), was ermöglicht, dass zwei oder mehrere Threads im Wesentlichen simultan unter Benutzung der Ressourcen eines einzelnen Verarbeitungs-Kerns ausführen (d. h. die verschiedenen Threads werden auf dem Kern während verschiedener Taktzyklen ausgeführt). Anweisungs-Planen (instruction scheduling) bezieht sich auf die Technik zum Bestimmen, welchen Thread auf welchen Kernen während des nächsten Taktzyklus auszuführen.
  • Typischer Weise werden Anweisungs-Planungs-Algorithmen eine Mehrzahl von Anweisungen dekodieren, nachdem die Anweisungen vom Speicher geholt sind, um die bestimmten Ressourcen zu bestimmen, welche für jede spezifische Operation erfordert sind und die Latenzen, welche mit diesen Ressourcen assoziiert sind. Das System kann dann die Latenzen bewerten, um die optimale Planungs-Ordnung für die Mehrzahl von Anweisungen zu bestimmen. Zum Beispiel kann eine Anweisung einen Operanden spezifizieren (d. h. einen Register-Wert), welcher abhängig von einer Berechnung ist, welche mittels einer vorherigen Anweisung von demselben Thread ausgeführt ist. Der Planer verzögert dann die Ausführung der einen Anweisung, bis die vorherige Anweisung Ausführung vollendet.
  • Ein Problem mit den oben beschriebenen Systemen ist, dass das Dekodieren einer Mehrzahl von Anweisungen, ein Identifizieren von Abhängigkeiten zwischen diesen Anweisungen und ein Analysieren der Latenzen, welche mit all diesen Berechnungen assoziiert ist, welche mittels der Anweisungen spezifiziert sind, erfordert viele Management-Ressourcen in dem Prozessor erfordert und eine große Menge von Zustands-Informations-Speicher. Der Prozessor kann die spezifischen Opcodes bestimmen, welche mittels der Anweisungen spezifiziert sind, die Ressourcen, welche mit den Operationen assoziiert sind (z. B. die spezifischen Register, welche als Operanden an jede Anweisung übergeben sind), die wechselseitigen Abhängigkeiten zwischen Anweisungen und irgendwelche wichtigen Daten, welche mit den Anweisungen assoziiert sind. Die Implementierung eines solchen Algorithmus kann viele Taktzyklen einnehmen, um zu vollenden, und viel Speicher zum Speichern und Dekodieren von Anweisungen.
  • Was demgemäß in der Technik benötigt ist, ist ein System und Verfahren zum Durchführen von Anweisungs-Planung, ohne die Latenzen für Berechnungen bestimmen zu müssen, welche Eingaben für andere Anweisungen sind.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • In einer Ausführungsform umfasst ein Mehrkern-Prozessor eine Planungs-Einheit in jedem Kern zum Auswählen von Anweisungen von zwei oder mehr Threads bei jedem Planungs-Zyklus zur Ausführung auf diesem bestimmten Kern. Wenn Threads zur Ausführung auf dem Kern geplant sind (scheduled), werden Anweisungen von den Threads in einen Puffer geholt, ohne dekodiert zu werden. Die Zuvor-Dekodieren-Daten (pre-decode data) werden mittels eines Compilers und bei Laufzeit bestimmt, die Zuvor-Dekodieren-Daten werden mittels der Planungs-Einheit extrahiert und benutzt, um die Auswahl der Threads zur Ausführung zu steuern. Die Zuvor-Kodieren-Daten können eine Anzahl von Planungs-Zyklen vor dem Ausstellen der Anweisungen zu warten spezifizieren, um. Die Zuvor-Dekodieren-Daten können auch eine Planungs-Priorität für die Anweisung spezifizieren oder dass zwei Anweisungen in einem einzelnen Planungs-Zyklus ausgestellt sein sollten (issued). Sobald die Planungs-Einheit eine Anweisung ausgewählt hat, zur Ausführung auszustellen, dekodiert eine Dekodier-Einheit vollständig die Anweisung.
  • Eine Beispiel-Ausführungsform der Offenbarung führt ein Computer-implementiertes Verfahren zum Planen von Anweisungen innerhalb einer Parallel-Rechenmaschine aus. Das Verfahren umfasst die Schritte eines Holens von Anweisungen, welche zwei oder mehr Thread-Gruppen entsprechen, aus einer Anweisungs-Zwischenspeicher-Einheit, und eines Empfangens von Zuvor-Dekodieren-Daten, welche mit jeder der Anweisungen assoziiert sind, wobei die Zuvor-Dekodieren-Daten bestimmt sind, wenn die Anweisungen kompiliert sind bzw. werden (are compiled). Die Schritte umfassen ferner ein Auswählen einer Anweisung zur Ausführung basierend zumindest im Teil auf den Zuvor-Dekodieren-Daten, ein Dekodieren der Anweisung und ein Absetzen (dispatching) der Anweisung an die Parallel-Verarbeitungs-Einheit zur Ausführung.
  • Eine andere Beispiel-Ausführungsform der Offenbarung führt eine Planungs-Einheit aus, welche eine Anweisung-Zwischenspeicher-Hol-Einheit aufweist, eine Makro-Planungs-Einheit, einn Mikro-Planungs-Vermittler bzw. -Arbiter, eine Dekodier-Einheit und eine Absetz-Einheit. Die Anweisung-Zwischenspeicher-Hol-Einheit ist konfiguriert, Anweisungen zu leiten bzw. zu führen (route), welche den zwei oder mehr Thread-Gruppen entsprechen, zu einem ersten Puffer zu leiten und die Zuvor-Dekodieren-Daten, welche mit jeder der Anweisungen assoziiert sind, zu einem zweiten Puffer zu leiten bzw. zu führen (route). Die Makro-Planungs-Einheit ist an die Anweisung-Zwischenspeicher-Hol-Einheit gekoppelt und konfiguriert, Zuvor-Dekodieren-Daten zu empfangen, wobei die Zuvor-Dekodieren-Daten bestimmt sind, wenn die Anweisungen kompiliert sind. Der Mikro-Planungs-Vermittler oder -Arbiter ist mit der Makro-Planungs-Einheit und dem zweiten Puffer gekoppelt und konfiguriert, zur Laufzeit eine erste Anweisung zur Ausführung mittels einer Verarbeitungs-Einheit basierend zumindest zum Teil auf den Zuvor-Dekodieren-Daten auszuwählen. Die Dekodieren-Einheit ist an den ersten Puffer gekoppelt und ist konfiguriert, die erste Anweisung zu dekodieren. Die Absetz-Einheit ist an die Dekodier-Einheit gekoppelt und ist konfiguriert, die erste Anweisung an eine Verarbeitungs-Einheit zur Ausführung abzusetzen.
  • Noch eine andere Beispiel-Ausführungsform der Offenbarung führt ein Rechengerät aus, welches eine Zentral-Verarbeitungs-Einheit und eine Parallel-Verarbeitungs-Einheit umfasst. Die Parallel-Verarbeitungs-Einheit umfasst eine Planungs-Einheit, welche konfiguriert ist, eine Mehrzahl von Anweisungen, welche zwei oder mehr Thread-Gruppen entsprechen, von einer Anweisungs-Zwischenspeicher-Einheit zu holen, und Zuvor-Dekodieren-Daten, welche mit jeder der Anweisungen assoziiert sind, zu empfangen, wobei die Zuvor-Dekodieren-Daten bestimmt werden, wenn die Anweisungen kompiliert werden. Die Planungs-Einheit ist ferner konfiguriert, eine Anweisung zur Ausführung basierend zumindest zum Teil auf den Zuvor-Dekodieren-Daten auszuwählen, die Anweisung zu dekodieren und die Anweisung an die Parallel-Verarbeitungs-Einheit zur Ausführung abzusetzen.
  • Vorteilhafter Weise erleichtert ein Benutzen der Zuvor-Dekodieren-Daten, welche jeder Anweisung entsprechen, die Arbeits-Belastung für die Planungs-Einheit. Insbesondere braucht die Planungs-Einheit nicht länger die Abhängigkeiten zwischen den Anweisungen zu identifizieren und die Latenzen zu analysieren, welche mit all den Berechnungen assoziiert sind, welche mittels der Anweisungen spezifiziert sind. Daher ist die Menge von Management-Ressourcen in dem Prozessor vermindert und die Menge von Status-Informationen, welche von der Planungs-Einheit gehalten wird, ist vermindert.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • So dass die Weise, in welcher die oben zitierten Merkmale der vorliegenden Offenbarung im Detail verstanden werden können, kann eine besondere Beschreibung der Erfindung, welche kurz oben zusammengefasst ist, durch Bezugnahme auf Ausführungsformen genommen werden, von welchen einige in den angehängten Zeichnungen illustriert sind. Es ist jedoch zu bemerken, dass die angehängten Zeichnungen nur typische Ausführungsformen dieser Offenbarung illustrieren und dass sie daher nicht aufzufassen sind, ihren Geltungsbereich zu begrenzen, denn die Offenbarung kann andere genauso effektive Ausführungsformen zulassen.
  • 1 ist ein Blockdiagramm, welches ein Computersystem illustriert, welches konfiguriert ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu implementieren;
  • 2 ist ein Blockdiagramm eines Parallel-Verarbeitungs-Subsystem für das Computersystem der 1, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3A ist ein Blockdiagramm des Frontends von 2, gemäß einer Ausführungsform der vorliegenden Offenbarung;
  • 3B ist ein Blockdiagramm eines Allgemein-Verarbeitungs-Clusters innerhalb einer der Parallel-Verarbeitungs-Einheiten von 2, gemäß einer Ausführungsform der vorliegenden Offenbarung;
  • 3C ist ein Blockdiagramm eines Teils des Streaming-Mehrfach-Prozessors von 3B, gemäß einer Ausführungsform der vorliegenden Offenbarung; und
  • 4 ist ein Blockdiagramm der Warp-Planungs- und -Anweisungs-Einheit von 3C, gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung;
  • 5A illustriert eine Zwischenspeicher-Zeile, welche aus dem Anweisungs-L1-Zwischenspeicher geholt ist, gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung;
  • 5B illustriert die spezielle Anweisung ss-inst von 5A gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung;
  • 6 illustriert ein Verfahren zum Planen von Anweisungen ohne Anweisungs-Dekodieren, gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung; und
  • 7 illustriert ein Verfahren zum Planen von Anweisungen unter Benutzung der Zuvor-Dekodieren-Daten, gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details ausgeführt, um ein durchgängigeres Verständnis der vorliegenden Erfindung bereitzustellen. Es wird jedoch für den Fachmann in der Technik ersichtlich sein, dass die vorliegende Erfindung ohne ein oder mehrere dieser spezifischen Details praktiziert werden kann. In anderen Fällen sind wohl bekannte Merkmale nicht beschrieben worden, um ein Verschleiern der vorliegenden Erfindung zu vermeiden.
  • Die vorliegende Offenbarung beschreibt Systeme und Verfahren zum Planen von Anweisungen zur Ausführung auf einem Prozessor-Kern vor einem Dekodieren der Anweisungen. In einer anderen Ausführungsform umfasst ein Mehrkern-Prozessor eine Planungs-Einheit in jedem Kern zum Planen von Anweisungen von zwei oder mehr Threads auf diesem bestimmten Kern. Wenn die Threads zur Ausführung geplant werden und an einen Prozessor-Kern ausgestellt werden, werden Anweisungen von den Threads von einem Anweisungs-Zwischenspeicher in einen Puffer geholt, ohne dekodiert zu werden. Die Planungs-Einheit umfasst eine Makro-Planungs-Einheit zum Durchführen einer Prioritäts-Sortierung der Thread-Gruppen, welche auf demselben oder auf verschiedenen Sätzen von Anweisungen ausführen. Ein Mikro-Planungs-Vermittler bzw. -Arbiter bestimmt selektiert zumindest eine Anweisung von einer der Thread-Gruppen jeden Planungs-Zyklus und stellt die zumindest eine Anweisung zur Ausführung aus (issues). Der Mikro-Planungs-Vermittler benutzt Zuvor-Dekodieren-Daten, um den Planungs-Algorithmus zu implementieren. Die Zuvor-Dekodieren-Daten werden zur Kompilierungs-Zeit für jede Anweisung bestimmt. Zur Laufzeit werden die Zuvor-Dekodieren-Daten dadurch extrahiert, dass nur ein kleiner Teil der Anweisungen dekodiert wird. Alternativ können die Zuvor-Dekodieren-Daten zusammen mit der Anweisung empfangen werden, wie etwa eingebettet in dieselbe Zwischenspeicher-Zeile wie die Anweisung. Sobald der Mikro-Planungs-Vermittler eine Anweisung ausgewählt hat, um sie der Ausführungs-Einheit auszustellen, dekodiert eine Dekodier-Einheit vollständig die Anweisung.
  • Systemüberblick
  • 1 ist ein Blockdiagramm, welches ein Computersystem 100 illustriert, welches konfiguriert ist, einen oder mehrere Aspekte der vorliegenden Offenbarung zu implementieren. Computersystem 100 umfasst eine Zentralverarbeitungseinheit (CPU) 102 und einen Systemspeicher 104, welcher über einen Zwischenverbindungspfad (interconnection path) kommuniziert, welcher eine Speicherbrücke 105 umfassen kann. Speicherbrücke 105, welche z. B. ein Northbridge-Chip sein kann, ist über einen Bus oder einen anderen Kommunikationspfad 106 (z. B. HyperTransport-Link) mit einer I/O-(Eingabe/Ausgabe)-Brücke 107 verbunden. I/O-Brücke 107, welche z. B. ein Southbridge-Chip sein kann, empfängt Benutzereingabe von einem oder mehreren Benutzer-Eingabegeräten 108 (z. B. Tastatur, Maus) und leitet die Eingabe an CPU 102 über Kommunikationspfad 106 und Speicherbrücke 105 weiter. Ein Parallel-Verarbeitungs-Subsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen zweiten Kommunikationspfad 113 (z. B. einen Peripheral Component Interconnect(PCI)-Express Accelerated Graphics Port, oder HyperTransport-Link) gekoppelt; in einer Ausführungsform ist das Parallel-Verarbeitungs-Subsystem 112 ein Grafik-Subsystem, welches Pixel an ein Anzeigegerät 110 (z. B. ein konventioneller Kathodenstrahlröhre- oder Flüssigkristallanzeige-basierter Monitor) liefert. Eine Systemplatte 114 ist auch mit der I/O-Brücke 107 verbunden. Ein Switch 116 stellt Verbindungen zwischen I/O-Brücke 107 und anderen Komponenten bereit, wie etwa ein Netzwerkadapter 118 und verschiedenen Hinzufügungskarten (Add-in-Cards) 120 und 121. Andere Komponenten (nicht explizit gezeigt) umfassend Universal Serial Bus USB- oder andere Port-Verbindungen, Kompakt-Disk(CD)-Laufwerke, digitale Video-Disk(DVD)-Laufwerke, Filmaufnahmegeräte, und dergleichen, können auch mit der I/O-Brücke 107 verbunden sein. Die verschiedenen Kommunikationspfade, welche in 1 gezeigt sind, einschließlich die speziell genannten Kommunikationspfade 106 und 113, können unter Benutzung irgendwelcher geeigneten Protokolle implementiert sein, wie etwa PCI-Express, AGP (Accelerated Graphics Port), HyperTransport, oder irgendeines oder irgendwelcher Bus- oder Punkt-zu-Punkt-Kommunikations-Protokoll(e), und Verbindungen zwischen verschiedenen Geräten können verschiedene Protokolle benutzen, wie in der Technik bekannt ist.
  • In einer Ausführungsform inkorporiert das Parallel-Verarbeitungs-Subsystem 112 Schaltung, welche für Grafik- und Video-Verarbeitung optimiert ist, einschließlich zum Beispiel Videoausgabe-Schaltung, und konstituiert eine Grafik-Verarbeitungseinheit (GPU). In einer anderen Ausführungsform umfasst das Parallel-Verarbeitungs-Subsystem 112 Schaltung, welche für Allgemeinzweck-Verarbeitung optimiert ist, während die darunter liegende Computer-Architektur, welche im größeren Detail hierin beschrieben ist, beibehalten ist. In noch einer anderen Ausführungsform kann das Parallel-Verarbeitungs-Subsystem 102 mit einem oder mit mehreren anderen Systemelementen in ein einzelnes Subsystem integriert sein, wie etwa die Speicherbrücke 105, CPU 102 und I/O-Brücke 107 verbindend, um ein System auf dem Chip (system on chip) (SoC) zu bilden.
  • Es wird geschätzt werden, dass das hierin gezeigte System illustrativ ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und der Anordnung von Brücken, der Anzahl von CPUs 102, und der Anzahl von Parallel-Verarbeitungs-Subsystemen 112 kann wie gewünscht modifiziert werden. Zum Beispiel ist in einigen Ausführungsformen Systemspeicher 104 mit CPU 102 direkt gekoppelt anstatt durch eine Brücke, und andere Geräte kommunizieren mit Systemspeicher 104 über Speicherbrücke 105 und CPU 102. In anderen alternativen Topologien ist das Parallel-Verarbeitungs-Subsystem 112 mit I/O-Brücke 107 oder direkt mit CPU 102 verbunden anstatt mit der Speicherbrücke 105. In noch anderen Ausführungsformen können die I/O-Brücke 107 und Speicherbrücke 105 in einen einzelnen Chip integriert sein, anstatt als ein oder mehr Geräte zu existieren. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehr Parallel-Verarbeitungs-Subsysteme 112 umfassen. Die besonderen Komponenten, welche hierin gezeigt sind, sind optional; z. B. könnte irgendeine Anzahl von Hinzufügungskarten oder peripheren Geräten unterstützt sein. In einigen Ausführungsformen ist der Switch 116 eliminiert und der Netzwerkadapter 116 und Hinzufügungskarten 120, 121 verbinden direkt mit der I/O-Brücke 107.
  • 2 illustriert ein Parallel-Verarbeitungs-Subsystem 112 gemäß einer Ausführungsform der vorliegenden Offenbarung. Wie gezeigt, umfasst das Parallel-Verarbeitungs-Subsystem 112 eine oder mehrere Parallel-Verarbeitungseinheiten (PPUs) 202, wobei jede von diesen mit einem lokalen Parallel-Verarbeitungs-(PP)-Speicher 204 gekoppelt ist. Im Allgemeinen umfasst ein Parallel-Verarbeitungs-Subsystem eine Anzahl U von PPUs, wobei U ≥ 1 (hierin sind mehrere Instanzen von ähnlichen Objekten mit Referenznummern bezeichnet, welche das Objekt identifizieren und Nummern in Klammern die Instanz identifizieren, wenn benötigt). PPUs 202 und Parallel-Verarbeitungs-Speicher 204 können unter Benutzung von einem oder mehreren integrierte-Schaltung-Geräten implementiert sein, wie etwa programmierbare Prozessoren, Anwendungs-spezifische integrierte Schaltungen (ASICs), oder Speichergeräte, oder in irgendeiner anderen technisch machbaren Weise.
  • Mit Bezug wieder auf 1 sowie 2 sind in einigen Ausführungsformen einige oder alle der PPUs 202 in dem Parallel-Verarbeitungs-Subsystem 112 Grafikprozessoren mit Render-Pipelines, welche konfiguriert sein können, um verschiedene Operationen durchzuführen, welche das Erzeugen von Pixeldaten von Grafik-Daten, welche mittels CPU 102 und/oder Systemspeicher 104 über Speicherbrücke 105 und den zweiten Kommunikationspfad 113 zugeführt sind, ein Interagieren mit lokalem Parallel-Verarbeitungs-Speicher 204 (welcher als ein Grafikspeicher benutzt werden kann einschließlich z. B. eines konventionellen Bildpuffers (frame buffer)), um Pixeldaten zu speichern und zu aktualisieren, ein Liefern von Pixeldaten an das Anzeigegeräte 110, und dergleichen betreffen. In einigen Ausführungsformen kann das Parallel-Verarbeitungs-Subsystem 112 eine oder mehrere PPUs 202 umfassen, welche als Grafikprozessoren operieren, und eine oder mehrere andere PPUs 202, welche für Allgemeinzweck-Berechnungen benutzt werden können. Die PPUs können identisch sein oder verschieden sein und jede PPU kann ein dediziertes Parallel-Verarbeitungs-Speichergerät(e) haben oder braucht nicht dedizierte Parallel-Verarbeitungs-Speichergerät(e) zu haben. Eine oder mehrere PPUs 202 in Parallelverarbeitungs-Subsystem 112 können Daten an das Anzeigegeräte 110 ausgeben oder jede PPU 202 Parallelverarbeitungs-Subsystem 112 kann Daten an eines oder mehrere Anzeigegeräte 110 ausgeben.
  • Im Betrieb ist CPU 102 der Master-Prozessor von Computersystems 100, welcher Operationen von anderen Systemkomponenten steuert und koordiniert. Insbesondere stellt CPU 102 Befehle aus, welche den Betrieb von PPUs 202 steuern. In einigen Ausführungsformen schreibt CPU 102 einen Strom von Befehlen für jede PPU 202 an eine Daten-Struktur (nicht explizit gezeigt in 1 oder 2), welche in System-Speicher 104, Parallel-Verarbeitungs-Speicher 204, oder einer anderen Speicher-Stelle lokalisiert sein kann, welche sowohl für CPU 102 als auch für PPU 202 zugreifbar ist. Ein Zeiger auf jede Daten-Struktur ist an einen Schiebe-Puffer (push buffer) geschrieben, um eine Verarbeitung von dem Strom von Befehlen in der Daten-Struktur zu initiieren. Die PPU 202 liest Befehls-Ströme von einem oder mehr Schiebe-Puffern und führt dann Befehle asynchron relativ zu dem Betrieb von CPU 102 aus. Ausführungs-Prioritäten können für jeden Schiebe-Puffer mittels eines Anwendungs-Programms über den Geräte-Treiber 103 spezifiziert werden, um eine Planung der verschiedenen Schiebe-Puffer zu steuern.
  • Mit Bezug nun zurück auf 1 sowie 2 umfasst jede PPU 202 eine I/O-(Eingabe/Ausgabe)-Einheit 205, welche mit dem Rest des Computersystems 100 über Kommunikationspfad 113 kommuniziert, welcher zu Speicherbrücke 105 (oder in einer anderen Ausführungsform direkt mit CPU 102) verbindet. Die Verbindung von PPU 202 an den Rest des Computersystems 100 kann auch variiert werden. In einigen Ausführungsformen ist das Parallel-Verarbeitungs-Subsystem112 als eine Hinzufügungskarte implementiert, welche in einen Erweiterungsschlitz oder Erweiterungssteckplatz (expansion slot) von Computersystem 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 auf einem einzelnen Chip integriert sein mit einer Bus-Brücke, wie etwa Speicherbrücke 105 oder I/O-Brücke 107. In noch anderen Ausführungsformen können einige oder alle Elemente von PPU 202 auf einem einzelnen Chip mit CPU 102 integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 ein PCI-Express-Link, in welchem dedizierte Spuren oder Bahnen (lanes) an jede PPU 202 alloziert sind, wie es in der Technik bekannt ist. Andere Kommunikationspfade können auch benutzt werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) für eine Übermittlung auf Kommunikationspfad 113 und empfängt auch alle einlaufenden oder hereinkommenden (incoming) Pakete (oder andere Signale) von Kommunikationspfad 113, wobei die einlaufenden Pakete zu den geeigneten Komponenten von PPU 202 gerichtet werden. Zum Beispiel können Befehle, welche Verarbeitungs-Aufgaben betreffen, an eine Host-Schnittstelle 206 gerichtet werden, während Befehle, welche Speicher-Operationen betreffen (z. B. Lesen von oder Schreiben auf Parallel-Verarbeitungsspeicher 204) an eine Speicher-Kreuzschiene-Einheit (memory crossbar unit) 202 gerichtet werden können. Host-Schnittstelle 206 liest jeden Push-Puffer und gibt den Befehlsstrom, welches in dem Push-Puffers gespeichert ist, an ein Frontend 212 aus.
  • Jede PPU 202 implementiert vorteilhafter Weise eine Hochparallel-Verarbeitungs-Architektur. Wie im Detail gezeigt ist, umfasst PPU 202(0) ein Verarbeitungscluster-Feld (processing cluster array) 230, welches eine Anzahl C von Allgemein-Verarbeitungs-Clustern (GPCs) 208 umfasst, wobei C ≥ 1. Jeder GPC 208 ist in der Lage, eine große Anzahl (z. B. Hunderte oder Tausende) von Threads simultan (concurrently) auszuführen, wobei jeder Thread eine Instanz eines Programms ist. In verschiedenen Anwendungen können verschiedene GPCs 208 zur Verarbeitung von verschiedenen Typen von Programmen oder zum Durchführen von verschiedenen Typen von Berechnungen alloziert werden. Die Allozierung von GPCs 208 kann abhängig von der Arbeitsbelastung, welche für jeden Typ von Programm oder Berechnung auftritt, variiert werden.
  • GPCs 208 empfangen Verarbeitungs-Aufgaben, welche auszuführen sind, von einer Arbeit-Verteilungs-Einheit innerhalb einer Aufgabe-/Arbeit-Einheit 207. Die Arbeit-Verteilungs-Einheit empfängt Zeiger auf Verarbeitungs-Aufgaben, welche als Aufgabe-Metadaten (TMD) kodiert sind und in Speicher gespeichert sind. Die Zeiger auf TMDs sind in dem Befehls-Strom umfasst, welcher als ein Schiebe-Puffer gespeichert ist und mittels der Frontend-Einheit 212 von der Host-Schnittstelle 206 empfangen ist. Verarbeitungs-Aufgaben, welche als TMDs kodiert sein können, umfassen Indizes auf Daten, welche zu prozessieren sind, sowie Status-Parameter und Befehle, welche definieren, wie die Daten zu prozessieren sind (z. B. welches Programm auszuführen ist). Die Aufgabe/Arbeit-Einheit 207 empfängt Aufgaben von dem Frontend 212 und stellt sicher, dass GPCs 208 auf einen gültigen Zustand konfiguriert sind, bevor die Prozessierung, welche mittels jeder der TMDs spezifiziert ist, initiiert ist. Eine Priorität kann für jede TMD spezifiziert sein, welche benutzt ist, Ausführung der Verarbeitungs-Aufgabe zu planen. Verarbeitungs-Aufgaben können auch von dem Verarbeitungs-Cluster-Feld 230 empfangen werden. Optional kann die TMD einen Parameter umfassen, welcher steuert, ob die TMD an den Kopf (head) oder den Schwanz (tail) für eine Liste von Verarbeitungs-Aufgaben hinzugefügt wird (oder eine Liste von Zeigern auf die Verarbeitungs-Aufgaben), wodurch ein anderes Niveau von Steuerung über Priorität bereitgestellt ist.
  • Speicher-Schnittstelle 214 umfasst ein Anzahl D von Partitions-Einheiten 215, welche jeweils direkt mit einem Teil von Parallel-Verarbeitungs-Speicher 204 gekoppelt sind, wobei D ≥ 1. Wie gezeigt, ist die Anzahl von Partitions-Einheiten 215 im Allgemeinen gleich der Anzahl von dynamischer-willkürlicher-Zugriff-Speicher (DRAM) 220. In anderen Ausführungsformen muss die Anzahl von Partitions-Einheiten 215 nicht gleich der Nummer von Speicher-Geräten sein. Gewöhnliche Fachleute in der Technik werden schätzen, dass DRAM 220 durch irgendwelche anderen geeigneten Speicher-Geräte ersetzt werden kann und von einem im Allgemeinen konventionellen Design sein kann. Eine detaillierte Beschreibung wird daher ausgelassen. Render-Ziele (render targets), wie etwa Frame-Puffer oder Textur-Maps können über DRAMs 220 gespeichert sein, was den Partitions-Einheiten 215 erlaubt, Teile von jedem Render-Target in paralleler Weise zu schreiben, um effektiv die verfügbare Bandbreite von Parallel-Verarbeitungs-Speicher 204 zu nutzen.
  • Irgendeine von GPCs 208 kann Daten verarbeiten, welche auf irgendeinen der DRAMs 220 innerhalb des Parallel-Verarbeitungs-Speichers 204 zu schreiben sind. Kreuzschiene-Einheit 210 ist konfiguriert, um die Ausgabe von jedem GPC 208 an den Eingang irgendeiner Partitions-Einheit 215 oder an irgendeinen GPC 208 für weitere Verarbeitung zu leiten (route). GPCs 208 kommunizieren mit der Speicher-Schnittstelle 214 durch die Kreuzschiene 210, um von/auf verschiedene externe Speicher-Geräte zu schreiben oder zu lesen. In einer Ausführungsform hat die Kreuzschiene-Einheit 210 eine Verbindung der Speicher-Schnittstelle 214, um mit I/O-Einheit 205 zu kommunizieren, sowie eine Verbindung mit lokalem Parallel-Verarbeitungs-Speicher 204, um dadurch den Verarbeitungs-Kernen innerhalb der verschiedenen GPCs 208 zu ermöglichen, mit dem System-Speicher 104 oder einem anderen Speicher zu kommunizieren, welcher nicht lokal zu der PPU 202 ist. In der in 2B gezeigten Ausführungsform ist die Kreuzschiene-Einheit 210 direkt mit I/O-Einheit 205 verbunden. Kreuzschiene-Einheit 210 kann virtuelle Kanäle benutzen, um Verkehrsströme zwischen den GPCs 208 und den Partitions-Einheiten 215 zu separieren.
  • Wiederum können GPCs 208 programmiert sein, Verarbeitungs-Aufgaben durchzuführen, welche eine große Verschiedenheit von Anwendungen betreffen, einschließlich aber nicht darauf beschränkt, lineare oder nichtlineare Daten-Transformationen, Filtern von Video- und/oder Audio-Daten, Modellierungs-Operationen (z. B. Anwenden der Gesetze der Physik, um Position, Geschwindigkeit und andere Attribute von Objekten zu bestimmen), Bild-Render-Operationen (z. B. Tessellations-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel-Schattierungs-Programme), usw. PPUs 202 können Daten von dem System-Speicher 104 und/oder Lokal-Parallel-Verarbeitungs-Speichern 204 in internen (On-Chip)-Speicher transferieren, können die Daten prozessieren, und können Ergebnis-Daten zurück in den System-Speicher 104 und/oder lokalen Parallel-Verarbeitungs-Speicher 204 schreiben, wo auf solche Daten mittels anderer System-Komponenten zugegriffen werden kann, einschließlich CPU 102 oder ein anderes Parallel-Verarbeitungs-Subsystem 112.
  • Eine PPU 202 kann mit irgendeiner Menge/Umfang (amount) von Lokal-Parallel-Verarbeitungs-Speicher 204 bereitgestellt sein, einschließlich keines Lokal-Speichers, und kann Lokal-Speicher und System-Speicher in irgendeiner Kombination benutzen. Zum Beispiel kann eine PPU 202 ein Grafikprozessor in einer unifizierter-Speicher-Architektur(unified memory architecture)(UMA)-Ausführungsform sein. In solchen Ausführungsformen würde wenig oder kein dedizierter Grafik-(Parallel-Verarbeitungs)-Speicher bereitgestellt sein und PPU 202 würde System-Speicher exklusiv oder fast exklusiv benutzen. In UMA-Ausführungsformen kann eine PPU 202 in einen Brücken-Chip oder Prozessor-Chip integriert sein oder als ein diskreter Chip bereitgestellt sein mit einem Hochgeschwindigkeits-Link (z. B. PCI-Express), welcher die PPU 202 mit System-Speicher über einen Brücke-Chip oder ein anderes Kommunikations-Mittel verbindet.
  • Wie oben bemerkt ist, kann irgendeine Anzahl von PPUs 202 in einem Parallel-Verarbeitungs-Subsystem 112 umfasst sein. Zum Beispiel können mehrere PPUs 202 auf einer einzelnen Hinzufügungskarte bereitgestellt sein oder mehrere Hinzufügungskarten können mit dem Kommunikationspfad 113 verbunden sein oder eine oder mehrere der PPUs 202 können in einen Brücken-Chip integriert sein. PPUs 202 in einem Mehr-PPU-System können identisch sein oder verschieden voneinander sein. Zum Beispiel könnten verschiedene PPUs 202 verschiedene Anzahlen von Verarbeitungs-Kernen haben, verschiedene Mengen oder Größen von Lokal-Parallel-Verarbeitungs-Speicher, usw. Wo mehrere PPUs 202 vorhanden sind, können diese PPUs in paralleler Weise betrieben werden, um Daten bei einem höheren Durchsatz zu verarbeiten als es mit einer einzelnen PPU 202 möglich ist. Systeme, welche eine oder mehrere PPUs 202 inkorporieren, können in einer Verschiedenheit von Konfigurationen und Formfaktoren implementiert sein, einschließlich Schreibtisch-Computer, Laptop-Computer, oder handgehaltenen Personal-Computern, Servern, Arbeitsstationen, Spielekonsolen, eingebetteten Systemen und dergleichen.
  • Mehrfach-gleichzeitiges-Aufgabe-Planen
  • Mehrere Verarbeitungs-Aufgaben können gleichzeitig auf den GPCs 208 ausgeführt werden und eine Verarbeitungs-Aufgabe kann eine oder mehr „Kind”-Verarbeitungs-Aufgaben während der Ausführung erzeugen. Die Aufgabe-/Arbeit-Einheit 207 empfängt die Aufgaben und plant dynamisch die Verarbeitungs-Aufgaben und Kind-Verarbeitungs-Aufgaben zur Ausführung mittels der GPCs 208.
  • 3A ist ein Blockdiagramm der Aufgabe-/Arbeit-Einheit 207 von 2 gemäß einer Ausführungsform der vorliegenden Offenbarung. Die Aufgabe-/Arbeit-Einheit 207 umfasst eine Aufgabe-Management-Einheit 300 und die Arbeit-Verteilungs-Einheit 340. Die Aufgabe-Management-Einheit 300 organisiert Aufgaben, welche zu planen sind, basierend auf Ausführungs-Prioritäts-Niveaus. Für jedes Prioritäts-Niveau speichert die Aufgabe-Management-Einheit 300 eine Liste von Zeigern auf die TMDs 322, welche den Aufgaben entsprechen, in der Planer-Tabelle 321, wobei die Liste als eine verkettete Liste (linked list) implementiert sein kann. Die TMDs 322 können in dem PP-Speicher 204 oder System-Speicher 104 gespeichert sein. Die Rate, bei welcher die Aufgabe-Management-Einheit 300 Aufgaben annimmt und die Aufgaben in der Planer-Tabelle 321 speichert, ist entkoppelt von der Rate, bei welcher die Aufgabe-Management-Einheit 300 Aufgaben zur Ausführung plant. Daher kann die Aufgabe-Management-Einheit 300 einige Aufgaben sammeln, bevor die Aufgaben geplant werden. Die gesammelten Aufgaben können dann basierend auf Prioritäts-Information oder unter Benutzung anderer Techniken, wie etwa Ring-Verteilungs-Planung (round-robin), geplant werden.
  • Die Arbeit-Verteilungs-Einheit 340 umfasst eine Aufgabe-Tabelle 345 mit Fächern (slots), welche jeweils von einer TMD 322 für eine Aufgabe besetzt sein können, welche ausgeführt wird. Die Aufgabe-Management-Einheit 300 kann Aufgaben zur Ausführung planen, wenn es ein freies Fach in der Aufgabe-Tabelle 345 gibt. Wenn es kein freies Fach gibt, kann eine höhere-Priorität-Aufgabe, welche kein Fach besetzt, eine niedrigere Priorität-Aufgabe verdrängen oder ausschließen (evict), welche ein Fach besetzt. Wenn eine Aufgabe ausgeschlossen wird, wird die Aufgabe gestoppt und wenn Ausführung der Aufgabe nicht vollständig ist, dann wird ein Zeiger auf die Aufgabe an eine Liste von Aufgabe-Zeigern, welche auszuführen sind, so hinzugefügt, dass Ausführung der Aufgabe zu einer späteren Zeit wieder aufnehmen. Wenn eine Kind-Verarbeitungs-Aufgabe erzeugt ist, während einer Ausführung einer Aufgabe, wird ein Zeiger auf die Kind-Aufgabe an die Liste von Aufgabe-Zeigern, welche zu planen sind, hinzugefügt. Eine Kind-Aufgabe kann mittels einer TMD 322 erzeugt sein, welche in dem Verarbeitungs-Cluster-Feld 230 ausführt.
  • Unähnlich einer Aufgabe, welche mittels der Aufgabe-/Arbeit-Einheit 207 von dem Frontend 212 empfangen wird, werden Kind-Aufgaben von dem Verarbeitungs-Cluster-Feld 230 empfangen. Kind-Aufgaben werden nicht in Schiebe-Puffer eingefügt oder an das Frontend übermittelt. Die CPU 102 wird nicht benachrichtigt, wenn eine Kind-Aufgabe erzeugt ist oder Daten für die Kind-Aufgabe im Speicher gespeichert werden. Ein anderer Unterschied zwischen den Aufgaben, welche durch Schiebe-Puffer bereitgestellt sind, und Kind-Aufgaben ist, dass die Aufgaben, welche durch die Schiebe-Puffer bereitgestellt sind, mittels des Anwendungs-Programms definiert sind, wogegen die Kind-Aufgaben dynamisch während einer Ausführung der Aufgaben erzeugt sind.
  • Aufgabe-Verarbeitung-Überblick
  • 3B ist ein Blockdiagramm eines GPC 208 innerhalb einer der PPUs 202 der 2, gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann konfiguriert sein, eine große Anzahl von Threads parallel auszuführen, wobei der Ausdruck „Thread” sich auf eine Instanz eines bestimmten Programms bezieht, welches auf einem bestimmten Satz von Eingabe-Daten ausführt. In einigen Ausführungsformen werden Einzel-Anweisung-, Mehr-Daten-(SIMD)-Befehls-Ausstellungs-Techniken benutzt, um eine parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungs-Einheiten bereitzustellen. In anderen Ausführungsformen werden Einzel-Anweisung-, Mehrfach-Thread-(SIMT)-Techniken benutzt, um eine parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, unter Benutzung einer gemeinsamen Anweisungs-Einheit, welche konfiguriert ist, Anweisungen für einen Satz von Verarbeitungs-Maschinen innerhalb jedes der GPCs 208 auszustellen (issue). Unähnlich zu einem SIMD-Ausführungs-Regime, wobei alle Verarbeitungs-Maschinen typischerweise identische Anweisungen ausführen, erlaubt eine große SIMT-Ausführung verschiedenen Threads, leichter divergenten Ausführungspfaden durch ein gegebenes Thread-Programm zu folgen. Gewöhnliche Fachleute in der Technik werden verstehen, dass ein SIMD-Verarbeitungs-Regime eine funktionale Untermenge eines SIMT-Verarbeitungs-Regimes repräsentiert.
  • Betrieb von GPC 208 wird vorteilhafterweise über einen Pipeline-Manager 305 gesteuert, welcher Verarbeitungs-Aufgaben an Strömungs-Mehrfach-Prozessoren (streaming multiprocessors) (SMs) 310 verteilt. Pipeline-Manager 305 kann auch konfiguriert sein, eine Arbeitsverteilungs-Kreuzschiene (work distribution crossbar) 330 dadurch zu steuern, dass Ziele (destinations) für prozessierte Daten-Ausgaben mittels SMs 310 spezifiziert sind.
  • In einer Ausführungsform umfasst jede GPC 208 eine Anzahl M von SMs 310, wobei M ≥ 1, wobei jeder SM 310 konfiguriert ist, eine oder mehrere Thread-Gruppen zu verarbeiten. Auch umfasst jeder SM 310 vorteilhafterweise einen identischen Satz von funktionalen Ausführungseinheiten (z. B. Ausführungseinheiten und Lade-Speicher-Einheiten – gezeigt als Exec-Einheiten 302 und LSUs 303 in 3C), welche in einer Pipeline angeordnet sein können (pipelined), was erlaubt, eine neue Anweisung auszustellen, bevor eine vorherige Anweisung beendet worden ist, wie es in der Technik bekannt ist. Irgendeine Kombination von funktionalen Ausführungs-Einheiten kann bereitgestellt sein. In einer Ausführungsform unterstützen die funktionalen Einheiten eine Verschiedenheit von Operationen, einschließlich Ganzzahl-Arithmetik und Gleitzahl-Arithmetik (z. B. Addition und Multiplikation), Vergleichs-Operationen, Bool'sche Operationen (AND, OR, XOR), Bit-Verschiebung und Berechnen von verschiedenen algebraischen Funktionen (z. B. planare Interpolation, trigonometrische, exponentiale und logarithmische Funktionen); und dieselbe Funktional-Einheit-Hardware kann eingesetzt werden, um verschiedene Operationen durchzuführen.
  • Die Serie von Anweisungen, welche an eine bestimmte GPC 208 übermittelt wird, konstituiert einen Thread, wie vorher hierin definiert ist, und die Sammlung einer gewissen Anzahl von simultan ausführenden Threads über die Parallel-Verarbeitungs-Maschinen (nicht gezeigt) innerhalb eines SM 310 wird hierin als ein „Warp” oder „Thread-Gruppe” bezeichnet. Wie hierin benutzt, bezeichnet eine „Thread-Gruppe” eine Gruppe von Threads, welche simultan dasselbe Programm auf verschiedenen Eingabe-Daten ausführen, wobei ein Thread der Gruppe an eine verschiedene Verarbeitungs-Maschine innerhalb eines SM 310 zugewiesen ist. Eine Thread-Gruppe kann weniger Threads umfassen als die Anzahl von Verarbeitungs-Einheiten innerhalb des SM 310, in welchem Fall einige Verarbeitungs-Maschinen während Zyklen untätig sein werden, wenn diese Thread-Gruppe verarbeitet wird. Eine Thread-Gruppe kann auch mehr Threads umfassen als die Anzahl von Verarbeitungs-Maschinen innerhalb des SM 310, in welchem Fall die Verarbeitung über nachfolgende Taktzyklen stattfinden wird. Da jeder SM 310 bis zu G Thread-Gruppen gleichzeitig unterstützen kann, folgt, dass bis zu G·M Thread-Gruppen zu einer gegebenen Zeit in GPC 208 ausführen können.
  • Zusätzlich kann eine Mehrzahl von bezogenen Thread-Gruppen aktiv sein, in verschiedenen Phasen einer Ausführung, zu derselben Zeit innerhalb eines SPM 310. Diese Sammlung von Thread-Gruppen wird hierin als ein „kooperatives Thread-Feld” (cooperative thread array) („CTA”) oder „Thread-Feld” bezeichnet. Die Größe eines bestimmten CTA ist m·k, wobei k die Anzahl von gleichzeitig ausführenden Threads in einer Thread-Gruppe ist und typischerweise ein ganzzahliges Vielfaches der Anzahl von Parallel-Verarbeitungs-Einheiten innerhalb des SM 310 ist, und wobei m die Anzahl von Thread-Gruppen ist, welche simultan innerhalb des SM 310 aktiv sind. Die Größe eines CTA ist im Allgemeinen mittels des Programmierers bestimmt und mittels der Menge von Hardware-Ressourcen, wie Speicher oder Register, welche für das CTA verfügbar sind.
  • Jeder SM 310 beinhaltet einen Level-eins(L1)-Cache (in 3C gezeigt) oder benutzt Raum (space) in einem entsprechenden L1-Cache außerhalb des SM 310, welcher benutzt ist, um Lade- und Speicher-Operationen durchzuführen. Jeder SM 310 hat auch Zugriff auf Level-zwei(L2)-Caches, welche unter allen GPCs 208 gemeinsam benutzt oder geteilt sind (shared) und benutzt werden können, um Daten zwischen Threads zu transferieren. Schließlich haben die SMs 310 Zugriff auf Off-Chip „globalen” Speicher, welcher z. B. Parallel-Verarbeitungs-Speicher 204 oder System-Speicher 104 umfassen kann. Es ist verstanden, dass irgendein Speicher extern zu PPU 202 als globaler Speicher benutzt werden kann. Zusätzlich kann ein Level-eins-Komma-fünf(L1.5)-Cache 335 innerhalb des GPC 208 umfasst sein, welcher konfiguriert ist, Daten zu empfangen und zu halten, welche von dem Speicher über Speicher-Schnittstelle 214 geholt sind, abgefragt mittels SM 310, einschließlich Anweisungen, uniforme Daten und konstante Daten, und die angefragten Daten an SM 310 bereitzustellen. Ausführungsformen, welche mehrere SMs 310 in GPC 208 haben, teilen oder benutzen gemeinsam (share) in vorteilhafter Weise gemeinsame Anweisungen und Daten, welche in L1.5-Cache 335 gecached sind.
  • Jeder GPC 208 kann eine Speicher-Management-Einheit (MMU) 328 umfassen, welche konfiguriert ist, virtuelle Adressen in physikalische Adressen abzubilden (map). In anderen Ausführungsformen, können MMU(s) 328 innerhalb der Speicher-Schnittstelle 214 ansässig sein (reside). Die MMU 328 umfasst einen Satz von Seite-Tabelle-Einträgen (page table entry) (PTEs), welche benutzt werden, um eine virtuelle Adresse in eine physikalische Adresse einer Kachel (tile) und optional einen Cache-Zeilen-Index abzubilden. Die MMU 328 kann Adresse-Übersetzungs-Puffer (translation lookaside buffer) (TLB) oder Caches umfassen, welche innerhalb des Mehrfach-Prozessors SM 310 oder dem L1-Cache oder GPC 208 ansässig sein können. Die physikalische Adresse ist verarbeitet, um Oberflächendaten-Zugriffslokalität zu verteilen, um eine effiziente Abfrage-Verschachtelung (interleaving) unter Partitions-Einheiten 215 zu erlauben. Der Cache-Zeile-Index kann benutzt werden, um zu bestimmen, ob eine Anfrage nach einer Cache-Zeile ein Treffer ist oder eine Verfehlung ist oder nicht.
  • in Grafik- und Berechnungs-Anwendungen kann eine GPC 208 derart konfiguriert sein, dass jeder SM 310 mit einer Textur-Einheit 315 zum Durchführen von Textur-Abbildungs-Operationen gekoppelt ist, z. B. Bestimmen von Textur-Proben-Positionen (texture sample position), Lesen von Textur-Daten und Filtern der Textur-Daten. Textur-Daten werden von einem internen Textur-L1-Cache (nicht gezeigt) oder in einigen Ausführungsformen von dem L1-Cache innerhalb von SM 310 gelesen und werden von einem L2-Cache, welcher unter allen GPCs 208 geteilt ist, Parallel-Verarbeitungs-Speicher 204 oder System-Speicher 104 wie benötigt geholt. Jeder SPM 310 gibt verarbeitete Aufgaben an die Arbeits-Verteilungs-Kreuzschiene 330 aus, um die verarbeitete Aufgabe an einen anderen GPC 208 für weitere Verarbeitung bereitzustellen oder um die verarbeitete Aufgabe in einem L2-Cache, Parallel-Verarbeitungs-Speicher 204 oder System-Speicher 104 über Kreuzschiene-Einheit 210 zu speichern. Ein preROP (Vorraster-Operationen) 325 ist konfiguriert, um Daten von SM 310 zu empfangen, Daten an ROP-Einheiten innerhalb der Partitions-Einheiten 215 zu richten, und Optimierungen für Farbmischung durchzuführen, Pixel-Farbdaten zu organisieren und Adress-Translationen durchzuführen.
  • Es wird geschätzt werden, dass die hierin beschriebene Kern-Architektur illustrativ ist und dass Variationen und Modifikationen möglich sind. Irgendeine Anzahl von Verarbeitungs-Einheiten, z. B. SPMs 310 oder Textur-Einheiten 315, preROPs 325, können innerhalb eines GPC 208 umfasst sein kann. Ferner, wie in 2 gezeigt ist, kann eine PPU 202 irgendeine Anzahl von GPCs 208 umfassen, welche vorteilhafterweise funktionell ähnlich zueinander sind, so dass ein Ausführungs-Verhalten nicht davon abhängt, welcher GPC 208 eine bestimmte Verarbeitungs-Aufgabe empfängt. Ferner operiert jeder GPC 208 vorteilhafterweise unabhängig von anderen GPCs 208 unter Benutzung von separaten und distinkten Verarbeitungs-Einheiten L1-Caches, usw., um Aufgaben für ein oder mehr Anwendungsprogramme auszuführen.
  • Gewöhnliche Fachleute in der Technik werden verstehen, dass die in 1, 2, 3A und 3B beschriebene Architektur in keiner Weise den Geltungsbereich der vorliegenden Erfindung begrenzt und dass die hierin gelehrten Techniken auf irgendeiner korrekt konfigurierten Verarbeitungs-Einheit implementiert werden können, einschließlich ohne Begrenzung eine oder mehrere CPUs, eine oder mehrere Mehr-Kern-CPUs, eine oder mehrere PPUs 202, ein oder mehrere GPCs 208, eine oder mehrere Grafik- oder Spezialzweck-Verarbeitungs-Einheiten, oder dergleichen, ohne von dem Geltungsbereich der vorliegenden Erfindung abzuweichen.
  • In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder andere Prozessor(en) eines Computer-Systems zu benutzen, um Allgemeinzweck-Berechnungen unter Benutzung von Thread-Feldern auszuführen. Jedem Thread in dem Thread-Feld ist ein eindeutiger Thread-Identifikator („Thread-ID”) zugewiesen, welcher für den Thread während Ausführung des Threads zugreifbar ist. Die Thread-ID, welche als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert werden kann, steuert verschiedene Aspekte des Verarbeitungs-Verhaltens des Threads. Zum Beispiel kann eine Thread-ID benutzt werden, um zu bestimmen, welchen Teil des Eingabe-Datensatzes ein Thread zu prozessieren hat, und/oder zu bestimmen, welchen Teil eines Ausgabe-Datensatzes ein Thread zu erzeugen hat oder zu schreiben hat.
  • Eine Sequenz von Pro-Thread-Anweisungen kann zumindest eine Anweisung umfassen, welche ein kooperatives Verhalten zwischen dem repräsentativen Thread und einem oder mehreren anderen Threads des Thread-Feldes definiert. Zum Beispiel könnte die Sequenz von Pro-Thread-Anweisungen eine Anweisung umfassen, um eine Ausführung von Operationen für den repräsentativen Thread bei einem bestimmten Punkt in der Sequenz anzuhalten (suspend), bis zu einer solchen Zeit, wenn einer oder mehrere der anderen Threads diesen bestimmten Punkt erreichen, eine Anweisung für den repräsentativen Thread, Daten in einem gemeinsamen Speicher zu speichern, auf welchen einer oder mehrere der anderen Threads zugreifen können, eine Anweisung für den repräsentativen Thread, um atomar Daten zu lesen und zu aktualisieren, welche in einem gemeinsamen Speicher gespeichert sind, auf welchen einer oder mehrere der anderen Threads Zugriff haben, basierend auf ihren Thread-IDs, oder dergleichen. Das CTA-Programm kann auch eine Anweisung umfassen, um eine Adresse in dem gemeinsamen Speicher zu berechnen, von welchem Daten zu lesen sind, wobei die Adresse eine Funktion der Thread-ID ist. Mittels eines Definierens von geeigneten Funktionen und mittels eines Bereitstellens von Synchronisations-Techniken können Daten auf eine bestimmte Stelle in dem gemeinsamen Speicher mittels eines Threads eines CTA geschrieben werden und von dieser Stelle mittels eines verschiedenen Threads desselben CTA in einer vorhersagbaren Weise gelesen werden. Folglich kann irgendein gewünschtes Muster von Daten-gemeinsam-Benutzen (data sharing) unter Threads unterstützt werden, und irgendein Thread in einem CTA kann mit irgendeinem anderen Thread in demselben CTA Daten gemeinsam nutzen bzw. teilen (share). Das Ausmaß, wenn überhaupt, eines gemeinsamen Benutzens von Daten unter Threads eines CTA ist mittels des CTA-Programms bestimmt; somit wird verstanden, dass in einer bestimmten Anwendung, welche CTAs benutzt, die Threads eines CTA tatsächlich Daten miteinander teilen bzw. benutzen könnten oder nicht, abhängig von dem CTA-Programm, und die Ausdrucke „CTA” und „Thread-Feld” werden hierin synonym benutzt.
  • 3C ist ein Blockdiagramm des SM 310 von 3B gemäß einer Ausführungsform der vorliegenden Offenbarung. Der SM 310 umfasst einen Anweisungs-L1-Cache 370, welcher konfiguriert ist, Anweisungen und Konstanten von Speicher über L1.5-Cache 335 zu empfangen. Eine Warp-Planer-(warp scheduler) und -Anweisungs-Einheit 312 empfängt Anweisungen und Konstanten von dem Anweisungs-L1-Cache 370 und steuert eine lokale Register-Datei 304 und SM 310 funktionale Einheiten gemäß den Anweisungen und Konstanten. Die SM 310 funktionalen Einheiten umfassen N exec(Ausführung- oder Verarbeitung-)-Einheiten 302 und P Lade-Speicher-Einheiten (LSU) 303.
  • SM 310 stellt Auf-Chip-(on-chip)-(internen)-Daten-Speicher mit verschiedenen Zugriffs-Niveaus bereit. Spezielle Register (nicht gezeigt) sind lesbar aber nicht schreibbar mittels LSU 303 und werden benutzt, um Parameter zu speichern, welche eine „Position” jedes Threads definieren. In einer Ausführungsform umfassen spezielle Register ein Register pro Thread (oder pro exec-Einheit 302 innerhalb SM 310), welches eine Thread-ID speichert; jedes Thread-ID-Register ist nur mittels einer jeweiligen der exec-Einheit 302 zugreifbar. Spezielle Register können auch zusätzliche Register umfassen, welche mittels aller Threads lesbar sind, welche dieselbe Verarbeitungs-Aufgabe ausführen, welche mittels einer TMD 322 repräsentiert ist (oder mittels aller LSUs 303), welche einen CTA-Identifikator, die CTA-Dimensionen, die Dimensionen eines Gitters, zu welchem die oder das CTA gehört (oder Queue-Position, wenn die TMD 322 eine Queue-Aufgabe anstatt einer Gitter-Aufgabe kodiert), und einen Identifikator der TMD 322, an welche das CTA zugewiesen ist, speichert.
  • Wenn die TMD 322 eine Gitter-TMD ist, führt eine Ausführung der TMD 322 dazu, dass eine fixe Anzahl von CTAs angestoßen wird und ausgeführt wird, um die fixe Menge von Daten zu verarbeiten, welche in der Queue 525 gespeichert sind. Die Anzahl von CTAs ist als das Produkt der Gitter-Breite, -Höhe und -Tiefe spezifiziert. Die fixe Menge von Daten kann in der TMD 322 gespeichert werden oder die TMD 322 kann einen Zeiger auf die Daten speichern, welche mittels der CTAs verarbeitet werden. Die TMD 322 speichert auch eine Start-Adresse des Programms, welches mittels der CTAs ausgeführt ist.
  • Wenn die TMD 322 eine Queue-TMD ist, dann wird ein Queue-Merkmal der TMD 322 benutzt, was bedeutet, dass die Menge von zu prozessierenden Daten nicht notwendiger Weise fix ist. Queue-Einträge speichern Daten zur Verarbeitung mittels der CTAs, welche der TMD 322 zugewiesen sind. Die Queue-Einträge können auch eine Kind-Aufgabe repräsentieren, welche mittels einer anderen TMD 322 während einer Ausführung eines Threads erzeugt ist, wodurch ein geschachtelter Parallelismus bereitgestellt ist. Typischerweise wird Ausführung des Threads, oder des CTA, welches den Thread umfasst, angehalten oder unterbrochen (suspended), bis Ausführung der Kind-Aufgabe vollendet. Die Queue kann in der TMD 322 gespeichert sein oder separat von der TMD 322, in welchem Fall die TMD 322 einen Queue-Zeiger auf die Queue speichert. Vorteilhafter Weise können Daten, welche mittels der Kind-Aufgabe erzeugt sind, an die Queue geschrieben werden, während die TMD 322, welche die Kind-Aufgabe repräsentiert, ausführt. Die Queue kann als eine zirkuläre Queue implementiert sein, so dass die gesamte Menge von Daten nicht auf die Größe der Queue begrenzt ist.
  • CTAs, welche zu einem Gitter gehören, haben implizit Gitter-Breite-, -Höhe- und -Tiefe-Parameter, welche die Position des entsprechenden CTA innerhalb des Grids anzeigen. Spezielle Register werden während einer Initialisierung in Antwort auf Befehle geschrieben, welche über Frontend 212 von Geräte-Treiber 103 empfangen sind und ändern sich nicht während der Ausführung einer Verarbeitungs-Aufgabe. Das Frontend 212 plant jede Verarbeitungs-Aufgabe zur Ausführung. Jedes CTA ist mit einer spezifischen TMD 322 zur gleichzeitigen Ausführung von einer oder mehr Aufgaben assoziiert. Zusätzlich kann ein einzelnes GPC 208 mehrere Aufgaben gleichzeitig ausführen.
  • Ein Parameter-Speicher (nicht gezeigt) speichert Laufzeit-Parameter (Konstanten), welche gelesen werden können aber welche nicht mittels irgendeines Threads innerhalb desselben CTA (oder irgendeiner LSU 303) geschrieben werden können. In einer Ausführungsform stellt der Gerätetreiber 103 Parameter für den Parameter-Speicher bereit, bevor der SM 310 darauf gerichtet wird, eine Ausführung einer Aufgabe zu beginnen, welche diese Parameter benutzt. Irgendein Thread innerhalb irgendeines CTA (oder irgendeine exec-Einheit 302 innerhalb SM 310) kann auf globalen Speicher durch eine Speicher-Schnittstelle 214 zugreifen. Teile von globalem Speicher können in dem L1-Cache 320 gespeichert sein.
  • Die lokale Register-Datei 304 ist mittels jedes Threads als ein Notizzettel-Raum (scratch spase) benutzt; jedes Register wird für die exklusive Benutzung eines Threads alloziert und Daten in irgendeiner Register-Datei 304 sind nur von dem Thread zugreifbar, an welchen das Register alloziert ist. Die lokale Register-Datei 304 kann als eine Register-Datei implementiert sein, welche physikalisch oder logisch in P Spuren oder Bahnen aufgeteilt ist, wobei jede irgendeine Anzahl von Einträgen hat (wobei jeder Eintrag z. B. ein 32-Bit-Wort speichern könnte). Eine Spur ist jeder der N exec-Einheiten 302 und P Lade-Speicher-Einheiten LSU 303 zugewiesen und entsprechende Einträge in verschiedenen Spuren können mit Daten für verschiedene Threads populiert sein, welche dasselbe Programm ausführen, um eine SIMD-Ausführung zu ermöglichen. Verschiedene Teile der Spuren können an verschiedene der G gleichzeitigen Thread-Gruppen alloziert sein, so dass ein gegebener Eintrag in der lokalen Register-Datei 304 nur für einen bestimmten Thread zugreifbar ist. In einer Ausführungsform werden gewisse Einträge innerhalb der lokalen Register-Datei 304 zum Speichern von Thread-Identifikatoren reserviert, welche eines der speziellen Register implementieren. Zusätzlich speichert ein L1-Cache 375 uniforme oder konstante Werte für jede Spur der N exec-Einheiten 302 und P Lade-Speicher-Einheiten LSU 303.
  • Der gemeinsame Speicher 306 ist für alle Threads (innerhalb eines einzelnen CTA) zugreifbar; mit anderen Worten, ist irgendeine Stelle in dem gemeinsamen Speicher 306 für irgendeinen Thread innerhalb desselben CTA zugreifbar (oder für irgendeine Verarbeitungs-Maschine innerhalb SM 310). Der gemeinsame Speicher 306 kann als eine gemeinsam benutzte oder geteilte (shared) Register-Datei oder ein gemeinsamer On-Chip-Cache-Speicher implementiert sein mit einer Zwischenverbindung, welche irgendeiner Verarbeitungs-Maschine erlaubt, von oder auf irgendeine Stelle in dem gemeinsamen Speicher zu lesen oder zu schreiben. In anderen Ausführungsformen könnte der gemeinsame Zustandsraum (shared state space) auf eine Pro-CTA-Region von Off-Chip-Speicher abbilden und könnte in L1-Cache 320 gecached sein. Der Parameter-Speicher kann als ein designierter Abschnitt innerhalb derselben gemeinsamen Register-Datei oder des gemeinsamen Cache-Speichers implementiert sein, welcher den gemeinsamen Speicher 306 implementiert, oder als eine separate gemeinsame Register-Datei oder ein On-Chip-Cache-Speicher, auf welchen die LSUs 303 nur-Lese-Zugriff haben. In einer Ausführungsform ist der Bereich, welcher den Parameter-Speicher implementiert, auch dazu benutzt, um die CTA-ID und die Aufgabe-ID zu speichern, sowie CTA- und Gitter-Dimensionen oder Queue-Position, wobei Teile der speziellen Register implementiert sind. Jede LSU 303 in SM 310 ist mit einer unifizierten Adress-Abbildungs-Einheit 352 gekoppelt, welche eine Adresse, welche für Lade- und Speicher-Befehle bereitgestellt ist, welche in einem unifizierten Speicher-Raum spezifiziert ist, in eine Adresse in jedem distinkten Speicherraum zu konvertieren. Folglich kann eine Anweisung genutzt werden, um auf irgendwelche der lokalen, gemeinsamen oder globalen Speicherräume dadurch zuzutreiben, dass eine Adresse in dem unifizierten Speicherraum spezifiziert wird.
  • Der L1-Cache 320 in jedem SM 310 kann benutzt werden, um private Pro-Thread-lokale-Daten und auch Pro-Applikation-globale-Daten zu cachen. In einigen Ausführungsformen können die Pro-CTA-geteilten Daten in dem L1-Cache 320 gecached werden. Die LSUs 303 sind mit dem gemeinsamen Speicher 306 und dem L1-Cache 320 über eine Speicher- und Cache-Zwischenverbindung 380 gekoppelt. Der uniforme Cache 375 ist konfiguriert, nur-Lese-Daten und Konstanten von Speicher über den L1.5-Cache 335 zu empfangen.
  • Anweisungs-Planung
  • 4 ist ein Blockdiagramm der Warp-Planungs- und -Anweisungs-Einheit 312 von 3C gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung. Wie in 4 gezeigt ist, umfasst die Warp-Planungs- und -Anweisungs-Einheit 312 eine Anweisung-Zwischenspeicher-Hol-Einheit 412, welche konfiguriert ist, Zwischenspeicher-Zeilen zu holen, welche die Anweisungen beinhalten, für Warps aus dem Anweisungs-L1-Zwischenspeicher 370. In einer Ausführungsform ist jede Zwischenspeicher-Zeile 512 Bits breit, welche acht Anweisungen (64 Bit breit) in einer einzelnen Zwischenspeicher-Zeile speichert. Die Anweisungs-Zwischenspeicher-Hol-Einheit 412 leitet Anweisungen, welche aus dem Anweisung-L1-Zwischenspeicher 370 geholt sind, an den Anweisungs-Hol-Puffer (IFB) 422 zur zeitweisen Speicherung ohne Dekodieren der Anweisungen. Zusätzlich leitet die Anweisung-Zwischenspeicher-Hol-Einheit 412 Zuvor-Dekodieren-Daten, welche mit den Anweisungen assoziiert sind, an den Anweisung-Zuvor-Dekodieren-Puffer (IPB) 424 und die Makro-Planungs-Einheit 420. Die Zuvor-Dekodieren-Daten können einen Latenz-Wert (vorbestimmt mittels eines Compilers) kodieren, welcher mit der Anweisung assoziiert ist (z. B. Ausführen dieser Anweisung wird vier Taktzyklen erfordern, bevor die nächste Anweisung von dem Warp ausführen kann). Die Zuvor-Dekodieren-Daten können anzeigen, dass die Anweisung in demselben Planungs-Zyklus wie die nächste Anweisung ausgestellt werden muss. Die Zuvor-Dekodieren-Daten können anzeigen, dass die Anweisung und die nächste Anweisung in aufeinander folgenden Planungs-Zyklen ausgestellt werden sollen. Schließlich können die Zuvor-Dekodieren-Daten ein Auswahl-Priorität-Niveau für die Anweisung einstellen, um die Wahrscheinlichkeit zu erhöhen oder zu erniedrigen, dass die Anweisung ausgewählt wird, ausgestellt zu werden, wenn eine Anweisung für eine andere Thread-Gruppe nicht berechtigt ist, ausgestellt zu werden.
  • In einer Ausführungsform können die Zuvor-Dekodieren-Daten dadurch erzeugt werden, dass nur ein Teil der Anweisungen dekodiert wird (z. B. Dekodieren der ersten 3 Bits der Anweisung). Es wird geschätzt werden, dass ein Dekodieren nur dieses kleinen Teils der Anweisung viel effizienter ist als ein Dekodieren der gesamten 64-Bit-Anweisung, entweder in der Anzahl der Taktzyklen, welche erfordert sind, um die Dekodier-Operation auszuführen, oder in der Menge von physikalischer Logik-Schaltung in dem SM 310. In einer anderen Ausführungsform können die Zuvor-Dekodieren-Daten als eine separate Anweisung in der Zwischenspeicher-Zeile umfasst sein. Zum Beispiel kann die ISA (Anweisung-Satz-Architektur) für die PPU 202 eine spezielle Anweisung definieren (ss-inst), welche, wenn mittels PPU 202 zur Ausführung dekodiert, äquivalent zu einer NOP(keine Operation durchgeführt)-Anweisung ist.
  • Wenn ein Programm kompiliert ist, um den Maschinen-Code zur Ausführung verschiedener Threads auf PPU 202 zu erzeugen, kann der Compiler konfiguriert sein, eine ss-inst-Anweisung an den Beginn jeder Zeile von Speicher zu schreiben (wo jede Zeile von Speicher der Breite der Zwischenspeicher-Zeile entspricht). Der ss-inst kann einen 8-Bit-Opcode umfassen, welcher die Anweisung als eine ss-inst-Anweisung identifiziert, sowie sieben 8-Bit-Werte, welche die Zuvor-Dekodieren-Daten für jede der anderen 7 Anweisungen speichern, welche an die entsprechende Zeile von Speicher geschrieben sind. In noch anderen Ausführungsformen können Zuvor-Dekodieren-Daten an die Makro-Planungs-Einheit 420 und den IPB 424 mittels anderer technisch machbarer Mittel passiert werden, wie etwa mittels eines Schreibens der Zuvor-Dekodieren-Daten an spezielle Register in PPU 202.
  • In einer Ausführungsform implementiert IPB 424 einen einfachen Lese-Planer, um sicherzustellen, dass Warp-FIFO 442 nicht leer ist. In einer Ausführungsform kann warp-FIFO 442 als eine Zahl von FIFOs implementiert sein, welche ss-inst-Anweisungen speichern, welche jedem der Warps entsprechen, welche geplant sind, auf SM 310 auszuführen. IPB 424 ermöglicht, dass Zwischenspeicher-Hol-Tätigkeiten asynchron von Anweisungs-Absetzen an die logischen Einheiten von SM 310 durchgeführt werden. Makro-Planungs-Einheit 420 hält eine Priorität aufrecht, welche mit jedem der Warps, welche auf SM 310 geplant sind, assoziiert ist, und führt eine Sortierung der Zuvor-Dekodieren-Daten, welche mit den geholten Anweisungen assoziiert sind, basierend auf den Prioritäten durch. Zum Beispiel kann die Makro-Planungs-Einheit 420 einen 6-Bit- oder einen 8-Bit-Prioritäts-Wert aufrecht erhalten oder halten, welcher mit jedem der 16 verschiedenen Warps assoziiert ist, welche auf SM 310 geplant sind, bei irgendeiner gegebenen Zeit. Die Priorität kann basierend auf verschiedenen Faktoren zugewiesen sein. In einer Ausführungsform kann Priorität darauf basiert sein, wann der Warp auf SM 310 geplant wurde (d. h. der am längsten anhängige Warp kann die höchste Priorität haben). In anderen Ausführungsformen kann die Priorität für jeden Warp mittels des Programms spezifiziert sein, welches mittels der Anweisungen definiert ist, welche mittels des Warps ausgeführt sind.
  • In einer Ausführungsform führt die Makro-Planungs-Einheit 420 eine neue Sortierung alle j-Anzahl von Taktzyklen durch. Zum Beispiel kann, für 16 Warps, die Makro-Planungs-Einheit 420 eine Prioritäts-Sortierung alle vier Taktzyklen durchführen. In dem ersten Taktzyklus kann Makro-Planungs-Einheit 420 den momentanen Prioritäts-Wert für jeden der 16 anhängigen Warps testen oder abnehmen (sample), die Start-Ordnung der Prioritäten ist auf der vorherigen Sortierungs-Ordnung basiert. In dem zweiten Taktzyklus vergleicht die Makro-Planungs-Einheit 420 und vertauscht (swaps) Warps 0 und 2, Warps 1 und 3, Warps 4 und 6, ..., und Warps 13 und 15 basierend auf Prioritäts-Werten, welche mit den zwei Warps assoziiert sind (mit Warp 0, welcher dem höchsten Prioritäts-Wert entspricht, und Warp 15, welcher dem niedrigsten Prioritäts-Wert entspricht). In dem dritten Taktzyklus vergleicht die Makro-Planungs-Einheit 420 und vertauscht Warps 0 und 1, Warps 2 und 3, Warps 4 und 5, ..., und Warps 14 und 15, basierend auf Prioritäts-Wert. In dem vierten Taktzyklus vergleicht Makro-Planungs-Einheit 420 und vertauscht Warps 1 und 2, Warps 3 und 4, ..., und Warps 13 und 14. Die neue Ordnung basierend auf dieser Prioritäts-Sortierung wird dann benutzt, um zu bestimmen, von welchem Warp die nächste Anweisung mittels des Mikro-Planungs-Vermittlers 440 abzusetzen ist.
  • Mikro-Planungs-Vermittler 440 wählt eine Anweisung, welche in IFB 422 gespeichert ist, basierend auf einer Prioritäts-Einstellung der Warp-Order aus, welche mittels der Makro-Planungs-Einheit 420 erzeugt ist, und den Zuvor-Dekodieren-Daten. Der Mikro-Planungs-Vermittler 440 wählt nicht notwendigerweise die Anweisungen der neuen Ordnung aus, welche mittels der Makro-Planungs-Einheit 420 spezifiziert ist. Wenn eine erste Anweisung basierend auf den Zuvor-Dekodieren-Daten ausgestellt werden kann, wird die Anweisung mittels des Mikro-Planungs-Vermittlers 440 ausgestellt. Wenn die erste Anweisung nicht basierend auf den Zuvor-Dekodieren-Daten ausgestellt werden kann, bestimmt der Mikro-Planungs-Vermittler 440, ob eine Anweisung für einen anderen Warp basierend auf den Zuvor-Dekodieren-Daten für die jeweilige Anweisung ausgestellt werden kann. In einigen Fällen kann die erste Anweisung ausgestellt werden, aber die Zuvor-Dekodieren-Daten spezifizieren, dass die erste Anweisung niedrige Priorität ist, so dass eine andere Anweisung (von einem anderen Warp) stattdessen ausgestellt werden kann. In allen Fällen werden die Anweisungen für jeden individuellen Warp in der Ordnung ausgestellt, in welcher die Anweisungen für den jeweiligen individuellen Warp von der Makro-Planungs-Einheit 420 empfangen sind. Daher betrachtet, für irgendeinen Planungs-Zyklus, der Mikro-Planungs-Vermittler 440 die erste Anweisung in der neuen Ordnung, welche mittels der Makro-Planungs-Einheit 420 zur Auswahl bereitgestellt ist, zur Auswahl. Abhängig von den Zuvor-Dekodieren-Daten für die erste Anweisung kann der Mikro-Planungs-Vermittler 440 eine Anweisung von einem anderen Warp auswählen.
  • Der Mikro-Planungs-Vermittler 440 hält ein Status-Modell von SM 310, welches basierend auf den ausgestellten Anweisungen aktualisiert wird. Das Status-Modell erlaubt dem Mikro-Planungs-Vermittler 440, Anweisungen basierend auf dynamischer Ausführung des Programms und der Verfügbarkeit von Ressourcen innerhalb SM 310 auszuwählen. Zum Beispiel können eine SM 310 oder eine funktionale Einheit innerhalb eines SM 310, welche die Anweisung ausführen werden, als eine Ressource identifiziert werden, welche für die Anweisung benötigt wird, und die Verfügbarkeit der Ressource kann mittels des Mikro-Planungs-Vermittlers 440 benutzt werden.
  • Sobald der Mikro-Planungs-Vermittler 440 die nächste Anweisung auszustellen auswählt, führt der Mikro-Planungs-Vermittler 440 dazu, dass die Anweisung von den IFB 422 an die Dekodier-Einheit 450 geleitet wird. In einigen Ausführungsformen können, abhängig von der Architektur von SM 310, Anweisungen zweifach oder vierfach (dual or quad) ausgestellt werden, was bedeutet, dass mehr als eine Anweisung ausgestellt werden kann und dekodiert werden kann in einem bestimmten Taktzyklus.
  • Dekodier-Einheit 450 empfängt die nächste abzusetzende Anweisung von IFB 422. Die Dekodier-Einheit 450 führt ein vollständiges Dekodieren der Anweisung durch und übermittelt die dekodierte Anweisung an die Absetz-Einheit 470. Wieder können in einigen Ausführungsformen Anweisungen zweifach oder vierfach ausgestellt werden und Dekodier-Einheit 450 kann separate Dekodier-Logik für jede ausgestellte Anweisung implementieren. Absetz-Einheit 470 implementiert einen FIFO und schreibt die dekodierten Werte an eine logische Register-Datei 304 zur Ausführung mittels Ausführungs-Einheiten 302 und Lade-/Speicher-Einheiten 303. In Ausführungsformen, welche mehrere Anweisungen simultan ausstellen, kann Absetz-Einheit 470 jede Anweisung an einen anderen Teil der funktionalen Einheiten von SM 310 ausstellen. Ergebnis-Tafel-Einheit (scoreboard unit) 480 managed und verfolgt die Anzahl von Anweisungen nach (tracks), welche dekodiert worden sind und pro Thread-Gruppe abgesetzt worden sind.
  • Die Warp-Planungs- und Anweisungs-Einheit 312 kann auch einen Wiederholungs-Puffer 430 (replay buffer) umfassen. In einigen Fällen bzw. Situationen kann eine Anweisung, welche mittels der Absetz-Einheit 470 abgesetzt ist, von den funktionalen Ausführungs-Einheiten in SM 310 zurückgewiesen werden. In diesen Situationen kann, anstatt die Anweisung wiederum zu holen und die Anweisung wiederum zu dekodieren, die dekodierte Anweisung in dem Wiederholungs-Puffer 430 gespeichert sein, um bei einem späteren Taktzyklus wieder ausgestellt und wieder abgesetzt zu werden. Anweisungen, welche spekulativ ausgestellt sind und nicht ausgeführt sind, können es benötigen, wieder ausgestellt zu werden und werden in den Wiederholungs-Puffer 430 eingegeben. Eine Anweisung braucht nicht ausgeführt zu werden aufgrund eines Zwischenspeicher-Verfehlens oder einer inkorrekten Verzweigung. Anstatt darauf zu warten, dass Zwischenspeicher-Verfehlen aufgelöst wird und dazu zu führen, dass bereits ausgestellte Anweisungen hinter der Anweisung verzögert werden, wird die Anweisung zu einer späteren Zeit wieder oder erneut ausgestellt.
  • Der Mikro-Planungs-Vermitteler 440 empfängt erneut auszustellende Anweisungen von dem Wiederholungs-Puffer 430. Der Mikro-Planungs-Vermittler 440 ist typischerweise konfiguriert, eine Wiederausstellen-Anweisung von dem Wiederholungs-Puffer 430 über irgendwelche Anweisungen in dem Warp-FIFO 442 auszuwählen. Die Zuvor-Dekodieren-Daten für die erste Anweisung in dem Warp-FIFO 442 können jedoch spezifizieren, dass die erste Anweisung mittels des Mikro-Planungs-Vermittlers 440 ausgewählt werden sollte, selbst wenn eine Wiederausstellen-Anweisung verfügbar ist.
  • 5A illustriert eine Zwischenspeicher-Zeile 500, welche von dem Anweisungen-L1-Zwischenspeicher 370 geholt ist, gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung. Wie gezeigt ist, ist Zwischenspeicher-Zeile 500 512 Bits breit und umfasst acht Anweisungen. Bits 0 bis 63 speichern eine spezielle Anweisung (ss-inst) 500, ähnlich zu der Anweisung, welche oben in 4 beschrieben ist, welche Zuvor-Dekodieren-Daten umfasst, welche mit jeder der anderen sieben Anweisungen in Zwischenspeicher-Zeile 500 assoziiert sind. Zusätzlich zu dem ss-inst 510 speichern Bits 64 bis 127 von Zwischenspeicher-Zeile 500 eine erste Anweisung (inst_1) 521, Bits 128 bis 191 speichern eine zweite Anweisung (inst_2) 522, Bits 192 bis 255 speichern eine dritte Anweisung (inst_3) 523, Bits 256 bis 319 speichern eine vierte Anweisung (inst_4) 524, Bits 320 bis 383 speichern eine fünfte Anweisung (inst_5) 525, Bits 384 bis 447 speichern eine sechste Anweisung (inst_6) 526 und Bits 448 bis 512 speichern eine siebente Anweisung (inst_7) 527. Es wird geschätzt werden, dass die Größe von Zwischenspeicher-Zeile 500 in verschiedenen Ausführungsformen variieren kann. Zum Beispiel können in einer Ausführungsform Anweisungen 32 Bits breit sein und Zwischenspeicher-Zeile 500 kann 256 Bits breit sein. In anderen Ausführungsformen kann die Menge von Zuvor-Dekodieren-Daten länger als 8 Bits pro Anweisung sein und daher kann der Treiber 103 zwei aufeinander folgende ss-inst-Anweisungen auf Bits 0 bis 128 von Zwischenspeicher-Zeile 500 schreiben und sechs Anweisungen in Bits 128 bis 512, wobei jede ss-inst Zuvor-Dekodieren-Daten für drei der sechs Anweisungen in der Zwischenspeicher-Zeile 500 bereitstellt.
  • 5B illustriert die spezielle Anweisung ss-inst 510 von 5A gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung. Wie in 5B gezeigt ist, umfasst ss-inst 510 einen Opcode 530, welcher 8 Bits breit ist und bei Bits 0 bis 7 von ss-inst 510 gespeichert ist. Die ss-inst 510-Anweisung umfasst auch Zuvor-Dekodieren-Daten für sieben Anweisungen, welche mit ss-inst 510 assoziiert sind. Ein erster Satz von Zuvor-Dekodieren-Daten (P_1) 541 ist bei Bits 8 bis 15 gespeichert, ein zweiter Satz von Zuvor-Dekodieren-Daten (P_2) 542 ist bei Bits 16 bis 23 gespeichert, ein dritter Satz von Zuvor-Dekodieren-Daten (P_3) 543 ist bei Bits 24 bis 31 gespeichert, ein vierter Satz von Zuvor-Dekodieren-Daten (P_4) 544 ist bei Bits 32 bis 39 gespeichert, ein fünfter Satz von Zuvor-Dekodieren-Daten (P_5) 545 ist bei Bits 40 bis 47 gespeichert, ein sechster Satz von Zuvor-Dekodieren-Daten (P_6) 546 ist bei Bits 48 bis 55 gespeichert und ein siebenter Satz von Zuvor-Dekodieren-Daten (P_7) 547 ist bei Bits 56 bis 63 gespeichert. Wie oben kurz diskutiert ist, können Zuvor-Dekodieren-Daten 541 bis 547 einen oder mehr Werte kodieren, welcher mit Planungs-Information für eine entsprechende Anweisung assoziiert ist. Zum Beispiel können die Zuvor-Dekodieren-Daten einen Latenz-Wert mit 4 Bits (d. h. einen Wert zwischen 0 und 15) kodieren und ein spezieller Planungs-Hinweis mit den anderen 4 Bits, wie etwa ein Code, welcher der Warp-Planungs- und -Anweisungs-Einheit 312 anzeigt, dass keine zusätzliche Anweisungen von demselben Warp nach der entsprechenden Anweisung für zumindest acht Planungs-Zyklen ausgestellt werden sollten.
  • Es gibt vier verschiedene Typen von Planungs-Hinweisen, welche in den Zuvor-Dekodieren-Daten für eine Anweisung kodiert sind, z. B. Voreinstellung (default), Paar, Halten und Warten. Der Voreinstellungs- bzw. Standard-Planungs-Hinweis ist definiert (fixiert oder programmiert) und wird benutzt für Anweisungen, für welche der Standard-Planungs-Hinweis spezifiziert ist. Der Paar-Planungs-Hinweis spezifiziert, dass die erste Anweisung in demselben Planungs-Zyklus mit der nächsten Anweisung für denselben Warp ausgestellt werden sollte. Der für die nächste Anweisung spezifizierte Hinweis wird auf die erste Anweisung angewendet, welche mit der nächsten Anweisung gepaart ist. Der Halten-Planungs-Hinweis spezifiziert, dass die erste Anweisung vor einer Anweisung für irgendeinen anderen Warp ausgewählt werden sollte. Zusätzlich spezifiziert der Halten-Planungs-Hinweis auch, ob Wiederausstellen-Anweisungen, welche von dem Wiederholen-Puffer 430 empfangen sind, vor der ersten Anweisung ausgewählt werden können. In einer Ausführungsform spezifiziert der Halten-Planungs-Hinweis auch, ob die erste Anweisung ausgestellt werden kann, selbst wenn eine zuvor ausgestellte Lade- oder Speicher-Operation noch nicht für den Warp vollendet worden ist.
  • Der Warp-Planungs-Hinweis spezifiziert, dass der Mikro-Planungs-Vermittler 440 w Ausstellungs-Zyklen warten sollte, bevor er die erste Anweisung ausstellt. Zusätzlich kann der Planungs-Hinweis anzeigen, dass die Ausstellungs-Priorität eines bestimmten Warps für Anweisungen des Warps geboostet bzw. erhöht werden sollte (boosted). Umgekehrt kann der Planungs-Hinweis anzeigen, dass die Ausstellungs-Priorität des bestimmten Warps vermindert werden sollte, so dass der Warp ergibt, dass es für eine gegebene Anweisung Anweisungen für andere Warps erlaubt ist, auszustellen. Die Planungs-Priorität für Anweisungen des Warp wird erhöht oder erniedrigt, nachdem die Anzahl von Planungs-Zyklen, welche für den Warp-Planungs-Hinweis spezifiziert wurden, durchgesickert sind bzw. geschehen sind. Wenn die Priorität für Anweisungen des Warp vermindert wird, kann eine spezifische Zahl von Planungs-Zyklen spezifiziert werden, nach der die Planungs-Priorität zurück auf ein Neutral-Niveau erhöht wird. Wenn die Anweisung, welche dem Warten-Planungs-Hinweis entspricht, ausstellt (issues), kann die Planungs-Priorität für den Warp geändert werden, wenn eine andere Anweisung für den Warp die erste Anweisung ist, welche für den Mikro-Planungs-Vermittler 440 von dem Warp-FIFO 442 bereitgestellt ist. Schließlich kann der Planungs-Hinweis auch anzeigen, ob es wahrscheinlich ist, dass die Anweisung einmal oder mehrere Male erneut ausgestellt weird, wenn ein oder mehrere Threads in dem Warp während einer Ausführung divergieren.
  • Die verschiedenen Typen von Zuvor-Dekodieren-Daten und Optionen für jeden Planungs-Hinweis sind in Tabelle 1 gezeigt. Tabelle 1 – Planungs-Hinweis-Typen und Optionen
    Kodieren Planungs-Hinweis Option Beschreibung
    00000000 Voreinstellung Keine Benutzung des Voreinstellungs-Planungs-Hinweises
    00000100 Paar Keine Stelle diese Anweisung in demselben Planungs-Zyklus wie die nächste Anweisung aus
    00000101 Halten IFB Stelle diese Anweisung aus, bevor irgendeine andere Anweisung in dem IFB 422 ausgestellt wird
    00000110 Halten Alle Stelle diese Anweisung aus, bevor irgendeine andere Anweisung (einschließlich einer Wiederausstellen-Anweisung) ausgestellt wird
    00000111 Halten IFB + Umordnen Stelle diese Anweisung aus, bevor irgendeine andere Anweisung in dem IFB 422 ausgestellt wird und ohne darauf zu warten, dass In-Flug-Lade- oder Speicher-Operationen vollenden
    001WWWWW Warten Warte für zumindest w = WWWWW + 1 Planungs-Zyklen vor Ausstellen der Anweisung
    010WWWWW Warten Umordnen Warte für zumindest w = WWWWW + 1 Planungs-Zyklen vor Ausstellen der Anweisung und stelle aus, ohne darauf zu warten, dass In-Flug-Lade- oder Speicher-Operationen vollenden
    011WWWWW Warten Wiederholen Warte für zumindest w = WWWWW + 1 Planungs-Zyklen vor Ausstellen der Anweisung
    111WWWWW Warten Erhöhen Warte für zumindest w = WWWWW + 1 Planungs-Zyklen vor Ausstellen der Anweisung, erhöhe die Planungs-Priorität für den Warp nach w Planungs-Zyklen
    1YYYWWWW Warten Ertrag Warte für zumindest w = WWWW + 1
    YYY ≤5 Planungs-Zyklen vor Ausstellen der Anweisung, vermindere die Planungs-Priorität für den Warp für y = YYY Planungs-Zyklen und setzte dann die Planungs-Priorität für den Warp zurück (y = 0 setzt die Planungs-Priorität für den Warp zurück)
  • 6 illustriert ein Verfahren 600 zum Planen von Anweisungen ohne Anweisungs-Dekodieren gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A bis 3C, 4 und 5 beschrieben sind, werden Fachleute in der Technik verstehen, dass irgendein System, welches konfiguriert ist, die Verfahrensschritte durchzuführen, in irgendeiner Ordnung, innerhalb des Geltungsbereichs der Offenbarung ist.
  • Verfahren 600 beginnt bei Schritt 610, wo die Warp-Planungs- und -Anweisung-Einheit 312 eine Mehrzahl von Anweisungen, welche mit zwei oder mehr Thread-Gruppen assoziiert sind, von Anweisung-L1-Zwischenspeicher 370 holt. Jede Hol-Operation kann eine Zwischenspeicher-Zeile abrufen, welche eine Anzahl von distinkten Anweisungen beinhaltet, welche in derselben Zwischenspeicher-Zeile gespeichert sind. In einer Ausführungsform ist die erste Anweisung der Zwischenspeicher-Zeile eine spezielle Anweisung (ss-inst) 510, welche die Zuvor-Dekodieren-Daten für die anderen Anweisungen umfasst, welche in der Zwischenspeicher-Zeile gespeichert sind. Bei Schritt 612 speichert die Warp-Planungs- und -Anweisungs-Einheit 312 die Anweisungen in IFB 422 innerhalb der Warp-Planungs- und -Anweisungs-Einheit 312. Bei Schritt 614 übermittelt die Warp-Planungs- und -Anweisungs-Einheit 312 Zuvor-Dekodieren-Daten an IPB 424. In einer Ausführungsform werden die Zuvor-Dekodieren-Daten dadurch erzeugt, dass ein partielles Dekodieren der Anweisung durchgeführt wird. In einer anderen Ausführungsform werden die Zuvor-Dekodieren-Daten von einer speziellen Anweisung gelesen, welche in der Zwischenspeicher-Zeile umfasst ist. In noch einer anderen Ausführungsform können die Zuvor-Dekodieren-Daten von einer speziellen Stelle im Speicher gelesen werden.
  • Bei Schritt 616 führt die Makro-Planungs-Einheit 420, welche in der Warp-Planungs- und -Anweisungs-Einheit 312 umfasst ist, eine Prioritäts-Sortierung, um eine Ordnung von den zwei oder mehr Thread-Gruppen zu bestimmen. In einer Ausführungsform kann die Warp-Planungs- und -Anweisungs-Einheit 312 bis zu 16 verschiedene Thread-Gruppen für parallele Ausführung managen. Die Ordnung der Thread-Gruppen repräsentiert die Priorität jeder Thread-Gruppe für Planungs-Entscheidungen. Die Makro-Planungs-Einheit 420 kann einen 6-Bit-Prioritäts-Wert für jede der Thread-Gruppen zuweisen. Makro-Planungs-Einheit 420 sortiert die Zuvor-Dekodieren-Daten in IPB 422 in Warp-FIFO 442 gemäß den Thread-Gruppe-Prioritäts-Werten, wodurch eine Ordnung von Anweisungen für die Thread-Gruppen erzeugt ist. Bei Schritt 618 wählt ein Mikro-Planungs-Vermittler 440, welcher in der Warp-Planungs- und -Anweisungs-Einheit 312 umfasst ist, eine Anweisung zur Ausführung basierend zumindest zum Teil auf der Ordnung der Thread-Gruppen und den Zuvor-Dekodieren-Daten in dem Warp-FIFO 442 aus.
  • Bei Schritt 620 dekodiert die Dekodieren-Einheit 250, welche in der Warp-Planungs- und -Anweisungs-Einheit 312 umfasst ist, die ausgewählte Anweisung zur Ausführung auf SM 310. In einer Ausführungsform kann Dekodier-Einheit 450 zwei oder mehr separate und distinkte Logik-Blöcke zum Dekodieren von mehreren Anweisungen parallel implementieren. Bei Schritt 622 übermittelt Absetz-Einheit 470 die dekodierten Anweisungen an eine lokale Register-Datei 304 zur Ausführung mittels der funktionalen Einheiten von SM 310. Bei Schritt 624 bestimmt Warp-Planungs- und -Anweisungs-Einheit 312, ob es mehr anhängige Anweisungen in IFB 422 gibt. Wenn es mehr anhängige Anweisungen gibt, dann kehrt Verfahren 600 zu Schritt 610 zurück und eine andere Anweisung ist zur Ausführung ausgewählt. Wenn es jedoch keine anhängigen Anweisungen in IFB 422 gibt, dann terminiert Verfahren 600.
  • Ein Vorteil des offenbarten Systems ist, dass die Dekodier-Einheit nur die nächste Anweisung dekodiert, welche zu planen ist, wobei Latenzen vermindert sind, welche dadurch eingeführt sind, dass gewartet wird, bis eine Mehrzahl von Anweisungen dekodiert worden ist, bevor bestimmt wird, welche Anweisung zu planen ist. Ein anderer Vorteil des offenbarten Systems ist, dass ein Durchführen einer Prioritäts-Sortierung mit der Makro-Planungs-Einheit vor einem Einstellen der Ordnung der Thread-Gruppen mit dem Mikro-Planungs-Vermittler die Menge von Logik wesentlich vermindert, welche benötigt wird, um den Planungs-Algorithmus zu implementieren, wobei nur ein schnelles Durchlaufen eines Baums (tree traversal) der sortierten Thread-Gruppen erfordert ist, um die höchste-Priorität-Anweisung zu bestimmen, welche bereit ist, abgesetzt zu werden.
  • 7 illustriert ein Verfahren 700 zum Planen von Anweisungen unter Benutzung der Zuvor-Dekodieren-Daten gemäß einer Beispiel-Ausführungsform der vorliegenden Offenbarung. Die Schritte, welche in Verfahren 700 gezeigt sind, können benutzt werden, um zumindest einen Teil von Schritt 618 von 6 durchzuführen. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A bis 3C, 4 und 5 beschrieben sind, werden Fachleute mit gewöhnlichen Fähigkeiten in der Technik verstehen, dass irgendein System, welches konfiguriert ist, die Verfahrensschritte durchzuführen, in irgendeiner Ordnung, innerhalb des Geltungsbereichs der Offenbarung ist.
  • Das Verfahren 700 wird mittels des Mikro-Planungs-Vermittlers 440 für jeden Planungs-Zyklus durchgeführt. Verfahren 700 beginnt bei Schritt 705, wo der Mikro-Planungs-Vermittler 440 bestimmt, ob die Zuvor-Dekodieren-Daten einen Halten-Planungs-Hinweis kodieren, und, wenn dem so ist, dann bestimmt bei Schritt 710 der Mikro-Planungs-Vermittler 440, ob die „Alle”-Option für den Halten-Planungs-Hinweis spezifiziert ist. Wenn die „Alle”-Option spezifiziert ist, dann stellt bei Schritt 762 der Mikro-Planungs-Vermittler 440 die erste Anweisung aus. Die erste Anweisung wird ausgestellt, selbst wenn eine erneut-Ausstellen-Anweisung auszustellen verfügbar ist.
  • Wenn der Mikro-Planungs-Vermittler 440 bei Schritt 710 bestimmt, dass die „Alle”-Option nicht für den Halten-Planungs-Hinweis spezifiziert ist, dann ist die IFB-Option für den Halten-Planungs-Hinweis spezifiziert, und bei Schritt 714 bestimmt der Mikro-Planungs-Vermittler 440, ob eine erneut-Ausstellen-Anweisung in dem Wiederholen-Puffer 430 verfügbar ist. Wenn eine erneut-Ausstellen-Anweisung nicht in dem Wiederholen-Puffer 430 verfügbar ist, dann stellt bei Schritt 762 der Mikro-Planungs-Vermittler 440 die erste Anweisung aus. Wenn bei Schritt 714 eine erneut-Ausstellen-Anweisung in dem Wiederholen-Puffer 430 verfügbar ist, dann stellt bei Schritt 716 der Mikro-Planungs-Vermittler 440 die erneut-Ausstellen-Anweisung aus.
  • Zurückkehrend auf Schritt 705 bestimmt dann, wenn der Mikro-Planungs-Vermittler 440 bestimmt, dass die Zuvor-Dekodieren-Daten nicht einen Halten-Planungs-Hinweis kodieren, dann bei Schritt 706 der Mikro-Planungs-Vermittler 440, ob eine erneut-Ausstellen-Anweisung in dem Wiederholen-Puffer 430 verfügbar ist. Wenn eine erneut-Ausstellen-Anweisung in dem Wiederholen-Puffer 430 verfügbar ist, dann stellt bei Schritt 716 der Mikro-Planungs-Vermittler 440 die erneut-Ausstellen-Anweisung aus.
  • Wenn bei Schritt 706 der Mikro-Planungs-Vermittler 440 bestimmt, dass eine erneut-Ausstellen-Anweisung nicht in dem Wiederholen-Puffer 430 verfügbar ist, dann bestimmt bei Schritt 715 der Mikro-Planungs-Vermittler 440, ob der Paar-Planungs-Hinweis, und wenn dem so ist, werden bei Schritt 717 die erste und die zweite Anweisung in demselben Planungs-Zyklus ausgestellt. Die erste Anweisung ist die erste Anweisung in der neuen Ordnung von Anweisungen für die Warps, welche für den Mikro-Planungs-Vermittler 440 mittels der Makro-Planungs-Einheit 420 bereitgestellt ist. Die zweite Anweisung ist die zweite Anweisung für denselben Warp wie die erste Anweisung. Mit anderen Worten ist die zweite Anweisung nicht notwendigerweise die zweite Anweisung in der neuen Ordnung von Anweisungen.
  • Wenn bei Schritt 715 der Mikro-Planungs-Vermittler 440 bestimmt, dass die Zuvor-Dekodieren-Daten nicht einen Paar-Planungs-Hinweis kodieren, dann bestimmt bei Schritt 730 der Mikro-Planungs-Vermittler 440, ob die Zuvor-Dekodieren-Daten einen Warten-Planungs-Hinweis kodieren. Wenn die Zuvor-Dekodieren-Daten nicht einen Warten-Planungs-Hinweis kodieren, dann kodieren die Zuvor-Dekodieren-Daten, dass der Voreinstellungs-Planungs-Hinweis benutzt werden sollte. Der Voreinstellungs-Planungs-Hinweis kann der Paar-, Warten- oder Halten-Planungs-Hinweis mit den assoziierten Optionen sein. Bei Schritt 732 benutzt der Mikro-Planungs-Vermittler 440 den Voreinstellungs-Planungs-Hinweis und kehrt zu Schritt 705 zurück, um den Planungs-Hinweis zu bestimmen, welcher mittels des Voreinstellungs-Planungs-Hinweises spezifiziert ist.
  • Wenn der Mikro-Planungs-Vermittler 440 bei Schritt 730 bestimmt, dass die Zuvor-Dekodieren-Daten einen Warten-Planungs-Hinweis kodieren, dann bei Schritt 735 der Mikro-Planungs-Vermittler 440, ob die erste Anweisung eine neue Anweisung ist, welche noch nicht zur Auswahl in einem vorherigen Planungs-Zyklus berücksichtigt worden ist. Wenn die erste Anweisung eine neue Anweisung ist, dann wird bei Schritt 740 der Warten-Zähler für den Warp basierend auf dem w-Wert initialisiert, welcher für den Warten-Planungs-Hinweis spezifiziert ist. Der Warten-Zähler für den Warp wird jeden Planungs-Zyklus aktualisiert (dekrementiert oder inkrementiert). Die erste Anweisung wird nicht ausstellen bis nachdem zumindest w Planungs-Zyklen geschehen sind. Wenn bei Schritt 735 der Mikro-Planungs-Vermittler 440 bestimmt, dass die erste Anweisung nicht eine neue Anweisung ist, dann bestimmt bei Schritt 745 der Mikro-Planungs-Vermittler 440, ob der Warten-Zähler für den Warp abgelaufen ist, was anzeigt, dass w Planungs-Zyklen für die erste Anweisung geschehen sind (transpired). Wenn bei Schritt 745 der Warten-Zähler nicht abgelaufen ist, dann wird bei Schritt 780 eine Anweisung von einem anderen Warp ausgestellt.
  • Wenn bei Schritt 745 der Mikro-Planungs-Vermittler 440 bestimmt, dass der Warten-Zähler für den Warp abgelaufen ist, dann bestimmt bei Schritt 750 der Mikro-Planungs-Vermittler 440, ob die Boost-Option für den Warten-Planungs-Hinweis spezifiziert ist. Wenn die Boost-Option spezifiziert ist, dann aktualisiert bei Schritt 755 der Mikro-Planungs-Vermittler 440 die Priorität des Warps, um die Planungs-Priorität zu erhöhen. Bei Schritt 780 wird die erste Anweisung sobald wie möglich ausgestellt.
  • Wenn die Boost-Option nicht spezifiziert ist, dann bestimmt bei Schritt 760 der Mikro-Planungs-Vermittler 440, ob die Ergebnis bzw. Ertrag-Option (yield option) für den Warten-Planungs-Hinweis spezifiziert ist. Wenn die Ergebnis-Option nicht spezifiziert ist, wird bei Schritt 762 die erste Anweisung ausgestellt. Anderenfalls bestimmt bei Schritt 765 der Mikro-Planungs-Vermittler 440, ob der Warten-Zähler für die erste Anweisung gerade abgelaufen ist. Wenn der Warten-Zähler gerade für den Warp abgelaufen ist, dann sollte der Ergebnis-Zähler initialisiert werden. Bei Schritt 767 wird die Planungs-Priorität für den Warp aktualisiert. Bei Schritt 770 wird der Ergebnis-Zähler für den Warp basierend auf dem y-Wert initialisiert, welcher für den Warten-Planungs-Hinweis spezifiziert ist. Der Ergebnis-Zähler für den Warp wird (dekrementiert oder inkrementiert) jeden Planungs-Zyklus aktualisiert, bis y Planungs-Zyklen geschehen sind. Während die Planungs-Priorität für den Warp vermindert wird, wird der Mikro-Planungs-Vermittler 440 eine Anweisung für einen anderen Warp auswählen, welcher eine höhere Planungs-Priorität hat. Somit stellt bei Schritt 780 der Mikro-Planungs-Vermittler 440 eine Anweisung für einen anderen Warp aus.
  • Zurückkehrend auf Schritt 765 ist, wenn der Mikro-Planungs-Vermittler 440 bestimmt, dass der Warten-Zähler nicht gerade abgelaufen ist, dann der Ergebnis-Zähler schon für den Warp initialisiert worden und bei Schritt 775 bestimmt der Mikro-Planungs-Vermittler 440, ob der Ergebnis-Zähler für den Warp abgelaufen ist, was anzeigt, dass y Planungs-Zyklen für die erste Anweisung geschehen sind. Wenn bei Schritt 775 der Ergebnis-Zähler nicht abgelaufen ist, dann wird bei Schritt 780 eine Anweisung von einem anderen Warp ausgestellt. Anderenfalls wird bei Schritt 755 die Priorität des Warps auf den neutralen Wert aktualisiert.
  • Die Zuvor-Dekodieren-Daten kodieren Planungs-Hinweise zur Benutzung während der Laufzeit, um zu steuern, wann Anweisungen zur Ausführung relativ zu anderen Anweisungen für denselben Warp ausgestellt werden und um Prioritäts-Niveaus einzustellen, um zu steuern, wie der Mikro-Planungs-Vermittler 440 Anweisungen zum Ausstellen zwischen verschiedenen Warps auswählt. Die Planungs-Hinweise werden von einem Compiler bestimmt. Die Planungs-Hinweise können spezifizieren, eine Zahl von Planungs-Zyklen zu warten, bevor die Anweisung geplant wird, und können auch eine Planungs-Priorität für die Anweisung spezifizieren. Sobald der Mikro-Planungs-Vermittler 440 eine Anweisung zur Ausführung auszustellen auswählt, dekodiert eine Dekodier-Einheit vollständig die Anweisung. Dekodieren nur des Zuvor-Dekodieren-Daten-Teils der Anweisung, um das Planen der Anweisung zu steuern, ist viel effizienter als ein Dekodieren der gesamten 64-Bit-Anweisung und als ein Analysieren der Sequenz von Anweisungen für jeden Warp.
  • Eine Ausführungsform der Erfindung kann als ein Programm-Produkt zur Benutzung mit einer Computer-System implementiert sein. Das Programm oder die Programme des Programm-Produkts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können auf einer Verschiedenheit von Computer-lesbaren Speichermedien beinhaltet sein. Illustrative Computer-lesbare Speichermedien umfassen, sind jedoch nicht darauf beschränkt: (i) nicht-schreibbare Speichermedien, z. B. Nur-Lese-Speicher-Geräte innerhalb eines Computers (wie CD-ROM-Platten, welche mittels eines CD-ROM-Laufwerks lesbar sind, Flash-Speicher, ROM-Chips oder irgendein anderer Typ von Festkörper-nicht-volatilem Halbleiter-Speicher), auf welchen Informationen permanent gespeichert ist; und (ii) schreibbare Speichermedien (z. B. Floppy-Disks innerhalb eines Disketten-Laufwerks oder eines Festplatten-Laufwerks oder irgendein anderer Typ von Festkörper-Halbleiter-Speicher mit willkürlichem Zugriff), auf welchen veränderbare Informationen gespeichert ist.
  • Die Erfindung ist oben mit Bezug auf spezifische Ausführungsformen beschrieben worden. Fachleute in der Technik werden jedoch verstehen, dass verschiedene Modifikationen und Änderungen daran gemacht werden können, ohne von dem weiteren Geist und Geltungsbereich abzuweichen, wie in den angehängten Ansprüchen ausgeführt. Die vorangehende Beschreibung und die Zeichnungen sind demgemäß in einem illustrativen anstatt in einem restriktiven Sinne anzusehen.

Claims (11)

  1. Computer-implementiertes Verfahren zum Planen von Anweisungen innerhalb einer Parallel-Rechenmaschine, wobei das Verfahren aufweist: Holen von Anweisungen, welche zwei oder mehr Thread-Gruppen entsprechen, von einer Anweisungs-Zwischenspeicher-Einheit; Empfangen von Zuvor-Dekodieren-Daten, welche mit jeder der Anweisungen assoziiert sind, wobei die Zuvor-Dekodieren-Daten bestimmt werden, wenn die Anweisungen kompiliert werden; Auswählen, bei Laufzeit, eine erste Anweisung mittels einer Parallel-Verarbeitungs-Einheit zur Ausführung auszustellen basierend zumindest zum Teil auf den Zuvor-Dekodieren-Daten; Dekodieren der ersten Anweisung; und Absetzen der ersten Anweisung an die Parallel-Verarbeitungs-Einheit zur Ausführung.
  2. Verfahren gemäß Anspruch 1, wobei die Zuvor-Dekodieren-Daten einen Warten-Planungs-Hinweis kodieren, welcher eine Zahl von Planungs-Zyklen aufweist, welche vergehen, bevor die erste Anweisung zur Ausführung ausgestellt wird.
  3. Verfahren gemäß Anspruch 1, wobei die Zuvor-Dekodieren-Daten spezifizieren, dass ein Voreinstellungs-Planungs-Hinweis benutzt wird, die erste Anweisung zu planen.
  4. Verfahren gemäß Anspruch 1, wobei die Zuvor-Dekodieren-Daten einen Halten-Planungs-Hinweis kodieren, welcher eine Planungs-Einheit konfiguriert, die erste Anweisung über eine vorher ausgestellte Anweisung, welche scheiterte auszuführen und eine erneut-Ausstellen-Anweisung ist, verfügbar, ausgestellt zu werden, auszustellen auszuwählen.
  5. Verfahren gemäß Anspruch 1, wobei die Zuvor-Dekodieren-Daten einen Halten-Planungs-Hinweis kodieren, welcher eine Planungs-Einheit konfiguriert, eine vorher ausgestellte Anweisung, welche scheiterte auszuführen und welche eine erneut-Ausstellen-Anweisung ist, verfügbar, ausgestellt zu werden, über die erste Anweisung auszuwählen.
  6. Verfahren gemäß Anspruch 1, wobei die Zuvor-Dekodieren-Daten einen Paar-Planungs-Hinweis kodieren, welcher eine Planungs-Einheit konfiguriert, die erste Anweisung und eine zweite Anweisung in einem einzelnen Planungs-Zyklus auszustellen auswählt, und wobei die erste Anweisung und die zweite Anweisung mit einer ersten Thread-Gruppe der zwei oder mehr Thread-Gruppen assoziiert sind.
  7. Planungs-Einheit, aufweisend: eine Anweisung-Zwischenspeicher-Hol-Einheit, welche konfiguriert ist, um Anweisungen, welche zwei oder mehr Thread-Gruppen entsprechen, an einen ersten Puffer zu leiten und um Zuvor-Dekodieren-Daten, welche mit jeder der Anweisungen assoziiert sind, an einen zweiten Puffer zu leiten; eine Makro-Planungs-Einheit, welche mit der Anweisung-Zwischenspeicher-Hol-Einheit gekoppelt ist, und konfiguriert ist, Zuvor-Dekodieren-Daten zu empfangen, wobei die Zuvor-Dekodieren-Daten bestimmt sind, wenn die Anweisungen kompiliert sind; einen Mikro-Planungs-Vermittler, welcher mit der Makro-Planungs-Einheit und dem zweiten Puffer gekoppelt ist und konfiguriert ist, bei Laufzeit eine erste Anweisung zur Ausführung mittels einer Verarbeitungs-Einheit basierend zumindest zum Teil auf den Zuvor-Dekodieren-Daten auszuwählen; eine Dekodier-Einheit, welche mit dem ersten Puffer gekoppelt und konfiguriert ist, die erste Anweisung zu dekodieren; und eine Absetz-Einheit, welche mit der Dekodier-Einheit gekoppelt ist und konfiguriert ist, die erste Anweisung an eine Verarbeitungs-Einheit zur Ausführung abzusetzen.
  8. Planungs-Einheit gemäß Anspruch 7, wobei die Zuvor-Dekodieren-Daten einen Warten-Planungs-Hinweis kodieren, welcher eine Zahl von Planungs-Zyklen aufweist, welche vergehen, bevor die erste Anweisung zur Ausführung ausgestellt ist.
  9. Planungs-Einheit gemäß Anspruch 7, wobei die Zuvor-Dekodieren-Daten spezifizieren, dass ein Voreinstellungs-Planungs-Hinweis benutzt wird, um die erste Anweisung zu planen.
  10. Planungs-Einheit gemäß Anspruch 7, wobei die Zuvor-Dekodieren-Daten einen Halten-Planungs-Hinweis kodieren, welcher eine Planungs-Einheit konfiguriert, die erste Anweisung über eine früher ausgestellte Anweisung, welche scheiterte auszuführen und welche eine erneut-Ausstellen-Anweisung ist, verfügbar ausgestellt zu werden, auszustellen.
  11. Planungs-Einheit gemäß Anspruch 7, wobei die Zuvor-Dekodieren-Daten einen Halten-Planungs-Hinweis kodieren, welcher eine Planungs-Einheit konfiguriert, eine vorher ausgestellte Anweisung, welche auszuführen scheiterte und welche eine erneut-Ausstellen-Anweisung ist, verfügbar ausgestellt zu werden, über die erste Anweisung auszustellen auszuwählen.
DE102012222913A 2011-12-21 2012-12-12 Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten Pending DE102012222913A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/333,879 US9798548B2 (en) 2011-12-21 2011-12-21 Methods and apparatus for scheduling instructions using pre-decode data
US13/333,879 2011-12-21

Publications (1)

Publication Number Publication Date
DE102012222913A1 true DE102012222913A1 (de) 2013-06-27

Family

ID=48575843

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012222913A Pending DE102012222913A1 (de) 2011-12-21 2012-12-12 Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten

Country Status (4)

Country Link
US (1) US9798548B2 (de)
CN (1) CN103226463A (de)
DE (1) DE102012222913A1 (de)
TW (1) TWI493451B (de)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9201636B2 (en) 2013-11-21 2015-12-01 National Tsing Hua University Method for divergence analysis of pointer-based program
CN103761073A (zh) * 2014-01-08 2014-04-30 东南大学 一种面向ARMv7的基于推测的指令动态调度方法
US9626218B1 (en) 2014-03-10 2017-04-18 Altera Corporation Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US11301256B2 (en) * 2014-08-22 2022-04-12 Advanced Micro Devices, Inc. System and method for page-conscious GPU instruction
US9919212B2 (en) * 2014-12-22 2018-03-20 Gree, Inc. Server apparatus, control method for server apparatus, and program
CN105988774A (zh) * 2015-02-20 2016-10-05 上海芯豪微电子有限公司 一种多发射处理器系统和方法
KR102370733B1 (ko) * 2015-04-13 2022-03-08 에스케이하이닉스 주식회사 출력 커맨드들을 전송하는 컨트롤러 및 그것의 동작 방법
GB2540970B (en) * 2015-07-31 2018-08-15 Advanced Risc Mach Ltd Executing Groups of Instructions Atomically
CN107729127A (zh) * 2016-08-12 2018-02-23 北京小米移动软件有限公司 智能控制方法及装置
US10838871B2 (en) * 2016-11-07 2020-11-17 International Business Machines Corporation Hardware processor architecture having a hint cache
US10324726B1 (en) 2017-02-10 2019-06-18 Apple Inc. Providing instruction characteristics to graphics scheduling circuitry based on decoded instructions
GB2563587B (en) * 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
US10866806B2 (en) * 2017-11-14 2020-12-15 Nvidia Corporation Uniform register file for improved resource utilization
US11442795B2 (en) 2018-09-11 2022-09-13 Nvidia Corp. Convergence among concurrently executing threads
CN109922159B (zh) * 2019-03-27 2021-10-08 宁波大学 一种物联网设备间云端双向虚拟连接的方法
US10606603B1 (en) * 2019-04-08 2020-03-31 Ye Tao Methods and apparatus for facilitating a memory mis-speculation recovery
US11934867B2 (en) 2020-07-23 2024-03-19 Nvidia Corp. Techniques for divergent thread group execution scheduling
US20230115044A1 (en) * 2021-10-08 2023-04-13 Nvidia Corp. Software-directed divergent branch target prioritization
CN114168202B (zh) * 2021-12-21 2023-01-31 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质
US11954492B1 (en) * 2022-09-19 2024-04-09 Apple Inc. Fence enforcement techniques based on stall characteristics
US20240095065A1 (en) * 2022-09-19 2024-03-21 Apple Inc. Multi-stage Thread Scheduling

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5687339A (en) * 1995-09-14 1997-11-11 Elan Microelectronics Corp. Pre-reading and pre-decoding of instructions of a microprocessor within single cycle
US5845101A (en) * 1997-05-13 1998-12-01 Advanced Micro Devices, Inc. Prefetch buffer for storing instructions prior to placing the instructions in an instruction cache
EP0936539B1 (de) 1998-02-12 2012-10-31 Infineon Technologies AG Vorrichtung und Verfahren zum Holen von Befehlen für eine programmgesteuerte Einheit
US20020087821A1 (en) * 2000-03-08 2002-07-04 Ashley Saulsbury VLIW computer processing architecture with on-chip DRAM usable as physical memory or cache memory
GB2382422A (en) * 2001-11-26 2003-05-28 Infineon Technologies Ag Switching delay stages into and out of a pipeline to increase or decrease its effective length
US20030101336A1 (en) * 2001-11-28 2003-05-29 Sun Microsystems, Inc. Technique for associating instructions with execution events
US7363474B2 (en) 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
US20030212881A1 (en) * 2002-05-07 2003-11-13 Udo Walterscheidt Method and apparatus to enhance performance in a multi-threaded microprocessor with predication
US20040064756A1 (en) * 2002-09-26 2004-04-01 Sudarshan Kadambi Method and apparatus for improving reliability in computer processors by re-executing instructions
US7484075B2 (en) 2002-12-16 2009-01-27 International Business Machines Corporation Method and apparatus for providing fast remote register access in a clustered VLIW processor using partitioned register files
US7284117B1 (en) 2003-11-04 2007-10-16 Advanced Micro Devices, Inc. Processor that predicts floating point instruction latency based on predicted precision
US7580914B2 (en) * 2003-12-24 2009-08-25 Intel Corporation Method and apparatus to improve execution of a stored program
US20060037021A1 (en) * 2004-08-12 2006-02-16 International Business Machines Corporation System, apparatus and method of adaptively queueing processes for execution scheduling
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
US7237094B2 (en) 2004-10-14 2007-06-26 International Business Machines Corporation Instruction group formation and mechanism for SMT dispatch
US7681014B2 (en) 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7814487B2 (en) * 2005-04-26 2010-10-12 Qualcomm Incorporated System and method of executing program threads in a multi-threaded processor
US8205200B2 (en) * 2005-11-29 2012-06-19 Intel Corporation Compiler-based scheduling optimization hints for user-level threads
US7509481B2 (en) 2006-03-03 2009-03-24 Sun Microsystems, Inc. Patchable and/or programmable pre-decode
US7840786B2 (en) 2007-04-16 2010-11-23 Advanced Micro Devices, Inc. Techniques for storing instructions and related information in a memory hierarchy
US7958333B2 (en) * 2007-05-30 2011-06-07 XMOS Ltd. Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected
CN101325063B (zh) 2007-06-12 2011-02-16 建兴电子科技股份有限公司 全息储存系统中寻找定位点位置的方法
US8898437B2 (en) 2007-11-02 2014-11-25 Qualcomm Incorporated Predecode repair cache for instructions that cross an instruction cache line
US8086825B2 (en) 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US7917735B2 (en) * 2008-01-23 2011-03-29 Arm Limited Data processing apparatus and method for pre-decoding instructions
US8082426B2 (en) 2008-11-06 2011-12-20 Via Technologies, Inc. Support of a plurality of graphic processing units
US8799582B2 (en) 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
GB2466984B (en) 2009-01-16 2011-07-27 Imagination Tech Ltd Multi-threaded data processing system
US8533435B2 (en) 2009-09-24 2013-09-10 Nvidia Corporation Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict
US8522000B2 (en) 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit

Also Published As

Publication number Publication date
TW201342212A (zh) 2013-10-16
CN103226463A (zh) 2013-07-31
US20130166881A1 (en) 2013-06-27
TWI493451B (zh) 2015-07-21
US9798548B2 (en) 2017-10-24

Similar Documents

Publication Publication Date Title
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren
DE102013208554B4 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102012220267B4 (de) Rechenarbeitsverteilungs - Referenzzähler
DE102012212639A1 (de) Temporäre SIMT-Ausführungs-Optimierung
DE102012220029A1 (de) Spekulative Ausführung und Zurücksetzen
DE102013209350B4 (de) Ressource-Management-Subsystem, welches Fairness und Ordnung einhält
DE102013200991A1 (de) Automatisches abhängige-Aufgabe-Anstoßen
DE102012222558B4 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102012221504B4 (de) Mehrniveau-Anweisung-Zwischenspeicher-Zuvor-Holen
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013201178A1 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102013202495A1 (de) Verfahren zur Durchführung von interaktivem Debugging auf nicht unterbrechbaren Graphikverarbeitungseinheiten
DE102013020966B4 (de) Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten
DE102013016871A1 (de) Technik zur Steigerung der Effizienz in mehrsträngigen Verarbeitungseinrichtngen
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE102013208421A1 (de) Sharing einer Grafikverarbeitungseinheit unter vielen Anwendungen
DE102013114351A1 (de) System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren
DE102012222932A1 (de) Gestaltetes Register-Datei-Lesen
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware

Legal Events

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

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

R016 Response to examination communication