DE102013022258A1 - Kontextumschaltung für Granulatität eines kooperativen Strang-Arrays während einer Haftstellenbehandlung - Google Patents

Kontextumschaltung für Granulatität eines kooperativen Strang-Arrays während einer Haftstellenbehandlung Download PDF

Info

Publication number
DE102013022258A1
DE102013022258A1 DE201310022258 DE102013022258A DE102013022258A1 DE 102013022258 A1 DE102013022258 A1 DE 102013022258A1 DE 201310022258 DE201310022258 DE 201310022258 DE 102013022258 A DE102013022258 A DE 102013022258A DE 102013022258 A1 DE102013022258 A1 DE 102013022258A1
Authority
DE
Germany
Prior art keywords
thread
cta
trap
handling routine
strand
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
DE201310022258
Other languages
English (en)
Inventor
Gerald F. Luiz
Philip Alexander Cuadra
Luke Durant
Shirish Gadre
Robert OHANNESSIAN
Lacky V. Shah
Nicholas Wang
Arthur DANSKIN
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 DE102013022258A1 publication Critical patent/DE102013022258A1/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/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]
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

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)
  • Multi Processors (AREA)

Abstract

Es werden Techniken bereitgestellt zur Behandlung einer Haftstelle, die in einem Strang angetroffen wird, der Teil eines Strang-Arrays ist, das in mehreren Ausführungseinheiten ausgeführt wird. In diesen Techniken wird eine Datenstruktur, die eine Kennung aufweist und mit dem Stand verknüpft ist, aktualisiert, um anzugeben, dass die Haftstelle während der Ausführung des Strangs-Arrays aufgetreten ist. Des Weiteren führen in diesen Techniken die Ausführungseinheiten eine Haftstellenbehandlungsroutine aus, die eine Kontextumschaltung beinhaltet. Die Ausführungseinheiten führen diese Kontextumschaltung für mindestens einige der Ausführungseinheiten als Teil der Haftstellenbehandlungsroutine aus, während verbleibende Ausführungseinheiten die Haftstellenbehandlungsroutine vor der Kontextumschaltung verlassen dürfen. Ein Vorteil der offenbarten Techniken besteht darin, dass die Haftstellenbehandlungsroutine effizient in parallelen Prozessoren arbeitet.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft allgemein parallele Prozessorarchitekturen und insbesondere Kontextumschaltung für die Granularität bzw. Auflösung eines kooperativen Strang-Arrays während der Haftstellenbehandlung.
  • Beschreibung des Stands der Technik
  • In der Computerarchitektur ist ein Einfangbefehl bzw. Haftstellenbefehl eine Art eines Befehls, die ein aktuell ablaufendes Programm unterbricht. Unterbrechungen eines Programms können aus diversen Gründen auftreten. Zu Beispielen für das gewöhnliche Auftreten von Haftstellen kann ein Systemaufruf nach mehr Information, oder eine Pause, in der der Computer auf eine Anwendereingabe wartet (beispielsweise das Drücken einer Taste einer Tastatur), gehören. Zu Beispielen des Auftretens von Haftstellen in Reaktion auf einen Fehler können Versuche gehören, eine unzulässige Computeroperation auszuführen, etwa das Teilen durch Null, oder das Zugreifen auf eine unzulässige Speicherstelle. Ferner können Haftstellenbefehle manuell von einem Programmierer zu Zwecken der Fehlersuche eingefügt werden.
  • Wenn ein Haftstellenbefehl angetroffen wird, wird ein spezielles Programm, das als eine Haftstellenbehandlungsroutine bekannt ist, ausgeführt (beispielsweise indem der Programmzähler veranlasst wird, auf eine Haftstellenbehandlungsroutine, die auch als Haftstellenbehandlung bekannt ist, zu zeigen). Es wird typischerweise eine Kontextumschaltung ausgeführt, wenn eine Haftstellenbehandlungsroutine ausgeführt wird. Generell beschreibt eine Kontextumschaltung den Vorgang im Rechner, in welchem der Zustand einer Verarbeitungseinheit gespeichert und abgerufen wird, so dass die Ausführung des ablaufenden Programms ausgehend von Punkt vor der Unterbrechung zu einer späteren Zeit wieder aufgenommen werden kann. Typischerweise ist die Kontextumschaltung rechentechnisch aufwändig.
  • In einem Parallelverarbeitungssubsystem, in welchem mehrere Stränge gleichzeitig in unterschiedlichen Ausführungseinheiten als eine einzelne Logikeinheit ausgeführt werden, die als ein kooperatives Strang-Array bekannt ist, verursacht eine Haftstelle, die in einem einzelnen Strang (im weiteren wird dieser als ein „Haftstellenstrang” bezeichnet) angetroffen wird, eine Kontextumschaltung aller ausgeführten Stränge. Ein derartiges Geschehen ist nicht wünschenswert, da Kontextumschaltung in den ausgeführten Strängen, die nicht der Haftstellenstrang sind, eine unnötige Verschwendung von Computerressourcen und eine Verlangsamung der Ausführung von Strängen bewirkt, die keine Haftstellenstränge sind.
  • Was daher auf diesem Gebiet der Technik benötigt wird, ist eine Haftstellenbehandlungsroutine, die in parallelen Prozessoren effizient arbeitet.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Ausführungsformen der vorliegenden Erfindung stellen ein Verfahren zur Handhabung einer Haftstelle bereit, die in einem Strang angetroffen wird, der Teil eines Strang-Arrays ist, das in mehreren Ausführungseinheiten gerade ausgeführt wird. Das Verfahren umfasst: Aktualisieren einer Datenstruktur mit einer Kennung, die dem Strang zugeordnet ist, um anzugeben, dass die Haftstelle während der Ausführung des Strangs-Arrays aufgetreten ist. Ferner führen in diesem Verfahren die Stränge eine Haftstellenbehandlungsroutine aus, die eine Kontextumschaltung beinhaltet. Die Kontextumschaltung wird zumindest für einen der Stränge in dem Strang-Array als Teil der Haftstellenbehandlungsroutine ausgeführt, während die verbleibenden Strang-Arrays die Haftstellenbehandlungsroutine vor der Kontextumschaltung verlassen dürfen.
  • Andere Ausführungsformen umfassen, ohne Einschränkung, ein computerlesbares Medium, das Befehle enthält, die eine Verarbeitungseinheit in die Lage versetzen, einen oder mehrere Aspekte der offenbarten Verfahren zu realisieren, und umfassen auch ein System, das ausgebildet ist, einen oder mehrere Aspekte der offenbarten Verfahren zu realisieren.
  • Ein Vorteil der offenbarten Techniken besteht darin, dass die Haftstellenbehandlungsroutine effizient in parallelen Prozessoren arbeitet.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Um die Art und Weise, in der die oben genannten Merkmale der vorliegenden Erfindung detailliert verstanden werden können, anzugeben, wird eine speziellere Beschreibung der Erfindung, die zuvor kurz zusammengefasst ist, mit Bezug zu Ausführungsformen angegeben, wovon einige in den angefügten Zeichnungen dargestellt sind. Es ist jedoch zu beachten, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und daher nicht als Einschränkung für ihren Schutzbereich zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulässt.
  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren;
  • 2 ist eine Blockansicht eines Parallelverarbeitungssubsystems für das Computersystem aus 1 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3 ist eine Blockansicht eines Teils eines Datenstrom-Multiprozessors in dem allgemeinen Verarbeitungs-Cluster aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist eine Blockansicht, die eine Reihe von Ketten in einem kooperativen Strang-Array (CTA) zeigt, die in einem Datenstrom-Multiprozessor gemäß einer Ausführungsform der vorliegenden Erfindung ausgeführt werden;
  • 5 ist eine Blockansicht, die eine Reihe von Ketten in einem kooperativen Strang-Array (CTA) zeigt, die in einen Datenstrom-Multiprozessor gemäß einer weiteren Ausführungsform der vorliegenden Erfindung ausgeführt werden;
  • 6A ist eine Blockansicht, die eine Haftstellenursachentabelle (TRT) gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
  • 6B zeigt ein Flussdiagramm von Verfahrensschritten, die einen Prozess zur Ausführung einer Aktualisierung von TRT-Einträgen gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
  • 6C6D geben ein Flussdiagramm von Verfahrensschritten an, die einen Prozess zur Ausführung einer Haftstellenbehandlungsroutine gemäß einer Ausführungsform der vorliegenden Erfindung zeigen; und
  • 7 gibt ein Flussdiagramm von Verfahrensschritten an, die einen Prozess zur Handhabung einer Haftstelle mit einem zusammenwachsenden Fenster gemäß einer Ausführungsform der vorliegenden Erfindung zeigen.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezielle Details angegeben, um ein gründlicheres Verständnis der vorliegenden Erfindung zu ermöglichen. Jedoch erkennt der Fachmann, dass die vorliegende Erfindung auch ohne eines oder mehrerer dieser speziellen Details in die Praxis umgesetzt werden kann.
  • Systemüberblick
  • 1 ist eine Blockansicht, die ein Computersystem 100 darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren. Das Computersystem 100 umfasst eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über einen Verbindungspfad, der eine Speicherbrücke 105 enthalten kann, miteinander in Verbindung stehen. Die Speicherbrücke 105, die beispielsweise ein Nordbrücken-Chip sein kann, ist über einen Bus oder einen anderen Kommunikationspfad 106 (beispielsweise eine HyperTransport-Verbindung) mit einer I/O-(Eingabe/Ausgabe-)Brücke 107 verbunden. Die I/O-Brücke 107, die beispielsweise ein Südbrücken-Chip sein kann, empfängt eine Anwendereingabe aus einem oder mehreren Anwender-Eingabegeräten 108 (beispielsweise Tastatur, Maus) und leitet die Eingabe an die CPU 102 über den Kommunikationspfad 106 und die Speicherbrücke 105 weiter. Ein Parallelverarbeitungssubsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen zweiten Kommunikationspfad 113 (beispielsweise ein peripherer Komponenten-Verbindung-(PCI)Express, ein beschleunigter Graphikport oder eine HyperTransport-Verbindung) verbunden. In einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein Grafiksubsystem, das Pixel einem Anzeigegerät 110 zuleitet, das eine konventionelle Kathodenstrahlröhre, eine Flüssigkristallanzeige, eine Anzeige mit lichtemittierenden Dioden oder dergleichen sein kann. Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden und kann ausgebildet sein, Inhalt und Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112 zu speichern. Die Systemdiskette 114 stellt nicht-flüchtigen Speicherplatz für Anwendungen und Daten bereit und kann fest installierte oder entfernbare Festplattenlaufwerke, Flash-Speichereinrichtungen und CD-( Kompaktdisketten-Nur-Lese-Speicher), DVD- (digitale Vielseitigkeitsdisketten-ROM), Blu-ray, HD-DVD (hochauflösende DVD) oder andere magnetische, optische Speichereinrichtungen oder Halbleiterspeichereinrichtungen umfassen.
  • Ein Schalter bzw. eine Schalteinrichtung 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten, etwa einem Netzwerkadapter 118 und diversen Zusatzkarten 120 und 121 bereit. Andere Komponenten (nicht explizit gezeigt) einschließlich eines universellen seriellen Busses (USB) oder andere Portverbindungen, Kompaktdisketten-(CD-)Laufwerke, digitale Vielseitigkeitsdisketten-(DVD-)Laufwerke, Filmaufzeichnungsgeräte und dergleichen, können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die diversen Kommunikationspfade, die in 1 gezeigt sind, einschließlich der speziell genannten Kommunikationspfade 106 und 113, können unter Anwendung beliebiger geeigneter Protokolle realisiert werden, etwa durch PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Bus- oder Punkt-Zu-Punkt-Kommunikationsprotokolle, und Verbindungen zwischen unterschiedlichen Geräten können unterschiedliche Protokolle benutzen, wie dies im Stand der Technik bekannt ist.
  • In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafikverarbeitung und Videoverarbeitung optimiert ist, wozu beispielsweise eine Videoausgabeschaltung gehört, und das System bildet eine grafische Verarbeitungseinheit (GPU). In einer weiteren Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für die Verarbeitung für Allgemeinzwecke optimiert ist, wobei dennoch die zu Grunde liegende Rechenarchitektur, die nachfolgend detaillierter beschrieben ist, beibehalten ist. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 mit einem oder mehreren anderen Systemelementen zu einem einzelnen Subsystem zusammengefasst sein, etwa durch Vereinigen der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hierin gezeigte System anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, die Anzahl an CPUs 102 und die Anzahl an Parallelverarbeitungssubsystemen 112 kann nach Bedarf modifiziert werden. Beispielsweise ist in einigen Ausführungsformen der Systemspeicher 104 direkt mit der CPU 102 anstatt über eine Brücke verbunden, und andere Geräte kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt mit der Speicherbrücke 105 verbunden. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als ein oder mehrere diskrete Bauelemente vorhanden sind. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehr Parallelverarbeitungssubsysteme 112 aufweisen. Die speziellen Komponenten, die hierin gezeigt sind, sind optional; beispielsweise kann eine beliebige Zahl an Zusatzkarten oder peripheren Geräten unterstützt werden. In einigen Ausführungsformen ist der Schalter 116 weggelassen, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 sind direkt mit der I/O-Brücke 107 verbunden.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten (PPUs) 202, wovon jede mit einem lokalen Parallelverarbeitungs-(PP)Speicher 204 verbunden ist. Im Allgemeinen enthält ein Parallelverarbeitungssubsystem eine Anzahl U an PPUs, wobei U ≥ 1 ist. (Hierin werden mehrere Instanzen gleicher Objekte mit Bezugszeichen belegt, die das Objekt kennzeichnen, und Zahlen in Klammern geben bei Bedarf die Instanz an.) Die PPUs 202 und die Parallelverarbeitungsspeicher 204 können unter Anwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa durch programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC), oder Speichereinrichtungen oder durch eine andere technisch machbare Weise realisiert werden.
  • Es sei wieder auf 1 sowie auf 2 verwiesen; in einigen Ausführungsformen sind einige oder alle der PPUs 202 in dem Parallelverarbeitungssubsystem 112 Grafikprozessoren mit Bilderzeugungs-Pipelines, die konfiguriert werden können, um diverse Operationen auszuführen, die betreffen: die Erzeugung von Pixeldaten aus Grafikdaten, die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und den zweiten Kommunikationspfad 113 bereitgestellt werden, die Wechselwirkung mit dem lokalen Parallelverarbeitungsspeicher 204 (der als Grafikspeicher verwendbar ist und beispielsweise einen konventionellen Blockpuffer enthält), um Pixeldaten zu speichern und zu aktualisieren, die Zuleitung von Pixeldaten an das Anzeigegerät 110, und dergleichen. In einigen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 aufweisen, die als Grafikprozessoren arbeiten, und kann eine oder mehrere andere PPUs 202 aufweisen, die für Berechnungen für Allgemeinzwecke verwendet werden. Die PPUs 202 können identisch oder unterschiedlich sein, und jede PPU 202 kann einen oder mehrere spezielle Parallelverarbeitungsspeichereinrichtungen oder keinen speziellen Parallelverarbeitungsspeicher aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 können Daten an das Anzeigegerät 110 ausgeben, oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 kann Daten an ein oder mehrere Anzeigegeräte 110 ausgeben.
  • Während des Betriebs ist die CPU 102 der übergeordnete Prozessor des Computersystems 100 und steuert und koordiniert den Betrieb anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom aus Befehlen für jede PPU 202 in eine Datenstruktur (die in 1 oder 2 nicht explizit gezeigt ist), die in dem Systemspeicher 104, dem Parallelverarbeitungsspeicher 204 oder an einer weiteren Speicherstelle liegen kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen kann. Ein Zeiger auf jede Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Stroms aus Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Schiebepuffern aus und führt die Befehle asynchron relativ zu der Arbeitsweise der CPU 102 aus. Es können für jeden Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 Prioritäten für die Ausführung angegeben werden, um die Disponierung der unterschiedlichen Schiebepuffer zu steuern.
  • Es sei nun wieder auf 2 sowie auf 1 verwiesen; jede PPU 202 enthält eine I/O-(Eingabe/Ausgabe-)Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 in Verbindung steht, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) in Verbindung steht. Die Verbindung der PPU 202 mit dem Rest des Computersystems 100 kann auch anders sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Zusatzkarte realisiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 in einem einzelnen Chip zusammen mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 zusammen mit der CPU 102 in einem einzelnen Chip integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Expressverbindung, in der jeder PPU 202 spezielle Bahnen zugeordnet sind, wie dies im Stand der Technik bekannt ist. Es können auch andere Kommunikationspfade verwendet werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113, wodurch die eintreffenden Pakete zu geeigneten Komponenten der PPU 202 weitergeleitet werden. Beispielsweise können Befehle, die Verarbeitungsaufgaben betreffen, an eine Hauptschnittstelle 206 geleitet werden, während Befehle, die Speicheroperationen (beispielsweise das Lesen aus dem oder Schreiben in den Parallelverarbeitungsspeicher 204) betreffen, an eine Speicherkreuzungseinheit 210 geleitet werden können. Die Hauptschnittstelle 206 liest jeden Schiebepuffer aus und gibt den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212 aus.
  • Jede PPU 202 realisiert vorteilhafterweise eine äußerst parallele Verarbeitungsarchitektur. Wie detailliert gezeigt ist, enthält die PPU 202(0) ein Verarbeitung-Cluster-Array 230, das eine Anzahl C an allgemeinen Verarbeitungs-Clustern (GPCs) 208 enthält, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) Stränge gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPCs 208 zur Verarbeitung unterschiedlicher Arten von Programmen oder zur Ausführung unterschiedlicher Arten von Berechnungen reserviert werden. Die Reservierung bzw. Zuweisung von GPCs 208 kann in Abhängigkeit von der Arbeitslast unterschiedlich sein, die sich für jede Art von Programm oder Berechnung ergibt.
  • Die GPCs 208 empfangen zu verarbeitende Ausführungsaufgabe aus einer Arbeitsverteilungseinheit in einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Metadaten (TMD) (nicht gezeigt) codiert und im Speicher abgelegt sind. Die Zeiger auf die TMD sind in dem Befehlsstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der Hauptschnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indizes von zu verarbeitenden Daten, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind (beispielsweise welches Programm auszuführen ist). Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass die GPCs 208 in einen zulässigen Zustand konfiguriert werden, bevor die Verarbeitung, wie sie durch jeden Satz der TMD spezifiziert ist, initiiert wird. Es kann eine Priorität für jeden Satz an TMD angegeben werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können auch aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Anfang oder dem Ende einer Liste von Verarbeitungsaufgaben (oder einer Liste aus Zeigern auf die Verarbeitungsaufgaben) hinzuzufügen sind, wodurch eine weitere Ebene einer Steuerung zusätzlich zur Priorität bereitgestellt wird.
  • Eine Speicherschnittstelle 214 enthält eine Anzahl D an Partitionseinheiten 215, die jeweils direkt mit einem Teil des Parallelverarbeitungsspeichers 204 verbunden sind, wobei D ≥ 1 ist. Wie gezeigt, ist generell die Anzahl an Partitionseinheiten 215 gleich der Anzahl an dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 215 gegebenenfalls nicht gleich der Anzahl an Speichereinrichtungen. Der Fachmann auf dem Gebiet erkennt, dass die DRAM 220 durch andere geeignete Speichereinrichtungen ersetzt werden können und dass sie von allgemein konventioneller Gestaltung sein können. Eine detaillierte Beschreibung wird daher weggelassen. Bilderzeugungsziele, etwa Blockpuffer oder Texturzuordnungen, können in den DRAMs 220 gespeichert sein, wodurch es den Partitionseinheiten 215 möglich ist, Bereiche jedes Bilderzeugungsziels parallel zu beschreiben, um in effizienter Weise die verfügbare Bandbreite des Parallelverarbeitungsspeichers 204 auszunutzen.
  • Jeder der GPCs 208 kann Daten verarbeiten, dass Sie in die DRAMs 220 in dem Parallelverarbeitungsspeicher 204 geschrieben werden. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 dem Eingang einer Partitionseinheit 215 oder einem weiteren GPC 208 für die weitere Verarbeitung zuzuleiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um diverse externe Speichereinrichtungen auszulesen oder diese zu beschreiben. In einer Ausführungsform hat die Kreuzungseinheit 210 eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 zu kommunizieren, und hat auch eine Verbindung zu dem lokalen Parallelverarbeitungsspeicher 204, wodurch es den Verarbeitungskernen in den unterschiedlichen GPCs 208 ermöglicht wird, mit dem Systemspeicher 104 oder einem anderen Speicher zu kommunizieren, der nicht lokal für die PPU 202 ist. In der in 2 gezeigten Ausführungsform ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzungseinheit 210 kann virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Die GPCs 208 können wiederum so programmiert sein, dass sie Verarbeitungsaufgaben, die eine Fülle von Anwendungen betreffen, ausführen, wozu gehören, ohne einschränkend zu sein, lineare und nicht-lineare Datentransformationen, die Filterung von Video- und/oder Audiodaten, Modellierungsoperationen (beispielsweise die Anwendung physikalischer Gesetze zur Bestimmung der Position, Geschwindigkeit und anderer Attribute von Objekten), Bilderzeugungsoperationen (beispielsweise Programme für die Parkettierungs-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel Schattierung) usw. Die PPUs 202 können Daten von dem Systemspeicher 104 und/oder dem lokalen Parallelverarbeitungsspeicher 204 in einen internen (Chip internen) Speicher übertragen, die Daten verarbeiten und die Ergebnisdaten zurück in den Systemspeicher 104 und/oder die lokalen Parallelverarbeitungsspeicher 204 schreiben, wo auf derartige Daten von anderen Systemkomponenten zugegriffen werden kann, wozu die CPU 102 oder ein weiteres Parallelverarbeitungssubsystem 112 gehören.
  • Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungsspeicher 204 versehen sein, wobei auch kein lokaler Speicher mit eingeschlossen ist, und kann den lokalen Speicher und einen Systemspeicher in beliebiger Kombination verwenden. Beispielsweise kann eine PPU 202 ein Grafikprozessor in einer Ausführungsform mit vereinheitlichter Speicherarchitektur (UMA) sein. In derartigen Ausführungsformen wird wenig oder kein spezieller graphischer (Parallelverarbeitungs-)Speicher bereitgestellt, und die PPU 202 verwendet ausschließlich oder nahezu ausschließlich den Systemspeicher. In UMA-Ausführungsformen kann eine PPU 202 in einem Brückenchip oder einem Prozessorchip integriert sein, oder kann als ein diskreter Chip mit einer Hochgeschwindigkeitsverbindung vorgesehen sein (beispielsweise PCI-Expressverbindung), die die PPU 202 mit dem Systemspeicher über einen Brückenchip oder eine andere Kommunikationseinrichtungen verbindet.
  • Wie zuvor angegeben ist, kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 auf einer einzelnen Zusatzkarte bereitgestellt werden, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 112 verbunden sein, oder eine oder mehrere PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können verschiedene PPUs 202 eine verschiedene Anzahl an Verarbeitungskernen, eine verschiedene Größe an lokalem Parallelverarbeitungsspeicher usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, so dass Daten mit höherem Durchsatz verarbeitet werden, als dies mit einer einzelnen PPU 202 möglich wäre. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren eingerichtet werden, wozu Tischrechner, mobile Rechner oder Hand-Personalcomputer, Dienstleister-Rechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen gehören.
  • Es können mehrere Verarbeitungsaufgaben gleichzeitig in den GPCs 208 ausgeführt werden, und eine Verarbeitungsaufgabe kann eine oder mehrere „Kind-”Verarbeitungsaufgaben während der Ausführung erzeugen. Die Aufgaben/Arbeitseinheit 207 empfängt die Aufgaben und disponiert dynamisch die Verarbeitungsaufgaben und die Kind-Verarbeitungsaufgaben zur Ausführung durch die GPCs 208.
  • 3 ist eine Blockansicht eines Datenstrom-Multiprozessors (SM) 310 in einem GPC 208 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann so gestaltet sein, dass er eine große Anzahl an Strängen parallel ausführen kann, wobei der Begriff „Strang” eine Instanz eines speziellen Programms bezeichnet, das mit einem speziellen Satz an Eingangsdaten ausgeführt wird. In einigen Ausführungsformen werden Einzelbefehl-Mehrfach-Daten-(SIMD-)Befehlsausgabetechniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an Strängen zu ermöglichen, ohne dass mehrere unabhängige Befehlseinheiten bereitgestellt werden. In anderen Ausführungsformen werden Einzelbefehl-Multi-Strang-(SIMT-)Techniken angewendet, um die parallele Ausführung einer großen Anzahl an im allgemeinen synchronisierten Strängen zu ermöglichen, wobei eine gemeinsame Befehlseinheit verwendet wird, die ausgebildet ist, Befehle an eine Gruppe aus Verarbeitungseinheiten innerhalb jedes GPCs 208 auszugeben. Anders als ein SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, ermöglicht die SIMT-Ausführung, das unterschiedliche Stränge effizienter divergenten Ausführungspfaden durch ein gegebenes Strangprogramm hindurch folgen. Der Fachmann erkennt, dass ein SIMD-Verarbeitungsregime eine funktionale Untergruppe eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des GPC 208 wird vorteilhafterweise über einen Pipeline-Verwalter (nicht gezeigt) gesteuert, der Verarbeitungsaufgaben an einen oder mehrere Datenstrom-Multiprozessoren (SM) 310 verteilt, wobei jeder SM 310 ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Jeder SM 310 enthält einen Befehls-L1-Cache-Speicher 370, der ausgebildet ist, Befehle und Konstanten aus dem Speicher über einen L1.5-Cache-Speicher (nicht gezeigt) in dem GPC 208 zu empfangen. Eine Kettendisponier- und -Befehlseinheit 312 empfängt Befehle und Konstanten aus dem Befehls-L1-Cache-Speicher 370 und steuert eine lokale Registerdatei 304 und Funktionseinheiten des SM 310 entsprechend den Befehlen und den Konstanten. Die Funktionseinheiten des SM 310 enthalten N Exec-(Ausführungs- oder Verarbeitungs-)Einheiten 302 und P Lade-Speichereinheiten (LSU) 303. Die Funktionseinheiten des SM 310 werden als Pipeline bzw. parallel betrieben werden, wodurch es möglich ist, dass ein neuer Befehl ausgegeben wird, bevor ein vorhergehender Befehl beendet ist, wie dies im Stand der Technik bekannt ist. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten bereitgestellt werden. In einer Ausführungsform unterstützen die Funktionseinheiten eine Fülle von Operationen, wozu Ganzzahl- und Gleitkommaarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, EXKLUSIV ODER), Bit-Verschiebung und Berechnung diverser algebraischer Funktionen gehören (beispielsweise Ebeneninterpolation, trigonometrische, exponentielle und logarithmische Funktionen usw.); und die gleiche Hardware der Funktionseinheiten kann vorteilhafterweise zum Ausführen unterschiedlicher Operationen verwendet werden.
  • Die Reihe von Befehlen, die an einen speziellen GPC 208 ausgegeben wird, bildet einen Strang, wie dies zuvor hierin definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen in den Parallelverarbeitungseinheiten (nicht gezeigt) innerhalb eines SM 310 wird hierin als eine „Kette bzw. Wölbung” oder „Stranggruppe” bezeichnet. Wie hierin verwendet ist, bezeichnet eine „Stranggruppe” eine Gruppe aus Strängen, die gleichzeitig in dem gleichen Programm mit unterschiedlichen Eingangsdaten ausgeführt werden, wobei ein Strang der Gruppe einer unterschiedlichen Verarbeitungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 aufweisen, in welchem Falle gewisse Verarbeitungseinheiten während Arbeitszyklen untätig sind, wenn diese Stranggruppe gerade verarbeitet wird. Eine Stranggruppe kann auch mehr Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 aufweisen, in welchem Falle die Verarbeitung über aufeinanderfolgende Taktzyklen erfolgt. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig unterstützen kann, ergibt sich, dass ein System in einem GPC 208, das M Datenstrom-Multiprozessoren 310 aufweist, bis zu G·M Stranggruppen in dem GPC 208 zu jeder Zeit ausgeführt werden können.
  • Ferner können mehrere in Beziehung stehende Stranggruppen (in unterschiedlichen Phasen der Ausführung) gleichzeitig in einen SM 310 aktiv sein. Diese Ansammlung an Stranggruppen wird hierin als ein „kooperatives Strang-Array” („CTA”) oder „Strang-Array” bezeichnet. Die Größe eines speziellen CTA ist gleich m·k, wobei k die Anzahl an gleichzeitig ausgeführten Strängen in einer Stranggruppe ist und typischerweise ein ganzzahliges Vielfaches der Anzahl an Parallelverarbeitungseinheiten innerhalb des SM 310 ist, und wobei m die Anzahl an Stranggruppen ist, die gleichzeitig in dem SM 310 aktiv ist. Die Größe eines CTA wird generell von dem Programmierer und der Menge an Hardware-Ressourcen bestimmt, etwa von Speichern und Registern, die für das CTA verfügbar sind.
  • In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder einen oder mehrere andere Prozessoren eines Rechensystems zu verwenden, um Berechnungen für Allgemeinzwecke unter Verwendung von Strang-Arrays auszuführen. Jedem Strang in dem Strang-Array ist eine eindeutige Strangkennung („Strang-ID”) zugewiesen, auf die der Strang während der Ausführung des Strangs zugreifen kann. Die Strang-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert diverse Aspekte des Verarbeitungsverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welchen Teil eines Eingangsdatensatzes ein Strang zu verarbeiten hat und/oder um zu bestimmen, welchen Teil eines Ausgangsdatensatzes ein Strang zu erzeugen oder zu schreiben hat.
  • Eine Sequenz aus Befehlen pro Strang kann mindestens einen Befehl enthalten, der ein kooperatives Verhalten zwischen dem repräsentativen Strang und einem oder mehreren anderen Strängen des Strang-Arrays angibt. Beispielsweise kann die Sequenz aus Befehlen pro Strang enthalten: einen Befehl, um die Ausführung von Operationen für den repräsentativen Strang an einem speziellen Punkt in der Sequenz zu unterbrechen, bis zu einer Zeit, bei der eine oder mehrere der anderen Stränge diesen speziellen Punkt erreicht haben, einen Befehl für den repräsentativen Strang, Daten in einen gemeinsam benutzten Speicher zu speichern, auf den eine oder mehrere der anderen Stränge Zugriff haben, einen Befehl für den repräsentativen Strang, in atomarer Weise bzw. ungeteilter Weise Daten zu lesen und zu aktualisieren, die in einem gemeinsam benutzten Speicher gespeichert sind, auf den einer oder mehrere der anderen Stränge Zugriff haben auf Grundlage ihrer Strang-ID, oder dergleichen. Das CTA-Programm kann ferner einen Befehl enthalten, um eine Adresse in dem gemeinsam benutzten Speicher zu berechnen, aus der Daten auszulesen sind, wobei die Adresse eine Funktion der Strang-ID ist. Durch die Definition geeigneter Funktionen und durch die Bereitstellung von Synchronisiertechniken können Daten in eine gegebene Speicherstelle in einem gemeinsam benutzten Speicher durch einen Strang eines CTA geschrieben werden, und können aus dieser Speicherstelle von einem anderen Strang des gleichen CTA in vorhersagbarer Weise ausgelesen werden. Folglich kann ein beliebiges gewünschtes Schema an gemeinsamer Datennutzung zwischen Strängen unterstützt werden, und ein beliebiger Strang in einem CTA kann Daten mit einem beliebigen anderen Strang in dem gleichen CTA gemeinsam benutzen. Der Grad, falls verhandeln, einer gemeinsamen Datennutzung zwischen Strängen eines CTA ist durch das CTA-Programm bestimmt; es ist somit zu beachten, dass in einer speziellen Anwendung, die CTAs verwendet, die Stränge eines CTA Daten untereinander gemeinsam nutzen können oder auch nicht, wobei dies von dem CTA-Programm bestimmt ist, und die Begriffe „CTA” und „Strang-Array” werden hierin als Synonym verwendet.
  • Der SM 310 stellt einen chipinternen (internen) Datenspeicherplatz mit unterschiedlichen Ebenen an Zugänglichkeit bereit. Spezialregister (nicht gezeigt) sind von der LSU 303 lesbar aber nicht beschreibbar und können verwendet werden, um Parameter zu speichern, die die „Position” jedes Strangs definieren. In einer Ausführungsform enthalten die Spezialregister ein Register pro Strang (oder pro Exec-Einheit 302 in dem SM 310), das eine Strang-ID speichert. Jedes Register einer Strang-ID ist nur von einer entsprechenden Exec-Einheit 302 ansprechbar. Spezialregister können auch zusätzliche Register enthalten, die von allen Strängen lesbar sind, die die gleiche Verarbeitungsaufgabe ausführen, die durch einem Satz an TMD 322 repräsentiert ist (oder von allen LSU 303), die eine CTA-Kennung, die CTA-Dimensionen, die Dimensionen eines Gitters, zu welchem das CTA gehört (eine Warteschlangenposition, wenn die TMD 322 eine Warteschlangenaufgabe anstelle einer Gitteraufgabe kodieren), und eine Kennung der TMD 322, denen das CTA zugeordnet ist, speichern.
  • Wenn die TMD ein Gitter-TMD sind, bewirkt die Ausführung der TMD, dass eine festgelegte Anzahl an CTAs gestartet und ausgeführt wird, um die festgelegte Menge an Daten zu verarbeiten, die in der Warteschlange gespeichert sind. Die Anzahl an CTAs ist als das Produkt der Gitterbreite, Höhe und Tiefe angegeben. Die festgelegte Menge an Daten kann in den TMD 322 gespeichert sein, oder die TMD können einen Zeiger auf die Daten speichern, die von den CTAs verarbeitet werden. Die TMD können ferner eine Startadresse des Programms enthalten, das von den CTAs ausgeführt wird.
  • Wenn die TMD Warteschlange-TMD sind, dann kann eine Warteschlangeneigenschaft der TMD verwendet werden, was bedeutet, dass die zu verarbeitende Datenmenge nicht notwendigerweise festgelegt ist. Warteschlangeneinträge speichern Daten zur Verarbeitung durch die CTAs, die den TMD 322 zugeordnet sind. Die Warteschlangeneinträge können auch eine Kind-Aufgabe repräsentieren, die von weiteren TMD während der Ausführung eines Strangs erzeugt wird, wodurch eine eingebettete Parallelität geschaffen wird. Typischerweise wird die Ausführung des Strangs oder des CTA, das den Strang enthält, unterbrochen, bis die Ausführung der Kind-Aufgabe abgeschlossen ist. Die Warteschlange kann in den TMD oder separat zu den TMD 322 gespeichert werden, in welchem Falle die TMD einen Warteschlangenzeiger auf die Warteschlange speichern. Vorteilhafterweise können die von der Kind-Aufgabe erzeugten Daten in die Warteschlange geschrieben werden, während die TMD, die die Kind-Aufgabe repräsentieren, ausgeführt werden. Die Warteschlange kann als eine Ringwarteschlange realisiert werden, so dass die gesamte Datenmenge nicht auf die Größe der Warteschlange beschränkt ist.
  • CTAs, die einem Gitter angehören, haben implizite Parameter für die Gitterbreite, Höhe und Tiefe, die die Position des jeweiligen CTA innerhalb des Gitters angegeben. Spezialregister werden während der Initialisierung in Reaktion auf Befehle beschrieben, die über den Frontbereich 212 von dem Gerätetreiber 103 empfangen werden, und die Register ändern sich während der Ausführung einer Verarbeitungsaufgabe nicht. Der Frontbereich 212 disponiert jede Verarbeitungsaufgabe für die Ausführung. Jedes CTA ist einem speziellen Satz an TMD für die gleichzeitige Ausführung einer oder mehrerer Aufgaben zugeordnet. Ferner kann ein einzelner GPC 208 mehrere Aufgaben gleichzeitig ausführen.
  • Ein Parameterspeicher (nicht gezeigt) speichert Laufzeitparameter (Konstanten), die von einem beliebigen Strang innerhalb des gleichen CTA (oder einer LSU 303) gelesen aber nicht beschrieben werden können. In einer Ausführungsform leitet der Gerätetreiber 103 Parameter dem Parameterspeicher zu, bevor der SM 310 angewiesen wird, die Ausführung einer Aufgabe zu beginnen, die diese Parameter verwendet. Ein beliebiger Strang innerhalb eines CTA (oder eine Exec-Einheit 302 innerhalb des SM 310) kann auf den globalen Speicher mittels einer Speicherschnittstelle 214 zugreifen. Teile des globalen Speichers können in dem L1-Cache-Speicher 320 liegen.
  • Eine lokale Registerdatei 304 wird von jedem Strang als Arbeitsbereich verwendet; jedes Register ist für die ausschließliche Nutzung durch einen einzigen Strang reserviert, und Daten in einem Register der lokalen Registerdatei 304 sind nur für den Strang verfügbar, dem das Register zugewiesen ist. Die lokale Registerdatei 304 kann als eine Registerdatei realisiert sein, die physikalisch oder logisch in P Bahnen unterteilt ist, wobei jede eine gewisse Anzahl an Einträgen (wobei jeder Eintrag beispielsweise ein 32-Bit-Wort speichern kann) aufweist. Jeder der N Exec-Einheiten 302 und jeder der P Lade-Speichereinheiten LSU 303 ist eine einzelne Bahn zugewiesen, und entsprechende Einträge in unterschiedlichen Bahnen können mit Daten für unterschiedliche Stränge, die in dem gleichen Programm ausgeführt werden, angereichert werden, um eine SIMD-Ausführung zu ermöglichen. Unterschiedliche Teile der Bahnen können unterschiedlichen Gruppen der G gleichzeitigen Stranggruppen zugewiesen sein, so dass auf einen gegebenen Eintrag in der lokalen Registerdatei 304 nur von einem speziellen Strang zugegriffen werden kann. In einer Ausführungsform sind gewisse Einträge innerhalb der lokalen Registerdatei 304 für die Speicherung von Strangkennungen reserviert, wodurch eines der Spezialregister realisiert wird. Ferner speichert ein gleichförmiger L1-Cache-Speicher 320 gleichförmige oder konstante Werte für jede Bahn der N Exec-Einheiten 302 und der P Lade-Speichereinheiten LSU 303.
  • Der gemeinsam genutzte Speicher 306 ist für Stränge innerhalb eines einzelnen CTA zugänglich; anders ausgedrückt, jede Stelle in dem gemeinsam benutzten Speicher 306 ist für einen beliebigen Strang innerhalb des gleichen CTA (oder eine Verarbeitungseinheit innerhalb des SM 310) zugänglich. Der gemeinsam genutzte Speicher 306 kann als eine gemeinsame benutzte Registerdatei oder ein gemeinsam benutzter chipinterner Cache-Speicher mit einer Verbindung realisiert werden, die es einer beliebigen Verarbeitungseinheit ermöglicht, jede Stelle in dem gemeinsam benutzten Speicher zu lesen oder zu beschreiben. In anderen Ausführungsformen kann der gemeinsam benutzte Zustandsraum auf ein Gebiet pro CTA eines chipexternen Speichers abgebildet sein, und kann in dem L1-Cache-Speicher 320 zwischengespeichert sein. Der Parameterspeicher kann als ein spezieller Abschnitt innerhalb der gleichen gemeinsamen benutzten Registerdatei oder als ein gemeinsam benutzter Crash-Speicher realisiert sein, der den gemeinsam benutzten Speicher 306 realisiert, oder kann als eine separate gemeinsame benutzte Registerdatei oder ein chipinterner Cache-Speicher realisiert sein, auf den die LSUs 303 nur einen lesenden Zugriff haben. In einer Ausführungsform wird der Bereich, der den Parameterspeicher bildet, auch verwendet, um die CTA-ID und die Aufgaben-ID sowie die CTA- und Gitter-Abmessungen oder Warteschlangenposition zu speichern, wodurch Teile der Spezialregister realisiert werden. Jede LSU 303 in dem SM 310 ist mit einer vereinheitlichten Adressenzuordnungseinheit 352 verbunden, die eine Adresse, die für Lade- und Speicherbefehle bereitgestellt wird, die in einem vereinheitlichten Speicherraum angegeben sind, eine Adresse in jedem einzelnen Speicherraum umwandelt. Folglich kann ein Befehl verwendet werden, um auf den lokalen, den gemeinsam benutzten oder den globalen Speicherraum zuzugreifen, indem eine Adresse in dem vereinheitlichten Speicherraum angegeben wird.
  • Der L1-Cache-Speicher 320 in jedem SM 310 kann verwendet werden, um private lokale Daten pro Strang und auch globale Daten pro Anwendung zwischenzuspeichern. In einigen Ausführungsformen können die gemeinsamen benutzten Daten pro CTA in dem L1-Cache-Speicher 320 zwischengespeichert werden. Die LSU 303 sind mit dem gemeinsam benutzten Speicher 306 und dem L1-Cache-Speicher 320 über eine Speicher- und Cache-Verbindung 380 verbunden.
  • Es ist ersichtlich, dass die hierin beschriebene Kernarchitektur anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungseinheiten, beispielsweise SM 310, in einem GPC 208 enthalten sein. Wie ferner in 2 gezeigt ist, kann eine PPU 202 eine beliebige Anzahl an GPC 208 enthalten, die vorteilhafterweise in funktionaler Hinsicht ähnlich zueinander sind, so dass das Ausführungsverhalten nicht davon abhängt, welcher GPC 208 welche spezielle Verarbeitungsaufgabe empfängt. Ferner kann jeder GPC 208 vorteilhafterweise unabhängig von anderen GPCs 208 unter Verwendung separater und unterscheidbarer Verarbeitungseinheiten, L1-Cache-Speicher arbeiten, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen.
  • Der Fachmann auf dem Gebiet erkennt, dass die in den 13 beschriebene Architektur in keiner Weise den Schutzbereich der vorliegenden Erfindung einschränkt und dass die hierin gelehrten Techniken in einer beliebigen geeignet ausgebildeten Verarbeitungseinheit realisiert werden können, wozu gehören, ohne Einschränkung, eine oder mehrere CPUs, eine oder mehrere Mehrkern-CPUs, eine oder mehrere PPUs 202, ein oder mehrere GPCs 208, eine oder mehrere grafische Verarbeitungseinheiten oder Verarbeitungseinheiten für Allgemeinzwecke, oder dergleichen, ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen.
  • Kontextumschaltung der Granularität eines kooperativen Strang-Arrays während der Haftstellenbehandlung
  • 4 ist eine Blockansicht, die eine Reihe von Ketten 404 in einem kooperativen Strang-Array (CTA) 402 zeigt, die in einem Datenstrom-Multiprozessor 310(0) gemäß einer Ausführungsform der vorliegenden Erfindung ausgeführt werden. Der SM 310(0) umfasst eine Ausführungseinheiten-(EU-)Gruppe 302, die N Ausführungseinheiten (EU) 302(0)302(N – 1) enthält, wie in 3 gezeigt ist. Das CTA 402 enthält m Ketten, die als Ketten 404(0)404(m – 1) gezeigt sind. Eine Gruppe aus gleichzeitig ausgeführten Strängen innerhalb des SM 310(0) bildet eine Kette 404, wobei jeder Strang in einer Kette 404 die gleichen Programmbefehle mit unterschiedlichen Eingangsdaten ausführt. Jeder Strang in einer gegebenen Kette 404 wird in einer anderen EU 302(0)302(M – 1) in der EU-Gruppe 302 ausgeführt. Wenn eine Kette 404(0) im Verlaufe der Zeit die Pipeline der EU-Gruppe 302 durchläuft, kann die Kette 404(1) in die Pipeline der EU-Gruppe 302 eintreten, so dass die Kette 404(0) und die Kette 404(1) gleichzeitig aber in unterschiedlichen Stufen der Pipeline verarbeitet werden. Wenn in ähnlicher Weise die Ketten 404(0), 404(1) durch die Pipeline der EU-Gruppe 302 laufen, können weitere Ketten in die Pipeline eintreten und können gleichzeitig mit den Ketten 404(0), 404(1) ausgeführt werden.
  • Wie gezeigt, sind die Ketten 404 so dargestellt, dass die Ketten 404 von unten nach oben ausgeführt werden. Folglich wird ein Befehl (nicht gezeigt), der an der Unterseite der Kette 404 angeordnet ist, früher ausgeführt als ein Befehl an der Oberseite der Kette 404. In einigen Ausführungsformen kann die EU-Gruppe 302 die Stränge 404 aus dem CTA 402 gleichzeitig mit den Ketten aus anderen CTAs (nicht gezeigt) ausführen. In diversen Ausführungsformen kann jede Kette ein entsprechendes CTA ermitteln, zu dem die Kette gehört, entweder explizit über eine Kennung auf CTA-Ebene, auf die die Kette zugreifen kann, implizit über eine Strangkennung oder Kettenkennung, die eindeutig das CTA kennzeichnet, oder über einen anderen technisch machbaren Ansatz.
  • 5 ist eine Blockansicht, die eine Reihe von Ketten 404 in einem kooperativen Strang-Array (CTA) 402 zeigt, die in einem Datenstrom-Multiprozessor 310(0) gemäß einer weiteren Ausführungsform der vorliegenden Erfindung ausgeführt werden. Der SM 310(0) und das CTA 402 arbeiten im Wesentlichen ähnlich zu den SM 310(0) und dem CTA 402 aus 4 mit der Ausnahme, wie dies nachfolgend beschrieben ist.
  • Wie gezeigt, führt die Kette 404(0) einen Haftstellenbefehl 502 aus, der bewirkt, dass alle Ketten 404(0)404(m – 1) in eine Haftstellenbehandlungsroutine 506 eintreten. In einigen Ausführungsformen kann die Kette 404(0), die den Haftstellenbefehl 502 ausführt, vorhergehende bzw. einleitende Befehle 508 beim Eintritt in die Haftstellenbehandlungsroutine 506 ausführen, und kann dann den Rest der Haftstellenbehandlungsroutine 506 ausführen. Die Ketten 404(1)404(m – 1), die den Haftstellenbefehl 502 nicht ausführten, können die Haftstellenbehandlungsroutine 506 ausführen, aber nicht die einleitenden Befehle bzw. vorhergehenden Befehle 508. Bei Beendigung der Ausführung der Haftstellenbehandlungsroutine 506 verlässt die Kette 404(0) die Haftstellenbehandlungsroutine 506 und ist dann bereit, den SM 310(0) zu verlassen. Andere Stränge 404(1)404(m – 1) in dem CTA 402 beendet ebenfalls die Ausführung der Haftstellenbehandlungsroutine 506 und verlassen die Haftstellenbehandlungsroutine 506. In einigen Ausführungsformen können Ketten, die in dem SM 310(0) ausgeführt werden und mit CTAs (nicht gezeigt) verknüpft sind, die nicht das CTA 402 sind, ebenfalls in die Haftstellenbehandlungsroutine 506 eintreten. Beim Eintritt in die Haftstellenbehandlungsroutine 506 können derartige Ketten ermitteln, dass die Kette, die den Haftstellenbefehl ausführt, mit einem anderen CTA 402 verknüpft ist. Folglich können derartige Ketten rasch die Haftstellenbehandlungsroutine 506 verlassen, bevor sie den Hauptteil der Befehle in der Haftstellenbehandlungsroutine 506 ausführen.
  • Haftstellen werden in einer Vielzahl von Szenarien angetroffen. Wie zuvor beschrieben ist, kann eine Haftstelle auftreten, wenn die Ausführung eines Befehls eine Ausnahme bewirkt, etwa einen Versuch, durch Null zu teilen oder auf eine unzulässige Speicherstelle zuzugreifen. Ein weiteres Beispiel einer Haftstelle tritt auf, wenn ein Unterbrechungspunktbefehl ausgeführt wird. Im hierin verwendeten Sinne wird eine Kette, die das Auftreten einer Haftstelle hervorruft, als „haftend bzw. eingefangen” bezeichnet. Ferner wird eine Kette, die eine Haftstelle beinhaltet, als eine „Haftstellenkette” bezeichnet. Wenn schließlich die Kette 404(0) den Haftstellenbefehl 502 enthält, wird hierin die Kette 404(0) als eine Haftstellenkette 404(0) bezeichnet.
  • Während der Haftstellenbehandlung kann jede der Ketten 404(1)404(m – 1) eine Kontextumschaltung ausführen, nachdem die vorhergehenden bzw. einleitenden Befehle 508 ausgeführt sind. Generell ist die Kontextumschaltung der Prozess zur Speicherung und erneuten Speicherung des Zustands (hierin als Kontextdaten oder Kontext bezeichnet) einer Verarbeitungseinheit, so dass die Ausführung von dem gleichen Punkt aus zu einer späteren Zeit wieder aufgenommen werden kann. In einer Ausführungsform kann eine Kontextumschaltung, wenn sie auf die Ausführung der Haftstellenbehandlungsroutine 506 angewendet wird, beinhalten, ohne Einschränkung, das Anhalten der Ausführung der Kette 404 durch die EU-Gruppe 302, und die Speicherung des Kontexts für eine spätere Wiederherstellung. Der während einer Kontextumschaltung gespeicherte Kontext enthält den Inhalt diverser Speicherelemente, die zu der Kette 404 gehören, die der Kontextumschaltung unterliegt, wozu gehören, ohne Einschränkung, lokale Register, lokaler Speicher, gemeinsam benutzter Speicher, der die aktuell abgearbeitete Kette betrifft. Sobald der Kontext für jede Kette 404(0)404(m – 1) in dem CTA 402 gespeichert ist und alle Ketten 404(0)404(m – 1) in dem CTA 402 die Haftstellenbehandlungsroutine 506 verlassen haben, kann das CTA 402 aus der aktiven Ausführung in dem SM 310(0) entfernt oder ”abgeschlossen” werden. Die Entfernung des CTA 402 aus der aktiven Ausführung gibt Ressourcen in dem SM 310(0) für die Verarbeitung von Ketten für andere CTAs frei.
  • 6A ist eine Blockansicht, die eine Haftstellenursachentabelle (TRT) 600 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. In diversen Ausführungsformen kann die TRT 600 in einer Speicherstelle abgelegt sein, auf die jede Kette 404 in dem CTA 402 zugreifen kann, wozu, ohne Einschränkung, gehören: der gemeinsam benutzte Speicher 306, der PP-Speicher 204 oder der Systemspeicher 104. Wie gezeigt, enthält die TRT 600 einen TRT-Eintrag 602 für jede Kette 404 (beispielsweise die TRT-Einträge 602(0) bis 602(W – 1)), wobei W die Anzahl an Ketten ist, die in dem SM 310(0) ausgeführt werden. Jeder TRT-Eintrag 602 enthält, ohne Einschränkung, eine Haftstellenbehandlung 602, einen Programmzähler 606, eine Kontextpufferadresse 608, Optionen 610 und eine Strangkennung 612. Der Vorgang, die Elemente 604612 für einen gegebenen TRT-Eintrag 602 zu beschreiben, wird hierin als TRT-Eintragsaktualisierung oder einfach als eine TRT-Aktualisierung bezeichnet. Es wird der Programmzähler 606 verwendet, um die Position einer anwenderspezifizierten Sicherungsroutine zu speichern. Die anwenderspezifizierte Sicherungsroutine umfasst Operationen, die der SM 310 ausführt, nachdem eine Haftstelle aufgetreten ist, aber bevor das CTA 402 die Haftstellenbehandlungsroutine 506 verlässt. In einigen Ausführungsformen kann die anwenderspezifizierte Sicherungsroutine, die mit dem Programmzähler 606 verknüpft ist, ausgeführt werden, nachdem der Kontext gespeichert ist, wie zuvor in Verbindung mit 5 beschrieben ist. Die Kontextpufferadresse 608 wird unter anderem zur Speicherung der Position eines Kontextpuffers verwendet. Der Kontextpuffer kann auch verwendet werden, um Daten zu speichern, die mit dem internen Zustand des SM 310 zum Zeitpunkt der Kontextumschaltung verknüpft sind. Die Optionen 610 werden unter anderem zur Einstellung von Anwenderoptionen für jeden TRT-Eintrag 602 verwendet. Die Strangkennung 612 wird verwendet, um anzugeben, welche Kette 404 welchem TRT-Eintrag 602 entspricht. In diversen Ausführungsformen kann die Strangkennung 612 eine beliebige Kennung pro Kette oder pro Strang sein, die in eindeutiger Weise die Kette 404 kennzeichnet, die dem TRT-Eintrag 602 entspricht, wozu gehören, ohne Einschränkung, eine physikalische Strangkennung, die den Teil der PPU 112 angibt, in der die Kette ausgeführt wird, oder eine eindeutige logische Strangkennung.
  • 6B gibt ein Flussdiagramm von Verfahrensschritten an, die einen Prozess zur Ausführung einer TRT-Eintragsaktualisierung gemäß einer Ausführungsform der vorliegenden Erfindung zeigen. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 15 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 620 im Schritt 622, in welchem, nachdem ein Strang einen Haftstellenbefehl ausgeführt hat, eine Kette 404 Befehle ausführt, die ein Auslesen der Strangkennung 612 bewirken, die mit der Haftstellenkette 404 verknüpft ist. Im Schritt 624 führt die Kette 404 Befehle aus, die eine Suche nach dem geeigneten TRT-Eintrag 602 auf der Grundlage der Strangkennung 612 bewirken, die zu der Haftstellenkette 404(0) gehört. In einer Ausführungsform führt im Schritt 626 die Kette 404 einen IDE-Befehl aus und deaktiviert Interruptbehandlungen. Im Schritt 628 führt die Kette 404 Befehle aus, die das Schreiben von Daten, die zu der Haftstellenkette 404 gehören, in die Parameter des TRT-Eintrags 602 bewirken. Die Parameter des TRT-Eintrags 602 umfassen, ohne einschränkend zu sein, die Haftstellenursache bzw. die Haftstellenursachentabelle 104, den Programmzähler 606, die Kontextpufferadresse 608, die Optionen 610 und die Strangkennung 612. In einigen Ausführungsformen kann im Schritt 630 die EU 410 einen IDE-Befehl ausführen und kann die Interruptbehandlungen aktivieren.
  • In einer Ausführungsform kann ein IDE-Befehl es ermöglichen, dass Interrupte, etwa Kontextumschaltung, aktiviert und deaktiviert werden, und ein derartiger Befehl kann nützlich sein, wenn kritische Abschnitte aus Befehlen gegenüber einer Schädigung geschützt werden sollen. Beispielsweise könnte eine erste TRT-Aktualisierung unterbrochen werden, um eine zweite TRT-Aktualisierung oder eine Kontextumschaltung auszuführen. Diese Möglichkeit ist aufgrund der Tatsache problematisch, dass eine TRT-Aktualisierung über mehrere Befehlszyklen hinweg auftreten könnte, und wenn eine TRT-Aktualisierung unterbrochen wird, dann könnten gegebenenfalls eines oder mehrere der Elemente 604612 nur teilweise aktualisiert werden. Wenn ein TRT-Eintrag 602 nur teilweise aktualisiert wird, dann kann der TRT-Eintrag 602 geschädigt werden. Daher kann der Vorgang der Aktualisierung des TRT-Eintrags 602 als ein kritischer Abschnitt der Befehle innerhalb der Haftstellenbehandlungsroutine betrachtet werden, der nicht unterbrochen werden sollte.
  • In einer Ausführungsform kann ein IDE-Befehl verwendet werden, um zu veranlassen, dass die TRT-Eintragsaktualisierungsprozedur nicht unterbrochen wird, so dass verhindert wird, dass eine erste TRT-Aktualisierung von einer zweiten TRT-Aktualisierung oder von einer Kontextumschaltung unterbrochen wird. Ein zusätzlicher Vorteil eines IDE-Befehls besteht darin, dass ein IDE-Befehl verwendet werden kann, um andere kritische Abschnitte an Code zu schützen, etwa Befehle zur Freigabe von Ressourcen, nachdem ein CTA 402 abgeschlossen ist, oder nach gewissen Bereichen vom Systemaufrufroutinen.
  • 6C6D geben ein Flussdiagramm von Verfahrensschritten an, die einen Prozess zur Ausführung einer Haftstellenbehandlungsroutine gemäß einer Ausführungsform der vorliegenden Erfindung zeigen. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 15 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 640 im Schritt 642, in welchem die Ketten 404 gleichzeitig ausgeführt werden. Im Schritt 644 führt eine einzelne Kette 404 einen Haftstellenbefehl aus, der eine Haftstelle hervorruft. Im Schritt 646 führen die Ketten 404 Befehle aus, die jede Kette 404 veranlassen, den Programmzähler, der mit der jeweiligen Kette 404 verknüpft ist, mit der ersten Befehlsadresse der Haftstellenbehandlungsroutine 506 zu laden (beispielsweise die vorhergehenden bzw. einleitenden Befehle 508). Damit beginnt die Haftstellenbehandlungsroutine. Im Schritt 648 führen die Ketten 404 Befehle aus, die eine Durchsuchung der TRT-Einträge 602 veranlassen. Im Schritt 650 führen die Ketten 404 Befehle aus, die eine Ermittlung bewirken, dahingehend, welche spezielle Kette 404 einen Haftstellenbefehl ausführt, auf der Grundlage der Suche, die im Schritt 648 ausgeführt wurde. Im Schritt 652 führt jede Kette 404 Befehle aus, die eine Bestimmung der Haftstellenursache 604 auf der Grundlage des TRT-Eintrags 602 bewirken, der zu der Kette 404 gehört. Wenn eine Kette 404 das Auftreten einer Haftstelle nicht hervorgerufen hat, dann geht das Verfahren weiter zum Schritt 664 des Verfahrens 660, wie nachfolgend beschrieben ist. Wenn eine Kette 404 das Auftreten einer Haftstelle hervorgerufen hat, dann geht das Verfahren zum Schritt 662 des Verfahrens 660 weiter.
  • Im Schritt 662 führt die Kette 404 die einleitenden Befehle 508 für die Haftstellenkette 404 aus. Im Schritt 664 führt die Kette 404 einen ersten Teil an Befehlen aus, die eine Kontextumschaltung für die Kette 404 bewirken. Im Schritt 666 kann in einer Ausführungsform die Kette 404 einen RTT.FALLTHROUGH-Befehl ausführen. Im Schritt 668 führt die Kette 404 den Rest der Befehle aus, die eine Kontextumschaltung bewirken. Im Schritt 684 führt die Kette 404 ein Anwendersicherungsprogramm durch, um weiteren anwenderdefinierten Kontext zu speichern, indem das Programmzählerregister mit dem Wert geladen wird, der in dem Programmzähler 606 in dem geeigneten TRT-Eintrag 602 gespeichert ist. In einigen Ausführungsformen kann die Kette 404 auch weitere Befehle ausführen, um die Haftstellenbehandlungsroutine 506 abzuschließen. Im Schritt 686 ermittelt die Kette 404, ob alle Ketten 404 in dem CTA 402, die die Haftstellenbehandlungsroutine 506 ausgeführt hatten, entweder einen RTT-Befehl oder einen RTT.FALLTHROUGH-Befehl ausgeführt haben. Wenn nicht alle Ketten entweder den RTT-Befehl oder einen RTT.FALLTHROUGH-Befehl ausgeführt haben, dann wartet das Verfahren im Schritt 686. Wenn im Schritt 686 alle Ketten entweder einen RTT-Befehl oder einen RTT.FALLTHROUGH-Befehl ausgeführt haben, dann geht das Verfahren 660 zum Schritt 688 weiter, in welchem die Ketten 404 in dem CTA 402 die aktive Ausführung in dem SM 310(0) verlassen.
  • In einer Ausführungsform der Erfindung kann ein RTT.FALLTHROUGH-Befehl ausgeführt werden, um mögliche Leistungsprobleme zu berücksichtigen, die auftreten, wenn weniger als alle CTAs innerhalb eines SM 310 einen Haftstellenbefehl enthalten. Wenn ein Haftstellenbefehl ausgeführt wird, kann der Fortschritt aller CTAs 402 innerhalb des SM 310 unterbrochen werden, um eine geeignete Handhabung des Haftstellenbefehls zu ermöglichen. Ferner kann diese Unterbrechung solange fortgesetzt werden, bis die Ausführung der Haftstellenbehandlung 506, die mit den Haftstellenketten 404 verknüpft ist, abgeschlossen ist. Wenn daher CTAs ohne Haftstellen die Haftstellenbehandlung verlassen können, bevor die Ausführung der Haftstellenbehandlungsroutine 506 abgeschlossen ist, dann können CTAs ohne Haftstellen die Ausführung rascher wieder aufnehmen.
  • In einer Ausführungsform kann ein zusammenwachsendes Fenster die Haftstellenbehandlung für eine vorbestimmte Anzahl (Z) an Zyklen verzögern, so dass mehrere Haftstellen aus der Haftstellenkette angetroffen und mit einer einzelnen Kontextumschaltung behandelt werden können. In einer weiteren Ausführungsform kann die Zahl Z mit einer privilegierten Registereinstellung konfigurierbar sein.
  • 7 gibt ein Flussdiagramm von Verfahrensschritten an, die einen Prozess zur Behandlung einer Haftstelle mit einem zusammenwachsenden Fenster gemäß einer Ausführungsform der vorliegenden Erfindung zeigen. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 15 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 710 im Schritt 712, in welchem eine Kette 404 mit der Ausführung einer Gruppe zusammengehörender Stränge beginnt. Im Schritt 714 führt jeder Strang in der Kette 404 einen nächsten Befehl aus. Im Schritt 716 ermittelt die Kette 404, ob der aktuelle Befehl eine Haftstelle hervorruft. Wenn der aktuelle Befehl keine Haftstelle hervorruft, dann kehrt das Verfahren zurück zum Schritt 714, in welchem jeder Strang in der Kette 404 den nächsten Befehl ausführt. Wenn im Schritt 716 der aktuelle Befehl eine Haftstelle bewirkt, dann geht das Verfahren 710 weiter zum Schritt 718, in welchem die Kette 404 die Ausführung um Z Zyklen unterbricht. Diese Verzögerung um Z Zyklen zur Behandlung der Haftstelle ermöglicht es, dass andere Haftstellen auftreten können (beispielsweise aus anderen Strängen, die in der Haftstellenkette oder in anderen Ketten in dem CTA 402 ausgeführt werden). Derartige zusätzliche Haftstellen werden mit der ersten Haftstelle vereinigt und mittels einer einzelnen Kontextumschaltung der Ketten in dem CTA 402 behandelt. Im Schritt 720 beginnt die Kette 404 mit der Ausführung der Haftstellenbehandlungsroutine 506, wie dies zuvor in Verbindung mit den 6C6B beschrieben ist.
  • Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert werden. Das bzw. die Programme des Programmprodukts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können in einer Vielzahl von computerlesbaren Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne Einschränkung: (i) nicht-beschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen in einem Computer, etwa CD-ROM-Disketten, die von einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, ROM-Chips oder eine andere Art eines nicht flüchtigen Halbleiterspeichers), auf welchen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder ein Festplattenlaufwerk oder eine andere Art eines Halbleiterspeichers mit wahlfreiem Zugriff), auf welchen änderbare Information gespeichert ist.
  • Die Erfindung ist mit Bezug zu speziellen Ausführungsformen beschrieben worden. Der Fachmann erkennt jedoch, dass diverse Modifizierungen und Änderungen daran vorgenommen werden können, ohne von dem breiteren Grundgedanken und dem Schutzbereich der Erfindung abzuweichen, wie sie in den angefügten Patentansprüchen angegeben ist. Die vorhergehende Beschreibung und die Zeichnungen sind daher als anschaulich und nicht als beschränkend zu betrachten.
  • Daher ist der Schutzbereich der vorliegenden Erfindung durch die folgenden Patentansprüche festgelegt.

Claims (10)

  1. Ein Verfahren zur Ausführung eines ersten Haftstellenbefehls, der von einem Strang angetroffen wird, der in einem Verarbeitungskern ausgeführt wird, wobei das Verfahren umfasst: für jede Stranggruppe, die in mehreren Stranggruppen enthalten ist, die in dem Verarbeitungskern ausgeführt werden, Eintreten in eine Haftstellenbehandlungsroutine in Reaktion darauf, dass ein erster Strang, der in einer der Stranggruppen enthalten ist, den ersten Haftstellenbefehl ausführt; für jede Stranggruppe, die in den mehreren Stranggruppen enthalten ist, Ermitteln, ob eine entsprechende Kennung eines kooperativen Strang-Arrays (CTA) mit einem CTA verknüpft ist, das den ersten Strang enthält; und wenn die entsprechende CTA-Kennung nicht mit dem CTA verknüpft ist, das den ersten Strang enthält, dann Verlassen der Haftstellenbehandlungsroutine, oder wenn die entsprechende CTA-Kennung mit dem CTA verknüpft ist, das den ersten Strang enthält, dann Ausführen einer oder mehrerer Operationen, die zu der Haftstellenbehandlungsroutine gehören.
  2. Das Verfahren nach Anspruch 1, wobei, wenn die entsprechende CTA-Kennung mit dem CTA verknüpft ist, das den ersten Strang enthält, das Verfahren ferner umfasst: Speichern eines ersten Teils eines Kontexts, der zu einer ersten Stranggruppe gehört, in einem Speicher; vor der Speicherung eines zweiten Teils des Kontexts, der zu der ersten Stranggruppe gehört, Angeben, dass jede Stranggruppe, die in den mehreren Stranggruppen enthalten ist, die Ausführung außerhalb der Haftstellenbehandlungsroutine wieder aufnehmen kann; und Speichern des zweiten Teils des Kontexts, der zu der ersten Stranggruppe gehört, in dem Speicher.
  3. Das Verfahren nach Anspruch 2, das ferner umfasst: Ermitteln, dass jede Stranggruppe innerhalb des CTA, das den ersten Strang enthält, eine oder mehrere Operationen ausgeführt hat, die zu der Haftstellenbehandlungsroutine gehören; und Entfernen jeder Stranggruppe innerhalb des CTA, das den ersten Strang enthält, aus der aktiven Ausführung in dem Verarbeitungskern.
  4. Das Verfahren nach Anspruch 2, das ferner umfasst: Ermitteln, dass alle Stranggruppen, die in dem Verarbeitungskern abgearbeitet werden, angegeben haben, dass jede Stranggruppe, die in den mehreren Stranggruppen enthalten ist, die Ausführung außerhalb der Haftstellenbehandlungsroutine wieder aufnehmen kann; und Veranlassen, dass die erste Stranggruppe die Ausführung außerhalb der Haftstellenbehandlungsroutine wieder aufnimmt.
  5. Das Verfahren nach Anspruch 2, das ferner umfasst: Ermitteln, dass die erste Stranggruppe den Strang enthält, der den ersten Haftstellenbefehl angetroffen hat; und Ausführen eines oder mehrerer Befehle vor der Speicherung des ersten Teils des Kontexts.
  6. Das Verfahren nach Anspruch 5, wobei Ermitteln, dass die erste Stranggruppe den Strang enthält, der den ersten Haftstellenbefehl antraf, umfasst: Abrufen eines Eintrags, der zu der ersten Stranggruppe gehört, aus einer Datenstruktur, die Haftstelleninformation für die Stranggruppe, die in den mehreren Stranggruppen enthalten ist, umfasst; und Ermitteln, dass der erste Strang den mit der ersten Stranggruppe verknüpften Eintrag aktualisiert hat.
  7. Das Verfahren nach Anspruch 2, das ferner umfasst: vor der Ausführung der einen oder mehrere Operationen, die zu der Haftstellenbehandlungsroutine gehören, Abwarten einer vorbestimmten Zeitdauer; und Ermitteln, dass ein zweiter Strang, der in einer der Stranggruppen enthalten ist, einen zweiten Haftstellenbefehl abarbeitet.
  8. Ein Computersystem mit: einem Speicher, der ausgebildet ist, Daten, die eine Haftstellenbehandlungsroutine betreffen, zu speichern; einem Prozessor, der ausgebildet ist, einen Haftstellenbefehl auszuführen, der von einem Strang angetroffen wird, der in einem Verarbeitungskern ausgeführt wird, durch Ausführen der Schritte: für jede Stranggruppe, die in mehreren Stranggruppen enthalten ist, die in dem Verarbeitungskern ausgeführt werden, Eintreten in eine Haftstellenbehandlungsroutine in Reaktion darauf, dass ein erster Strang, der in einer der Stranggruppen enthalten ist, den Haftstellenbefehl ausführt; für jede Stranggruppe, die in den mehreren Stranggruppen enthalten ist, Ermitteln, ob eine entsprechende Kennung eines kooperativen Strang-Arrays (CTA) mit einem CTA verknüpft ist, das den ersten Strang enthält; und wenn die entsprechende CTA-Kennung nicht mit dem CTA verknüpft ist, das den ersten Strang enthält, dann Verlassen der Haftstellenbehandlungsroutine, oder wenn die entsprechende CTA-Kennung mit dem CTA verknüpft ist, das den ersten Strang enthält, dann Ausführen einer oder mehrerer Operationen, die zu der Haftstellenbehandlungsroutine gehören.
  9. Das Computersystem nach Anspruch 8, wobei, wenn die entsprechende CTA-Kennung mit dem CTA verknüpft ist, das den ersten Strang enthält, dann der Prozessor ferner ausgebildet ist, die Schritte auszuführen: Speichern eines ersten Teils eines Kontexts, der mit einer ersten Stranggruppe verknüpft ist, in einem Speicher; vor der Speicherung eines zweiten Teils des Kontexts, der mit der ersten Stranggruppe verknüpft ist, Angeben, dass jede Stranggruppe, die in den mehreren Stranggruppen enthalten ist, die Ausführung außerhalb der Haftstellenbehandlungsroutine wieder aufnehmen kann; und Speichern des zweiten Teils des Kontexts, der mit der ersten Stranggruppe verknüpft ist, in dem Speicher.
  10. Das Computersystem nach Anspruch 9, wobei der Prozessor ferner ausgebildet ist, die Schritte auszuführen: Ermitteln, dass sie die Stranggruppe in dem CTA, das den ersten Strang enthält, eine oder mehrere Operationen ausgeführt hat, die zu der Haftstellenbehandlungsroutine gehören; und Entfernen jeder Stranggruppe innerhalb des CTA, das den ersten Strang enthält, aus der aktiven Ausführung in dem Verarbeitungskern.
DE201310022258 2012-12-27 2013-12-09 Kontextumschaltung für Granulatität eines kooperativen Strang-Arrays während einer Haftstellenbehandlung Pending DE102013022258A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/728,784 US10289418B2 (en) 2012-12-27 2012-12-27 Cooperative thread array granularity context switch during trap handling
US13/728,784 2012-12-27

Publications (1)

Publication Number Publication Date
DE102013022258A1 true DE102013022258A1 (de) 2014-07-03

Family

ID=50928537

Family Applications (1)

Application Number Title Priority Date Filing Date
DE201310022258 Pending DE102013022258A1 (de) 2012-12-27 2013-12-09 Kontextumschaltung für Granulatität eines kooperativen Strang-Arrays während einer Haftstellenbehandlung

Country Status (4)

Country Link
US (1) US10289418B2 (de)
CN (1) CN103902369A (de)
DE (1) DE102013022258A1 (de)
TW (1) TW201435576A (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102177871B1 (ko) 2013-12-20 2020-11-12 삼성전자주식회사 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법
US10409614B2 (en) * 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10593010B2 (en) * 2017-12-13 2020-03-17 Microsoft Technology Licensing, Llc Techniques for capturing and executing graphics processing operations
CN109726023B (zh) * 2018-12-12 2023-05-23 中国航空工业集团公司西安航空计算技术研究所 一种支持多线程多上下文的图形任务同步管理方法
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4761733A (en) * 1985-03-11 1988-08-02 Celerity Computing Direct-execution microprogrammable microprocessor system
US5961629A (en) * 1991-07-08 1999-10-05 Seiko Epson Corporation High performance, superscalar-based computer system with out-of-order instruction execution
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6128641A (en) * 1997-09-12 2000-10-03 Siemens Aktiengesellschaft Data processing unit with hardware assisted context switching capability
US6629252B1 (en) * 1999-10-28 2003-09-30 International Business Machines Corporation Method for determining if a delay required before proceeding with the detected interrupt and exiting the interrupt without clearing the interrupt
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
US7539853B2 (en) 2002-11-18 2009-05-26 Arm Limited Handling interrupts in data processing of data in which only a portion of a function has been processed
GB2396713B (en) 2002-11-18 2005-09-14 Advanced Risc Mach Ltd Apparatus and method for controlling access to a memory unit
US7779238B2 (en) 2004-06-30 2010-08-17 Oracle America, Inc. Method and apparatus for precisely identifying effective addresses associated with hardware events
US7861060B1 (en) 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US20080059677A1 (en) * 2006-08-31 2008-03-06 Charles Jens Archer Fast interrupt disabling and processing in a parallel computing environment
US7937567B1 (en) * 2006-11-01 2011-05-03 Nvidia Corporation Methods for scalably exploiting parallelism in a parallel processing system
US8259576B2 (en) * 2007-03-23 2012-09-04 Intel Corporation Method and apparatus for performing interrupt coalescing
US8522000B2 (en) * 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US9734545B2 (en) * 2009-10-08 2017-08-15 Nvidia Corporation Software methods in a GPU
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US9652282B2 (en) 2011-11-08 2017-05-16 Nvidia Corporation Software-assisted instruction level execution preemption
US20130318268A1 (en) 2012-05-22 2013-11-28 Xockets IP, LLC Offloading of computation for rack level servers and corresponding methods and systems

Also Published As

Publication number Publication date
CN103902369A (zh) 2014-07-02
US20140189329A1 (en) 2014-07-03
US10289418B2 (en) 2019-05-14
TW201435576A (zh) 2014-09-16

Similar Documents

Publication Publication Date Title
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102013017982A1 (de) COMPILER gesteuerte Gebietsdisponierung für SIMD-Ausführung von Strängen
DE102012220029A1 (de) Spekulative Ausführung und Zurücksetzen
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102013022258A1 (de) Kontextumschaltung für Granulatität eines kooperativen Strang-Arrays während einer Haftstellenbehandlung
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102013202495A1 (de) Verfahren zur Durchführung von interaktivem Debugging auf nicht unterbrechbaren Graphikverarbeitungseinheiten
DE102012220267B4 (de) Rechenarbeitsverteilungs - Referenzzähler
DE102013208554A1 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102013208558A1 (de) Verfahren und System zur Verarbeitung verschachtelter Stream-Events
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102013208423A1 (de) Virtuelle Speicherstruktur für Coprozessoren, die Speicherallokationsbegrenzungen haben
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE112012000212T5 (de) Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102013200991A1 (de) Automatisches abhängige-Aufgabe-Anstoßen
DE102013019333A1 (de) Registerzuweisung für als cluster vorliegende mehrebenen-registerdaten
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE112013000369T5 (de) Verwaltung von Threads innerhalb einer Datenverarbeitungsumgebung
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE102018109538A1 (de) Techniken zum umfassenden Synchronisieren einer Ausführung von Threads
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware

Legal Events

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

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

R016 Response to examination communication