DE102012222558B4 - Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System - Google Patents

Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System Download PDF

Info

Publication number
DE102012222558B4
DE102012222558B4 DE102012222558.7A DE102012222558A DE102012222558B4 DE 102012222558 B4 DE102012222558 B4 DE 102012222558B4 DE 102012222558 A DE102012222558 A DE 102012222558A DE 102012222558 B4 DE102012222558 B4 DE 102012222558B4
Authority
DE
Germany
Prior art keywords
processing
data
task
queue
notification signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102012222558.7A
Other languages
English (en)
Other versions
DE102012222558A1 (de
Inventor
Timothy John Purcell
Lacky V. Shah
Jerome F. Duluk jr.
Sean J. Treichler
Karim M. Abdalla
Philip Alexander Cuadra
Brian Pharris
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 DE102012222558A1 publication Critical patent/DE102012222558A1/de
Application granted granted Critical
Publication of DE102012222558B4 publication Critical patent/DE102012222558B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Abstract

Verfahren zum Benachrichtigen eines Aufgabe-Managers (300) in einem Parallelverarbeitungs-Subsystem (112), das mehrere Parallelverarbeitungseinheiten, PPUs (202) aufweist, die jeweils mehrere Verarbeitungscluster (208) aufweisen, dass Daten zur Verarbeitung verfügbar sind, wobei das Verfahren aufweist:Erzeugen, in einer Speicher-Management-Einheit (328) von einem der Verarbeitungscluster (208), eines ersten Benachrichtigungs-Signals, welches zu dem Aufgabe-Manager übermittelt wird, wobei das Benachrichtigungs-Signal einen ersten Versatz für eine Start- Eintragsstelle in einer Queue (375) und einen ersten Delta-Wert, der eine Anzahl von Einträgen in der Queue spezifiziert, wobei die Queue Daten für Verarbeitungsaufgaben enthält;Speichern von ersten Daten, welche mit dem ersten Versatz und dem ersten Delta-Wert assoziiert sind, in der Queue, welche einer ersten Verarbeitungs-Aufgabe entspricht;Erzeugen, in der Speicher-Management-Einheit (328), eines zweiten Benachrichtigungs-Signals, welches an den Aufgabe-Manager (300) übermittelt wird, wobei das Benachrichtigungs-Signal einen zweiten Versatz für die Start-Eintragsstelle und einen zweiten Delta-Wert, der die Anzahl von Einträgen in der Queue spezifiziert, aufweist;Speichern von zweiten Daten, welche mit dem zweiten Versatz und dem zweiten Delta-Wert assoziiert sind, in der Queue, welche der ersten Verarbeitungs-Aufgabe entspricht;Empfangen, durch einen Aufgabe Manager (300) von dem einem Verarbeitungscluster (208), des ersten Benachrichtigungs-Signals und des zweiten Benachrichtigungs-Signals;Bestimmen, ob der erste Versatz und der erste Delta-Wert mit dem zweiten Versatz und dem zweiten Delta-Wert zusammengeführt werden können, und wenn dies möglich ist, einen zusammengeführten Versatz und einen zusammengeführten Delta-Wert zu erzeugen;Plazieren, mittels des Aufgabe-Managers, für ein Verarbeiten von zumindest einem der ersten Daten und der zweiten Daten für die erste Verarbeitungs-Aufgabe in einer Aufgabentabelle des einen Verarbeitungsclusters für eine Verarbeitung von einem der ersten oder zweiten Daten durch den einen Verarbeitungscluster; undVerarbeiten von zumindest eine der ersten und zweiten Daten durch den einen Verarbeitungscluster.

Description

  • HINTERGRUND DER ERFINDUNG
  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft im Allgemeinen Ausführung von Rechenaufgaben und insbesondere Signalisieren, Ordnen (ordering), und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System.
  • BESCHREIBUNG DER BETREFFENDEN TECHNIK
  • Herkömmlicher Weise werden zu verarbeitende Aufgaben in einem Mehrprozessor-System alle von einem einzelnen Eingabe-Strom empfangen. Wenn eine erste Aufgabe Daten erzeugen würde, welche mittels einer zweiten Aufgabe zu prozessieren sind, wird auch die zweite Aufgabe von dem einzelnen Eingabe-Strom empfangen und die Einfügung oder Einsetzung (insertion) der zweiten Aufgabe in den einzelnen Eingabe-Strom wird mittels einer Zentral-Verarbeitungs-Einheit (CPU) durchgeführt, welche separat von dem Mehrprozessor-System ist.
  • Um die Einfügung durchzuführen, muss die CPU informiert werden, dass die zweite Aufgabe bereit ist verarbeitet zu werden, und es muss die Stelle, wo die zweite Aufgabe gespeichert ist, bereitgestellt werden. Verarbeiten der zweiten Aufgabe zieht zusätzliche Latenz aufgrund von Verzögerungen nach sich, welche aus der Kommunikation resultieren, welche zwischen dem Mehrprozessor-System, welches die erste Aufgabe ausführt, und der CPU benötigt ist. Die US 5 438 680 A beschreibt ein Parallelerarbeitungssystem bei dem Verarbeitungsaufgaben randomisiert an einzelne Prozessoren vergeben werden. Die US 2009/0 282 407 A1 beschreibt ein Verfahren zur Zuweisung von Verarbeitungsaufgaben zu Zeitschlitzen.
  • Was in der Technik benötigt ist, ist demgemäß ein Verfahren zum Ermöglichen der Einfügung oder Insertion von erzeugten Aufgaben in eine Planungs-Pipeline (scheduling pipeline) eines Mehrprozessor-Systems ohne die Beteiligung der CPU, insbesondere die Anzahl der möglichen abzuarbeitenden Aufgaben optimiert zu speichern.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Es wird ein System und ein Verfahren zum Ermöglichen der Insertion von erzeugten Verarbeitungs-Aufgaben in eine Planungs-Pipeline eines Mehrprozessor-Systems bereitgestellt und dies ohne eine Intervention mittels einer CPU. Wenn eine Rechenaufgabe, welche ausgeführt wird, eine dynamische Aufgabe erzeugt und Einträge einer Queue in Speicher schreibt, wo Daten für die dynamische Aufgabe gespeichert sind, wird ein widerspiegelndes oder reflektiertes (reflected) Bestätigungssignal erzeugt und direkt zu der Planungs-Einheit des Mehrprozessor-Systems ohne eine Intervention mittels einer CPU übermittelt. Das reflektierte BestätigungsSignal, welches übermittelt ist, umfasst Informationen, welche einer Schreib-Anfrage entspricht, welche Daten in der Queue speichert. Zusätzliche Signale werden während einer Ausführung einer Rechenaufgabe erzeugt und direkt zu der Planungs-Einheit in Antwort auf andere Ereignisse übermittelt, z.B., um Verarbeitung einer dynamischen Aufgabe zu initiieren, um Zwischenspeicher-Einträge ungültig zu machen, welche Daten für die Rechenaufgabe speichern, und zu ermöglichen, dass eine andere Rechenaufgabe geplant wird (scheduling).
  • Das Verfahren gemäß Anspruch 1 der Erfindung zum Benachrichtigen eines Aufgaben-Managers, dass Daten zur Verarbeitung verfügbar sind, umfasst unter anderem ein Erzeugen eines ersten Benachrichtigungs-Signals, welches zu dem Aufgaben-Manager übermittelt wird, wo das Benachrichtigungs-Signal einen ersten Versatz oder eine erste Verschiebung (offset) und einen ersten Delta-Wert aufweist. Erste Daten, welche mit dem ersten Versatz und dem ersten Delta-Wert assoziiert sind, sind in einer Queue gespeichert, welche einer ersten Verarbeitungs-Aufgabe entspricht. Ein zweites Benachrichtigungs-Signal wird erzeugt und zu dem Aufgaben-Manager übermittelt, wobei das Benachrichtigungs-Signal einen zweiten Versatz und einen zweiten Delta-Wert aufweist. Zweite Daten, welche mit dem zweiten Versatz und dem zweiten Delta-Wert assoziiert sind, werden in der Queue gespeichert, welche der ersten Verarbeitungs-Aufgabe entspricht. Das erste Benachrichtigungs-Signal und das zweite Benachrichtigungs-Signal werden empfangen und der Aufgaben-Manager bestimmt, ob der erste Versatz und der erste Delta-Wert mit dem zweiten Versatz und dem zweiten Delta-Wert zusammengeführt werden können, um einen zusammengeführten Versatz und einen zusammengeführten Delta-Wert zu erzeugen. Der Aufgaben-Manager plant (schedules) Verarbeiten von den ersten Daten und/oder den zweiten Daten für die erste Verarbeitungs-Aufgabe in einem Verarbeitungs-Cluster-Feld.
  • Die Erfindung umfasst ein System gemäß Anspruch 2 zum Benachrichtigen eines Aufgaben-Managers, dass Daten zur Verarbeitung verfügbar sind, welches unter anderem eine Queue, eine Speicher-Management-Einheit und einen Aufgaben-Manager aufweist. Die Queue, welche einer ersten Verarbeitungs-Aufgabe entspricht und welche konfiguriert ist, die Daten zu speichern, einschließlich der ersten Daten und zweiten Daten. Die Speicher-Management-Einheit ist konfiguriert, ein erstes Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgaben-Manager übermittelt wird, wobei das Benachrichtigungs-Signal einen ersten Versatz und einen ersten Delta-Wert spezifiziert, welche mit den ersten Daten assoziiert sind, und ist konfiguriert, ein zweites Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgaben-Manager übermittelt wird, wobei das Benachrichtigungs-Signal einen zweiten Versatz und einen zweiten Delta-Wert spezifiziert, welche mit den zweiten Daten assoziiert sind. Der Aufgaben-Manager ist konfiguriert, das erste Benachrichtigungs-Signal und das zweite Benachrichtigungs-Signal zu empfangen, zu bestimmen, ob der erste Versatz und der erste Delta-Wert mit dem zweiten Versatz und dem zweiten Delta-Wert zusammengeführt werden können, um einen zusammengeführten Versatz und einen zusammengeführten Delta-Wert zu erzeugen, und Verarbeiten von den ersten Daten und/oder den zweiten Daten für die erste Verarbeitungs-Aufgabe in einem Verarbeitungs-Cluster-Feld zu planen.
  • Zusätzlich können Einträge der dynamischen Aufgaben-Queue außerhalb der Ordnung verglichen mit der Ordnung geschrieben werden, in welcher Einträge in der dynamischen Aufgaben-Queue an Threads alloziert sind, welche die Daten für die dynamische Aufgabe erzeugen. Wenn Daten, welche mittels der Threads dynamisch erzeugt werden, auf die Queue geschrieben werden, werden daher sequentielle Einträge der Queue, welche geschrieben worden sind, nachvollzogen oder nachverfolgt (tracked) und die Planungs-Einheit wird benachrichtigt, wenn eine Sequenz von Einträgen bei der Front der Queue geschrieben worden sind und zur Verarbeitung geplant werden können, um Ausführung einer dynamischen Aufgabe zu beginnen (oder fortzuführen). Entkoppeln der Allozierung von Einträgen für die Threads, welche die Rechenaufgabe ausführen, welche Daten für die dynamische Aufgabe erzeugen, vom Schreiben der Einträge mittels der verschiedenen Threads erlaubt den Threads, welche die Daten erzeugen, die Einträge einfach zu schreiben und dann auszusteigen (exit) oder ein Verarbeiten anderer Daten fortzuführen. Daher müssen die Threads die Queue nicht in derselben Ordnung schreiben, wie die Threads Allozierungen von Einträgen empfangen. Das Nachverfolgen (tracking) und die Benachrichtigung der Planungs-Einheit, wenn Sequenzen von Einträgen bereit sind, geplant zu werden, erlaubt, dass die Daten sobald wie möglich verarbeitet werden.
  • Wichtiger Weise ist eine Kommunikation mit der CPU nicht benötigt, um das Folgende zu tun: (a) die CPU zu benachrichtigen, wenn Daten für eine dynamische Aufgabe bereit ist, bearbeitet zu werden, (b) die Zwischenspeicher-Einträge zu invalidieren, oder (c) Planen von einer anderen Rechenaufgabe zu ermöglichen. Daher sind Latenzen, wenn verglichen mit Systemen, welche Intervention mittels einer CPU erfordern, vermindert für: (a) Planen von Verarbeiten von dynamischen Aufgaben-Daten, (b) Invalidierung von Zwischenspeicher-Einträgen; und (c) Ermöglichen von Planen von einer anderen Rechenaufgabe.
  • 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 Erfindung zu implementieren;
    • 2 ist ein Blockdiagramm eines Parallel-Verarbeitungs-Subsystems für das Computer-System der 1, gemäß einer Ausführungsform der Erfindung;
    • 3A ist ein Blockdiagramm einer Aufgabe-/Arbeit-Einheit von 2, gemäß einer Ausführungsform der Erfindung;
    • 3B ist ein Blockdiagramm eines Allgemein-VerarbeitungsClusters (GPC) von 2, gemäß einer Ausführungsform der Erfindung;
    • 3C ist ein konzeptionelles Diagramm der Inhalte von Aufgabe-Metadaten (TMD) von 3A, gemäß einer Ausführungsform der Erfindung;
    • 3D illustriert ein Flussdiagramm für ein Verfahren zum Schreiben einer Queue, wenn eine Kind-Aufgabe erzeugt ist, gemäß einer Ausführungsform der Erfindung;
    • 4 illustriert ein Flussdiagramm eines Verfahrens zum Verarbeiten eines vspan-reflektiertes-Benachrichtigungs-Signal (vspan reflected notification signal), gemäß einer Ausführungsform der Erfindung;
    • 5 ist ein konzeptionelles Diagramm der Inhalte der Queue von 3C, wenn vspans zusammengeführt sind, gemäß einer Ausführungsform der Erfindung;
    • 6 illustriert ein Flussdiagramm eines Verfahrens zum Zusammenführen von vspans gemäß einer Ausführungsform der Erfindung; und
    • 7 illustriert ein Verfahren zum Verarbeiten eines reflektierten Benachrichtigungs-Signals 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 einen Fachmann in der Technik ersichtlich sein, dass die Erfindung ohne ein oder mehrere dieser spezifischen Details praktiziert werden kann. In anderen Fällen sind wohlbekannte Merkmale nicht beschrieben worden, um ein Verschleiern der vorliegenden Erfindung zu vermeiden.
  • Verarbeitungs-Einheiten kommunizieren direkt mit einer Aufgabe-Management-Einheit ohne Intervention mittels einer CPU und ohne Einfügen von Anweisungen in einen Schiebepuffer (push buffer). Wenn die Verarbeitungs-Einheiten Rechenaufgaben ausführen und dynamisch Kind-Aufgaben erzeugen, benachrichtigen die Verarbeitungs-Einheiten die Aufgabe-Management-Einheit, wenn die Daten für die Kind-Aufgaben verfügbar sind, verarbeitet zu werden. Die Aufgabe-Management-Einheit plant dann die Kind-Aufgabe zur Ausführung dadurch, dass die Kind-Aufgabe in eine Liste von Aufgaben eingefügt wird. Die direkte Kommunikation zwischen den Verarbeitungs-Einheiten und der Aufgabe-Management-Einheit minimiert Verzögerungen, welche zwischen der Zeit, bei welcher die Kind-Aufgabe erzeugt ist, und wann die Kind-Aufgabe-Daten zur Prozessierung geplant ist, auftreten.
  • 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 (Addin-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. Die verschiedenen Kommunikationspfade, welche in 1 gezeigt sind, 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 Komponenten 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 ParallelVerarbeitungseinheiten (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 in dem Parallel-Verarbeitungs-Subsystem 112 können Daten an das Anzeigegeräte 110 ausgeben oder jede PPU 202 in dem Parallel-Verarbeitungs-Subsystem 112 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 (issues), 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 SpeicherStelle 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 2 umfasst jede PPU 202 eine I/O-(Eingabe/Ausgabe)-Einheit 205, welche mit dem Rest des Computersystems 100 über Kommunikationspfad 113 kommuniziert, welcher zu Speicherbrücke 105 (oder in einer anderen Ausführungsform direkt mit CPU 102) verbindet. Die Verbindung von PPU 202 an den Rest des Computersystems 100 kann auch variiert werden. In einigen Ausführungsformen ist das Parallel-Verarbeitungs-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 (Aufgaben-Zeiger), welche als Aufgabe-Metadaten (TMD) kodiert sind und im Speicher gespeichert sind. Die Aufgabe-Zeiger auf TMDs 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 TMDs 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 TMDs spezifiziert ist, initiiert ist. Eine Priorität kann für jede TMD 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
  • Mehrere Verarbeitungs-Aufgaben können gleichzeitig auf den GPCs 208 ausgeführt werden und eine Verarbeitungs-Aufgabe kann eine oder mehrere dynamische Verarbeitungs-Aufgaben während der Ausführung erzeugen. Die Aufgabe-/Arbeit-Einheit 207 empfängt die Aufgaben und plant dynamisch die Verarbeitungs-Aufgaben und dynamische 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 Aufgabe-Zeigern (task pointers) auf die TMDs 322 entsprechend den Aufgaben in der Planer-Tabelle 321, wo die Liste mit einer verketteten Liste implementiert sein kann. Die TMDs 322 können in dem PP-Speicher 204 oder System-Speicher 104 gespeichert sein. Die Rate, bei welcher die Aufgabe-Management-Einheit 300 Aufgaben annimmt und die Aufgaben in der Planer-Tabelle 321 speichert, ist entkoppelt von der Rate, bei welcher die Aufgabe-Management-Einheit 300 Aufgaben zur Ausführung plant. Daher kann die Aufgabe-Management-Einheit 300 verschiedene Aufgaben basierend auf Prioritäts-Information oder unter Benutzung anderer Techniken sammeln. Die gesammelten Aufgaben können dann basierend auf Prioritätsinformation oder unter Benutzung von anderen Techniken geplant werden, wie etwa Ringverteilung- (round-robin) -Planung.
  • Die Arbeit-Verteilungs-Einheit 340 umfasst eine Aufgabe-Tabelle 345 mit Fächern oder Zellen (slots), wobei jedes von der TMD 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 ein Zeiger auf die Aufgabe an eine Liste von zu planenden Aufgabe-Zeigern hinzugefügt, so dass Ausführung der Aufgabe später wiederaufnehmen wird. Wenn eine dynamische Verarbeitungs-Aufgabe erzeugt ist, während Ausführung einer Aufgabe, wird ein Zeiger auf die dynamische Aufgabe an die Liste von Aufgabe-Zeigern, welche zu planen sind, angefügt. Eine dynamische Aufgabe kann mittels eines TMD 322 erzeugt werden, welcher in dem Verarbeitungs-Cluster-Feld 230 ausführt.
  • Unähnlich einer Aufgabe, welche mittels der Aufgabe-/Arbeit-Einheit 207 von dem Frontend 212 empfangen wird, werden dynamische Aufgaben von dem Verarbeitungs-Cluster-Feld 230 empfangen. Dynamische Aufgaben werden nicht in Schiebepuffer (pushbuffers) eingefügt oder an das Frontend übermittelt. Die CPU 102 wird nicht benachrichtigt, wenn eine dynamische Aufgabe erzeugt ist oder Daten für die Kind-Aufgabe im Speicher gespeichert werden. Ein anderer Unterschied zwischen den Aufgaben, welche durch Schiebepuffer bereitgestellt sind, und dynamischen Aufgaben ist, dass die Aufgaben, welche durch die Schiebepuffer bereitgestellt sind, mittels des Anwendungs-Programms definiert sind, wogegen die dynamische Aufgaben dynamisch während einer Ausführung der Aufgaben erzeugt sind.
  • Die Aufgabe-Management-Einheit 300 umfasst auch eine Planer-Tabelle 421, einen TMD-Zwischenspeicher 305, welcher eine oder mehr TMDs 322 speichert. Jede TMD 322 kann eine große Struktur sein, z.B. 256 Byte oder mehr, welche typischerweise in PP-Speicher 204 gespeichert ist. Aufgrund der großen Größe ist es bezüglich einer Bandbreite aufwändig, auf die TMDs 322 zuzugreifen. Daher speichert der TMD-Zwischenspeicher 305 nur den (relativ kleinen) Teil der TMD 322, welcher von der Aufgabe-Management-Einheit 300 zum Planen benötigt ist. Das übrige der TMD 322 kann von PP-Speicher 204 geholt werden, wenn die Aufgabe geplant wird, d.h. zu der Arbeit-/Verteilungs-Einheit 340 transferiert wird.
  • Die TMDs 322 werden unter Software-Kontrolle geschrieben und, wenn eine Rechenaufgabe Ausführung vollendet, können die TMD 322, welche mit der vollendeten Rechenaufgabe assoziiert sind, recycelt werden, um Information für eine andere Rechenaufgabe zu speichern. Weil eine TMD 322 in dem TMD-Zwischenspeicher 305 gespeichert werden kann, sollten die Einträge, welche Information für die vollendete Rechenaufgabe speichern, von dem TMD-Zwischenspeicher 305 vor einem erneuten Benutzen invalidiert werden. Die Invalidierungs-Operation ist kompliziert, weil eine Wettbewerbssituation zwischen dem Zurückschreiben von Information, welche in dem TMD-Zwischenspeicher 305 gespeichert ist, auf die TMD 322 aufgrund einer potentiellen in Progress befindlichen Zwischenspeicher-Zeile-Ausschließung (cache line eviction) und dem Schreiben von Information für die neue Aufgabe an die TMD 322 existiert. Insbesondere wird die Information für die neue Aufgabe an die TMD 322 geschrieben und dann wird die TMD 322 an das Frontend 312 als Teil eines Schiebepuffers ausgegeben. Somit empfängt der Gerätetreiber 103, welcher die neue Aufgabe schreibt, keine Bestätigung, dass der TMD-Zwischenspeicher 305 invalidiert worden ist, bevor der Gerätetreiber 103 Schreiben neuer Informationen beginnt. Daher ist der Gerätetreiber 103 nicht in der Lage, Schreiben der Information für die neue Aufgabe an die TMD 322 zu verzögern, bis irgendein potentielles Zurückschreiben vollendet ist.
  • Weil das Zurückschreiben, welches von einem Ausschließen von Information herrührt, welche in dem TMD-Zwischenspeicher 305 gespeichert ist, Information überschreiben kann, welche in der TMD 322 für die neue Aufgabe gespeichert ist, wird ein „Nur-Hardware“-Teil jeder TMD 322 für einen Zugriff nur mittels der Aufgabe-Management-Einheit 300 zur Seite gesetzt. Der Rest der TMD 322 kann mittels Software und der Aufgabe-Management-Einheit 300 zugegriffen werden. Der Teil der TMD 322, auf welchen mittels des Gerätetreibers 103 zugegriffen werden kann, ist typischerweise mit einem Anwendungs-Programm über den Gerätetreiber 103 gefüllt, um eine Aufgabe zu initiieren. Auf die TMD 322 wird dann von der Aufgabe-Management-Einheit 300 und von anderen Verarbeitungs-Einheiten in dem GPC 200 während eines Planens und einer Ausführung der Aufgabe zugegriffen. Wenn Information für eine neue Rechenaufgabe an eine TMD 322 geschrieben wird, kann der Befehl, welcher die TMD 322 absetzt oder einführt (launching), spezifizieren, ob Bits in den Nur-Hardware-Teil der TMD 322 beim ersten Mal, wo die TMD 322 in den TMD-Zwischenspeicher 305 geladen wird, zu kopieren sind. Dies stellt sicher, dass die TMD 322 korrekt nur Information für die neue Rechenaufgabe speichern wird, da irgendeine Information für die vollendete Rechenaufgabe in dem Nur-Hardware-Teil der TMD 322 gespeichert worden wäre.
  • Das Verarbeitungs-Cluster-Feld 330 erzeugt eine Verschiedenheit von verschiedenen Signalen, um verschiedene Operationen durchzuführen. In einigen Ausführungsformen werden erzeugte Signale in reflektierte Benachrichtigungs-Signale (reflected notification signals) konvertiert, welche zu der Aufgabe-/Arbeit-Einheit 207 übermittelt werden, um die verschiedenen Operationen ohne Intervention mittels der CPU 102 durchzuführen. Ein reflektiertes Benachrichtigungs-Signal wird erzeugt, wenn eine Speicher-Management-Einheit (MMU, die als MMU 328 in 3B gezeigt ist) eine Schreibanfrage für eine Queue einer TMD 322 empfängt. Seitentabellen-Einträge der MMU werden derart konfiguriert, dass Schreibanfragen, um Daten in einem oder mehr Einträgen einer Queue einer TMD 322 zu speichern, an die Aufgabe-Management-Einheit 300 in der Form von reflektierten Benachrichtigungs-Signalen reflektiert werden. Ein Teil der Schreibanfrage kodiert den Typ des reflektierten Benachrichtigungs-Signals, welches erzeugt ist, z.B., Invalidieren, Planen, Kopieren und vspan. In anderen Ausführungsformen werden eine oder mehr spezielle Anweisungen benutzt, um die Benachrichtigungs-Signale direkt zu der Aufgabe-/Arbeit-Einheit 207 zu übermitteln. Insbesondere können spezielle Anweisungen benutzt werden, um die Invalidierung-, Planen-, und Kopieren-Benachrichtigungs-Signale zu erzeugen, weil diese Benachrichtigungs-Signale die zusätzliche Information (Versatz, Delta) nicht spezifizieren, welche mittels eines vspans-Benachrichtigungs-Signals spezifiziert ist.
  • Ein erster Typ eines reflektierten Benachrichtigungs-Signals wird erzeugt, nachdem das Verarbeitungs-Cluster-Feld 230 Ausführung einer Aufgabe vollendet. Der erste Typ von reflektiertem Benachrichtigungs-Signal ist ein Invalidieren-reflektiertes-Benachrichtigungs-Signal, welches benutzt ist, um einen Eintrag in dem TMD-Zwischenspeicher 305 zu invalidieren. Ein Invalidieren-reflektiertes-Benachrichtigungs-Signal kann erzeugt werden, wenn der letzte Thread, welcher die Aufgabe ausführt, das Programm verlässt, welches mittels der TMD 322 spezifiziert ist, was ist, wenn Ausführung der TMD 322 vollendet ist. Alternativ kann das Invalidieren-reflektiertes-Benachrichtigungs-Signal erzeugt werden, nachdem der letzte Thread existiert, aber bevor der Eintrag in dem TMD-Zwischenspeicher 305 wieder benutzt ist.
  • Ein zweiter Typ von reflektiertem Benachrichtigungs-Signal ist erzeugt, wenn das Verarbeitungs-Cluster-Feld 230 Planen einer Rechenaufgabe ermöglicht, welche als eine andere TMD 322 kodiert ist. Der zweite Typ von reflektiertem Benachrichtigungs-Signal ist ein Planenreflektiertes-Benachrichtigungs-Signal. Ein dritter Typ eines reflektierten Benachrichtigungs-Signals ist von dem Verarbeitungs-Cluster-Feld 230 erzeugt, wenn eine TMD 322 zuerst benutzt wird, um ein Kopieren des Nur-Hardware-Teils der TMD 322 zu steuern. Der dritte Typ von reflektiertem Benachrichtigungs-Signal ist ein Kopieren-reflektiertes-Benachrichtigungs-Signal. Zusätzlich zum Spezifizieren des Typs von reflektiertem Benachrichtigungs-Signal (Invalidieren, Planen, Kopieren), spezifizieren jeweils die verschiedenen reflektierten-Benachrichtigungs-Signale auch einen Identifikator, welcher der TMD 322 entspricht, welche das entsprechende reflektierte Benachrichtigungs-Signal erzeugt. Der Typ von reflektiertem Benachrichtigungs-Signal kann mittels bestimmter Schreib-Adressen angezeigt sein, welche mit Invalidieren-, Planen- und Kopieren-Operationen assoziiert sind. Ein Bereich von reflektierten Adressen kann so definiert sein, dass Schreib-Anfragen an bestimmte Schreib-Adressen zu der Erzeugung eines reflektierten Benachrichtigungs-Signals führen. In einer Ausführungsform, weil tatsächlich keine Daten für die Schreib-Anfrage benötigt sind, welche zu der Erzeugung eines Invalidieren-reflektierten-Benachrichtigungs-Signals, des Planen-reflektierte-Benachrichtigungs-Signals und des Kopieren-reflektierte-Benachrichtigungs-Signal führt, sind keine Daten mittels der Schreib-Anfrage spezifiziert.
  • Die Aufgabe-Management-Einheit 300 umfasst auch eine vspan-Einheit 312, welche konfiguriert ist, Daten zusammenzuführen, welche dynamisch erzeugt sind und auf eine Queue einer TMD 322 für eine dynamische Aufgabe geschrieben sind. Einträge der Queue werden in einer Ordnung alloziert und können in einer anderen Ordnung gefüllt werden. Wenn Daten in einer dynamischen TMD 322 mittels des Verarbeitungs-Cluster-Feldes 230 gespeichert werden, werden reflektierte Benachrichtigungs-Signale, welche vspan-reflektierte-Benachrichtigungs-Signale sind, erzeugt und an die Aufgabe-Management-Einheit 300 ausgegeben, um die Einträge der Queue anzuzeigen, welche geschrieben worden sind. Ein Entkoppeln von darauf Warten, dass Daten in sequentielle Einträge der Queue geschrieben sind, von dem Schreiben der Queue-Einträgen erlaubt den TMDs 322, welche die Daten erzeugen, einfach die Einträge zu schreiben und dann auszusteigen oder Verarbeiten anderer Daten fortzuführen.
  • Ein vspan-reflektiertes-Benachrichtigungs-Signal, welches mittels einer Schreib-Anfrage an eine Queue erzeugt ist, umfasst Information, welche der Schreib-Anfrage entspricht. Das vspan-reflektierte-Benachrichtigungs-Signal spezifiziert einen Start-Eintrag und Länge der Daten, welche geschrieben sind. Das vspan-reflektierte-Benachrichtigungs-Signal, welches einer Schreib-Anfrage entspricht, umfasst nicht die Daten, welche auf die Queue geschrieben sind. Ein vspan zeigt den Satz von Einträgen in der Queue einer dynamischen TMD 322 an, welche gültig sind, d.h. welche mit Daten geschrieben worden sind. Die Daten, welche auf die dynamische TMD 322 geschrieben sind, können mittels derselben dynamischen TMD 322, einer anderen TMD 322 oder einer TMD 322 geschrieben sein, welche nicht dynamisch während einer Ausführung einer TMD 322 erzeugt wurde.
  • Queue-Einträge werden an Threads alloziert und jeder Thread schreibt Daten an die Einträge, welche für den entsprechenden Thread alloziert sind zu einer späteren Zeit. Weil jeder Thread unabhängig ausführt, brauchen die Einträge nicht mit Daten in derselben Ordnung geschrieben werden, in welcher die Einträge alloziert wurden. Mit anderen Worten können die Queue-Einträge „außer der Reihe“ geschrieben werden. Die vspan-Einheit 312 vollzieht bzw. verfolgt die vspans, welche mittels der vspan-reflektiertes-Benachrichtigungs-Signale bereitgestellt sind, nach (tracks) und führt angrenzende vspans in Sequenzen von Queue-Einträgen falls möglich zusammen. Die vspan-Einheit 312 benachrichtigt dann die Aufgabe-Management-Einheit 300, wenn eine Sequenz von Queue-Einträgen bei der Front der Queue für die TMD 322 verfügbar ist, verarbeitet zu werden. Der Zeiger auf die Front der Queue ist aktualisiert, um auf den ersten ungeschriebenen Eintrag zu zeigen, wenn die vspan-Einheit 312 die Aufgabe-Management-Einheit 300 benachrichtigt, dass eine Sequenz von Queue-Einträgen verfügbar ist, verarbeitet zu werden. Weil das Schreiben der Einträge entkoppelt von den Benachrichtigungen ist, dass eine Sequenz von Queue-Einträgen verfügbar ist, verarbeitet zu werden, kann jeder Thread die Einträge, welche für den entsprechenden Thread alloziert sind, schreiben und beenden (exit), ohne darauf zu warten, dass andere Einträge in der Queue geschrieben werden, dass die Queue-Einträge, welche mittels des Threads geschrieben sind, gelesen werden, oder dass die Queue-Einträge, welche mittels des Threads geschrieben sind, welche zu planen sind, verarbeitet werden.
  • Aufgabe-Verarbeitung-Überblick
  • 3B ist ein Blockdiagramm eines GPC 208 innerhalb einer der PPUs 202 der 2, gemäß einer Ausführungsform der vorliegenden Erfindung. Jedes 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 jedes GPC 208 eine Anzahl M von SMs 310, wobei M ≥ 1, wobei jeder SM 310 konfiguriert ist, eine oder mehrere Thread-Gruppen zu verarbeiten. Auch umfasst jeder SM 310 vorteilhafterweise einen identischen Satz von funktionalen Ausführungseinheiten (z.B. Ausführungseinheiten und Lade-Speicher-Einheiten), welche in einer Pipeline betrieben 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 Funktionale-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 (nicht 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 auch 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.
  • Jedes 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 buffers) (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, gezeigt in 2. 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, welche unter allen der GPCs 208 geteilt ist, Parallel-Verarbeitungs-Speicher 204 oder System-Speicher 104 über Kreuzschiene-Einheit 210 zu speichern. Ein preROP (Vor-raster-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. Wie in 2 gezeigt ist, kann eine PPU 202 irgendeine Anzahl von GPCs 208 umfassen, welche vorteilhafterweise funktionell ähnlich zueinander sind, so dass ein Ausführungs-Verhalten nicht davon abhängt, welcher GPC 208 eine bestimmte Verarbeitungs-Aufgabe empfängt. Ferner operiert jedes GPC 208 vorteilhafterweise unabhängig von anderen GPCs 208 unter Benutzung von separaten und distinkten Verarbeitungs-Einheiten L1-Caches, und dergleichen, um Aufgaben, für ein oder mehrere Anwendungs-Programme auszuführen.
  • 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 ComputerSystems 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.
  • Aufgabe-Planung- und Management
  • Mit Bezug zurück auf 3A handhabt die Aufgabe-Management-Einheit 300 Rechenaufgaben, welche als ein Feld von TMD-Gruppen zu planen sind, welche in der Planer-Tabelle 321 gespeichert sind. Eine TMD-Gruppe ist ein Satz von Rechenaufgaben mit derselben Planungs-Priorität. Die Anzahl von TMD-Gruppen oder Prioritäts-Niveaus kann eins oder mehr sein. Innerhalb jeder TMD-Gruppe sind die Rechenaufgaben bei dem entsprechenden Prioritäts-Niveau in einer Liste gespeichert, welche mit einer verketteten Liste (linked list) implementiert werden kann und nachfolgend ist eine verkettete Liste angenommen. Jede TMD in einer verketteten Liste speichert einen Zeiger auf die nächste TMD in der entsprechenden verketteten Liste. Ein Kopf-Zeiger bzw. Start-Zeiger (head pointer) und ein Schwanz-Zeiger bzw. Ende-Zeiger (tail pointer) für die verkettete Liste sind für jede TMD gespeichert. Eine TMD-Gruppe, welche keine Aufgaben hat, hat einen Kopf-Zeiger, welcher dem Schwanz-Zeiger gleicht, und ein leeres Bit ist auf wahr gesetzt.
  • Wenn Rechenaufgaben von der Host-Schnittstelle 206 empfangen werden, fügt die Aufgabe-Management-Einheit 300 die Rechenaufgaben in eine TMD-Gruppe ein. Insbesondere wird ein Aufgabe-Zeiger auf die TMD, welche der Rechenaufgabe entspricht, zu dem Schwanz der verketteten Liste für diese Gruppe hinzufügt, es sei denn, ein spezielles TMD-Bit ist gesetzt, was dazu führt, dass die Aufgabe an den Kopf der verketteten Liste hinzugefügt wird. Obwohl alle Aufgaben innerhalb einer TMD-Gruppe dasselbe Planungs-Prioritäts-Niveau haben, ist der Kopf der TMD-Gruppe-verkettete-Liste die erste Rechenaufgabe, welche mittels der Aufgabe-Management-Einheit 300 ausgewählt ist und zur Ausführung geplant wird. Somit hat die Rechenaufgabe bei dem Kopf der verketteten Liste eine relativ höhere Priorität verglichen mit anderen Rechenaufgaben bei demselben Prioritäts-Niveau. Ähnlich hat jede nachfolgende Rechenaufgabe in der verketteten Liste bei demselben Prioritäts-Niveau eine niedrigere Priorität relativ zu vorangehenden Rechenaufgaben in der verketteten Liste. Daher ist die Aufgabe-Management-Einheit 300 in der Lage, die Rechenaufgaben innerhalb einer TMD-Gruppe in einer Eingangs-Ordnung relativ zueinander (unter der Annahme, dass keine spezifisch markiert sind, um an den Kopf der TMD-Gruppe hinzugefügt zu werden) zu planen. Da die TMD-Gruppe als Teil der TMD-Struktur spezifiziert ist, kann die TMD-Gruppe einer Rechenaufgabe nicht geändert werden, während die Rechenaufgabe gerade ausgeführt wird.
  • Rechenaufgaben können auch von dem Verarbeitungs-Cluster-Feld 230 der PPU 202, welche in 2 gezeigt ist, empfangen werden. Insbesondere können Daten, welche während einer Ausführung einer TMD 322 erzeugt sind, auf die Queue einer TMD 322 geschrieben werden und ein reflektiertes Benachrichtigungs-Signal wird mittels der MMU 328 in Antwort auf jede Schreib-Anfrage an die Queue der TMD 322 erzeugt.
  • Die Aufgabe-Management-Einheit 300 kann eine Auswahl durchführen, um die Rechenaufgaben unter Benutzung einiger verschiedener Techniken zu planen: Ringverteilung (round-robin), Priorität- oder partitioniertes Prioritäts-Planen. Für jede der verschiedenen Planungs-Techniken wird, wenn eine Rechenaufgabe geplant zu werden ausgewählt ist, die ausgewählte Rechenaufgabe von der Gruppe entfernt, in welcher die ausgewählte Rechenaufgabe gespeichert ist. Unabhängig von der Planungs-Technik ist die Aufgabe-Management-Einheit 300 in der Lage, schnell eine Rechenaufgabe dadurch auszuwählen, dass der erste Eintrag in der verketteten Liste der geeigneten Gruppe ausgewählt wird. Daher können die Rechenaufgaben in einer Ordnung geplant und/oder ausgeführt werden, welche verschieden ist von der Ordnung, in welcher, die Aufgabe-Zeiger mittels der Aufgabe-Management-Einheit 300 von der Host-Schnittstelle 306 empfangen sind.
  • 3C ist ein konzeptionelles Diagramm der Inhalte einer TMD 322 von 3A, welche in PP-Speicher 204 gespeichert ist, gemäß einer Ausführungsform der Erfindung. Die TMD 322 ist konfiguriert, Initialisierungs-Parameter 305, Planungs-Parameter 360, Ausführungs-Parameter 365, CTA-Zustand 370, ein Nur-Hardware-Feld 372 und ein Queue 375 zu speichern. Das Nur-Hardware-Feld 372 speichert den Nur-Hardware-Teil der TMD 322, welcher einen oder mehrere Nur-Hardware-Parameter aufweist. Ausführung-Zustand (state), welcher gemeinsam für alle TMDs 322 ist, ist nicht in jeder TDM 322 umfasst. Weil eine TMD 322 eine Datenstruktur ist, welche in PP-Speicher 204 gespeichert ist, kann ein Rechen-Programm, welches auf der CPU 102 oder PPU 112 abläuft, eine TMD-322-Struktur in Speicher erzeugen und dann die TMD 322 zu Ausführung abschicken, indem ein Aufgabe-Zeiger auf die TMD 322 an die Aufgabe-/Arbeit-Einheit 207 gesendet wird.
  • Die Initialisierungs-Parameter 355 werden benutzt, um die GPCs 208 zu konfigurieren, wenn die TMD 322 eingeführt oder gestartet (launched) ist, und können die Startprogramm-Adresse und die Größe der Queue 375 umfassen. Man bemerke, dass die Queue 375 separat von der TMD 322 in Speicher gespeichert sein kann, in welchem Fall die TMD 322 einen Zeiger auf die Queue 375 (Queue-Zeiger) anstatt der tatsächlichen Queue 375 umfasst.
  • Die Initialisierungs-Parameter 355 können auch Bits umfassen, um anzuzeigen, ob verschiedene Caches, das z.B. ein Textur-Kopf-Cache (texture header cache), ein Textur-Beprobungs-Cache (texture sampler cache), ein Textur-Daten-Cache, ein Daten-Cache, ein Konstanten-Cache, und dergleichen, ungültig gemacht werden, wenn die TMD 322 angestoßen wird (launched). Ein Bit, welches anzeigt, ob Textur-Beprober (texture samplers) 1: 1 mit Textur-Köpfen gelinkt sind, kann auch in den Initialisierungs-Parametern 355 umfasst sein. Initialisierungs-Parameter 355 können auch Dimensionen eines CTA in Threads, eine TMD-Versionsnummer, eine Anweisungssatz-Versionsnummer, Dimensionen eines Gitters in CTA-Breite, - Höhe und -Tiefe, Speicherbank-Abbildungs-Parameter, Tiefe eines Aufruf-Stapels wie mittels eines Anwendungs-Programms gesehen, und eine Größe des Aufruf-Rückgabe-Stapels (call-return stack) für die TMD umfassen. Die Initialisierungs-Parameter 355 können eine Größe eines Konstante-Puffers, eine Adresse des Konstante-Puffers, ein Bit, welches anzeigt, dass eine Konstante-Puffer-Bindung (constant buffer bind) gültig ist, und ein Bit, welches anzeigt, dass die Daten von dem Konstante-Puffer ungültig gemacht werden in dem Cache, bevor die TMD angestoßen wird, umfassen und können in den Initialisierungs-Parameter 355 gespeichert sein.
  • Schließlich können die Initialisierungs-Parameter 355 mehrere Parameter umfassen, welche die Menge von Speicher betreffen, welcher für jeden Thread eines CTA verfügbar ist. Wenn eine TMD 322, die mehrere CTAs benötigt, welche jeweils eine große Menge von gemeinsamen Speicher erfordern, bereit sind zur Ausführung geplant zu werden, kann die Aufgabe-/Arbeit-Einheit 207 die Anzahl von CTAs begrenzen (d.h. drosseln), welche gleichzeitig ausführen, so dass die CTAs nicht versuchen, mehr Speicher zu verbrauchen, als verfügbar ist zum Zugriff mittels der TMD 322.
  • Die Planungs-Parameter 360 steuern, wie die Aufgabe-/Arbeit-Einheit 207 die TMD 322 zur Ausführung plant. Die Planungs-Parameter 360 können ein Bit umfassen, welches anzeigt, ob die TMD 322 eine Queue-TMD oder eine Gitter-TMD ist. Wenn die TMD 322 eine Gitter-TMD ist, dann ist das Queue-Merkmal der TMD 322, welches erlaubt, dass zusätzliche Daten gequeued werden, nachdem die TMD 322 angestoßen ist, unbenutzt und die Ausführung der TMD 322 führt dazu, dass eine fixe Anzahl von CTAs anzustoßen sind und ausgeführt werden, um die feste Menge von Daten, welche in der Queue 375 gespeichert sind, zu verarbeiten. Die Anzahl von CTAs ist spezifiziert als das Produkt der Gitterbreite, -höhe und -tiefe. Die Queue 375 wird durch einen Queue-Zeiger auf die Daten ersetzt, welche mittels der CTAs verarbeitet werden, welche das Programm ausführen, welches mittels der TMD 322 spezifiziert ist. Die Planen-Flagge für eine Gitter-TMD ist entweder gesetzt (aktiviert), wenn die TMD erzeugt wird, oder nachdem die TMD unter Benutzung eines Planen-Typ-reflektiertes-Benachrichtigungs-Signals erzeugt ist.
  • Wenn die TMD 322 eine Queue-TMD ist, dann wird das Queue-Merkmal der TMD 322 benutzt, was bedeutet, dass die Daten in der Queue 375 als Queue-Einträge gespeichert werden. Queue-Einträge sind Eingabedaten für CTAs der TMD 322. Die Queue-Einträge können auch Daten für eine dynamische Aufgabe speichern, welche mittels einer anderen TMD 322 während einer Ausführung eines Threads erzeugt ist, wobei dadurch ein geschachtelter Parallelismus (nested parallelism) bereitgestellt ist. Typischerweise wird eine Ausführung des Threads, oder eines CTA, welches den Thread umfasst, ausgesetzt, bis die Ausführung der dynamische Aufgabe vollendet ist. Die Queue 375 kann als eine kreisförmige Queue implementiert sein, so dass die Gesamtmenge von Daten nicht auf die Größe der Queue 375 begrenzt ist. Wie vorher beschrieben ist, kann die Queue 375 separat von der TMD 322 gespeichert sein und die TMD 322 kann einen Queue-Zeiger auf die Queue 375 speichern. Vorteilhafterweise können Queue-Einträge für die dynamische Aufgabe auf die Queue 375 geschrieben werden, während die TMD 322, welche die dynamische Aufgabe repräsentiert, ausführt. Die Planen-Flagge für eine Queue-TMD ist entweder gesetzt (aktiviert), wenn die TMD erzeugt wird, oder nachdem die TMD ist unter Benutzung eines Planen-Typreflektiertes-Benachrichtigungs-Signals erzeugt ist.
  • Eine variable Anzahl von CTAs wird für eine Queue-TMD ausgeführt, wobei die Anzahl von CTAs von der Anzahl von Einträgen, die auf die Queue 375 der TMD-Queue geschrieben sind, abhängt. Die Planungs-Parameter 360 für eine Queue-TMD umfassen auch die Anzahl von Einträgen (N) von Queue 375, welche mittels jedes CTA verarbeitet werden. Wenn N Einträge zu der Queue 375 hinzugefügt werden, wird ein CTA für die TMD 322 angestoßen. Die Aufgabe-/Arbeit-Einheit 207 kann einen gerichteten Graphen von Prozessen konstruieren, wobei jeder Prozess eine TMD 322 mit einer Queue ist. Die Anzahl von CTAs, welche für jede TMD 322 auszuführen sind, kann basierend auf dem Wert von N für jede TMD 322 und basierend auf der Anzahl von Einträgen, welche in die Queue 375 geschrieben worden sind, bestimmt werden.
  • Alternative Ausführungsformen können verschiedene Strukturen für eine Gitter-TMD und eine Queue-TMD haben, oder implementieren nur entweder Gitter-TMDs oder Queue-TMDs. Eine TMD 322 kann einen Aufgabe-Zeiger auf eine abhängige TMD umfassen, welche automatisch angestoßen wird, wenn die TMD 322 vollendet ist. Semaphoren (Zeichenträger) können mittels der TMDs 322 ausgeführt werden, um sicherzustellen, dass Abhängigkeiten zwischen den verschiedenen TMDs 322 und der CPU 102 erfüllt sind. Zum Beispiel kann die Ausführung einer ersten TMD 322 von einer Vollendung einer zweiten TMD abhängen, so dass die zweite TMD eine Semaphore-Freigabe erzeugt und die erste TMD führt aus, nachdem die entsprechende Semaphore-Erfassung erfolgreich ist. In einigen Ausführungsformen ist die Semaphore-Erfassung in der Host-Schnittstelle 206 oder in dem Frontend 212 durchgeführt. Die Ausführungs-Parameter 365 für eine TMD 322 können eine Mehrzahl von Semaphore-Freigaben speichern, einschließlich des Typs von Speicher-Barriere, Adresse der Semaphore-Datenstruktur in dem Speicher, Größe der Semaphore-Datenstruktur, Nutzdaten (payload) und Freigabe (enable), Typ und Format einer Reduktions-Operation. Die Datenstruktur der Semaphore kann in den Ausführungs-Parametern 365 gespeichert sein oder kann außerhalb der TMD 322 gespeichert sein.
  • Die Planungs-Parameter 360 der TMD 322 können ein Bit umfassen, welches gesetzt ist, wenn die TMD 322 erzeugt ist, was dazu führt, dass TMD-Felder zu dem Nur-Hardware-Feld 372 kopiert werden, wenn die TMD 322 zuerst mittels der Aufgabe-Management-Einheit 300 geladen wird. Die Planungs-Parameter 360 können auch die TMD-Gruppen-ID, ein Bit, um anzuzeigen, wo die TMD 322 an einer verketteten Liste hinzugefügt ist (Kopf oder Schwanz), und einen Zeiger auf die nächste TMD 322 in der TMD-Gruppe umfassen. Die Planungs-Parameter 360 können auch Masken umfassen, welche spezifische Streaming-Mehrprozessor innerhalb der GPCs 208 aktivieren/deaktivieren (enableldisable).
  • Die Ausführungs-Parameter 365 können auch die Start-Adresse des Programms umfassen, welches für die TMD 322 auszuführen ist, den Typ von Speicher-Barriere-Operation, welche durchgeführt wird, wenn die Ausführung der TMD 322 vollendet, eine Serial-Ausführungs-Flagge, welche anzeigt, ob nur ein einzelnes CTA zu einer Zeit (seriell) für die TMD 322 ausgeführt wird, und eine Drossel (throttle)-Freigabe-Flagge, welche steuert, ob die Aufgabe-/Arbeit-Einheit 207 die Anzahl von CTAs, welche simultan ablaufen, basierend auf den Speicher-Begrenzungen, welche für die TMD 322 spezifiziert sind, begrenzen soll oder nicht.
  • Wenn ein Prozess ausgeschlossen wird (preempted), kann ein Verarbeiten der TMD 322 bei einer Anweisungs-Grenze oder einer CTA-Grenze gestoppt werden und eine Identifikation des CTA, bei dem eine Verarbeitung wieder aufgenommen wird, wird in dem CTA-Status 370 gespeichert. Die Status-Information, welche benötigt ist, Ausführung der TMD 322 nach Ausschließung wieder aufzunehmen, kann in dem CTA-Status 370 oder in einem separaten Bereich in PP-Speicher 204 oder in System-Speicher 104 gespeichert werden.
  • Der CTA-Status 370 speichert auch Daten-Zeiger auf Einträge der Queue 375 und Zähler-Überlauf-Flaggen, welche anzeigen, wann oder wenn jeder Daten-Zeiger über das Ende der Queue 375 inkrementiert und zu dem Start der Queue 375 zurückgewickelt werden muss (wrap back). Nur-Hardware-Versionen des einen oder der mehreren der Daten-Zeiger und der Planungs-Flagge können in dem Nur-Hardware-Feld 372 gespeichert sein.
  • 3D illustriert ein Flussdiagramm für ein Verfahren 380 zum Schreiben auf eine Queue 375 gemäß einer Ausführungsform der Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A und 3B 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. Eine „Erzeuger“-Rechenaufgabe, welche mittels einer TMD 322 kodiert ist, alloziert Raum in der Queue 375 und schreibt dann Daten auf den allozierten Raum. Eine „Verbraucher“-Rechenaufgabe liest schließlich die Daten, welche mittels der „Erzeuger“-Rechenaufgabe geschrieben wurden. Eine einzelne Rechenaufgabe kann eine oder mehrere dynamische Aufgaben erzeugen und/oder kann Daten auf eine Queue 375 schreiben. Daten können auf eine Queue für eine erzeugte dynamische Aufgabe oder für eine existierende Rechen- oder Dynamik-Aufgabe geschrieben werden.
  • Bei Schritt 382 wird eine Rechenaufgabe, welche mittels einer TMD 322 kodiert ist, in dem Verarbeitungs-Cluster-Feld 230 mittels eines oder mehrerer CTAs ausgeführt, welche mittels der Aufgabe-/Arbeit-Einheit 207 angestoßen sind. Bei Schritt 385 reserviert ein oder mehrere Threads Raum in der Queue 375, um Daten zu speichern, welche mittels der dynamischen Aufgabe gelesen werden. Einträge in der Queue 375 werden für die Threads alloziert, welche eine Aufgabe ausführen, welche Daten für eine dynamische Aufgabe erzeugt, unter Benutzung einer atomaren Operation in der Ordnung, in welcher die Allozierungs-Anfragen verarbeitet werden. Eine atomare Operation ist benutzt, so dass nur einem Thread einen bestimmten Eintrag in der Queue alloziert ist. Mit anderen Worten, so dass kein Eintrag in dem Thread an zwei oder mehr Threads alloziert ist, wenn Allozierungs-Anfragen simultan empfangen werden. Wie vorher beschrieben ist, müssen die Threads nicht notwendiger Weise Daten in den Einträgen in der Ordnung speichern, in welcher die Einträge alloziert wurden. Daher führt die vspan-Einheit 312 mehrere vspans in der Queue 375 in größere zusammenhängende vspans zusammen, wie möglich, wenn jedes vspan-reflektierte-Benachrichtigungs-Signal empfangen ist. Die vspan-Einheit 312 benachrichtigt die Aufgabe-Management-Einheit 300, wenn Einträge der Queue Daten speichern, welche verfügbar sind, für Verarbeitung geplant zu werden.
  • Bei Schritt 386 schreibt ein oder mehrere Threads, welche Einträge in der Queue 375 allozierten, Schreib-Anfragen heraus, um Daten in den Einträgen zu speichern. Bei Schritt 388 wird ein vspan-reflektiertes-Benachrichtigungs-Signal für jede Schreib-Anfrage erzeugt und das vspan-reflektierte-Benachrichtigungs-Signal wird an die vspan-Einheit 312 übermittelt. Bei Schritt 390 bestimmen der eine oder die mehreren Threads, welche die Rechenaufgabe ausführen, ob irgendwelche neuen dynamischen Aufgaben erzeugt werden, welche zusätzlichen Raum in der Queue erfordern, oder ob eine dynamische Aufgabe, welche bereits erzeugt ist, zusätzliche Einträge in der Queue 375 benötigt, und, wenn dem so ist, kehren der eine oder die mehreren Threads zu Schritt 385 zurück. Anderenfalls verlässt bei Schritt 375 der letzte Thread, welcher die TMD 322 ausführt, und Ausführung der Rechenaufgabe, welche mittels der TMD 322 kodiert ist, ist vollendet.
  • 4 illustriert ein Flussdiagramm von einem Verfahren 400 zum Verarbeiten eines vspan-reflektiertes-Benachrichtigungs-Signals gemäß einer Ausführungsform der Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A und 3B 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 empfängt die Aufgabe-/Arbeit-Einheit ein vspan-reflektiertes-Benachrichtigungs-Signal von dem Verarbeitungs-Cluster-Feld 230. Bei Schritt 410 bestimmt die vspan-Einheit 312, ob ein Inkrement-Modus für die TMD 322 spezifiziert ist, und, wenn dem so ist, schreitet die vspan-Einheit 312 direkt zu Schritt 425 fort, um zu bestimmen, ob die TMD 322 planbar ist (schedulable). Der Inkrement-Modus wird benutzt, wenn die vspan-reflektierte-Schreib-Benachrichtigungen in irgendeiner Ordnung verarbeitet werden können. Daher wird ein Zusammenführen von vspans nicht mittels der vspan-Einheit 312 durchgeführt. In einer Ausführungsform kann der Inkrement-Modus aktiviert oder deaktiviert sein unter Benutzung eines Benachrichtigungs-Signals, welches von dem Verarbeitungs-Cluster-Feld 230 zu der Aufgabe-Management-Einheit 300 übermittelt ist.
  • Wenn die vspan-Einheit 312 bei Schritt 410 bestimmt, dass der Inkrement-Modus für die TMD 322 nicht spezifiziert ist, dann versucht bei Schritt 415 die vspan-Einheit 312, den neuen vspan, welcher mittels des vspan-reflektiertes-Benachrichtigungs-Signals spezifiziert ist, mit einem oder mehreren anderen vspans zusammenzuführen. Der ZUsammenführungs-Prozess ist im weiteren Detail im Zusammenhang mit 5 und 6 beschrieben.
  • Bei Schritt 420 bestimmt die vspan-Einheit 312, ob der Eintrag der Queue 375, auf welchen mittels eines inneren Setze-Zeigers (set pointer) gezeigt ist, geschrieben worden ist, und, wenn dem nicht so ist, wird bei Schritt 440 Verarbeiten des vspan-reflektiertes-Benachrichtigungs-Signals getan. Der innere Setze-Zeiger zeigt den ersten Eintrag der Queue 375 an, welcher geschrieben worden ist und noch nicht an die Aufgabe-Management-Einheit 300 zur Planung bereitgestellt ist. Anderenfalls bestimmt bei Schritt 425 die vspan-Einheit 312, ob eine Sequenz von zumindest einem Eintrag der Queue 375 zur Ausführung planbar ist. Die TMD 322 kann unter Benutzung einer Planungs-Flagge konfiguriert sein, welche nur zu planen ist, wenn die Planungs-Flagge gesetzt ist, unabhängig davon, ob der Eintrag der Queue 375, auf welchen mittels des inneren Setze-Zeigers gezeigt ist, geschrieben worden ist oder nicht oder ob der Inkrement-Modus für die TMD 322 benutzt ist oder nicht. Die Planungs-Flagge ist gesetzt, wenn ein Planungs-Typ des reflektierten Benachrichtigungs-Signals von der Aufgabe-Management-Einheit 300 von dem Verarbeitungs-Cluster-Feld 230 empfangen ist.
  • Wenn die vspan-Einheit 312 bei Schritt 425 bestimmt, dass die Queue 375 nicht planbar ist oder nicht zur Ausführung vorgesehen werden kann (not schedulable), dann wird bei Schritt 440 Verarbeiten des vspan-reflektiertes-Benachrichtigungs-Signals getan. Anderenfalls wird bei Schritt 430 die Aufgabe-Management-Einheit 300 darüber informiert, dass Einträge der Queue 375 geschrieben sind und die Aufgabe-Management-Einheit 300 plant die TMD 322 zur Verarbeitung mittels eines oder mehrerer CTAs. Bei Schritt 435 stößt die Arbeit-Verteilungs-Einheit 340 das eine oder die mehreren CTAs an, um die TMD 322 auszuführen. In dieser Weise ist ein Verarbeiten der Daten in der Queue 375 in der Allozierungs-Ordnung initiiert, da Sequenzen der Daten zu der Queue 375 mittels eines oder mehrerer simultan ausführender Threads geschrieben werden.
  • Nachverfolgen von Schreiben von Aufgabedaten zum Planen von Verarbeitungs-Aufgaben
  • 5 ist ein konzeptionelles Diagramm der Inhalte der Queue 375 der 3C, wenn vspans zusammengeführt werden, gemäß einer Ausführungsform der Erfindung. Wie vorher erläutert ist, ist ein Schreiben von Daten für eine Verarbeitungs-Aufgabe, welche in der Queue 375 kodiert ist, entkoppelt von der Allozierung von Einträgen in der Queue 375. Ein äußerer Setze-Zeiger (put pointer) 545 zeigt auf den nächsten verfügbaren Eintrag in der Queue 375, welcher zu allozieren ist, und ein innerer Setze-Zeiger 540 zeigt auf den ältesten Eintrag in der Queue 375, welcher alloziert worden ist und noch nicht geschrieben worden ist. Wenn Daten in dem Eintrag geschrieben werden, auf welchen mittels des inneren Setze-Zeigers 540 gezeigt ist, wird der innere Setze-Zeiger 540 nach vorne zu dem äußeren Setze-Zeiger 545 hin versetzt und die vspan-Einheit 312 zeigt an, dass die Daten bereit sind zur Verarbeitung geplant zu werden. Weil die Einträge nicht notwendiger Weise in der Ordnung geschrieben sind, in welcher die Einträge alloziert sind, können einer oder mehrere Einträge zwischen dem inneren Setze-Zeiger 540 und dem äußeren Setze-Zeiger 545 sein, welche geschrieben worden sind (verschieden von dem Eintrag, auf welchen mittels des inneren Setze-Zeigers 540 gezeigt ist).
  • Ein äußerer Bekomme-Zeiger (get pointer) 430 zeigt auf den ältesten Eintrag der Queue 375, welcher Daten speichert, welche einem CTA zur Prozessierung zugewiesen worden sind, d.h. ein CTA, welches die Daten verarbeiten wird, ist angestoßen worden, aber das CTA hat die Daten noch nicht gelesen. Ein innerer Bekomme-Zeiger 535 zeigt auf dem neuesten Eintrag der Queue 375, welcher einem CTA zur Verarbeitung zugewiesen worden ist. Daten, welche auf die Queue 375 geschrieben worden sind, aber noch nicht an ein CTA zur Verarbeitung zugewiesen worden sind, werden in den Einträgen zwischen dem inneren Bekomme-Zeiger 535 und dem inneren Setze-Zeiger 540 gespeichert. Daten, welche einem CTA zur Verarbeitung zugewiesen worden sind und nicht gelesen sind, werden zwischen dem äußeren Bekomme-Zeiger 530 und dem inneren Bekomme-Zeiger 535 gespeichert.
  • Vier vspans, vspan 501, 502, 503 und 504 sind jeweils mit einem Teil von Einträgen 500 in der Queue 375 assoziiert. Die vspans 501 bis 504 sind die vspan-reflektiertes-Benachrichtigungs-Signale, welche erzeugt sind, wenn die Einträge von Einträgen 500, welche mit jedem jeweiligen vspan assoziiert sind, geschrieben sind. Jeder vspan ist mittels eines Versatzes (offset), welcher eine Start-Eintragsstelle in der Queue 375 repräsentiert, und eines Delta-Werts repräsentiert, welcher die Zahl von Einträgen in der Queue 375 anzeigt, welche mittels einer Schreib-Anfrage geschrieben sind, für welche das vspan-reflektierte-Benachrichtigungs-Signal erzeugt ist. In einer Ausführungsform gleicht der Delta-Wert einem End-Wert, d.h. Delta-Wert = Versatz + Zahl von geschriebenen Einträgen. Wenn vspan-reflektiertes-Benachrichtigungs-Signale empfangen sind, versucht die vspan-Einheit 312, den neuen vspan mit einem existierenden vspan zusammenzuführen. Die existierenden vspans sind in einer verketteten Liste basierend auf der Start-Eintragsstelle und den Delta-Werten der vspans gespeichert, so dass die vspans in derselben Ordnung sind, in welcher die Einträge der Queue 375 alloziert wurden zum Speichern der Daten.
  • Wenn ein neuer vspan nicht mit einem existierenden vspan zusammengeführt werden kann, welcher in der verketteten Liste gespeichert ist, wird Speicher, welcher benötigt ist, um den neuen vspan zu speichern, von einem Pool von unbenutzten vspan-Speicherblöcken alloziert. Der Pool wird zwischen allen der Queue-TMDs 322 geteilt bzw. gemeinsam benutzt. Eine separate verkettete Liste von vspans wird gespeichert und für jede Queue-TMD 322 nachverfolgt (tracked). Wenn ein neuer vspan mit einem existierenden vspan zusammengeführt wird, werden die existierenden Delta-Werte und/oder Versatz-Werte des existierenden vspans aktualisiert. Wenn neue und existierende vspan zusammengeführt werden, werden Speicherblöcke, welche existierende vspans speicherten, welche nicht länger benötigt werden, in der verketteten Liste für eine Queue-TMD 322 an den gemeinsamen Pool freigegeben.
  • Die Daten, welche mit vspan 502 assoziiert sind, sind mittels einer ersten Schreib-Anfrage geschrieben, bevor die Daten, welche mit vspans 501, 503 und 504 assoziiert sind, geschrieben sind. Die mit vspan 502 assoziierten Daten füllen Einträge 512, was drei Einträge der Queue 375 sind. Der Versatz und Delta für den vspan 502 ist 2 bzw. 3, und ein vspan-Speicherblock ist von dem gemeinsamen Pool alloziert, um vspan 502 zu speichern. Der vspan 502 ist erzeugt und in einem ersten vspan-reflektiertes-Benachrichtigungs-Signal in Antwort auf die erste Schreib-Anfrage umfasst.
  • Die Daten, welche mit vspan 504 assoziiert sind, werden zweitens mittels einer zweiten Schreib-Anfrage, geschrieben, wobei Einträge 514 gefüllt werden, welche weitere drei Einträge der Queue 375 sind. Der vspan 504 ist erzeugt und in einem zweiten vspan-reflektiertes-Benachrichtigungs-Signal in Antwort auf die zweite Schreib-Anfrage umfasst. Der Versatz und Delta für den vspan 504 ist 7 bzw. 3. Die vspans 502 und 504 können nicht zusammengeführt werden, weil Daten, welche mit vspan 503 assoziiert sind, noch nicht geschrieben sind, so wird ein zusätzlicher vspan-Speicherblock von dem gemeinsamen Pool alloziert, um vspan 504 zu speichern.
  • Die Daten, welche mit vspan 501 assoziiert sind, werden drittens geschrieben, mittels einer dritten Schreib-Anfrage, wobei Einträge 511 gefüllt werden, welche die ersten zwei Einträge der Queue 375 sind. Der vspan 501 ist erzeugt und in einem dritten vspan-reflektiertes-Benachrichtigungs-Signal in Antwort auf die dritte Schreib-Anfrage umfasst. Der Versatz und Delta für den vspan 501 ist 0 bzw. 2. Der vspan 501 kann mit vspan 502 zusammengeführt werden, so dass Delta für vspan 502 von 3 auf 5 geändert wird und so dass der Versatz auf 0 geändert wird. Der innere Setze-Zeiger 540 ist vorgerückt, um auf den ersten Eintrag des ungeschriebenen vspan 503 zu zeigen. Bei diesem Punkt kann die Rechenaufgabe, welche mittels der TMD 322 kodiert ist, geplant werden, für Einträge 511 und 512 abzulaufen. Wenn der innere Setze-Zeiger 540 vorgerückt wird, wird der vspan-Speicherblock, welcher vspan 502 speicherte, an den gemeinsamen Pool freigegeben.
  • Schließlich werden die Daten, welche mit vspan 503 assoziiert sind, mittels einer vierten Schreib-Anfrage geschrieben, wobei Einträge 513 gefüllt werden, welche zwei weitere Einträge der Queue 375 sind. Der vspan 503 ist erzeugt und in einem vierten vspan-reflektiertes-Benachrichtigungs-Signal in Antwort auf die vierte Schreib-Anfrage umfasst. Der Versatz und Delta für vspan 503 ist 5 bzw. 2. Der vspan 503 ist mit dem vspan 504 zusammengeführt, so ist das Delta für vspan 504 von 3 auf 5 geändert und der Versatz auf 5 geändert ist. Der innere Setze-Zeiger 540 wird zu einem Punkt vorgerückt, um auf den ersten Eintrag nach vspan 504 zu zeigen. Bei diesem Punkt kann die Rechenaufgabe, welche mittels der TMD 322 kodiert ist, geplant werden, für Einträge 513 und 514 abzulaufen. Wenn der innere Setze-Zeiger 540 vorgerückt wird, wird der vspan-Speicher-Block, welcher vspan 504 speichert, an den gemeinsamen Pool entlassen bzw. freigegeben (released).
  • 6 illustriert ein Flussdiagramm für ein Verfahren 600 eines Verarbeitens eines vspan-reflektiertes-Benachrichtigungs-Signals und für ein ZUsammenführen von vspans gemäß einer Ausführungsform der Erfindung. Obwohl die Verfahrensschritte im Zusammenhang mit den Systemen von 1, 2, 3A und 3B 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 605 empfängt die vspan-Einheit 312 ein vspan-reflektiertes-Benachrichtigungs-Signal, wenn Daten auf einen oder mehrere Einträge der Queue 375 geschrieben werden. Bei Schritt 610 bestimmt die vspan-Einheit 312, ob der vspan, welcher mittels des vspan-reflektiertes-Benachrichtigungs-Signals spezifiziert ist, zwischen zwei vspans ist und mit den zwei vspans in der verketteten Liste für die TMD 322 koalesziert werden kann, und, wenn dem so ist, dann zusammengeführt bei Schritt 625 die vspan-Einheit 312 den neuen vspan mit den zwei vspans in der verketteten Liste. Bei Schritt 630 gibt die vspan-Einheit 312 einen vspan an den gemeinsamen Pool zurück, bevor zu Schritt 632 fortgeschritten wird.
  • Wenn die vspan-Einheit 312 bei Schritt 610 bestimmt, dass der vspan, welcher mittels des vspan-reflektiertes-Benachrichtigungs-Signals spezifiziert ist, nicht mit zwei vspans in der verketteten Liste für die TMD 322 zusammengeführt werden kann, dann bestimmt die vspan-Einheit 312, ob der vspan, welcher mittels des vspan-reflektiertes-Benachrichtigungs-Signals spezifiziert ist, mit einem vspan in der verketteten Liste für die TMD 322 koalesziert werden kann, und, wenn dem so ist, dann führt bei Schritt 620 die vspan-Einheit 312 den neu geschriebenen vspan mit einem vspan zusammen und schreitet zu Schritt 632 fort. Anderenfalls alloziert bei Schritt 618 die vspan-Einheit 312 einen vspan von dem gemeinsamen Pool, um den neuen vspan zu speichern, und fügt den allozierten vspan in die verkettete Liste ein und schreitet zu Schritt 632 fort.
  • Bei Schritt 632 bestimmt die vspan-Einheit 312, ob der innere Setze-Zeiger 540 vorgerückt werden kann, und, wenn dem nicht so ist, dann ist bei Schritt 640 Verarbeiten des vspan-reflektiertes-Benachrichtigungs-Signals vollendet. Anderenfalls rückt bei Schritt 635 die vspan-Einheit 312 den inneren Setze-Zeiger 540 vor und gibt den vspan bei dem Kopf der verketteten Liste an den gemeinsamen Pool zurück. Bei Schritt 640 ist Verarbeitung des vspan-reflektiertes-Benachrichtigungs-Signals vollendet.
  • 7 illustriert ein Flussdiagramm für ein Verfahren, welches ein reflektiertes Benachrichtigungs-Signal verarbeitet, welches nicht ein vspan-reflektiertes-Benachrichtigungs-Signal ist, gemäß einer Ausführungsform der Erfindung. Obwohl die Verfahrensschritt 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 702 empfängt die Aufgabe-Management-Einheit 300 ein reflektiertes-Benachrichtigungs-Signal von dem Verarbeitungs-Cluster-Feld 230. Bei Schritt 705 bestimmt die Aufgabe-Management-Einheit 300, ob das Benachrichtigungs-Signal ein Kopieren-reflektiertes-Benachrichtigungs-Signal ist, und, wenn dem so ist, dann wird bei Schritt 715 ein Teil der TMD 322 in das Nur-Hardware-Feld 372 der TMD 322 kopiert. Bei Schritt 750 ist Verarbeitung des reflektierten Benachrichtigungs-Signals vollendet.
  • Wenn die Aufgabe-Management-Einheit 300 bei Schritt 705 bestimmt, dass das reflektierte Benachrichtigungs-Signal nicht ein Kopieren-reflektiertes-Benachrichtigungs-Signal ist, dann bestimmt bei Schritt 720 die Aufgabe-Management-Einheit 300, ob das reflektierte Benachrichtigungs-Signal ein Invalidieren-reflektiertes-Benachrichtigungs-Signal ist. Wenn das reflektierte Benachrichtigungs-Signal ein Invalidieren-reflektiertes-Benachrichtigungs-Signal ist, dann entfernt bei Schritt 725, wenn die Daten in dem TMD-Zwischenspeicher 305 vorhanden sind, die Aufgabe-Management-Einheit 300 die TMD 322-Daten von dem TMD-Zwischenspeicher 305. Irgendwelche schmutzigen bzw. fehlerhaften (dirty) Zwischenspeicher-Zeilen, welche TMD 322-Daten speichern, welche von dem TMD-Zwischenspeicher 305 entfernt werden, werden nicht an Speicher geschrieben. Die TMD 322 kann dann für eine andere Rechenaufgabe wieder benutzt werden.
  • Wenn die Aufgabe-Management-Einheit 300 bei Schritt 720 bestimmt, dass das reflektierte Benachrichtigungs-Signal nicht ein Invalidieren-reflektiertes-Benachrichtigungs-Signal ist, dann ist das reflektierte Benachrichtigungs-Signal ein Planen-Signal, welches die Planen-Flagge für eine TMD 322 setzt. Die Planen-Flagge (schedule flag) wird von der Aufgabe-Management-Einheit 300 benutzt, um zu bestimmen, ob eine Sequenz von zumindest einem Eintrag der Queue 375 zur Ausführung planbar ist. Bei Schritt 730 wird die Planen-Flagge für die TMD 322 gesetzt, wenn die Planen-Flagge geschrieben wird. Bei Schritt 750 ist Verarbeitung des reflektierten Benachrichtigungs-Signals getan.
  • Die dynamischen Rechenaufgaben, welche dynamisch während einer Ausführung einer Rechenaufgabe erzeugt werden, welche mittels einer TMD 322 kodiert sind, können direkt in die Planungs-Pipeline einer PPU 202 ohne eine Intervention mittels der CPU 102 eingefügt werden, wenn die Aufgabe-/Arbeit-Einheit 207 ein Benachrichtigungs-Signal von einem GPC 208 empfängt. Ein Mechanismus erzeugt ein vspan-reflektiertes-Benachrichtigungs-Signal, wenn Daten für die dynamische Rechenaufgabe in die Queue gesetzt werden und erzeugt zusätzliche Benachrichtigungs-Signale für andere Ereignisse, z.B. Initiieren von Laden des TMD-Zwischenspeichers 305, Invalidieren von Zwischenspeicher-Einträgen, welche Daten für eine Rechenaufgabe speichern, und Ermöglichen eines Planens einer Rechenaufgabe. Zusätzlich können Einträge, welche Daten für eine Rechenaufgabe-Queue speichern, außerhalb der Ordnung geschrieben werden. Wenn Daten, welche dynamisch generiert werden, auf die Queue geschrieben werden, werden daher Teile der Daten zusammengeführt und die Aufgabe-/Arbeit-Einheit 207 wird benachrichtigt, wenn eine Sequenz von Einträgen bereit ist, zur Verarbeitung geplant zu werden, um Ausführung einer Rechenaufgabe zu beginnen oder fortzusetzen. Entkoppeln des Wartens darauf, dass Daten in sequentielle Einträge der Queue geschrieben werden, von dem Schreiben der Queue-Einträge erlaubt den Threads, welche die Daten erzeugen, einfach die Einträge zu schreiben und dann zu beenden oder auszusteigen oder Verarbeiten anderer Daten fortzusetzen.
  • Eine Ausführungsform der Erfindung kann als ein Programm-Produkt zur Benutzung mit einem 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 Information 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 (9)

  1. Verfahren zum Benachrichtigen eines Aufgabe-Managers (300) in einem Parallelverarbeitungs-Subsystem (112), das mehrere Parallelverarbeitungseinheiten, PPUs (202) aufweist, die jeweils mehrere Verarbeitungscluster (208) aufweisen, dass Daten zur Verarbeitung verfügbar sind, wobei das Verfahren aufweist: Erzeugen, in einer Speicher-Management-Einheit (328) von einem der Verarbeitungscluster (208), eines ersten Benachrichtigungs-Signals, welches zu dem Aufgabe-Manager übermittelt wird, wobei das Benachrichtigungs-Signal einen ersten Versatz für eine Start- Eintragsstelle in einer Queue (375) und einen ersten Delta-Wert, der eine Anzahl von Einträgen in der Queue spezifiziert, wobei die Queue Daten für Verarbeitungsaufgaben enthält; Speichern von ersten Daten, welche mit dem ersten Versatz und dem ersten Delta-Wert assoziiert sind, in der Queue, welche einer ersten Verarbeitungs-Aufgabe entspricht; Erzeugen, in der Speicher-Management-Einheit (328), eines zweiten Benachrichtigungs-Signals, welches an den Aufgabe-Manager (300) übermittelt wird, wobei das Benachrichtigungs-Signal einen zweiten Versatz für die Start-Eintragsstelle und einen zweiten Delta-Wert, der die Anzahl von Einträgen in der Queue spezifiziert, aufweist; Speichern von zweiten Daten, welche mit dem zweiten Versatz und dem zweiten Delta-Wert assoziiert sind, in der Queue, welche der ersten Verarbeitungs-Aufgabe entspricht; Empfangen, durch einen Aufgabe Manager (300) von dem einem Verarbeitungscluster (208), des ersten Benachrichtigungs-Signals und des zweiten Benachrichtigungs-Signals; Bestimmen, ob der erste Versatz und der erste Delta-Wert mit dem zweiten Versatz und dem zweiten Delta-Wert zusammengeführt werden können, und wenn dies möglich ist, einen zusammengeführten Versatz und einen zusammengeführten Delta-Wert zu erzeugen; Plazieren, mittels des Aufgabe-Managers, für ein Verarbeiten von zumindest einem der ersten Daten und der zweiten Daten für die erste Verarbeitungs-Aufgabe in einer Aufgabentabelle des einen Verarbeitungsclusters für eine Verarbeitung von einem der ersten oder zweiten Daten durch den einen Verarbeitungscluster; und Verarbeiten von zumindest eine der ersten und zweiten Daten durch den einen Verarbeitungscluster.
  2. System zum Benachrichtigen eines Aufgabe-Managers in einem Parallelverarbeitungs-Subsystem (112), das mehrere Parallelverarbeitungseinheiten, PPUs (202) aufweist, die jeweils mehrere Verarbeitungscluster (208) aufweisen, dass Daten zur Verarbeitung verfügbar sind, wobei das System aufweist: eine Queue (375), in einem der Verarbeitungscluster (208), welche einer ersten Verarbeitungs-Aufgabe entspricht, und welche konfiguriert ist, die Daten zu speichern, einschließlich erster Daten und zweiter Daten, wobei die Queue Daten für Verarbeitungsaufgaben enthält; eine Speicher-Management-Einheit (328) in einem der Verarbeitungscluster (208), welche konfiguriert ist, um: ein erstes Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgabe-Manager übermittelt wird, wobei das Benachrichtigungs-Signal einen ersten Versatz für eine Start- Eintragsstelle in einer Queue (375) und einen ersten Delta-Wert, der eine Anzahl von Einträgen in der Queue spezifiziert, welche mit den ersten Daten assoziiert sind; und ein zweites Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgabe-Manager übermittelt ist, wobei das Benachrichtigungs-Signal einen zweiten Versatz für die Start-Eintragsstelle und einen zweiten Delta- der die Anzahl von Einträgen in der Queue spezifiziert, aufweist; und den Aufgabe-Manager in dem einem Verarbeitungscluster (208), welcher konfiguriert ist, um: das erste Benachrichtigungs-Signal und das zweite Benachrichtigungs-Signal zu empfangen; zu bestimmen, ob der erste Versatz und der erste Delta-Wert mit dem zweiten Versatz und dem zweiten Delta-Wert zusammengeführt werden können, um einen zusammengeführten Versatz und einen zusammengeführten Delta-Wert zu erzeugen; zumindest eine der ersten Daten und der zweiten Daten für die erste Verarbeitungs-Aufgabe in einer Aufgabentabelle des einen Verarbeitungsclusters zu plazieren, damit zumindest eine der ersten oder zweiten Daten durch den einen Verarbeitungscluster verarbeitet werden; und Verarbeiten von zumindest eine der ersten und zweiten Daten durch den einen Verarbeitungscluster..
  3. System gemäß Anspruch 2, wobei der Aufgabe-Manager ferner konfiguriert ist, um: den ersten Versatz, den ersten Delta-Wert, den zweiten Versatz und den zweiten Delta-Wert in eine verkettete Liste in einer Ordnung basierend auf dem ersten Versatz und dem zweiten Versatz einzufügen, wenn der erste Versatz und der erste Delta-Wert für das erste reflektierte Benachrichtigungs-Signal nicht mit dem zweiten Versatz und dem zweiten Delta-Wert zusammengeführt werden können.
  4. System gemäß Anspruch 3, wobei der Aufgabe-Manager ferner konfiguriert ist, um: einen Zeiger auf einen Kopf der Queue vorzurücken, wenn der Zeiger auf einen Eintrag der Queue zeigt, welcher zumindest einen Teil der ersten Daten speichert; und den ersten Versatz und den ersten Delta-Wert von der verketteten Liste zu entfernen.
  5. System gemäß Anspruch 2, wobei die Speicher-Management-Einheit ferner konfiguriert ist, um: eine erste Schreib-Anfrage an eine Speicher-Adresse einschließlich der ersten Daten für die erste Verarbeitungs-Aufgabe zu empfangen; zu detektieren, dass die Speicher-Adresse in einem Bereich von reflektierten Adressen ist; und die erste Schreib-Anfrage direkt an den Aufgabe-Manager als das erste Benachrichtigungs-Signal zu reflektieren.
  6. System gemäß Anspruch 2, wobei das Verarbeitungs-Cluster-Feld ferner konfiguriert ist, um: in einer ersten Ordnung, erste Einträge in der Queue zum Speichern der ersten Daten und zweite Einträge in der Queue zum Speichern der zweiten Daten zu allokieren; und eine zweite Schreib-Anfrage einschließlich der zweiten Daten für die Verarbeitungs-Aufgabe an den Speicher zu übermitteln, und wobei die Speicher-Management-Einheit ferner konfiguriert ist, die zweite Schreib-Anfrage zu verarbeiten, um die zweiten Daten für die Verarbeitungs-Aufgabe in dem Speicher zu speichern, wobei die erste Schreib-Anfrage und die zweite Schreib-Anfrage in einer zweiten Ordnung verarbeitet werden, welche verschieden verglichen mit der ersten Ordnung ist.
  7. System gemäß Anspruch 2, wobei das Verarbeitungs-Cluster-Feld ferner konfiguriert ist, ein drittes Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgabe-Manager übermittelt wird, und wobei das dritte Benachrichtigungs-Signal konfiguriert ist, Daten von einem ersten Teil der Aufgabe-Metadaten-Struktur auf einen zweiten Teil der Aufgabe-Metadaten-Struktur zu kopieren.
  8. System gemäß Anspruch 2, wobei der Mehrprozess-gestützte Prozessor ferner konfiguriert ist, ein drittes Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgabe-Manager übermittelt wird, und wobei das dritte Benachrichtigungs-Signal konfiguriert ist, Einträge in einem Zwischenspeicher, welcher Daten einer Aufgabe-Metadaten-Struktur speichert, welche die Verarbeitungs-Aufgabe kodiert, zu invalidieren.
  9. System gemäß Anspruch 2, wobei der Mehrprozess-gestützte Prozessor ferner konfiguriert ist, ein drittes Benachrichtigungs-Signal zu erzeugen, welches direkt zu dem Aufgabe-Manager übermittelt wird, und wobei das dritte Benachrichtigungs-Signal konfiguriert ist, eine Flagge zu schreiben, welche steuert, ob die Verarbeitungs-Aufgabe zur Ausführung geplant wird.
DE102012222558.7A 2011-12-16 2012-12-07 Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System Active DE102012222558B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/329,169 2011-12-16
US13/329,169 US8984183B2 (en) 2011-12-16 2011-12-16 Signaling, ordering, and execution of dynamically generated tasks in a processing system

Publications (2)

Publication Number Publication Date
DE102012222558A1 DE102012222558A1 (de) 2013-06-20
DE102012222558B4 true DE102012222558B4 (de) 2023-12-14

Family

ID=48522300

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012222558.7A Active DE102012222558B4 (de) 2011-12-16 2012-12-07 Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System

Country Status (4)

Country Link
US (1) US8984183B2 (de)
CN (1) CN103197955A (de)
DE (1) DE102012222558B4 (de)
TW (1) TWI488118B (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140143779A1 (en) * 2012-11-19 2014-05-22 Raytheon Company Contextual routing of data elements
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
CN105700950B (zh) * 2014-11-25 2019-11-22 深圳市腾讯计算机系统有限公司 一种数据通信方法及装置
US20170017419A1 (en) * 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
US20170017414A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Implementing Hierarchical Distributed-Linked Lists For Network Devices
US20170017567A1 (en) * 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Implementing Distributed-Linked Lists For Network Devices
US20170017420A1 (en) 2015-07-15 2017-01-19 Innovium, Inc. System And Method For Enabling High Read Rates To Data Element Lists
CN110890975A (zh) * 2018-09-11 2020-03-17 北京京东金融科技控股有限公司 数据任务管理自动化方法、系统、电子设备、存储介质
US10861126B1 (en) * 2019-06-21 2020-12-08 Intel Corporation Asynchronous execution mechanism
CN110633154B (zh) * 2019-09-06 2020-10-02 中国科学院近代物理研究所 一种数据全排序方法及系统
KR102245208B1 (ko) * 2020-09-07 2021-04-28 박성빈 다중처리방법 및 그 장치
CN112379921B (zh) * 2020-11-03 2024-04-02 北京索为系统技术股份有限公司 一种动态柔性流程自动生成和自完善系统及方法
CN113254177B (zh) * 2021-05-31 2023-06-27 广州虎牙科技有限公司 基于集群的任务提交方法、计算机程序产品及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438680A (en) 1988-04-29 1995-08-01 Intellectual Properties And Technology, Inc. Method and apparatus for enhancing concurrency in a parallel digital computer
EP1242883B1 (de) 1999-12-28 2006-09-13 Intel Corporation Datenzuweisung zu threads in einem multi-threaded netzwerkprozessor
US20090282407A1 (en) 2003-03-13 2009-11-12 Kunihiko Hayashi Task switching apparatus, method and program

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7290094B2 (en) * 2005-05-17 2007-10-30 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block to an initialization value without a cache first obtaining a data valid copy

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438680A (en) 1988-04-29 1995-08-01 Intellectual Properties And Technology, Inc. Method and apparatus for enhancing concurrency in a parallel digital computer
EP1242883B1 (de) 1999-12-28 2006-09-13 Intel Corporation Datenzuweisung zu threads in einem multi-threaded netzwerkprozessor
US20090282407A1 (en) 2003-03-13 2009-11-12 Kunihiko Hayashi Task switching apparatus, method and program

Also Published As

Publication number Publication date
US8984183B2 (en) 2015-03-17
DE102012222558A1 (de) 2013-06-20
TW201342243A (zh) 2013-10-16
US20130160021A1 (en) 2013-06-20
CN103197955A (zh) 2013-07-10
TWI488118B (zh) 2015-06-11

Similar Documents

Publication Publication Date Title
DE102012222558B4 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102013022712B4 (de) Virtuelle Speicherstruktur für Coprozessoren, die Speicherallokationsbegrenzungen haben
DE102013200991A1 (de) Automatisches abhängige-Aufgabe-Anstoßen
DE102013209350B4 (de) Ressource-Management-Subsystem, welches Fairness und Ordnung einhält
DE102012220267B4 (de) Rechenarbeitsverteilungs - Referenzzähler
DE102012221504B4 (de) Mehrniveau-Anweisung-Zwischenspeicher-Zuvor-Holen
DE102013208554A1 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102012211670A1 (de) Simultanes Unterbreiten an eine Mehr-Produzenten-Queue mittels mehrerer Threads
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013208558A1 (de) Verfahren und System zur Verarbeitung verschachtelter Stream-Events
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102009046847A1 (de) Mehrklassen-Daten-Cache-Verfahren
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102013016871A1 (de) Technik zur Steigerung der Effizienz in mehrsträngigen Verarbeitungseinrichtngen
DE112010003758T5 (de) Instruktionen zum Verwalten einer parallelen Cache-Hierarchie
DE102013201178A1 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102013202495A1 (de) Verfahren zur Durchführung von interaktivem Debugging auf nicht unterbrechbaren Graphikverarbeitungseinheiten
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE102013114351A1 (de) System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher

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
R018 Grant decision by examination section/examining division