DE102013114351A1 - System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren - Google Patents

System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren Download PDF

Info

Publication number
DE102013114351A1
DE102013114351A1 DE102013114351.2A DE102013114351A DE102013114351A1 DE 102013114351 A1 DE102013114351 A1 DE 102013114351A1 DE 102013114351 A DE102013114351 A DE 102013114351A DE 102013114351 A1 DE102013114351 A1 DE 102013114351A1
Authority
DE
Germany
Prior art keywords
barrier
command
strands
participating
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102013114351.2A
Other languages
English (en)
Inventor
John Erik Lindholm
Tero Tapani KARRAS
Timo Oskari Aila
Samuli Matias Laine
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 DE102013114351A1 publication Critical patent/DE102013114351A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation

Abstract

Es werden ein Verfahren und ein System für eine Hardware-Disponierung von Barrierenbefehlen bereitgestellt. Die Ausführung mehrerer Stränge zur Verarbeitung von Befehlen eines Programms, das einen Barrierenbefehl enthält, wird initiiert, und wenn jeder Strang den Barrierenbefehl während der Ausführung eines Programms erreicht, wird ermittelt, ob der Strang an dem Barrierenbefehl teilnimmt. Die Stränge, die an dem Barrierenbefehl teilnehmen, werden dann seriell ausgeführt, um einen oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, zu verarbeiten. Es werden auch ein Verfahren und ein System bereitgestellt für eine ungeduldige Disponierung von Barrierenbefehlen. Wenn ein Teil der Stränge, der größer ist als eine minimale Anzahl an Strängen und kleiner ist als alle Stränge aus den mehreren Strängen, den Barrierenbefehl erreicht, wird jeder Strang in dem Teil seriell ausgeführt, um einen oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, zu verarbeiten.

Description

  • Diese Erfindung wurde mit US-Regierungsunterstützung unter LLNS Nebenvertrag B599861, zuerkannt von DOE, gemacht. Die US-Regierung hat gewisse Rechte an dieser Erfindung.
  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft Programmausführung und insbesondere bedingte oder ungeduldige Barrieren.
  • HINTERGRUND
  • Konventionelle parallele Verarbeitungsarchitekturen unterstützen die Ausführung mehrerer Stränge. Spezielle Operationen, die während der Ausführung eines Programms unter Anwendung einer konventionellen Parallelverarbeitungs-Architektur ausgeführt werden, können eine Synchronisierung der mehreren Stränge erfordern. Barrierenbefehle (oder Zaunbefehle) werden verwendet, um die Ausführung mehrerer Stränge während der Ausführung eines derartigen Programms zu synchronisieren. Eine Disponiereinheit in der Parallelverarbeitungslinie-Architektur erkennt die Barrierenbefehle und stellt sicher, dass alle Stränge einen speziellen Barrierenbefehl erreichen, bevor einer der Stränge einen Befehl nachfolgend zu diesem speziellen Barrierenbefehl ausführt. In einigen Fällen ist es nicht notwendig, alle Stränge an dem Barrierenbefehl zu synchronisieren, und die Ausführung der Stränge, die keine Synchronisierung erfordern, wird unnötigerweise verzögert.
  • Es gibt daher einen Bedarf für die Lösung der Problematik der Disponierung der Ausführungsstränge für die Verarbeitung von Barrierenbefehlen und/oder für andere Probleme, die mit dem Stand der Technik verknüpft sind.
  • ÜBERBLICK
  • Es werden ein System und ein Verfahren zur Disponierung der Ausführung bedingter Barrieren bereitgestellt. Die Ausführung mehrerer Stränge („threads”) zur Verarbeitung von Befehlen eines Programms, das einen Barrierenbefehl enthält, wird initiiert, und wenn jeder Strang den Barrierenbefehl während der Ausführung des Programms erreicht, wird ermittelt, ob der Strang an dem Barrierenbefehl beteiligt ist. Die Stränge, die an dem Barrierenbefehl beteiligt sind, werden dann seriell ausgeführt, um einen oder mehrere Befehle des Programms zu verarbeiten, die auf den Barrierenbefehl folgen.
  • Es werden ein Verfahren und ein System für eine ungeduldige Disponierung von Barrierenbefehlen bereitgestellt. Die Ausführung mehrerer Stränge zur Verarbeitung von Befehlen eines Programms, das einen Barrierenbefehl enthält, wird initiiert, und wenn ein Teil der Stränge, der größer als eine minimale Anzahl an Strängen und kleiner als alle Stränge der mehreren Stränge ist, den Barrierenbefehl erreicht, wird jeder der Stränge in dem Teil seriell ausgeführt, um einen oder mehrere Befehle des Programms zu verarbeiten, die auf den Barrierenbefehl folgen.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Offenbarung zu realisieren;
  • 2 ist eine Blockansicht eines Parallelverarbeitungssubsystems für das Computersystem aus 1 gemäß einer Ausführungsform der vorliegenden Offenbarung;
  • 3A ist eine Blockansicht des Frontbereichs aus 2 gemäß einer Ausführungsform der vorliegenden Offenbarung;
  • 3B ist eine Blockansicht eines allgemeinen Verarbeitungs-Clusters in einer der Parallelverarbeitungseinheiten aus 2 gemäß einer Ausführungsform der vorliegenden Offenbarung;
  • 3C ist eine Blockansicht eines Teils des Datenstrom-Multiprozessors aus 3B gemäß einer Ausführungsform der vorliegenden Offenbarung; und
  • 4 ist eine Konzeptansicht, die Strangblöcke eines CTA gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung zeigt;
  • 5A ist eine Blockansicht der Kettendisponier- und Befehlseinheit aus 3C gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung;
  • 5B ist eine Blockansicht eines Teils der Disponiereinheit und der Barrierendisponiereinheit aus 5A gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung;
  • 6A zeigt ein Verfahren zur Disponierung von Befehlen für die Ausführung auf der Grundlage logischer Kennungen gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung; und
  • 6B zeigt ein Verfahren zur Ausführung eines Schritts, der in 6A gezeigt ist, gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung.
  • 6C zeigt ein Verfahren zur Ausführung eines in 6B gezeigten Schritts gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung.
  • DETAILLIERTE BESCHREIBUNG
  • Es werden ein System und ein Verfahren zur Disponierung der Ausführung von bedingten Barrieren bereitgestellt, die es ermöglichen, dass eine Teilgruppe an Strängen an einem Barrierenbefehl teilnimmt. Die Ausführung von Strängen zur Verarbeitung von Befehlen eines Programms, das einen Barrierenbefehl enthält, wird initiiert, und wenn jeder Strang den Barrierenbefehl erreicht, wird ermittelt, ob der Strang an dem Barrierenbefehl teilnimmt. Die Stränge, die an dem Barrierenbefehl teilnehmen, werden ausgeführt, so dass ein oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, verarbeitet werden. Stränge, die nicht an dem Barrierenbefehl teilnehmen, können die Ausführung fortsetzen, ohne dass darauf gewartet werden muss, dass andere Stränge den Barrierenbefehl erreichen.
  • Es wird nun eine anschaulichere Information angegeben im Hinblick auf diverse optionale Architekturen und Merkmale, mit der die vorhergehende Technik realisiert werden kann oder auch nicht, wobei dies von den Bedürfnissen des Anwenders abhängt. Es sollte jedoch dringend beachtet werden, dass die folgende Information nur für anschauliche Zwecke angegeben ist und in keiner Weise als einschränkend erachtet werden sollte. Jedes der folgenden Merkmale kann optional mit oder ohne Ausschluss anderer Merkmale, die beschrieben sind, angewendet werden.
  • 1 ist eine Blockansicht, die ein Computersystem 100 darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren. Das Computersystem 100 umfasst eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über einen Verbindungspfad in Verbindung stehen, der eine Speicherbrücke 105 enthalten kann. Die Speicherbrücke 105, die beispielsweise ein Nordbrücken-Chip sein kann, ist über einen Bus oder einen anderen Kommunikationspfad 106 (beispielsweise eine HyperTransport-Verbindung) mit einer I/O-(Eingangs/Ausgangs-)Brücke 107 verbunden. Die I/O-Brücke 107, die beispielsweise ein Südbrücken-Chip sein kann, empfängt eine Anwendereingabe aus einem oder mehreren Anwender-Eingabegeräten 108 (beispielsweise Tastatur, Maus) und leitet die Eingabe an die CPU 102 über den Kommunikationspfad 106 und die Speicherbrücke 105 weiter. Ein Parallelverarbeitungssubsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen zweiten Kommunikationspfad 113 (beispielsweise peripherer Komponentenverbindungs-Express (PCI), beschleunigter Graphikport oder eine HyperTransport-Verbindung) verbunden; in einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein grafisches Subsystem, das Pixel an eine Anzeigeeinrichtungen 110 liefert (beispielsweise ein Monitor auf Basis einer konventionellen Kathodenstrahlröhre oder einer Flüssigkristallanzeige). Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden. Ein Schalter 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten, etwa einem Netzwerkadapter 118 und diversen Zusatzkarten 120 und 121 her. Andere Komponenten (nicht explizit gezeigt) einschließlich eines universellen seriellen Busses (USB) oder andere Portverbindungen, Kompaktdisketten-(CD)Laufwerke, digitale Video Disketten-(DVD)Laufwerke, Filmaufzeichnungsgeräte und dergleichen können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die diversen Kommunikationspfade, die in 1 gezeigt sind, wozu die speziell genannten Kommunikationspfade 106 und 113 gehören, können unter Anwendung beliebiger geeigneter Protokolle eingerichtet werden, etwa PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder einem beliebigen anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll bzw. Protokollen, und für Verbindungen zwischen unterschiedlichen Geräten können unterschiedliche Protokolle verwenden, wie dies im Stand der Technik bekannt ist.
  • In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafik- und Videoverarbeitung optimiert ist mit beispielsweise einer Videoausgabeschaltung, und bildet eine grafische Verarbeitungseinheit (GPU). In einer weiteren Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für eine Verarbeitung für Allgemeinzwecke optimiert ist, wobei die zu Grunde liegende Rechenarchitektur, wie sie in größerem Detail beschrieben ist, bewahrt ist. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 in einem oder mehreren anderen Systemelementen in einem einzelnen Subsystem integriert sein, etwa durch Verbinden der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hierin beschriebene System nur anschaulich ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, wozu die Anzahl und die Anordnung von Brücken, die Anzahl von CPUs 102 und die Anzahl von Parallelverarbeitungssubsystemen 112 gehören, kann nach Bedarf modifiziert werden. Beispielsweise ist in einigen Ausführungsformen der Systemspeicher 104 mit der CPU 102 direkt anstatt über eine Brücke verbunden, und andere Einrichtungen kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt mit der Speicherbrücke 105 verbunden. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als eine oder mehrere diskrete Einrichtungen vorgesehen sind. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehrere parallele Verarbeitungssysteme 112 enthalten. Die hierin gezeigten speziellen Komponenten sind optional; beispielsweise kann eine beliebige Anzahl an Zusatzkarten oder peripheren Geräten unterstützt werden. In einigen Ausführungsformen kann der Schalter 116 nicht vorhanden sein, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 können direkt mit der I/O-Brücke 107 verbunden sein.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, enthält das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten (PPU) 202, wovon jede mit einem lokalen Parallelverarbeitungs-(PP)Speicher 204 verbunden ist. Generell enthält ein Parallelverarbeitungssubsystem eine Anzahl an PPUs, wobei U ≥ 1 ist. (Hierin sind mehrere Vertreter gleicher Objekte mit Bezugszeichen belegt, die das Objekt angeben und Ziffern in Klammern geben den Vertreter an, wenn dies erforderlich ist.) Die PPUs 202 und die Parallelverarbeitungs-Speicher 204 können unter Verwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC) oder Speichereinrichtungen oder in anderer technisch machbarer Weise realisiert sein.
  • Es sei wieder auf 1 sowie 2 verwiesen; in einigen Ausführungsformen sind einige oder alle PPUs 202 in dem Parallelverarbeitungssubsystem 112 grafische Prozessoren mit Bilderzeugungspipelines, die ausgebildet sein können, diverse Operationen auszuführen, die mit der Erzeugung von Pixeldaten aus Grafikdaten in Beziehung stehen, die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und dem zweiten Kommunikationspfad 113 zugeleitet sind, wobei mit dem lokalen Parallelverarbeitungs-Speicher 204 interagiert wird (der als Grafikspeicher verwendbar ist, beispielsweise einen konventionellen Blockpuffer enthält), um Pixeldaten zu speichern und zu aktualisieren, Pixeldaten zu der Anzeigeeinrichtungen 110 zu liefern, und dergleichen. In einigen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 umfassen, die als Grafikprozessoren arbeiten, und kann eine oder mehrere andere PPUs 202 aufweisen, die für Berechnungen für Allgemeinzwecke verwendet werden. Die PPUs können identisch oder unterschiedlich sein, und jede PPU kann eine spezielle Parallelverarbeitungs-Speichereinrichtung bzw. Einrichtungen oder keine spezielle Parallelverarbeitungs-Speicher bzw. Einrichtungen aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 können Daten an die Anzeigeeinrichtungen 110 ausgeben, oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 kann Daten an eine oder mehrere Anzeigeeinrichtungen 110 ausgeben.
  • Im Betrieb ist die CPU 102 der übergeordnete Prozessor des Computersystems 100, und steuert und koordiniert die Operationen anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom von Befehlen für jede PPU 202 in eine Datenstruktur (in 1 oder 2 nicht explizit gezeigt), die in dem Systemspeicher 104, in dem Parallelverarbeitungs-Speicher 204 oder an einer weiteren Speicherstelle angeordnet sein kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen können. Einen Zeiger auf jede Datenstruktur wird in einem Schiebepuffer (das heißt einem Puffer im Speicher, der einen Befehlsstrom für die PPU 202 speichert) abgelegt, um die Verarbeitung des Befehlsstroms in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Schiebepuffern aus und führt dann Befehle asynchron relativ zur Betriebsweise der CPU 102 aus. Die Prioritäten für die Ausführung können jedem Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 angegeben werden, um die Disponierung bzw. den Ablauf der unterschiedlichen Schiebepuffer zu steuern.
  • Es sei nun wieder zurückverwiesen auf 2 sowie auf 1; jede PPU 202 enthält eine I/O-(Eingangs/Ausgangs-)Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 in Verbindung steht, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) verbunden ist. Die Verbindung der PPU 202 mit dem Rest des Computersystems 100 kann auch anders sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Zusatzkarte realisiert, die in einen Erweiterungsplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 auf einem einzelnen Chip zusammen mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 in einem einzelnen Chip zusammen mit der CPU 102 integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Express-Verbindung, in der jeder PPU 202 spezielle Bahnen zugewiesen sind, wie dies im Stand der Technik bekannt ist. Es können auch andere Kommunikationspfade verwendet werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113, wobei die eintreffenden Pakete zu entsprechenden Komponenten der PPU 202 geleitet werden. Beispielsweise können Befehle, die mit Verarbeitungsaufgaben in Beziehung stehen, zu einer übergeordneten Schnittstelle 206 geleitet werden, während Befehle, die mit Speicheroperationen in Verbindung stehen (beispielsweise Lesen aus oder schreiben in den Parallelverarbeitungs-Speicher 204) können zu einer Speicherkreuzungseinheit 210 geleitet werden. Die übergeordnete Schnittstelle 206 liest jeden Schiebepuffer aus und gibt den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212 aus.
  • Jede PPU 202 realisiert vorteilhafterweise eine hoch parallele Verarbeitungsarchitektur. Wie im Detail gezeigt ist, enthält die PPU 202(0) ein Verarbeitung-Cluster-Array 230, das eine Anzahl C an allgemeinen Verarbeitungs-Clustern (GPCs) 208 enthält, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) an Strängen gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPC 208 unterschiedlichen Arten von Programmen zugewiesen werden oder für das Ausführen unterschiedlicher Arten von Berechnungen zugewiesen werden. Die Zuweisung von GPCs 208 kann in Abhängigkeit von der Arbeitsauslastung variieren, die für jede Art von Programmen oder Berechnung entsteht.
  • Die GPCs 208 empfangen auszuführende Verarbeitungsaufgaben von einer Arbeitsverteilungseinheit innerhalb einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-MetA-Daten (TMD) codiert und im Speicher gespeichert sind. Die Zeiger auf die TMD sind in dem Befehlstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der übergeordneten Schnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indizes von zu verarbeitenden Daten, sowie Zustandsparameter und Befehle, die festlegen, wie die Daten zu verarbeiten sind (beispielsweise welches Programm auszuführen ist). Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass die GPCs 208 auf einen zulässigen Zustand konfiguriert sind, bevor die von jeweiligen der TMD spezifizierte Verarbeitung initiiert wird. Es kann eine Priorität für alle TMD festgelegt werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können auch aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Kopf oder dem Endbereich für eine Liste von Verarbeitungsaufgaben hinzugefügt werden (oder eine Liste aus Zeigern auf die Verarbeitungsaufgaben), wodurch eine weitere Ebene einer Steuerung für die Priorität bereitgestellt wird.
  • Die Speicherschnittstelle 214 enthält eine Anzahl D an Partitionseinheiten 215, die jeweils direkt mit einem Teilbereich des Parallelverarbeitungs-Speichers 204 verbunden sind, wobei D ≥ 1 ist. Wie gezeigt, ist die Anzahl an Partitionseinheiten 215 generell gleich der Anzahl an dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 215 unter Umständen nicht gleich der Anzahl an Speichereinrichtungen. Der Fachmann erkennt, dass der DRAM 220 durch andere geeignete Speichereinrichtungen ersetzt werden kann und generell von konventioneller Gestaltung sein kann. Eine detaillierte Beschreibung wird daher weggelassen. Bilderzeugungsziele, etwa Blockpuffer oder Texturzuordnungen können über die DRAMs 220 hinweg gespeichert werden, wodurch es den Partitionseinheiten 215 möglich ist, Teilbereiche jedes Bilderzeugungsziels parallel zu beschreiben, um effizient die verfügbare Bandbreite des Parallelverarbeitungs-Speichers 204 auszunutzen.
  • Jede der GPCs 208 kann Daten verarbeiten, die in einem der DRAMs 220 in dem Parallelverarbeitungs-Speicher 204 zu schreiben sind. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 zum Eingang einer beliebigen Partitionseinheit 215 oder einer weiteren GPC 208 für die Weiterverarbeitung zu leiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um aus diversen externen Speichereinrichtungen zu lesen oder in diese zu schreiben. In einer Ausführungsform besitzt die Kreuzungseinheit 210 eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 in Verbindung zu treten, und besitzt auch eine Verbindung zu dem lokalen Parallelverarbeitungs-Speicher 204, wodurch die Verarbeitungskerne in den unterschiedlichen GPCs 208 in der Lage sind, mit dem Systemspeicher 104 oder einem anderen Speicher, der nicht lokal für die PPU 202 ist, zu kommunizieren. In der in 2 gezeigten Ausführungsform ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzungseinheit 210 kann virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Wiederum können die GPCs 208 programmiert sein, um Verarbeitungsaufgaben, die mit einer Fülle von Anwendungen in Beziehung stehen, auszuführen, wozu, ohne einschränkend zu sein, lineare und nichtlineare Datentransformationen, die Filterung von Video- und/oder Audiodaten, Modelloperationen (beispielsweise Anwendung physikalischer Gesetze zur Bestimmung von Position, Geschwindigkeit und anderen Attributen von Objekten), Bilderzeugungsoperation (beispielsweise Programmen für Parkettierungs-Schattierung, Eckpunkte-Schattierung, Geometrie-Schattierung, und/oder Pixel-Schattierung) usw. gehören. Die PPUs 202 können Daten von dem Systemspeicher 104 und/oder von lokalen Parallelverarbeitungs-Speicher 204 in interne (chipinterne) Speicher übertragen, können die Daten verarbeiten und Ergebnisdaten zurück in den Systemspeicher 104 und/oder die lokalen Parallelverarbeitungs-Speicher 204 schreiben, wodurch auf derartige Daten von anderen Systemkomponenten zugegriffen werden kann, wozu die CPU 102 oder ein weiteres Parallelverarbeitungssubsystem 112 gehören.
  • Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungs-Speicher 204 versehen sein, wozu auch kein lokaler Speicher gehört, und kann den lokalen Speicher und den Systemspeicher in beliebiger Kombination verwenden. Beispielsweise kann eine PPU 202 ein Grafikprozessor sein in einer vereinheitlichten Speicherarchitektur-(UMA)Ausführungsform. In derartigen Ausführungsformen würde wenig oder kein spezieller Grafikspeicher (Parallelverarbeitungs-Speicher) bereitgestellt werden, und die PPU 202 würde ausschließlich oder nahezu ausschließlich den Systemspeicher verwenden. In UMA-Ausführungsformen kann eine PPU 202 in einen Brückenchip oder einem Prozessorchip integriert sein oder kann als ein diskreter Chip mit einem Hochgeschwindigkeitsanschluss, beispielsweise PCI-Express) vorgesehen werden, die die PPU 202 mit dem Systemspeicher über einen Brückenchip oder andere Kommunikationseinrichtungen verbindet.
  • Wie zuvor angegeben ist, kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 in einer einzelnen Zusatzkarte bereitgestellt sein, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 113 verbunden sein, oder eine oder mehrere der PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können unterschiedliche PPUs 202 eine unterschiedliche Anzahl an Verarbeitungskernen, unterschiedliche Größen an lokalem Parallelverarbeitungs-Speicher usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, um Daten mit einem höheren Durchsatz zu verarbeiten, als dies mit einer einzelnen PPU 202 möglich ist. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren realisiert sein, wozu Tischrechner, mobile Rechner, oder Hand-Personalcomputer, Dienstleistungsrechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme usw. gehören.
  • Mehrfache gleichzeitige Aufgabendisponierung
  • Es können mehrere Verarbeitungsaufgaben gleichzeitig in den GPCs 208 ausgeführt werden, und eine Verarbeitungsaufgaben kann während der Ausführung ein oder mehrere „Kind-”Verarbeitungsaufgaben erzeugen. Die Aufgaben/Arbeitseinheit 207 empfängt die Aufgaben und disponiert dynamisch die Verarbeitungsaufgaben und die Kind-Verarbeitungsaufgaben für die Ausführung durch die GPCs 208.
  • 3A ist eine Blockansicht der Aufgaben/Arbeitseinheit 207 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Die Aufgaben/Arbeitseinheit 207 umfasst eine Aufgabenverwaltungseinheit 300 und die Arbeitsverteilungseinheit 340. Die Aufgabenverwaltungseinheit 300 verwaltet Aufgaben derart, dass diese auf der Grundlage des Grades an Aufgabenpriorität disponiert werden. Für jede Prioritätsebene speichert die Aufgabenverwaltungseinheit 300 eine Liste aus Zeigern auf die TMD 322, die den Aufgaben in der Disponiertabelle 321 entsprechen, wobei die Liste als eine verknüpfte Liste realisiert werden kann. Die TMD 322 können in dem PP-Speicher 204 oder in dem Systemspeicher 104 gespeichert sein. Die Rate, mit der die Aufgabenverwaltungseinheit 300 Aufgaben annimmt und die Aufgaben in der Disponiertabelle 321 speichert, ist unabhängig von der Rate, mit der die Aufgabenverwaltungseinheit 300 Aufgaben für die Ausführung disponiert. Daher kann die Aufgabenverwaltungseinheit 300 mehrere Aufgaben vor dem Disponieren der Aufgaben sammeln. Die gesammelten Aufgaben können dann auf der Grundlage einer Prioritätsinformation oder unter Anwendung von Techniken, etwa einer Rundlauf-Disponierung, disponiert werden.
  • Die Arbeitsverteilungseinheit 340 umfasst eine Aufgabentabelle 345 mit Spalten bzw. Zeitnischen, die jeweils von den TMD 322 für eine Aufgabe, die gerade ausgeführt wird, besetzt sein können. Die Aufgabenverwaltungseinheit 300 kann Aufgaben für die Ausführung disponieren, wenn es eine freie Spalte in der Aufgabentabelle 345 gibt. Wenn es keine freie Spalte bzw. Zeitnische gibt, kann eine Aufgabe mit höherer Priorität, die keine Spalte besetzt, eine Aufgabe mit geringerer Priorität verdrängen, die eine Spalte einnimmt. Wenn eine Aufgabe verdrängt wird, wird die Aufgabe angehalten, und wenn die Ausführung der Aufgabe nicht abgeschlossen ist, dann kann ein Zeiger auf die Aufgabe zu einer Liste aus Aufgabenzeiger, die zu disponieren sind, hinzugefügt werden, so dass die Ausführung der Aufgabe zu einer späteren Zeit wieder fortgesetzt wird. Wenn eine Kind-Verarbeitungsaufgabe während der Ausführung einer Aufgabe erzeugt wird, wird ein Zeiger auf die Kind-Aufgabe der Liste aus Aufgabenzeiger, die zu disponieren sind, hinzugefügt. Eine Kind-Aufgabe kann von den TMD 322 erzeugt werden, die in dem Verarbeitungs-Cluster-Array 230 abgearbeitet werden.
  • Anders als eine Aufgabe, die von der Aufgaben/Arbeitseinheit 207 aus dem Frontbereich 212 empfangen wird, werden Kind-Aufgaben aus dem Verarbeitungs-Cluster-Array 230 empfangen. Kind-Aufgaben werden nicht in Schiebepuffer eingefügt oder an den Frontbereich gesendet. Die CPU 102 wird nicht verständigt, wenn eine Kind-Aufgabe erzeugt wird oder Daten für die Kind-Aufgabe in dem Speicher gespeichert werden. Ein weiterer Unterschied zwischen den Aufgaben, die mittels Schiebepuffern bereitgestellt werden, und Kind-Aufgaben besteht darin, dass die durch die Schiebepuffer bereitgestellten Aufgaben von dem Anwendungsprogramm definiert sind, wohingegen die Kind-Aufgaben während der Ausführung der Aufgaben dynamisch erzeugt werden.
  • Überblick über die Aufgabenverarbeitung
  • 3B ist eine Blockansicht einer GPC 208 innerhalb einer der PPUs 202 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann ausgebildet sein, eine große Anzahl an Strängen parallel auszuführen, wobei der Begriff „Strang” eine Instanz eines speziellen Programms bezeichnet, das auf einem speziellen Satz an Eingangsdaten operiert. In einigen Ausführungsformen werden Einzelbefehl, Mehrfach-Daten-(SIMD)Befehlsausgabetechniken angewendet, um eine parallele Abarbeitung einer großen Anzahl an Strängen ohne das Vorsehen mehrerer unabhängiger Befehlseinheiten zu unterstützen. In anderen Ausführungsformen werden Einzelbefehl, Mehrfach-Strang-(SIMT)Techniken eingesetzt, um eine parallele Abarbeitung einer großen Anzahl an generell synchronisierten Strängen zu unterstützen, wobei eine übliche Befehlseinheit verwendet wird, die ausgebildet ist, Befehle an eine Gruppe von Verarbeitungseinheiten innerhalb jeder einzelnen der GPCs 208 auszugeben. Anders als bei einem SIMD-Ausführungsregime, in welchem Verarbeitungseinheiten typischerweise identische Befehle ausführen, erlaubt eine SIMT-Ausführung, dass unterschiedliche Stränge besser divergenten Ausführungspfaden durch ein gegebenes Strangprogramm folgen. Der Fachmann auf dem Gebiet versteht, dass ein SIMD-Verarbeitungsregime eine funktionale Untergruppe eines SIMT-Verarbeitungsregimes darstellt. In ähnlicher Weise repräsentiert ein SISD-(Einzelbefehl-Einzeldaten-) oder eine MIMD-(Mehrfachbefehl-Mehrfachdaten-)Regime ebenfalls eine Untermenge eines SIMT-Regimes.
  • Der Betrieb des GPC 208 wird vorteilhafterweise über einen Pipeline-Verwalter 305 gesteuert, der Verarbeitungsaufgaben an Datenstrom-Multi-Prozessoren (SM) 310 verteilt. Der Pipeline-Verwalter 305 kann auch ausgebildet sein, eine Arbeitsverteilungskreuzungseinheit 330 dadurch zu steuern, dass spezielle Ziele durch den SM 310 für verarbeitete Datenausgaben angegeben werden.
  • In einer Ausführungsform umfasst jeder GPC 208 eine Anzahl M aus SM 310, wobei M ≥ 1 ist, wobei jeder SM 310 ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Ferner enthält jeder SM 310 vorteilhafterweise eine identische Gruppe aus Funktionsausführungseinheiten (beispielsweise Ausführungseinheiten und Lade-Speicher-Einheiten – die als Exec-Einheiten 302 und LSUs 303 in 3C gezeigt sind), die als Pipeline betrieben werden können, wodurch ein neuer Befehl ausgegeben werden kann, bevor ein vorhergehender Befehl fertig bearbeitet ist, wie dies im Stand der Technik bekannt ist. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten bereitgestellt werden. In einer Ausführungsform unterstützen die Funktionseinheiten eine Vielzahl von Operationen, wozu Ganzzahl- oder Gleitkommazahlarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, XOR), Bit-Verschiebung und Berechnung diverser algebraischer Funktionen (beispielsweise ebene Interpolation, Trigonometrie, exponentielle und logarithmische Funktionen usw.) gehören; und die gleiche Funktionseinheiten-Hardware kann wirksam eingesetzt werden, um unterschiedliche Operationen auszuführen.
  • Die Reihe von Befehlen, die einem speziellen GPC 208 zugeleitet werden, bilden einen Strang, wie dies zuvor hierin definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen über die Parallelverarbeitungseinheiten hinweg (nicht gezeigt) innerhalb eines SM 310 wird hierin als eine „Wölbung” oder „Stranggruppe” bezeichnet. Im hierin verwendeten Sinne bezeichnet eine „Stranggruppe” eine Gruppe aus Strängen, die gleichzeitig das gleiche Programm an verschiedenen Eingangsdaten ausführt, wobei ein einzelner Strang der Gruppe einer anderen Verarbeitungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 enthalten, in welchem Falle gewisse Verarbeitungseinheiten in Zyklen untätig sind, wenn diese Stranggruppe verarbeitet wird. Eine Stranggruppe kann ferner mehr Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 enthalten, in welchem Falle die Verarbeitung über aufeinanderfolgende Taktzyklen hinweg erfolgen wird. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig handhaben kann, folgt, dass bis zu G·M Stranggruppen in dem GPC 208 zu jeder Zeit ausgeführt werden können.
  • Ferner können mehrere in Beziehung stehende Stranggruppen (in unterschiedlichen Phasen der Ausführung) gleichzeitig innerhalb eines SM 310 aktiv sein. Diese Ansammlung aus Stranggruppen wird hierin als ein „kooperatives Strang-Array” („CTA”) oder „Strang-Array” bezeichnet. Die Größe eines speziellen CTA ist gleich m·k, wobei k die Anzahl gleichzeitig ausgeführter Stränge in einer Stranggruppe ist und typischerweise ein ganzzahliges Vielfaches der Anzahl an Parallelverarbeitungseinheiten innerhalb des SM 310 ist, und m ist die Anzahl an Stranggruppen, die gleichzeitig innerhalb des SM 310 aktiv sind. Die Größe eines CTA ist generell von dem Programmierer und der Menge an Hardwareressourcen, etwa Speichern oder Registern, die für das CTA verfügbar sind, bestimmt.
  • Jeder SM 310 enthält einen Cache-Speicher der Ebene 1 (L1) (in 3C gezeigt) oder verwendet Speicherplatz in einem entsprechenden L1-Cache-Speicher außerhalb des SM 310, der verwendet wird, um Lade- und Speicheroperationen auszuführen. Jeder SM 310 hat ferner Zugriff auf Cache-Speicher der Ebene 2 (L2), die gemeinsam von allen GPCs 208 benutzt werden und die verwendet werden können, um Daten zwischen Strängen auszutauschen. Schließlich haben die SMs 310 auch Zugriff auf einen chipexternen „globalen” Speicher, der beispielsweise den Parallelverarbeitungs-Speicher 204 und/oder den Systemspeicher 104 umfassen kann. Zu beachten ist, dass ein beliebiger Speicher außerhalb der PPU 202 als globaler Speicher verwendet werden kann. Ferner kann ein Cache-Speicher der Ebene eins-Punkt-fünf (L1.5) in dem GPC 208 enthalten und ausgebildet sein, Daten zu empfangen und zu halten, die aus dem Speicher über die Speicherschnittstelle 214 abgerufen werden und von dem SM 310 angefordert sind, wozu Befehle, gleichmäßige Daten und konstante Daten gehören, und die angeforderten Daten dem SM 310 zuzuführen. Ausführungsformen mit mehreren SMs 310 in dem GPC 208 verwenden vorteilhafterweise gemeinsame Befehle und Daten, die in dem Cache-Speicher L1.5 335 abgelegt sind.
  • Jeder GPC 208 kann eine Speicherverwaltungseinheit (MMU) 328 enthalten, die ausgebildet ist, virtuelle Adressen physikalischen Adressen zuzuordnen. In anderen Ausführungsformen kann bzw. können die MMU(s) 328 innerhalb der Speicherschnittstelle 214 angeordnet sein. Die MMU 328 enthält eine Gruppe aus Seitentabelleneinträgen (PTEs), die zum Zuordnen einer virtuellen Adresse zu einer physikalischen Adresse einer Kachel verwendet ist, und optional einen Cache-Zeilenindex. Die MMU 328 kann Adressen-Translations-Nebenschau-Puffer (TLB) oder Cache-Speicher enthalten, die in dem Multiprozessor SM 310 oder dem L1-Cache-Speicher oder dem GPC 208 angeordnet sind. Die physikalische Adresse wird verarbeitet, um Oberflächendaten-Zugriffslokalität zu verteilen, so dass eine effiziente Anforderungsverschachtelung zwischen Partitionseinheiten 215 möglich ist. Der Cache-Zeilenindex kann verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cache-Zeile ein Treffer oder kein Treffer ist.
  • In grafischen Anwendungen und Rechenanwendungen kann ein GPC 208 so ausgebildet sein, dass jeder SM 310 mit einer Textureinheit 315 zum Ausführen von Texturzuordnungsoperationen verbunden ist, beispielsweise die Bestimmung von Texturprobenpositionen, das Auslesen von Texturdaten und das Filtern der Texturdaten. Texturdaten werden aus einem internen Textur-L1-Cache-Speicher (nicht gezeigt) oder in einigen Ausführungsformen aus dem L1-Cache-Speicher innerhalb des SM 310 ausgelesen und aus einem L2-Cache-Speicher, der für alle GPCs 208 gemeinsam ist, aus dem Parallelverarbeitungs-Speicher 204 oder dem Systemspeicher 104 nach Bedarf abgerufen. Jeder SM 310 gibt verarbeitete Aufgaben an die Arbeitsverteilungskreuzungseinheit 330 aus, um die verarbeitete Aufgabe einem weiteren GPC 208 für die weitere Verarbeitung zuzuleiten oder um die verarbeitete Aufgabe in einem L2-Cache-Speicher, in dem Parallelverarbeitungs-Speicher 204 oder in dem Systemspeicher 104 über die Kreuzungseinheit 210 zu speichern. Eine Vor-ROP-Einheit (Vor-Rasteroperationen) 325 ist ausgebildet, Daten aus dem SM 310 zu empfangen, Daten an ROP-Einheiten innerhalb der Partitionseinheiten 215 weiterzuleiten und Optimierungen für die Farbmischung auszuführen, Pixel-Farbdaten zu organisieren und Adressenübersetzungen auszuführen.
  • Es ist zu beachten, dass die hierin beschriebene Kernarchitektur anschaulich ist und dass Variationen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungseinheiten, beispielsweise SMs 310 oder Textureinheiten 315, Vor-ROP-Einheiten 325 in einem GPC 208 enthalten sein. Wie ferner in 2 gezeigt ist, kann eine PPU 202 eine beliebige Anzahl an GPCs 208 enthalten, die vorteilhafterweise in funktionaler Hinsicht ähnlich zueinander sind, so dass das Arbeitsverhalten nicht davon abhängt, welcher GPC 208 eine spezielle Verarbeitungsaufgaben empfängt. Ferner arbeitet jeder GPC 208 vorteilhafterweise unabhängig von anderen GPCs 208 unter Verwendung separater und unabhängiger Verarbeitungseinheiten, L1-Cache Speicher, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen.
  • Der Fachmann auf diesem Gebiet weiß, dass die in den 1, 2, 3A und 3B beschriebene Architektur in keiner Weise den Schutzbereich der vorliegenden Erfindung beschränkt und dass die hierin gelehrten Techniken in einer beliebigen geeignet konfiguriertem Verarbeitungseinheit realisiert werden können, wozu, ohne Einschränkung, gehören: eine oder mehrere CPUs, eine oder mehrere CPUs mit mehreren Kernen, eine oder mehrere PPUs 202, ein oder mehrere GPCs 208, eine oder mehrere grafische Verarbeitungseinheiten oder Verarbeitungseinheiten für spezielle Zwecke, usw., ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen.
  • In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder einen anderen Prozessor oder Prozessoren eines Rechnersystems zu verwenden, um Berechnungen für Allgemeinzwecke unter Verwendung von Strang-Arrays auszuführen. Jedem Strang in dem Strang-Array ist eine eindeutige Strangkennung („Strang-ID”) zugewiesen, auf die von dem Strang während der Ausführung des Strangs zugegriffen werden kann. Die Strang-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert diverse Aspekte des Prozessverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welcher Teilbereich des Eingangsdatensatzes von einem Strang verarbeitet werden soll, und/oder um zu bestimmen, welcher Teilbereich eines Ausgangsdatensatzes von einem Strang erzeugt oder geschrieben werden soll.
  • Eine Sequenz aus Befehlen pro Strang kann mindestens einen Befehl umfassen, der ein kooperatives Verhalten zwischen dem repräsentativen Strang und einem oder mehreren anderen Strängen des Strang-Arrays festlegt. Beispielsweise kann die Sequenz aus Befehlen pro Strang einen Befehl enthalten, um die Ausführung von Operationen für den repräsentativen Strang an einem speziellen Punkt in der Sequenz auszusetzen, bis zu dem Zeitpunkt, an welchem ein oder mehrere der anderen Stränge diesen speziellen Punkt erreichen, einen Befehl für den repräsentativen Strang enthalten, um Daten in einem gemeinsamen Speicher zu speichern, auf den ein oder mehrere der anderen Stränge Zugriff haben, einen Befehl für den repräsentativen Strang enthalten, um Daten in atomarer Weise zu lesen und zu aktualisieren, die in einem gemeinsamen Speicher abgelegt sind, auf den ein oder mehrere der anderen Stränge auf Grundlage ihrer Strang-ID Zugriff haben, oder dergleichen. Das CTA-Programm kann ferner einen Befehl enthalten, um eine Adresse für den gemeinsamen Speicher zu berechnen, aus dem Daten auszulesen sind, wobei die Adresse eine Funktion der Strang-ID ist. Durch das Definieren geeigneter Funktionen und das Bereitstellen von Synchronisiertechniken können Daten an eine gegebene Speicherstelle in einem gemeinsamen Speicher durch einen Strang eines CTA geschrieben und aus dieser Speicherstelle durch einen anderen Strang des gleichen CTA in einer vorhersagbaren Weise ausgelesen werden. Folglich kann ein beliebiges gewünschtes Muster für die gemeinsame Nutzung von Daten zwischen Strängen unterstützt werden, und jeder Strang in einem CTA kann Daten mit einem anderen Strang in dem gleichen CTA gemeinsam benutzen. Der Grad, falls verhandeln, der gemeinsamen Datennutzung zwischen den Strängen eines CTA ist durch das CTA-Programm bestimmt; es ist daher zu beachten, dass in einer speziellen Anwendung, die CTAs verwendet, die Stränge eines CTA gemeinsam Daten nutzen können oder auch nicht, wobei dies von dem CTA-Programm abhängt, und die Begriffe „CTA” und „Strang-Array” werden hierin als Synonym verwendet.
  • 3C ist eine Blockansicht des SM 310 aus 3B gemäß einer Ausführungsform der vorliegenden Erfindung. Der SM 310 umfasst einen Befehls-L1-Cache-Speicher 370, der ausgebildet ist, Befehle und Konstanten aus dem Speicher über den L1.5-Cache-Speicher 335 zu empfangen. Eine Wölbungs-Disponier- und Befehlseinheit 312 empfängt Befehle und Konstanten aus dem Befehls-L1-Cache-Speicher 370 und steuert eine lokale Registerdatei 304 und die SM 310-Funktionseinheiten entsprechend den Befehlen und den Konstanten. Die SM 310-Funktionseinheiten enthalten N Exec-(Ausführungs- oder Verarbeitungs-)Einheiten 302 und P Lade-Speicher-Einheiten (LSU) 303.
  • Der SM 310 stellt chipinternen (internen) Datenspeicherplatz bereit mit unterschiedlichen Ebenen an Zugreifbarkeit. Spezialregister (nicht gezeigt) können ausgelesen aber nicht beschrieben werden durch die LSU 303 und werden verwendet, um Parameter zu speichern, die die „Position” jedes Strangs festlegen. In einer Ausführungsform umfassen die Spezialregister ein einzelnes Register pro Strang (oder pro Exec-Einheit 302 innerhalb des SM 310), das eine Strang-ID speichert; jedes Strang-ID-Register kann nur von einer entsprechenden einen der Exec-Einheiten 302 ausgelesen werden. Die Spezialregister können ferner zusätzliche Register umfassen, die von allen Strängen ausgelesen werden können, die die gleiche Verarbeitungsaufgaben ausführen, die von einem Satz an TMD 322 repräsentiert ist (oder von allen LSUs 303), die eine CTA-Kennung, die CTA-Dimensionen, die Dimensionen eines Gitters, zu welchen das CTA gehört (oder Warteschlangenposition, wenn die TMD 322 eine Warteschlangeaufgabe anstelle einer Gitteraufgabe kodieren) und eine Kennung der TMD 322 speichern, denen das CTA zugeordnet ist.
  • Wenn die TMD 322 Gitter-TMD sind, verursacht die Ausführung der TMD 322, dass eine feste Anzahl an CTA gestartet und ausgeführt wird, um die festgelegte Menge an Daten zu verarbeiten, die in der Warteschlange gespeichert sind. Die Anzahl an CTAs ist als das Produkt der Gitterbreite, Gitterhöhe und Gittertiefe spezifiziert. Die festgelegte Menge an Daten kann in den TMD 322 gespeichert sein oder die TMD 322 können einen Zeiger auf die Daten speichern, die von den CTAs verarbeitet werden. Die TMD 322 speichern ferner eine Startadresse des Programms, das von den CTAs ausgeführt wird.
  • Wenn die TMD 322 Warteschlangen-TMD sind, dann wird ein Warteschlangemerkmal der TMD 322 verwendet, was bedeutet, dass die zu verarbeitende Datenmenge nicht notwendigerweise festgelegt ist. Warteschlangeneinträge speichern Daten für die Verarbeitung durch die CTAs, die den TMD 322 zugeordnet sind. Die Warteschlangeneinträge können auch eine Kind-Aufgabe repräsentieren, die von weiteren TMD 322 während der Ausführung eines Strangs erzeugt wird, wodurch eine eingebettete Parallelität bereitgestellt wird. Typischerweise wird die Ausführung des Strangs oder des CTA, der bzw. das den Strang enthält, ausgesetzt, bis die Ausführung der Kind-Aufgabe abgeschlossen ist. Die Warteschlange kann in den TMD 322 oder separat zu den TMD 322 gespeichert sein, in welchem Falle die TMD 322 einen Warteschlangenzeiger auf die Warteschlange speichern. Vorteilhafterweise können Daten, die von der Kind-Aufgabe erzeugt sind, in die Warteschlange geschrieben werden, während die TMD 322, die die Kind-Aufgabe repräsentieren, abgearbeitet werden. Die Warteschlange kann als eine Ring-Warteschlange realisiert werden, so dass die gesamte Menge an Daten nicht durch die Größe der Warteschlange begrenzt ist.
  • CTA, die zu einem Gitter gehören, besitzen implizite Parameter für die Gitterbreite, Höhe und Tiefe, wodurch die Position des jeweiligen CTA innerhalb des Gitters angegeben ist. Die Spezialregister werden während der Initialisierung in Reaktion auf Befehle beschrieben, die über den Frontbereich 212 aus dem Gerätetreiber 103 empfangen werden, und die Register ändern sich nicht während der Ausführung einer Verarbeitungsaufgabe. Der Frontbereich 212 disponiert jede Verarbeitungsaufgabe für die Ausführung. Jedes CTA ist mit speziellen TMD 322 für die gleichzeitige Ausführung einer oder mehrerer Aufgaben verknüpft. Ferner kann ein einzelner GPC 208 mehrere Aufgaben gleichzeitig ausführen.
  • Ein Parameterspeicher (nicht gezeigt) speichert Laufzeitparameter (Konstanten), die von einem beliebigen Strang innerhalb des gleichen CTA (oder einer LSU 303) ausgelesen aber nicht geschrieben werden können. In einer Ausführungsform leitet der Gerätetreiber 103 Parameter dem Parameterspeicher zu, bevor der SM 310 angewiesen wird, die Ausführung einer Aufgabe zu beginnen, die diese Parameter verwendet. Ein beliebiger Strang innerhalb eines beliebigen CTA (oder einer Exec-Einheit 302 in dem SM 310) kann auf den globalen Speicher über eine Speicherschnittstelle 214 zugreifen. Bereiche des globalen Speichers können in dem L1-Cache-Speicher 320 gespeichert werden.
  • Die lokale Registerdatei 304 wird von jedem Strang als Arbeitsraum verwendet; jedes Register ist für die ausschließliche Verwendung durch einen einzelnen Strang reserviert, und Daten in einer beliebigen lokalen Registerdatei 304 sind nur von dem Strang abrufbar, dem das Register zugewiesen ist. Die lokale Registerdatei 304 kann als eine Registerdatei realisiert werden, die physikalisch oder logisch in P Bahnen unterteilt ist, wobei jede eine gewisse Anzahl an Einträgen besitzt (wobei jeder Eintrag beispielsweise ein 32-Bit-Wort speichern kann). Es ist jeweils eine Bahn jeder der N Exec-Einheiten 302 und jeder der P Lade-Speicher-Einheiten LS 303 zugewiesen, und entsprechende Einträge in unterschiedlichen Bahnen können mit Daten für unterschiedliche Stränge, die das gleiche Programm ausführen, angereichert werden, um eine SIMD-Ausführung zu ermöglichen. Unterschiedliche Bereiche der Bahnen können unterschiedlichen Gruppen der G gleichzeitigen Stranggruppen zugewiesen werden, so dass ein gegebener Eintrag in der lokalen Registerdatei 304 nur von einem speziellen Strang abgerufen werden kann. In einer Ausführungsform sind gewisse Einträge innerhalb der lokalen Registerdatei 304 zur Speicherung von Strangkennungen reserviert, wodurch eines der Spezialregister realisiert wird. Ferner enthält ein gleichförmiger L1-Cache-Speicher 375 gleichmäßige oder konstante Werte für jede Bahn der N Exec-Einheiten 302 und der P Lade-Speicher-Einheiten LS 303.
  • Auf den gemeinsamen Speicher 306 kann von Strängen innerhalb eines einzelnen CTA zugegriffen werden; anders ausgedrückt, jede Speicherstelle in dem gemeinsamen Speicher 306 ist für jeden Strang innerhalb des gleichen CTA ansprechbar (oder eine beliebige Verarbeitungseinheit innerhalb des SM 310). Der gemeinsame Speicher 306 kann als eine gemeinsame Registerdatei oder ein gemeinsamer chipinterner Cache-Speicher mit einer Verbindung realisiert sein, die es einer beliebigen Verarbeitungseinheit ermöglicht, eine beliebige Stelle in dem gemeinsamen Speicher zu beschreiben oder diese auszulesen. In anderen Ausführungsformen kann ein gemeinsamer Zustandsraum auf ein Gebiet pro CTA eines chipexternen Speichers abgebildet sein, und kann in dem L1-Cache-Speicher 320 zwischengespeichert sein. Der Parameterspeicher kann als ein spezieller Abschnitt innerhalb der gleichen gemeinsamen Registerdatei oder des gemeinsamen Cache-Speichers realisiert sein, der den gemeinsamen Speicher 306 bildet, oder kann als eine separate gemeinsame Registerdatei oder ein chipinterner Cache-Speicher realisiert sein, auf den die LSUs 303 einen Nur-Lese-Zugriff besitzen. In einer Ausführungsform wird der Bereich, der den Parameterspeicher realisiert, auch verwendet, um die CTA-ID und die Aufgaben-ID sowie CTA- und Gitterabmessungen oder Warteschlangenposition zu speichern, wodurch Bereiche der Spezialregister realisiert werden. Jede LSU 303 in dem SM 310 ist mit einer vereinheitlichten Adressenzuordnungseinheit 352 verbunden, die eine Adresse, die für ade- und Speicherbefehle bereitgestellt ist, die in einem vereinheitlichten Speicherbereich angegeben sind, in eine Adresse in jedem separaten Speicherbereich umwandelt. Folglich kann ein Befehl verwendet werden, um auf den lokalen, gemeinsamen oder globalen Speicherbereich zuzugreifen, indem eine Adresse in dem vereinheitlichten Speicherbereich angegeben wird.
  • Der L1-Cache-Speicher 320 in jedem SM 310 kann verwendet werden, um private lokale Daten pro Strang und auch globale Daten pro Anwendung zwischenzuspeichern. In einigen Ausführungsformen können die gemeinsamen Daten pro CTA in dem L1-Cache-Speicher 320 zwischengespeichert werden. Die LSUs 303 sind mit dem gemeinsamen Speicher 306 und dem L1-Cache-Speicher 320 über eine Speicher- und Cache-Verbindung 380 verbunden.
  • Strang-Logikkennung
  • Ein Eingangsarbeitspuffer, der mehrere Arbeitselemente enthält, ist einem CTA für die Verarbeitung zugeordnet. Der Arbeitspuffer kann Arbeitselemente für eine Pixel-Kachel enthalten, wobei jedes Arbeitselement einem speziellen Gebiet der Pixel-Kachel entspricht. Es wird eine Anzahl an Strängen gleich der Anzahl an Arbeitselementen in dem Arbeitspuffer vor dem „Eltern-”CTA angeheftet. Wenn es einen Überschuss an Arbeitselementen gibt, dann wird gegebenenfalls eine Teilgruppe der verfügbaren Arbeitselemente dem „Eltern-”CTA angeheftet. Eine logische Kennung, die bezogen ist auf das Eltern-CTA wird jedem Strang zugeordnet und die logische Kennungen wird größer der Reihe nach, so dass die logischen Kennungen die Reihenfolge angeben, in der die Stränge gestartet werden. Die logischen Kennungen sind in einem linearen Raum und nicht in einem mehrdimensionalen Raum definiert. Bei Bedarf können die Stränge ausgebildet sein, kritische Abschnitte eines Codes auf der Grundlage der logischen Kennungen auszuführen. Wenn die logischen Kennungen von jedem Strang verwendet werden, um einen Eingangsarbeitspuffer zu indizieren, können die Stränge eines CTA in der Reihenfolge der Arbeit (über die Zuordnung von logischen Strang zu physikalischen Strang) ausgeführt werden. Dabei ist wichtig, dass die logischen Kennungen für die Stränge in dem SM 310 gespeichert werden, so dass, selbst wenn die Verarbeitungsarbeit außerhalb des SM 310 gespeichert ist, der nächste Strang, der in der durch die logischen Kennungen spezifizierten Reihenfolge zu verarbeiten ist, ermittelt werden kann. Dann kann die Verarbeitungseinheit für den nächsten Strang in den SM 310 zur Verarbeitung geladen werden.
  • Um eine Abbildung von logischen Strang-ID in die physikalischen Stränge beizubehalten, führen wir das Konzept eines Strangblocks ein, wobei jeder Strangblock einer festgelegten Gruppe an physikalischen Strängen (beispielsweise 16 Stränge pro Block) entspricht. Beim Starten einer neuen Arbeit weisen wir zu jedem Zeitpunkt physikalischen Stränge einen einzelnen Strangblock zu. Auf diese Weise müssen wir die Abbildung nur mit einer Auflösung pro Block anstatt mit einer Auflösung pro Strang bewahren. 4 ist eine Konzeptansicht, die Strangblöcke eines CTA gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung darstellt. Wie in 4 gezeigt ist, können 16 CTAs in einem SM 310 ausgeführt werden, und jedes CTA kann acht unterschiedliche Barrieren benutzen, wovon jede eine eindeutige Barrierenkennung besitzt. Eine Barriere kann einen „oberen” und einen „unteren” Barrierenbefehl besitzen, um den Beginn und das Ende eines kritischen Code-Abschnitt innerhalb eines Programms zu definieren. Eine einfache Barriere enthält nur einen „oberen” Barrierenbefehl. In einer Ausführungsform wird der Programmzähler des „oberen” Barrierenbefehls einer Barrierenkennung als eine Marke hinzugefügt, so dass die gleiche Barrierenkennung an mehreren Stellen in einem einzelnen Programm verwendet werden kann. Der Programmzähler unterscheidet eindeutig zwischen unterschiedlichen Barrieren, wenn die gleiche Barrierenkennung mehr als einmal in dem Programm auftritt. In einer weiteren Ausführungsform wird ein ansteigender Zähler verwendet, um eindeutige Barrierenkennungen zu erzeugen.
  • Jedes CTA kann zumindest einem Strangblock zugewiesen werden, wobei ein Strangblock 16 Stränge enthält. Wie in 4 gezeigt ist, ist die maximale Anzahl an Strangblöcken, die einem CTA zugewiesen werden kann, acht. In einer weiteren Ausführungsform enthält ein Strangblock 64 Stränge und jedes CTA kann 512 oder mehr Stränge enthalten. Sechzehn Ketten werden für die Verarbeitung der Strangblöcke reserviert, wobei jede Kette 4 Stränge enthält. Daher ist jeder Strangblock eine Gruppe aus 64 Strängen mit Ressourcen, die zusammen zugewiesen sind. Wie in 4 gezeigt ist, können 128 Ketten gleichzeitig von einen SM 310 ausgeführt werden, und die vier Strangblöcke können auf unterschiedliche Ausführungseinheiten 302 zum Ausgleich der Auslastung über die unterschiedlichen Ausführungseinheiten 302 verteilt werden. In anderen Ausführungsformen kann eine unterschiedliche Anzahl von Strängen in einem CTA enthalten sein, und ein Strangblock kann eine andere Anzahl an Strängen enthalten.
  • Bei einer gegebenen logischen Kennung, die zu einem speziellen Strang gehört, kann die entsprechende Stranggruppe, die den speziellen Strang enthält, ermittelt werden. In einer Ausführungsform wird der Strangblock berechnet, indem die untersten 4 Bits der logischen Kennung abgeschnitten werden. Die untersten 4 Bits der logischen Kennung sind ein Offset innerhalb des Strangblocks. Die physikalische Kennung für den Strang wird berechnet, indem der Strangblock auf eine entsprechende Basis der physikalischen Kennung abgebildet wird und indem dann der Offset verwendet wird, um die Verarbeitungsressourcen, die für den Strang zugewiesen sind, zu ermitteln. Beispielsweise können die hohen Bits der physikalischen Kennung verwendet werden, um den Strangblock zu ermitteln, und die unteren Bits können verwendet werden, um den speziellen Strang innerhalb des Strangblocks zu ermitteln. Insgesamt gilt, dass die logische Kennung eine CTA-orientierte Kennung für jeden Strang in dem CTA ist und die physikalische Kennung ist eine Hardware-orientierte Kennung für jeden Strang, der von dem SM 310 für das CTA ausgeführt wird.
  • Disponierung für bedingten Barrierenbefehl
  • 5A ist eine Blockansicht der Kettendisponier- und Befehlseinheit 312 aus 3C gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung. Wie in 5A gezeigt ist, umfasst die Kettendisponier- und Befehlseinheit 312 eine Befehls-Cache-Abholeinheit 412, die ausgebildet ist, Cache-Zeilen, die Befehle für Ketten enthalten, aus dem Befehls-L1-Cache-Speicher 370 abzuholen. In einer Ausführungsform hat jede Cache-Zeile eine Breite von 512 Bits, wodurch acht Befehle (mit einer Breite von 64 Bit) in einer einzelnen Cache-Zeile gespeichert werden. Die Befehls-Cache-Abholeinheit 412 gibt die Befehle an die Befehlsdisponiereinheit 420 aus.
  • Die Befehlsdisponiereinheit 420 empfängt Befehle und die Ketten-Kennungen und fährt fort, die Befehle für die Ausführung zu disponieren. Die Befehlsdisponiereinheit 420 kann ausgebildet sein, eine Priorität, die mit jeder der in dem SM 310 disponierten Ketten verknüpft ist, zu bewahren und die abgeholten Befehle auf der Grundlage der Prioritäten zu disponieren. Beispielsweise kann die Disponiereinheit 425 einen Prioritätswert mit 6 Bits oder 10 Bits bewahren, der mit jeder der 16 unterschiedlichen Ketten verknüpft ist, die zu einem beliebigen Zeitpunkt in dem SM 310 disponiert werden. Die Priorität kann auf der Grundlage diverser Faktoren zugewiesen werden. In einer Ausführungsform kann die Priorität darauf beruhen, dass die Kette in den SM 310 disponiert wurde (das heißt, die am längsten anhängige Kette kann die höchste Priorität haben). In anderen Ausführungsformen kann die Priorität für die Kette durch das Programm spezifiziert werden, das durch die Befehle definiert ist, die von der Kette ausgeführt werden, oder die Priorität kann auf dem CTA beruhen.
  • Die Befehlsdisponiereinheit 420 umfasst eine Disponiereinheit 425, einen Strangstatus 510 und eine Barrierendisponiereinheit 410. Die Disponiereinheit 425 wählt nicht notwendigerweise die Befehle in der Reihenfolge der Priorität der unterschiedlichen Ketten aus, da einer oder mehrere der Befehle aufgrund einer Datenabhängigkeit für die Ausführung nicht bereit sein kann, oder aufgrund dessen, dass alle Stränge an einem Barrierenbefehl teilnehmen und einen Barrierenbefehl noch nicht erreicht haben. Wenn ein erster Befehl ausgegeben werden kann, wird der Befehl von der Disponiereinheit 425 disponiert und ausgegeben. Wenn der erste Befehl nicht ausgegeben werden kann, ermittelt die Disponiereinheit 425, ob ein Befehl für eine andere Kette für den jeweiligen Befehl ausgegeben werden kann. In einigen Fällen kann der erste Befehl ausgegeben werden, aber der erste Befehl hat eine geringere Priorität, so dass ein weiterer Befehl (aus einer anderen Kette) stattdessen ausgegeben werden kann. In allen Fällen werden die Befehle für jeden einzelnen Strang einer Kette in der Reihenfolge ausgegeben, in der die Befehle für die jeweiligen individuellen Stränge von der Kettendisponier- und Befehlseinheit 312 empfangen werden.
  • Die Disponiereinheit 425 unterhält ein Zustandsmodell des SM 310, das auf der Grundlage der ausgegebenen Befehle aktualisiert wird. Das Zustandsmodell erlaubt es der Disponiereinheit 425, Befehle auf der Grundlage einer dynamischen Ausführung des Programms und der Verfügbarkeit von Ressourcen innerhalb des SM 310 auszuwählen. Beispielsweise kann ein SM 310 oder eine Funktionseinheit innerhalb eines SM 310 oder innerhalb der Textureinheit 315, die den Befehl ausführen wird, als eine Ressource ermittelt werden, die für den Befehl benötigt wird, und die Verfügbarkeit der Ressource kann von der Disponiereinheit 425 verwendet werden.
  • Von der Disponiereinheit 422 und der Barrierendisponiereinheit 34 wird Zustandsinformation bewahrt und verwendet. Insbesondere wird die Zustandsinformation für Barrieren und für Stränge benötigt. Barrierenzustände umfassen eines oder mehrere der folgenden Felder: eine Referenzzahl, eine Wiederabtastungsmarke, eine Ungeduldsmarke, ein statisch/dynamisch/untätig-Feld und eine Barrierenart (beispielsweise einfach bedingt, kritischer Abschnitt, geordneter kritischer Abschnitt). Eine Barriere beginnt in einem untätigen Zustand. Wenn zumindest ein Strang den oberen Barrierenbefehl erreicht, wechselt der Barrierenzustand von untätig auf statisch. Die Disponiereinheit 425 ändert den Zustand von statisch auf dynamisch, wenn die Barriere „bereit” ist, um ausgeführt zu werden. Die Barrierendisponiereinheit 430 ändert den Zustand von dynamisch zu untätig, wenn die Ausführung der Barriere „abgeschlossen” ist.
  • Der Strangstatus bzw. Strangzustand wird in dem Strangstatus 510 gespeichert und enthält eines oder mehrere der folgenden Felder: Barrierenkennung, eine Kennung des Eltern-CTA, die logische Kennung, eine fertig-Marke und eine Schlaf/Wach-Marke. Die Verwendung des Strangstatus 510 und des Barrierenzustands wird detaillierter in den folgenden Paragraphen geschrieben.
  • Wenn die Disponiereinheit 425 ein erstes Auftreten eines speziellen Barrierenbefehls erkennt, was bedeutet, dass ein erster Strang eines CTA den speziellen Barrierenbefehl während der Ausführung eines Programms erreicht hat, dann aktualisiert die Disponiereinheit 420 den Zustand der Barrierenkennung, die für den Barrierenbefehl spezifiziert ist, von „untätig” auf „statisch” (unter der Annahme, dass der erste Strang eine Implementierung des Zählers für die Barrierenmitgliedschaft erhöht, der mit der Referenzzahl verglichen wird). Es ist nicht notwendig, dass alle Stränge eines CTA an jeder Barriere teilnehmen, die einem CTA zugewiesen ist. Jeder Strang, der an einer speziellen Barriere teilnimmt, spezifiziert eine Barrierenkennung, die der speziellen Barriere entspricht, und ein Strang kann an einer Barriere zu jeder Zeit teilnehmen. In einer Ausführungsform können Stränge ihre Teilnahme an einer speziellen Barriere anzeigen, indem eine Befehlsvorhersage verwendet wird. Stränge, die nicht an einer Barriere teilnehmen, können für die Ausführung von Befehlen disponiert werden, die von der Disponiereinheit 425 empfangen werden. Stränge, die nicht an einer Barriere teilnehmen, können keine Befehle ausführen, die hinter dem Barrierenbefehl in der Programmreihenfolge liegen, bis alle teilnehmenden Stränge den Barrierenbefehl erreicht haben.
  • Die Disponiereinheit 425 ist ausgebildet, den Barrierenzustand von statisch auf dynamisch zu ändern, wenn die „Mitgliedschaft” für eine spezielle Barriere abgeschlossen ist. Eine Vielzahl unterschiedlicher Bedingungen kann angewendet werden, um zu ermitteln, dass die Mitgliedschaft abgeschlossen ist. Eine erste Bedingung besteht darin, dass die Anzahl an Strängen, die den Barrierenbefehl erreicht hat, gleich der Anzahl an Strängen ist, die dem Eltern-CTA zugewiesen sind. Eine zweite Bedingung besteht darin, dass die Anzahl an Strängen, die den Barrierenbefehl erreicht hat, gleich der Referenzzahl ist, die für die Barriere angegeben ist. Eine dritte Bedingung besteht darin, dass die Anzahl an Strängen, die den Barrierenbefehl erreicht hat und die an dem Barrierenbefehl teilnimmt, gleich der Referenzzahl ist, die für die Barriere angegeben ist. Der Referenzwert wird durch das Programm spezifiziert und gibt die Anzahl an Strängen an, von der erwartet wird, dass sie an der Barriere eintreffen. Ein Strang, der nicht an einer Barriere teilnimmt, speichert eine null für die Barrierenkennung in dem Strangstatus 510. Die Disponiereinheit 425 kann ausgebildet sein, einen Zähler für die Barrierenmitgliedschaft zu implementieren, der der speziellen Barriere entspricht, wenn Stränge den Barrierenbefehl erreichen, um zu ermitteln, ob die Mitgliedschaft für die Barriere abgeschlossen ist.
  • Wenn jeder teilnehmende Strang den Barrierenbefehl erreicht, werden Statusdaten für den Strang, die in dem Strangstatus 510 gespeichert sind, aktualisiert. Insbesondere wird der Strangstatus auf „schlafen” gesetzt, was angibt, dass der Strang angehalten ist und keine Befehle ausführt. Sobald die Mitgliedschaft abgeschlossen ist, ändert die Disponiereinheit 425 den Status der Barrierenkennung auf „dynamisch” und gibt die CTA-Kennung und die Barrierenkennung an die Barrierendisponiereinheit 430 aus. Die Barrierendisponiereinheit 430 ist ausgebildet, Stränge, die an Barrierenbefehlen teilnehmen, für die Ausführung zu disponieren.
  • Barrierenbefehle können verwendet werden, um geordnete und nicht geordnete kritische Code-Abschnitte eines Programms abzugrenzen. Ein oberer Barrierenbefehl tritt unmittelbar vor dem ersten Befehl eines kritischen Code-Abschnitts auf, und ein unterer Barrierenbefehl mit der gleichen Barrierenkennung wie der obere Barrierenbefehl wird unmittelbar nach dem letzten Befehl des kritischen Code-Abschnitts auf. TABELLE 1 zeigt ein Beispiel eines geordneten kritischen Code-Abschnitts. TABELLE 1
    BARRIER.TOP.OCS // Beginn des geordneten kritischen Abschnitts
    LD R0, [address]; // Laden des CTA-Zählers in R nur für die lokale Arbeit
    IMAD R2, R0, R1, R3; // Inkrementieren unter Verwendung der Strangwerte
    ST [address], R2 // Speichern des CTA-Zählers aus R2 im Speicher
    BARRIER.BOT.OCS; // Beenden des geordneten kritischen Abschnitts
  • Barrierenbefehle können auch verwendet werden, um kritische Code-Abschnitte, die keine Randbedingungen im Hinblick auf die Reihenfolge besitzen, d. h. nicht geordnete kritische Code-Abschnitte, abzugrenzen. Nicht geordnete kritische Code-Abschnitte können von der Barrierendisponiereinheit 430 in einer beliebigen Reihenfolge disponiert werden, oder die logischen Kennungen können verwendet werden, um die kritischen Code-Abschnitte in der Reihenfolge der logischen Kennungen zu disponieren genauso wie geordnete kritische Code-Abschnitte disponiert werden. Die Barrierendisponiereinheit 430 wird nur die (geordneten und nicht geordneten) kritischen Code-Abschnitte für die Ausführung durch die Stränge, die an der Barriere teilnehmen, disponieren. In einer Ausführungsform trennt ein Barrierenbefehl einen kritischen Code-Abschnitt nicht ab und wird als eine (einfache) bedingte Barriere verwendet, um die Ausführung teilnehmender Stränge an einem Barrierenbefehl zu synchronisieren. Anders ausgedrückt, anstelle eines oberen und eines unteren Barrierenbefehls gibt es nur einen einzigen Barrierenbefehl.
  • In einigen Fällen kann eine ungeduldige Barrierendisponierung aktiviert werden und die Disponiereinheit 425 ist ausgebildet, die Barriere in den dynamischen Zustand zu versetzen, ohne dass darauf gewartet wird, dass die Stränge, die an der Barriere teilnehmen, den Barrierenbefehl erreichen. Anders ausgedrückt, eine Teilgruppe der teilnehmenden Stränge kann die Ausführung der Barriere beginnen, bevor zumindest ein anderer teilnehmender Strang die Barriere erreicht hat. Jede Barriere kann angeben, ob eine ungeduldige Disponierung für die Barriere aktiviert wird. Wenn eine ungeduldige Barrierendisponierung aktiviert wird, können weitere Bedingungen verwendet werden, um zu bestimmen, dass die Mitgliedschaft abgeschlossen ist.
  • Wie zuvor erläutert ist, ist die Disponiereinheit 425 ausgebildet, eine Reihe unterschiedlicher Bedingungen zu verwenden, um zu ermitteln, dass die Mitgliedschaft für eine spezielle Barriere abgeschlossen ist. Eine vierte Bedingung besteht darin, dass ein Zeitüberlauf auftritt. Der Zeitüberlauf kann auf viele unterschiedliche Weisen ermittelt werden. Der Zeitüberlauf kann von dem ersten (teilnehmenden) Strang gemessen werden, wenn dieser die Barriere erreicht. Der Zeitüberlauf kann von dem ersten (teilnehmenden oder nicht teilnehmenden) Strang gemessen werden, der die Barriere erreicht. Der Zeitüberlauf kann von dem aktuellsten (teilnehmenden) Strang gemessen werden, der die Barriere erreicht. Der Zeitüberlauf kann aus dem jüngsten (teilnehmenden oder nicht teilnehmenden) Strang ermittelt werden, der die Barriere erreicht. Eine fünfte Bedingung besteht darin, dass entweder ein Zeitüberlauf auftritt oder eine minimale Anzahl an Strängen die Barriere erreicht hat.
  • Eine ungeduldige Barriere fungiert als ein „Geschwindigkeitssprung”, um die Gruppierung einiger Stränge zu fördern, ohne dass es erforderlich ist, dass Stränge auf alle Stränge warten, die an der Barriere teilnehmen, und die Barriere auch erreichen. Daher kann zumindest ein Teil der Stränge, von denen erwartet wird, dass sie lokalisierte Speicherzugriffsmuster besitzen, für ein besseres Cache-Zugriffsverhalten gruppiert werden. Eine ungeduldige Barriere kann verwendet werden, um Code auszuführen, der nicht geordnet und kritisch ist. Eine ungeduldige Barriere kann verwendet werden, um Code auszuführen, der geordnet kritisch ist, wobei jedoch die Stränge, die an der ungeduldigen Barriere teilnehmen, nicht notwendigerweise in der Reihenfolge ausgeführt werden, da ein früherer (im Hinblick auf die Reihenfolge) Strang die Barriere erreichen kann, nachdem ein späterer (im Hinblick auf die Reihenfolge) Strang bereits ausgeführt worden ist.
  • Wenn eine Barriere als eine ungeduldige Barriere disponiert wird (d. h., nur ein Teil der teilnehmenden Stränge als die Barriere erreicht), kann die Disponiereinheit 425 ausgebildet sein, die Barriere auf ungültig zu setzen, so dass jegliche teilnehmende Stränge, die eintreffen, nachdem die Barriere in den dynamischen Zustand übergegangen ist, die Barriere ignorieren und nicht auf andere teilnehmende Stränge warten. Wenn generell die Barriere verwendet wird, um einen kritischen Code-Abschnitt abzugrenzen, sollte die Barriere nicht als unzulässig bezeichnet werden. Die Setzung auf ungültig sollte an einer bedingten Barriere vorgenommen werden, die keinen kritischen Code-Abschnitt begrenzt, so dass später eintreffende Stränge die Ausführung fortsetzen können, wie dies nachfolgend beschrieben ist. Wenn Stränge spät an einem auf ungültig gesetzten kritischen Abschnitt aus Code eintreffen, sollte es den spät eintreffenden Stränge nicht gewährt sein, den abgegrenzten Code auszuführen (beispielsweise durch Vorhersage), um eine destruktive Störung bzw. Interferenz zu verhindern.
  • Handhabung eines spät eintreffenden Strangs
  • Wenn eine ungeduldige Disponierung für eine Barriere aktiviert ist, kann es Strängen, die eintreffen, nachdem die Barriere von statisch auf dynamisch umgeschaltet hat, gewährt werden oder auch nicht, sich der Barriere spät „anzuschließen”. Ob spät eintreffende Stränge sich einer ungeduldigen Barriere anschließen können oder nicht, kann für jede Barriere spezifiziert werden oder kann für alle Barrieren aktiviert werden, die als ungeduldige Barrieren disponiert werden können. Die fertig-Marke wird beibehalten, so dass die Barrierendisponiereinheit 430 zwischen einem spät eintreffenden Strang, der noch nicht disponiert worden ist (fertig = 0 und schlafen = 1), und einem Strang (spät eintreffend oder nicht), der den kritischen Code-Abschnitt bereits ausgeführt hat (fertig = 1) unterscheiden kann, weil dies nach dem spät eintreffenden Strang in der logischen Reihenfolge erfolgt. Die fertig-Marke wird zurückgesetzt, wenn jeder teilnehmende Strang den Barrierenbefehl erreicht und die fertig-Marke gesetzt ist, wenn der Strang den unteren Barrierenbefehl ausführt, der den kritischen Code-Abschnitt begrenzt.
  • Wenn sich ein spät eintreffender teilnehmender Strang einer ungeduldigen Barriere anschließt, setzt die Disponiereinheit 425 den Strangstatus auf fertig = 0 und schlafen = 1, wodurch angezeigt wird, dass der spät eintreffende teilnehmende Strang angehalten ist und keine Befehle ausführt. Die Disponiereinheit 425 setzt auch die Wiederabtastungsmarke für die Barriere. Die Wiederabtastungsmarke zeigt an, dass ein spät eintreffender teilnehmender Strang Teil der ungeduldigen Barriere ist. Wenn die Wiederabtastungsmarke gesetzt ist, wird die Barrierendisponiereinheit 430 den Strangstatus 510 erneut abtasten, um spät eintreffende teilnehmende Stränge, d. h. Stränge, deren Strangstatus fertig = 1 nicht gesetzt ist, zu erkennen und zu disponieren. Die neu Abtastung wird optimaler Weise am Ende der Ausführung der aktuellen Abtastung ausgeführt, kann aber auch zu jedem Zeitpunkt bis zum Ende der Ausführung der aktuellen Abtastung ausgeführt werden. Wenn die ungeduldige Barriere keine spät eintreffenden Stränge akzeptiert, wird verhindert, dass die Stränge von der Barrieren-Anzeigetafellogik (nicht gezeigt) ausgegeben werden. Sobald die Barriere auf untätig ist, darf der Strang die Barriere erneut ausgeben und starten.
  • In einer Ausführungsform ist die Disponiereinheit 425 ausgebildet, es einem beliebigen spät eintreffenden teilnehmenden Strang zu erlauben, die Barriere zu ignorieren, nachdem auf den Teil der teilnehmenden Stränge gewartet worden ist, der die Barriere erreicht hat, um ausgeführt zu werden. Die Disponiereinheit 425 hält die spät eintreffenden teilnehmenden Stränge „schlafend” (mit zurückgesetzten fertig-Marken), bis die Ausführung des Teils der teilnehmenden Stränge, die die Barriere erreicht haben, abgeschlossen ist. Wenn der Teil der teilnehmenden Stränge die Ausführung der Barriere abgeschlossen hat, aktualisiert die Disponiereinheit 425 den Strangstatus 510 für die spät eintreffenden teilnehmenden Stränge auf „Wach”, und die fertig-Marken werden für alle teilnehmenden Stränge gesetzt. Die spät eintreffenden teilnehmenden Stränge und die Stränge in dem Teil der teilnehmenden Stränge setzen dann die Ausführung fort. Die Disponiereinheit 425 kann die spät eintreffenden Stränge konfigurieren, um den Code auszuführen, der durch die Barriere begrenzt ist, oder um die Ausführung an dem gleichen Punkt aufzunehmen, an dem die Stränge die Ausführung der Barriere abgeschlossen haben.
  • Barrierendisponierung
  • Die Barrierendisponiereinheit 430 disponiert die Stränge, die an einer Barriere teilnehmen, durch Aufwecken eines ersten Strangs, wobei der erste Strang der teilnehmende Strang ist, der den kleinsten Wert der logischen Kennung hat (sofern nicht eine andere Konvention für die Reihenfolge verwendet wird). Die Barrierendisponiereinheit 430 aktualisiert den Strangstatus 510 so, dass dieser anzeigt, dass der erste Strang wach ist. Folglich wird die Disponiereinheit 425 den ersten Strang für die Ausführung disponieren, da der erste Strang nunmehr bereit ist, ausgeführt zu werden. Wenn der erste Strang die untere Barriere erreicht, wird die Barrierendisponiereinheit 430 von der Disponiereinheit 425 benachrichtigt, und der Strangstatus 510 wird durch die Barrierendisponiereinheit 430 oder die Disponiereinheit 425 aktualisiert, um anzuzeigen, dass der erste Strang schlafend ist. Wenn der erste Strang die untere Barriere erreicht, wird auch die fertig-Marke in dem Strangstatus 510 von der Barrierendisponiereinheit 430 oder der Disponiereinheit 425 aktualisiert, so dass angezeigt wird, dass der erste Strang fertig ist.
  • Die Barrierendisponiereinheit 430 weckt dann den nächsten teilnehmenden Strang auf, wodurch die Ausführung des kritischen Code-Abschnitts für den nächsten teilnehmenden Strang ermöglicht wird. Die Barrierendisponiereinheit 430 fährt fort, jeden teilnehmenden Strang in der logischen Reihenfolge aufzuwecken, bis der letzte teilnehmende Strang die untere Barriere erreicht. Wenn der letzte teilnehmende Strang die untere Barriere erreicht, kann die Barrierendisponiereinheit 430 ausgebildet sein, um im Hinblick auf spät eintreffende Stränge zu prüfen, und nach Bestätigung, dass alle teilnehmenden Stränge fertig-Marken besitzen, die gesetzt sind, ist die Ausführung der Barriere abgeschlossen und die Barrierendisponiereinheit 430 aktualisiert den Strangstatus 510, so dass dieser anzeigt, dass alle teilnehmenden Stränge wach sind. Die Barrierendisponiereinheit 430 kann bestimmen, dass der letzte teilnehmende Strang disponiert worden ist, wenn die Suche nach einem nächsten teilnehmenden Strang fehlschlägt. Die Disponiereinheit 425 aktualisiert den Barrierenzustand so, dass dieser anzeigt, dass die Barrierenkennung „untätig” ist, beispielsweise weder „statisch” noch „dynamisch”.
  • Wenn mindestens ein spät eintreffender teilnehmender Strang sich einer ungeduldigen Barriere angeschlossen hat, dann wird die Wiederabtastungsmarke in dem Barrierenzustand gesetzt. Die Barrierendisponiereinheit 430 kann ausgebildet sein, nach spät eintreffenden Strängen zu suchen, wenn der nächste teilnehmende Strang aufgeweckt wird. Da ein spät eintreffender Strang „außerhalb der Reihenfolge” sein kann im Hinblick auf die logische Reihenfolge, kann die Barrierendisponiereinheit 430 teilnehmende Stränge in einer Reihenfolge aufwecken, die nicht der logischen Reihenfolge folgt. Wenn der letzte teilnehmende Strang die untere Barriere erreicht und die Wiederabtastungsmarke gesetzt ist, sollte die Barrierendisponiereinheit 430 nach spät eintreffenden teilnehmenden Strängen suchen, bevor der Barrierenkennungszustand zu aktualisiert wird, so dass dieser anzeigt, dass die Barrierenkennung untätig ist. Die Barrierendisponiereinheit 430 setzt die Wiederabtastungsmarke zurück, sobald die Barrierendisponiereinheit 430 eine neu Abtastung abschließt, um nach spät eintreffenden Strängen zu suchen.
  • Wenn die Barriere eine Barriere mit ungeduldigen Bedingung ist und der Barrierenkennungszustand von statisch auf dynamisch geändert wird, kann die Disponiereinheit 425 ausgebildet sein, die Barrierenkennung auf ungültig zu setzen, so dass kein spät eintreffender teilnehmender Strang sich der ungeduldigen Barriere anschließen kann. Nur Barrieren mit der Bedingung ungeduldig, die disponiert wurden, ohne auf alle teilnehmenden Stränge zu warten, können als ungültig gesetzt werden. In einer Ausführungsform aktualisiert die Disponiereinheit 425 die Zahl, die für die Barrierenkennung einer bedingten Barriere bewahrt wird, wenn jeder spät eintreffende Strang sich einer ungeduldigen Barriere anschließt, und die Barrierenkennung wird nur auf ungültig gesetzt, wenn die Zahl nicht gleich dem Referenzwert ist und/oder wenn der Barrierenzeitüberlauf auftritt, wenn die Barrierenkennung von dynamisch auf untätig wechselt. In einer noch weiteren Ausführungsform wird die Barrierenkennung nicht auf ungültig gesetzt, und wenn keine anderen teilnehmenden Stränge die Barriere erreichen, wird die Zahl aktualisiert und die Disponiereinheit 425 ändert den Zustand der Barriere von statisch auf dynamisch, wenn die Zahl gleich dem Referenzwert ist, oder wenn die Barriere wieder als eine ungeduldige Barriere verarbeitet wird, um einen weiteren Teil der teilnehmenden Stränge zu disponieren.
  • Die Barrierendisponiereinheit 430 kann auch ausgebildet sein, exklusive kritische Code-Abschnitte und geordnete kritische Code-Abschnitte mit einer nicht blockierenden unteren Barriere zu disponieren. Die Barrierendisponiereinheit 430 disponiert einen ersten Strang, der an einem exklusiven kritischen Code-Abschnitt teilnimmt, dadurch, dass zuerst auf die Beendigung der Ausführung anderer kritischer Code-Abschnitte oder exklusiver kritischer Codeabschnitte gewartet wird. Die Barriere für einen exklusiven kritischen Code Abschnitt wird für eine exklusive Ausführung disponiert. Ein exklusiver kritische Code-Abschnitt kann ein geordneter kritischer Code-Abschnitt sein oder ein nicht geordneter kritischer Code-Abschnitt, der exklusiv ist. Zu beachten ist, dass Stränge, die nicht an einer Barriere teilnehmen, gleichzeitig mit den Strängen ausgeführt werden können, die den exklusiven kritischen Code-Abschnitt ausführen. Ein exklusiver kritischer Code-Abschnitt kann verwendet werden, wenn Ressourcenzugriffskonflikte zwischen den Strängen, die in unterschiedlichen Barrieren teilnehmen, auftreten können.
  • Die Barrierendisponiereinheit 430 disponiert Stränge, die an einem kritischen Code-Abschnitt teilnehmen, mit einer nicht blockierenden unteren Grenze, indem den Strängen gestattet wird, die Ausführung nachfolgender Befehle fortzusetzen, die unmittelbar nach der unteren Barriere vorhanden sind, ohne dass darauf gewartet wird, dass alle teilnehmenden Stränge den kritischen Code-Abschnitt ausführen. Sobald der Strangstatus 510 für einen teilnehmenden Strang von der Barrierendisponiereinheit 430 so aktualisiert wird, dass angezeigt wird, dass der Strang wach ist, bleibt der Strang nach dem Erreichen der unteren Barriere wach. Die Disponiereinheit 425 ist dann in der Lage, teilnehmende Stränge, die die Ausführung des kritischen Code-Abschnitts beendet haben, für die Ausführung gleichzeitig mit einem anderen teilnehmenden Strang zu disponieren, der aktuell den kritischen Code-Abschnitt ausführt. Wenn alle teilnehmenden Stränge die untere Barriere erreicht haben, ist die Ausführung der Barriere abgeschlossen und die Barrierendisponiereinheit 430 aktualisiert den Barrierenzustand so, dass dieser anzeigt, dass die Barrierenkennung weder „statisch” noch „dynamisch” ist.
  • In einer Ausführungsform führt die Disponiereinheit 425 eine dynamische Barrieren-Anzeigetafel-Prüfung durch, um zu ermitteln, ob ein erster Befehl ausgegeben werden kann, bevor der erste Befehl an die Dekodiereinheit 450 ausgegeben wird. Wenn der erste Befehl mit einer Barrierenkennung verknüpft ist, wartet die Disponiereinheit 425 mit der Ausgabe des ersten Befehls in den folgenden Situationen: wenn eine Barriere (im statischen oder dynamischen Zustand) die gleiche Barrierenkennung und eine andere Marke im Vergleich zu dem ersten Befehl hat, oder wenn eine Barriere (im dynamischen Zustand) die gleiche Kennung und die gleiche Marke hat und spät eintreffende Stränge für die Barrierenkennung nicht akzeptiert werden.
  • Die Dekodiereinheit 450 empfängt den nächsten Befehl, der von der Befehlsdisponiereinheit 420 auszugeben ist. Die Dekodiereinheit 450 führt eine volle Dekodierung des Befehls aus und sendet den dekodierten Befehl an die Ausgabeeinheit 470. Wiederum können in einigen Ausführungsformen Befehle zu zweit oder zu viert ausgegeben werden, und die Dekodiereinheit 450 kann eine separate Dekodierlogik für jeden ausgegebenen Befehle realisieren. Die Ausgabeeinheit 470 realisiert einen FIFO und schreibt die dekodierten Werte in die lokale Registerdatei 304 zur Ausführung durch die Ausführungseinheiten 302 oder den Lade/Speichereinheiten 303. In Ausführungsformen, die mehrere Befehle gleichzeitig ausgeben, kann die Ausgabeeinheit 470 jeden Befehl an einen anderen Teil der Funktionseinheiten des SM 310 ausgeben. Die Anzeigetafel-Einheit 480 verwaltet und verfolgt die Anzahl an Befehlen, die pro Stranggruppe dekodiert und ausgegeben worden sind.
  • 5B ist eine Blockansicht eines Teils der Disponiereinheit 425 und der Barrierendisponiereinheit 430 aus 5A gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung. Eine Strangbarrieren-Ankunft-Verfolgungseinheit 500 aktualisiert die Barrierenzustandsinformation für die Barriere, die einem CTA zugewiesen ist. Wie zuvor erläutert ist, zeigt die Barrierenzustandsinformation an, welche Barrierenkennungen „statisch”, „dynamisch” oder untätig (weder „statisch” noch „dynamisch”) sind und enthält eine Wiederabtastungsmarke für jede Barrierenkennung, die gesetzt wird, wenn mindestens ein spät eintreffender teilnehmender Strang eine ungeduldige Barriere erreicht hat. Wenn eine Barrierenkennung von „statisch” auf „dynamisch” übergeht, werden die Barrierenkennung und die CTA-Kennung an den FIFO 505 ausgegeben. Wenn jeder Strang des CTA, der an der Barriere teilnimmt, den Barrierenbefehl erreicht, aktualisiert die Disponiereinheit 425 den Zustand des teilnehmenden Strangs, der in dem Strangstatus 510 gespeichert ist, um anzuzeigen, dass der teilnehmende Strang „schlafend” ist.
  • Der FIFO 505 speichert dynamische Barrieren, wenn ein Ausführungsbereich in den Barrierenausführungsbereichen 515 nicht verfügbar ist. In einer Ausführungsform umfassen die Barrierenausführungsbereiche 515 16 Bereiche, die jeweils von einer dynamischen Barriere besetzt werden können. Wenn ein Bereich in den Barrierenausführungsbereichen 515 verfügbar ist, kann eine dynamische Barriere aus dem FIFO 505 abgerufen und in den Bereich eingefügt werden. Die Barrierenverteilungseinheit 520 wählt aus den unterschiedlichen dynamischen Barrieren aus, die die Bereiche der Barrierenausführungsbereichen 515 besetzen. Es können diverse Prioritätsschemata eingesetzt werden von der Barrierenverteilungseinheit 520, um aus den unterschiedlichen dynamischen Barrieren auszuwählen. Die Barrierenverteilungseinheit 520 stellt für die Strangauswahleinheit 530 eine dynamische Barriere bereit, aus der ein Strang für die Disponierung durch die Strangauswahleinheit 530 ausgewählt werden kann.
  • Die Strangauswahleinheit 530 wählt Stränge in der Reihenfolge aus, die durch die logische Kennung angegeben ist, die mit jedem Strang in einem Strang-Array (d. h., einem CTA zugewiesen ist) verknüpft ist. Die Strangauswahleinheit 530 greift auf die Barrieren-Teilnehmer-Verfolgungsinformation 532 zu, um zu ermitteln, welche Stränge an der dynamischen Barriere teilnehmen. Die Strangauswahleinheit 530 greift auf den Strangstatus 510 und die Barrierenzustandsinformation (nicht gezeigt) zu, um spät eintreffende teilnehmende Stränge zu ermitteln.
  • Nicht alle Stränge in dem einen oder den mehreren Strangblöcken, die einem CTA zugewiesen sind, nehmen notwendigerweise an jeder Barriere teil, die von dem CTA verwendet wird. Wie zuvor erläutert ist, sind die Barrieren durch Barrierenkennungen angegeben und jeder Strang zeigt an, ob er an einer der Barrieren teilnimmt oder nicht. Die Strangauswahleinheit 530 erkennt die teilnehmenden Stränge während der Verarbeitung der Barriere und geht dann weiter, um jeden teilnehmenden Strang für die Ausführung der Reihe nach auszuwählen. Die Strangauswahleinheit 530 überspringt nicht-teilnehmende Stränge während des Auswahlprozesses. Wenn eine Barriere ungeduldig ist, überspringt während des Auswahlprozesses die Strangauswahleinheit 530 nicht-teilnehmende Stränge und Stränge, die noch nicht an der Barriere eingetroffen sind (oder nicht eintrafen, als die Barriere dynamisch wurde, wenn spät eintreffende Stränge sich nicht der Barriere anschließen können).
  • Vor der Auswahl eines ersten Strangs für die Ausführung für eine spezielle Barriere ermittelt die Strangauswahleinheit 530, ob die Barriere eine exklusive Barriere ist, die einen exklusiven kritischen Code-Abschnitt begrenzt. Wenn die Barriere exklusiv ist, dann ermittelt die Strangauswahleinheit 530, ob andere Strang-Arrays einen kritischen Code-Abschnitt oder einen exklusiven kritischen Code-Abschnitt ausführen, und wenn dies der Fall ist, wartet die Strangauswahleinheit 530, bis Stränge in diesem Strang-Array mit der Ausführung fertig sind, bevor ein erster Strang für die Ausführung für die exklusive Barriere ausgewählt wird. In einer Ausführungsform gibt der FIFO 505 keine exklusive Barriere aus, während eine dynamische Barriere einen Bereich in den Barrierenausführungsbereichen 515 einnimmt, und der FIFO 505 gibt keine Barriere aus, während eine exklusive Barriere einen Bereich der Barrierenausführungsbereichen 515 einnimmt.
  • Die Strangauswahleinheit 530 kann eine Ausführungsmaske auf der Grundlage der teilnehmenden Stränge erzeugen. Teilnehmende Stränge geben die Barrierenkennung an, die mit der Barrierenkennung übereinstimmt, die von den Barrierenbefehlen bereitgestellt wird. Wenn ein spät eintreffender Strang sich einer Barriere anschließen darf, kann die Strangauswahleinheit 530 die Ausführungsmaske regenerieren, wodurch Bits in der Maske für teilnehmende Stränge gesetzt werden, die eine invertierte „fertig”-Marke besitzen. Die Strangauswahleinheit 530 durchsucht die Ausführungsmaske, um den ersten Strang zu ermitteln, in der Reihenfolge der logischen Kennungen, um für eine Ausführung eine Auswahl zu treffen, bis alle Stränge ausgewählt sind. Wenn jeder teilnehmende Strang ausgewählt ist, wird das Bit der Ausführungsmaske, das dem teilnehmenden Strang entspricht, zurückgesetzt und der Strang wird als fertig markiert. In einer Ausführungsform erzeugt, wenn mehrere Strangblöcke einem CTA zugewiesen sind, die Strangauswahleinheit 530 eine Ausführungsmaske für einen Strangblock pro Zeit, wodurch die Anzahl an Bits in der Ausführungsmaske auf die Anzahl an Strängen in einem Strangblock begrenzt wird.
  • Wenn die Strangauswahleinheit 530 einen teilnehmenden Strang für die Ausführung auswählt, aktualisiert die Strangauswahleinheit 530 den Zustand des Strangs, der in dem Strangstatus 510 gespeichert ist, um anzuzeigen, dass der Strang „wach” ist. Die Disponiereinheit 425 gibt dann den Strang für die Ausführung aus und fährt fort, den Strang für den Befehl in dem kritischen Code-Abschnitt auszugeben, bis die Barrierenunterseite erreicht ist. Wenn die untere Barriere erreicht ist, informiert die Disponiereinheit 425 die Strangauswahleinheit 530 und die Strangauswahleinheit 530 ermittelt, ob der Strang an der Barriere warten muss, bis alle anderen Stränge, die an der Barriere teilnehmen, den kritischen Code-Abschnitt ausgeführt haben, bevor zur Ausführung eines Befehls weitergegangen wird, der in der Programmreihenfolge nach dem kritischen Code-Abschnitt liegt, d. h., die Strangauswahleinheit 530 bestimmt, ob die untere Barriere eine nicht blockierende untere Barriere ist. Wenn die Barriere eine nicht blockierende Barriere ist, dann kann die Strangauswahleinheit 530 einen nächsten teilnehmenden Strang für die Ausführung auswählen, ohne dass der aktuell ausgewählte teilnehmende Strang auf „schlafend” gesetzt wird. Stattdessen wird der Zustand des nächsten teilnehmenden Strangs, der in dem Strangstatus 510 gespeichert ist, auf „wach” aktualisiert und alle teilnehmenden Stränge, die die Ausführung des kritischen Code-Abschnitts abgeschlossen haben, fahren mit der Ausführung nachfolgender Befehle des Programms in der Programmreihenfolge fort. Die Strangauswahleinheit 530 setzt ferner die entsprechende fertig-Marke, wenn jeder teilnehmende Strang die untere Barriere erreicht.
  • In einer Ausführungsform werden Barrieren verwendet, um sicherzustellen, dass Stränge für ein spezielles CTA, das die Daten unter Anwendung der Textureinheit 315 verarbeitet, ausgeführt werden, ohne dass es Strängen aus einem anderen CTA erlaubt ist, zu intervenieren. Die Garantie, dass die Stränge für ein einzelnes CTA in der Textureinheit 315 zusammen verarbeitet werden, erhöht die Wahrscheinlichkeit von Cache-Treffern, da die Textur-Zugriffe innerhalb eines CTA lokalisiert bleiben. Die Textureinheit 315 ist ein Beispiel einer gemeinsam benutzten Ressource und die Barrieren können verwendet werden, um zu steuern, welche Stränge auf eine gemeinsam benutzte Ressource oder auf eine Ressource, die von der Lokalität profitiert, zugreifen. Obwohl die Stränge nicht in einer speziellen Reihenfolge ausgeführt werden müssen, stellt die Abgrenzung der Textur-Ladebefehle, die Texturdaten aus dem Speicher auslesen, als exklusive kritische Code-Abschnitte einen Mechanismus bereit, um die Wahrscheinlichkeit zu erhöhen, dass die Textur-Leseoperationen Treffer sind in dem L1.5-Cache-Speicher 335. Befehle in exklusiven kritischen Code-Abschnitten, die eine spezielle Ressource (beispielsweise die Textureinheit 315) steuern, sind in der Lage, gleichzeitig zu kritischen Code-Abschnitten und/oder exklusiven kritischen Code-Abschnitten ausgeführt zu werden, die nicht die gleiche Ressource benutzen. Die Barrierenausführungsbereiche 515 können einen Bereich enthalten, der für Barrierenabgrenzungsbefehle vorgesehen ist, die von der Textureinheit 315 ausgeführt werden, oder können Bereiche für andere Ressourcen enthalten, die einen lokalisierten gesteuerten Zugriff bevorzugen. Stränge, die von der Textureinheit 315 ausgeführt werden, können die Ausführung gleichzeitig mit Strängen disponiert werden, die von den Ausführungseinheiten 302 ausgeführt werden. Die Disponierpriorität kann für die unterschiedlichen Barrierenkennungen angegeben werden, und Textur-Ladebefehle, die unter Anwendung eines Barrierenbefehls abgegrenzt sind, können mit höherer Priorität als andere Barrieren disponiert werden oder auch nicht.
  • 6A zeigt ein Flussdiagramm 600 eines Verfahrens zur Disponierung von Befehlen zur Ausführung auf der Grundlage logischer Kennungen gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1, 2, 3A3C, 5A und 5B beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der Offenbarung liegt.
  • Das Verfahren 600 beginnt in einem Schritt 605, in welchem die Stränge, die einem CTA zugewiesen sind, mit logischen Kennungen verknüpft werden. Die logischen Kennungen werden auf physikalische Kennungen abgebildet, auf die von dem SM 310 während der Ausführung der Stränge Bezug genommen wird. Im Schritt 610 wird die Ausführung initiiert und die Disponiereinheit 425 empfängt Befehle. Im Schritt 615 ermittelt die Disponiereinheit 425, ob ein Befehl ein Barrierenbefehlen ist, und wenn dies nicht der Fall ist, fährt im Schritt 658 die Disponiereinheit 425 mit der Ausführung des Programms fort, indem der Befehl an die Dekodiereinheit 450 ausgegeben wird.
  • Wenn im Schritt 615 die Disponiereinheit 425 ermittelt, dass der Befehl ein Barrierenbefehlen ist, und dies der Fall ist, dann aktualisiert im Schritt 616 die Disponiereinheit 425 die Barrierenmitgliedschaft entsprechend der Mitgliedschaftsbedingung, die für die Barriere verwendet wird. Wenn der Barrierenbefehl für den ersten Strang eines CTA erreicht wird, aktualisiert die Disponiereinheit 425 ebenfalls den Zustand der Barriere, um anzuzeigen, dass die Barriere „statisch” ist (wobei angenommen wird, dass der Strang eine Erhöhung des Zählers für die Barrierenmitgliedschaft bewirkt, der mit der Referenzzahl verglichen wird). Im Schritt 617 ermittelt die Disponiereinheit 425 dann, ob der Strang an dem Barrierenbefehl teilnimmt. Wenn der Strang nicht an dem Barrierenbefehl teilnimmt, dann geht die Disponiereinheit 425 weiter zum Schritt 658, und der Strang fährt mit der Ausführung des Programms fort. Ansonsten nimmt der Strang an dem Barrierenbefehl teil und im Schritt 620 aktualisiert die Disponiereinheit 425 den Zustand des Strangs auf „schlafend”. Wenn der Barrierenbefehl den Start eines nicht-ungeduldigen kritischen Code-Abschnitts begrenzt (geordnet oder nicht geordnet), dann sollte die Disponiereinheit 425 führt die Mitgliedschaftsbedingung erfordern, dass alle teilnehmenden Stränge in dem CTA den Barrierenbefehl erreichen, bevor es einem teilnehmenden Strang erlaubt ist, den kritischen Code-Abschnitt auszuführen.
  • Wenn die Barriere eine ungeduldige Barriere ist, dann muss die Disponiereinheit 425 nicht darauf warten, dass alle teilnehmenden Stränge den Barrierenbefehl erreichen, bevor einem Teil der teilnehmenden Stränge erlaubt wird, für die Ausführung disponiert zu werden. Daher ermittelt im Schritt 621 die Disponiereinheit 425, ob der Strang an einer ungeduldigen Barriere teilnimmt, deren Zustand bereits von statisch auf dynamisch übergegangen ist, und ob spät eintreffende Stränge sich der Barriere anschließen dürfen. Anders ausgedrückt, die Disponiereinheit 425 ermittelt, ob der Strang ein spät eintreffender Strang ist, der sich einer ungeduldigen Barriere anschließt, und wenn der Strang ein spät eintreffender Strang ist, der sich einer ungeduldigen Barriere anschließen darf, setzt im Schritt 625 die Disponiereinheit 425 die Wiederabtastungsmarke für die ungeduldige Barriere. Die fertig-Marke ist für den spät eintreffenden Strang bereits zurückgesetzt worden. Die Barrierendisponiereinheit 430 erkennt dann den spät eintreffenden Strang und ist in der Lage diesen für die Disponierung auszuwählen. Wenn im Schritt 621 die Disponiereinheit 425 ermittelt, dass der Strang ein spät eintreffender Strang ist, der sich einer ungeduldigen Barriere nicht anschließen kann, dann geht die Disponiereinheit 425 zum Schritt 622 weiter. Die Disponiereinheit 425 wird ebenfalls zum Schritt 622 weitergehen, wenn die Barriere keine ungeduldige Barriere ist. In einer Ausführungsform kann die Anzeige von Barrieren verwendet werden, um anzugeben, ob eine ungeduldige Barriere spät eintreffende Stränge akzeptiert.
  • Im Schritt 622 ermittelt die Disponiereinheit 425, ob die Mitgliedschaft abgeschlossen ist entsprechend den vielen unterschiedlichen Bedingungen, die verwendet werden können, um zu bestimmen, dass die Mitgliedschaft abgeschlossen ist, und wenn dies nicht der Fall ist, bleiben im Schritt 658 die teilnehmenden Stränge, die die Barriere erreicht haben, schlafend, während die Disponiereinheit 425 die Ausführung des Programms fortsetzt. Ansonsten aktualisiert die Disponiereinheit 425 den Zustand der Barriere von „statisch” auf „dynamisch” und gibt die Barrierenkennung und die CTA-Kennung des Strangs an die Barrierendisponiereinheit 430 aus, bevor zum Schritt 655 weitergegangen wird.
  • Im Schritt 655 wählt die Barrierendisponiereinheit 430 teilnehmende Stränge für die Ausführung aus. Wenn alle teilnehmenden Stränge die Ausführung des kritischen Code-Abschnitts abgeschlossen haben, geht die Programmausführung zum Schritt 658 weiter. Weitere Details des Schritts 655 sind in Verbindung mit 6B beschrieben. Wenn in einer Ausführungsform eine Barriere „hängenbleibt”, so dass Stränge nicht ausgeführt werden können, kann die Barriere in genau der gleichen Weise zurückgesetzt werden, wie ungültige Barrieren zurückgesetzt werden können, d. h. durch einen speziellen Befehl.
  • In einer Ausführungsform wird eine bedingte Barriere verwendet, um die Ausführung teilnehmender Stränge an einem Barrierenbefehl zu synchronisieren, und im Schritt 620 wird der Strangzustand für jeden teilnehmenden Strang auf schlafend gesetzt, und wenn die Mitgliedschaft abgeschlossen im Schritt 622 ist, aktualisiert die Disponiereinheit 425 den Zustand der Barriere von „statisch” auf „untätig” und aktualisiert den Zustand aller teilnehmenden Stränge, die in dem Strangstatus 510 gespeichert sind, auf „wach”. Im Schritt 655 fahren dann die teilnehmenden Stränge (oder ein Teil der teilnehmenden Stränge, wenn die bedingte Barriere als ungeduldig disponiert ist) mit der Ausführung des Programms fort und die Barrierendisponiereinheit 430 aktualisiert den Zustand der Barriere weder auf „statisch” noch auf „dynamisch”, d. h. es wird angezeigt, dass die Ausführung der Barriere für zumindest einen Teil der Stränge abgeschlossen ist.
  • 6B zeigt ein Verfahren zur Ausführung des Schritts 655, der in 6A gezeigt ist, gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1, 2, 3A3C, 5A und 5B beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Offenbarung liegt.
  • Im Schritt 630 wählt die Barrierendisponiereinheit 430 den Strang für die Ausführung auf der Grundlage der logischen Kennungen aus, die mit den Strängen verknüpft sind, die an der Barriere teilnehmen. Der Zustand des ausgewählten Strangs wird von „schlafend” auf „wach” aktualisiert, so dass der Strang für die Ausführung bereit ist. Weitere Details des Schritts 630 sind in Verbindung mit 6C beschrieben. Wenn die Wiederabtastungsmarke gesetzt ist, erkennt die Barrierendisponiereinheit 430 einen beliebigen spät eintreffenden Strang und kann Stränge für die Ausführung außerhalb der Reihenfolge im Vergleich zu den logischen Kennungen auswählen. Insbesondere wenn die Strangdisponiereinheit 430 den „letzten” Strang disponiert und die Wiederabtastungsmarke gesetzt ist, tastet die Barrierendisponiereinheit 430 die Ausführungsmaske erneut ab, wobei Stränge ignoriert werden, die eine „fertig” Marke haben, die gesetzt ist, und sie disponiert alle spät eintreffenden Stränge.
  • Im Schritt 635 werden die Befehle innerhalb des kritischen Code-Abschnitts von der Ausgabeeinheit 470 ausgegeben und werden für den ausgewählten Strang ausgeführt. Im Schritt 636 empfängt die Disponiereinheit 312 den unteren Barrierenbefehl, der mit der Barrierenkennung verknüpft ist, und der Zustand des Strangs wird aktualisiert, um die fertig-Marke zu setzen. Im Schritt 638 ermittelt die Disponiereinheit 312, ob der untere Barrierenbefehl ein blockierender unterer Barrierenbefehl ist. Wenn im Schritt 638 die Disponiereinheit 312 ermittelt, dass der untere Barrierenbefehl ein blockierender Befehl ist, dann ermittelt im Schritt 640 die Barrierendisponiereinheit 430, ob ein weiterer Strang, der an der Barriere teilnimmt, den kritischen Code-Abschnitt ausführen muss. Wenn ein weiterer Strang den kritischen Code-Abschnitt ausführen muss, dann aktualisiert im Schritt 643 die Barrierendisponiereinheit 430 den Zustand des Strangs, der den unteren Barrierenbefehl erreicht hat, von „wach” auf „schlafend”, so dass der Strang für die Ausführung nicht bereit ist. Ansonsten aktualisiert im Schritt 650 die Barrierendisponiereinheit 430 den Strangstatus 510, so dass angezeigt wird, dass alle Stränge, die an der Barriere teilnehmen, „wach” sind, bevor zum Schritt 652 weitergegangen wird.
  • Wenn im Schritt 638 der untere Barrierenbefehl eine nicht blockierender unterer Barrierenbefehl ist, dann ermittelt im Schritt 642 die Barrierendisponiereinheit 430, ob ein weiterer Strang, der an der Barriere teilnimmt, den kritischen Code-Abschnitt ausführen muss. Wenn ein weiterer Strang den kritischen Code-Abschnitt ausführen muss, kehrt die Barrierendisponiereinheit 430 zum Schritt 630 zurück. Ansonsten entfernt im Schritt 652 die Barrierendisponiereinheit 430 die Barriere und die CTA-Kennungen aus einem Ausführungsbereich in den Barrierenausführungsbereichen 515 und aktualisiert den Zustand der Barriere, um anzuzeigen, dass die Barriere weder „statisch” noch „dynamisch” ist. Wenn an dieser Stelle die Barriere eine ungeduldige Barriere ist, kann die Disponiereinheit 425 die Barrierenkennung als ungültig setzen, wenn die Barriere keinen kritischen Code-Abschnitt abgrenzt (d. h., die Barriere ist eine bedingte Barriere), so dass später eintreffende Stränge sich nicht mehr der Barriere anschließen können.
  • Die Disponiereinheit 425 fährt dann mit der Ausführung des Programms fort. Während der Ausführung eines kritischen Code-Abschnitts für eine CTA-Barriere können andere Stränge anderer Barrieren des gleichen CTA sowie Strangbarrieren anderer CTA ebenfalls die Ausführung eines anderen Codes fortsetzen. Wenn jedoch die Barriere exklusiv ist, können nur Programmbefehle, die nicht in kritischen Code-Abschnitten enthalten sein, für andere Barrieren ausgeführt werden.
  • 6C zeigt ein Verfahren zur Ausführung des Schritts 630, der in 6A gezeigt ist, gemäß einer anschaulichen Ausführungsform der vorliegenden Offenbarung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1, 2, 3A3C, 5A und 5B beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Offenbarung liegt.
  • Der Schritt 630 wird von der Barrierendisponiereinheit 430 für jeden Disponierzyklus ausgeführt. Im Schritt 660 ermittelt die Barrierendisponiereinheit 430 jegliche anhängigen Barrieren in den Barrierenausführungsbereichen 515, die eine dynamische Barriere speichern und einen nächsten Strang haben, der disponiert werden kann. Wenn eine exklusive Barriere gerade ausgeführt wird, dann wartet die Barrierendisponiereinheit 430, bis die Ausführung der exklusiven Barriere abgeschlossen ist, bevor eine nächste anhängige Barriere ermittelt wird. Im Schritt 662 wählt die Barrierendisponiereinheit 430 die dynamische Barriere mit der höchsten Priorität aus. Im Schritt 665 ermittelt die Barrierendisponiereinheit 430, ob die ausgewählte dynamische Barriere eine exklusive Barriere ist, und wenn dies der Fall ist, wartet im Schritt 668 die Barrierendisponiereinheit 430, bis andere Barrieren, die kritische Code-Abschnitte begrenzen (geordnet oder nicht geordnet), gerade nicht von den Strängen ausgeführt werden, bevor zum Schritt 670 weitergegangen wird. Zu beachten ist, dass die Barrierendisponiereinheit 430 darauf warten kann, dass alle teilnehmenden Stränge die Ausführung des anderen kritischen Code-Abschnitts beendet haben, oder dass sie nur warten, dass aktuell ausgeführte Stränge die Ausführung des kritischen Code-Abschnitts beendet haben, bevor (der Reihe nach) die Stränge ausgeführt werden, die an der exklusiven Barriere teilnehmen. Zu beachten ist, dass mehrere nicht-exklusive Barrieren parallel für mehrere CTAs ausgeführt werden können, wobei aber nur eine einzelne exklusive Barriere pro Zeit ausgeführt wird.
  • Im Schritt 670 ermittelt die Barrierendisponiereinheit 430 die Stränge, die an der ausgewählten Barriere teilnehmen, indem ermittelt wird, ob jeder Strang die Barriere durch Namen spezifiziert. Im Schritt 675 sucht die Barrierendisponiereinheit 430 nach dem nächsten teilnehmenden Strang, indem die logischen Kennungen, die mit jedem teilnehmenden Strang verknüpft sind, der den kritischen Code-Abschnitts noch nicht ausgeführt hat, untersucht werden. Im Schritt 680 aktualisiert die Barrierendisponiereinheit 430 den Strangstatus, der in dem Strangstatus für den ausgewählten teilnehmenden Strang gespeichert ist, um anzugeben, dass der Strang „wach” ist, bevor zum Schritt 635 weitergegangen wird. Zu beachten ist, dass, wenn die Wiederabtastungsmarke nicht gesetzt ist, der Schritt 670 einmal, einmal pro Strangblock oder einmal pro Zyklus ausgeführt werden kann, um die teilnehmenden Stränge zu ermitteln, da die Barrierendisponiereinheit 430 ausgebildet sein kann, eine Ausführungsmaske zu unterhalten. Die Barrierendisponiereinheit 430 wählt effizient die teilnehmenden Stränge in der logischen Reihenfolge auf, wenn der vorhergehende teilnehmende Strang die Ausführung des kritischen Code-Abschnitts beendet hat, und aktualisiert die Ausführungsmaske. In einer Ausführungsform wird die Ausführungsmaske für jeden Strangblock berechnet. Wenn die Wiederabtastungsmarke gesetzt ist, kann der Schritt 670 einmal pro Zyklus ausgeführt werden, um die teilnehmenden Stränge zu ermitteln, die die Barriere erreicht haben.
  • Obwohl diverse Ausführungsformen zuvor beschrieben worden sind, ist zu beachten, dass diese nur als Beispiel und nicht als Einschränkung angegeben sind. Somit sind die Breite und der Schutzbereich einer bevorzugten Ausführungsform nicht durch eine der zuvor beschriebenen anschaulichen Ausführungsformen beschränkt, sondern diese sollte nur entsprechend den folgenden Patentansprüchen und ihren Äquivalenten als eingeschränkt betrachtet werden.

Claims (33)

  1. Ein Verfahren, aufweisend: Initiieren einer Ausführung mehrerer Stränge, um Befehle eines Programms zu verarbeiten, das einen Barrierenbefehl enthält; für jeden Strang aus den mehreren Strängen, ermitteln, ob der Strang an dem Barrierenbefehl teilnimmt, wenn der Strang den Barrierenbefehl während der Ausführung des Strangs erreicht; und serielles Ausführen jedes der Stränge, die an dem Barrierenbefehl teilnehmen, um einen oder mehrere Befehle des Programms zu verarbeiten, die auf den Barrierenbefehl folgen.
  2. Das Verfahren nach Anspruch 1, das ferner umfasst: vor der Ausführung jedes Strangs, der an dem Barrierenbefehl teilnimmt, Warten auf einen letzten eintreffenden Strang, der an dem Barrierenbefehl teilnimmt, wobei der letzte eintreffende Strang den Barrierenbefehl als letzter im Vergleich zu anderen Strängen in den mehreren Strängen erreicht, die an dem Barrierenbefehl teilnehmen.
  3. Das Verfahren nach Anspruch 1, das ferner umfasst: vor der Ausführung jeder der Stränge, die an dem Barrierenbefehl teilnehmen, Warten, dass ein Teil der Stränge, die an dem Barrierenbefehl teilnehmen, den Barrierenbefehl erreicht und auf die Erfüllung von Bedingungen, die es dem Barrierenbefehl erlauben, als eine ungeduldige Barriere disponiert zu werden.
  4. Das Verfahren nach Anspruch 3, das ferner umfasst: während der Ausführung jeder der Stränge, die an dem Barrierenbefehl teilnehmen: Ermitteln eines weiteren Strangs als einen spät eintreffenden Strang, der an dem Barrierenbefehl teilnimmt und der nicht in dem Teil der Stränge enthalten ist; und Ausführen des weiteren Strangs zur Verarbeitung der einen oder mehreren Befehle des Programms, die auf den Barrierenbefehl folgen.
  5. Das Verfahren nach Anspruch 3, das ferner umfasst: nach der Ausführung jeder der Stränge in dem Teil der Stränge, die an dem Barrierenbefehl teilnehmen, ungültig Setzen einer Barrierenkennung, die dem Barrierenbefehl entspricht.
  6. Das Verfahren nach Anspruch 3, wobei die Bedingungen, die es erlauben, dass der Barrierenbefehl als eine ungeduldige Barriere disponiert wird, den Teil der Stränge umfasst, die an dem Barrierenbefehl teilnehmen, einschließlich einer Anzahl von Strängen, die größer ist als eine minimale Anzahl an Strängen.
  7. Das Verfahren nach Anspruch 3, wobei die Bedingungen, die es erlauben, dass der Barrierenbefehl als eine ungeduldige Barriere disponiert wird, den Ablauf einer Zeitgrenze umfassen.
  8. Das Verfahren nach Anspruch 1, wobei der Barrierenbefehl einen kritischen Code-Abschnitt abgrenzt.
  9. Das Verfahren nach Anspruch 8, das ferner umfasst: Warten, dass ein erster Strang alle Befehle innerhalb des kritischen Code-Abschnitts ausgeführt hat, bevor ein weiterer Strang für die Ausführung des kritischen Code-Abschnitts ausgewählt wird.
  10. Das Verfahren nach Anspruch 1, das ferner umfasst: Verknüpfen der Stränge mit logischen Kennungen, die auf physikalische Kennungen abgebildet sind, wobei die physikalischen Kennungen von einem mehrsträngigen Verarbeitungskern während der Ausführung der Stränge referenziert werden.
  11. Das Verfahren nach Anspruch 10, wobei Ausführen von jedem der Stränge, die an dem Barrierenbefehl teilnehmen, umfasst: Auswählen der Stränge für eine serielle Ausführung auf der Grundlage der logischen Kennungen.
  12. Das Verfahren nach Anspruch 1, das ferner umfasst: Anhängen einer Marke an eine Barrierenkennung, die zu dem Barrierenbefehl gehört, um in eindeutiger Weise jedes Auftreten des Barrierenbefehls zu kennzeichnen, wenn die Barrierenkennung an mehreren Stellen in dem Programm verwendet wird.
  13. Ein Verarbeitungssubsystem, aufweisend: einer Befehlsdisponiereinheit, die ausgebildet ist, um: Befehle eines Programms für die Ausführung durch mehrere Stränge zu empfangen, wobei das Programm einen Barrierenbefehl enthält; wenn jeder Strang den Barrierenbefehl während der Ausführung des Strangs erreicht, zu ermitteln, ob der Strang an dem Barrierenbefehl teilnimmt; und freizugeben, dass die Stränge, die an dem Barrierenbefehl teilnehmen, für die Ausführung ausgewählt werden; und einem mehrsträngigen Verarbeitungskern, der ausgebildet ist, seriell jeden der Stränge, die an dem Barrierenbefehl teilnehmen, auszuführen, um einen oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, zu verarbeiten.
  14. Das Verarbeitungssubsystem nach Anspruch 13, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, um vor Freigabe jeder der Stränge, die an dem Barrierenbefehl teilnehmen, auf einen letzten eintreffenden Strang zu warten, der an dem Barrierenbefehl teilnimmt, wobei der letzte eintreffende Strang den Barrierenbefehl als letztes im Vergleich zu anderen Strängen aus den mehreren Strängen erreicht, die an dem Barrierenbefehl teilnehmen.
  15. Das Verarbeitungssubsystem nach Anspruch 13, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, um vor der Freigabe jeder der Stränge, die an dem Barrierenbefehl teilnehmen, darauf zu warten, dass ein Teil der Stränge, die an dem Barrierenbefehl teilnehmen, den Barrierenbefehl erreichen, wobei der Teil eine Anzahl von Strängen umfasst, die größer oder gleich ist einer minimalen Anzahl an Strängen.
  16. Das Verarbeitungssubsystem nach Anspruch 15, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, um während der Ausführung der freigegebenen Stränge, die an dem Barrierenbefehl teilnehmen: einen weiteren Strang als einen spät eintreffenden Strang zu erkennen, der an dem Barrierenbefehl teilnimmt; und den weiteren Strang freizugeben, um für eine Ausführung ausgewählt zu werden.
  17. Das Verarbeitungssubsystem nach Anspruch 15, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, um nach Ausführung jedes Strangs in dem Teil der Stränge, die an dem Barrierenbefehl teilnehmen, eine Barrierenkennung ungültig zu setzen, die dem Barrierenbefehl entspricht.
  18. Das Verarbeitungssubsystem nach Anspruch 13, wobei der Barrierenbefehl einen kritischen Code-Abschnitt begrenzt.
  19. Das Verarbeitungssubsystem nach Anspruch 18, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, um darauf zu warten, dass ein erster Strang alle Befehle innerhalb des kritischen Code-Abschnitts ausführt, bevor ein weiterer Strang für die Ausführung des kritischen Code-Abschnitts ausgewählt wird.
  20. Das Verarbeitungssubsystem nach Anspruch 13, wobei die Stränge mit logischen Kennungen verknüpft sind, die auf physikalische Kennungen abgebildet sind, und wobei die physikalischen Kennungen von dem mehrsträngigen Verarbeitungskern während der Ausführung der Stränge, die an dem Barrierenbefehl teilnehmen, referenziert werden.
  21. Das Verarbeitungssubsystem nach Anspruch 20, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, die Stränge, die an dem Barrierenbefehl teilnehmen, für eine serielle Ausführung auf der Grundlage der logischen Kennungen auszuwählen.
  22. Ein Verfahren, aufweisend: Initiieren einer Ausführung von mehreren Strängen zur Verarbeitung von Befehlen eines Programms, das einen Barrierenbefehl enthält; Warten, dass ein Teil der Stränge aus den mehreren Strängen den Barrierenbefehl erreicht, wobei der Teil eine Anzahl an Strängen umfasst, die größer als eine minimale Anzahl an Strängen ist und die kleiner ist als alle der Stränge aus den mehreren Strängen; und serielles Ausführen jedes der Stränge in dem Teil, um einen oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, zu verarbeiten.
  23. Das Verfahren nach Anspruch 22, das ferner umfasst: während der Ausführung jedes der Stränge in dem Teil: Ermitteln eines weiteren Strangs, der den Barrierenbefehl erreicht, als einen spät eintreffenden Strang; und Ausführen des weiteren Strangs zur Verarbeitung des einen oder der mehreren Befehle des Programms, die auf den Barrierenbefehl folgen.
  24. Das Verfahren nach Anspruch 22, das ferner umfasst: nach Ausführung jedes der Stränge in dem Teil, ungültig Setzen einer Barrierenkennung, die zu dem Barrierenbefehl gehört.
  25. Das Verfahren nach Anspruch 22, das ferner umfasst: nach Ausführung jedes der Stränge in dem Teil, serielles Ausführen zumindest eines weiteren Strangs zur Verarbeitung des einen oder der mehreren Befehle des Programms, die auf den Barrierenbefehl folgen.
  26. Ein Verarbeitungssubsystem, aufweisend: einer Befehlsdisponiereinheit, die ausgebildet ist, um: Befehle eines Programms zur Ausführung durch mehrere Stränge zu empfangen, wobei das Programm einen Barrierenbefehl enthält; darauf zu warten, dass ein Teil der Stränge aus den mehreren Strängen den Barrierenbefehl erreicht, wobei der Teil eine Anzahl an Strängen umfasst, die größer ist als eine minimale Anzahl an Strängen und die kleiner ist als alle der Stränge aus den mehreren Strängen; und die Stränge in dem Teil freizugeben, um für die Ausführung ausgewählt zu werden; und einem mehrsträngigen Verarbeitungskern, der ausgebildet ist, jeden der Stränge, die an dem Barrierenbefehl teilnehmen, seriell auszuführen, um einen oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, zu verarbeiten.
  27. Das Verarbeitungssubsystem nach Anspruch 26, wobei die Befehlsdisponiereinheit ferner ausgebildet ist, um: während der Ausführung der freigegebenen Stränge in dem Teil: einen weiteren Strang, der den Barrierenbefehl erreicht, als einen spät eintreffenden Strang zu ermitteln; und den weiteren Strang freizugeben, um für die Ausführung ausgewählt zu werden.
  28. Ein Verfahren, aufweisend: Initiieren der Ausführung mehrerer Stränge zur Verarbeitung von Befehlen eines Programms, das einen Barrierenbefehl enthält; für jeden Strang aus den mehreren Strängen, Ermitteln, ob der Strang an dem Barrierenbefehl teilnimmt, wenn der Strang den Barrierenbefehl während der Ausführung Strangs erreicht; und Ausführen jedes der Stränge, die an dem Barrierenbefehl teilnehmen, um einen oder mehrere Befehle des Programms, die auf den Barrierenbefehl folgen, zu verarbeiten, nachdem alle der Stränge, die an dem Barrierenbefehl teilnehmen, den Barrierenbefehl erreicht haben.
  29. Das Verfahren nach Anspruch 28, wobei jeder Strang, der an dem Barrierenbefehl teilnimmt, auf einen Schlaf-Zustand aktualisiert wird, wenn der Strang den Barrierenbefehl erreicht.
  30. Das Verfahren nach Anspruch 28, wobei jeder Strang, der an dem Barrierenbefehl teilnimmt, auf einen Wach-Zustand aktualisiert wird, wenn alle der Stränge, die an dem Barrierenbefehl teilnehmen, den Barrierenbefehl erreicht haben.
  31. Das Verfahren nach Anspruch 28, das ferner umfasst: Anhängen einer Marke an eine Barrierenkennung, die zu dem Barrierenbefehl gehört, um in eindeutiger Weise jedes Auftreten des Barrierenbefehls zu kennzeichnen, wenn die Barrierenkennung an mehreren Stellen in dem Programm verwendet wird.
  32. Das Verfahren nach Anspruch 28, das ferner umfasst: Fortsetzen der Ausführung mindestens eines Strangs, der nicht an dem Barrierenbefehl teilnimmt, wenn der mindestens eine Strang den Barrierenbefehl erreicht.
  33. Ein Verarbeitungssubsystem, aufweisend: einer Befehlsdisponiereinheit, die ausgebildet ist, um: Befehle eines Programms zur Ausführung durch mehrere Stränge zu empfangen, wobei das Programm einen Barrierenbefehl enthält; wenn jeder Strang den Barrierenbefehl während der Ausführung des Strangs erreicht, zu ermitteln, ob der Strang an dem Barrierenbefehl teilnimmt; und die Stränge freizugeben, die an dem Barrierenbefehl teilnehmen, um für die Ausführung ausgewählt zu werden; und einem mehrsträngigen Verarbeitungskern, der ausgebildet ist, jeden der Stränge, die an dem Barrierenbefehl teilnehmen, zur Verarbeitung eines oder mehrerer Befehle des Programms, die auf den Barrierenbefehl folgen, auszuführen, nachdem alle Stränge, die an dem Barrierenbefehl teilnehmen, den Barrierenbefehl erreichen.
DE102013114351.2A 2013-03-11 2013-12-18 System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren Pending DE102013114351A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/794,578 US9448803B2 (en) 2013-03-11 2013-03-11 System and method for hardware scheduling of conditional barriers and impatient barriers
US13/794,578 2013-03-11

Publications (1)

Publication Number Publication Date
DE102013114351A1 true DE102013114351A1 (de) 2014-09-11

Family

ID=51385449

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013114351.2A Pending DE102013114351A1 (de) 2013-03-11 2013-12-18 System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren

Country Status (4)

Country Link
US (1) US9448803B2 (de)
CN (1) CN104050032A (de)
DE (1) DE102013114351A1 (de)
TW (1) TW201435734A (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9442755B2 (en) 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers
US9519944B2 (en) * 2014-09-02 2016-12-13 Apple Inc. Pipeline dependency resolution
GB2549239A (en) * 2014-11-13 2017-10-18 Advanced Risc Mach Ltd Context sensitive barriers in data processing
US10671426B2 (en) 2016-11-28 2020-06-02 Arm Limited Data processing
US10552212B2 (en) 2016-11-28 2020-02-04 Arm Limited Data processing
US10423446B2 (en) * 2016-11-28 2019-09-24 Arm Limited Data processing
US10394641B2 (en) * 2017-04-10 2019-08-27 Arm Limited Apparatus and method for handling memory access operations
US10558418B2 (en) * 2017-07-27 2020-02-11 Advanced Micro Devices, Inc. Monitor support on accelerated processing device
US11107263B2 (en) * 2018-11-13 2021-08-31 Intel Corporation Techniques to manage execution of divergent shaders
DE102020127704A1 (de) 2019-10-29 2021-04-29 Nvidia Corporation Techniken zum effizienten transferieren von daten an einem prozessor
US11803380B2 (en) 2019-10-29 2023-10-31 Nvidia Corporation High performance synchronization mechanisms for coordinating operations on a computer system
US20230315655A1 (en) 2022-03-10 2023-10-05 Nvidia Corporation Fast data synchronization in processors and memory
US20230289242A1 (en) 2022-03-10 2023-09-14 Nvidia Corporation Hardware accelerated synchronization with asynchronous transaction support

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7669203B2 (en) 2003-12-19 2010-02-23 Intel Corporation Virtual multithreading translation mechanism including retrofit capability
US7555607B2 (en) * 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
US8214662B2 (en) * 2007-04-09 2012-07-03 Panasonic Corporation Multiprocessor control unit, control method performed by the same, and integrated circuit
US7941791B2 (en) * 2007-04-13 2011-05-10 Perry Wang Programming environment for heterogeneous processor resource integration
US8209702B1 (en) 2007-09-27 2012-06-26 Emc Corporation Task execution using multiple pools of processing threads, each pool dedicated to execute different types of sub-tasks
US8539204B2 (en) * 2009-09-25 2013-09-17 Nvidia Corporation Cooperative thread array reduction and scan operations
US8522000B2 (en) * 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US8423750B2 (en) 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism
US8799454B2 (en) * 2010-12-15 2014-08-05 International Business Machines Corporation Behavior based client selection for disparate treatment
US9158595B2 (en) * 2012-10-25 2015-10-13 Nvidia Corporation Hardware scheduling of ordered critical code sections
US9442755B2 (en) 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers

Also Published As

Publication number Publication date
CN104050032A (zh) 2014-09-17
US20140258693A1 (en) 2014-09-11
TW201435734A (zh) 2014-09-16
US9448803B2 (en) 2016-09-20

Similar Documents

Publication Publication Date Title
DE102013114351A1 (de) System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102013208554B4 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102013022712B4 (de) Virtuelle Speicherstruktur für Coprozessoren, die Speicherallokationsbegrenzungen haben
DE102012222558B4 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102013209350B4 (de) Ressource-Management-Subsystem, welches Fairness und Ordnung einhält
DE102013016871A1 (de) Technik zur Steigerung der Effizienz in mehrsträngigen Verarbeitungseinrichtngen
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102012220267B4 (de) Rechenarbeitsverteilungs - Referenzzähler
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102012221504B4 (de) Mehrniveau-Anweisung-Zwischenspeicher-Zuvor-Holen
DE102013200991A1 (de) Automatisches abhängige-Aufgabe-Anstoßen
DE102013208558A1 (de) Verfahren und System zur Verarbeitung verschachtelter Stream-Events
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013201178A1 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102009046847A1 (de) Mehrklassen-Daten-Cache-Verfahren
DE102013017511A1 (de) Effiziente speichervirtualisierung in mehrsträngigen verarbeitungseinheiten
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE102013017510A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten

Legal Events

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

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

Representative=s name: DILG HAEUSLER SCHINDELMANN PATENTANWALTSGESELL, DE

R082 Change of representative

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

R016 Response to examination communication