DE102020113789A1 - Asynchroner ausführungsmechanismus - Google Patents

Asynchroner ausführungsmechanismus Download PDF

Info

Publication number
DE102020113789A1
DE102020113789A1 DE102020113789.3A DE102020113789A DE102020113789A1 DE 102020113789 A1 DE102020113789 A1 DE 102020113789A1 DE 102020113789 A DE102020113789 A DE 102020113789A DE 102020113789 A1 DE102020113789 A1 DE 102020113789A1
Authority
DE
Germany
Prior art keywords
graphics
execution
tasks
processing
pipeline
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
DE102020113789.3A
Other languages
English (en)
Inventor
Saurabh Sharma
Michael Apodaca
Aditya Navale
Travis Schluessler
Vamsee Vardhan Chivukula
Abhishek Venkatesh
Subramaniam Maiyuran
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE102020113789A1 publication Critical patent/DE102020113789A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

Eine Vorrichtung, um die asynchrone Ausführung in einer Verarbeitungseinheit zu fördern. Die Vorrichtung enthält einen oder mehrere Prozessoren, um unabhängige Aufgabendurchläufe zu detektieren, die in einer Pipeline der Verarbeitungseinheit außerhalb der Reihenfolge ausgeführt werden können, um einen ersten Satz von Verarbeitungsaufgaben zu planen, die in einem ersten Satz von Verarbeitungselementen in der Verarbeitungseinheit auszuführen sind, und um einen zweiten Satz von Aufgaben zu planen, die in einem zweiten Satz von Verarbeitungselementen auszuführen sind, wobei die Ausführung des ersten Satzes von Aufgaben in dem ersten Satz von Verarbeitungselementen gleichzeitig und parallel zur Ausführung des zweiten Satzes von Aufgaben in dem zweiten Satz von Verarbeitungselementen ausgeführt werden soll.

Description

  • GEBIET DER ERFINDUNG
  • Diese Erfindung bezieht sich im Allgemeinen auf die Graphikverarbeitung und insbesondere auf das Planen über eine Graphikverarbeitungseinheit.
  • HINTERGRUND DER BESCHREIBUNG
  • Graphikverarbeitungseinheiten (GPUs) sind hochgradige „Threading“-Maschinen, in denen Hunderte von „Threads“ eines Programms parallel ausgeführt werden, um einen hohen Durchsatz über eine Graphikpipeline zu erreichen. Eine klassische Graphikpipeline synthetisiert einen Frame als eine Sammlung von seriellen Durchläufen, wie z. B. G-Puffer, Schatten, Beleuchtung usw. Jeder Durchlauf erzeugt Informationen, die in nachfolgenden Durchläufen verwendet werden, um ein endgültiges Bild zu synthetisieren. Einige der Durchläufe (z. B. die diesen Durchläufen beigefügten Betriebsmittel wie ein Scheitelpunkt-Puffer-Objekt, eine Textur(en) usw.) sind jedoch unabhängig, wobei folglich die Ausführung dieser Durchläufe nicht der Programmreihenfolge folgen muss.
  • Überdies ist die Arbeit, die in diesen Durchläufen ausgeführt wird, typischerweise verschieden (z. B. die Verwendung verschiedener Cluster der Graphikverarbeitungseinheit (GPU), um Zwischeninformationen zu erzeugen). Ein G-Puffer- oder Beleuchtungsdurchlauf verwendet z. B. stark die Rechen-Cluster- und Speicherbandbreite, während ein Schattendurchlauf den Geometrie-/Raster-/Tieferohrdurchsatz stark verwendet. Herkömmliche GPUs führen diese unabhängigen Durchläufe seriell aus, was zu einer ineffizienten Verwendung der GPU-Hardware führt, bei der einige Cluster vollständig verwendet werden, während die anderen Cluster zu wenig verwendet werden.
  • Figurenliste
  • Damit die Art der oben dargelegten Merkmale der vorliegenden Erfindung eingehend verstanden werden kann, kann eine speziellere Beschreibung der Erfindung, die oben kurz zusammengefasst worden ist, bezüglich der Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen veranschaulicht sind. Es wird jedoch darauf hingewiesen, dass die beigefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung veranschaulichen und deshalb nicht als ihren Schutzumfang einschränkend zu betrachten sind, damit die Erfindung andere gleichermäßen wirksame Ausführungsformen zulässt.
    • 1 ist ein Blockschaltplan eines Verarbeitungssystems gemäß einer Ausführungsform;
    • 2A-2D veranschaulichen Rechensysteme und Graphikprozessoren, die durch die hier beschriebenen Ausführungsformen bereitgestellt werden;
    • 3A-3C veranschaulichen Blockschaltpläne zusätzlicher Graphikprozessor- und Rechenbeschleunigerarchitekturen, die durch Ausführungsformen bereitgestellt werden;
    • 4 ist ein Blockschaltplan einer Graphikverarbeitungsmaschine eines Graphikprozessors in Übereinstimmung mit einigen Ausführungsformen;
    • 5A-5B veranschaulichen die „Thread“-Ausführungslogik 500, die eine Anordnung von Verarbeitungselementen enthält, die in einem Graphikprozessorkern gemäß den Ausführungsformen eingesetzt werden;
    • 6 veranschaulicht eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform;
    • 7 ist ein Blockschaltplan, der die Graphikprozessor-Anweisungsformate gemäß einigen Ausführungsformen veranschaulicht;
    • 8 ist ein Blockschaltplan eines Graphikprozessors gemäß einer weiteren Ausführungsform;
    • 9Au. 9B veranschaulichen ein Graphikprozessor-Befehlsformat und eine Befehlsfolge gemäß einigen Ausführungsformen;
    • 10 veranschaulicht eine beispielhafte Graphik-Software-Architektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen;
    • 11A-11D veranschaulichen eine Baugruppenanordnung einer integrierten Schaltung gemäß einer Ausführungsform;
    • 12 ist ein Blockschaltplan, der eine beispielhafte integrierte Schaltung eines Systems auf einem Chip gemäß einer Ausführungsform veranschaulicht;
    • 13Au. 13B sind ein Blockschaltplan, der einen zusätzlichen beispielhaften Graphikprozessor veranschaulicht;
    • 14 veranschaulicht eine Ausführungsform einer Rechenvorrichtung, die einen Mechanismus für die asynchrone Ausführung verwendet;
    • 15 veranschaulicht eine Ausführungsform einer GPU mit Verarbeitungselementen;
    • 16 ist ein Ablaufplan, der eine Ausführungsform eines Prozesses zum Ausführen einer asynchronen Ausführung veranschaulicht;
    • 17A-17D veranschaulichen Ausführungsformen einer asynchronen Ausführung, die in einer Graphikpipeline implementiert ist;
    • 18 ist ein Ablaufplan, der eine Ausführungsform eines Prozesses zum Planen von Arbeit für eine asynchrone Ausführung veranschaulicht; und
    • 19 ist ein Ablaufplan, der eine weitere Ausführungsform eines Prozesses zum Planen von Arbeit für eine asynchrone Ausführung veranschaulicht.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um ein umfassenderes Verständnis der vorliegenden Erfindung bereitzustellen. Es ist jedoch für einen Fachmann auf dem Gebiet offensichtlich, dass die vorliegende Erfindung ohne eine oder mehrere dieser spezifischen Einzelheiten praktiziert werden kann. In anderen Fällen sind wohlbekannte Merkmale nicht beschrieben worden, um ein Verbergen der vorliegenden Erfindung zu vermeiden.
  • In den Ausführungsformen detektiert ein Mechanismus für die asynchrone Ausführung unabhängige Durchläufe, die in einer Pipeline außerhalb der Reihenfolge ausgeführt werden können, plant die erste Arbeit, die in einem ersten Satz von Verarbeitungselementen in einer Verarbeitungseinheit auszuführen ist, und plant die zweite Arbeit unabhängig von der ersten Arbeit, die in einem zweiten Satz von Verarbeitungselementen auszuführen ist. In derartigen Ausführungsformen werden die Ausführung der ersten Arbeit und der zweiten Arbeit gleichzeitig und parallel ausgeführt.
  • Systemüberblick
  • 1 ist ein Blockschaltplan eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Einprozessor-Desktop-System, einem Mehrprozessor-Workstation-System oder einem Server-System mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die innerhalb einer integrierten Schaltung eines Systems auf einem Chip (SoC) enthalten ist, zur Verwendung in mobilen, handgehaltenen oder eingebetteten Vorrichtungen, wie z. B. innerhalb von Vorrichtungen des Internets der Dinge (IoT) mit einer verdrahteten oder drahtlosen Verbindungsfähigkeit mit einem lokalen oder Weitbereichsnetz.
  • In einer Ausführungsform kann das System 100: eine server-basierte Spieleplattform; eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole; eine mobile Spielekonsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole enthalten, mit diesen gekoppelt oder in diese integriert sein. In einigen Ausführungsformen ist das System 100 Teil eines Mobiltelephons, eines Smartphones, einer Tablet-Computervorrichtung oder einer mit dem Internet verbundenen Mobilvorrichtung, wie z. B. eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 100 kann außerdem: eine tragbare Vorrichtung, wie z. B. tragbare Vorrichtung einer intelligenten Armbanduhr; eine intelligente Brille oder Kleidung, die mit Merkmalen der erweiterten Realität (AR) oder der virtuellen Realität (VR) erweitert ist, um visuelle, akustische oder taktile Ausgaben bereitzustellen, um die visuellen, akustischen oder taktilen Erfahrungen der realen Welt zu ergänzen oder anderweitig Text, Audio, Graphiken, Video, holographische Bilder oder holographisches Video oder eine taktile Rückkopplung bereitzustellen; eine andere Vorrichtung der erweiterten Realität (AR-Vorrichtung); oder eine andere Vorrichtung der virtuellen Realität (VR-Vorrichtung) enthalten, mit diesen gekoppelt sein oder in diese integriert sein. In einigen Ausführungsformen enthält das Verarbeitungssystem 100 ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung oder ist ein Teil davon. In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug, wie z. B. einen Bus, einen Sattelzug, ein Kraftfahrzeug, einen Motorrad oder ein Elektrofahrrad, ein Flugzeug oder ein Segelflugzeug (oder eine beliebige Kombination daraus) enthalten, mit diesen gekoppelt oder in diese integriert sein. Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die um das Fahrzeug abgetastete Umgebung zu verarbeiten.
  • In einigen Ausführungsformen enthält jeder des einen oder der mehreren Prozessoren 102 einen oder mehrere Prozessorkerne 107, um Anweisungen auszuführen, die, wenn sie ausgeführt werden, die Operationen für die System- oder Anwender-Software ausführen. In einigen Ausführungsformen ist wenigstens einer des einen oder der mehreren Prozessorkerne 107 konfiguriert, einen spezifischen Anweisungssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Anweisungssatz 109 die Berechnung mit einem komplexen Anweisungssatz (CISC), die Berechnung mit einem reduzierten Anweisungssatz (RISC) oder die Berechnung über ein sehr langes Anweisungswort (VLIW) fördern. Ein oder mehrere Prozessorkerne 107 können einen anderen Anweisungssatz 109 verarbeiten, der Anweisungen enthalten können, um die Emulation anderer Anweisungssätze zu fördern. Der Prozessorkern 107 kann außerdem andere Verarbeitungsvorrichtungen, wie z. B. einen digitalen Signalprozessor (DSP), enthalten.
  • In einigen Ausführungsformen enthält der Prozessor 102 einen Cache-Speicher 104. Der Prozessor 102 kann abhängig von der Architektur einen einzigen internen Cache oder mehrere Ebenen des internen Caches aufweisen. In einigen Ausführungsformen wird der Cache-Speicher zwischen verschiedenen Komponenten des Prozessors 102 gemeinsam benutzt. In einigen Ausführungsformen verwendet der Prozessor 102 außerdem einen externen Cache (z. B. einen Ebene 3-Cache (L3-Cache) oder einen (nicht gezeigten) Cache der letzten Ebene (LLC)), die unter Verwendung bekannter Cache-Kohärenztechniken zwischen den mehreren Prozessorkernen 107 gemeinsam benutzt werden können. In dem Prozessor 102 kann zusätzlich eine Registerdatei 106 enthalten sein, die verschiedene Typen von Registern zum Speichern verschiedener Typen von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister) enthalten kann. Einige Register können Universalregister sein, während andere Register für die Bauform des Prozessors 102 spezifisch sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessor(en) 102 an einen oder mehrere Schnittstellenbus(se) 110 gekoppelt, um Kommunikationssignale, wie z. B. Adressen-, Daten- oder Steuersignale, zwischen dem Prozessor 102 und anderen Komponenten in dem System 100 zu übertragen. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus, wie z. B. eine Version des Busses direkter Medienschnittstellen (DMI-Bus), sein. Die Prozessorbusse sind jedoch nicht auf den DMI-Bus eingeschränkt und können ein oder mehrere Peripheriekomponenten-Zusammenschaltungsbusse (z. B. PCI, PCI-Express), Speicherbusse oder andere Typen von Schnittstellenbussen enthalten. In einer Ausführungsform kann der Prozessor (können die Prozessoren) 102 einen integrierten Speicher-Controller 116 und einen Plattform-Controller-Hub 130 enthalten. Der Speicher-Controller 116 fördert die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattform-Controller-Hub (PCH) 130 die Verbindungen zu den E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 120 kann eine Vorrichtung dynamischen Schreib-Lese-Speichers (DRAM-Vorrichtung), eine Vorrichtung statischen Schreib-Lese-Speichers (SRAM-Vorrichtung), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder irgendeine andere Speichervorrichtung, die eine geeignete Leistung aufweist, um als ein Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung 120 als ein Systemspeicher für das System 100 arbeiten, um Daten 122 und Anweisungen 121 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Der Speicher-Controller 116 ist außerdem an einen optionalen externen Graphikprozessor 118 gekoppelt, der mit dem einen oder den mehreren Graphikprozessoren 108 in den Prozessoren 102 kommunizieren kann, um Graphik- und Medienoperationen auszuführen. In einigen Ausführungsformen können Graphik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, der ein Coprozessor ist, der konfiguriert sein kann, einen spezialisierten Satz von Graphik-, Medien- oder Rechenoperationen auszuführen. In einer Ausführungsform ist der Beschleuniger 112 z. B. ein Matrixmultiplikationsbeschleuniger, der verwendet werden kann, um das maschinellen Lernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Strahlverfolgungsbeschleuniger, der in Übereinstimmung mit dem Graphikprozessor 108 verwendet werden kann, um Strahlverfolgungsoperationen auszuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle des Beschleunigers 112 oder in Übereinstimmung mit diesem verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem (den) Prozessor(en) 102 verbunden sein. Die Anzeigevorrichtung 111 kann eine oder mehrere einer internen Anzeigevorrichtung, wie in einer mobilen Elektronikvorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 111 ein Datenhelm (HMD), wie z. B. eine Stereoanzeigevorrichtung, zur Verwendung in den Anwendungen der virtuellen Realität (VR) oder den Anwendungen der erweiterten Realität (AR), sein.
  • In einigen Ausführungsformen ermöglicht es der Plattform-Controller-Hub 130, dass die Peripherievorrichtungen über einen Hochgeschwindigkeits-E/A-Bus mit der Speichervorrichtung 120 und dem Prozessor 102 verbunden sind. Die E/A-Peripherievorrichtungen enthalten, sind aber nicht eingeschränkt auf einen Audio-Controller 146, einen Netz-Controller 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sender/Empfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z. B. einen nichtflüchtigen Speicher, einen flüchtigen Speicher, ein Festplattenlaufwerk, einen Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.). Die Datenspeichervorrichtung 124 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie z. B. einen Peripheriekomponenten-Zusammenschaltungsbus (z. B. PCI, PCI-Express) angeschlossen sein. Die Berührungssensoren 125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren enthalten. Der drahtlose Sender/Empfänger 126 kann ein Wi-Fi-Sender/Empfänger, ein Bluetooth-Sender/Empfänger oder ein Mobilnetz-Sender/Empfänger, wie z. B. ein 3G-Sender/Empfänger, 4G-Sender/Empfänger, 5G-Sender/Empfänger oder ein Sender/Empfänger der langfristigen Entwicklung (LTE-Sender/Empfänger) sein. Die Firmware-Schnittstelle 128 ermöglicht die Kommunikation mit der System-Firmware und kann z.B. eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Der Netz-Controller 134 kann eine Netzverbindung zu einem verdrahteten Netz ermöglichen. In einigen Ausführungsformen ist ein (nicht gezeigter) Hochleistungs-Netz-Controller an den Schnittstellenbus 110 gekoppelt. Der Audio-Controller 146 ist in einer Ausführungsform ein hochauflösender Mehrkanal-Audio-Controller. In einer Ausführungsform enthält das System 100 einen optionalen Alt-E/A-Controller 140 zum Koppeln von Altvorrichtungen (z. B. Vorrichtungen des Personal System/2 (PS/2-Vorrichtungen)) an das System. Der Plattform-Controller-Hub 130 kann außerdem mit einem oder mehreren Controllern 142 des universellen seriellen Busses (USB-Controllern) verbunden sein, die Eingabevorrichtungen, wie z. B. Kombinationen aus Tastatur und Maus 143, eine Kamera 144 oder andere USB-Eingabevorrichtungen, anschließen.
  • Es wird erkannt, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, da andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, außerdem verwendet werden können. Eine Instanz des Speicher-Controllers 116 und des Plattform-Controller-Hubs 130 kann z. B. in einen diskreten externen Graphikprozessor, wie z. B. den externen Graphikprozessor 118, integriert sein. In einer Ausführungsform können sich der Plattform-Controller-Hub 130 und/oder der Speicher-Controller 116 außerhalb des einen oder der mehreren Prozessor(en) 102 befinden. Das System 100 kann z. B. einen externen Speicher-Controller 116 und einen externen Plattform-Controller-Hub 130, die als ein Speicher-Controller-Hub und ein Peripherievorrichtungs-Controller-Hub konfiguriert sein können, innerhalb eines System-Chipsatzes enthalten, der mit dem Prozessor (den Prozessoren) 102 in Verbindung steht.
  • Es können z. B. Leiterplatten („Schlitten“) verwendet werden, auf denen die Komponenten, wie z. B. CPUs, ein Speicher und andere Komponenten angeordnet sind, die für eine erhöhte thermische Leistung entworfen sind. In einigen Beispielen befinden sich die Verarbeitungskomponenten, wie z. B. die Prozessoren, auf einer Oberseite eines Schlittens, während sich naher Speicher, wie z. B. DIMMs, auf einer Unterseite des Schlittens befindet. Im Ergebnis des verbesserten Luftstroms, der durch diese Bauform bereitgestellt wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln als in typischen Systemen arbeiten, wodurch die Leistungsfähigkeit erhöht wird. Weiterhin sind die Schlitten so konfiguriert, dass sie blind mit Strom- und Datenkommunikationskabeln in einem Rack zusammenpassen, wodurch ihre Fähigkeit, schnell entfernt, aufgerüstet, wieder installiert und/oder ersetzt zu werden, verbessert wird. Ähnlich sind die einzelnen Komponenten, die sich auf den Schlitten befinden, wie z. B. die Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, so konfiguriert, dass sie aufgrund ihres vergrößerten Abstands voneinander leicht aufgerüstet werden. In der veranschaulichenden Ausführungsform enthalten die Komponenten zusätzlich Hardware-Bestätigungsmerkmale, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzige Netzarchitektur („Struktur“) verwenden, die mehrere andere Netzarchitekturen einschließlich Ethernet und Omni-Path unterstützt. Die Schlitten können über optische Fasern an die Netzknoten gekoppelt sein, die eine höhere Bandbreite und eine geringere Latenzzeit als eine typische Verkabelung mit verdrillten Leitungspaaren (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der hohen Bandbreite, der Verbindungen mit geringer Latenzzeit und der Netzarchitektur kann das Datenzentrum in Betrieb die Betriebsmittel, wie z. B. einen Speicher, die Beschleuniger (z. B. GPUs, Graphikbeschleuniger, FPGAs, ASICs, Beschleuniger für neuronale Netze und/oder künstliche Intelligenz usw.) und die Datenspeichervorrichtungen, die physisch in ihre Bestandteile zerlegt sind, zusammenfassen und sie je nach Bedarf den Rechenbetriebsmitteln (z. B. Prozessoren) bereitstellen, wobei den Rechenbetriebsmitteln ermöglicht wird, auf die zusammengefassten Betriebsmittel zuzugreifen, als ob sie lokal wären.
  • Eine Leistungsversorgung oder -quelle kann dem System 100 oder irgendeiner Komponente oder irgendeinem System, die hier beschrieben sind, eine Spannung und/oder einen Strom bereitstellen. In einem Beispiel enthält die Leistungsversorgung einen AC-zu-DC- (Wechselstrom-zu-Gleichstrom-) Adapter, um in eine Wandsteckdose gesteckt zu werden. Eine derartige Wechselstromleistung kann eine Leistungsquelle erneuerbarer Energie (z. B. Sonnenenergie) sein. In einem Beispiel enthält die Leistungsquelle eine Gleichstromquelle, z. B. einen externen Wechselstrom-zu-Gleichstrom-Umsetzer. In einem Beispiel enthält die Leistungsquelle oder die Leistungsversorgung eine drahtlose Lade-Hardware, um über die Nähe zu einem Ladefeld zu laden. In einem Beispiel kann die Leistungsquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Sonnenleistungsversorgung oder eine Brennstoffzellenquelle enthalten.
  • Die 2A-2D veranschaulichen Computersysteme und Graphikprozessoren, die durch die hier beschriebenen Ausführungsformen bereitgestellt sind. Die Elemente nach den 2A-2D, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können in irgendeiner Weise, die zu der ähnlich ist, die hier anderswo beschrieben ist, arbeiten oder funktionieren, sind aber nicht auf eine solche eingeschränkt.
  • 2A ist ein Blockschaltplan einer Ausführungsform eines Prozessors 200 mit einem oder mehreren Prozessorkernen 202A-202N, einem integrierten Speicher-Controller 214 und einem integrierten Graphikprozessor 208. Der Prozessor 200 kann zusätzliche Kerne bis zum und einschließlich des zusätzlichen Kerns 202N, die durch die Kästen mit gestrichelten Linien dargestellt sind, enthalten. Jeder der Prozessorkerne 202A-202N enthält eine oder mehrere interne Cache-Einheiten 204A-204N. In einigen Ausführungsformen weist jeder Prozessorkern außerdem Zugriff auf eine oder mehrere gemeinsam benutzte Cache-Einheiten 206 auf. Die internen Cache-Einheiten 204A-204N und die gemeinsam benutzten Cache-Einheiten 206 repräsentieren eine Cache-Speicher-Hierarchie innerhalb des Prozessors 200. Die Cache-Speicher-Hierarchie kann wenigstens eine Ebene eines Anweisungs- und Daten-Caches innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen eines gemeinsam benutzten Caches mittlerer Ebene, wie z. B. einer Ebene 2 (L2), einer Ebene 3 (L3), einer Ebene 4 (L4) oder anderer Ebenen des Caches, wobei die höchste Ebene des Caches vor dem äußeren Speicher als der LLC klassifiziert ist, enthalten. In einigen Ausführungsformen erhält eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 außerdem einen Satz von einer oder mehreren Bus-Controller-Einheiten 216 und einen Systemagentenkern 210 enthalten. Die eine oder die mehreren Bus-Controller-Einheiten 216 managen einen Satz von Peripheriebussen, wie z. B. einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 210 stellt eine Managementfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen enthält der Systemagentenkern 210 einen oder mehrere integrierte Speicher-Controller 214, um den Zugriff auf verschiedene (nicht gezeigte) externe Speichervorrichtungen zu managen.
  • In einigen Ausführungsformen enthalten einer oder mehrere der Prozessorkerne 202A-202N eine Unterstützung für das gleichzeitige Multi-„Threading“. In einer derartigen Ausführungsform enthält der Systemagentenkern 210 die Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während der Multi-„Threading“-Verarbeitung. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU) enthalten, die eine Logik und Komponenten enthält, um den Leistungszustand der Prozessorkerne 202A-202N und des Graphikprozessors 208 zu regeln.
  • In einigen Ausführungsformen enthält der Prozessor 200 zusätzlich einen Graphikprozessor 208, um Graphikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Graphikprozessor 208 mit dem Satz von gemeinsam benutzten Cache-Einheiten 206 und dem Systemagentenkern 210 einschließlich des einen oder der mehreren integrierten Speicher-Controller 214 gekoppelt. In einigen Ausführungsformen enthält der Systemagentenkern 210 außerdem einen Anzeige-Controller 211, um die Ausgabe des Graphikprozessors zu einer oder mehreren gekoppelten Anzeigen zu steuern. Der Anzeige-Controller 211 kann in einigen Ausführungsformen ein separates Modul sein, das über wenigstens eine Zusammenschaltung an den Graphikprozessor gekoppelt ist, oder kann innerhalb des Graphikprozessors 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Zusammenschaltungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Es kann jedoch eine alternative Zusammenschaltungseinheit, wie z. B. eine Punkt-zu-Punkt-Zusammenschaltung, eine geschaltete Zusammenschaltung oder andere Techniken einschließlich der in der Technik wohlbekannten Techniken, verwendet werden. In einigen Ausführungsformen ist der Graphikprozessor 208 über eine E/A-Verbindung 213 an die Ringzusammenschaltung 212 gekoppelt.
  • Die beispielhafte E/A-Verbindung 213 repräsentiert wenigstens eine von mehreren Arten der E/A-Zusammenschaltungen einschließlich einer E/A-Zusammenschaltung in der Baugruppe, die die Kommunikation zwischen den verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungs-Speichermodul 218, wie z. B. einem eDRAM-Modul, fördert. In einigen Ausführungsformen können jeder der Prozessorkerne 202A-202N und der Graphikprozessor 208 die eingebetteten Speichermodule 218 als den gemeinsam benutzten Cache der letzten Ebene verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die die gleiche Anweisungssatzarchitektur ausführen. In einer weiteren Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich einer Anweisungssatzarchitektur (ISA) heterogen, wobei ein oder mehrere Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während wenigstens einer der anderen Kerne eine Teilmenge des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne, die eine relativ hohe Leistungsaufnahme aufweisen, an einen oder mehrere Leistungskerne gekoppelt sind, die eine geringere Leistungsaufnahme aufweisen. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Rechenfähigkeit heterogen. Zusätzlich kann der Prozessor 200 in einem oder mehreren Chips oder als eine integrierte Schaltung eines SoC, die zusätzlich zu den anderen Komponenten die veranschaulichten Komponenten aufweist, implementiert sein.
  • 2B ist ein Blockschaltplan der Hardware-Logik eines Graphikprozessorkerns 219 gemäß einigen hier beschriebenen Ausführungsformen. Die Elemente nach 2B, die die gleichen Bezugszeichen (oder Namen) wie die Elemente jeder anderen Figur hier aufweisen, können in irgendeiner Weise arbeiten oder funktionieren, die zu der ähnlich ist, die hier anderswo beschrieben ist, sind aber nicht auf eine solche eingeschränkt. Der Graphikprozessorkern 219, der manchmal als Kernscheibe bezeichnet wird, kann ein oder mehrere Graphikkerne innerhalb eines modularen Graphikprozessors sein. Der Graphikprozessorkern 219 ist beispielhaft für eine Graphikkernscheibe, wobei ein Graphikprozessor, wie er hier beschrieben wird, mehrere Graphikkernscheiben basierend auf den Zielleistungs- und Leistungsfähigkeitsenveloppen enthalten. Jeder Graphikprozessorkern 219 kann einen Block 230 mit fester Funktion enthalten, der mit mehreren Unterkernen 221A-221F gekoppelt ist, die außerdem als Unterscheiben bezeichnet werden, die modulare Blöcke mit universeller und fester Funktionslogik enthalten.
  • In einigen Ausführungsformen enthält der Block 230 mit fester Funktion eine Geometriepipeline/Pipeline mit fester Funktion 231, die durch alle Unterkerne im Graphikprozessorkern 219, z. B. in Graphikprozessor-Implementierungen mit geringerer Leistungsfähigkeit und/oder geringerer Leistung, gemeinsam benutzt werden kann. In verschiedenen Ausführungsformen enthält die Geometriepipeline/Pipeline mit fester Funktion 231 eine Pipeline mit festen 3D-Funktionen (z. B. eine 3D-Pipeline 312 wie in 3 und 4, die im Folgenden beschrieben wird), eine Video-„Frontend“-Einheit, einen „Thread“-Erzeuger und „Thread“-Abfertiger und einen vereinheitlichten Rücksprungpuffermanager, der die vereinheitlichten Rücksprungpuffer managt (z. B. den vereinheitlichten Rücksprungpuffer 418 in 4, wie im Folgenden beschrieben wird).
  • In einer Ausführungsform umfasst der Block 230 mit fester Funktion außerdem eine Graphik-SoC-Schnittstelle 232, einen Graphikmikrocontroller 233 und eine Medienpipeline 234. Die Graphik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Graphikprozessorkern 219 und den anderen Prozessorkernen innerhalb einer integrierten Schaltung eines Systems auf einem Chip bereit. Der Graphikmikrocontroller 233 ist ein programmierbarer Teilprozessor, der konfigurierbar ist, verschiedene Funktionen des Graphikprozessorkerns 219 einschließlich der „Thread“-Abfertigung, -Planung und -Vorwegnahme zu managen. Die Medienpipeline 234 (z. B. die Medienpipeline 316 in 3 und 4) enthält eine Logik, um das Decodieren, das Codieren, die Vorverarbeitung und/oder die Nachverarbeitung von Multimediadaten einschließlich Bild- und Videodaten zu fördern. Die Medienpipeline 234 implementiert die Medienoperationen über Anfragen an eine Rechen- oder Abtastlogik innerhalb der Unterkerne 221-221F.
  • In einer Ausführungsform ermöglicht es die SoC-Schnittstelle 232 dem Graphikprozessorkern 219, mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoCs, einschließlich der Speicherhierarchieelemente, wie z. B. eines gemeinsam benutzten Cache-Speichers der letzten Ebene, eines System-RAM und/oder eines eingebetteten DRAM auf dem Chip oder innerhalb der Baugruppe, zu kommunizieren. Die SoC-Schnittstelle 232 kann außerdem die Kommunikation mit den Vorrichtungen mit fester Funktion innerhalb des SoC, wie z. B. den Kamerabildgebungspipelines, ermöglichen und ermöglicht die Verwendung globaler Speicheratome und/oder implementiert globale Speicheratome, die zwischen dem Graphikprozessorkern 219 und den CPUs innerhalb des SoC gemeinsam benutzt werden können. Die SoC-Schnittstelle 232 kann außerdem Leistungsmanagementsteuerungen für den Graphikprozessorkern 219 implementieren und eine Schnittstelle zwischen einem Taktbereich des Graphikkerns 219 und anderen Taktbereichen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 den Empfang von Befehlspuffern von einem Befehls-Streamer und einem globalen „Thread“-Abfertiger, die konfiguriert sind, Befehle und Anweisungen jedem von einem oder mehreren Graphikkernen innerhalb eines Graphikprozessors bereitzustellen. Die Befehle und Anweisungen können an die Medienpipeline 234, wenn Medienoperationen ausgeführt werden sollen, oder an eine Geometriepipeline und Pipeline mit fester Funktionen (z. B. die Geometriepipeline und Pipeline mit fester Funktion 231, die Geometriepipeline und Pipeline mit fester Funktion 237), wenn Graphikverarbeitungsoperationen ausgeführt werden sollen, abgefertigt werden.
  • Der Graphikmikrocontroller 233 kann konfiguriert sein, verschiedene Planungs- und Managementaufgaben für den Graphikprozessorkern 219 auszuführen. In einer Ausführungsform kann der Graphikmikrocontroller 233 eine Graphik- und/oder Rechenarbeitsbelastungsplanung in den verschiedenen parallelen Graphikmaschinen innerhalb der Ausführungseinheitsanordnungen (EU-Anordnungen) 222A-222F, 224A-224F innerhalb der Unterkerne 221A-221F ausführen. In diesem Planungsmodell kann eine Host-Software, die in einem CPU-Kern eines SoC einschließlich des Graphikprozessorkerns 219 ausgeführt wird, die Arbeitslasten einer von mehreren Graphikprozessor-Türklingeln vorlegen, die eine Planungsoperation in der geeigneten Graphikmaschine aufruft. Die Planungsoperationen enthalten das Bestimmen, welche Arbeitslast als nächste auszuführen ist, das Vorlegen einer Arbeitslast einem Befehls-Streamer, das Vorwegnehmen vorhandener Arbeitslasten, die in einer Maschine ausgeführt werden, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Graphikmikrocontroller 233 außerdem die Kleinleistungs- oder Leerlaufzustände für den Graphikprozessorkern 219 fördern, wobei dem Graphikprozessorkern 219 die Fähigkeit bereitgestellt wird, die Register innerhalb des Graphikprozessorkerns 219 über Kleinleistungs-Zustandsübergänge unabhängig vom Betriebssystem und/oder der Graphiktreiber-Software in dem System zu sichern und wiederherzustellen.
  • Der Graphikprozessorkern 219 kann mehr oder weniger als die veranschaulichten Unterkerne 221A-221F, bis zu N modulare Unterkerne, aufweisen. Für jeden Satz von N Unterkernen kann der Graphikprozessorkern 219 außerdem sowohl eine gemeinsam benutzte Funktionslogik 235, einen gemeinsam benutzten und/oder Cache-Speicher 236, eine Geometriepipeline/Pipeline mit fester Funktion 237 als auch eine zusätzliche Logik 238 mit fester Funktion enthalten, um verschiedene Graphik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam benutzte Funktionslogik 235 kann die Logikeinheiten enthalten, die der gemeinsam benutzten Funktionslogik 420 nach 4 zugeordnet sind (z. B. eine Abtast-, Mathematik- und/oder Zwischen-„Thread“-Kommunikations-Logik), die durch jeden der N Unterkerne innerhalb des Graphikprozessorkerns 219 gemeinsam benutzt werden können. Der gemeinsam benutzte und/oder Cache-Speicher 236 kann ein Cache der letzten Ebene für den Satz von N Unterkernen 221A-221F innerhalb des Graphikprozessorkerns 219 sein und kann außerdem als gemeinsam genutzter Speicher dienen, der für mehrere Unterkerne zugänglich ist. Die Geometriepipeline/Pipeline mit fester Funktion 237 kann anstelle der Geometriepipeline/Pipeline mit fester Funktion 231 innerhalb des Blocks 230 mit fester Funktion enthalten sein und kann dieselben oder ähnliche Logikeinheiten enthalten.
  • In einer Ausführungsform enthält der Graphikprozessorkern 219 eine zusätzliche Logik 238 mit fester Funktion, die verschiedene Beschleunigungslogiken mit fester Funktion zur Verwendung durch den Graphikprozessorkern 219 enthalten kann. In einer Ausführungsform enthält die zusätzliche Logik 238 mit fester Funktion eine zusätzliche Geometriepipeline zur Verwendung beim Schattieren nur der Position. Beim Schattieren nur der Position sind zwei Geometriepipelines vorhanden, die vollständige Geometriepipeline innerhalb der Geometriepipeline/Pipeline mit fester Funktion 238, 231 und eine Auswahlpipeline, die eine zusätzliche Geometriepipeline ist, die in der zusätzlichen Logik mit fester Funktion 238 enthalten sein kann. In einer Ausführungsform ist die Auswahlpipeline eine gekürzte Version der vollständigen Geometriepipeline. Die vollständige Pipeline und die Auswahlpipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Das Schattieren nur der Position kann lange Auswahlläufe von verworfenen Dreiecken verbergen, was es ermöglicht, dass das Schattieren in einigen Instanzen früher abgeschlossen wird. Die Auswahlpipelinelogik innerhalb der zusätzlichen Logik 238 mit fester Funktion kann z. B. und in einer Ausführungsform die Positionsschattierer parallel zur Hauptanwendung ausführen und erzeugt im Allgemeinen entscheidende Ergebnisse schneller als die volle Pipeline, da die Auswahlpipeline nur das Positionsattribut der Scheitelpunkte holt und schattiert, ohne eine Rasterung und Bildsynthese der Pixel im Framepuffer auszuführen. Die Auswahlpipeline kann die erzeugten entscheidenden Ergebnisse verwenden, um die Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Berücksichtigung dessen, ob diese Dreiecke ausgewählt sind. Die vollständige Pipeline (die in diesem Fall als ein Abspielpipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die ausgewählten Dreiecke zu überspringen und nur die sichtbaren Dreiecke zu schattieren, die schließlich zu der Rasterungsphase weitergeleitet werden.
  • In einer Ausführungsform kann die zusätzliche Logik 238 mit fester Funktion außerdem eine Beschleunigungslogik des maschinellen Lernens, wie z. B. eine Matrixmultiplikationslogik mit fester Funktion, für die Implementierungen enthalten, die die Optimierungen für das Training oder das Folgern des maschinellen Lernens enthalten.
  • Innerhalb jedes Graphikunterkerns 221A-221F ist ein Satz von Ausführungsbetriebsmitteln enthalten, der verwendet werden kann, um in Reaktion auf die Anforderungen von der Graphikpipeline, der Medienpipeline oder den Schattiererprogrammen Graphik-, Medien und Rechenoperationen auszuführen. Die Graphikunterkerne 211A-221F enthalten mehrere EU-Anordnungen 222A-222F, 224A-224F, eine „Thread“-Abfertigungs- und Zwischen-„Thread“-Kommunikationslogik (TD/IC-Logik) 223A-223F, einen 3D- (z. B. Textur-) Abtaster 225A-225F, einen Medienabtaster 206A-206F, einen Schattiererprozessor 227A-227F und einen gemeinsam benutzten lokalen Speicher (SLM) 228A-228F. Jede EU-Anordnung 222A-222F, 224A-224F enthält mehrere Ausführungseinheiten, die Universal-Graphikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Graphik-, Medien- oder Rechenoperation, einschließlich Graphik-, Medien- oder Rechenschattiererprogrammen, ausführen können. Die TD/IC-Logik 223A-223F führt lokale „Thread“-Abfertigungs- und „Thread“-Steueroperationen für die Ausführungseinheiten innerhalb eines Unterkerns aus und fördert die Kommunikation zwischen den „Threads“, die in den Ausführungseinheiten des Unterkerns ausgeführt werden. Der 3D-Abtaster 225A-225F kann Textur- oder andere 3D-graphikbezogene Daten in den Speicher lesen. Der 3D-Abtaster kann die Texturdaten basierend auf einem konfigurierten Abtastzustand und dem einer gegebenen Textur zugeordneten Texturformat unterschiedlich lesen. Der Medienabtaster 206A-206F kann ähnliche Leseoperationen basierend auf dem Typ und dem Format, die den Mediendaten zugeordnet sind, ausführen. In einer Ausführungsform kann jeder Graphikunterkern 221A-221F alternativ einen vereinheitlichten 3D- und Medienabtaster enthalten. Die in den Ausführungseinheiten innerhalb jedes der Unterkerne 221A-221F ausgeführten „Threads“ können von dem gemeinsam benutzten lokalen Speicher 228A-228F innerhalb jedes Unterkerns Gebrauch machen, um es zu ermöglichen, dass die innerhalb einer „Thread“-Gruppe ausgeführten „Threads“ unter Verwendung eines gemeinsamen Pools des Speichers auf dem Chip ausgeführt werden.
  • 2C veranschaulicht eine Graphikverarbeitungseinheit (GPU) 239, die dedizierte Sätze von Graphikverarbeitungsbetriebsmitteln enthält, die in Mehrkerngruppen 240A-240N angeordnet sind. Während die Einzelheiten nur einer einzigen Mehrkerngruppe 240A bereitgestellt sind, wird erkannt, dass die anderen Mehrkerngruppen 240B-240N mit den gleichen oder ähnlichen Sätzen von Graphikverarbeitungsbetriebsmitteln ausgerüstet sein können.
  • Wie veranschaulicht ist, kann eine Mehrkerngruppe 240A einen Satz Graphikkerne 243, einen Satz Tensorkerne 244 und einen Satz Strahlverfolgungskerne 245 enthalten. Ein Planer/Abfertiger 241 plant die Graphik-„Threads“ für die Ausführung in den verschiedenen Kernen 243, 244, 245 und fertigt sie ab. Ein Satz von Registerdateien 242 speichert die Operandenwerte, die durch die Kerne 243, 244, 245 verwendet werden, wenn die Graphik-„Threads“ ausgeführt werden. Diese können z. B. Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkommadatenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten enthalten. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Caches der Ebene 1 (L1) und gemeinsam genutzte Speichereinheiten 247 speichern Graphikdaten, wie z. B. Texturdaten, Scheitelpunktdaten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw., lokal innerhalb jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können außerdem verwendet werden, um Texturierungsoperationen, wie z. B. die Texturabbildung und -abtastung, auszuführen. Ein Ebene-2- (L2-) Cache 253, der durch alle oder eine Teilmenge der Mehrkerngruppen 240A-240N gemeinsam benutzt wird, speichert Graphikdaten und/oder -anweisungen für mehrere gleichzeitige Graphik-„Threads“. Wie veranschaulicht ist, kann der L2-Cache 253 über mehrere Mehrkerngruppen 240A-240N gemeinsam benutzt werden. Ein oder mehrere Speicher-Controller 248 koppeln die GPU 239 an einen Speicher 249, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Graphikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Die Eingabe-/Ausgabe- (E/A-) Schaltungsanordnung 250 koppelt die GPU 239 an eine oder mehrere E/A-Vorrichtungen 252, wie z. B. digitale Signalprozessoren (DSPs), Netz-Controller oder Anwendereingabevorrichtungen. Eine Zusammenschaltung auf dem Chip kann verwendet werden, um die E/A-Vorrichtungen 252 an die GPU 239 und den Speicher 249 zu koppeln. Eine oder mehrere E/A-Speichermanagementeinheiten (IOMMUs) 251 der E/A-Schaltungsanordnung 250 koppeln die E/A-Vorrichtungen 252 direkt an den Systemspeicher 249. In einer Ausführungsform managt die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physikalische Adressen im Systemspeicher 249 abzubilden. In dieser Ausführungsform können die E/A-Vorrichtungen 252, die CPU(s) 246 und die GPU(s) 239 denselben virtuellen Adressenraum gemeinsam benutzen.
  • In einer Implementierung unterstützt die IOMMU 251 die Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen, um virtuelle Gast-/Graphikadressen auf physikalische Gast-/Graphikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physikalischen Gast-/Graphikadressen auf physikalische System-/Host-Adressen (z. B. innerhalb des Systemspeichers 249) abzubilden, managen. Die Basisadressen jedes des ersten und des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert sein und über einen Kontextschalter ausgelagert werden (z. B. so, dass dem neuen Kontext Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt ist). Während dies in 2C nicht veranschaulicht ist, kann jeder der Kerne 243, 244, 245 und/oder der Mehrkerngruppen 240A-240N Übersetzungspuffer (TLBs) enthalten, um Übersetzungen von virtuellem Gast zu physischem Gast, Übersetzungen von physischem Gast zu physischem Host und Übersetzungen von virtuellem Gast zu physischem Host zu cachen.
  • In einer Ausführungsform sind die CPUs 246, die GPUs 239 und die E/A-Vorrichtungen 252 auf einem einzigen Halbleiter-Chip und/oder einer einzigen Chip-Baugruppe integriert. Der veranschaulichte Speicher 249 kann auf demselben Chip integriert sein oder über eine Schnittstelle außerhalb des Chips an die Speicher-Controller 248 gekoppelt sein. In einer Implementierung umfasst der Speicher 249 GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physische Speicher auf Systemebene gemeinsam benutzt, obwohl die der Erfindung zugrundeliegenden Prinzipien nicht auf diese spezifische Implementierung eingeschränkt sind.
  • In einer Ausführungsform enthalten die Tensorkerne 244 mehrere Ausführungseinheiten, die spezifisch entworfen sind, um Matrixoperationen auszuführen, die die grundlegende Rechenoperation sind, die verwendet wird, um Operationen des tiefen Lernens auszuführen. Es können z. B. gleichzeitige Matrixmultiplikationsoperationen für das Training und das Folgern neuronaler Netze verwendet werden. Die Tensorkerne 244 können die Matrixverarbeitung unter Verwendung verschiedener Operandengenauigkeiten, einschließlich Gleitkomma mit einfacher Genauigkeit (z. B. 32 Bits), Gleitkomma mit halber Genauigkeit (z. B. 16 Bits), ganzzahliger Wörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits), ausführen. In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes die Merkmale jeder synthetisierten Szene, wobei die Einzelheiten aus mehreren Frames potentiell kombiniert werden, um ein Endbild in hoher Qualität zu konstruieren.
  • Bei Implementierungen des tiefen Lernens kann eine parallele Matrixmultiplikationsarbeit für die Ausführung in den Tensorkernen 244 geplant werden. Das Training neuronaler Netze erfordert insbesondere eine signifikante Anzahl von Matrixskalarproduktoperationen. Um eine Formulierung des inneren Produkts einer N × N × N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 wenigstens N Skalarproduktverarbeitungselemente enthalten. Bevor die Matrixmultiplikation beginnt, wird eine ganze Matrix in die Kachelregister geladen, wobei wenigstens eine Spalte einer zweiten Matrix in jedem Zyklus für N Zyklen geladen wird. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Die Matrixelemente können abhängig von der speziellen Implementierung mit unterschiedlichen Genauigkeiten gespeichert sein, einschließlich 16-Bit-Worten, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Für die Tensorkerne 244 können Betriebsarten mit verschiedenen Genauigkeiten spezifiziert sein, um sicherzustellen, dass die effizienteste Genauigkeit für unterschiedliche Arbeitslasten verwendet wird (wie z. B. Folgerungsarbeitslasten, die eine Quantisierung auf Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 245 die Strahlverfolgungsoperationen sowohl für die Echtzeitstrahlverfolgungs- als auch für die Nicht-Echtzeitstrahlverfolgungs-Implementierungen. Insbesondere enthalten die Strahlverfolgungskerne 245 eine Strahldurchlauf-/-schnittpunktschaltungsanordnung zum Ausführen eines Strahldurchlaufs unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Grundelementen, die innerhalb der BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne 245 können außerdem eine Schaltungsanordnung zum Ausführen des Tiefentestens und Auswählens (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) enthalten. In einer Implementierung führen die Strahlverfolgungskerne 245 Durchlauf- und Schnittpunktoperationen in Übereinstimmung mit den hier beschriebenen Bildentrauschungstechniken aus, von denen wenigstens ein Teil in den Tensorkernen 244 ausgeführt werden kann. Die Tensorkerne 244 implementieren z. B. in einer Ausführung ein tief lernendes neuronales Netz, um das Entrauschen der durch die Strahlverfolgungskerne 245 erzeugten Frames auszuführen. Die CPU(s) 246, die Graphikkerne 243 und/oder die Strahlverfolgungskerne 245 können jedoch außerdem alles oder einen Teil der Entrauschungsalgorithmen und/oder der Algorithmen des tiefen Lernens implementieren.
  • Zusätzlich kann, wie oben beschrieben worden ist, eine verteilte Herangehensweise zum Entrauschen verwendet werden, bei der sich die GPU 239 in einer Rechenvorrichtung befindet, das über ein Netz oder eine Hochgeschwindigkeitszusammenschaltung an andere Rechenvorrichtungen gekoppelt ist. In dieser Ausführungsform benutzen die untereinander verbundenen Rechenvorrichtungen die Lern-/Trainingsdaten des neuronalen Netzes gemeinsam, um die Geschwindigkeit zu erhöhen, mit der das Gesamtsystem lernt, um das Entrauschen für verschiedene Typen von Bildrahmen und/oder verschiedene Graphikanwendungen auszuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 245 alle BVH-Durchlauf- und Strahl-Grundelement-Schnittpunkte, wodurch die Graphikkerne 243 davor bewahrt werden, mit Tausenden von Anweisungen pro Strahl überlastet zu werden. In einer Ausführungsform enthält jeder Strahlverfolgungskern 245 einen ersten Satz einer spezialisierten Schaltungsanordnung zum Ausführen von Begrenzungskastentests (z. B. für Durchlaufoperationen) und einen zweiten Satz einer spezialisierten Schaltungsanordnung zum Ausführen der Strahl-Dreieck-Schnittpunkttests (z. B. sich schneidende Strahlen, die durchlaufen worden sind). Folglich kann in einer Ausführungsform die Mehrkerngruppe 240A einfach eine Strahlsonde starten, wobei die Strahlverfolgungskerne 245 unabhängig einen Strahldurchlauf und -schnittpunkt ausführen und die Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) an den „Thread“-Kontext zurückschicken. Die anderen Kerne 243, 244 sind frei, um andere Graphik- oder Rechenarbeit auszuführen, während die Strahlverfolgungskerne 245 die Durchlauf- und Schnittpunktoperationen ausführen.
  • In einer Ausführungsform enthält jeder Strahlverfolgungskern 245 eine Durchlaufeinheit, um BVH-Testoperationen auszuführen, und eine Schnittpunkteinheit, die Strahl-Grundelement-Schnittpunkttests ausführt. Die Schnittpunkteinheit erzeugt eine „Treffer“-, „Kein-Treffer“- oder „Mehrfach-Treffer“-Antwort, die sie dem entsprechenden „Thread“ bereitstellt. Während der Durchlauf- und Schnittpunktoperationen werden die Ausführungsbetriebsmittel der anderen Kerne (z. B. der Graphikkerne 243 und der Tensorkerne 244) frei, um andere Formen der Graphikarbeit auszuführen.
  • In einer speziellen Ausführungsform, die im Folgenden beschrieben wird, wird eine hybride Rasterungs-/Strahlverfolgungsherangehensweise verwendet, bei der die Arbeit zwischen den Graphikkernen 243 und den Strahlverfolgungskernen 245 verteilt ist.
  • In einer Ausführungsform enthalten die Strahlverfolgungskerne 245 (und/oder andere Kerne 243, 244) Hardware-Unterstützung für einen Strahlverfolgungs-Anweisungssatz, wie z. B. DirectX Ray Tracing (DXR) von Microsoft, der sowohl einen DispatchRays-Befehl als auch Strahlerzeugungs-, Nächster-Treffer-, Irgendein-Treffer- und Fehltreffer-Schattierer enthält, die die Zuweisung von eindeutigen Sätzen von Schattierern und Texturen für jedes Objekt ermöglichen. Eine weitere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 245, die Graphikkerne 243 und die Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es wird jedoch angegeben, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine spezielle Strahlverfolgungs-ISA eingeschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlverfolgungs-Anweisungssatz unterstützen, der Anweisungen/Funktionen für die Strahlerzeugung, den nächsten Treffer, irgendeinen Treffer, Strahl-Grundelement-Schnittpunkt, Begrenzungskastenkonstruktion pro Grundelement und hierarchische Begrenzungskastenkonstruktion, Fehltreffer, Besuch und Ausnahmen enthält. Spezifischer enthält eine Ausführungsform die Strahlverfolgungsanweisungen, um die folgenden Funktionen auszuführen:
  • Strahlerzeugung - Die Strahlerzeugungsanweisungen können für jedes Pixel, jeden Abtastwert oder eine andere anwenderdefinierte Arbeitszuweisung ausgeführt werden.
  • Nächster Treffer - Eine Nächster-Treffer-Anweisung kann ausgeführt werden, um den nächsten Schnittpunkt eines Strahls mit den Grundelementen innerhalb einer Szene zu lokalisieren.
  • Irgendein Treffer - Eine Irgendein-Treffer-Anweisung identifiziert mehrere Schnittpunkte zwischen einem Strahl und den Grundelementen innerhalb einer Szene, um einen neuen nächsten Schnittpunkt potentiell zu identifizieren.
  • Schnittpunkt - Eine Schnittpunktanweisung führt einen Strahl-Grundelement-Schnittpunkttest aus und gibt ein Ergebnis aus.
  • Begrenzungskastenkonstruktion pro Grundelement - Diese Anweisung baut einen Begrenzungskasten um ein gegebenes Grundelement oder eine gegebene Gruppe von Grundelementen auf (z. B. wenn eine neue BVH oder eine andere Beschleunigungsdatenstruktur errichtet wird).
  • Fehltreffer - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines spezifizierten Bereichs einer Szene verfehlt.
  • Besuch - Gibt an, welche Nachfolgevolumina ein Strahl durchquert.
  • Ausnahmen - Enthält verschiedene Typen von Ausnahmebehandlern (die z. B. für verschiedene Fehlerbedingungen aufgerufen werden).
  • 2D ist ein Blockschaltplan einer Universal-Graphikverarbeitungseinheit (GPGPU) 270, die gemäß den hier beschriebenen Ausführungsformen als ein Graphikprozessor und/oder Rechenbeschleuniger konfiguriert sein kann. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit den Host-Prozessoren (z. B. einer oder mehreren CPU(s) 246) und einem Speicher 271, 272 zusammengeschaltet sein. In einer Ausführungsform ist der Speicher 271 ein Systemspeicher, der mit der einen oder den mehreren CPU(s) 246 gemeinsam genutzt werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der für die GPGPU 270 dediziert ist. In einer Ausführungsform können die Komponenten innerhalb der GPGPU 270 und des Vorrichtungsspeichers 272 in die Speicheradressen abgebildet sein, die für die eine oder die mehreren CPU(s) 246 zugänglich sind. Der Zugriff auf die Speicher 271 und 272 kann über einen Speicher-Controller 268 gefördert werden. In einer Ausführungsform enthält der Speicher-Controller 268 einen internen Speicherdirektzugriffs- (DMA-) Controller 269 oder er kann eine Logik enthalten, um die Operationen auszuführen, die sonst von einem DMA-Controller ausgeführt würden.
  • Die GPGPU 270 enthält mehrere Cache-Speicher, einschließlich eines L2-Caches 253, eines L1-Caches 254, eines Anweisungs-Caches 255 und eines gemeinsam benutzten Speichers 256, von dem wenigstens ein Anteil außerdem als ein Cache-Speicher partitioniert sein kann. Die GPGPU 270 enthält außerdem mehrere Recheneinheiten 260A-260N. Jede Recheneinheit 260A-260N enthält einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264. Die Recheneinheiten 260A-260N können außerdem einen lokalen gemeinsam benutzten Speicher 265 und einen Programmzähler 266 enthalten. Die Recheneinheiten 260A-260N können mit einem Konstanten-Cache 267 gekoppelt werden, der verwendet werden kann, um konstante Daten, die die Daten sind, die sich während der Ausführung eines Kernel- oder Schattierer-Programms, das in der GPGPU 270 ausgeführt wird, nicht ändern, zu speichern. In einer Ausführungsform ist der Konstanten-Cache 267 ein skalarer Daten-Cache, wobei die im Cache gespeicherten Daten direkt in die Skalarregister 262 geholt werden können.
  • Während des Betriebs können die eine oder die mehreren CPU(s) 246 Befehle in die Register oder den Speicher in der GPGPU 270 schreiben, die in einen zugänglichen Adressraum abgebildet worden ist. Die Befehlsprozessoren 257 können die Befehle aus den Registern oder dem Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU 270 verarbeitet werden. Ein „Thread“-Abfertiger 258 kann dann verwendet werden, um die „Threads“ an die Recheneinheiten 260A-260N abzufertigen, um diese Befehle auszuführen. Jede Recheneinheit 260A-260N kann die „Threads“ unabhängig von den anderen Recheneinheiten ausführen. Zusätzlich kann jede Recheneinheit 260A-260N unabhängig für eine bedingte Berechnung konfiguriert werden, wobei sie die Ergebnisse der Berechnung bedingt in den Speicher ausgeben kann. Die Befehlsprozessoren 257 können die eine oder die mehreren CPU(s) 246 unterbrechen, wenn die vorgelegten Befehle abgeschlossen sind.
  • 3A-3C veranschaulichen Blockschaltpläne von zusätzlichen Graphikprozessor- und Rechenbeschleunigerarchitekturen, die durch die hier beschriebenen Ausführungsformen bereitgestellt sind. Die Elemente der 3A-3C, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können in irgendeiner Weise arbeiten oder funktionieren, die zu der ähnlich ist, die hier anderswo beschrieben ist, sind aber nicht auf eine solche eingeschränkt.
  • 3A ist ein Blockschaltplan eines Graphikprozessors 300, der eine diskrete Graphikverarbeitungseinheit sein kann oder ein Graphikprozessor sein kann, der mit mehreren Verarbeitungskernen oder anderen Halbleitervorrichtungen, wie z. B., aber nicht eingeschränkt auf Speichervorrichtungen oder Netzschnittstellen, integriert ist. In einigen Ausführungsformen kommuniziert der Graphikprozessor über eine speicherabgebildete E/A-Schnittstelle zu den Registern in dem Graphikprozessor und mit den im Prozessorspeicher angeordneten Befehlen. In einigen Ausführungsformen enthält der Graphikprozessor 300 eine Speicherschnittstelle 314, um auf den Speicher zuzugreifen. Die Speicherschnittstelle 314 kann eine Schnittstelle zu dem lokalen Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam benutzten externen Caches und/oder dem Systemspeicher sein.
  • In einigen Ausführungsformen enthält der Graphikprozessor 300 außerdem einen Anzeige-Controller 302, um die Anzeigeausgangsdaten zu einer Anzeigevorrichtung 318 zu steuern. Der Anzeige-Controller 302 enthält die Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und die Zusammensetzung mehrerer Schichten der Video- oder Anwenderschnittstellenelemente. Die Anzeigevorrichtung 318 kann eine interne oder eine externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine Datenhelmvorrichtung, wie z. B. eine Anzeigevorrichtung der virtuellen Realität (VR) oder eine Anzeigevorrichtung der erweiterten Realität (AR). In einigen Ausführungsformen enthält der Graphikprozessor 300 eine Video-„Codec“-Maschine 306, um Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten, einschließlich sowohl der Formate der Bewegtbild-Expertengruppe (MPEG), wie z. B. MPEG-2, der Formate der fortgeschrittenen Videocodierung (AVC), wie z. B. H.264/MPEG-4-AVC, H.265/HEVC, der Allianz für offene Medien (AOMedia) VP8, VP9 als auch der Formate der Gesellschaft der Bewegtbild- u. Fernsehingenieure (SMPTE) 421M/VC- 1 und der gemeinsamen Photographieexpertengruppe (JPEG), wie z. B. der JPEG- und Bewegungs-JPEG- (MJPEG-) Formate, zu codieren, zu decodieren oder zu transcodieren.
  • In einigen Ausführungsformen enthält der Graphikprozessor 300 eine Blockbildübertragungs- (BLIT-) Maschine 304, um zweidimensionale (2D) Rasterisiereroperationen, einschließlich z. B. Bitgrenzen-Blockübertragungen, auszuführen. In einer Ausführungsform werden die 2D-Graphikoperationen jedoch unter Verwendung einer oder mehrerer Komponenten der Graphikverarbeitungsmaschine (GPE) 310 ausgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechenmaschine zum Ausführen von Graphikoperationen, einschließlich dreidimensionaler (3D-) Graphikoperationen und Medienoperationen.
  • In einigen Ausführungsformen enthält die GPE 310 eine 3D-Pipeline 312 zum Ausführen von 3D-Operationen, wie z. B. die Bildsynthese dreidimensionaler Bilder und Szenen unter Verwendung der Verarbeitungsfunktionen, die auf 3D-Grundelementformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 312 enthält programmierbare Funktionselemente und Elemente mit fester Funktion, die verschiedene Aufgaben innerhalb der Element- und/oder Erzeugungsausführungs-„Threads“ zu einem 3D-/Medienteilsystem 315 ausführen. Während die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen auszuführen, enthält eine Ausführungsform der GPE 310 außerdem eine Medienpipeline 316, die spezifisch verwendet wird, um Medienoperationen, wie z. B. die Videonachbearbeitung und die Bildverbesserung, auszuführen.
  • In einigen Ausführungsformen enthält die Medienpipeline 316 Logikeinheiten mit fester Funktion oder programmierbare Logikeinheiten, um eine oder mehrere spezialisierte Medienoperationen, wie z. B. die Videodecodierungsbeschleunigung, die Videoentschachtelung und die Videocodierungsbeschleunigung, anstelle der oder im Auftrag der Video-„Codec“-Maschine 306 auszuführen. In einigen Ausführungsformen enthält die Medienpipeline 316 zusätzlich eine „Thread“-Erzeugungseinheit, um die „Threads“ für die Ausführung in dem 3D-/Medienteilsystem 315 zu erzeugen. Die erzeugten „Threads“ führen Berechnungen für die Medienoperationen in einer oder mehreren Graphikausführungseinheiten aus, die in dem 3D-/Medienteilsystem 315 enthalten sind.
  • In einigen Ausführungsformen enthält das 3D-/Medienteilsystem 315 eine Logik zum Ausführen der durch die 3D-Pipeline 312 und die Medienpipeline 316 erzeugten „Threads“. In einer Ausführungsform senden die Pipelines die „Thread“-Ausführungsanforderungen an das 3D-/Medienteilsystem 315, das die „Thread“-Abfertigungslogik zum Arbitrieren und Abfertigen der verschiedenen Anforderungen zu den verfügbaren „Thread“-Ausführungsbetriebsmitteln enthält. Die Ausführungsbetriebsmittel enthalten eine Anordnung von Graphikausführungseinheiten, um die 3D- und Medien-„Threads“ zu verarbeiten. In einigen Ausführungsformen enthält das 3D-/Medienteilsystem 315 einen oder mehrere interne Caches für die „Thread“-Anweisungen und -Daten. In einigen Ausführungsformen enthält das Teilsystem außerdem einen gemeinsam benutzten Speicher, der Register und einen adressierbaren Speicher enthält, um die Daten zwischen den „Threads“ gemeinsam zu benutzen und die Ausgangsdaten zu speichern.
  • 3B veranschaulicht einen Graphikprozessor 320 mit einer gekachelten Architektur gemäß den hier beschriebenen Ausführungsformen. In einer Ausführungsform enthält der Graphikprozessor 320 einen Graphikverarbeitungsmaschinen-Cluster 322 mit mehreren Instanzen der Graphikverarbeitungsmaschine 310 nach 3A innerhalb einer Graphikmaschinenkachel 310A-310D. Jede Graphikmaschinenkachel 310A-310D kann über einen Satz von Kachelzusammenschaltungen 323A-323F zusammengeschaltet sein. Jede Graphikmaschinenkachel 310A-310D kann außerdem über die Speicherzusammenschaltungen 325A-325D mit einem Speichermodul oder einer Speichervorrichtung 326A-326D verbunden sein. Die Speichervorrichtungen 326A-326D können irgendeine Graphikspeichertechnik verwenden. Die Speichervorrichtungen 326A-326D können z. B. Graphikspeicher mit doppelter Datenrate (GDDR-Speicher) sein. Die Speichervorrichtungen 326A-326D sind in einer Ausführungsform Speichermodule mit hoher Bandbreite (HBM-Module), die sich mit ihrer jeweiligen Graphikmaschinenkachel 310A-310D auf dem Die befinden können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die oben auf ihre jeweilige Graphikmaschinenkachel 310A-310D gestapelt sein können. In einer Ausführungsform befinden sich jede Graphikmaschinenkachel 310A-310D und der zugeordnete Speicher 326A-326D auf separaten Multi-Chip-Modulen, die mit einem Basis-Die oder einem Basissubstrat verbunden sind, wie in den 11B-11D ausführlich beschrieben ist.
  • Der Graphikverarbeitungsmaschinen-Cluster 322 kann mit einer Strukturzusammenschaltung 324 auf dem Chip oder in der Baugruppe verbunden sein. Die Strukturzusammenschaltung 324 kann die Kommunikation zwischen den Graphikmaschinenkacheln 310A-310D und den Komponenten, wie z. B. dem Video-„Codec“ 306 und einer oder mehreren Kopiermaschinen 304, ermöglichen. Die Kopiermaschinen 304 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen 326A-326D und dem Speicher, der sich außerhalb des Graphikprozessors 320 befindet, (z. B. dem Systemspeicher) zu bewegen. Die Strukturzusammenschaltung 324 kann außerdem verwendet werden, um die Graphikmaschinenkacheln 310A-310D zusammenzuschalten. Der Graphikprozessor 320 kann optional einen Anzeige-Controller 302 enthalten, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Graphikprozessor kann außerdem als ein Graphik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können der Anzeige-Controller 302 und die Anzeigevorrichtung 318 weggelassen werden.
  • Der Graphikprozessor 320 kann über eine Host-Schnittstelle 328 mit einem Host-System verbunden sein. Die Host-Schnittstelle 328 kann die Kommunikation zwischen dem Graphikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann z. B. ein PCI-Express-Bus oder ein weiterer Typ von Host-Systemschnittstelle sein.
  • 3C zeigt einen Rechenbeschleuniger 330 gemäß den hier beschriebenen Ausführungsformen. Der Rechenbeschleuniger 330 kann Architekturähnlichkeiten mit dem Graphikprozessor 320 nach 3B aufweisen und ist für die Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster 332 kann einen Satz von Rechenmaschinenkacheln 340A-340D enthalten, die eine Ausführungslogik enthalten, die für parallele oder vektorbasierte Universalrechenoperationen optimiert ist. In einigen Ausführungsformen enthalten die Rechenmaschinenkacheln 340A-340D keine Graphikverarbeitungslogik mit fester Funktion, obwohl in einer Ausführungsform eine oder mehrere der Rechenmaschinenkacheln 340A-340D eine Logik enthalten können, um eine Medienbeschleunigung auszuführen. Die Rechenmaschinenkacheln 340A-340D können über die Speicherzusammenschaltungen 325A-325D mit dem Speicher 326A-326D verbunden sein. Der Speicher 326A-326D und die Speicherzusammenschaltungen 325A-325D können eine ähnliche Technik wie im Graphikprozessor 320 sein oder können sich unterscheiden. Die Graphikrechenmaschinenkacheln 340A-340D können außerdem über einen Satz von Kachelzusammenschaltungen 323A-323F zusammengeschaltet sein und können mit einer Strukturzusammenschaltung 324 verbunden sein und/oder durch eine Strukturzusammenschaltung 324 zusammengeschaltet sein. In einer Ausführungsform enthält der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als ein vorrichtungsweiter Cache konfiguriert sein kann. Der Rechenbeschleuniger 330 kann außerdem über eine Host-Schnittstelle 328 in einer ähnlichen Weise wie der Graphikprozessor 320 nach 3B mit einem Host-Prozessor und einem Speicher verbunden sein.
  • Graphikverarbeitungsmaschine
  • 4 ist ein Blockschaltplan einer Graphikverarbeitungsmaschine 410 eines Graphikprozessors in Übereinstimmung mit einigen Ausführungsformen. In einer Ausführungsform ist die Graphikverarbeitungsmaschine (GPE) 410 eine Version der in 3A gezeigten GPE 310, wobei sie außerdem eine Graphikmaschinenkachel 310A-310D nach 3B repräsentieren kann. Die Elemente nach 4, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können in irgendeiner Weise arbeiten oder funktionieren, die zu der, die hier anderswo beschrieben ist, ähnlich ist, sind aber nicht auf eine solche eingeschränkt. Es sind z. B. die 3D-Pipeline 312 und die Medienpipeline 316 nach 3A veranschaulicht. Die Medienpipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und kann nicht explizit innerhalb der GPE 410 enthalten sein. Beispielhaft und in wenigstens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor an die GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403 gekoppelt oder enthält die GPE 410 einen Befehls-Streamer 403, der einen Befehlsstrom für die 3D-Pipeline 312 und/oder die Medienpipelines 316 bereitstellt. In einigen Ausführungsformen ist der Befehls-Streamer 403 an den Speicher, der der Systemspeicher sein kann, oder einen oder mehrere des internen Cache-Speichers und des gemeinsam benutzten Cache-Speichers gekoppelt. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 die Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medienpipeline 316. Die Befehle sind die von einem Ringpuffer, der die Befehle für die 3D-Pipeline 312 und die Medienpipeline 316 speichert, geholten Direktiven. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer enthalten, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können außerdem Verweise auf die im Speicher gespeicherten Daten enthalten, wie z. B., aber nicht eingeschränkt auf die Scheitelpunkt- und Geometriedaten für die 3D-Pipeline 312 und/oder die Bilddaten und die Speicherobjekte für die Medienpipeline 316. Die 3D-Pipeline 312 und die Medienpipeline 316 verarbeiten die Befehle und die Daten durch das Ausführen von Operationen über die Logik innerhalb der jeweiligen Pipelines oder durch das Abfertigen eines oder mehrerer Ausführungs-„Threads“ zu einer Graphikkernanordnung 414. In einer Ausführungsform enthält die Graphikkernanordnung 414 einen oder mehrere Blöcke von Graphikkernen (z. B. einen Graphikkern(e) 415A, einen Graphikkern(e) 415B), wobei jeder Block einen oder mehrere Graphikkerne enthält. Jeder Graphikkern enthält einen Satz von Graphikausführungsbetriebsmitteln, die sowohl eine Universalausführungslogik und eine graphikspezifische Ausführungslogik, um Graphik- und Rechenoperationen auszuführen, als auch eine Texturverarbeitungslogik mit fester Funktion und/oder eine Beschleunigungslogik des maschinellen Lernens und der künstlichen Intelligenz enthalten.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 eine Logik mit fester Funktion und eine programmierbare Logik enthalten, um ein oder mehrere Schattiererprogramme, wie z. B. Scheitelpunktschattierer-, Geometrieschattierer-, Pixelschattierer-, Fragmentschattierer-, Rechenschattierer- oder andere Schattiererprogramme, durch das Verarbeiten der Anweisungen und das Abfertigen der Ausführungs-„Threads“ zu der Graphikkernanordnung 414 zu verarbeiten. Die Graphikkernanordnung 414 stellt einen vereinheitlichen Block der Ausführungsbetriebsmittel zur Verwendung beim Verarbeiten dieser Schattiererprogramme bereit. Eine Mehrzweckausführungslogik (z. B. die Ausführungseinheiten) innerhalb des Graphikkerns (der Graphikkerne) 415A-414B der Graphikkernanordnung 414 enthält eine Unterstützung für verschiedene 3D-API-Schattierersprachen und kann mehrere gleichzeitige Ausführungs-„Threads“, die mehreren Schattierern zugeordnet sind, ausführen.
  • In einigen Ausführungsformen enthält die Graphikkernanordnung 414 eine Ausführungslogik, um Medienfunktionen, wie z. B. eine Video- und/oder Bildverarbeitung, auszuführen. In einer Ausführungsform enthalten die Ausführungseinheiten eine Universallogik, die programmierbar ist, um zusätzlich zu den Graphikverarbeitungsoperationen parallele Universalrechenoperationen auszuführen. Die Universallogik kann die Verarbeitungsoperationen parallel oder in Verbindung mit der Universallogik innerhalb des Prozessorkerns (der Prozessorkerne) 107 nach 1 oder der Kerne 202A-202N wie in 2A ausführen.
  • Die durch die in der Graphikkernanordnung 414 ausgeführten „Threads“ erzeugten Ausgangsdaten können die Daten zum Speicher in einem vereinheitlichten Rücksprungpuffer (URB) 418 ausgeben. Der URB 418 kann die Daten für mehrere „Threads“ speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen verschiedenen „Threads“ zu senden, die in der Graphikkernanordnung 414 ausgeführt werden. In einigen Ausführungsformen kann der URB 418 zusätzlich für die Synchronisation zwischen den „Threads“ in der Graphikkernanordnung und der Logik mit fester Funktion innerhalb der gemeinsam benutzten Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist die Graphikkernanordnung 414 skalierbar, so dass die Anordnung eine variable Anzahl von Graphikkernen enthält, wobei jeder basierend auf dem Zielleistungs- und -leistungsfähigskeitsniveau der GPE 410 eine variable Anzahl von Ausführungseinheiten aufweist. In einer Ausführungsform sind die Ausführungsbetriebsmittel dynamisch skalierbar, so dass die Ausführungsbetriebsmittel nach Bedarf freigegeben oder deaktiviert werden können.
  • Die Graphikkernanordnung 414 ist an eine gemeinsam benutzte Funktionslogik 420 gekoppelt, die mehrere Betriebsmittel enthält, die zwischen den Graphikkernen in der Graphikkernanordnung gemeinsam benutzt werden. Die gemeinsam benutzten Funktionen innerhalb der gemeinsam benutzten Funktionslogik 420 sind Hardware-Logikeinheiten, die eine spezialisierte ergänzende Funktionalität zu der Graphikkernanordnung 414 bereitstellen. In verschiedenen Ausführungsformen enthält die gemeinsam benutzte Funktionslogik 420 einen Abtaster 421, eine Mathematik 422 und eine Zwischen-„Thread“-Kommunikations- (ITC-) Logik 423, ist aber nicht auf diese eingeschränkt. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 innerhalb der gemeinsam benutzten Funktionslogik 420.
  • Eine gemeinsam benutzte Funktion ist in wenigstens einem Fall implementiert, in dem der Bedarf an einer gegebenen spezialisierten Funktion für die Einbeziehung in die Graphikkernanordnung 414 unzureichend ist. Stattdessen wird eine einzige Instanziierung dieser spezialisierten Funktion als eine selbstständige Entität in der gemeinsam benutzten Funktionslogik 420 implementiert und zwischen den Ausführungsbetriebsmitteln innerhalb der Graphikkernanordnung 414 gemeinsam benutzt. Der genaue Satz von Funktionen, die zwischen der Graphikkernanordnung 414 gemeinsam benutzt werden und innerhalb der Graphikkernanordnung 414 enthalten sind, variiert über die Ausführungsformen. In einigen Ausführungsformen können spezifische gemeinsam benutzte Funktionen innerhalb der gemeinsam benutzten Funktionslogik 420, die extensiv durch die Graphikkernanordnung 414 verwendet werden, innerhalb der gemeinsam benutzten Funktionslogik 416 innerhalb der Graphikkernanordnung 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam benutzte Funktionslogik 416 innerhalb der Graphikkernanordnung 414 etwas oder alles der Logik innerhalb der gemeinsam benutzten Funktionslogik 420 enthalten. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsam benutzten Funktionslogik 420 innerhalb der gemeinsam benutzten Funktionslogik 416 der Graphikkernanordnung 414 verdoppelt sein. In einer Ausführungsform ist die gemeinsam benutzte Funktionslogik 420 zugunsten der gemeinsam benutzten Funktionslogik 416 innerhalb der Graphikkernanordnung 414 ausgeschlossen.
  • Ausführungseinheiten
  • Die 5A-5B veranschaulichen eine „Thread“-Ausführungslogik 500, die eine Anordnung von Verarbeitungselementen enthält, die in einem Graphikprozessorkern gemäß den hier beschriebenen Ausführungsformen verwendet werden. Die Elemente nach den 5A-5B, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können in irgendeiner Weise arbeiten oder funktionieren, die zu der, die hier anderswo beschrieben ist, ähnlich ist, sind aber nicht auf eine solche eingeschränkt. Die 5A-5B veranschaulichen einen Überblick über die „Thread“-Ausführungslogik 500, die ein Repräsentant der Hardware-Logik sein kann, die mit jedem Unterkern 221A-221F nach 2B veranschaulicht ist. 5A ist ein Repräsentant einer Ausführungseinheit innerhalb eines Universal-Graphikprozessors, während 5B ein Repräsentant einer Ausführungseinheit ist, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie in 5A veranschaulicht ist, enthält in einigen Ausführungsformen die „Thread“-Ausführungslogik 500 einen Schattiererprozessor 502, einen „Thread“-Abfertiger 504, einen Anweisungs-Cache 506, eine skalierbare Ausführungseinheitsanordnung, die mehrere Ausführungseinheiten 508A-508N enthält, einen Abtaster 510, einen gemeinsam benutzten Speicher 511, einen Daten-Cache 512 und einen Datenanschluss 514. In einer Ausführungsform kann die skalierbare Ausführungseinheitsanordnung durch das Freigeben oder Sperren einer oder mehrerer Ausführungseinheiten (z. B. irgendeiner der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N - 1 und 508N) basierend auf den Rechenanforderungen einer Arbeitslast dynamisch skaliert werden. In einer Ausführungsform sind die enthaltenen Komponenten über eine Zusammenschaltungsstruktur zusammengeschaltet, die mit jeder der Komponenten verbindet. In einigen Ausführungsformen enthält die „Thread“-Ausführungslogik 500 eine oder mehrere Verbindungen durch einen oder mehrere des Anweisungs-Caches 506, des Datenanschlusses 514, des Abtasters 510 und der Ausführungseinheiten 508A-508N zu dem Speicher, wie z. B. dem Systemspeicher oder dem Cache-Speicher. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Universalrecheneinheit, die mehrere gleichzeitige Hardware-„Threads“ ausführen kann, während für jeden „Thread“ mehrere Datenelemente parallel verarbeitet werden. In verschiedenen Ausführungsformen ist die Anordnung der Ausführungseinheiten 508A-508N skalierbar, um irgendeine Anzahl einzelner Ausführungseinheiten zu enthalten.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N hauptsächlich verwendet, um die Schattiererprogramme auszuführen. Ein Schattiererprozessor 502 kann die verschiedenen Schattiererprogramme verarbeiten und die den Schattiererprogrammen zugeordneten Ausführungs-„Threads“ über einen „Thread“-Abfertiger 504 abfertigen. In einer Ausführungsform enthält der „Thread“-Abfertiger eine Logik, um die „Thread“-Einleitungsanforderungen von den Graphik- und Medienpipelines zu arbitrieren und die angeforderten „Threads“ in einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N zu instanziieren. Eine Geometriepipeline kann z. B. Scheitelpunkts-, Mosaikauslegungs- und Geometrieschattierer zu der „Thread“-Ausführungslogik zum Verarbeiten abfertigen. In einigen Ausführungsformen kann der „Thread“-Abfertiger 504 außerdem Laufzeit-„Thread“-Erzeugungsanforderungen von den ausgeführten Schattiererprogrammen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der eine native Unterstützung für viele Standard-3D-Graphikschattiereranweisungen enthält, so dass die Schattiererprogramme aus den Graphikbibliotheken (z. B. Direkt 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Scheitelpunkt- und Geometrieverarbeitung (z. B. Scheitelpunktprogramme, Geometrieprogramme, Scheitelpunktschattierer), eine Pixelverarbeitung (z. B. Pixelschattierer, Fragmentschattierer) und eine Universalverarbeitung (z. B. Rechen- und Medienschattierer). Jede der Ausführungseinheiten 508A-508N ist zur Mehrfachausgabe-Einzelbefehl-Mehrfachdaten-Ausführung (Mehrfachausgabe-SIMD-Ausführung) imstande, wobei der Multi-„Threading“-Betrieb eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenzzeit ermöglicht. Jeder Hardware-„Thread“ innerhalb jeder Ausführungseinheit weist eine dedizierte Registerdatei mit hoher Bandbreite und einen zugeordneten unabhängigen „Thread“-Zustand auf. Die Ausführung ist eine Mehrfachausgabe pro Takt zu den Pipelines, die zu Ganzzahloperationen, Gleitkommaoperationen in einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen vermischten Operationen imstande sind. Während des Wartens auf die Daten vom Speicher oder von einer der gemeinsam benutzten Funktionen verursacht eine Abhängigkeitslogik innerhalb der Ausführungseinheiten 508A-508N, dass ein Warte-„Thread“ schläft, bis die angeforderten Daten zurückgeschickt worden sind. Während der Warte-„Thread“ schläft, können die Hardware-Betriebsmittel der Verarbeitung anderer „Threads“ gewidmet werden. Während einer Verzögerung, die einer Scheitelpunktschattiereroperation zugeordnet ist, kann eine Ausführungseinheit z. B. die Operationen für einen Pixelschattierer, einen Fragmentschattierer oder einen weiteren Typ eines Schattiererprogrammes einschließlich eines anderen Scheitelpunktschattierers ausführen. Verschiedene Ausführungsformen können anwenden, die Ausführung unter Verwendung des Einzelanweisung-Mehrfach-„Thread“ (SIMT) als eine Alternative zur Verwendung der SIMD oder zusätzlich zur Verwendung der SIMD zu verwenden. Die Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann außerdem für den SIMT gelten oder für die SIMD in Kombination mit dem SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N wirkt auf Anordnungen von Datenelementen. Die Anzahl der Datenelemente ist die „Ausführungsgröße“ oder die Anzahl der Kanäle für die Anweisung. Ein Ausführungskanal ist eine logische Ausführungseinheit für den Datenelementzugriff, die Maskierung und die Ablaufsteuerung innerhalb der Anweisungen. Die Anzahl der Kanäle kann von der Anzahl der physikalischen Arithmetiklogikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen speziellen Graphikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkommadatentypen.
  • Der Ausführungseinheit-Anweisungssatz enthält SIMD-Anweisungen. Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert sein, wobei die Ausführungseinheit die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeitet. Wenn z. B. auf einen 256-bitbreiten Vektor gewirkt wird, werden die 256 Bits des Vektors in einem Register gespeichert, wobei die Ausführungseinheit auf den Vektor als vier separate gepackte 54-Bit-Datenelemente (Datenelemente in Quadwort- (QW-) Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente in Doppelwort- (DW-) Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente in Wort- (W-) Größe) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente in Byte-(B-) Größe) wirkt. Es sind jedoch andere Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten in eine vereinigte Ausführungseinheit 509A-509N kombiniert sein, die eine „Thread“-Steuerlogik (507A-507N) aufweist, die den vereinigten EUs gemeinsam ist. Es können mehrere EUs in eine EU-Gruppe vereinigt sein. Jede EU in der vereinigten EU-Gruppe kann konfiguriert sein, einen separaten SIMD-Hardware-„Thread“ auszuführen. Die Anzahl der EUs in der vereinigten EU-Gruppe kann gemäß den Ausführungsformen variieren. Zusätzlich können verschiedene SIMD-Breiten pro EU ausgeführt werden, einschließlich, aber nicht eingeschränkt auf SIMD8, SIMD16 und SIMD32. Jede vereinigte Graphikausführungseinheit 509A-509N enthält wenigstens zwei Ausführungseinheiten. Die vereinigte Ausführungseinheit 509A enthält z. B. eine erste EU 508A, eine zweite EU 508B und eine „Thread“-Steuerlogik 507A, die der ersten EU 508A und der zweiten EU 508B gemeinsam ist. Die „Thread“-Steuerlogik 507A steuert die in der vereinigten Graphikausführungseinheit 509A ausgeführten „Threads“, was es jeder EU innerhalb der vereinigten Ausführungseinheiten 509A-509N ermöglicht, unter Verwendung eines gemeinsamen Anweisungszeigerregisters auszuführen.
  • In der „Thread“-Ausführungslogik 500 sind ein oder mehrere interne Anweisungs-Caches (z. B. 506) enthalten, um die „Thread“-Anweisungen für die Ausführungseinheiten zu cachen. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (z. B. 512) enthalten, um die „Thread“-Daten während der „Thread“-Ausführung zu cachen. Die „Threads“, die in der Ausführungslogik 500 ausgeführt werden, können außerdem explizit gemanagte Daten im gemeinsam genutzten lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Abtaster 510 enthalten, um eine Texturabtastung für die 3D-Operationen und eine Medienabtastung für die Medienoperationen bereitzustellen. In einigen Ausführungsformen enthält der Abtaster 510 eine spezialisierte Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastprozesses vor dem Bereitstellen der abgetasteten Daten für eine Ausführungseinheit zu verarbeiten.
  • Während der Ausführung senden die Graphik- und Medienpipelines „Thread“-Einleitungsanforderungen über die „Thread“-Erzeugungs- und -abfertigungslogik an die „Thread“-Ausführungslogik 500. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastert worden ist, wird die Pixelprozessorlogik (z. B. eine Pixelschattiererlogik, eine Fragmentschattiererlogik usw.) innerhalb des Schattiererprozessors 502 aufgerufen, um ferner Ausgangsinformationen zu berechnen und zu verursachen, dass die Ergebnisse in die Ausgangsoberflächen (z. B. die Farbpuffer, die Tiefenpuffer, die Schablonenpuffer usw.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixelschattierer oder ein Fragmentschattierer die Werte der verschiedenen Scheitelpunktattribute, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt dann die Pixelprozessorlogik innerhalb des Schattiererprozessors 502 ein von einer Anwendungsprogrammierschnittstelle (API) geliefertes Pixel- oder Fragmentschattiererprogramm aus. Um das Schattiererprogramm auszuführen, fertigt der Schattiererprozessor 502 die „Threads“ über den „Thread“-Abfertiger 504 zu einer Ausführungseinheit (z. B. 508A) ab. In einigen Ausführungsformen verwendet der Schattiererprozessor 502 die Texturabtastlogik in dem Abtaster 510, um auf die Texturdaten in den im Speicher gespeicherten Texturabbildungen zuzugreifen. Die Arithmetikoperationen an den Texturdaten und den eingegebenen Geometriedaten berechnen die Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel bei dem weiteren Verarbeiten.
  • In einigen Ausführungsformen stellt der Datenanschluss 514 einen Speicherzugriffsmechanismus für die „Thread“-Ausführungslogik 500 bereit, um die verarbeiteten Daten zur weiteren Verarbeitung in einer Graphikprozessor-Ausgangspipeline zu dem Speicher auszugeben. In einigen Ausführungsformen enthält der Datenanschluss 514 einen oder mehrere Cache-Speicher (z. B. den Daten-Cache 512) oder ist der Datenanschluss 514 an einen oder mehrere Cache-Speicher (z. B. den Daten-Cache 512) gekoppelt, um die Daten für den Speicherzugriff über den Datenanschluss zu cachen.
  • In einer Ausführungsform kann die Ausführungslogik 500 außerdem einen Strahlverfolger 505 enthalten, der eine Strahlverfolgungs-Beschleunigungsfunktionalität bieten kann. Der Strahlverfolger 505 kann einen Strahlverfolgungs-Anweisungssatz unterstützen, der Anweisungen/Funktionen für die Strahlerzeugung enthält. Der Strahlverfolgungs-Anweisungssatz kann zu dem Strahlverfolgungs-Anweisungssatz, der durch die Strahlverfolgungskerne 245 in 2C unterstützt wird, ähnlich sein oder sich von ihm unterscheiden.
  • 5B veranschaulicht beispielhafte interne Einzelheiten einer Ausführungseinheit 508 gemäß den Ausführungsformen. Eine Graphikausführungseinheit 508 kann eine Anweisungsholeinheit 537, eine allgemeine Registerdateianordnung (GRF) 524, eine Architekturregisterdateianordnung (ARF) 526, einen „Thread“-„Arbiter“ 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkommaeinheiten (SIMD-FPUs) 534 und in einer Ausführungsform einen Satz von dedizierten Ganzzahl-SIMD-ALUs 535 enthalten. Die GRF 524 und die ARF 526 enthalten den Satz von allgemeinen Registerdateien und Architekturregisterdateien, die jedem gleichzeitigen Hardware-„Thread“ zugeordnet sind, der in der Graphikausführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird ein Architekturzustand pro „Thread“ in der ARF 526 aufrechterhalten, während die während der „Thread“-Ausführung verwendeten Daten in der GRF 524 gespeichert sind. Der Ausführungszustand jedes „Threads“ einschließlich der Anweisungszeiger für jeden „Thread“ können in threadspezifischen Registern in der ARF 526 gehalten sein.
  • In einer Ausführungsform weist die Graphikausführungseinheit 508 eine Architektur auf, die eine Kombination aus dem gleichzeitigen Multi-„Threading“ (SMT) und dem feinkörnigen verschachtelten Multi-„Threading“ (IMT) ist. Die Architektur weist eine modulare Konfiguration auf, die zur Entwurfszeit basierend auf einer Zielanzahl gleichzeitiger „Threads“ und der Anzahl der Register pro Ausführungseinheit feinabgestimmt werden kann, wobei die Ausführungseinheitsbetriebsmittel über die Logik aufgeteilt sind, die verwendet wird, um mehrere gleichzeitige „Threads“ auszuführen. Die Anzahl der logischen „Threads“, die durch die Graphikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Anzahl der Hardware-„Threads“ eingeschränkt, wobei jedem Hardware-„Thread“ mehrere logische „Threads“ zugewiesen sein können.
  • In einer Ausführungsform kann die Graphikausführungseinheit 508 mehrere Anweisungen, die jeweils unterschiedliche Anweisungen sein können, gemeinsam ausgeben. Der „Thread“-„Arbiter“ 522 des Graphikausführungseinheits-„Threads“ 508 kann die Anweisungen zu einer der Sendeeinheit 530, der Verzweigungseinheit 532 oder der SIMD-FPU(s) 534 zur Ausführung abfertigen. Jeder Ausführungs-„Thread“ kann auf die 128 Universalregister innerhalb der GRF 524 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als ein SIMD-8-Element-Vektor der 32-Bit-Datenelemente zugänglich sind. In einer Ausführungsform weist jeder Ausführungseinheits-„Thread“ Zugriff auf 4 KBytes innerhalb der GRF 524 auf, obwohl die Ausführungsformen nicht so eingeschränkt sind, wobei in anderen Ausführungsformen größere oder weniger Registerbetriebsmittel bereitgestellt sein können. In einer Ausführungsform ist die Graphikausführungseinheit 508 in sieben Hardware-„Threads“ unterteilt, die Rechenoperationen unabhängig ausführen können, obwohl die Anzahl der „Threads“ pro Ausführungseinheit außerdem gemäß den Ausführungsform variieren kann. In einer Ausführungseinheit werden z. B. bis zu 16 Hardware-„Threads“ unterstützt. In einer Ausführungsform, in der sieben „Threads“ auf 4 KBytes zugreifen können, kann die GRF 524 insgesamt 28 KByte speichern. Wo 16 „Threads“ auf 4 KBytes zugreifen können, kann die GRF 524 insgesamt 64 KBytes speichern. Flexible Adressierungsbetriebsarten können es ermöglichen, dass die Register gemeinsam adressiert werden, um effektiv breitere Register aufzubauen oder um durchschrittene rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden die Speicheroperationen, die Abtasteroperationen und andere Systemkommunikationen mit längerer Latenzzeit über die „Sende“-Anweisungen abgefertigt, die durch die Nachrichtenweiterleitungs-Sendeeinheit 530 ausgeführt werden. In einer Ausführungsform werden die Verzweigungsanweisungen zu einer dedizierten Verzweigungseinheit 532 abgefertigt, um die SIMD-Divergenz und schließlich die Konvergenz zu fördern.
  • In einer Ausführungsform enthält die Graphikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 534, um Gleitkommaoperationen auszuführen. In einer Ausführungsform unterstützen die FPU(s) 534 außerdem eine Ganzzahlberechnung. In einer Ausführungsform können die FPU(s) 534 bis zu einer Anzahl M von 32-Bit-Gleitkomma- (oder -Ganzzahl-) Operationen SIMD-ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen SIMD-ausführen. In einer Ausführungsform stellt wenigstens eine der FPU(s) eine erweiterte Mathematikfähigkeit bereit, um transzendente Mathematikfunktionen mit hohem Durchsatz und 54-Bit-Gleitkomma in doppelter Genauigkeit zu unterstützen. In einigen Ausführungsformen ist außerdem ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 535 vorhanden, der spezifisch optimiert sein kann, um Operationen auszuführen, die den Berechnungen des maschinellen Lernens zugeordnet sind.
  • In einer Ausführungsform können die Anordnungen aus mehreren Instanzen der Graphikausführungseinheit 508 in einer Graphikunterkerngruppierung (z. B. einer Unterscheibe) instanziiert sein. Für die Skalierbarkeit können die Produktarchitekten die genaue Anzahl der Ausführungseinheiten pro Unterkerngruppierung auswählen. In einer Ausführungsform kann die Ausführungseinheit 508 Anweisungen über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform wird jeder in der Graphikausführungseinheit 508 ausgeführte „Thread“ in einem anderen Kanal ausgeführt.
  • 6 veranschaulicht eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zur Verwendung z. B. in einer Rechenmaschinenkachel 340A-340D wie in 3C sein, ist aber als solche nicht eingeschränkt. Die Varianten der Ausführungseinheit 600 können außerdem in einer Graphikmaschinenkachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform enthält die Ausführungseinheit 600 eine „Thread“-Steuereinheit 601, eine „Thread“-Zustandseinheit 602, eine Befehlshol-/-vorabholeinheit 603 und eine Befehlsdecodiereinheit 604. Die Ausführungseinheit 600 enthält zusätzlich eine Registerdatei 606, die Register speichert, die den Hardware-„Threads“ innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 enthält zusätzlich eine Sendeeinheit 607 und eine Verzweigungseinheit 608. In einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 der Graphikausführungseinheit 508 nach 5B arbeiten.
  • Die Ausführungseinheit 600 enthält außerdem eine Recheneinheit 610, die mehrere verschiedene Typen von Funktionseinheiten enthält. In einer Ausführungsform enthält die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von Arithmetiklogikeinheiten enthält. Die ALU-Einheit 611 kann konfiguriert sein, 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen auszuführen. Die Ganzzahl- und Gleitkommaoperationen können gleichzeitig ausgeführt werden. Die Recheneinheit 610 kann außerdem eine systolische Anordnung 612 und eine Mathematikeinheit 613 enthalten. Die systolische Anordnung 612 enthält ein W breites und D tiefes Netz von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere datenparallele Operationen in einer systolischen Weise auszuführen. In einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, Matrixoperationen, wie z. B. Matrixskalarproduktoperationen, auszuführen. In einer Ausführungsform unterstützt die systolische Anordnung 612 sowohl 16-Bit-Gleitkommaoperationen als auch 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, die Operationen des maschinellen Lernens zu beschleunigen. In derartigen Ausführungsformen kann die systolische Anordnung 612 mit Unterstützung für das 16-Bit-Gleitkommaformat bfloat konfiguriert sein. In einer Ausführungsform kann eine Mathematikeinheit 613 enthalten sein, um eine spezifische Teilmenge von mathematischen Operationen in einer effizienten Weise und mit geringerer Leistung als die ALU-Einheit 611 auszuführen. Die Mathematikeinheit 613 kann eine Variante der mathematischen Logik, die in der gemeinsam benutzten Funktionslogik einer Graphikverarbeitungsmaschine gefunden werden kann, die durch andere Ausführungsformen bereitgestellt wird, (z. B. die mathematische Logik 422 der gemeinsam benutzten Funktionslogik 420 nach 4) enthalten. In einer Ausführungsform kann die Mathematikeinheit 613 konfiguriert sein, 32-Bit- und 64-Bit-Gleitkommaoperationen auszuführen.
  • Die „Thread“-Steuereinheit 601 enthält eine Logik, um die Ausführung der „Threads“ innerhalb der Ausführungseinheit zu steuern. Die „Thread“-Steuereinheit 601 kann eine „Thread“-Arbitrierungslogik enthalten, um die Ausführung der „Threads“ innerhalb der Ausführungseinheit 600 zu starten, zu stoppen und vorwegzunehmen. Die „Thread“-Zustandseinheit 602 kann verwendet werden, um den „Thread“-Zustand für die „Threads“ zu speichern, die zugewiesen sind, in der Ausführungseinheit 600 ausgeführt zu werden. Das Speichern des „Thread“-Zustands innerhalb der Ausführungseinheit 600 ermöglicht die schnelle Vorwegnahme der „Threads“, wenn diese „Threads“ blockiert oder inaktiv werden. Die Anweisungshol-/-vorabholeinheit 603 kann Anweisungen aus einem Anweisungs-Cache der Ausführungslogik höherer Ebene (z. B. dem Anweisungs-Cache 506 wie in 5A) holen. Die Anweisungshol-/-vorabholeinheit 603 kann außerdem Vorabholanforderungen für Anweisungen, die in den Anweisungs-Cache zu laden sind, basierend auf einer Analyse der gegenwärtig ausgeführten „Threads“ ausgeben. Die Anweisungsdecodiereinheit 604 kann verwendet werden, um die Anweisungen zu decodieren, die durch die Recheneinheiten auszuführen sind. In einer Ausführungsform kann die Anweisungsdecodiereinheit 604 als ein Sekundärdecodierer verwendet werden, um komplexe Anweisungen in die konstituierenden Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 600 enthält zusätzlich eine Registerdatei 606, die durch die Hardware-„Threads“ verwendet werden kann, die in der Ausführungseinheit 600 ausgeführt werden. Die Register in der Registerdatei 606 können über die Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige „Threads“ innerhalb der Recheneinheit 610 der Ausführungseinheit 600 auszuführen. Die Anzahl der logischen „Threads“, die durch die Graphikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl der Hardware-„Threads“ eingeschränkt, wobei jedem Hardware-„Thread“ mehrere logische „Threads“ zugewiesen sein können. Die Größe der Registerdatei 606 kann basierend auf der Anzahl der unterstützten Hardware-„Threads“ über die Ausführungsformen variieren. In einer Ausführungsform kann die Registerumbenennung verwendet werden, die Register den Hardware-„Threads“ dynamisch zuzuweisen.
  • 7 ist ein Blockschaltplan, der die Graphikprozessor-Anweisungsformate 700 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Graphikprozessor-Ausführungseinheiten einen Anweisungssatz, der Anweisungen in mehreren Formaten aufweist. Die Kästen in durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien die Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. In einigen Ausführungsformen besteht das beschriebene und veranschaulichte Anweisungsformat 700 insofern aus Makroanweisungen, als sie im Gegensatz zu den Mikrooperationen, die sich aus der Anweisungsdecodierung ergeben, sobald die Anweisung verarbeitet wird, Anweisungen sind, die an die Ausführungseinheit geliefert werden.
  • In einigen Ausführungsformen unterstützen die Graphikprozessor-Ausführungseinheiten nativ die Anweisungen in einem 128-Bit-Anweisungsformat 710. Ein verdichtetes 64-Bit-Anweisungsformat 730 ist basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl der Operanden für einige Anweisungen verfügbar. Das native 128-Bit-Anweisungsformat 710 stellt Zugriff auf alle Anweisungsoptionen bereit, während einige Optionen und Operationen im 64-Bit-Format 730 eingeschränkt sind. Die im 64-Bit-Format 730 verfügbaren nativen Anweisungen variieren mit der Ausführungsform. In einigen Ausführungsformen ist die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 kompakt gemacht. Die Ausführungseinheits-Hardware bezieht sich basierend auf den Indexwerten auf einen Satz von Kompaktierungstabellen und verwendet die Ausgaben der Kompaktierungstabelle, um eine native Anweisung im 128-Bit-Anweisungsformat 710 zu rekonstruieren. Es können andere Größen und Formate der Anweisung verwendet werden.
  • Für jedes Format definiert der Anweisungs-Operationscode 712 die Operation, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jede Anweisung über die mehreren Datenelemente jedes Operanden parallel aus. In Reaktion auf eine Additionsanweisung führt die Ausführungseinheit z. B. eine gleichzeitige Additionsoperation über jeden Farbkanal aus, der ein Texturelement oder ein Bildelement repräsentiert. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden aus. In einigen Ausführungsformen ermöglicht das Anweisungssteuerfeld 714 die Steuerung über bestimmte Ausführungsoptionen, wie z. B. die Auswahl der Kanäle (z. B. die Aussage) und die Datenkanalreihenfolge (z. B. „Swizzle“). Für die Anweisungen in dem 128-Bit-Anweisungsformat 710 begrenzt ein Ausführungsgrößenfeld 716 die Anzahl der Datenkanäle, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Ausführungsgrößenfeld 716 für die Verwendung im kompakten 64-Bit-Anweisungsformat 730 nicht verfügbar.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden auf, die zwei Quelloperanden, src0 720, srcl 722, und ein Ziel 718 enthalten. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Doppelzielanweisungen, wobei eines der Ziele impliziert ist. Die Datenmanipulationsanweisungen können einen dritten Quelloperanden (z. B. SRC2 724) aufweisen, wo der Anweisungs-Operationscode 712 die Anzahl der Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein (z. B. fest codierter) Sofortwert sein, der mit der Anweisung übergegeben wird.
  • In einigen Ausführungsformen enthält das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressenbetriebsartfeld 726, das z. B. spezifiziert, ob eine direkte Registeradressierungsbetriebsart oder eine indirekte Registeradressierungsbetriebsart verwendet wird. Wenn die direkte Registeradressierungsbetriebsart verwendet wird, wird die Registeradresse eines oder mehrerer Operanden durch die Bits in der Anweisung direkt bereitgestellt.
  • In einigen Ausführungsformen enthält das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressenbetriebsartfeld 726, das eine Adressenbetriebsart und/oder eine Zugriffsbetriebsart für die Anweisung spezifiziert. In einer Ausführungsform wird die Zugriffsbetriebsart verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Einige Ausführungsformen unterstützen Zugriffsbetriebsarten, die eine 16-byte-ausgerichtete Zugriffsbetriebsart und eine 1-byte-ausgerichtete Zugriffsbetriebsart enthalten, wobei die Byteausrichtung der Zugriffsbetriebsart die Zugriffsausrichtung der Anweisungsoperanden bestimmt. In einer ersten Betriebsart kann die Anweisung z. B. die byteausgerichtete Adressierung für die Quell- und Zieloperanden verwenden, während die Anweisung in einer zweiten Betriebsart die 16-byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden kann.
  • In einer Ausführungsform bestimmt der Adressenbetriebsartabschnitt des Zugriffs-/Adressenbetriebsartfeldes 726, ob die Anweisung die direkte oder die indirekte Adressierung verwenden soll. Wenn die direkte Registeradressierungsbetriebsart verwendet wird, stellen die Bits in der Anweisung die Registeradresse eines oder mehrerer Operanden direkt bereit. Wenn die indirekte Registeradressierungsbetriebsart verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressenregisterwert und einem Adressensofortfeld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen sind die Anweisungen basierend auf den Bitfeldern des Operationscodes 712 gruppiert, um die Operationscode-Decodierung 740 zu vereinfachen. Für einen 8-Bit-Operationscode ermöglichen es die Bits 4, 5 und 6 der Ausführungseinheit, den Typ des Operationscodes zu bestimmen. Die gezeigte genaue Operationscodegruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen enthält eine Bewegungs- und Logikoperationscodegruppe 742 Datenbewegungs- und Logikanweisungen (z. B. Bewegen (mov), Vergleichen (cmp)). In einigen Ausführungsformen benutzt die Bewegungs- und Logikgruppe 742 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei sich die Bewegungsanweisungen (mov-Anweisungen) in der Form 0000xxxxb befinden und sich die Logikanweisungen in der Form 0001xxxxb befinden. Eine Ablaufsteuerungs-Anweisungsgruppe 744 (z. B. Aufrufen, Springen (jmp)) enthält Anweisungen in der Form 0010xxxxb (z. B. 0x20). Eine Gruppe 746 vermischter Anweisungen enthält eine Mischung von Anweisungen einschließlich Synchronisationsanweisungen (z. B. Warten, Senden) in der Form 0011xxxxb (z. B. 0x30). Eine Gruppe 748 paralleler Mathematikanweisungen enthält komponentenweise Arithmetikanweisungen (z. B. Addieren, Multiplizieren (mul)) in der Form 0100xxxxb (z. B. 0x40). Die parallele Mathematikgruppe 748 führt die Arithmetikoperationen parallel über die Datenkanäle aus. Die Vektormathematikgruppe 750 enthält Arithmetikanweisungen (z. B. dp4) in der Form OlOlxxxxb (z. B. 0x50). Die Vektormathematikgruppe führt eine Arithmetik, wie z. B. Skalarproduktberechnungen an Vektoroperanden, aus. Das veranschaulichte Opcode-Decodieren 740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit verwendet wird, um eine decodierte Anweisung auszuführen. Es können z. B. einige Anweisungen als systolische Anweisungen bezeichnet werden, die durch eine systolische Anordnung ausgeführt werden. Andere Anweisungen, wie z. B. (nicht gezeigte) Strahlverfolgungsanweisungen, können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik innerhalb einer Scheibe oder Partition der Ausführungslogik geleitet werden.
  • Graphikpipeline
  • 8 ist ein Blockschaltplan einer weiteren Ausführungsform eines Graphikprozessors 800. Die Elemente nach 8, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können in irgendeiner Weise arbeiten oder funktionieren, die zu der, die hier anderswo beschrieben ist, ähnlich ist, sind aber nicht auf eine solche eingeschränkt.
  • In einigen Ausführungsformen enthält der Graphikprozessor 800 eine Geometriepipeline 820, eine Medienpipeline 830, eine Anzeigemaschine 840, eine „Thread“-Ausführungslogik 850 und eine Bildsyntheseausgabepipeline 870. In einigen Ausführungsformen ist der Graphikprozessor 800 ein Graphikprozessor innerhalb eines Mehrkernverarbeitungssystems, das einen oder mehrere Universalverarbeitungskerne enthält. Der Graphikprozessor ist durch Registerschreibvorgänge in ein oder mehrere (nicht gezeigte) Steuerregister oder über Befehle, die über eine Ringzusammenschaltung 802 an den Graphikprozessor 800 ausgegeben werden, gesteuert. In einigen Ausführungsformen koppelt die Ringzusammenschaltung 802 den Graphikprozessor 800 an andere Verarbeitungskomponenten, wie z. B. andere Graphikprozessoren oder Universalprozessoren. Die Befehle von der Ringzusammenschaltung 802 werden durch einen Befehls-Streamer 803 interpretiert, der die Anweisungen an die einzelnen Komponenten der Geometriepipeline 820 oder der Medienpipeline 830 liefert.
  • In einigen Ausführungsformen leitet der Befehls-Streamer 803 den Betrieb einer Scheitelpunktholeinrichtung 805, die die Scheitelpunktdaten aus dem Speicher liest und die durch den Befehls-Streamer 803 bereitgestellten Scheitelpunktverarbeitungsbefehle ausführt. In einigen Ausführungsformen stellt die Scheitelpunktholeinrichtung 805 die Scheitelpunktdaten einem Scheitelpunktschattierer 807 bereit, der eine Koordinatenraumtransformation und Beleuchtungsoperationen an jedem Scheitelpunkt ausführt. In einigen Ausführungsformen führen die Scheitelpunktholeinrichtung 805 und der Scheitelpunktschattierer 807 die Scheitelpunktverarbeitungsanweisungen durch das Abfertigen der Ausführungs-„Threads“ über einen „Thread“-Abfertiger 831 zu den Ausführungseinheiten 852A-852B aus.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B eine Anordnung von Vektorprozessoren, die einen Anweisungssatz zum Ausführen von Graphik- und Medienoperationen aufweisen. In einigen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen angeschlossenen L1-Cache 851 auf, der für jede Anordnung spezifisch ist oder zwischen den Anordnungen gemeinsam benutzt wird. Der Cache kann als ein Daten-Cache, ein Anweisungs-Cache oder ein einziger Cache, der partitioniert ist, um Daten und Anweisungen in unterschiedlichen Partitionen zu enthalten, konfiguriert sein.
  • In einigen Ausführungsformen enthält die Geometriepipeline 820 Mosaikauslegungskomponenten, um eine hardware-beschleunigte Mosaikauslegung der 3D-Objekte auszuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Hüllenschattierer 811 die Mosaikauslegungsoperationen. Ein programmierbarer Bereichsschattierer 817 stellt eine „Backend“-Auswertung der Mosaikauslegungsausgabe bereit. Eine Mosaikauslegungseinrichtung 813 arbeitet auf Anweisung des Hüllenschattierers 811 und enthält eine Speziallogik, um einen Satz von ausführlichen geometrischen Objekten basierend auf einem groben geometrischen Modell zu erzeugen, das der Geometriepipeline 820 als eine Eingabe bereitgestellt wird. Falls in einigen Ausführungsformen die Mosaikauslegung nicht verwendet wird, können die Mosaikauslegungskomponenten (z. B. der Hüllenschattierer 811, die Mosaikauslegungseinrichtung 813 und der Bereichsschattierer 817) umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrieschattierer 819 über einen oder mehrere zu den Ausführungseinheiten 852A-852B abgefertigte „Threads“ verarbeitet werden oder können direkt zu dem Abschneider 829 weitergehen. In einigen Ausführungsformen wirkt der Geometrieschattierer auf ganze geometrische Objekte anstatt auf Scheitelpunkte oder Flecken von Scheitelpunkten wie in den vorhergehenden Stufen der Graphikpipeline. Falls die Mosaikauslegung deaktiviert ist, empfängt der Geometrieschattierer 819 die Eingabe von dem Scheitelpunktschattierer 807. In einigen Ausführungsformen ist der Geometrieschattierer 819 durch ein Geometrieschattiererprogramm programmierbar, um die Geometriemosaikauslegung auszuführen, falls die Mosaikauslegungseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet der Abschneider 829 die Scheitelpunktsdaten. Der Abschneider 829 kann ein Abschneider mit fester Funktion oder ein programmierbarer Abschneider sein, der Abschneide- und Geometrieschattiererfunktionen aufweist. In einigen Ausführungsformen fertigt eine Rasterisierer- und Tiefentestkomponente 873 in der Bildsyntheseausgabepipeline 870 die Pixelschattierer ab, um die geometrischen Objekte in Darstellungen pro Pixel umzusetzen. In einigen Ausführungsformen ist eine Pixelschattiererlogik in der „Thread“-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierer- und Tiefentestkomponente 873 umgehen und über eine Stromausgangseinheit 823 auf die nicht gerasterten Scheitelpunktdaten zugreifen.
  • Der Graphikprozessor 800 weist einen Zusammenschaltungsbus, eine Zusammenschaltungsstruktur oder irgendeinen anderen Zusammenschaltungsmechanismus auf, der das Weiterleiten von Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und die zugeordneten Logikeinheiten (z. B. der L1-Cache 851, der Abtaster 854, der Textur-Cache 858 usw.) über einen Datenanschluss 856 miteinander verbunden, um einen Speicherzugriff auszuführen und mit den Komponenten der Bildsyntheseausgabepipeline des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffswege auf. In einer Ausführungsform kann der Textur-Cache 858 außerdem als ein Abtaster-Cache konfiguriert sein.
  • In einigen Ausführungsformen enthält die Bildsyntheseausgabepipeline 870 eine Rasterisierer- und Tiefentestkomponente 873, die die scheitelpunktbasierten Objekte in eine zugeordnete pixelbasierte Darstellung umsetzt. In einigen Ausführungsformen enthält die Rasterisiererlogik eine Fensterer-/Maskierereinheit, um die Dreiecks- und Linienrasterung einer festen Funktion auszuführen. Ein zugeordneter Bildsynthese-Cache 878 und ein zugeordneter Tiefen-Cache 879 sind in einigen Ausführungsformen außerdem verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten aus, obwohl in einigen Instanzen die den 2D-Operationen (z. B. den Bildblock-Bildübertragungen mit Mischung) zugeordneten Pixeloperationen durch die 2D-Maschine 841 ausgeführt werden oder zur Anzeigezeit durch den Anzeige-Controller 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam benutzter L3-Cache 875 für alle Graphikkomponenten verfügbar, was das gemeinsame Benutzen der Daten ohne die Verwendung eines Hauptsystemspeichers ermöglicht.
  • In einigen Ausführungsformen enthält die Graphikprozessor-Medienpipeline 830 eine Medienmaschine 837 und ein Video-„Frontend“ 834. In einigen Ausführungsformen empfängt das Video-„Frontend“ 834 die Pipelinebefehle von dem Befehls-Streamer 803. In einigen Ausführungsformen enthält die Medienpipeline 830 einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-„Frontend“ 834 die Medienbefehle vor dem Senden des Befehls an die Medienmaschine 837. In einigen Ausführungsformen enthält die Medienmaschine 837 eine „Thread“-Erzeugungsfunktionalität, um „Threads“ zur Abfertigung über den „Thread“-Abfertiger 831 zu der „Thread“-Ausführungslogik 850 zu erzeugen.
  • In einigen Ausführungsformen enthält der Graphikprozessor 800 eine Anzeigemaschine 840. In einigen Ausführungsformen befindet sich die Anzeigemaschine 840 außerhalb des Prozessors 800 und ist über die Ringzusammenschaltung 802 oder irgendeinen anderen Zusammenschaltungsbus oder irgendeine andere Zusammenschaltungsstruktur mit dem Graphikprozessor gekoppelt. In einigen Ausführungsformen enthält die Anzeigemaschine 840 eine 2D-Maschine 841 und einen Anzeige-Controller 843. In einigen Ausführungsformen enthält die Anzeigemaschine 840 eine Speziallogik, die unabhängig von der 3D-Pipeline arbeiten kann. In einigen Ausführungsformen ist der Anzeige-Controller 843 mit einer (nicht gezeigten) Anzeigevorrichtung gekoppelt, die eine systemintegrierte Anzeigevorrichtung, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung, die über einen Anzeigevorrichtungsverbinder angeschlossen ist, sein kann.
  • In einigen Ausführungsformen sind die Geometriepipeline 820 und die Medienpipeline 830 konfigurierbar, um Operationen basierend auf mehreren Graphik- und Medienprogrammierschnittstellen auszuführen, wobei sie nicht für irgendeine Anwendungsprogrammierschnittstelle (API) spezifisch sind. In einigen Ausführungsformen übersetzt die Treiber-Software für den Graphikprozessor die API-Aufrufe, die für eine spezielle Graphik- oder Medienbibliothek spezifisch sind, in Befehle, die durch den Graphikprozessor verarbeitet werden können. In einigen Ausführungsformen wird eine Unterstützung für die Open Graphics Library (OpenGL), die Open Computing Language (OpenCL) und/oder die Vulkan-Graphik- und -Rechen-API bereitgestellt, die alle von der Khronos-Gruppe verfügbar sind. In einigen Ausführungsformen kann außerdem eine Unterstützung für die Direct3D-Bibliothek von der Microsoft Corporation bereitgestellt sein. In einigen Ausführungsformen kann eine Kombination aus diesen Bibliotheken unterstützt werden. Es kann außerdem eine Unterstützung für die Open Source Computer Vision Library (OpenCV) bereitgestellt sein. Eine künftige API mit einer kompatiblen 3D-Pipeline würde außerdem unterstützt werden, falls eine Abbildung von der Pipeline der künftigen API auf die Pipeline des Graphikprozessors ausgeführt werden kann.
  • Graphikpipelineprogrammierung
  • 9A ist ein Blockschaltplan, der ein Graphikprozessorbefehlsformat 900 gemäß einigen Ausführungsformen veranschaulicht. 9B ist ein Blockschaltplan, der eine Graphikprozessorbefehlsfolge 910 gemäß einer Ausführungsform veranschaulicht. Die Kästen in durchgezogenen Linien in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Graphikbefehl enthalten sind, während die gestrichelten Linien die Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Graphikbefehle enthalten sind. Das beispielhafte Graphikprozessorbefehlsformat 900 nach 9A enthält Datenfelder, um einen Client 902, einen Befehlsoperationscode (opcode) 904 und die Daten 906 für den Befehl zu identifizieren. Ein Unteroperationscode 905 und eine Befehlsgröße 908 sind außerdem in einigen Befehlen enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Graphikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Graphikprozessorbefehlsparser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten zu der geeigneten Client-Einheit zu leiten. In einigen Ausführungsformen enthalten die Client-Einheiten des Graphikprozessors eine Speicherschnittstelleneinheit, eine Bildsyntheseeinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit weist eine entsprechende Verarbeitungspipeline auf, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen worden ist, liest die Client-Einheit den Operationscode 904 und, falls vorhanden, den Unteroperationscode 905, um die auszuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung der Informationen in dem Datenfeld 906 aus. Für einige Befehle wird eine explizite Befehlsgröße 908 erwartet, um die Größe des Befehls zu spezifizieren. In einigen Ausführungsformen bestimmt der Befehlsparser automatisch die Größe von wenigstens einigen der Befehle basierend auf dem Befehls-Operationscode. In einigen Ausführungsformen sind die Befehle auf Vielfache eines Doppelworts ausgerichtet. Es können andere Befehlsformate verwendet werden.
  • Der Ablaufplan in 9B veranschaulicht eine beispielhafte Graphikprozessorbefehlsfolge 910. In einigen Ausführungsformen verwendet die Software oder die Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Graphikprozessors aufweist, eine Version der gezeigten Befehlsfolge, um einen Satz von Graphikoperationen aufzubauen, auszuführen und zu beenden. Eine Musterbefehlsfolge ist lediglich für Beispielzwecke gezeigt und beschrieben, da die Ausführungsformen nicht auf diese spezifischen Befehle oder diese Befehlsfolge eingeschränkt sind. Überdies können die Befehle als ein Stapel von Befehlen in einer Befehlsfolge ausgegeben werden, so dass der Graphikprozessor die Folge der Befehle in wenigstens teilweiser Gleichzeitigkeit verarbeitet.
  • In einigen Ausführungsformen kann die Graphikprozessorbefehlsfolge 910 mit einem Pipelineleerungsbefehl 912 beginnen, um zu verursachen, dass jede aktive Graphikpipeline die gegenwärtig ausstehenden Befehle für die Pipeline abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medienpipeline 924 nicht gleichzeitig. Die Pipelineleerung wird ausgeführt, um zu verursachen, dass die aktive Graphikpipeline irgendwelche ausstehenden Befehle abschließt. In Reaktion auf eine Pipelineleerung unterbricht der Befehlsparser für den Graphikprozessor die Befehlsverarbeitung, bis die aktiven Zeichenmaschinen die ausstehenden Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Optional können irgendwelche Daten im Bildsynthese-Cache, die als ‚beschädigt‘ markiert sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipelineleerungsbefehl 912 zur Pipelinesynchronisation oder vor dem Setzen des Graphikprozessors in einen Kleinleistungszustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipelineauswahlbefehl 913 verwendet, wenn eine Befehlsfolge erfordert, dass der Graphikprozessor explizit zwischen den Pipelines wechselt. In einigen Ausführungsformen ist ein Pipelineauswahlbefehl 913 innerhalb eines Ausführungskontexts vor dem Ausgeben der Pipelinebefehle nur einmal erforderlich, wenn es nicht der Kontext ist, die Befehle für beide Pipelines auszugeben. In einigen Ausführungsformen ist ein Pipelineleerungsbefehl 912 unmittelbar vor einem Pipelinewechsel über den Pipelineauswahlbefehl 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipelinesteuerbefehl 914 eine Graphikpipeline für den Betrieb, wobei er verwendet wird, um die 3D-Pipeline 922 und die Medienpipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipelinesteuerbefehl 914 den Pipelinezustand für die aktive Pipeline. In einer Ausführungsform wird der Pipelinesteuerbefehl 914 zur Pipelinesynchronisation verwendet und verwendet, um die Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline vor der Verarbeitung eines Stapels von Befehlen zu löschen.
  • In einigen Ausführungsformen werden Rücksprungpufferzustandsbefehle 916 verwendet, um einen Satz von Rücksprungpuffern für die jeweiligen Pipelines zu konfigurieren, um Daten zu schreiben. Einige Pipelineoperationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rücksprungpuffer, in die die Operationen die Zwischendaten während der Verarbeitung schreiben. In einigen Ausführungsformen verwendet der Graphikprozessor außerdem einen oder mehrere Rücksprungpuffer, um die Ausgangsdaten zu speichern und um eine Kreuz-„Thread“-Kommunikation auszuführen. In einigen Ausführungsformen enthält der Rücksprungpufferzustand 916 das Auswählen der Größe und der Anzahl der Rücksprungpuffer zur Verwendung für einen Satz von Pipelineoperationen.
  • Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich basierend auf der aktiven Pipeline für die Operationen. Basierend auf einer Pipelinebestimmung 920 wird die Befehlsfolge für die 3D-Pipeline 922 beginnend mit dem 3D-Pipeline-Zustand 930 oder für die Medienpipeline 924 beginnend mit den Medienpipelinezustand 940 angepasst.
  • Die Befehle, um den 3D-Pipeline-Zustand 930 zu konfigurieren, enthalten 3D-Zustandsfestlegungsbefehle für den Scheitelpunkt-Pufferzustand, den Scheitelpunkt-Elementzustand, den konstanten Farbzustand, den Tiefenpufferzustand und andere Zustandsvariable, die zu konfigurieren sind, bevor die 3D-Grundelementbefehle verarbeitet werden. Die Werte dieser Befehle werden wenigstens teilweise basierend auf der speziellen benutzten 3D-API bestimmt. In einigen Ausführungsformen können die Befehle des 3D-Pipelinezustands 930 außerdem bestimmte Pipelineelemente selektiv deaktivieren oder umgehen, falls diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der 3D-Grundelementbefehl 932 verwendet, um die 3D-Grundelemente vorzulegen, die durch die 3D-Pipeline zu verarbeiten sind. Die Befehle und die zugeordneten Parameter, die über den 3D-Grundelementbefehl 932 zu dem Graphikprozessor weitergeleitet werden, werden zu der Scheitelpunkt-Holfunktion in der Graphikpipeline weitergeleitet. Die Scheitelpunkt-Holfunktion verwendet die Daten des 3D-Grundelementbefehls 932, um die Scheitelpunkt-Datenstrukturen zu erzeugen. Die Scheitelpunkt-Datenstrukturen sind in einem oder mehreren Rücksprungpuffern gespeichert. In einigen Ausführungsformen wird der 3D-Grundelementbefehl 932 verwendet, um die Scheitelpunktoperationen über die Scheitelpunktschattierer an den 3D-Grundelementen auszuführen. Um die Scheitelpunktschattierer auszuführen, fertigt die 3D-Pipeline 922 die Schattiererausführungs-„Threads“ zu den Graphikprozessor-Ausführungseinheiten ab.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über einen Ausführungsbefehl oder ein Ausführungsereignis 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreiben die Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen ‚Los‘- oder ‚Stoß‘-Befehl in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipelinesynchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Graphikpipeline zu leeren. Die 3D-Pipeline führt die Geometrieverarbeitung für die 3D-Grundelemente aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert, wobei die Pixelmaschine die resultierenden Pixel färbt. Zusätzliche Befehle, um die Pixelschattierung und die Pixel-„Backend“-Operationen zu steuern, können außerdem für diese Operationen enthalten sein.
  • In einigen Ausführungsformen folgt die Graphikprozessorbefehlsfolge 910 dem Weg der Medienpipeline 924, wenn die Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und die Art der Programmierung für die Medienpipeline 924 von den auszuführenden Medien- oder Rechenoperationen ab. Spezifische Mediendecodieroperationen können während der Mediendecodierung zu der Medienpipeline abgeladen werden. In einigen Ausführungsformen kann die Medienpipeline außerdem umgangen werden und kann das Mediendecodieren ganz oder teilweise unter Verwendung der Betriebsmittel ausgeführt werden, die durch einen oder mehrere Universalverarbeitungskerne bereitgestellt werden. In einer Ausführungsform enthält die Medienpipeline außerdem Elemente für die Operationen der Universalgraphikprozessoreinheit (GPGPU), wobei der Graphikprozessor verwendet wird, um die SIMD-Vektoroperationen unter Verwendung von Rechen-Schattiererprogrammen auszuführen, die nicht explizit auf die Bildsynthese der Graphikgrundelemente bezogen sind.
  • In einigen Ausführungsformen ist die Medienpipeline 924 in einer ähnlichen Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen, um den Medienpipelinezustand 940 zu konfigurieren, wird vor den Medienobjektbefehlen 942 in eine Befehlswarteschlange abgefertigt oder gesetzt. In einigen Ausführungsformen enthalten die Befehle für den Medienpipelinezustand 940 die Daten, um die Medienpipelineelemente zu konfigurieren, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies enthält die Daten, um die Videodecodier- und Videocodierlogik innerhalb der Medienpipeline, wie z. B. das Codier- und Decodierformat, zu konfigurieren. In einigen Ausführungsformen unterstützen die Befehle für den Medienpipelinezustand 940 außerdem die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandsfestlegungen enthalten.
  • In einigen Ausführungsformen liefern die Medienobjektbefehle 942 die Zeiger auf die Medienobjekte zum Verarbeiten durch die Medienpipeline. Die Medienobjekte enthalten Speicherpuffer, die die zu verarbeitenden Videodaten enthalten. In einigen Ausführungsformen müssen alle Medienpipelinezustände vor dem Ausgeben eines Medienobjektbefehls 942 gültig sein. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle 942 in einer Warteschlange eingereiht sind, wird die Medienpipeline 924 über einen Ausführungsbefehl 944 oder ein äquivalentes Ausführungsereignis (z. B. ein Registerschreiben) ausgelöst. Die Ausgabe von der Medienpipeline 924 kann dann durch die durch die 3D-Pipeline 922 oder die Medienpipeline 924 bereitgestellten Operationen nachbearbeitet werden. In einigen Ausführungsformen sind die GPGPU-Operationen in einer ähnlichen Weise wie die Medienoperationen konfiguriert, wobei sie in einer ähnlichen Weise wie die Medienoperationen ausgeführt werden.
  • Graphik-Software-Architektur
  • 10 veranschaulicht eine beispielhafte Graphik-Software-Architektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen enthält die Software-Architektur eine 3D-Graphikanwendung 1010, ein Betriebssystem 1020 und wenigstens einen Prozessor 1030. In einigen Ausführungsformen enthält der Prozessor 1030 einen Graphikprozessor 1032 und einen oder mehrere Universalprozessorkern(e) 1034. Sowohl die Graphikanwendung 1010 als auch das Betriebssystem 1020 werden im Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Graphikanwendung 1010 ein oder mehrere Schattiererprogramme, die Schattiereranweisungen 1012 enthalten. Die Anweisungen der Schattierersprache können sich in einer höheren Schattierersprache, wie z. B. der High-Level Shader Language (HLSL) des Direct3D, der OpenGL Shader Language (GLSL) usw., befinden. Die Anwendung enthält außerdem ausführbare Anweisungen 1014 in einer Maschinensprache, die für die Ausführung durch den Universalprozessorkern 1034 geeignet sind. Die Anwendung enthält außerdem Graphikobjekte 1016, die durch die Scheitelpunktdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows® Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-artiges Betriebssystem oder ein quelloffenes UNIX-artiges Betriebssystem unter Verwendung einer Variante des Linux-Kernels. Das Betriebssystem 1020 kann eine Graphik-API 1022, wie z. B. die Direct3D-API, die OpenGL-API oder die Vulkan-API, unterstützen. Wenn sich die Direct3D-API in Gebrauch befindet, verwendet das Betriebssystem 1020 einen „Frontend“-Schattierer-Kompilierer 1024, um irgendwelche Schattiereranweisungen 1012 in der HLSL in eine Schattierersprache einer tieferen Ebene zu kompilieren. Die Kompilierung kann eine Just-in-time-Kompilierung (JIT-Kompilierung) sein oder die Anwendung kann eine Schattierer-Vorkompilierung ausführen. In einigen Ausführungsformen werden die Schattierer auf hoher Ebene während der Kompilierung der 3D-Graphikanwendung 1010 in Schattierer auf tiefer Ebene kompiliert. In einigen Ausführungsformen werden die Schattiereranweisungen 1012 in einer Zwischenform, wie z. B. in einer durch die Vulkan-API verwendeten Version der Standard Portable Intermediate Representation (SPIR), bereitgestellt.
  • In einigen Ausführungsformen enthält ein Anwenderbetriebsart-Graphiktreiber 1026 einen „Backend“-Schattierer-Kompilierer 1027, um die Schattiereranweisungen 1012 in eine hardware-spezifische Darstellung umzusetzen. Wenn sich die OpenGL-API in Gebrauch befindet, werden die Schattiereranweisungen 1012 in der höheren GLSL-Sprache zur Kompilierung zu einem Anwenderbetriebsart-Graphiktreiber 1026 weitergeleitet. In einigen Ausführungsformen verwendet der Anwenderbetriebsart-Graphiktreiber 1026 die Kernel-Betriebsartfunktionen 1028 des Betriebssystems, um mit einem Kernel-Betriebsart-Graphiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernel-Betriebsart-Graphiktreiber 1029 mit dem Graphikprozessor 1032, um Befehle und Anweisungen abzufertigen.
  • IP- Kern-Implementierungen
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentativen Code implementiert sein, der in einem maschinenlesbaren Medium gespeichert ist, der eine Logik innerhalb einer integrierten Schaltung, wie z. B. einem Prozessor, repräsentiert und/oder definiert. Das maschinenlesbare Medium kann z. B. Anweisungen enthalten, die verschiedene Logiken innerhalb des Prozessors repräsentieren. Wenn die Anweisungen durch eine Maschine gelesen werden, können sie die Maschine veranlassen, die Logik herzustellen, um die hier beschriebenen Techniken auszuführen. Derartige Darstellungen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Einheiten der Logik für eine integrierte Schaltung, die in einem greifbaren, maschinenlesbaren Medium als ein Hardware-Modell gespeichert sein können, das die Struktur der integrierten Schaltung beschreibt. Das Hardware-Modell kann an verschiedenen Kunden oder Fertigungseinrichtungen geliefert werden, die das Hardware-Modell in die Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann so hergestellt werden, dass die Schaltung die Operationen ausführt, die in Verbindung mit irgendwelchen der hier beschriebenen Ausführungsformen beschrieben sind.
  • 11A ist ein Blockschaltplan, der ein IP-Kern-Entwicklungssystem 1100 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um die Operationen gemäß einer Ausführungsform auszuführen. Das IP-Kern-Entwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu erzeugen, die in einen größeren Entwurf aufgenommen werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte Schaltung eines SOC) zu konstruieren. Eine Entwurfseinrichtung 1130 kann eine Software-Simulation 1110 eines IP-Kern-Entwurfs in einer höheren Programmiersprache (z. B. C/C++) erzeugen. Die Software-Simulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 1112 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitsteuerungssimulationen enthalten. Ein Registerübertragungsebenen- (RTL-) Entwurf 1115 kann dann aus dem Simulationsmodell 1112 erzeugt oder synthetisiert werden. Der RTL-Entwurf 1115 ist eine Abstraktionen des Verhaltens der integrierten Schaltung, die den Fluss der digitalen Signale zwischen den Hardware-Registern einschließlich der zugeordneten Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird, modelliert. Zusätzlich zu dem RTL-Entwurf 1115 können außerdem Entwürfe auf tieferer Ebene auf der Logikebene oder der Transistorebene erzeugt, entworfen oder synthetisiert werden. Folglich können die speziellen Einzelheiten des anfänglichen Entwurfs und der anfänglichen Simulation variieren.
  • Der RTL-Entwurf 1115 oder ein Äquivalent kann ferner durch die Entwurfseinrichtung in ein Hardware-Modell 1120 synthetisiert werden, das sich in einer Hardware-Beschreibungssprache (HDL) oder irgendeiner anderen Darstellung der physikalischen Entwurfsdaten befinden kann. Die HDL kann weiter simuliert oder getestet werden, um den Entwurf des IP-Kerns zu verifizieren. Der Entwurf des IP-Kerns kann für die Lieferung an die Fertigungseinrichtung 1165 einer 3. Partei unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. einer Festplatte, eines Flash-Speichers oder irgendeines nichtflüchtigen Speichermediums) gespeichert werden. Alternativ kann der Entwurf des IP-Kerns über eine verdrahtete Verbindung 1150 oder eine drahtlose Verbindung 1160 (z. B. über das Internet) übertragen werden. Die Fertigungseinrichtung 1165 kann dann eine integrierte Schaltung herstellen, die wenigstens teilweise auf dem Entwurf des IP-Kerns basiert. Die hergestellte integrierte Schaltung kann konfiguriert sein, die Operationen in Übereinstimmung mit wenigstens einer hier beschriebenen Ausführungsform auszuführen.
  • 11B veranschaulicht eine Querschnittsseitenansicht einer Baugruppenanordnung 1170 einer integrierten Schaltung gemäß einigen hier beschriebenen Ausführungsformen. Die Baugruppenanordnung 1170 einer integrierten Schaltung veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie sie hier beschrieben sind. Die Baugruppenanordnung 1170 enthält mehrere Einheiten einer Hardware-Logik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann wenigstens teilweise in einer konfigurierbaren Logik-Hardware oder in einer Logik-Hardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Abschnitte irgendeines des Prozessorkerns (der Prozessorkerne), des Graphikprozessors (der Graphikprozessoren) oder anderer Beschleunigungsvorrichtungen, die hier beschrieben sind, enthalten. Jede Einheit der Logik 1172, 1174 kann innerhalb eines Halbleiter-Dies implementiert sein und über eine Zusammenschaltungsstruktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Zusammenschaltungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten, und kann Zusammenschaltungen, wie z. B. Löthöcker oder Pfeiler, enthalten, ist aber nicht darauf eingeschränkt. In einigen Ausführungsformen kann die Zusammenschaltungsstruktur 1173 konfiguriert sein, elektrische Signale, wie z. B. Eingangs-/Ausgangs- (E/A-) Signale und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik 1172, 1174 zugeordnet sind, zu leiten. In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten enthalten. Die Baugruppenanordnung 1170 kann über eine Baugruppenzusammenschaltung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Baugruppenzusammenschaltung 1183 kann an eine Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie z. B. einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul, zu leiten.
  • In einigen Ausführungsformen sind die Einheiten der Logik 1172, 1174 mit einer Brücke 1182 elektrisch gekoppelt, die konfiguriert ist, elektrische Signale zwischen den Logiken 1172, 1174 zu leiten. Die Brücke 1182 kann eine dichte Zusammenschaltungsstruktur sein, die einen Weg für die elektrischen Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat enthalten, das aus einem Glas oder einem geeigneten Halbleitermaterial besteht. Die Merkmale des elektrischen Leitens können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen den Logiken 1172, 1174 bereitzustellen.
  • Obwohl zwei Einheiten der Logik 1172, 1174 und eine Brücke 1182 veranschaulicht sind, können die hier beschriebenen Ausführungsformen mehr oder weniger Logikeinheiten in einem oder mehreren Dies enthalten. Der eine oder die mehreren Dies können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 weggelassen sein kann, wenn die Logik in einem einzigen Die enthalten ist. Alternativ können mehrere Dies oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Dies und Brücken in anderen möglichen Konfigurationen einschließlich dreidimensionaler Konfigurationen miteinander verbunden sein.
  • 11C veranschaulicht eine Baugruppenanordnung 1190, die mehrere Einheiten von Hardware-Logik-Multi-Chip-Modulen enthält, die mit einem Substrat 1180 (z. B. einem Basis-Die) verbunden sind. Eine Graphikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, wie sie hier beschrieben sind, können aus verschiedenen Silizium-Multi-Chip-Modulen zusammengesetzt sein, die separat hergestellt werden. In diesem Kontext ist ein Multi-Chip-Modul eine wenigstens teilweise in einer Baugruppe angeordnete integrierte Schaltung, die verschiedene Logikeinheiten enthält, die mit anderen Multi-Chip-Modulen in eine größere Baugruppe zusammengesetzt sein können. Ein vielfältiger Satz von Multi-Chip-Modulen mit unterschiedlicher IP-Kernlogik kann in eine einzige Vorrichtung zusammengebaut sein. Zusätzlich können die Multi-Chip-Module unter Verwendung der Technik aktiver „Interposer“ in einen Basis-Die oder ein Basis-Multi-Chip-Modul integriert sein. Die hier beschriebenen Konzepte ermöglichen die Zusammenschaltung und die Kommunikation zwischen den verschiedenen Formen von IP innerhalb der GPU. Die IP-Kerne können unter Verwendung unterschiedlicher Prozesstechniken hergestellt und während der Herstellung zusammengesetzt werden, was die Komplexität der konvergierenden mehreren IPs, insbesondere in einem großen SoC mit mehreren Varianten der IPs, gegen denselben Herstellungsprozess vermeidet. Das Ermöglichen der Verwendung mehrerer Prozesstechniken verbessert die Produkteinführungszeit und stellt eine kostengünstige Weise bereit, mehrere Produkt-SKUs zu erzeugen. Zusätzlich sind die in ihre Bestandteile zerlegten IPs zugänglicher, um unabhängig leistungsgesteuert zu sein, wobei die Komponenten, die bei einer gegebenen Arbeitslast nicht in Gebrauch sind, abgeschaltet sein können, wodurch die Gesamtleistungsaufnahme verringert wird.
  • Die Hardware-Logik-Multi-Chip-Module können Spezial-Hardware-Logik-Multi-Chip-Module 1172, Logik- oder E/A-Multi-Chip-Module 1174 und/oder Speicher-Multi-Chip-Module 1175 enthalten. Die Hardware-Logik-Multi-Chip-Module 1172 und Logik- oder E/A-Multi-Chip-Module 1174 können wenigstens teilweise in konfigurierbarer Logik-Hardware oder Logik-Hardware mit fester Funktionalität implementiert sein und können einen oder mehrere Teile irgendeines des Prozessorkerns (der Prozessorkerne), des Graphikprozessors (der Graphikprozessoren), der Parallelprozessoren oder der anderen hier beschriebenen Beschleunigervorrichtungen enthalten. Die Speicher-Multi-Chip-Module 1175 können DRAM- (z. B. GDDR-, HBM-) Speicher oder Cache- (SRAM-) Speicher sein.
  • Jedes Multi-Chip-Modul kann als separater Halbleiter-Die hergestellt sein und über eine Zusammenschaltungsstruktur 1173 an das Substrat 1180 gekoppelt sein. Die Zusammenschaltungsstruktur 1173 kann konfiguriert, elektrische Signale zwischen den verschiedenen Multi-Chip-Modulen und der Logik innerhalb des Substrats 1180 zu leiten. Die Zusammenschaltungsstruktur 1173 kann Zusammenschaltungen, wie z. B., aber nicht eingeschränkt auf Löthöcker oder Pfeiler, enthalten. In einigen Ausführungsformen kann die Zusammenschaltungsstruktur 1173 konfiguriert sein, elektrische Signale, wie z. B. Eingangs-/Ausgangs- (E/A-) Signale und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik-, E/A- und Speicher-Multi-Chip-Module zugeordnet sind, zu leiten.
  • In einigen Ausführungsformen ist das Substrat 1180 ein Laminatsubstrat auf Epoxidbasis. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten enthalten. Die Baugruppenanordnung 1190 kann über eine Baugruppenzusammenschaltung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Baugruppenzusammenschaltung 1183 kann an eine Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie z. B. einer Hauptplatine, einem anderen Chipsatz oder einem Multi-Chip-Modul, zu leiten.
  • In einigen Ausführungsformen können ein Logik- oder E/A-Multi-Chip-Modul 1174 und ein Speicher-Multi-Chip-Modul 1175 über eine Brücke 1187 elektrisch gekoppelt sein, die konfiguriert ist, elektrische Signale zwischen dem Logik- oder E/A-Multi-Chip-Modul 1174 und einem Speicher-Multi-Chip-Modul 1175 zu leiten. Die Brücke 1187 kann eine dichte Zusammenschaltungsstruktur sein, die einen Weg für die elektrischen Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Auf dem Brückensubstrat können elektrische Leitungsmerkmale ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder E/A-Multi-Chip-Modul 1174 und einem Speicher-Multi-Chip-Modul 1175 bereitzustellen. Die Brücke 1187 kann außerdem als eine Siliciumbrücke oder eine Zusammenschaltungsbrücke bezeichnet werden. Die Brücke 1187 ist in einigen Ausführungsformen z. B. eine eingebettete Mehr-Die-Zusammenschaltungsbrücke (EMIB). In einigen Ausführungsformen kann die Brücke 1187 einfach eine direkte Verbindung von einem Multi-Chip-Modul zu einem weiteren Multi-Chip-Modul sein.
  • Das Substrat 1180 kann Hardware-Komponenten für die E/A 1191, einen Cache-Speicher 1192 und andere Hardware-Logik 1193 enthalten. Eine Struktur 1185 kann in das Substrat 1180 eingebettet sein, um die Kommunikation zwischen den verschiedenen Logik-Multi-Chip-Modulen und der Logik 1191, 1193 innerhalb des Substrats 1180 zu ermöglichen. In einer Ausführungsform können die E/A 1191, die Struktur 1185, der Cache, die Brücke und die andere Hardware-Logik 1193 in einen Basis-Die integriert sein, der oben auf das Substrat 1180 geschichtet ist.
  • In verschiedenen Ausführungsformen kann eine Baugruppenanordnung 1190 weniger oder eine größere Anzahl von Komponenten und Multi-Chip-Modulen enthalten, die durch eine Struktur 1185 oder eine oder mehrere Brücken 1187 zusammengeschaltet sind. Die Multi-Chip-Module innerhalb der Baugruppenanordnung 1190 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können die Brückenstrukturen 1187 verwendet werden, um eine Punkt-zu-Punkt-Zusammenschaltung z. B. zwischen Logik- oder E/A-Multi-Chip-Modulen und Speicher-Multi-Chip-Modulen zu fördern. Die Struktur 1185 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Multi-Chip-Module (z. B. die Multi-Chip-Module 1172, 1174, 1191, 1193) mit anderen Logik- und/oder E/A-Multi-Chip-Modulen zusammenzuschalten. In einer Ausführungsform kann der Cache-Speicher 1192 innerhalb des Substrats als globaler Cache für die Baugruppenanordnung 1190, als Teil eines verteilten globalen Caches oder als ein dedizierter Cache für die Struktur 1185 wirken.
  • 11D zeigt eine Baugruppenanordnung 1194, die austauschbare Multi-Chip-Module 1195 enthält, gemäß einer Ausführungsform. Die austauschbaren Multi-Chip-Module 1195 können in standardisierte Steckplätze auf einem oder mehreren Basis-Multi-Chip-Modulen 1196, 1198 montiert sein. Die Basis-Multi-Chip-Module 1196, 1198 können über eine Brückenzusammenschaltung 1197 gekoppelt sein, die zu den anderen hier beschriebenen Brückenzusammenschaltungen ähnlich sein kann und die z. B. eine EMIB sein kann. Die Speicher-Multi-Chip-Module können außerdem über eine Brückenzusammenschaltung mit den Logik- oder E/A-Multi-Chip-Modulen verbunden sein. Die E/A- und Logik-Multi-Chip-Module können über eine Zusammenschaltungsstruktur kommunizieren. Die Basis-Multi-Chip-Module können jedes einen oder mehrere Steckplätze in einem standardisierten Format für eines einer Logik oder einer E/A oder eines Speichers/Caches unterstützen.
  • In einer Ausführungsform können SRAM- und Leistungslieferschaltungen in einem oder mehreren der Basis-Multi-Chip-Module 1196, 1198 hergestellt sein, die bezüglich der austauschbaren Multi-Chip-Module 1195, die oben auf die Basis-Multi-Chip-Module gestapelt sind, unter Verwendung einer anderen Prozesstechnik hergestellt werden können. Die Basis-Multi-Chip-Module 1196, 1198 können z. B. unter Verwendung einer größeren Prozesstechnik hergestellt werden, während die austauschbaren Multi-Chip-Module unter Verwendung einer kleineren Prozesstechnologie hergestellt werden können. Eines oder mehrere der austauschbaren Multi-Chip-Module 1195 können Speicher- (z. B. DRAM-) Multi-Chip-Module sein. Basierend auf der Leistung und/oder der Leistungsfähigkeit, die für das Produkt, das die Baugruppenanordnung 1194 verwendet, angestrebt werden, können für die Baugruppenanordnung 1194 verschiedene Speicherdichten ausgewählt werden. Zusätzlich können zum Zeitpunkt des Zusammenbaus basierend auf der Leistung und/oder der Leistungsfähigkeit, die für das Produkt angestrebt werden, die Logik-Multi-Chip-Module mit einer unterschiedlichen Anzahl des Typs der Funktionseinheiten ausgewählt werden. Zusätzlich können die Multi-Chip-Moduls, die IP-Logikkerne unterschiedlicher Typen enthalten, in die austauschbaren Multi-Chip-Modul-Steckplätze eingesetzt sein, wodurch Hybridprozessorbauformen ermöglicht werden, die IP-Blöcke unterschiedlicher Technik mischen und anpassen können.
  • Beispielhafte integrierte Schaltung eines Systems auf einem Chip
  • Die 12-13 veranschaulichen beispielhafte integrierte Schaltungen und zugeordnete Graphikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß den verschiedenen hier beschriebenen Ausführungsformen. Zusätzlich zu dem, was veranschaulicht ist, können eine andere Logik und andere Schaltungen enthalten sein, einschließlich zusätzlicher Graphikprozessoren/-kerne, Peripherieschnittstellen-Controller oder Uni versal prozessorkerne.
  • 12 ist ein Blockschaltplan, der eine beispielhafte integrierte Schaltung 1200 eines Systems auf einem Chip veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Die beispielhafte integrierte Schaltung 1200 enthält einen oder mehrere Anwendungsprozessor(en) 1205 (z. B. CPUs), wenigstens einen Graphikprozessor 1210 und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 enthalten, wobei irgendwelche von ihnen ein modularer IP-Kern von denselben oder mehreren verschiedenen Entwurfseinrichtungen sein können. Die integrierte Schaltung 1200 enthält eine Peripherie- oder Buslogik einschließlich eines USB-Controllers 1225, eines UART-Controllers 1230, eines SPI/SDIO-Controllers 1235 und eines I2S/I2C-Controllers 1240. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 enthalten, die an einen oder mehrere eines hochauflösenden Multimedia-Schnittstellen-Controllers (HDMI-Controllers) 1250 und einer mobilen Industrieprozessorschnittstellen- (MIPI-) Anzeigeschnittstelle 1255 gekoppelt ist. Der Speicher kann durch ein Flash-Speicher-Teilsystem 1260 bereitgestellt sein, das einen Flash-Speicher und einen Flash-Speicher-Controller enthält. Die Speicherschnittstelle kann über einen Speicher-Controller 1265 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen enthalten zusätzlich eine eingebettete Sicherheitsmaschine 1270.
  • Die 13A-13B sind Blockschaltpläne, die beispielhafte Graphikprozessoren zur Verwendung innerhalb eines SoC veranschaulichen, gemäß den hier beschriebenen Ausführungsformen. 13A veranschaulicht einen beispielhaften Graphikprozessor 1310 einer integrierten Schaltung eines Systems auf einem Chip, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. 13B veranschaulicht einen zusätzlichen beispielhaften Graphikprozessor 1340 einer integrierten Schaltung eines Systems auf einem Chip, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Der Graphikprozessor 1310 nach 13A ist ein Beispiel eines Kleinleistungs-Graphikprozessorkerns. Der Graphikprozessor 1340 nach 13B ist ein Beispiel eines Graphikprozessorkerns mit höherer Leistungsfähigkeit. Jeder der Graphikprozessoren 1310, 1340 kann Varianten des Graphikprozessors 1210 nach 12 sein.
  • Wie in 13A gezeigt ist, enthält der Graphikprozessor 1310 einen Scheitelpunktprozessor 1305 und einen oder mehrere Fragmentprozessor(en) 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N - 1 und 1315N). Der Graphikprozessor 1310 kann über eine separate Logik verschiedene Schattiererprogramme ausführen, so dass der Scheitelpunktprozessor 1305 optimiert ist, die Operationen für die Scheitelpunktschattiererprogramme auszuführen, während der eine oder die mehreren Fragmentprozessor(en) 1315A-1315N Fragment- (z. B. Pixel-) Schattierungsoperationen für die Fragment- oder Pixelschattiererprogramme ausführen. Der Scheitelpunktprozessor 1305 führt die Scheitelpunktverarbeitungsstufe der 3D-Graphikpipeline aus und erzeugt die Grundelemente und die Scheitelpunktdaten. Der Fragmentprozessor (die Fragmentprozessoren) 1315A-1315N verwenden die durch den Scheitelpunktprozessor 1305 erzeugten Grundelement- und Scheitelpunktdaten, um einen Framepuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die Fragmentprozessor(en) 1315A-1315N optimiert, um Fragmentschattiererprogramme auszuführen, wie sie in der OpenGL-API bereitgestellt sind, die verwendet werden können, um ähnliche Operationen wie ein Pixelschattiererprogramm auszuführen, wie es in der Direct-3D-API bereitgestellt ist.
  • Der Graphikprozessor 1310 enthält zusätzlich eine oder mehrere Speichermanagementeinheiten (MMUs) 1320A-1320B, einen oder mehrere Cache(s) 1325A-1325B und eine oder mehrere Schaltungszusammenschaltung(en) 1330A-1330B. Die eine oder die mehreren MMU(s) 1320A-1320B stellen die Abbildung der virtuellen Adressen auf die physikalischen Adressen für den Graphikprozessor 1310 einschließlich für den Scheitelpunktprozessor 1305 und/oder die Fragmentprozessor(en) 1315A-1315N bereit, die zusätzlich zu den Scheitelpunkt- oder Bild-/Texturdaten, die in dem einen oder den mehreren Cache(s) 1325A-1325B gespeichert sind, auf im Speicher gespeicherte Scheitelpunkt- oder Bild-/Texturdaten verweisen können. In einer Ausführungsform können die eine oder die mehreren MMU(s) 1320A-1320B mit anderen MMUs innerhalb des Systems, einschließlich einer oder mehrerer MMUs, die dem einen oder den mehreren Anwendungsprozessor(en) 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 nach 12 zugeordnet sind, synchronisiert sein, so dass jeder Prozessor 1205-1220 an einem gemeinsam benutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder die mehreren Schaltungszusammenschaltung(en) 1330A-1330B ermöglichen es dem Graphikprozessor 1310 gemäß den Ausführungsformen, mit anderen IP-Kernen innerhalb des SoC, entweder über einen internen Bus des SoC oder über eine direkte Verbindung, eine Schnittstelle zu bilden.
  • Wie in 13B gezeigt ist, enthält der Graphikprozessor 1340 eine oder mehrere MMU(s) 1320A-1320B, einen oder mehrere Cache(s) 1325A-1325B und eine oder mehrere Schaltungszusammenschaltung(en) 1330A-1330B des Graphikprozessors 1310 nach 13A. Der Graphikprozessor 1340 enthält einen oder mehrere Schattiererkern(e) 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N - 1 und 1355N), die eine vereinheitlichte Schattiererkernarchitektur bereitstellen, in der ein einzelner Kern oder Typ des Kerns alle Typen des programmierbaren Schattierercodes einschließlich des Schattiererprogrammcodes ausführen kann, um die Scheitelpunktschattierer, die Fragmentschattierer und/oder die Rechenschattierer zu implementieren. Die genaue Anzahl der vorhandenen Schattiererkerne kann zwischen den Ausführungsformen und Implementierungen variieren. Zusätzlich enthält der Graphikprozessor 1340 einen Zwischenkern-Aufgabenmanager 1345, der als ein „Thread“-Abfertiger wirkt, um die Ausführungs-„Threads“ zu einem oder mehreren Schattiererkernen 1355A-1355N abzufertigen, und eine Kacheleinheit 1358, um die Kacheloperationen für eine kachelbasierte Bildsynthese zu beschleunigen, in der die Bildsyntheseoperationen für eine Szene im Bildraum unterteilt sind, um z. B. eine lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder um die Verwendung der internen Caches zu optimieren.
  • 14 veranschaulicht eine Ausführungsform einer Ausführungsform einer Rechenvorrichtung, die einen Mechanismus 1410 für die asynchrone Ausführung verwendet. In einer Ausführungsform kann der Mechanismus für die asynchrone Ausführung nach 14 z. B. durch die Rechenvorrichtung 1400 verwendet werden oder gehostet sein. Wie veranschaulicht ist, kann der Mechanismus 1410 für die asynchrone Ausführung gemäß einer Ausführungsform durch den Graphiktreiber 1416 gehostet sein oder ein Teil von ihm sein.
  • In anderen Ausführungsformen kann der Mechanismus 1410 für die asynchrone Ausführung durch die Graphikverarbeitungseinheit („GPU“ oder „Graphikprozessor“) 1414 gehostet sein oder ein Teil von ihr sein. In noch anderen Ausführungsformen kann der Mechanismus 1410 für die asynchrone Ausführung durch die Firmware der Zentraleinheit („CPU“ oder „Anwendungsprozessor“) 1412 gehostet sein oder ein Teil von ihr sein. Für die Kürze, die Klarheit und die Leichtigkeit des Verständnisses wird überall im Rest dieses Dokuments der Mechanismus 1410 für die asynchrone Ausführung als Teil der GPU 1414 erörtert; die Ausführungsformen sind jedoch als solche nicht eingeschränkt.
  • In einer noch weiteren Ausführungsform kann der Mechanismus 1410 für die asynchrone Ausführung als eine Software- oder Firmware-Logik durch das Betriebssystem 1406 gehostet sein. In einer noch weiteren Ausführungsform kann der Mechanismus 1410 für die asynchrone Ausführung teilweise und gleichzeitig durch mehrere Komponenten der Rechenvorrichtung 1400, wie z. B. eines oder mehrerer des Graphiktreibers 1416, der GPU 1414, der GPU-Firmware, der CPU 1412, der CPU-Firmware, des Betriebssystems 1406 und/oder dergleichen, gehostet sein. Es wird in Betracht gezogen, dass der Mechanismus 1410 für die asynchrone Ausführung oder eine oder mehrere seiner Komponenten als Hardware, Software und/oder Firmware implementiert sein können.
  • Die Recheneinheit 1400 repräsentiert eine Kommunikations- und Datenverarbeitungsvorrichtung, die irgendeine Anzahl und irgendeinen Typ von intelligenten Vorrichtungen, wie z. B. (ohne Einschränkung) intelligente Befehlsvorrichtungen oder intelligente persönliche Assistenten, Heim-/Büro-Automatisierungssysteme, Haushaltsgeräte (z. B. Waschmaschinen, Fernsehgeräte usw.), Mobilvorrichtungen (z. B. Smartphones, Tablet-Computer usw.), Spielvorrichtungen, handgehaltene Vorrichtungen, tragbare Vorrichtungen (z. B. intelligente Armbanduhren, intelligente Armbänder usw.), Vorrichtungen der virtuellen Realität (VR-Vorrichtungen), Datenhelme (HMDs), Vorrichtungen für das Internet der Dinge (IoT-Vorrichtungen), Laptop-Computer, Desktop-Computer, Server-Computer, Set-Top-Boxes (z. B. Set-Top-Boxes für das internetbasierte Kabelfernsehen usw.), auf dem globalen Positionierungssystem basierende (GPSbasierte) Vorrichtungen usw., enthalten oder repräsentieren.
  • In einigen Ausführungsformen kann die Rechenvorrichtung 1400 (ohne Einschränkung) autonome Maschinen oder künstlich intelligente Agenten, wie z. B. mechanische Agenten oder Maschinen, elektronische Agenten oder Maschinen, virtuelle Agenten oder Maschinen, elektro-mechanische Agenten oder Maschinen usw., enthalten. Die Beispiele der autonomen Maschinen oder künstlich intelligenten Agenten können (ohne Einschränkung) Roboter, autonome Fahrzeuge (z. B. selbstfahrende Autos, selbstfliegende Flugzeuge, selbstsegelnde Boote usw.), autonome Geräte (selbstarbeitende Baufahrzeuge, selbstarbeitende medizinische Geräte usw.) und/oder dergleichen enthalten. Ferner sind „autonome Fahrzeuge“ nicht auf Kraftfahrzeuge eingeschränkt, sondern sie können irgendeine Anzahl und irgendeinen Typ von autonomen Maschinen, wie z. B. Robotern, einem autonomen Gerät, autonome Haushaltsgeräte und/oder dergleichen, enthalten, wobei auf irgendeine oder mehrere Aufgaben oder Operationen, die sich auf derartige autonome Maschinen beziehen, synonym als autonomes Fahren Bezug genommen werden kann.
  • Ferner kann z. B. die Rechenvorrichtung 1400 eine Cloud-Rechenplattform enthalten, die aus mehreren Server-Computern besteht, wobei jeder Server-Computer einen Multifunktions-Perzeptron-Mechanismus einsetzt oder hostet. Eine automatische ISP-Abstimmung kann z. B. unter Verwendung der früher in diesem Dokument beschriebenen Komponenten-, System- und Architekturbauformen ausgeführt werden. Einige der obenerwähnten Typen von Vorrichtungen können z. B. verwendet werden, um eine kundenspezifisch erlernte Prozedur zu implementieren, wie z. B. unter Verwendung feldprogrammierbarer Gatteranordnungen (FPGAs) usw.
  • Ferner kann z. B. die Rechenvorrichtung 1400 eine Computerplattform enthalten, die eine integrierte Schaltung („IC“), wie z. B. ein System auf einem Chip („SoC“ oder „SOC“), hosted, die verschiedene Hardware- und/oder Softwarekomponenten der Rechenvorrichtung 1400 auf einem einzigen Chip integriert.
  • Wie veranschaulicht ist, kann in einer Ausführungsform die Rechenvorrichtung 1400 irgendeine Anzahl und irgendeinen Typ von Hardware- und/oder Software-Komponenten enthalten, wie z. B. (ohne Einschränkung) sowohl die Graphikverarbeitungseinheit 1414 („GPU“ oder einfach „Graphikprozessor“), den Graphiktreiber 1416 (der außerdem als „GPU-Treiber“, „Graphiktreiberlogik“, „Treiberlogik“, Anwenderbetriebsarttreiber (UMD), UMD, Anwenderbetriebsarttreiberrahmen (UMDF), UMDF oder einfach „Treiber“ bezeichnet wird), die Zentraleinheit 1412 („CPU“ oder einfach „Anwendungsprozessor“), den Speicher 1404, die Netzvorrichtungen, die Treiber oder dergleichen als auch Ein-/Ausgabe- (E/A-) Quellen 1408, wie z. B. Berührungsschirme, Berührungstafeln, Berührungsfelder, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbinder usw. Die Rechenvorrichtung 100 kann ein Betriebssystem (OS) enthalten, das als eine Schnittstelle zwischen der Hardware und/oder den physischen Betriebsmittel der Rechenvorrichtung 1400 und einem Anwender dient.
  • Es wird erkannt, dass für bestimmte Implementierungen ein weniger oder mehr ausgerüstetes System als das oben beschriebene Beispiel bevorzugt sein kann. Deshalb kann die Konfiguration der Rechenvorrichtung 1400 in Abhängigkeit von zahlreichen Faktoren, wie z. B. Preisbeschränkungen, Leistungsanforderungen, technischen Verbesserungen oder anderen Umständen, von Implementierung zu Implementierung variieren.
  • Die Ausführungsformen können als irgendeines oder eine Kombination aus Folgendem implementiert sein: ein oder mehrere Mikrochips oder integrierte Schaltungen, die unter Verwendung einer Hauptplatine zusammengeschaltet sind, eine festverdrahtete Logik, Software, die durch eine Speichervorrichtung gespeichert ist und von einem Mikroprozessor ausgeführt wird, Firmware, eine anwendungsspezifische integrierte Schaltung (ASIC) und/oder eine feldprogrammierbare Gatteranordnung (FPGA). Die Begriffe „Logik“, „Modul“, „Komponente“, „Maschine“ und „Mechanismus“ können beispielhaft Software oder Hardware und/oder eine Kombination daraus, wie z. B. Firmware, enthalten.
  • Gemäß einer Ausführungsform ist die Rechenvorrichtung 1400 über ein oder mehrere Netze 1445 an eine oder mehrere Client-Rechenvorrichtungen (oder Clients) 1440 gekoppelt. Entsprechend können der Server 1400 und der Client 1440 ferner eine Netzschnittstelle(n) enthalten, um Zugang zu einem Netz, wie z. B. einem LAN, einem Weitbereichsnetz (WAN), einem Stadtbereichsnetz (MAN), einem persönlichen Netz (PAN), Bluetooth, einem Cloud-Netz, einem mobilen Netz (z. B. der 3. Generation (3G), der 4. Generation (4G) usw.), einem Intranet, dem Internet usw., bereitzustellen. Die Netzschnittstelle(n) kann (können) z. B. eine drahtlose Netzschnittstelle mit einer Antenne umfassen, die eine oder mehrere Antenne(n) repräsentieren kann. Die Netzschnittstelle(n) kann (können) außerdem z. B. eine verdrahtete Netzschnittstelle enthalten, um mit entfernten Vorrichtungen über ein Netzkabel zu kommunizieren, das z. B. ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein paralleles Kabel sein kann.
  • Die Ausführungsformen können z. B. als Computerprogrammprodukt bereitgestellt sein, das ein oder mehrere maschinenlesbare Medien enthalten kann, die darin gespeicherte maschinenausführbare Anweisungen aufweisen, die, wenn sie durch eine oder mehrere Maschinen, wie z. B. einen Computer, ein Netz von Computern oder andere elektronische Vorrichtungen, ausgeführt werden, dazu führen können, dass die eine oder die mehreren Maschinen die Operationen in Übereinstimmung mit den hier beschriebenen Ausführungsformen ausführen. Ein maschinenlesbares Medium kann Disketten, optische Platten, CD-ROMs (Kompaktplatten-Festwertspeicher) und magnetooptische Platten, ROMs, RAMs, EPROMs (löschbare programmierbare Festwertspeicher), EEPROMs (elektrisch löschbare programmierbare Festwertspeicher), magnetische oder optische Karten, Flash-Speicher oder einen anderen Typ von Medien/eines maschinenlesbaren Mediums, die zum Speichern maschinenausführbarer Anweisungen geeignet sind, enthalten, ist aber nicht darauf eingeschränkt.
  • Überdies können die Ausführungsformen als Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. einem Server) über eine Kommunikationsverbindung (z. B. ein Modem und/oder eine Netzverbindung) zu einem anfordernden Computer (z. B. einem Client) über ein oder mehrere Datensignale, die durch eine Trägerwelle oder ein anderes Ausbreitungsmedium verkörpert und/oder moduliert sind, übertragen werden kann.
  • Überall im Dokument kann der Begriff „Anwender“ synonym als „Betrachter“, „Beobachter“, „Sprecher“, „Person“, „Individuum“, „Endanwender“ und/oder dergleichen bezeichnet werden. Es wird angegeben, dass überall in diesem Dokument auf Begriffe wie „Graphikdomäne“ synonym mit „Graphikverarbeitungseinheit“, „Graphikprozessor“ oder einfach „GPU“ Bezug genommen werden, wobei ähnlich auf „CPU-Domäne“ oder „Host-Domäne“ synonym mit „Computerverarbeitungseinheit“, „Anwendungsprozessor“ oder einfach „CPU“ Bezug genommen werden kann.
  • Es wird angegeben, dass Begriffe wie „Knoten“, „Rechenknoten“, „Server“, „Server-Vorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Server-Computer“, „Maschine“, „Host-Maschine“, „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Computersystem“ und dergleichen überall in diesem Dokument synonym verwendet werden können. Es wird weiter angegeben, dass Begriffe wie „Anwendung“, „Software-Anwendung“, „Programm“, „Software-Programm“, „Paket“, „Software-Paket“ und dergleichen überall in diesem Dokument synonym verwendet werden können. Außerdem können Begriffe wie „Job“, „Eingabe“, „Anforderung“, „Nachricht“ und dergleichen überall in diesem Dokument synonym verwendet werden.
  • Wie oben erörtert worden ist, führen herkömmliche GPUs unabhängige Graphikaufgaben seriell aus. Eine Lösung, die implementiert ist, um dieses Problem zu lösen, ist das asynchrone Rechnen, das über virtuelle Warteschlangen (z. B. eine 3D- und eine Rechenwarteschlange) die Vorlage unabhängiger Arbeit an eine GPU ermöglicht, was wiederum eine gleichzeitige Ausführung von Rechendurchläufen mit einer anderen 3D-Bildsynthesearbeit ermöglicht. Das asynchrone Rechnen erfordert jedoch spezifische Arbeitspaarungen für eine optimale Leistung. Das Planen eines 3D-Schattendurchlaufs mit der Rechenarbeit stellt z. B. die beste erreichbare Leistung bereit, da beide Durchläufe sich gegenseitig ausschließende GPU-Betriebsmittel verwenden.
  • Für die Schattendurchläufe sind normalerweise die Geometrie, der Raster- und der Tiefenrohrdurchsatz ein Engpass, während für die Rechendurchläufe der Rechen-Cluster- und Speicherdurchsatz ein Engpass ist. Das Planen eines 3D-G-Pufferdurchlaufs zusammen mit der Rechenarbeit stellt jedoch keine optimale Leistung bereit und kann zu Verlangsamungen führen, da beide Durchläufe ähnliche Betriebsmittel (z. B. den Rechen-Cluster und den Speicherdurchsatz) verwenden. Folglich kann das asynchrone Rechnen unabhängige 3D-Durchläufe nicht vollständig verbergen, wobei es nur einen Rechendurchlauf mit einem unabhängigen 3D-Durchlauf ausführen kann (z. B. keine unabhängigen 3D-Durchläufe mit anderer 3D-Arbeit ausführen kann).
  • Gemäß einer Ausführungsform ermöglicht der Mechanismus 1410 für die asynchrone Ausführung die gleichzeitige Ausführung unabhängiger Pipelinedurchläufe (z. B. 3D-Durchläufe) in einer einzigen GPU. In einer derartigen Ausführungsform kann der Mechanismus 1410 für die asynchrone Ausführung die Verarbeitungselemente implementieren, um die Rechen- und 3D-Aufgaben (z. B. Aufgaben und/oder „Threads“) geleichzeitig auszuführen, oder mehrere 3D-Durchläufe in paralleler Weise ausführen. Entsprechend enthält der Mechanismus 1410 für die asynchrone Ausführung einen Planer 1415, um die Arbeit zu planen, um die Durchläufe in der GPU 1414 außerhalb der Programmreihenfolge auszuführen.
  • 15 veranschaulicht eine Ausführungsform der GPU 1414. Wie in 15 gezeigt ist, enthält GPU 1414 die Verarbeitungselemente 1413 (z. B. 1413 (A)-1413 (C)), die implementiert sind, um durch den Planer 1415 geplant auszuführen. Gemäß einer Ausführungsform ist jedes Verarbeitungselement implementiert, um verschiedene Aufgabentypen als verschiedene Ausführungspipelines auszuführen. Das Verarbeitungselement 1413A kann z. B. implementiert sein, um die Scheitelpunktverarbeitung auszuführen, während das Verarbeitungselement 1413B implementiert sein kann, um die Strahlverfolgung auszuführen. Das Verarbeitungselement 1413C kann als allgemein verwendete Hardware-Betriebsmittel (z. B. Ausführungseinheiten, eine Speicherschnittstelle usw.) implementiert sein. Obwohl sie hierin hinsichtlich der GPUs beschrieben sind, können andere Ausführungsformen den Mechanismus 1410 für die asynchrone Ausführung in Universalprozessoren (z. B. CPUs) implementieren.
  • 16 ist ein Ablaufplan, der eine Ausführungsform eines Prozesses zum Ausführen der asynchronen Ausführung veranschaulicht. Im Verarbeitungsblock 1610 werden die unabhängigen Durchläufe von Aufgaben (oder Arbeit) detektiert, die in einer Weise außerhalb der Reihenfolge ausgeführt werden können. Im Verarbeitungsblock 1620 plant der Planer 1415 einen ersten Satz unabhängiger Arbeit und einen zweiten Satz unabhängiger Arbeit (z. B. eine andere Bildsynthesearbeit) zum Verarbeiten der GPU-Verarbeitungselemente 1413. In einer derartigen Ausführungsform kann der erste Satz von Aufgaben in den Verarbeitungselementen 1413(A) verarbeitet werden, während der zweite Satz von Aufgaben in den Verarbeitungselementen 1413 (B) verarbeitet wird, während die Verarbeitungselemente 1413(C) als gemeinsam genutzte Betriebsmittel implementiert sein können. Im Verarbeitungsblock 1630 führt das Verarbeitungselement 1413 die Arbeit parallel aus.
  • 17A-17D veranschaulichen die Ausführungsformen der asynchronen Ausführung, die in der Graphikpipeline-Hardware implementiert sind. Gemäß einer Ausführungsform ermöglicht der Mechanismus 1410 für die asynchrone Ausführung, dass die Hardware der GPU 1414 (z. B. das „Frontend“ der Graphikpipeline) zwischen zwei oder mehr Ausführungspipelines aufgeteilt ist. In dieser Ausführungsform führt jede Pipeline die Arbeit von einer einzigen Anwendung aus, die nicht von der Arbeit abhängig ist, die in der anderen Pipeline synthetisiert wird. In einer weiteren Ausführungsform legt der Mechanismus 1410 für die asynchrone Ausführung jeden Durchlauf unabhängiger Arbeit an einen separaten Befehls-Streamer (z. B. den RCS und den POCS in 17A) zur gleichzeitigen Ausführung vor. Entsprechend sind jedem Befehls-Streamer zwei logische Warteschlangen 1411 zugeordnet. Wie in 17A gezeigt ist, könnte die Abtasterleistung ein Engpass der render0/render1-Arbeit sein, wobei folglich die „Frontend“-Hardware geringfügig verwendet wird. Unterdessen ist für die shadow0/shadow 1-Arbeit der Tiefen- oder (Z-) Durchsatz ein Engpass, wobei folglich die GPU-Betriebsmittel stark verwendet werden. Durch das gleichzeitige Ausführen beider Arbeitsdurchläufe können die einzelnen Komponenten der verfügbaren Hardware der GPU 1414 vollständiger verwendet werden.
  • Sobald die Arbeit von jeder Instanz/jedem Durchlauf die Geometrieverarbeitung abgeschlossen hat, wird die Arbeit in die Rasterung verschoben. Wie in 17B gezeigt ist, ist die Rasterung serialisiert, so dass die Beschneider- (CL-) und Streifenfächer- (SF-) Arbeiten durch Wicklermanagern (WMs) verarbeitet werden. In einer Ausführungsform verfolgt eine Instanz- (oder Kontext-) Kennung (ID) die Arbeit, wobei die Hardware-Betriebsmittel von diesem Punkt weiter gemeinsam benutzt werden. Nach der Rasterung wird eine Tiefen- (oder Z-) Verarbeitung ausgeführt.
  • 17C veranschaulicht eine Ausführungsform der asynchronen Z-Rohr-Ausführungs-Hardware. Wie in 17C gezeigt ist, schiebt eine Kreuzschiene die Objekte für die asynchrone Ausführung mit zwei Instanzen über die WMs. Gemäß einer Ausführungsform partitioniert der Mechanismus 1410 für die asynchrone Ausführung das Z-Rohr bezüglich der Instanzen, die in der Hardware ausgeführt werden. In einer derartigen Ausführungsform kann die Partition eines von verschiedenen Partitionsverhältnissen aufweisen (z. B. 30/70, 50/50, 70/30 usw.). In einer weiteren Ausführungsform ist jeder Instanz ein eindeutiger Tiefenstatus zugeordnet. 17D veranschaulicht eine Ausführungsform der asynchronen Z-Rohr-Ausführungs-Hardware, wie die Arbeit von der Z-Verarbeitung abgefertigt wird. Wie in 17D gezeigt ist, ist der Schirm in Bereiche aufgebrochen, ein Bereich kann z. B. ein 16 × 16-Block benachbarter Pixel sein. Jeder Bereich wird dann einer spezifischen Hardware-Pipeline zur Verarbeitung zugewiesen.
  • Gemäß einer Ausführungsform wird die Fragmentschattierung nach der Z-Verarbeitung ausgeführt. 17E veranschaulicht eine Ausführungsform einer Fragmentschattierungspipeline für die asynchrone Ausführung. Wie in 17E gezeigt ist, benutzt ein Bereich von jeder Instanz die Pixelpipeline und den Rechen-Cluster in einer feinkörnigen Weise gemeinsam. Diese Bereiche der Pixel sind in kleinere Blöcke aufgeteilt und werden in den Rechen-Clustern schattiert. Überdies partitioniert der Mechanismus 1410 für die asynchrone Ausführung den späten Z-Test-Hardware-Block bezüglich der Instanz in der Hardware ausführt.
  • Gemäß einer Ausführungsform kann der Mechanismus 1410 für die asynchrone Ausführung in einer von zwei Betriebsarten arbeiten. In einer ersten Betriebsart ist der Mechanismus 1410 für die asynchrone Ausführung über eine API freigelegt, wobei das Programm spezifiziert, welche Arbeit von anderer Arbeit abhängig oder unabhängig ist, wodurch identifiziert wird, welche Arbeit asynchron zu einer bestimmten anderen Arbeit geplant werden kann. In einer derartigen Ausführungsform enthält der Mechanismus 1410 für die asynchrone Ausführung eine oder mehrere Schnittstellen, um es dem Planer 1415 zu ermöglichen, die Informationen zu empfangen, die Teile der Arbeit spezifizieren, die voneinander unabhängig sind, was es dem Planer 1415 ermöglicht, die Arbeit effizient zu planen. In einer weiteren Ausführungsform enthält der Mechanismus 1410 für die asynchrone Ausführung eine Abhängigkeitsgraphen-Schnittstelle 1417, um die Informationen zu empfangen.
  • In einer Ausführungsform enthalten die Informationen eine Liste von Zügen und/oder Bildsynthesedurchgängen, die über die Schnittstelle 1417 am Mechanismus 1410 für die asynchrone Ausführung empfangen wird. In einer weiteren Ausführungsform erhält die Schnittstelle 1417 jedoch für jeden Zug- oder Bildsynthesedurchlauf eine Liste der Eingangsbetriebsmittel und der als Ausgaben erzeugten Betriebsmittel. In einer noch weiteren Ausführungsform empfängt Schnittstelle 1417 einen gerichteten azyklischen Graphen. In einer derartigen Ausführungsform repräsentiert jeder Knoten in dem Graphen eine Arbeitseinheit (z. B. einen Zug- oder Bildsynthesedurchlauf), wobei jeder Rand im Graphen eine Betriebsmittelabhängigkeit zwischen den Operationen repräsentiert.
  • Basierend auf den empfangenen Graphendaten kann der Mechanismus 1410 für die asynchrone Ausführung Teile der Arbeit identifizieren, die unabhängig sind (z. B. keine gerichteten Abhängigkeiten im Graphen aufweisen). In einer Ausführungsform wird die identifizierte unabhängige Arbeit zur parallelen Ausführung an separate Befehls-Streamer in der Hardware der GPU 1414 übertragen. In einer weiteren Ausführungsform verwendet der Planer 1415 die Kenntnis der Orte, an denen es für die Arbeit Engpässe gibt, um die Arbeit, die gleichzeitig verschiedene Teile der Hardware der GPU 1414 verwendet, intelligenter zu planen.
  • 18 ist ein Ablaufplan, der eine Ausführungsform eines Prozesses zum Planen der Arbeit für die asynchrone Ausführung über die erste Betriebsart veranschaulicht. Im Verarbeitungsblock 1810 werden sowohl die zu planende Arbeit als auch der Graph empfangen. Im Verarbeitungsblock 1820 werden die nicht abhängigen Durchläufe zur Parallelisierung identifiziert. Im Verarbeitungsblock 1830 werden die Engpässe zwischen Durchläufen in unterschiedlicher Hardware identifiziert. Es wird z. B. eine Bestimmung bezüglich dessen ausgeführt, ob der Durchlauf N in anderer Hardware als der Durchlauf M einen Engpass aufweist (z. B. ein Engpass bei den Verarbeitungselementen 1413(A) gegen einen Engpass bei Verarbeitungselementen 1413(B)). Im Verarbeitungsblock 1840 werden die nicht abhängigen Durchläufe mit unterschiedlichen Engpässen über verschiedene Befehls-Streamer zur parallelen Ausführung vorgelegt. Im Entscheidungsblock 1850 wird eine Bestimmung ausgeführt, ob irgendwelche nicht abhängige Durchläufe als die Kandidaten für die Parallelisierung verbleiben. Wenn ja, wird die Steuerung an den Verarbeitungsblock 1820 zurückgegeben, wo die nicht abhängigen Durchläufe abermals für die Parallelisierung identifiziert werden. Andernfalls ist der Prozess abgeschlossen.
  • In einer zweiten Betriebsart sind eine Anwendung und die 3D-API in das Freigeben der asynchronen Ausführung nicht einbezogen. Folglich detektiert der Mechanismus 1410 für die asynchrone Ausführung asynchrone Ausführungsgelegenheiten, wobei er entsprechend plant. In dieser Ausführungsform nimmt der Mechanismus 1410 für die asynchrone Ausführung eine erweiterte Rolle durch das Erzeugen eines Abhängigkeitsgraphen für einen Frame (z. B. den Frame X) an, um die Gelegenheiten für die asynchrone Ausführung zu identifizieren. Anschließend wird der Graph auf Gelegenheiten zum parallelen Planen analysiert. Der Mechanismus 1410 für die asynchrone Ausführung identifiziert bei einer Bestimmung, dass Gelegenheiten zum parallelen Planen identifiziert worden sind, die entsprechenden Züge oder Durchläufe in einem oder mehreren folgenden Frames und wendet die Änderungen des asynchronen Planens auf diese Frames an. In einer noch weiteren Ausführungsform kann der Mechanismus 1410 für die asynchrone Ausführung das asynchrone Planen auf einen aktuellen Frame X anwenden. Dies kann jedoch auf einen Teil des Frames X eingeschränkt sein, der vor der Vorlage bei der Hardware für die Manipulation gepuffert werden kann. In einer noch weiteren Ausführungsform kann die Graphenerzeugung und das Planen als Hardware in der GPU 1414 implementiert sein.
  • 19 ist ein Ablaufplan, der eine weitere Ausführungsform eines Prozesses zum Planen von Arbeit für die asynchrone Ausführung über die zweite Betriebsart veranschaulicht. Im Verarbeitungsblock 1910 wird die Arbeit des Frames X vorgelegt. Im Verarbeitungsblock 1920 wird ein Graph der Züge und/oder Bildsynthesedurchläufe für den Frame X erzeugt. Im Verarbeitungsblock 1930 werden nicht abhängige Durchläufe der Züge und/oder Bildsynthesedurchläufe als die Kandidaten für die Parallelisierung identifiziert. Im Verarbeitungsblock 1940 wird die Arbeit für einen Frame X + 1 empfangen.
  • Im Verarbeitungsblock 1950 werden Züge und Durchläufe vom Frame X identifiziert, die dem Frame X + 1 entsprechen. Im Verarbeitungsblock 1960 werden N Engpässe des X + 1 Zugs/Durchlaufs in unterschiedlicher Hardware identifiziert (z. B. ob der Frame X + 1 nicht abhängige Durchläufe mit unterschiedlichen Engpässen über unterschiedliche Befehls-Streamer an Hardware zur parallelen Ausführung). Im Verarbeitungsblock 1970 werden die nicht abhängigen Durchläufe mit unterschiedlichen Engpässen des Frames X + 1 über verschiedene Befehls-Streamer zur parallelen Ausführung der Hardware vorgelegt.
  • Im Entscheidungsblock 1980 wird eine Bestimmung bezüglich dessen ausgeführt, ob nicht abhängige Durchläufe als Kandidaten für die Parallelisierung verbleiben. Wenn ja, wird die Steuerung an den Verarbeitungsblock 1920 zurückgegeben, wo abermals ein Graph von Zügen und/oder Bildsynthesedurchläufen für den Frame X erzeugt wird. Andernfalls wird eine Bestimmung bezüglich dessen ausgeführt, ob es weitere Frames zu verarbeiten gibt. Wenn ja, wird die Steuerung an den Verarbeitungsblock 1910 zurückgegeben, wo die Arbeit für einen nachfolgenden Frame empfangen wird. Wenn nicht, ist der Prozess abgeschlossen.
  • In einigen Ausführungsformen kann eine Konkurrenz um gemeinsame, gemeinsam genutzte Betriebsmittel auftreten, wann immer zwei Aufgaben in einem einzigen Prozessor ausgeführt werden. In den oben beschriebenen Ausführungsformen können die Aufgaben z. B. den Zugriff auf einen gemeinsamen EU-„Thread“-Pool gemeinsam benutzen. In dieser Situation kann es vorteilhaft sein, die Arbeit einer Aufgabe gegenüber der Arbeit der anderen Aufgabe bei einem bestimmten gemeinsamen Verarbeitungselement zu priorisieren. In einer Ausführungsform wird dies über die Auswahl in der lokalen „Thread“-Abfertigung (TDL) ausgeführt. Es wird die oben beschriebene Ausführungsform betrachtet, in der vorgesehen ist, dass die Rechenarbeit mit Engpässen des Frames X die Z-Arbeit mit Engpässen des Frames X + 1 überlappt. In diesem Fall sollten die meisten EU-„Threads“ für die Rechenarbeit des Frames X verwendet werden. Es ist jedoch nicht erwünscht, dass die Rechenarbeit alle EU-„Threads“ ausfüllt, wobei folglich verhindert wird, dass die Z-Arbeit (die eine kleine Anzahl von EU-„Threads“ benötigt) vorwärts Fortschritte macht.
  • Gemäß einer Ausführungsform wird der Rechenarbeit des Frames X eine geringe Priorität gegeben, um dieses Problem zu lösen. In einer derartigen Ausführungsform identifiziert der Mechanismus 1410 für die asynchrone Ausführung die Rechenarbeit des Frames X zum Zeitpunkt der Vorlage über einen speziellen Vorlageweg zur Hardware (z. B. über einen separaten Hardware-Kontakt oder einen speziellen Merker im Befehlsstrom) als ‚niedrige Priorität‘. Während die Maschine beide Aufgaben ausführt und der TDL signalisiert wird, dass ein oder mehrere EU-„Threads“ für neue Arbeit verfügbar sind, kann die Maschine einen von mehreren prioritätsbasierten Abfertigungsmechanismen wählen. Ein derartiger Mechanismus bestimmt, dass ein „Thread“ mit hoher Priorität (z. B. die Z-Arbeit vom Frame X + 1) bei einer Bestimmung, dass er bereit zur Ausführung ist, vorgelegt wird. Andernfalls wird ein „Thread“ mit niedriger Priorität vorgelegt. Ein weiterer Mechanismus bestimmt, dass, falls ein bestimmter Prozentsatz der verfügbaren „Threads“ bereits durch „Threads“ mit niedriger Priorität belegt ist, keine weiteren „Threads“ mit niedriger Priorität vorgelegt werden, bis einige der „Threads“ mit niedriger Priorität stillgelegt werden; folglich wird etwas freier Platz in der Maschine für „Threads“ mit hoher Priorität garantiert.
  • Obwohl er oben bezüglich des frühen Teils einer GPU-Verarbeitungspipeline erörtert worden ist, kann der Mechanismus 1410 für die asynchrone Ausführung verallgemeinert werden, um für viele andere Situationen zu gelten. Andere Verarbeitungselemente, die basierend auf den Aufgabenmerkmalen unabhängig Engpässen aufweisen können, könnten z. B. Hardware-Erweiterungen empfangen, um eine parallele Ausführung und eine Neuzuweisung von Betriebsmitteln zu ermöglichen, wodurch die Software dann ein intelligentes Planen anwenden könnte, um die Verwendung der Verarbeitungselemente zu maximieren.
  • Die folgenden Klauseln und/oder Beispiele betreffen weitere Ausführungsformen oder Beispiele. Die Spezifikationen in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der verschiedenen Ausführungsformen oder Beispiele können verschieden kombiniert werden, wobei einige Merkmale eingeschlossen und andere ausgeschlossen sind, um sich für verschiedene unterschiedliche Anwendungen zu eignen. Die Beispiele können den Gegenstand, wie z. B, ein Verfahren, die Mittel zum Ausführen der Handlungen des Verfahrens, wenigstens ein maschinenlesbares Medium, das Anweisungen enthält, die, wenn sie durch eine Maschine ausgeführt werden, die Maschine veranlassen, die Handlungen des Verfahrens auszuführen, oder eine Vorrichtung oder ein System zum Fördern der hybriden Kommunikation gemäß den hier beschriebenen Ausführungsformen und Beispielen enthalten.
  • Einige Ausführungsformen betreffen das Beispiel 1, das eine Vorrichtung, um die asynchrone Ausführung in einer Verarbeitungseinheit zu fördern, enthält, die einen oder mehrere Prozessoren umfasst, um unabhängige Aufgabendurchläufe zu detektieren, die in einer Pipeline der Verarbeitungseinheit außerhalb der Reihenfolge ausgeführt werden können, um einen ersten Satz von Verarbeitungsaufgaben zu planen, die in einem ersten Satz von Verarbeitungselementen in der Verarbeitungseinheit auszuführen sind, und um einen zweiten Satz von Aufgaben zu planen, die in einem zweiten Satz von Verarbeitungselementen auszuführen sind, wobei die Ausführung des ersten Satzes von Aufgaben in dem ersten Satz von Verarbeitungselementen gleichzeitig und parallel zur Ausführung des zweiten Satzes von Aufgaben in dem zweiten Satz von Verarbeitungselementen ausgeführt werden soll.
  • Das Beispiel 2 enthält den Gegenstand des Beispiels 1, wobei der eine oder die mehreren Prozessoren ferner den ersten und den zweiten Satz von Verarbeitungsaufgaben in einem dritten Satz von Verarbeitungselementen planen.
  • Das Beispiel 3 enthält den Gegenstand der Beispiele 1 und 2, wobei der eine oder die mehreren Prozessoren den ersten Satz von Aufgaben an eine erste Warteschlange senden und den zweiten Satz von Aufgaben an eine zweite Warteschlange senden.
  • Das Beispiel 4 enthält den Gegenstand der Beispiele 1-3, wobei der eine oder die mehreren Prozessoren den ersten Satz von Aufgaben an einen ersten Befehls-Streamer in der Verarbeitungseinheit senden und den zweiten Satz von Aufgaben an einen zweiten Befehls-Streamer senden.
  • Das Beispiel 5 enthält den Gegenstand der Beispiele 1-4, wobei der eine oder die mehreren Prozessoren Informationen empfangen, die unabhängige Aufgaben spezifizieren.
  • Das Beispiel 6 enthält den Gegenstand der Beispiele 1-5, wobei die Informationen einen gerichteten azyklischen Graphen umfassen.
  • Das Beispiel 7 enthält den Gegenstand der Beispiele 1-6, wobei der gerichtete azyklische Graph mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  • Das Beispiel 8 enthält den Gegenstand der Beispiele 1-7, wobei der eine oder die mehreren Prozessoren einen gerichteten azyklischen Graphen erzeugen.
  • Das Beispiel 9 enthält den Gegenstand der Beispiele 1-8, wobei der eine oder die mehreren Prozessoren identifizieren, ob ein erster Aufgabendurchlauf einen ersten Engpass in dem ersten Satz von Verarbeitungselementen aufweist und ein zweiter Durchlauf einen zweiten Engpass in dem zweiten Satz von Verarbeitungselementen aufweist.
  • Das Beispiel 10 enthält den Gegenstand der Beispiele 1-9, wobei der eine oder die mehreren Prozessoren den ersten Aufgabendurchlauf und den zweiten Aufgabendurchlauf basierend auf dem Identifizieren des ersten Engpasses und des zweiten Engpasses parallel planen.
  • Einige Ausführungsformen betreffen das Beispiel 11, das ein Verfahren enthält, um die asynchrone Ausführung in einer Verarbeitungseinheit zu fördern, das Folgendes umfasst: Detektieren unabhängiger Aufgabendurchläufe, die in einer Pipeline der Verarbeitungseinheit außerhalb der Reihenfolge ausgeführt werden können, Planen eines ersten Satzes von Verarbeitungsaufgaben, die in einem ersten Satz von Verarbeitungselementen in der Verarbeitungseinheit auszuführen sind, und Planen eines zweiten Satzes von Aufgaben, die in einem zweiten Satz von Verarbeitungselementen auszuführen sind, wobei die Ausführung des ersten Satzes von Aufgaben in dem ersten Satz von Verarbeitungselementen gleichzeitig und parallel zur Ausführung des zweiten Satzes von Aufgaben in dem zweiten Satz von Verarbeitungselementen ausgeführt werden soll.
  • Das Beispiel 12 enthält den Gegenstand des Beispiels 11 und umfasst ferner das Planen des ersten und des zweiten Satzes von Verarbeitungsaufgaben in einem dritten Satz von Verarbeitungselementen.
  • Das Beispiel 13 enthält den Gegenstand der Beispiele 11 und 12 und umfasst ferner das Senden des ersten Satzes von Aufgaben an einen ersten Befehls-Streamer in der Verarbeitungseinheit und das Senden des zweiten Satzes von Aufgaben an einen zweiten Befehls-Streamer.
  • Das Beispiel 14 enthält den Gegenstand der Beispiele 11-13 und umfasst ferner das Empfangen eines gerichteten azyklischen Graphen, der mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  • Das Beispiel 15 enthält den Gegenstand der Beispiele 11-14 und umfasst ferner das Erzeugen eines gerichteten azyklischen Graphen, der mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  • Einige Ausführungsformen betreffen das Beispiel 16, das wenigstens ein computerlesbares Medium mit darin gespeicherten Anweisungen enthält, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren veranlassen, unabhängige Aufgabendurchläufe zu detektieren, die in einer Pipeline der Verarbeitungseinheit außerhalb der Reihenfolge ausgeführt werden können, einen ersten Satz von Verarbeitungsaufgaben zu planen, die in einem ersten Satz von Verarbeitungselementen in der Verarbeitungseinheit auszuführen sind, und einen zweiten Satz von Aufgaben zu planen, die in einem zweiten Satz von Verarbeitungselementen auszuführen sind, wobei die Ausführung des ersten Satzes von Aufgaben in dem ersten Satz von Verarbeitungselementen gleichzeitig und parallel zur Ausführung des zweiten Satzes von Aufgaben in dem zweiten Satz von Verarbeitungselementen ausgeführt werden soll.
  • Das Beispiel 17 enthält den Gegenstand des Beispiels 16, das darin gespeicherte Anweisungen aufweist, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren ferner veranlassen, den ersten und den zweiten Satz von Verarbeitungsaufgaben in einem dritten Satz von Verarbeitungselementen zu planen.
  • Das Beispiel 18 enthält den Gegenstand der Beispiele 16 und 17, das darin gespeicherte Anweisungen aufweist, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren ferner veranlassen, den ersten Satz von Aufgaben an einen ersten Befehls-Streamer in der Verarbeitungseinheit zu senden und den zweiten Satz von Aufgaben an einen zweiten Befehls-Streamer zu senden.
  • Das Beispiel 19 enthält den Gegenstand der Beispiele 16-18, das darin gespeicherte Anweisungen aufweist, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren ferner veranlassen, einen gerichteten azyklischen Graphen zu empfangen, der mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  • Das Beispiel 20 enthält den Gegenstand der Beispiele 16-19, das darin gespeicherte Anweisungen aufweist, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren ferner veranlassen, zu identifizieren, ob ein erster Ausgabendurchlauf einen ersten Engpass in dem ersten Satz von Verarbeitungselementen aufweist und ein zweiter Durchlauf einen zweiten Engpass in dem zweiten Satz von Verarbeitungselementen aufweist.
  • Die Erfindung ist oben bezüglich spezifischer Ausführungsformen beschrieben worden. Die Fachleute auf dem Gebiet erkennen jedoch, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom breiteren Erfindungsgedanken und Schutzumfang der Erfindung, wie sie in den beigefügten Ansprüchen dargelegt sind, abzuweichen. Die vorstehende Beschreibung und die Zeichnungen sind entsprechend in einem veranschaulichenden anstatt in einem einschränkenden Sinn zu betrachten.

Claims (16)

  1. Vorrichtung, um die asynchrone Ausführung in einer Verarbeitungseinheit zu fördern, die Folgendes umfasst: einen oder mehrere Prozessoren, um unabhängige Aufgabendurchläufe zu detektieren, die in einer Pipeline der Verarbeitungseinheit außerhalb der Reihenfolge ausgeführt werden können, um einen ersten Satz von Verarbeitungsaufgaben zu planen, die in einem ersten Satz von Verarbeitungselementen in der Verarbeitungseinheit auszuführen sind, und um einen zweiten Satz von Aufgaben zu planen, die in einem zweiten Satz von Verarbeitungselementen auszuführen sind, wobei die Ausführung des ersten Satzes von Aufgaben in dem ersten Satz von Verarbeitungselementen gleichzeitig und parallel zur Ausführung des zweiten Satzes von Aufgaben in dem zweiten Satz von Verarbeitungselementen ausgeführt werden soll.
  2. Vorrichtung nach Anspruch 1, wobei der eine oder die mehreren Prozessoren ferner den ersten und den zweiten Satz von Verarbeitungsaufgaben in einem dritten Satz von Verarbeitungselementen planen.
  3. Vorrichtung nach Anspruch 1 oder 2, wobei der eine oder die mehreren Prozessoren den ersten Satz von Aufgaben an eine erste Warteschlange senden und den zweiten Satz von Aufgaben an eine zweite Warteschlange senden.
  4. Vorrichtung nach den Ansprüchen 1-3, wobei der eine oder die mehreren Prozessoren den ersten Satz von Aufgaben an einen ersten Befehls-Streamer in der Verarbeitungseinheit senden und den zweiten Satz von Aufgaben an einen zweiten Befehls-Streamer senden.
  5. Vorrichtung nach den Ansprüchen 1-4, wobei der eine oder die mehreren Prozessoren Informationen empfangen, die unabhängige Aufgaben spezifizieren.
  6. Vorrichtung nach den Ansprüchen 1-5, wobei die Informationen einen gerichteten azyklischen Graphen umfassen.
  7. Vorrichtung nach den Ansprüchen 1-6, wobei der gerichtete azyklische Graph mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  8. Vorrichtung nach den Ansprüchen 1-4, wobei der eine oder die mehreren Prozessoren einen gerichteten azyklischen Graphen erzeugen.
  9. Vorrichtung nach den Ansprüchen 1-8, wobei der eine oder die mehreren Prozessoren identifizieren, ob ein erster Aufgabendurchlauf einen ersten Engpass in dem ersten Satz von Verarbeitungselementen aufweist und ein zweiter Durchlauf einen zweiten Engpass in dem zweiten Satz von Verarbeitungselementen aufweist.
  10. Vorrichtung nach den Ansprüchen 1-9, wobei der eine oder die mehreren Prozessoren den ersten Aufgabendurchlauf und den zweiten Aufgabendurchlauf basierend auf dem Identifizieren des ersten Engpasses und des zweiten Engpasses parallel planen.
  11. Verfahren, um die asynchrone Ausführung in einer Verarbeitungseinheit zu fördern, das Folgendes umfasst: Detektieren unabhängiger Aufgabendurchläufe, die in einer Pipeline der Verarbeitungseinheit außerhalb der Reihenfolge ausgeführt werden können; Planen eines ersten Satzes von Verarbeitungsaufgaben, die in einem ersten Satz von Verarbeitungselementen in der Verarbeitungseinheit auszuführen sind; und Planen eines zweiten Satzes von Aufgaben, die in einem zweiten Satz von Verarbeitungselementen auszuführen sind, wobei die Ausführung des ersten Satzes von Aufgaben in dem ersten Satz von Verarbeitungselementen gleichzeitig und parallel zur Ausführung des zweiten Satzes von Aufgaben in dem zweiten Satz von Verarbeitungselementen ausgeführt werden soll.
  12. Verfahren nach Anspruch 11, das ferner das Planen des ersten und des zweiten Satzes von Verarbeitungsaufgaben in einem dritten Satz von Verarbeitungselementen umfasst.
  13. Verfahren nach Anspruch 11 oder 12, das ferner Folgendes umfasst: Senden des ersten Satzes von Aufgaben an einen ersten Befehls-Streamer in der Verarbeitungseinheit; und Senden des zweiten Satzes von Aufgaben an einen zweiten Befehls-Streamer.
  14. Verfahren nach den Ansprüchen 11-13, das ferner das Empfangen eines gerichteten azyklischen Graphen umfasst, der mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  15. Verfahren nach den Ansprüchen 11-14, das ferner das Erzeugen eines gerichteten azyklischen Graphen umfasst, der mehrere Knoten, die Einheiten von Aufgaben repräsentieren, und mehrere Ränder, die die Betriebsmittelabhängigkeit zwischen den Operationen repräsentieren, umfasst.
  16. Wenigstens ein computerlesbares Medium mit darin gespeicherten Anweisungen, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren veranlassen, ein Verfahren nach einem der Ansprüche 11-15 auszuführen.
DE102020113789.3A 2019-06-21 2020-05-22 Asynchroner ausführungsmechanismus Pending DE102020113789A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/449,034 2019-06-21
US16/449,034 US10861126B1 (en) 2019-06-21 2019-06-21 Asynchronous execution mechanism

Publications (1)

Publication Number Publication Date
DE102020113789A1 true DE102020113789A1 (de) 2020-12-24

Family

ID=73653473

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020113789.3A Pending DE102020113789A1 (de) 2019-06-21 2020-05-22 Asynchroner ausführungsmechanismus

Country Status (2)

Country Link
US (2) US10861126B1 (de)
DE (1) DE102020113789A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10861126B1 (en) * 2019-06-21 2020-12-08 Intel Corporation Asynchronous execution mechanism
US11977933B2 (en) * 2019-12-19 2024-05-07 Advanced Micro Devices, Inc. Gang scheduling with an onboard graphics processing unit and user-based queues
US11481256B2 (en) * 2020-05-29 2022-10-25 Advanced Micro Devices, Inc. Task graph scheduling for workload processing

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5768594A (en) * 1995-07-14 1998-06-16 Lucent Technologies Inc. Methods and means for scheduling parallel processors
US8749561B1 (en) * 2003-03-14 2014-06-10 Nvidia Corporation Method and system for coordinated data execution using a primary graphics processor and a secondary graphics processor
US7466316B1 (en) * 2004-12-14 2008-12-16 Nvidia Corporation Apparatus, system, and method for distributing work to integrated heterogeneous processors
US20060282604A1 (en) * 2005-05-27 2006-12-14 Ati Technologies, Inc. Methods and apparatus for processing graphics data using multiple processing circuits
US20090007115A1 (en) * 2007-06-26 2009-01-01 Yuanhao Sun Method and apparatus for parallel XSL transformation with low contention and load balancing
US8839012B2 (en) * 2009-09-08 2014-09-16 Advanced Micro Devices, Inc. Power management in multi-GPU systems
EP2383648B1 (de) * 2010-04-28 2020-02-19 Telefonaktiebolaget LM Ericsson (publ) Technik zur GPU-Befehlanordnung
US9442759B2 (en) * 2011-12-09 2016-09-13 Nvidia Corporation Concurrent execution of independent streams in multi-channel time slice groups
US8984183B2 (en) * 2011-12-16 2015-03-17 Nvidia Corporation Signaling, ordering, and execution of dynamically generated tasks in a processing system
US9019289B2 (en) * 2012-03-07 2015-04-28 Qualcomm Incorporated Execution of graphics and non-graphics applications on a graphics processing unit
GB2516995B (en) * 2013-12-18 2015-08-19 Imagination Tech Ltd Task execution in a SIMD processing unit
US10217183B2 (en) * 2013-12-20 2019-02-26 Nvidia Corporation System, method, and computer program product for simultaneous execution of compute and graphics workloads
TW201626218A (zh) * 2014-09-16 2016-07-16 輝達公司 傳遞api的相依性的技術
US9678806B2 (en) * 2015-06-26 2017-06-13 Advanced Micro Devices, Inc. Method and apparatus for distributing processing core workloads among processing cores
US10134103B2 (en) * 2015-10-23 2018-11-20 Qualcomm Incorporated GPU operation algorithm selection based on command stream marker
JP6945634B2 (ja) * 2017-08-30 2021-10-06 富士フイルム株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
US10861126B1 (en) * 2019-06-21 2020-12-08 Intel Corporation Asynchronous execution mechanism

Also Published As

Publication number Publication date
US10861126B1 (en) 2020-12-08
US20200402196A1 (en) 2020-12-24
US20210256653A1 (en) 2021-08-19
US11494867B2 (en) 2022-11-08

Similar Documents

Publication Publication Date Title
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE112018005527T5 (de) Automatisches aufwecken von leistungsdomänen fürgrafikkonfigurationsanforderungen
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102019117495A1 (de) System und verfahren zur 3d-blob-klassifizierung und -übertragung
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus
DE102020130880A1 (de) Mechanismus zur partitionierung eines geteilten lokalen speichers
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020115578A1 (de) Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln
DE102020132871A1 (de) Verbessern von hierarchischer tiefenpuffer-cullingeffizienz durch maskenakkumulation
DE102020113789A1 (de) Asynchroner ausführungsmechanismus
DE102020105902A1 (de) Hardware-indexzuordnungsmechanismus
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020106002A1 (de) Dynamischer lastausgleich von rechenanlagen unter unterschiedlichen rechenkontexten
DE102020129625A1 (de) Seitentabellen-mapping-mechanismus
DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
DE102020113400A1 (de) Registerteilungsmechanismus
DE112018003999T5 (de) Verfahren und Vorrichtung für effiziente Verarbeitung von abgeleiteten einheitlichen Werten in einem Grafikprozessor
DE102022119733A1 (de) Sammeln von nutzdaten aus beliebigen registern für sende-nachrichten in einer grafikumgebung
DE102020104651A1 (de) Arbeitsspeicherkomprimierungs-Hashmechanismus
DE102019123443A1 (de) Mechanismus zum gemeinsamen Benutzen von Registern
DE102021123500A1 (de) Vereinheitlichter Speicherkompressionsmechanismus
DE102020130847A1 (de) Dynamischer aktualisierungsmechanismus für konstanten
DE102020133275A1 (de) Compiler-unterstützte registerdatei-schreibverringerung
DE102020132088A1 (de) Berechnung effizienter kanalübergreifender operationen in parallelrechenmaschinen mit systolischen arrays