DE102012220029A1 - Spekulative Ausführung und Zurücksetzen - Google Patents

Spekulative Ausführung und Zurücksetzen Download PDF

Info

Publication number
DE102012220029A1
DE102012220029A1 DE102012220029A DE102012220029A DE102012220029A1 DE 102012220029 A1 DE102012220029 A1 DE 102012220029A1 DE 102012220029 A DE102012220029 A DE 102012220029A DE 102012220029 A DE102012220029 A DE 102012220029A DE 102012220029 A1 DE102012220029 A1 DE 102012220029A1
Authority
DE
Germany
Prior art keywords
instructions
instruction
thread group
thread
reset
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
DE102012220029A
Other languages
English (en)
Inventor
Jack Hilaire Choquette
Olivier Giroux
Robert J. Stoll
Xiaogang Qiu
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 DE102012220029A1 publication Critical patent/DE102012220029A1/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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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 or 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

Eine Ausführungsform der vorliegenden Erfindung führt eine Technik zum spekulativen Ausstellen von Anweisungen aus, um einer Verarbeitungs-Pipeline zu erlauben, fortzufahren, einige Anweisungen während eines Rücksetzens von anderen Anweisungen zu verarbeiten. Eine Planer-Schaltung stellt Anweisungen zur Ausführung unter der Annahme aus, dass einige Zyklen später, wenn die Anweisungen Mehrprozess-gestützte Ausführungs-Einheiten erreichen, Abhängigkeiten zwischen den Anweisungen aufgelöst sein werden, Ressourcen verfügbar sein werden, Operanden-Daten verfügbar sein werden und andere Bedingungen eine Ausführung der Anweisungen nicht verhindern werden. Wenn eine Zurücksetzen-Bedingung bei dem Ausführungspunkt für eine Anweisung für eine bestimmte Flag-Gruppe existiert, wird die Anweisung nicht an die Mehrprozess-gestützten Ausführungs-Einheiten abgesetzt. Jedoch werden andere Anweisungen, welche mittels der Planer-Schaltung zur Anweisung mittels verschiedener Thread-Gruppen ausgestellt sind und für die eine Zurücksetzen-Bedingung nicht existiert, mittels der Mehrprozess-gestützten Ausführungs-Einheiten ausgeführt. Die Anweisung, welche die Zurücksetzen-Bedingung erleidet, wird wieder ausgestellt, nachdem die Zurücksetzen-Bedingung nicht länger existiert.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft im Allgemeinen Ausführung von Rechen-Aufgaben und insbesondere spekulative Ausführung von Anweisungen und Zurücksetzen (rollback).
  • Beschreibung der betreffenden Technik
  • Konventionelle in einer Pipeline angeordnete (pipelined) Prozessoren haben eine spekulative Ausführung von bedingten Verzweigungs-Anweisungen dadurch durchgeführt, dass vorhergesagt wurde, welche Seite der bedingten Verzweigung ausgeführt wird. Wenn die Vorhersage nicht korrekt ist, werden die Anweisungen zurückgesetzt (rolled back), so dass die andere Seite der bedingten Verzweigung ausgeführt werden kann. Wenn die Anweisungen zurückgesetzt werden, sind Pipeline-Stufen der Verarbeitungs-Pipeline untätig, bis die Anweisungen für die andere Seite der bedingten Verzweigung diese Pipeline-Stufen erreichen.
  • Demgemäß ist, was in der Technik gebraucht wird, ein System und ein Verfahren zum spekulativen Absetzen oder Ausstellen (issuing) von Anweisungen, was der Verarbeitungs-Pipeline erlaubt, damit fortzufahren, einige Anweisungen während eines Rücksetzens (rollback) von anderen Anweisungen zu verarbeiten. Wichtiger Weise sollte die spekulative Ausführung nicht auf bedingte Verzweigungs-Anweisungen begrenzt sein.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Ein System und ein Verfahren zum spekulativen Absetzen oder Ausstellen (issuing) von Anweisungen erlaubt einer Verarbeitungs-Pipeline einige Anweisungen zu verarbeiten fortzufahren während eines Rücksetzens (rollback) von anderen Anweisungen. Eine Planer-Schaltung (scheduler circuit) setzt Anweisungen zur Ausführung mittels Mehrprozess-gestützter Ausführungseinheiten (multithreaded execution units) unter der Annahme ab, dass einige Zyklen später, wenn die Anweisungen die Mehrprozess-gestützten Ausführungseinheiten erreichen, Abhängigkeiten zwischen den Anweisungen aufgelöst werden, Ressourcen verfügbar sein werden, Operanden-Daten verfügbar sein werden und andere Bedingungen eine Ausführung der Anweisungen nicht verhindern werden. Wenn eine Zurücksetzen-Bedingung (rollback condition) bei dem Punkt einer Ausführung für eine Anweisung für eine bestimmte Thread-Gruppe existiert, dann wird die Anweisung nicht an die Mehrprozess-gestützten Ausführungseinheiten ausgeliefert (dispatched). Jedoch werden andere Anweisungen, welche mittels der Planer-Schaltung zur Ausführung mittels verschiedener Thread-Gruppen ausgestellt sind und für welche eine Zurücksetzen-Bedingung nicht existiert, mittels der Mehrprozess-gestützten Ausführungseinheiten ausgeführt. Die Anweisung, welche die Zurücksetzen-Bedingung erlitten hat, wird wieder ausgestellt (reissued), nachdem die Zurücksetzen-Bedingung nicht länger existiert.
  • Verschiedene Ausführungsformen eines Verfahrens der Erfindung zum Durchführen eines Zurücksetzens von spekulativ ausgestellten (issued) Anweisungen umfassen ein Ausstellen eines ersten Satzes von Anweisungen für eine erste Thread-Gruppe und Ausstellen eines zweiten Satzes von Anweisungen für eine zweite Thread-Gruppe. Eine Zurücksetzen-Bedingung wird für zumindest einen Thread in der ersten Thread-Gruppe während einer Vor-Ausführungsverarbeitung einer Anweisung in dem ersten Satz von Anweisungen detektiert und Ausstellen von zusätzlichen Anweisungen für die erste Thread-Gruppe wird gestoppt. Während des Flugs-(In-Flight)-Anweisungen, welche ausgestellt worden sind und nicht ausgeführt worden sind in dem ersten Satz von Anweisungen, werden verworfen und der zweite Satz von Anweisungen für die zweite Thread-Gruppe wird ausgeführt.
  • Verschiedene Ausführungsformen der Erfindung umfassen ein System zum Durchführen von Zurücksetzen (rollback) von spekulativ ausgestellten oder abgesetzten (issued) Anweisungen. Das System umfasst einen Speicher, eine Planer-Einheit (scheduler unit), eine Absetz-Einheit oder Ausliefer-Einheit (dispatch unit), und mehrere Ausführungseinheiten. Der Speicher ist konfiguriert, einen ersten Satz von Anweisungen für eine erste Thread-Gruppe und einen zweiten Satz von Anweisungen für eine zweite Thread-Gruppe zu speichern. Die Planer-Einheit ist konfiguriert, den ersten Satz von Anweisungen für die erste Thread-Gruppe auszustellen, den zweiten Satz von Anweisungen für die zweite Thread-Gruppe auszustellen, und ein Ausstellen von zusätzlichen Anweisungen für die erste Thread-Gruppe zu stoppen, wenn eine Zurücksetzen-Bedingung detektiert ist. Die Absetz-Einheit ist konfiguriert, für zumindest einen Thread in der ersten Thread-Gruppe während einer Vor-Ausführungs-Verarbeitung einer Anweisung in dem ersten Satz von Anweisungen die Zurücksetzen-Bedingung zu detektieren und In-Flug-Anweisungen zu verwerfen (discard), welche ausgestellt worden sind und nicht in dem ersten Satz von Anweisungen ausgeführt worden sind. Die mehreren Ausführungs-Einheiten sind konfiguriert, den zweiten Satz von Anweisungen für die zweite Thread-Gruppe auszuführen.
  • Wichtiger Weise ist das spekulative Ausstellen von Anweisungen nicht auf bedingte Verzweigungs-Anweisungen begrenzt. Die Planer-Schaltung dekodiert nicht die Anweisungen und führt daher keine prädiktiven Operationen durch. Wenn irgendeine Anweisung für eine bestimmte Thread-Gruppe eine Zurücksetzen-Bedingung erleidet (incurs), wird, so spät wie bei dem Ausführungspunkt, die Anweisung nicht ausgeführt und Zurücksetzen wird für die Anweisung durchgeführt und andere Anweisungen, welche bereits für die bestimmte Thread-Gruppe ausgestellt sind.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • So dass die Weise, in welcher die oben zitierten Merkmale der vorliegenden Erfindung 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 Erfindung illustrieren und dass sie daher nicht aufzufassen sind, ihren Geltungsbereich zu begrenzen, denn die Erfindung 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-Subsystems für das Computer-System der 1, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3A ist ein Blockdiagramm des Frontends von 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3B ist ein Blockdiagramm eines Allgemein-Verarbeitungs-Clusters innerhalb einer der Parallel-Verarbeitungs-Einheiten von 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3C ist ein Blockdiagramm eines Teils des Streaming-Mehrfach-Prozessors (SM) von 3B gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4A illustriert ein spekulative-Anweisung-Ausstellung- und Anweisung-Zurücksetzen-Verfahren gemäß einer Ausführungsform der vorliegenden Erfindung; und
  • 4B illustriert ein spekulative-Anweisung-Ausführung- und teilweise-Anweisung-Zurücksetzen-Verfahren gemäß einer Ausführungsform der Erfindung.
  • 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.
  • Systemüberblick
  • 1 ist ein Blockdiagramm, welches ein Computersystem 100 illustriert, welches konfiguriert ist, einen oder mehrere Aspekte der vorliegenden Erfindung 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 Pfad 106 und Speicherbrücke 105 weiter. Ein Parallel-Verarbeitungs-Subsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen anderen Kommunikationspfad 113 (z. B. einen 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 CRT- oder LCD-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) einschließlich USB- oder andere Port-Verbindungen, CD-Laufwerke, DVD-Laufwerke, Filmaufnahmegeräte, und dergleichen, können auch mit der I/O-Brücke 107 verbunden sein. Kommunikationspfade, welche die verschiedenen Komponenten in 1 wechselseitig verbinden, können unter Benutzung irgendwelcher geeigneten Protokolle implementiert sein, wie etwa PCI (Peripheral Component Interconnect), 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 integriert sein, wie etwa der Speicherbrücke 105, CPU 102 und I/O-Brücke 107, 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. 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 Erfindung. 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 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 Aufgaben durchzuführen, welche das Erzeugen von Pixeldaten von Grafik-Daten, welche mittels CPU 102 und/oder Systemspeicher 104 über Speicherbrücke 105 und 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 sein eigenes dediziertes Parallel-Verarbeitungs-Speichergerät(e) haben oder braucht nicht dedizierte Parallel-Verarbeitungs-Speichergerät(e) zu haben. Eine oder mehrere PPUs 202 können Daten an das Anzeigegeräte 110 ausgeben oder jede PPU 202 kann Daten an eines oder mehrere Anzeigegeräte 110 ausgeben.
  • Im Betrieb ist CPU 102 der Master-Prozessor von Computer-System 100, welcher Operationen von anderen System-Komponenten steuert und koordiniert. Insbesondere stellt CPU 102 Befehle aus, welche die Operation von PPUs 202 steuern. In einigen Ausführungsformen schreibt CPU 102 einen Strom von Befehlen für jede PPU 202 auf eine Datenstruktur (nicht explizit in weder 1 noch 2 gezeigt), welche in dem System-Speicher 104, Parallel-Verarbeitungs-Speicher 204 oder irgendeiner anderen Speicher-Stelle lokalisiert sein kann, welche sowohl für CPU 102 als auch für PPU 202 zugreifbar ist. Ein Zeiger (pointer) auf jede Datenstruktur wird auf einen Schiebepuffer (push buffer) geschrieben, um Verarbeitung des Stroms von Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlströme von einem oder mehreren Schiebepuffern und führt dann Befehle asynchron relativ zu dem Betrieb von CPU 102 aus. Ausführungs-Prioritäten können für jeden Schiebepuffer spezifiziert werden, um Planen der verschiedenen Schiebepuffer zu steuern.
  • Mit Bezug nun zurück auf 2B 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-Subsystem 112 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 die Arbeit, welche mittels des Push-Puffers spezifiziert 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. Jedes 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, variieren.
  • GPCs 208 empfangen Verarbeitungs-Aufgaben, welche auszuführen sind, von einer Arbeits-Verteilungs-Einheit innerhalb einer Aufgabe-/Arbeit-Einheit 207. Die Arbeits-Verteilungs-Einheit empfängt Zeiger auf Rechen-Verarbeitungs-Aufgaben (Aufgabenzeiger), welche als Queue-Metadaten (QMD) kodiert sind und im Speicher gespeichert sind. Die Aufgabenzeiger auf QMDs sind in dem Befehls-Strom umfasst, welcher in einem Schiebepuffer gespeichert ist und mittels der Frontend-Einheit 212 von der Host-Schnittstelle 206 empfangen ist. Verarbeitungs-Aufgaben, welche als QMDs kodiert sein können, umfassen Indizes von zu verarbeitenden Daten, sowie Status- oder Zustands-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 die GPCs 208 in einem gültigen Zustand konfiguriert sind, bevor die Verarbeitung, welche mittels jeder der QMDs spezifiziert ist, initiiert ist. Eine Priorität kann für jede QMD spezifiziert sein, welche benutzt ist, um Ausführung der Verarbeitungs-Aufgaben zu planen (schedule).
  • 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 DRAM 220. In anderen Ausführungsformen muss die Anzahl von Partitions-Einheiten 215 nicht gleich der Nummer von Speicher-Geräten sein. 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-Karten (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.
  • Irgendeines 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 irgendein 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 zu Speicher-Schnittstelle 214, um mit I/O-Einheit 205 zu kommunizieren, sowie eine Verbindung zu lokalem Parallel-Verarbeitungs-Speicher 204, um dadurch den Verarbeitungs-Kernen innerhalb der verschiedenen GPCs 208 zu ermöglichen, mit System-Speicher 104 oder einem anderen Speicher zu kommunizieren, welcher nicht lokal zu der PPU 202 ist. In der in 2 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 exklusiv oder fast exklusiv System-Speicher 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-Gleichzeitige-Aufgabe-Planung
  • Mehrfach-Verarbeitungs-Aufgaben können gleichzeitig auf den GPCs 208 ausgeführt werden und eine Verarbeitungs-Aufgabe kann eine oder mehrere „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 der 2, gemäß einer Ausführungsform der vorliegenden Erfindung. 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 basierend auf Ausführungs-Prioritäts-Niveaus zu planen bzw. zeitlich zu planen sind (scheduled). Für jedes Prioritäts-Niveau speichert die Aufgabe-Management-Einheit 300 eine Liste von Aufgabezeigern (task pointers) auf die QMDs 322 entsprechend den Aufgaben in der Planer-Tabelle 321. Die QMDs 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, was der Aufgabe-Management-Einheit 300 ermöglicht, Aufgaben basierend auf Prioritäts-Information oder Benutzung anderer Techniken zu planen.
  • Die Arbeit-Verteilungs-Einheit 340 umfasst eine Aufgabe-Tabelle 345 mit Fächern oder Zellen (slots), wobei jedes von der QMD 322 für eine Aufgabe besetzt sein kann, welche ausgeführt wird. Die Aufgabe-Management-Einheit 300 kann Aufgaben zur Ausführung planen, wenn es in der Aufgabe-Tabelle 345 ein freies Fach gibt. Wenn es kein freies Fach gibt, kann eine höhere-Priorität-Aufgabe, welche kein Fach besetzt, eine niedrigere-Priorität-Aufgabe, welche ein Fach besetzt, verdrängen oder ausweisen (evict). Wenn eine Aufgabe verdrängt ist oder ausgewiesen ist (evicted), wird die Aufgabe gestoppt und wenn die Ausführung der Aufgabe nicht vollständig ist, wird die Aufgabe an eine verkettete Liste in der Planer-Tabelle 321 hinzugefügt. Wenn eine Kind-Verarbeitungs-Aufgabe erzeugt ist, wird die Kind-Aufgabe an die verkettete Liste in der Planer-Tabelle 321 hinzugefügt. Eine Aufgabe wird von einem Fach entfernt, wenn die Aufgabe ausgewiesen ist (evicted).
  • 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 SIMT-Ausführung verschiedenen Threads, leichter divergenten Ausführungspfaden durch ein gegebenes Thread-Programm zu folgen. 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 jeder 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 (gezeigt als Exec-Einheiten 302 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 eine „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 SM 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 (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 zwischengespeichert 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 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 ein 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, Parallel-Verarbeitungs-Speicher 204 oder System-Speicher 104 wie benötigt geholt. Jeder SM 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. SMs 310 oder Textur-Einheiten 315, preROPs 325, können innerhalb eines GPC 208 umfasst sein kann. Während nur ein GPC 208 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.
  • 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 seiner Ausführung zugreifbar ist. Der Thread-ID, welcher als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert werden kann, steuert verschiedene Aspekte des Verarbeitungs-Verhaltens des Threads. Zum Beispiel kann ein 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.
  • Spekulatives Anweisung-Ausstellen und -Zurücksetzen
  • 3C ist ein Blockdiagramm des SM 310 von 3B gemäß einer Ausführungsform der vorliegenden Erfindung. Der SM 310 umfasst einen Anweisungs-L1-Cache 370, welcher konfiguriert ist, Anweisungen von Speicher über L1.5-Cache 335 zu empfangen. Eine Warp-Planer- und Anweisungs-Einheit 312 empfängt Anweisungen von dem Anweisungs-L1-Cache 370 und stellt Anweisungen an die Anweisungs-Pipeline 324 aus. Der Anweisung-Ausstellungs-Prozess ist spekulativ, weil die Warp-Planer- und -Anweisungs-Einheit 312 nicht konfiguriert ist, irgendein Dekodieren der Anweisungen durchzuführen. Daher werden die Anweisungen spekulativ ausgestellt ohne irgendetwas über die Anweisungen zu bestimmen, z. B. den Anweisungs-Typ, Anzahl von Quellen- oder Ziel-Operationen, und dergleichen.
  • Die Anweisungs-Pipeline 324 führt Vor-Ausführungs-Anweisungs-Operationen durch, wie etwa Anweisungs-Dekodierung und Daten-Verifikation. Die Anweisungs-Pipeline 324 sammelt Operanden für die Anweisungen, greift auf lokale Registerdatei 304 zu, auf Speicher und Cache-Zwischenverbindung (interconnect) 380, auf gemeinsamen Speicher 306, und L1-Cache 320 gemäß den Anweisungen, um Operanden zu lesen und zu schreiben. Während der Vor-Ausführungs-Anweisungs-Operationen kann die Anweisungs-Pipeline 324 bestimmen, dass eine Zurücksetzen-Bedingung (rollback condition) aufgetreten ist. Die Anweisungs-Pipeline 324 zeigt an, ob eine Zurücksetzen-Bedingung eingetreten ist, indem eine Zurücksetzen-Flagge gesetzt wird, und stellt einen Zurücksetzen-Code bereit, welcher den Grund der Zurücksetzen-Bedingung identifiziert. Die Anweisungs-Pipeline 324 gibt die verarbeiteten Anweisungen, die Zurücksetzen-Flagge und den Zurücksetzen-Code an die Absetz-Einheit 326 aus.
  • Die Absetz-Einheit 326 hält eine Ressource-Anzeigetafel (recource scoreboard) und Status-Information für die Threads und Thread-Gruppen, welche in den N exec-(Ausführungs- oder Verarbeitungs-)-Einheiten 302 ausführen. Die Absetz-Einheit 326 empfängt die verarbeiteten Anweisungen, die Zurücksetzen-Flagge und Zurücksetzen-Code von der Anweisungs-Pipeline 324 und, wenn eine Zurücksetzen-Bedingung noch nicht mittels der Anweisungs-Pipeline 324 identifiziert worden ist, kann die Absetz-Einheit 326 bestimmen, dass eine Zurücksetzen-Bedingung erfolgt ist oder eingetreten ist basierend auf der Ressource-Anzeigetafel und der Status-Information. Der Zurücksetzen-Status umfasst die Adresse der Anweisungen, welche zu dem Zurücksetzen führte. Wenn eine Zurücksetzen-Bedingung auftritt, gibt die Absetz-Einheit 326 die Zurücksetzen-Flagge und den Zurücksetzen-Code an die Warp-Planer- und Anweisungs-Einheit 312 aus. Anderenfalls setzt die Absetz-Einheit 326 die verarbeiteten Anweisungen zur Ausführung mittels der exec-Einheiten 302 ab. In einer Ausführungsform zeigt, wenn mehrere Zurücksetzen-Bedingungen auftreten, die Zurücksetzen-Bedingung, welche an den Planer 312 berichtet ist, an, dass zwei oder mehr Zurücksetzen-Bedingungen aufgetreten sind. In einer anderen Ausführungsform werden die Prioritäts-Niveaus für die verschiedenen Zurücksetzen-Bedingungen spezifiziert und die Zurücksetzen-Bedingung, welche die höchste Priorität hat, wird an den Planer 312 berichtet.
  • Das Zurücksetzen (rollback) kann benutzt werden, um verschiedene Fehlerbedingungen zu handhaben, während auch ein spekulatives Ausstellen von Anweisungen ermöglicht ist. Wenn eine Zurücksetzen-Bedingung identifiziert ist, sollten alle In-Flug-Anweisungen (all in-flights instructions) für die Thread-Gruppe, welche das Zurücksetzen initiierten, ungültig gemacht werden. In-Flug-Anweisungen umfassen irgendwelche Anweisungen für die Thread-Gruppe, welche ausgestellt worden sind aber noch nicht abgesetzt (überwiesen oder übergeben) zur Ausführung mittels der exec-Einheiten 302 worden sind. In einer ersten Phase der Zurücksetzen-Operation stoppt ein Ausstellen von Anweisungen für die Thread-Gruppe und ein Holen von neuen Anweisungen für die Thread-Gruppe stoppt auch. Wenn In-Flug-Anweisungen für die Thread-Gruppe die Absetz-Einheit 326 erreichen, werden die In-Flug-Anweisungen verworfen. In einer alternativen Ausführungsform werden die In-Flug-Anweisungen mittels der Warp-Planer- und Anweisungs-Einheit 312, der Anweisungs-Pipeline 324 und der Absetz-Einheit 326 verworfen, so dass In-Flug-Anweisungen nicht zu der Absetz-Einheit 326 durchgereicht oder durchpassiert werden. Sobald die Zurücksetzen-Bedingung entfernt oder korrigiert worden ist, beginnt die zweite Phase der Zurücksetzen-Operation damit, dass die Warp-Planer- und Anweisungs-Einheit 312 den Programmzähler für die Thread-Gruppe aktualisiert. Die Warp-Planer- und Anweisungs-Einheit 312 holt dann die zurückgesetzten Anweisungen (rolled back instructions) von dem Anweisungs-L1-Cache 370, wobei bei dem Programmzähler gestartet wird, und stellt die zurückgesetzten Anweisungen aus.
  • SM 310 stellt einen Auf-Chip (on-chip) (internen) Daten-Speicher mit verschiedenen Zugriffs-Niveaus bereit. Spezielle Register (nicht gezeigt) sind lesbar aber nicht mittels Absetz-Einheit 326 schreibbar und werden benutzt, um Parameter zu speichern, welche die „Position” jedes CTA-Threads definieren. In einer Ausführungsform umfassen spezielle Register ein Register pro CTA-Thread (oder pro exec-Einheit 302 innerhalb SM 310), welches eine Thread-ID speichert; jedes Thread-ID-Register ist nur mittels einer entsprechenden der exec-Einheit 302 zugreifbar. Spezielle Register können auch zusätzliche Register umfassen, welche mittels aller Threads in demselben Gitter oder derselben Queue lesbar sind, welche einen CTA-Identifikator speichern, die CTA-Dimensionen, die Dimensionen des Gitters (grid), zu welchem das CTA gehört (oder Queue-Position, wenn eine Queue), und einen Identifikator eines Gitters oder Queen, zu welchem das CTA gehört. CTAs, die zu einem Gitter gehören, haben implizite x, y, z Parameter, welche die Position des jeweiligen CTA innerhalb des Gitters anzeigen. Spezielle Register werden während einer Initialisierung in Antwort auf Befehle geschrieben, welche über das Frontend 212 von dem Gerätetreiber 103 empfangen sind und welche sich während der CTA-Ausführung nicht ändern. Das Frontend 212 plant jede Verarbeitungsaufgabe zur Ausführung als entweder ein Gitter oder eine Queue. Jedes CTA ist mit einem spezifischen Gitter oder Queue für gleichzeitige Ausführung von einer oder mehreren Aufgaben assoziiert. Zusätzlich kann ein 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 CTA-Threads (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 eines CTA zu beginnen, welches 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 sie 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 zugewiesen und entsprechende Einträge in verschiedenen Spuren können mit Daten für verschiedene Threads befüllt 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 kann ein uniformer L1-Cache innerhalb von SM 310 umfasst sein, um uniforme und konstante Werte für jede Spur der N exec-Einheiten zu speichern.
  • Der gemeinsame Speicher 306 ist für alle Threads innerhalb eines einzelnen CTA zugreifbar, irgendeine Stelle in dem gemeinsamen Speicher 306 ist 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 zwischengespeichert 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 Gitter-ID zu speichern, sowie CTA- und Gitter-Dimensionen oder Queue-Position, wobei Teile der speziellen Register implementiert sind. Der SM 310 kann auch einen unifizierte-Adress-Abbildungs-Einheit 352 umfassen, 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 zuzugreifen, 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-Anwendung-globale Daten zu cachen bzw. zwischenzuspeichern. In einigen Ausführungsformen können die Pro-CTA-gemeinsamen Daten in den L1-Cache 320 zwischengespeichert werden. Die Anweisungs-Pipeline 324 ist mit dem gemeinsamen Speicher (shared memory) 306 und dem L1-Cache 320 über eine Speicher- und Zwischenspeicher-Zwischenverbindung 380 gekoppelt. Die Anweisungs-Pipeline 324 ist konfiguriert, eine Verschiedenheit von Zurücksetzen-Bedingungen zu detektieren, einschließlich Operanden, welche nicht verfügbar sind entweder aufgrund eines Cache-Verfehlens oder weil ein Operand noch nicht gespeichert worden ist. Wenn z. B. eine Konstante nicht in einem Konstante-Cache verfügbar ist, d. h. ein Cache-Verfehlen auftritt, zeigt die Anweisungs-Pipeline 324 an, dass eine Zurücksetzen-Bedingung existiert. Ein Compiler organisiert typischerweise die Anweisungen so, dass abhängige Anweisungen ohne eine Verzögerung dadurch ausgeführt werden, dass sichergestellt ist, dass irgendwelche Operanden, welche von den abhängigen Anweisungen benötigt werden, berechnet werden (wie benötigt) und mittels vorheriger Anweisungen in derselben oder einer verschiedenen oder anderen Thread-Gruppe gespeichert werden. Eine Zurücksetzen-Bedingung kann jedoch dazu führen, dass Anweisungen für eine oder mehrere Thread-Gruppen verzögert werden. Folglich kann die Anweisungs-Pipeline 324 konfiguriert sein, zu bestimmen, dass eine Zurücksetzen-Bedingung existiert, wenn ein Quell- oder Ziel-Operand nicht im Speicher verfügbar ist und für eine abhängige Anweisung erfordert ist.
  • Die Anweisungs-Pipeline 324 kann auch konfiguriert sein, ein ungültiges Super-Skalar-Paar zu detektieren, wenn eine Anweisung zwei Operationen spezifiziert, welche nicht parallel durchgeführt werden können. Wenn ein ungültiges Super-Skalar-Paar detektiert ist, existiert eine Zurücksetzen-Bedingung und die Warp-Planer- und Anweisungs-Einheit 312 wird jede Operation als eine separate Anweisung ausstellen, d. h. die ursprüngliche Anweisung wird serialisiert werden. Die Anweisungs-Pipeline 324 kann auch konfiguriert sein, zu detektieren, wenn ein Quell-Operand-Wert korrumpiert ist dadurch, dass ein Fehlerkorrektur-Code (error-correcting code) (ECC) benutzt wird. In einer Ausführungsform ist die Anweisungs-Pipeline 324 konfiguriert, den Quell-Operand-Wert unter Benutzung des ECC zu korrigieren. In anderen Ausführungsformen zeigt die Anweisungs-Pipeline 324 an, dass eine Zurücksetzen-Bedingung existiert, indem die Zurücksetzen-Flagge und der Zurücksetzen-Code dementsprechend gesetzt werden.
  • Die Absetz-Einheit 326 ist konfiguriert, eine Verschiedenheit von Zurücksetzen-Bedingungen zu detektieren, einschließlich Anzeigetafel-Verriegelungen (scoreboard interlocks) für Anweisungen aufgrund von Ressourcen-Disput (resource contention) und aufgrund einer Anweisung, welche mittels einer Synchronisierungs-Barriere blockiert ist, welche benutzt wird, um verschiedene Thread-Gruppen zu synchronisieren. Die Synchronisierungs-Barriere braucht nicht in der Lage sein, vervollständigt zu werden, bis Anweisungen, welche noch nicht ausgestellt worden sind, ausgeführt werden. Daher ist es wichtig, diesen nicht ausgestellten Anweisungen zu erlauben, auszuführen, wenn benötigt, was ein Umgehen der Anweisung beinhaltet, welcher die Zurücksetzen-Bedingungen begegnete.
  • Wenn ein Eintrag in der Anzeigetafel oder zum Speichern der Statusinformation für einen Thread oder eine Thread-Gruppe nicht verfügbar ist, kann die Absetz-Einheit 326 auch bestimmen, dass eine Zurücksetzen-Bedingung existiert. Wenn zusätzlich die Anzeigetafel anzeigt, dass Speicher- oder Verarbeitungs-Ressource-Disput zwischen einer Anweisung, welche nicht abgesetzt worden ist, und einer Anweisung existiert, welche geradeaus führt, zeigt die Absetz-Einheit 326 dadurch an, dass eine Zurücksetzen-Bedingung existiert, dass die Zurücksetzen-Flagge und der Zurücksetzen-Code dementsprechend gesetzt werden. Der Compiler kann konfiguriert sein, die Anweisungen für jede Thread-Gruppe unter der Annahme zu organisieren, dass vorbestimmte Wartezeiten (latencies) für einige Operationen vorliegen. Wenn die vorbestimmten Wartezeiten aufgrund von einer Vielzahl von Umständen überschritten werden, z. B. Cache-Verfehlen, Zurücksetzen-Operationen, bestimmt die Absetz-Einheit 326, dass eine Zurücksetzen-Bedingung existiert basierend auf den Inhalten der Anzeigetafel (scoreboard contents). Anstatt die einlaufenden oder hereinkommenden verarbeiteten Anweisungen anzuhalten (stall), während darauf gewartet wird, dass sich der Umstand auflöst, bestimmt die Absetz-Einheit 326, dass eine Rücksetzen-Bedingung existiert, und die hereinkommenden verarbeiteten Anweisungen werden ohne ein Anhalten gehandhabt.
  • Weil die Warp-Planer- und Anweisungs-Einheit 312 Anweisungen nicht dekodiert, bevor die Anweisungen an die Anweisungs-Pipeline 324 ausgestellt werden, werden die Anweisungen unter der Annahme ausgestellt, dass Verzweigungen nicht genommen werden, d. h. Anweisungen für den Durch-Fall-Pfad („Fall-Through”-path) durch das Programm werden spekulativ ausgestellt. Wenn der Fall-Through-Pfad nicht genommen wird, existiert eine Zurücksetzen-Bedingung. Wenn immer jedoch ein Fall-Through-Pfad für eine Verzweigungs- oder Sprung-Anweisung gültig ist, d. h. die Thread-Gruppe muss die Anweisungen in dem Fall-Through-Pfad zu einer Zeit ausführen, dann tritt kein Zurücksetzen ein, bis nachdem die Anweisungen in dem Fall-Through-Pfad ausgeführt sind. Mit anderen Worten wird das Zurücksetzen verzögert bzw. ausgesetzt (deferred) und Priorität wird den Fall-Through-Pfad gegeben. Die Absetz-Einheit 326 setzt das Zurücksetzen dadurch aus, dass ein Divergenz-Token auf den Ausführungsstapel für irgendeinen Thread in der Thread-Gruppe geschoben wird (pushing), welcher nicht den Fall-Through-Pfad nimmt und die Verzweigungs- oder Sprung-Anweisung ausführen wird. Das Divergenz-Token umfasst den Programmzähler für die Verzweigungs- oder Sprung-Anweisung und eine aktive Maske, welche die Threads in der Thread-Gruppe anzeigt, welche den Verzweigungs- oder Sprung-Pfad ausführen werden.
  • Die aktive Maske für jede Pfad-Gruppe, welche ausführt, ist von der Absetz-Einheit 326 gehalten und ist mittels der Warp-Planer- und Anweisungs-Einheit 312 mit jeder ausgestellten Anweisung ausgegeben. Die aktive Maske ist initialisiert, wenn eine Thread-Gruppe Ausführungen einer Rechen-Aufgabe beginnt und wenn ein Divergenz-Token aufgeworfen oder abgenommen wird (popped). Die Absetz-Einheit 326 kann konfiguriert sein, um Verzweigungs-Operationen aufzulösen zusätzlich zum Aufschieben und Entnehmen (pushing and popping) von Einträgen von dem Ausführungsstapel.
  • In einer Ausführungsform ist eine Ausführung der Durch-Fall-Pfade (fall-through-paths) optimiert, um ein Zurücksetzen zu vermeiden, um den Nicht-Durch-Fall-Pfad für bestimmte Umstände zu nehmen. Wenn z. B. die Nicht-Durch-Fall-Pfad-Anweisung eine „Entnahme”(popper)-Anweisung ist, welche den Thread veranlasst, welcher den Nicht-Durch-Fall-Pfad ausführt, Ausführung bei derselben Anweisung wieder aufzunehmen, wie die Threads, welche den Durch-Fall-Pfad nahmen (folgend einer Ausführung des Durch-Fall-Pfades), dann tritt kein Zurücksetzen auf. Ein Divergenz-Token wird nicht auf den Ausführungsstapel aufgeschoben (pushed), wenn die Verzweigungs- oder Sprung-Anweisung detektiert ist, welche die Zurücksetzen-Bedingung auslöste. Beispiele von „Entnahme”-(„popper”)-Anweisungen umfassen Exit, Return, Break, Continue, Longjump und eine Anweisung mit einer .S-Option, welche anzeigt, dass alle sich der aktiven Threads für die Thread-Gruppe synchronisieren müssen, bevor die Ausführung weitergeht. Im Gegensatz dazu führen unbedingte Verzweigungs-Anweisungen einschließlich eines relativen Aufrufs (call-relative) (CAL), eines absoluten Aufrufs (call absolute) (JCAL), Unterbrechungspunkt (breakpoint) (BPT) oder Unterbrechung, Rückkehr-von-Falle (return-from-trap) (RTT) oder Rückkehren von Unterbrechung (return from interrupt), Verzweigungs-indirekt (BRX), und Sprung-indirekt (jump indirect) (JMX) zu einer Rücksetzen-Bedingung, welche die Zurücksetzen-Operation erfordert.
  • Wenn der Ausführungsstapel konfiguriert ist, einige Einträge in einem Cache oder andere Einträge, weiter unten in dem Stapel, im Grafikspeicher zu speichern, kann die Absetz-Einheit 326 konfiguriert sein, anzuzeigen, dass eine Rücksetzen-Bedingung aufgetreten ist, wenn der Ausführungsstapel nicht verfügbar ist. Der Ausführungsstapel braucht nicht verfügbar sein, wenn Einträge von dem Cache zu dem Grafikspeicher oder von dem Grafikspeicher zu dem Cache transferiert werden.
  • 4A illustriert ein spekulative-Anweisung-Ausstellung- und Anweisung-Zurücksetzen-Verfahren 400 gemäß einer Ausführungsform der Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A, 3B und 3C 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 Erfindungen ist.
  • Bei Schritt 405 stellt die Warp-Planer- und Anweisungs-Einheit 312 zumindest eine Anweisung in jedem Taktzyklus aus, verschachtelte (interleaving) Anweisungen für eine oder mehr Thread-Gruppen. Bei Schritt 410 führen die Anweisungs-Pipeline 324 und die Absetz-Einheit 326 Vor-Ausführungs-Anweisungs-Verarbeitung an den Anweisungen durch und identifizieren eine Zurücksetzen-Bedingung für die Anweisungen. Bei Schritt 415, gerade vor dem Überweisen (committing) einer verarbeiteten Anweisung zur Ausführung, untersucht die Absetz-Einheit 326 die Zurücksetzen-Flagge für die verarbeitete Anweisung, um zu bestimmen, ob eine Zurücksetzen-Bedingung für die verarbeitete Anweisung auftrat. Wenn eine Zurücksetzen-Bedingung nicht auftrat, dann setzt bei Schritt 445 die Absetz-Einheit 326 die verarbeitete Anweisung zur Ausführung mittels einer oder mehrerer exec-Einheiten 302 ab. Anderenfalls signalisiert bei Schritt 425 die Absetz-Einheit 326 der Warp-Planer- und Anweisungs-Einheit 312, ein Ausstellen von Anweisungen für die Thread-Gruppe zu stoppen, welche mit der verarbeiteten Anweisung assoziiert ist, welche mit der gesetzten Zurücksetzen-Flagge assoziiert ist. Die Absetz-Einheit 326 stellt auch der Warp-Planer- und Anweisungs-Einheit 312 den Zurücksetzen-Code bereit, welcher den Typ von Zurücksetzen-Bedingung spezifiziert.
  • Bei Schritt 430 entfernt die Absetz-Einheit 326 verarbeitete Anweisungen für die Thread-Gruppe, welche In-Flug-(in-flight) waren, als die Zurücksetzen-Bedingung detektiert wurde. Die Absetz-Einheit 326 fährt auch fort, verarbeitete Anweisungen für andere Thread-Gruppen abzusetzen, für die eine Zurücksetzen-Bedingung nicht aufgetreten ist, so dass Ausführung von Anweisungen für andere Thread-Gruppen anhält, während die Zurücksetz-Operation vollendet wird. Bei Schritt 435 bestimmt die Warp-Planer- und Anweisungs-Einheit 312, ob die Zurücksetzen-Operation vollendet ist, und Anweisungen, welche zurückgesetzt wurden, können für die Thread-Gruppe erneut ausgestellt werden. Die Zurücksetzen-Operation ist vollendet, wenn die Zurücksetzen-Bedingung entfernt oder korrigiert ist. Alle der In-Flug-Anweisungen für die Thread-Gruppe für das Zurücksetzen müssen nicht entfernt werden, damit die Anweisungen erneut ausgestellt werden. Nachdem die Zurücksetzen-Operation vollendet ist, werden die zurückgesetzten Anweisungen für die Thread-Gruppe von der Warp-Planer- und Anweisungs-Einheit 312 erneut ausgestellt.
  • Einige Zurücksetzen-Bedingungen erfordern nicht eine Zurücksetzen-Operation für alle der Threads in einer Thread-Gruppe.
  • Stattdessen kann eine teilweise Zurücksetzen-Operation durchgeführt werden. Threads in einer Thread-Gruppe, welche kein Zurücksetzen brauchen, werden mittels der Absetz-Einheit 326 ausgewiesen (committed) und mittels der exec-Einheit 302 ausgeführt, während eine (teilweise) Zurücksetzen-Operation für andere Threads in der Thread-Gruppe durchgeführt wird. Die Absetz-Einheit 326 rechnet und speichert eine Zurücksetzen-aktive-Maske für die Thread-Gruppe, was die Threads anzeigt, für welche die teilweise Zurücksetzen-Operation durchgeführt wird. Die Zurücksetzen-aktive-Maske ist mittels der Warp-Planer- und Anweisungs-Einheit 312 ausgegeben, wenn die Anweisungen für die Thread-Gruppe wieder ausgestellt werden. Während für eine Thread-Gruppe ein teilweises Rücksetzen anhängt, werden Falle-Operationen (trap operations) für die Thread-Gruppe nicht erlaubt und die Anweisungen und wieder ausgestellte Anweisungen müssen eine Ausführung vollenden, bevor irgendeine Falle genommen wird.
  • Anweisungen, für welche eine teilweise Zurücksetzen-Operation durchgeführt werden kann, umfassen eine Pixel-Attribut-Interpolations-Anweisung und eine indizierte-konstante-Beladung-Anweisung (indexed constant load instruction). Wenn ein Teil der Threads in einer Thread-Gruppe für diese Anweisungen divergiert, wird ein teilweises Rücksetzen für die divergenten Threads durchgeführt. Wenn die Anweisung, welche zu dem Zurücksetzen führte, wiederum ausgestellt ist, führen nur die divergenten Threads die Anweisungen aus (gemäß der Zurücksetzen-aktive-Maske).
  • 4B illustriert ein spekulative-Anweisung-Ausstellung- und teilweises-Anweisung-Zurücksetzen-Verfahren 450 gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A, 3B und 3C 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 Erfindungen ist.
  • Bei Schritt 405 stellt die Warp-Planer- und Anweisungs-Einheit 312 zumindest eine Anweisung in jedem Taktzyklus aus, wobei Instruktionen für eine oder mehrere Thread-Gruppen verschachtelt werden. Bei Schritt 410 führen die Anweisungs-Pipeline 324 und die Absetz-Einheit 326 Vor-Ausführungs-Anweisungs-Verarbeitung an den Anweisungen durch und identifizieren irgendwelche Zurücksetzen-Bedingungen für die Anweisungen. Bei Schritt 415, gerade vor dem Ausweisen (committing) einer verarbeiteten Anweisung zur Ausführung, untersucht die Absetz-Einheit 326 die Zurücksetzen-Flagge für die verarbeitete Anweisung, um zu bestimmen, ob eine Zurücksetzen-Bedingung für die verarbeitete Anweisung auftrat. Wenn eine Zurücksetzen-Bedingung nicht auftrat, dann setzt bei Schritt 445 die Absetz-Einheit 326 die verarbeitete Anweisung zur Ausführung mittels einer oder mehrerer exec-Einheiten 302 ab.
  • Anderenfalls bestimmt bei Schritt 420 die Absetz-Einheit 326, ob eine teilweise Zurücksetzen-Operation für die Anweisung durchgeführt werden kann, und wenn nicht, dann signalisiert bei Schritt 425 dir Absetz-Einheit 326 der Warp-Planer- und Anweisungs-Einheit 312, ein Ausstellen von Anweisungen für die Thread-Gruppe zu stoppen, welche mit der verarbeiteten Anweisung assoziiert ist, welche mit der gesetzten Zurücksetzen-Flagge assoziiert ist. Die Absetz-Einheit 326 stellt auch der Warp-Planer- und Anweisungs-Einheit 312 den Zurücksetzen-Code bereit, welcher den Typ von Zurücksetzen-Bedingung spezifiziert.
  • Bei Schritt 430 entfernt die Absetz-Einheit 326 verarbeitete Anweisungen für die Thread-Gruppe, welche In-Flug waren, als die Zurücksetzen-Bedingung detektiert wurde. Die Absetz-Einheit 326 fährt auch fort, verarbeitete Anweisungen für andere Thread-Gruppen abzusetzen, für welche eine Zurücksetzen-Bedingung nicht aufgetreten ist, so dass Ausführung von Anweisungen für andere Thread-Gruppen andauert, während die Zurücksetzen-Operation vollendet wird. Bei Schritt 435 bestimmt die Warp-Planer- und Anweisungs-Einheit 312, ob die Zurücksetze-Operation vollendet ist, und Anweisungen, welche zurückgesetzt wurden, können für die Thread-Gruppe wieder ausgestellt werden.
  • Wenn die Absetz-Einheit 326 bei Schritt 324 bestimmt, dass eine teilweise Zurücksetzen-Operation für die Anweisung durchgeführt werden kann, dann berechnet und speichert bei Schritt 455 die Absetz-Einheit 326 die partielles-Zurücksetzen-aktive-Maske und markiert (flags) die Thread-Gruppe, als eine partielles-Zurücksetzen-Operation durchführend. Bei Schritt 460 setzt die Absetz-Einheit 326 die Anweisung und irgendwelche In-Flug-Anweisungen zur Ausführung mittels der nicht-divergenten Threads in der Thread-Gruppe ab. Bei Schritt 465 aktualisiert die Absetz-Einheit 326 die aktive Maske für die Thread-Gruppe auf die teilweises-Zurücksetzen-aktive-Maske und schreitet zu Schritt 440 fort, um die zurückgesetzten Anweisungen wieder auszustellen. Nachdem die zurückgesetzten Anweisungen bei Schritt 445 ausgeführt sind, löscht die Absetz-Einheit 326 die partielles-Zurücksetzen-Flagge, wodurch eine Ausführung von Falle-Operationen (trap operations) für die Thread-Gruppe ermöglicht wird.
  • Anweisungen für eine oder mehr Thread-Gruppen werden spekulativ ausgestellt für eine Vor-Ausführungs-Verarbeitung und irgendwelche Anweisungen, welche nicht zur Ausführung ausgewiesen werden können (committed), werden verworfen und wieder ausgestellt für eine Thread-Gruppe, nachdem eine Zurücksetzen-Bedingung, welche Ausführung verhinderte, aufgelöst ist. Ein Verwerfen der Anweisungen, welche aufgrund einer Zurücksetzen-Bedingung nicht ausgewiesen werden können, erlaubt anderen Anweisungen für andere Thread-Gruppen, ausgewiesen zu werden und ausgeführt zu werden anstatt angehalten zu werden, während die Zurücksetzen-Bedingung aufgelöst wird. Daher wird ein Anweisungs-Verarbeitungs-Durchsatz für Thread-Gruppen beibehalten, welche nicht einer Zurücksetzen-Bedingung begegnen.
  • 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 (10)

  1. Verfahren zum Durchführen eines Rücksetzens von spekulativ ausgestellten Anweisungen, wobei das Verfahren aufweist: Ausstellen eines ersten Satzes von Anweisungen für eine erste Thread-Gruppe; Ausstellen eines zweiten Satzes von Anweisungen für eine zweite Thread-Gruppe; Detektieren einer Zurücksetzen-Bedingung für zumindest einen Thread in der ersten Thread-Gruppe während einer Vor-Ausführungs-Verarbeitung einer Anweisung in dem ersten Satz von Anweisungen; Stoppen eines Ausstellens von zusätzlichen Anweisungen für die erste Thread-Gruppe; Verwerfen von In-Flug-Anweisungen, welche ausgestellt sind und nicht ausgeführt worden sind in dem ersten Satz von Anweisungen; und Ausführen des zweiten Satzes von Anweisungen für die zweite Thread-Gruppe.
  2. System zum Planen von Rechen-Aufgaben zur Ausführung, wobei das System aufweist: einen Speicher, welcher konfiguriert ist, einen ersten Satz von Anweisungen für eine erste Thread-Gruppe und einen zweiten Satz von Anweisungen für eine zweite Thread-Gruppe zu speichern; eine Planer-Einheit, welche konfiguriert ist, um: den ersten Satz von Anweisungen für die erste Thread-Gruppe auszustellen; den zweiten Satz von Anweisungen für die zweite Thread-Gruppe auszustellen; und ein Ausstellen von zusätzlichen Anweisungen für die erste Thread-Gruppe zu stoppen, wenn eine Zurücksetzen-Bedingung detektiert ist; eine Absetz-Einheit, welche konfiguriert ist, um: die Zurücksetzen-Bedingung für zumindest einen Thread in der ersten Thread-Gruppe während Vor-Ausführungs-Verarbeitung einer Anweisung in dem ersten Satz von Anweisungen zu detektieren; und In-Flug-Anweisungen zu verwerfen, welche ausgestellt sind und nicht ausgeführt sind in dem ersten Satz von Anweisungen; und mehrere Ausführungs-Einheiten, welche konfiguriert sind, den zweiten Satz von Anweisungen für die zweite Thread-Gruppe auszuführen.
  3. System gemäß Anspruch 2, wobei die Planer-Einheit ferner konfiguriert ist, um: einen dritten Satz von Anweisungen für eine dritte Thread-Gruppe auszustellen, wobei die Absetz-Einheit ferner konfiguriert ist, um: eine teilweises-Zurücksetzen-Bedingung für zumindest einen Thread in der dritten Thread-Gruppe während Vor-Ausführungs-Verarbeitung einer ersten Anweisung in dem dritten Satz von Anweisungen zu detektieren; und eine teilweises-Zurücksetzen-aktive-Maske zu speichern, welche einen ersten Teil von Threads in der dritten Thread-Gruppe anzeigt, welche für die erste Anweisung divergieren, und wobei die mehreren Ausführungs-Einheiten ferner konfiguriert sind, um: die erste Anweisung für einen zweiten Teil der Threads in der dritten Thread-Gruppe auszuführen, welche für die erste Anweisung nicht divergieren.
  4. System gemäß Anspruch 2, wobei die Planer-Einheit ferner konfiguriert ist, die erste Anweisung für die dritte Thread-Gruppe wieder auszustellen, und wobei die mehreren Ausführungs-Einheiten ferner konfiguriert sind, die erste Anweisung für den ersten Teil von Threads basierend auf der teilweises-Zurücksetzen-aktive-Maske auszuführen.
  5. System gemäß Anspruch 2, wobei die Anweisung in dem ersten Satz von Anweisungen ein ungültiges Super-Skalar-Paar von zwei Operationen spezifiziert, welche nicht parallel durchgeführt werden können.
  6. System gemäß Anspruch 5, wobei die Planer-Einheit ferner konfiguriert ist, um: eine erste Operation des ungültigen Super-Skalar-Paars als eine erste Anweisung für die erste Thread-Gruppe auszustellen; und eine erste Operation des ungültigen Super-Skalar-Paars als eine zweite Anweisung für die erste Thread-Gruppe auszustellen.
  7. System gemäß Anspruch 2, wobei die Anweisung in dem ersten Satz von Anweisungen eine Barriere-Synchronisierungs-Anweisung ist, welche konfiguriert ist, die erste Thread-Gruppe mit der zweiten Thread-Gruppe zu synchronisieren.
  8. System gemäß Anspruch 2, wobei die Anweisung in dem ersten Satz von Anweisungen einen Operanden spezifiziert, welcher korrumpiert ist.
  9. System gemäß Anspruch 2, wobei die Planer-Einheit ferner konfiguriert ist, den ersten Satz von Anweisungen für die erste Thread-Gruppe wieder auszustellen, nachdem die Zurücksetzen-Bedingung entfernt ist.
  10. System gemäß Anspruch 2, wobei die Absetz-Einheit ferner konfiguriert ist, die In-Flug-Anweisungen zu verwerfen, nachdem die Vor-Ausführungs-Verarbeitung der In-Flug-Anweisungen vollendet ist.
DE102012220029A 2011-11-04 2012-11-02 Spekulative Ausführung und Zurücksetzen Pending DE102012220029A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/289,643 2011-11-04
US13/289,643 US9830158B2 (en) 2011-11-04 2011-11-04 Speculative execution and rollback

Publications (1)

Publication Number Publication Date
DE102012220029A1 true DE102012220029A1 (de) 2013-05-08

Family

ID=48129133

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012220029A Pending DE102012220029A1 (de) 2011-11-04 2012-11-02 Spekulative Ausführung und Zurücksetzen

Country Status (4)

Country Link
US (1) US9830158B2 (de)
CN (1) CN103197953B (de)
DE (1) DE102012220029A1 (de)
TW (1) TWI529620B (de)

Families Citing this family (152)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2885708A4 (de) * 2012-08-20 2016-11-09 D Kevin Cameron Verarbeitung von ressourcenzuweisungen
US9158667B2 (en) 2013-03-04 2015-10-13 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US8964496B2 (en) 2013-07-26 2015-02-24 Micron Technology, Inc. Apparatuses and methods for performing compare operations using sensing circuitry
US8971124B1 (en) 2013-08-08 2015-03-03 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9153305B2 (en) 2013-08-30 2015-10-06 Micron Technology, Inc. Independently addressable memory array address spaces
US9019785B2 (en) 2013-09-19 2015-04-28 Micron Technology, Inc. Data shifting via a number of isolation devices
US9449675B2 (en) 2013-10-31 2016-09-20 Micron Technology, Inc. Apparatuses and methods for identifying an extremum value stored in an array of memory cells
US9430191B2 (en) 2013-11-08 2016-08-30 Micron Technology, Inc. Division operations for memory
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US9934856B2 (en) 2014-03-31 2018-04-03 Micron Technology, Inc. Apparatuses and methods for comparing data patterns in memory
US9830999B2 (en) 2014-06-05 2017-11-28 Micron Technology, Inc. Comparison operations in memory
US9449674B2 (en) 2014-06-05 2016-09-20 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9455020B2 (en) 2014-06-05 2016-09-27 Micron Technology, Inc. Apparatuses and methods for performing an exclusive or operation using sensing circuitry
US10074407B2 (en) 2014-06-05 2018-09-11 Micron Technology, Inc. Apparatuses and methods for performing invert operations using sensing circuitry
US9786335B2 (en) 2014-06-05 2017-10-10 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9711207B2 (en) 2014-06-05 2017-07-18 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9779019B2 (en) 2014-06-05 2017-10-03 Micron Technology, Inc. Data storage layout
US9910787B2 (en) 2014-06-05 2018-03-06 Micron Technology, Inc. Virtual address table
US9711206B2 (en) 2014-06-05 2017-07-18 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9704540B2 (en) 2014-06-05 2017-07-11 Micron Technology, Inc. Apparatuses and methods for parity determination using sensing circuitry
US9496023B2 (en) 2014-06-05 2016-11-15 Micron Technology, Inc. Comparison operations on logical representations of values in memory
US9847110B2 (en) 2014-09-03 2017-12-19 Micron Technology, Inc. Apparatuses and methods for storing a data value in multiple columns of an array corresponding to digits of a vector
US9747961B2 (en) 2014-09-03 2017-08-29 Micron Technology, Inc. Division operations in memory
US9589602B2 (en) 2014-09-03 2017-03-07 Micron Technology, Inc. Comparison operations in memory
US9740607B2 (en) 2014-09-03 2017-08-22 Micron Technology, Inc. Swap operations in memory
US9898252B2 (en) 2014-09-03 2018-02-20 Micron Technology, Inc. Multiplication operations in memory
US10068652B2 (en) 2014-09-03 2018-09-04 Micron Technology, Inc. Apparatuses and methods for determining population count
US9904515B2 (en) 2014-09-03 2018-02-27 Micron Technology, Inc. Multiplication operations in memory
US10102002B2 (en) * 2014-09-30 2018-10-16 International Business Machines Corporation Dynamic issue masks for processor hang prevention
US9940026B2 (en) 2014-10-03 2018-04-10 Micron Technology, Inc. Multidimensional contiguous memory allocation
US9836218B2 (en) 2014-10-03 2017-12-05 Micron Technology, Inc. Computing reduction and prefix sum operations in memory
US10163467B2 (en) 2014-10-16 2018-12-25 Micron Technology, Inc. Multiple endianness compatibility
US10147480B2 (en) 2014-10-24 2018-12-04 Micron Technology, Inc. Sort operation in memory
US9779784B2 (en) 2014-10-29 2017-10-03 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US10073635B2 (en) 2014-12-01 2018-09-11 Micron Technology, Inc. Multiple endianness compatibility
US9747960B2 (en) 2014-12-01 2017-08-29 Micron Technology, Inc. Apparatuses and methods for converting a mask to an index
US10032493B2 (en) 2015-01-07 2018-07-24 Micron Technology, Inc. Longest element length determination in memory
US10061590B2 (en) 2015-01-07 2018-08-28 Micron Technology, Inc. Generating and executing a control flow
US9583163B2 (en) 2015-02-03 2017-02-28 Micron Technology, Inc. Loop structure for operations in memory
CN107408404B (zh) 2015-02-06 2021-02-12 美光科技公司 用于存储器装置的设备及方法以作为程序指令的存储
EP3254286B1 (de) 2015-02-06 2019-09-11 Micron Technology, INC. Vorrichtungen und verfahren zum parallelen schreiben an mehrere speichervorrichtungsstandorte
WO2016126472A1 (en) 2015-02-06 2016-08-11 Micron Technology, Inc. Apparatuses and methods for scatter and gather
US10522212B2 (en) 2015-03-10 2019-12-31 Micron Technology, Inc. Apparatuses and methods for shift decisions
US9741399B2 (en) 2015-03-11 2017-08-22 Micron Technology, Inc. Data shift by elements of a vector in memory
US9898253B2 (en) 2015-03-11 2018-02-20 Micron Technology, Inc. Division operations on variable length elements in memory
CN107430874B (zh) 2015-03-12 2021-02-02 美光科技公司 用于数据移动的设备及方法
US10146537B2 (en) 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US10049054B2 (en) 2015-04-01 2018-08-14 Micron Technology, Inc. Virtual register file
US10140104B2 (en) 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
US9959923B2 (en) 2015-04-16 2018-05-01 Micron Technology, Inc. Apparatuses and methods to reverse data stored in memory
US10073786B2 (en) 2015-05-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for compute enabled cache
US9704541B2 (en) 2015-06-12 2017-07-11 Micron Technology, Inc. Simulating access lines
US9921777B2 (en) 2015-06-22 2018-03-20 Micron Technology, Inc. Apparatuses and methods for data transfer from sensing circuitry to a controller
US9996479B2 (en) 2015-08-17 2018-06-12 Micron Technology, Inc. Encryption of executables in computational memory
US9905276B2 (en) 2015-12-21 2018-02-27 Micron Technology, Inc. Control of sensing components in association with performing operations
US9952925B2 (en) 2016-01-06 2018-04-24 Micron Technology, Inc. Error code calculation on sensing circuitry
US10048888B2 (en) 2016-02-10 2018-08-14 Micron Technology, Inc. Apparatuses and methods for partitioned parallel data movement
US9892767B2 (en) 2016-02-12 2018-02-13 Micron Technology, Inc. Data gathering in memory
US9971541B2 (en) 2016-02-17 2018-05-15 Micron Technology, Inc. Apparatuses and methods for data movement
US9899070B2 (en) 2016-02-19 2018-02-20 Micron Technology, Inc. Modified decode for corner turn
US10956439B2 (en) 2016-02-19 2021-03-23 Micron Technology, Inc. Data transfer with a bit vector operation device
US9697876B1 (en) 2016-03-01 2017-07-04 Micron Technology, Inc. Vertical bit vector shift in memory
US9997232B2 (en) 2016-03-10 2018-06-12 Micron Technology, Inc. Processing in memory (PIM) capable memory device having sensing circuitry performing logic operations
US10262721B2 (en) 2016-03-10 2019-04-16 Micron Technology, Inc. Apparatuses and methods for cache invalidate
US10379772B2 (en) 2016-03-16 2019-08-13 Micron Technology, Inc. Apparatuses and methods for operations using compressed and decompressed data
US9910637B2 (en) 2016-03-17 2018-03-06 Micron Technology, Inc. Signed division in memory
US10120740B2 (en) 2016-03-22 2018-11-06 Micron Technology, Inc. Apparatus and methods for debugging on a memory device
US11074988B2 (en) 2016-03-22 2021-07-27 Micron Technology, Inc. Apparatus and methods for debugging on a host and memory device
US10388393B2 (en) 2016-03-22 2019-08-20 Micron Technology, Inc. Apparatus and methods for debugging on a host and memory device
US10474581B2 (en) 2016-03-25 2019-11-12 Micron Technology, Inc. Apparatuses and methods for cache operations
US10977033B2 (en) 2016-03-25 2021-04-13 Micron Technology, Inc. Mask patterns generated in memory from seed vectors
US10074416B2 (en) 2016-03-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for data movement
US10430244B2 (en) 2016-03-28 2019-10-01 Micron Technology, Inc. Apparatuses and methods to determine timing of operations
US10453502B2 (en) 2016-04-04 2019-10-22 Micron Technology, Inc. Memory bank power coordination including concurrently performing a memory operation in a selected number of memory regions
US10607665B2 (en) 2016-04-07 2020-03-31 Micron Technology, Inc. Span mask generation
US9818459B2 (en) 2016-04-19 2017-11-14 Micron Technology, Inc. Invert operations using sensing circuitry
US10153008B2 (en) 2016-04-20 2018-12-11 Micron Technology, Inc. Apparatuses and methods for performing corner turn operations using sensing circuitry
US9659605B1 (en) 2016-04-20 2017-05-23 Micron Technology, Inc. Apparatuses and methods for performing corner turn operations using sensing circuitry
US10042608B2 (en) 2016-05-11 2018-08-07 Micron Technology, Inc. Signed division in memory
US9659610B1 (en) 2016-05-18 2017-05-23 Micron Technology, Inc. Apparatuses and methods for shifting data
US10049707B2 (en) 2016-06-03 2018-08-14 Micron Technology, Inc. Shifting data
US10387046B2 (en) 2016-06-22 2019-08-20 Micron Technology, Inc. Bank to bank data transfer
US10037785B2 (en) 2016-07-08 2018-07-31 Micron Technology, Inc. Scan chain operation in sensing circuitry
US10388360B2 (en) 2016-07-19 2019-08-20 Micron Technology, Inc. Utilization of data stored in an edge section of an array
US10387299B2 (en) 2016-07-20 2019-08-20 Micron Technology, Inc. Apparatuses and methods for transferring data
US10733089B2 (en) 2016-07-20 2020-08-04 Micron Technology, Inc. Apparatuses and methods for write address tracking
US9972367B2 (en) 2016-07-21 2018-05-15 Micron Technology, Inc. Shifting data in sensing circuitry
US9767864B1 (en) 2016-07-21 2017-09-19 Micron Technology, Inc. Apparatuses and methods for storing a data value in a sensing circuitry element
US10303632B2 (en) 2016-07-26 2019-05-28 Micron Technology, Inc. Accessing status information
US10468087B2 (en) 2016-07-28 2019-11-05 Micron Technology, Inc. Apparatuses and methods for operations in a self-refresh state
US9990181B2 (en) 2016-08-03 2018-06-05 Micron Technology, Inc. Apparatuses and methods for random number generation
US11029951B2 (en) 2016-08-15 2021-06-08 Micron Technology, Inc. Smallest or largest value element determination
US10606587B2 (en) 2016-08-24 2020-03-31 Micron Technology, Inc. Apparatus and methods related to microcode instructions indicating instruction types
US10466928B2 (en) 2016-09-15 2019-11-05 Micron Technology, Inc. Updating a register in memory
US10387058B2 (en) 2016-09-29 2019-08-20 Micron Technology, Inc. Apparatuses and methods to change data category values
US10014034B2 (en) 2016-10-06 2018-07-03 Micron Technology, Inc. Shifting data in sensing circuitry
US10529409B2 (en) 2016-10-13 2020-01-07 Micron Technology, Inc. Apparatuses and methods to perform logical operations using sensing circuitry
US9805772B1 (en) 2016-10-20 2017-10-31 Micron Technology, Inc. Apparatuses and methods to selectively perform logical operations
CN207637499U (zh) 2016-11-08 2018-07-20 美光科技公司 用于形成在存储器单元阵列上方的计算组件的设备
US10423353B2 (en) 2016-11-11 2019-09-24 Micron Technology, Inc. Apparatuses and methods for memory alignment
US9761300B1 (en) 2016-11-22 2017-09-12 Micron Technology, Inc. Data shift apparatuses and methods
US10402340B2 (en) 2017-02-21 2019-09-03 Micron Technology, Inc. Memory array page table walk
US10474468B2 (en) * 2017-02-22 2019-11-12 Advanced Micro Devices, Inc. Indicating instruction scheduling mode for processing wavefront portions
US10403352B2 (en) 2017-02-22 2019-09-03 Micron Technology, Inc. Apparatuses and methods for compute in data path
US10268389B2 (en) 2017-02-22 2019-04-23 Micron Technology, Inc. Apparatuses and methods for in-memory operations
US10838899B2 (en) 2017-03-21 2020-11-17 Micron Technology, Inc. Apparatuses and methods for in-memory data switching networks
US10185674B2 (en) 2017-03-22 2019-01-22 Micron Technology, Inc. Apparatus and methods for in data path compute operations
US11222260B2 (en) 2017-03-22 2022-01-11 Micron Technology, Inc. Apparatuses and methods for operating neural networks
US10049721B1 (en) 2017-03-27 2018-08-14 Micron Technology, Inc. Apparatuses and methods for in-memory operations
US10043570B1 (en) 2017-04-17 2018-08-07 Micron Technology, Inc. Signed element compare in memory
US10147467B2 (en) 2017-04-17 2018-12-04 Micron Technology, Inc. Element value comparison in memory
US9997212B1 (en) 2017-04-24 2018-06-12 Micron Technology, Inc. Accessing data in memory
US10942843B2 (en) 2017-04-25 2021-03-09 Micron Technology, Inc. Storing data elements of different lengths in respective adjacent rows or columns according to memory shapes
US10437593B2 (en) * 2017-04-27 2019-10-08 Nvidia Corporation Techniques for comprehensively synchronizing execution threads
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10236038B2 (en) 2017-05-15 2019-03-19 Micron Technology, Inc. Bank to bank data transfer
US10068664B1 (en) 2017-05-19 2018-09-04 Micron Technology, Inc. Column repair in memory
US10620994B2 (en) 2017-05-30 2020-04-14 Advanced Micro Devices, Inc. Continuation analysis tasks for GPU task scheduling
US10013197B1 (en) 2017-06-01 2018-07-03 Micron Technology, Inc. Shift skip
US10152271B1 (en) 2017-06-07 2018-12-11 Micron Technology, Inc. Data replication
US10262701B2 (en) 2017-06-07 2019-04-16 Micron Technology, Inc. Data transfer between subarrays in memory
US10318168B2 (en) 2017-06-19 2019-06-11 Micron Technology, Inc. Apparatuses and methods for simultaneous in data path compute operations
US10162005B1 (en) 2017-08-09 2018-12-25 Micron Technology, Inc. Scan chain operations
US10534553B2 (en) 2017-08-30 2020-01-14 Micron Technology, Inc. Memory array accessibility
US10741239B2 (en) 2017-08-31 2020-08-11 Micron Technology, Inc. Processing in memory device including a row address strobe manager
US10416927B2 (en) 2017-08-31 2019-09-17 Micron Technology, Inc. Processing in memory
US10346092B2 (en) 2017-08-31 2019-07-09 Micron Technology, Inc. Apparatuses and methods for in-memory operations using timing circuitry
GB2566339B (en) * 2017-09-06 2019-11-27 Advanced Risc Mach Ltd An apparatus and method of executing thread groups
US10474822B2 (en) * 2017-10-08 2019-11-12 Qsigma, Inc. Simultaneous multi-processor (SiMulPro) apparatus, simultaneous transmit and receive (STAR) apparatus, DRAM interface apparatus, and associated methods
US10409739B2 (en) 2017-10-24 2019-09-10 Micron Technology, Inc. Command selection policy
US10866806B2 (en) * 2017-11-14 2020-12-15 Nvidia Corporation Uniform register file for improved resource utilization
US10522210B2 (en) 2017-12-14 2019-12-31 Micron Technology, Inc. Apparatuses and methods for subarray addressing
US10332586B1 (en) 2017-12-19 2019-06-25 Micron Technology, Inc. Apparatuses and methods for subrow addressing
US10614875B2 (en) 2018-01-30 2020-04-07 Micron Technology, Inc. Logical operations using memory cells
US10437557B2 (en) 2018-01-31 2019-10-08 Micron Technology, Inc. Determination of a match between data values stored by several arrays
US11194477B2 (en) 2018-01-31 2021-12-07 Micron Technology, Inc. Determination of a match between data values stored by three or more arrays
US10725696B2 (en) 2018-04-12 2020-07-28 Micron Technology, Inc. Command selection policy with read priority
US10440341B1 (en) 2018-06-07 2019-10-08 Micron Technology, Inc. Image processor formed in an array of memory cells
US11442795B2 (en) 2018-09-11 2022-09-13 Nvidia Corp. Convergence among concurrently executing threads
US10769071B2 (en) 2018-10-10 2020-09-08 Micron Technology, Inc. Coherent memory access
US11175915B2 (en) 2018-10-10 2021-11-16 Micron Technology, Inc. Vector registers implemented in memory
US10483978B1 (en) 2018-10-16 2019-11-19 Micron Technology, Inc. Memory device processing
US11184446B2 (en) 2018-12-05 2021-11-23 Micron Technology, Inc. Methods and apparatus for incentivizing participation in fog networks
CN113874837A (zh) * 2019-05-29 2021-12-31 超威半导体公司 在gpu处的软件控制的可变波前大小执行
US10867655B1 (en) 2019-07-08 2020-12-15 Micron Technology, Inc. Methods and apparatus for dynamically adjusting performance of partitioned memory
US11360768B2 (en) 2019-08-14 2022-06-14 Micron Technolgy, Inc. Bit string operations in memory
JP2021039658A (ja) * 2019-09-05 2021-03-11 富士通株式会社 Ac並列化回路、ac並列化方法及び並列情報処理装置
US11449577B2 (en) 2019-11-20 2022-09-20 Micron Technology, Inc. Methods and apparatus for performing video processing matrix operations within a memory array
US11853385B2 (en) 2019-12-05 2023-12-26 Micron Technology, Inc. Methods and apparatus for performing diversity matrix operations within a memory array
US11227641B1 (en) 2020-07-21 2022-01-18 Micron Technology, Inc. Arithmetic operations in memory
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

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6233690B1 (en) * 1998-09-17 2001-05-15 Intel Corporation Mechanism for saving power on long latency stalls
US20090217020A1 (en) * 2004-11-22 2009-08-27 Yourst Matt T Commit Groups for Strand-Based Computing
US7444498B2 (en) * 2004-12-17 2008-10-28 International Business Machines Corporation Load lookahead prefetch for microprocessors
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US20070143755A1 (en) * 2005-12-16 2007-06-21 Intel Corporation Speculative execution past a barrier
JP2008123045A (ja) * 2006-11-08 2008-05-29 Matsushita Electric Ind Co Ltd プロセッサ
US8261276B2 (en) * 2008-03-31 2012-09-04 International Business Machines Corporation Power-efficient thread priority enablement
US8522000B2 (en) * 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US8438571B2 (en) * 2010-02-24 2013-05-07 International Business Machines Corporation Thread speculative execution and asynchronous conflict

Also Published As

Publication number Publication date
US20130117541A1 (en) 2013-05-09
CN103197953B (zh) 2016-09-28
TW201331836A (zh) 2013-08-01
US9830158B2 (en) 2017-11-28
TWI529620B (zh) 2016-04-11
CN103197953A (zh) 2013-07-10

Similar Documents

Publication Publication Date Title
DE102012220029A1 (de) Spekulative Ausführung und Zurücksetzen
DE102013208554B4 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102012212639B4 (de) Temporäre SIMT-Ausführungs-Optimierung
US8997103B2 (en) N-way memory barrier operation coalescing
US9223578B2 (en) Coalescing memory barrier operations across multiple parallel threads
EP2483772B1 (de) Störungsbehebungsarchitektur für eine parallelverarbeitungseinheit
DE102013022712B4 (de) Virtuelle Speicherstruktur für Coprozessoren, die Speicherallokationsbegrenzungen haben
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
US9606808B2 (en) Method and system for resolving thread divergences
DE102013201178B4 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102013200991A1 (de) Automatisches abhängige-Aufgabe-Anstoßen
DE102012220267B4 (de) Rechenarbeitsverteilungs - Referenzzähler
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102012216571A1 (de) Nutzung einer architekturdefinierten letztverwendungs-operandenangabe in einem computersystem-operandenressourcenpool
DE102013202495A1 (de) Verfahren zur Durchführung von interaktivem Debugging auf nicht unterbrechbaren Graphikverarbeitungseinheiten
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102012211670A1 (de) Simultanes Unterbreiten an eine Mehr-Produzenten-Queue mittels mehrerer Threads
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102012221504A1 (de) Mehrniveau-Anweisung-Zwischenspeicher-Zuvor-Holen
US8539130B2 (en) Virtual channels for effective packet transfer
DE102012222558A1 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102012222932A1 (de) Gestaltetes Register-Datei-Lesen

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