DE102020126551A1 - Paralleler dekomprimierungsmechanismus - Google Patents

Paralleler dekomprimierungsmechanismus Download PDF

Info

Publication number
DE102020126551A1
DE102020126551A1 DE102020126551.4A DE102020126551A DE102020126551A1 DE 102020126551 A1 DE102020126551 A1 DE 102020126551A1 DE 102020126551 A DE102020126551 A DE 102020126551A DE 102020126551 A1 DE102020126551 A1 DE 102020126551A1
Authority
DE
Germany
Prior art keywords
compressed data
graphics
data component
data
compressed
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
DE102020126551.4A
Other languages
English (en)
Inventor
Abhishek R. Appu
Prasoonkumar Surti
Karthik Vaidyanathan
Karol Szerszen
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 DE102020126551A1 publication Critical patent/DE102020126551A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0884Parallel mode, e.g. in parallel with main memory or CPU
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0886Variable-length word access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • 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)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Image Generation (AREA)

Abstract

Eine Einrichtung zum Ermöglichen des Packens von komprimierten Daten wird offenbart. Die Einrichtung beinhaltet Komprimierungshardware, um Speicherdaten in mehrere komprimierte Datenkomponenten zu komprimieren, und Packhardware, um die mehreren komprimierten Datenkomponenten zu empfangen und eine erste der mehreren komprimierten Datenkomponenten zu packen, beginnend bei einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms, und eine zweite der mehreren komprimierten Datenkomponenten zu packen, beginnend bei einem höchstwertigen Bit (Most Significant Bit, MSB) des komprimierten Bitstroms.

Description

  • GEBIET DER ERFINDUNG
  • Diese Erfindung betrifft allgemein die Grafikverarbeitung und insbesondere die Speicherdatenkomprimierung.
  • HINTERGRUND DER BESCHREIBUNG
  • Grafikverarbeitungseinheiten (Graphics Processing Units, GPUs) sind Thread-intensive Maschinen, in denen Hunderte von Threads eines Programms parallel ausgeführt werden, um einen hohen Durchsatz zu erzielen. GPU-Thread-Gruppen sind in Mesh-Shading-Anwendungen implementiert, um ein dreidimensionales (3D) Rendering durchzuführen. Aufgrund zunehmend komplexerer GPUs, die eine hohe Rechenleistung erfordern, besteht die Herausforderung darin, mit den hohen Anforderungen an die Speicherbandbreite Schritt zu halten. Somit ist eine Bandbreitenkomprimierung zu einem kritischen Aspekt geworden, durch den sichergestellt werden soll, dass Hardware/Speicher-Subsysteme eine erforderliche Bandbreite unterstützen.
  • Figurenliste
  • Damit die Art und Weise, wie die vorstehend genannten Merkmale der vorliegenden Erfindung im Einzelnen funktionieren, verstanden werden kann, kann eine genauere Beschreibung der vorstehend zusammengefassten Erfindung anhand der Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es ist jedoch anzumerken, dass die beigefügten Zeichnungen lediglich typische Ausführungsformen dieser Erfindung darstellen und daher nicht im Sinne einer Einschränkung des Schutzumfangs zu verstehen sind, da die Erfindung andere ebenso wirksame Ausführungsformen zulassen kann.
    • 1 ist ein Blockschaltbild eines Verarbeitungssystems gemäß einer Ausführungsform,
    • Die 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die von hier beschriebenen Ausführungsformen bereitgestellt werden;
    • Die 3A-3C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleuniger-Architekturen, die von Ausführungsformen bereitgestellt werden;
    • 4 ist ein Blockschaltbild einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen Ausführungsformen;
    • Die 5A-5B veranschaulichen eine Thread-Ausführungslogik 500, die eine Anordnung von Verarbeitungselementen beinhaltet, welche in einem Grafikprozessorkern gemäß Ausführungsformen eingesetzt wird;
    • 6 veranschaulicht eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform;
    • 7 ist ein Blockschaltbild, das Grafikprozessor-Anweisungsformate gemäß einigen Ausführungsformen veranschaulicht;
    • 8 ist ein Blockschaltbild eines Grafikprozessors gemäß einer anderen Ausführungsform;
    • 9A u. 9B veranschaulichen ein Grafikprozessor-Befehlsformat und eine Befehlsfolge gemäß einigen Ausfiihrungsformen;
    • 10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen;
    • Die 11A-11D veranschaulichen die Gehäusebaugruppe einer integrierten Schaltung gemäß einer Ausführungsform;
    • 12 ist ein Blockschaltbild, das eine beispielhafte integrierte Schaltung eines Ein-Chip-Systems gemäß einer Ausführungsform veranschaulicht;
    • 13A/13B ist ein Blockschaltbild, das einen zusätzlichen beispielhaften Grafikprozessor veranschaulicht;
    • 14 veranschaulicht eine Ausführungsform einer Rechenvorrichtung;
    • 15 veranschaulicht eine Ausführungsform einer Grafikverarbeitungseinheit;
    • 16 veranschaulicht eine Ausführungsform eines Steuerungscaches;
    • 17 veranschaulicht das Packen komprimierter Daten;
    • 18 veranschaulicht eine Ausführungsform eines gespiegelten Komprimierungspackens;
    • 19 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Durchführen eines gespiegelten Komprimierungspackens veranschaulicht; und
    • 20 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Durchführen einer parallelen Dekomprimierung veranschaulicht.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die nachstehende Beschreibung enthält eine Reihe spezifischer Einzelheiten, um ein gründlicheres Verständnis der vorliegenden Erfindung zu vermitteln. Es wird jedoch einem Fachmann auf diesem Gebiet klar sein, dass die vorliegende Erfindung ohne eine oder mehrere dieser spezifischen Einzelheiten ausgeführt werden kann. In anderen Fällen wurden ausreichend bekannte Merkmale nicht beschrieben, um zu vermeiden, dass die vorliegende Erfindung unklar wird.
  • In Ausführungsformen werden komprimierte Datenkomponenten in einem gespiegelten Format gepackt, sodass eine erste komprimierte Datenkomponente beginnend an einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines Bitstroms gepackt wird und eine zweite komprimierte Datenkomponente an einer höchstwertigen Bitposition (Most Significant Bit, MSB) des Bitstroms gepackt wird. In weiteren Ausführungsformen werden die erste und die zweite Datenkomponente parallel dekomprimiert.
  • Svstemüberblick
  • 1 ist ein Blockschaltbild eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Einzelprozessor-Desktopsystem, einem Mehrprozessor-Arbeitsstationssystem oder einem Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in die integrierte Schaltung eines Ein-Chip-Systems (System-on-a-Chip, SoC) aufgenommen wird und für den Einsatz in mobilen, handgehaltenen oder eingebetteten Vorrichtungen ausgelegt ist, wie etwa in IoT (Internet of Things)-Vorrichtungen mit drahtgebundener oder drahtloser Anbindung an ein lokales oder ein Weitverkehrsnetz.
  • In einer Ausführungsform kann das System 100 eine serverbasierte Gaming-Plattform, eine Spielekonsole, einschließlich einer Spiel- und Medienkonsole, eine mobile Gaming-Konsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole beinhalten, mit dieser gekoppelt sein oder in eine solche integriert sein. In einigen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Rechenvorrichtung oder einer mobilen Internet-verbundenen Vorrichtung wie etwa einem Laptop mit geringer interner Datenspeicherkapazität. Das Verarbeitungssystem 100 kann auch beinhalten, gekoppelt sein mit oder integriert sein in: tragbare Vorrichtungen, wie etwa eine am Körper tragbare SmartWatch-Vorrichtung; intelligente Brillen oder Kleidung, die um AR (Augmented Reality)-Merkmale oder VR (Virtual Reality)-Merkmale erweitert sind, um visuelle, akustische oder taktile Ausgaben bereitzustellen, um eine reale visuelle, akustische oder taktile Erfahrung zu ergänzen oder sonstwie Text, Audiodaten, Grafiken, Video, holografische Bilder oder Videos oder eine taktile Rückmeldung bereitzustellen; eine andere AR (Augmented Reality)-Vorrichtung; oder eine andere VR (Virtual Reality)-Vorrichtung. In einigen Ausführungsformen beinhaltet das Verarbeitungssystem 100 ein Fernsehgerät oder ein Beistellgerät (Set-Top-Box). In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug wie etwa einen Bus, einen Traktor, einen Anhänger, ein Auto, einen Motor oder ein elektrisches Kraftrad, ein Flugzeug oder einen Gleiter (oder eine beliebige Kombination davon) beinhalten, hiermit gekoppelt sein oder dann integriert sein. Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die Umgebung zu verarbeiten, die um das Fahrzeug herum erkannt wird.
  • In einigen Ausführungsformen weisen die ein oder mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Anweisungen auf, die, wenn sie ausgeführt werden, Operationen für System- oder Benutzersoftware durchführen. In einigen Ausführungsformen ist wenigstens einer der ein oder mehreren Prozessorkerne 107 dafür ausgelegt, einen bestimmten Anweisungssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Anweisungssatz 109 eine Verarbeitung komplexer Anweisungssätze (Complex Instruction Set Computing, CISC), eine Verarbeitung reduzierter Anweisungssätze (Reduced Instruction Set Computing, RISC) oder eine Verarbeitung über ein sehr langes Anweisungswort (Very Long Instruction Word, VLIW) ermöglichen. Ein oder mehrere Prozessorkerne 107 können einen unterschiedlichen Anweisungssatz 109 verarbeiten, der Anweisungen zum Ermöglichen der Emulation anderer Anweisungssätze beinhalten kann. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen beinhalten, wie etwa einen Digitalsignalprozessor (Digital Signal Processor, DSP).
  • In einigen Ausführungsformen weist der Prozessor 102 Cache-Speicher 104 auf. Je nach Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen (Levels) von internem Cache aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 102 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 102 auch einen externen Cache (z.B. einen Level-3 (L3)-Cache oder einen (nicht gezeigten) Cache der letzten Ebene (Last Level Cache, LLC), der von Prozessorkernen 107 unter Verwendung bekannter Cache-Kohärenz-Techniken gemeinsam genutzt werden kann. Eine Registerdatei 106 kann zusätzlich im Prozessor 102 enthalten sein und kann unterschiedliche Arten von Registern zum Speichern von unterschiedlichen Datentypen enthalten (z. B. Ganzzahlenregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister). Bei einigen Registern kann es sich um Universalregister handeln, während andere Register spezifisch für den Entwurf des Prozessors 102 sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessoren 102 mit einem oder mehreren Schnittstellenbussen 110 gekoppelt, um Kommunikationssignale wie etwa Adressen, Daten oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten im System 100 zu übertragen. Der Schnittstellenbus 110 kann, in einer Ausführungsform, ein Prozessorbus sein, wie etwa eine Version des DMI (Direct Media Interface)-Busses. Allerdings sind Prozessorbusse nicht auf den DMI-Bus beschränkt und können einen oder mehrere PCI (Peripheral Component Interconnect)-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. In einer Ausführungsform weisen die Prozessoren 102 eine integrierte Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 auf. Die Speichersteuerung 116 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuerungsknoten (Platform Controller Hub, PCH) 130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Bei der Speichervorrichtung 120 kann es sich um eine dynamische Direktzugriff-Speichervorrichtung (Dynamic Random Access Memory, DRAM), eine statische Direktzugriff-Speichervorrichtung (Static Random Access Memory, SRAM), eine Flash-Speichervorrichtung, eine Phasenwechsel-Speichervorrichtung oder irgendeine andere Speichervorrichtung handeln, die über eine geeignete Leistung verfügt, um als Prozessorspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 betrieben werden, um Daten 122 und Anweisungen 121 zu speichern, die verwendet werden, wenn die ein oder mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 116 ist auch mit einem optionalen externen Grafikprozessor 118 gekoppelt, der mit den ein oder mehreren Grafikprozessoren 108 in Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, bei dem es sich um einen Coprozessor handelt, der dafür ausgelegt sein kann, einen Spezialsatz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Beispielsweise ist, in einer Ausführungsform, der Beschleuniger 112 ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um Maschinenlern- oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Raytracing-Beschleuniger, der verwendet werden kann, um zusammen mit dem Grafikprozessor 108 Raytracing-Operationen durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle des oder zusammen mit dem Beschleuniger 112 verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem bzw. den Prozessor(en) 102 verbunden sein. Bei der Anzeigevorrichtung 111 kann es sich um eines oder mehrere von einer internen Anzeigevorrichtung, wie beispielsweise in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort etc.) angeschlossen ist, handeln. In einer Ausführungsform kann es sich bei der Anzeigevorrichtung 111 um eine kopfmontierte Anzeige (Head-mounted Display, HMD) wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in VR (Virtual Reality)-Anwendungen oder AR (Augmented Reality)-Anwendungen handeln.
  • In einigen Ausführungsformen ermöglicht es der Plattformsteuerungsknoten 130 Peripheriegeräten, eine Verbindung zur Speichervorrichtung 120 und dem Prozessor 102 über einen E/A-Hochgeschwindigkeitsbus herzustellen. Die E/A-Peripheriegeräte beinhalten, ohne jedoch hierauf beschränkt zu sein, eine Audiosteuerung 146, eine Netzsteuerung 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z.B. nichtflüchtigen Speicher, flüchtigen Speicher, ein Festplattenlaufwerk, Flash-Speicher, NAND, 3D NAND, 3D XPoint etc.). Die Datenspeichervorrichtung 124 kann eine Verbindung über eine Datenspeicherschnittstelle (z.B. SATA) oder über einen Peripheriebus, wie etwa einen PCI (Peripheral Component Interconnect)-Bus (z.B. PCI, PCI Express), herstellen. Die Berührungssensoren 125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. Bei dem drahtlosen Sendeempfänger 126 kann es sich um einen WiFi-Sendeempfänger, einen Bluetooth-Sendeempfänger oder einen Mobilnetz-Sendeempfänger wie etwa einen 3G-, 4G-, 5G- oder LTE (Long Term Evolution)-Sendeempfänger handeln. Die Firmware-Schnittstelle 128 ermöglicht eine Kommunikation mit der Systemfirmware; hierbei kann es sich beispielsweise um eine vereinheitlichte erweiterbare Firmware-Schnittstelle (Unified Extensible Firmware Interface, UEFI) handeln. Die Netzsteuerung 134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen ist eine (nicht gezeigte) Hochleistungs-Netzsteuerung mit dem Schnittstellenbus 110 gekoppelt. Die Audiosteuerung 146 ist, in einer Ausführungsform, eine hochauflösende Mehrkanal-Audiosteuerung. In einer Ausführungsform beinhaltet das System 100 eine optionale E/A-Altsteuerung 140 für das Koppeln von Altgeräten (z.B. PS/2 (Personal System 2)) mit dem System. Der Plattformsteuerungsknoten 130 kann auch eine Verbindung zu einer oder mehreren USB (Universal Serial Bus)-Steuerungen 142 herstellen, um Eingabevorrichtungen wie etwa Kombinationen von Tastatur und Maus 143, eine Kamera 144 oder andere USB-Eingabevorrichtungen zu verbinden.
  • Es versteht sich, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, da auch andere Arten von Datenverarbeitungssystemen, die anders ausgestaltet sind, verwendet werden können. Beispielsweise kann eine Instanz der Speichersteuerung 116 und des Plattformsteuerungsknotens 130 in einen diskreten externen Grafikprozessor integriert sein, wie etwa den externen Grafikprozessor 118. In einer Ausführungsform können der Plattformsteuerungsknoten 130 und/oder die Speichersteuerung 116 außerhalb der ein oder mehreren Prozessoren 102 vorliegen. Beispielsweise kann das System 100 eine externe Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 beinhalten, die als Speichersteuerungsknoten und Peripheriesteuerungsknoten in einem Systemchipsatz ausgestaltet sind, der in einer Kommunikationsverbindung mit dem bzw. den Prozessoren) 102 steht.
  • Beispielsweise können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie etwa CPUs, Speicher und andere Komponenten angeordnet sind, die für eine höhere thermische Leistung ausgelegt sind. In einigen Beispielen befinden sich Verarbeitungskomponenten wie etwa die Prozessoren auf der Oberseite eines Schlittens, während sich Nahspeicher, wie etwa DIMMs, auf der Unterseite des Schlittens befinden. Resultierend aus dem verbesserten Luftstrom, der durch dieses Design bereitgestellt wird, können die Komponenten mit höheren Frequenzen und Leistungspegeln arbeiten als typische Systeme, was die Leistungsfähigkeit erhöht. Weiterhin sind die Schlitten dafür ausgelegt, blind mit Strom- und Datenkommunikationskabeln in einem Gestellrahmen zusammengefügt zu werden, was ihre Fähigkeit zum schnellen Ausbauen, Hochrüsten, Wiederinstallieren und/oder Austauschen verbessert. In ähnlicher Weise sind die Einzelkomponenten, die auf den Schlitten angeordnet sind, wie etwa Prozessoren, Beschleuniger, Arbeitsspeicher und Datenspeicherlaufwerke, dank des größeren Abstands zueinander derart ausgelegt, dass sie leicht hochgerüstet werden können. In der veranschaulichenden Ausführungsform weisen die Komponenten darüber hinaus Hardware-Bestätigungsmerkmale auf, um deren Authentizität nachzuweisen.
  • Ein Rechenzentrum kann eine einzelne Netzarchitektur („Fabric“) nutzen, die mehrere andere Netzarchitekturen unterstützt, einschließlich Ethernet und Omni-Path. Die Schlitten können mit Switches über optische Fasern gekoppelt sein, die eine höhere Bandbreite und geringere Latenz als typische Kabel mit verdrillten Leitungspaaren (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der Verbindungen und der Netzarchitektur mit hoher Bandbreite und geringer Latenz kann das Rechenzentrum im Gebrauch Ressourcen, wie etwa Arbeitsspeicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Beschleuniger für neuronale Netze und/oder künstliche Intelligenz usw.) und Datenspeicherlaufwerke zu „Pools“ zusammenfassen, die physisch getrennt sind, und sie für Rechenressourcen (z. B. Prozessoren) nach Bedarf bereitstellen, wodurch die Rechenressourcen auf die zusammengefassten Ressourcen zugreifen können, als ob sie lokal vorhanden wären.
  • Eine Stromversorgung oder Stromquelle kann Spannung und/oder Strom für das System 100 oder eine(s) der hier beschriebenen Komponenten oder Systeme bereitstellen. In einem Beispiel beinhaltet die Stromversorgung einen AC-zu-DC-Adapter (Wechselstrom zu Gleichstrom) zum Einstecken in eine Wandsteckdose. Ein solcher Wechselstrom (AC) kann von einer erneuerbaren Energiequelle (z. B. Solarenergie) stammen. In einem Beispiel beinhaltet die Stromquelle eine Gleichstromquelle (DC) wie etwa einen externen AC-zu-DC-Wandler. In einem Beispiel beinhaltet die Stromquelle oder Stromversorgung das drahtlose Laden von Hardware, um über die Nähe zu einem Ladefeld zu laden. In einem Beispiel kann die Stromquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Stromversorgung, eine Solarstromversorgung oder eine Brennstoffzellenquelle beinhalten.
  • Die 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die von hier beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von 2A-D mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein.
  • 2A ist ein Blockschaltbild einer Ausführungsform eines Prozessors 200 mit einem oder mehreren Prozessorkernen 202A-202N, einer integrierten Speichersteuerung 214 und einem integrierten Grafikprozessor 208. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N aufweisen, dargestellt durch die Kästchen mit gestrichelten Linien. Jeder der Prozessorkerne 202A-202N weist einen oder mehrere interne Cache-Einheiten 204A-204N auf. In einigen Ausführungsformen hat jeder Prozessor auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 206. Die internen Cache-Einheiten 204A-204N und die gemeinsam genutzten Cache-Einheiten 206 repräsentieren eine Cache-Speicherhierarchie im Innern des Prozessors 200. Die Cache-Speicherhierarchie kann wenigstens eine Ebene von Anweisungs- und Datencache in jedem Prozessorkern und eine oder mehrere Ebenen von gemeinsam genutztem Cache mittlerer Ebene aufweisen, wie etwa eine Ebene 2 (Level 2, L2), eine Ebene 3 (Level 3, L3), eine Ebene 4 (Level 4, L4) oder andere Ebenen von Cache, wobei die höchste Cache-Ebene vor dem externen Speicher als LLC (Last Level Cache) eingestuft wird. In einigen Ausführungsformen hält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 216 und einen Systemagentenkern 210 aufweisen. Die ein oder mehreren Bussteuerungseinheiten 216 verwalten einen Satz von Peripheriebussen, wie etwa einen oder mehrere PCI- oder PCI Express-Busse. Der Systemagentenkern 210 stellt eine Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 zum Verwalten des Zugriffs auf verschiedene (nicht gezeigte) externe Speichervorrichtungen auf.
  • In einigen Ausführungsformen bieten ein oder mehrere der Prozessorkerne 202A-202N Unterstützung für simultanes Multithreading. In einer solchen Ausführungsform weist der Systemagentenkern 210 Komponenten für das Koordinieren und Betreiben der Kerne 202A-202N während einer Multithread-Verarbeitung auf. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuerungseinheit (Power Control Unit, PCU) aufweisen, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 aufweist.
  • In einigen Ausführungsformen weist der Prozessor 200 zusätzlich einen Grafikprozessor 208 zum Ausführen von Grafikverarbeitungsoperationen auf. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz von gemeinsam genutzten Cache-Einheiten 206 und dem Systemagentenkern 210 gekoppelt, was die ein oder mehreren integrierten Speichersteuerungen 214 einschließt. In einigen Ausführungsformen weist der Systemagentenkern 210 auch eine Anzeigesteuerung 211 auf, um eine Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu treiben. In einigen Ausführungsformen kann die Anzeigesteuerung 211 auch ein getrenntes Modul sein, das über wenigstens eine Zwischenverbindung mit dem Grafikprozessor gekoppelt ist, oder kann im Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Zwischenverbindungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Allerdings kann eine alternative Zwischenverbindungseinheit verwendet werden, wie etwa eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik bestens bekannt sind. In einigen Ausführungsformen ist der Grafikprozessor 208 über eine E/A-Verbindung 213 mit der Ringzwischenverbindung 212 gekoppelt.
  • Die beispielhafte E/A-Verbindung 213 stellt wenigstens eine von mehreren Varianten von E/A-Zwischenverbindungen dar, einschließlich einer E/A-Zwischenverbindung auf dem Gehäuse, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsmodul 218, wie etwa einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen kann jeder der Prozessorkerne 202A-202N und kann der Grafikprozessor 208 eingebettete Speichermodule 218 als gemeinsam genutzten Last-Level-Cache verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die dieselbe Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Anweisungssatzarchitektur (Instruction Set Architecture, ISA) heterogen, wobei ein oder mehrere Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während wenigstens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N heterogen hinsichtlich der Mikroarchitektur, wobei ein oder mehrere Kerne, die einen relativ höheren Energieverbrauch aufweisen, mit einem oder mehreren Leistungskernen gekoppelt sind, die einen geringeren Energieverbrauch aufweisen. In einer Ausführungsform sind die Prozessorkerne 202A-202N heterogen hinsichtlich der Rechenfähigkeit. Zusätzlich kann der Prozessor 200 auf einem oder mehreren Chips oder als integrierte SoC-Schaltung mit den dargestellten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 2B ist ein Blockschaltbild von Hardwarelogik eines Grafikprozessorkerns 219 gemäß einigen hier beschriebenen Ausführungsformen. Elemente von 2B mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein. Bei dem Grafikprozessorkern 219, der manchmal als Kern-Slice bezeichnet wird, kann es sich um einen oder mehrere Grafikkerne in einem modularen Grafikprozessor handeln. Der Grafikprozessorkern 219 ist beispielhaft für ein Grafikkern-Slice, und ein Grafikprozessor wie hier beschrieben kann mehrere Grafikkern-Slices aufweisen, basierend auf Zielleistung und Leistungshüllen. Jeder Grafikprozessorkern 219 kann einen Festfunktionsblock 230 aufweisen, der mit mehreren Teilkernen 221A-221F, auch als Sub-Slices bezeichnet, gekoppelt ist, die modulare Blöcke von Universal- und Festfunktionslogik aufweisen.
  • In einigen Ausführungsformen beinhaltet der Festfunktionsblock 230 eine Geometrie/Festfunktions-Pipeline 231, die von allen Teilkernen in dem Grafikprozessor 219 gemeinsam genutzt werden kann, beispielsweise in Grafikprozessor-Implementierungen mit geringerer Leistung und/oder geringerem Stromverbrauch. In verschiedenen Ausführungsformen weist die Geometrie/Festfunktions-Pipeline 231 eine 3D-Festfunktions-Pipeline (z. B. eine 3D-Pipeline 312 wie in 3 und 4, wie nachstehend beschrieben), eine Video-Frontend-Einheit, einen Thread-Spawner und einen Thread-Dispatcher und einen URB-Manager auf, der vereinheitlichte Rückgabepuffer verwaltet (z. B. den vereinheitlichen Rückgabepuffer 418 in 4, wie nachstehend beschrieben).
  • In einer Ausführungsform beinhaltet der Festfunktionsblock 230 auch eine Grafik-SoC-Schnittstelle 232, eine Grafik-Mikrosteuerung 233 und eine Medien-Pipeline 234. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen in einer integrierten Schaltung eines Ein-Chip-Systems bereit. Die Grafik-Mikrosteuerung 233 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 219 zu verwalten, einschließlich Thread-Versand, Zeitplanung und Präemption (Vorziehen). Die Medien-Pipeline 234 (z. B. die Medien-Pipeline 316 von 3 und 4) beinhaltet Logik, um eine Decodierung, Codierung, Vorverarbeitung und/oder Nachverarbeitung von Multimediadaten, einschließlich Bild- und Videodaten, zu ermöglichen. Die Medien-Pipeline 234 implementiert Medienoperationen über Anforderungen an die Rechen- oder Abtastlogik in den Teilkernen 221-221F.
  • In einer Ausführungsform ermöglicht es die SoC-Schnittstelle 232 dem Grafikprozessorkern 219, mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten in einem SoC, einschließlich Speicherhierarchie-Elementen wie etwa einem gemeinsam genutzten Last-Level-Cache-Speicher, dem System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM, zu kommunizieren. Die SoC-Schnittstelle 232 kann auch eine Kommunikation mit Festfunktionsvorrichtungen im SoC, wie etwa Kamera-Bildgebungspipelines, ermöglichen und ermöglicht die Verwendung globaler Speicheratome und/oder implementiert globale Speicheratome, die von dem Grafikprozessorkern 219 und CPUs im SoC gemeinsam genutzt werden können. Die SoC-Schnittstelle 232 kann auch Energieverwaltungssteuerungen für den Grafikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikprozessorkerns 219 und anderen Taktdomänen im 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-Dispatcher, die dafür ausgelegt sind, Befehle und Anweisungen für jeden der ein oder mehreren Grafikkerne in einem Grafikprozessor bereitzustellen. Die Befehle und Anweisungen können an die Medien-Pipeline 234 versendet werden, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie- und Festfunktions-Pipeline (z. B. die Geometrie- und Festfunktions-Pipeline 231, die Geometrie- und Festfunktions-Pipeline 237), wenn Grafikverarbeitungsoperationen durchzuführen sind.
  • Die Grafik-Mikrosteuerung 233 kann dafür ausgelegt sein, verschiedene Zeitplanungs- und Verwaltungsaufgaben für den Grafikprozessorkern 219 durchzuführen. In einer Ausführungsform kann die Grafik-Mikrosteuerung 233 eine Grafik- und/oder Rechenarbeitslast-Zeitplanung an den verschiedenen parallelen Grafik-Engines in Ausführungseinheit (EU)-Anordnungen 222A-222F, 224A-224F in den Teilkernen 221A-221F durchführen. In diesem Zeitplanungsmodell kann Host-Software, die auf einem CPU-Kern eines den Grafikprozessorkern 219 aufweisenden SoC ausgeführt wird, Arbeitslasten von einer von mehreren Grafikprozessor-Doorbells übergeben, was eine Zeitplanungsoperation an der entsprechenden Grafik-Engine aufruft. Zeitplanungsoperationen beinhalten das Bestimmen, welche Arbeitslast als Nächstes ausgeführt werden soll, das Übergeben einer Arbeitslast an einen Befehls-Streamer, das Vorziehen vorhandener Arbeitslasten, die auf einer Engine ausgeführt werden, das Überwachen einer Arbeitslast und das Benachrichtigen von Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann die Grafik-Mikrosteuerung 233 auch Niedrigenergie- oder Ruhezustände für den Grafikprozessorkern 219 ermöglichen, indem es dem Grafikprozessorkern 219 ermöglicht wird, Register in dem Grafikprozessorkern 219 über Niedrigenergie-Zustandswechsel hinweg unabhängig von dem Betriebssystem und/oder der Grafiktreiber-Software auf dem System zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 219 kann mehr oder weniger als die dargestellten Teilkerne 221A-221F, bis zu N modulare Teilkerne, aufweisen. Für jeden Satz von N Teilkernen kann der Grafikprozessorkern 219 auch gemeinsam genutzte Funktionslogik 235, gemeinsam genutzten Speicher und/oder Cache-Speicher 236, eine Geometrie/Festfunktions-Pipeline 237, sowie zusätzliche Festfunktionslogik 238 aufweisen, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam genutzte Funktionslogik 235 kann Logikeinheiten beinhalten, die mit der gemeinsam genutzten Funktionslogik 420 von 4 (z. B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik), die von allen N Teilkernen in dem Grafikprozessorkern 219 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher 236 kann ein Last-Level-Cache für den Satz von N Teilkernen 221 A-221F in dem Grafikprozessorkern 219 sein und kann auch als gemeinsam genutzter Speicher dienen, der für mehrere Teilkerne zugänglich ist. Die Geometrie/Festfunktions-Pipeline 237 kann anstelle der Geometrie/Festfunktions-Pipeline 231 in dem Festfunktionsblock 230 enthalten sein und kann dieselbe oder ähnliche Logikeinheiten aufweisen.
  • In einer Ausführungsform weist der Grafikprozessorkern 219 zusätzliche Funktionslogik 238 auf, die verschiedene Festfunktions-Beschleunigungslogiken zur Verwendung durch den Grafikprozessorkern 219 beinhalten kann. In einer Ausführungsform beinhaltet die zusätzliche Festfunktionslogik 238 eine zusätzliche Geometrie-Pipeline zur Verwendung beim Position-only-Shading. Beim Position-only-Shading gibt es zwei Geometrie-Pipelines, die vollständige Geometrie-Pipeline in der Geometrie/Festfunktions-Pipeline 238, 231, und eine Cull-Pipeline, bei der es sich um eine zusätzliche Geometrie-Pipeline handelt, die in der zusätzlichen Festfunktionslogik 238 enthalten ist. In einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Cull-Pipeline können unterschiedliche Instanzen derselben Anwendung ausführen, wobei jede Instanz einen getrennten Kontext hat. Das Position-only-Shading kann lange Cull-Läufe von verworfenen Dreiecken verbergen, wodurch es in einigen Instanzen möglich ist, das Shading früher abzuschließen. Beispielsweise und in einer Ausführungsform kann die Cull-Pipeline-Logik in der zusätzlichen Festfunktionslogik 238 Position-Shader parallel zu der Hauptanwendung ausführen und generiert im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterisierung und ein Rendering der Pixel für den Rahmenpuffer durchzuführen. Die Cull-Pipeline kann die generierten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Rücksicht darauf, ob diese Dreiecke ausgesondert werden. Die vollständige Pipeline (die in dieser Instanz als Replay-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen nutzen, um die ausgesonderten Dreiecke zu überspringen und nur die sichtbaren Dreiecke zu schattieren, die letztendlich an die Rasterisierungsphase weitergegeben werden.
  • In einer Ausführungsform kann die zusätzliche Festfunktionslogik 238 auch Maschinenlern-Beschleunigungslogik aufweisen, wie etwa eine Festfunktions-Matrixmultiplikationslogik, für Implementierungen, die Optimierungen für Maschinenlerntraining oder Inferenzierung beinhalten.
  • In jedem Grafik-Teilkern 221A-221F ist ein Satz von Ausführungsressourcen enthalten, der verwendet werden kann, um Grafik-, Medien- und Rechenoperationen in Reaktion auf Anforderungen von der Grafik-Pipeline, der Medien-Pipeline oder von Shader-Programmen durchzuführen. Die Grafik-Teilkerne 221A-221F beinhalten mehrere EU-Anordnungen 222A-222F, 224A-224F, TD/IC (Thread Dispatch & Inter-Thread Communication)-Logik 223A-223F, einen 3D (z.B. Textur)-Abtaster 225A-225F, einen Medienabtaster 206A-206F, einen Shader-Prozessor 227A-227F und einen gemeinsam genutzten lokalen Speicher (Shared Local Memory, SLM) 228A-228F. Die EU-Anordnungen 222A-222F, 224A-224F weisen jeweils mehrere Ausführungseinheiten auf, bei denen es sich um Universal-Grafikverarbeitungseinheiten handelt, die dazu in der Lage sind, Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation durchzuführen, was Grafik-, Medien- oder Rechen-Shader-Programme einschließt. Die TD/IC-Logik 223A-223F führt lokale Thread-Versende- und Thread-Steuerungsoperationen für die Ausführungseinheiten in einem Teilkern durch und ermöglicht die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Teilkerns ausgeführt werden. Der 3D-Abtaster 225A-225F kann Textur- oder andere 3D-Grafik-bezogene Daten in den Speicher einlesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem Texturformat, das mit einer gegebenen Textur verknüpft ist, unterschiedlich lesen. Der Medienabtaster 206A-206F kann ähnliche Leseoperationen basierend auf dem mit den Mediendaten verknüpften Typ und Format durchführen. In einer Ausführungsform kann jeder Grafik-Teilkern 221A-221F alternativ einen vereinheitlichten 3D- und Medienabtaster aufweisen. Threads, die auf den Ausführungseinheiten in jedem der Teilkerne 221A-221F ausgeführt werden, können gemeinsam genutzten lokalen Speicher 228A-228F in jedem Teilkern verwenden, um Threads zu ermöglichen, die in einer Thread-Gruppe unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher ausgeführt werden.
  • 2C veranschaulicht eine Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) 239, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, welche zu Mehrkerngruppen 240A-240N angeordnet sind. Auch wenn die Einzelheiten von nur einer einzigen Mehrkerngruppe 240A bereitgestellt werden, versteht sich, dass die anderen Mehrkerngruppen 240B-240N mit denselben oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 240A einen Satz von Grafikkernen 243 einen Satz von Tensorkernen 244 und einen Satz von Raytracing-Kernen 245 beinhalten. Ein Planer/Dispatcher 241 plant und versendet die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 243, 244, 245. Ein Satz von Registerdateien 242 speichert Operandenwerte, die von den Kernen 243, 244, 245 bei Ausführung der Grafik-Threads verwendet werden. Diese können beispielsweise Ganzzahlenregister zum Speichern von ganzzahligen Werten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkomma-Datenelemente) und Kachelregister zum Speichern von Tensor/Matrixwerten beinhalten. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Level-1 (L1)-Caches und gemeinsam genutzte Speichereinheiten 247 speichern Grafikdaten wie etwa Texturdaten, Vertex-Daten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten etc. lokal in jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können auch verwendet werden, um Texturoperationen durchzuführen, wie etwa das Abbilden und Abtasten von Texturen. Ein Level-2- (L2)-Cache 253, der von allen oder einer Teilmenge der Mehrkerngruppen 240A-240N verwendet wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 253 von mehreren Mehrkerngruppen 240A-240N gemeinsam genutzt werden. Ein oder mehrere Speichersteuerungen 248 koppeln die GPU 239 mit einem Speicher 249, bei dem es sich um einen Systemspeicher (z. B. DRAM) und/oder einen dedizierten Grafikspeicher (z. B. GDDR6-Speicher) handeln kann.
  • Eingabe/Ausgabe (E/A)-Schaltungen 250 koppeln die GPU 239 mit einer oder mehreren E/A-Vorrichtungen 252 wie etwa Digitalsignalprozessoren (DSPs), Netzsteuerungen oder Benutzereingabevorrichtungen. Eine On-Chip-Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen 252 mit der GPU 239 und dem Speicher 249 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (Input Output Memory Management Units, IOMMUs) 251 der E/-A-Schaltungen 250 koppeln die E/A-Vorrichtungen 252 direkt mit dem Systemspeicher 249. In einer Ausführungsform verwaltet die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische 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 Adressraum gemeinsam nutzen.
  • In einer Implementierung unterstützt die IOMMU 251 eine Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen auf physikalische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physikalischen Gast-/Grafikadressen auf physikalische System-/Host-Adressen abzubilden (z. B. innerhalb des Systemspeichers 249). Die Basisadressen von jedem der ersten und zweiten Sätze von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z. B. damit der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt wird). Auch wenn dies in 2C nicht dargestellt ist, kann jeder der Kerne 243, 244, 245 und/oder der Mehrkerngruppen 240A-240N Übersetzungspuffer (Translation Lookaside Buffers, TLBs) aufweisen, um Übersetzungen von Gast virtuell zu Gast physisch, Übersetzungen von Gast physisch zu Host physisch und Übersetzungen von Gast virtuell zu Host physisch zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, GPUs 239 und die E/A-Vorrichtungen 252 auf einem einzelnen Halbleiterchip und/oder Chip-Paket integriert. Der veranschaulichte Speicher 249 kann auf demselben Chip integriert sein oder kann über eine Chip-externe Schnittstelle mit den Speichersteuerungen 248 gekoppelt sein. In einer Ausführungsform umfasst der Speicher 249 GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physikalische Speicher auf Systemebene teilt, auch wenn die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform beinhalten die Tensorkerne 244 mehrere Ausführungseinheiten, die spezifisch zum Durchführen von Matrixoperationen ausgelegt sind, bei denen es sich um die zum Durchführen von Operationen zum tiefen Lernen verwendeten grundlegenden Rechenoperationen handelt. Beispielsweise können simultane Matrixmultiplikationsoperationen zum Trainieren und Inferenzieren von neuronalen Netzen verwendet werden. Die Tensorkerne 244 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkommazahlen mit einfacher Genauigkeit (z. B. 32 Bits), Gleitkommazahlen mit halber Genauigkeit (z. B. 16 Bits), Ganzzahlwörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). In einer Ausführungsform extrahiert eine neuronale Netzimplementierung Merkmale jeder gerenderten Szene, wobei potenziell Einzelheiten von mehreren Rahmen kombiniert werden, um ein qualitativ hochwertiges endgültiges Bild aufzubauen.
  • In Implementierungen von tiefem Lernen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 244 geplant werden. Insbesondere das Trainieren neuronaler Netze erfordert eine signifikante Anzahl von Matrix-Skalarprodukt-Operationen. Um eine Innenproduktformulierung einer NxNxN-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Skalarprodukt-Verarbeitungselemente beinhalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen, und mindestens eine Spalte einer zweiten Matrix wird für N Zyklen in jedem Zyklus geladen. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der bestimmten Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, was 16-Bit-Wörter, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4) einschließt. Unterschiedliche Genauigkeitsmodi können für die Tensorkerne 244 spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für unterschiedliche Arbeitslasten verwendet wird (z. B. zum Inferenzieren von Arbeitslasten, die eine Quantisierung in Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Raytracing-Kerne 245 Raytracing-Operationen sowohl für Echtzeit-Raytracing- als auch Nicht-Echtzeit-Raytracing-Implementierungen. Insbesondere beinhalten die Raytracing-Kerne 245 Strahldurchquerungs-/Kreuzungsschaltungen zum Durchführen einer Strahldurchquerung unter Verwendung von Hüllvolumenhierarchien (Bounding Volume Hierarchies, BVH) und zum Identifizieren von Kreuzungen zwischen Strahlen und Grundelementen, die in den BVH-Volumina eingeschlossen sind. Die Raytracing-Kerne 245 können auch Schaltungen zum Durchführen von Tiefentests und Culling (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) beinhalten. In einer Implementierung führen die Raytracing-Kerne 245 Durchquerungs- und Kreuzungsoperationen zusammen mit den hierin beschriebenen Bild-Rauschunterdrückungstechniken aus, von denen mindestens ein Abschnitt auf den Tensorkernen 244 ausgeführt werden kann. Beispielsweise implementieren, in einer Ausführungsform, die Tensorkerne 244 ein neuronales Netz zum tiefen Lernen, um eine Rauschunterdrückung für die von den Raytracing-Kernen 245 erzeugten Frames durchzuführen. Die CPU(s) 246, der/die Grafikkern(e) 243 und/oder die Raytracing-Kerne 245 können jedoch auch alle oder einen Teil der Rauschunterdrückungsalgorithmen und/oder der Algorithmen zum tiefen Lernen implementieren.
  • Zusätzlich kann, wie oben beschrieben, ein verteilter Ansatz zur Rauschunterdrückung eingesetzt werden, bei dem sich die GPU 239 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung mit anderen Rechenvorrichtungen gekoppelt ist. In dieser Ausführungsform teilen sich die verbundenen Rechenvorrichtungen Lern-/Trainingsdaten eines neuronalen Netzes, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Rauschunterdrückung für unterschiedliche Arten von Bildrahmen und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Raytracing-Kerne 245 alle BVH-Durchquerungs- und Strahl-Grundelement-Kreuzungen, wodurch verhindert wird, dass die Grafikkerne 243 mit Tausenden von Anweisungen pro Strahl überladen werden. In einer Ausführungsform beinhaltet jeder Raytracing-Kern 245 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Bounding-Box-Tests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen der Strahldreieck-Kreuzungstests (z. B. kreuzende Strahlen, die durchquert worden sind). Somit kann, in einer Ausführungsform, die Mehrkerngruppe 240A einfach eine Strahlsondierung starten, und die Raytracing-Kerne 245 führen unabhängig eine Strahldurchquerung und -kreuzung durch und geben Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrfacher Treffer usw.) an den Thread-Kontext zurück. Die anderen Kerne 243, 244 werden zur Durchführung anderer Grafik- oder Rechenarbeit freigegeben, während die Raytracing-Kerne 245 die Durchquerungs- und Kreuzungsoperationen durchführen.
  • In einer Ausführungsform beinhaltet jeder Raytracing-Kern 245 eine Durchquerungseinheit zum Durchführen von BVH-Test-Operationen und eine Kreuzungseinheit, die Strahl-Grundelement-Kreuzungstests durchführt. Die Kreuzungseinheit erzeugt eine Antwort „Treffer“, „Kein Treffer“ oder „Mehrfacher Treffer“, die sie dem geeigneten Thread bereitstellt. Während der Durchquerungs- und Kreuzungsoperationen werden die Ausführungsressourcen der anderen Kerne (z. B. der Grafikkerne 243 und der Tensorkerne 244) freigegeben, um andere Formen von Grafikarbeit auszuführen.
  • In einer bestimmten nachstehend beschriebenen Ausführungsform wird ein hybrider Ansatz für Rasterung/Raytracing verwendet, bei dem die Arbeit zwischen den Grafikkernen 243 und den Raytracing-Kernen 245 verteilt wird.
  • In einer Ausführungsform beinhalten die Raytracing-Kerne 245 (und/oder die anderen Kerne 243, 244) eine Hardwareunterstützung für einen Raytracing-Anweisungssatz, wie etwa Microsoft DirectX-RayTracing (DXR), der einen DispatchRays-Befehl beinhaltet sowie Strahlerzeugung, nächstgelegener Treffer, beliebiger Treffer und Shader verfehlt, welche die Zuordnung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Raytracing-Plattform, die durch die Raytracing-Kerne 245, Grafikkerne 243 und Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Raytracing-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlgenerierung, zu nächstgelegenem Treffer, beliebigem Treffer, zu einer Strahl-Grundelement-Kreuzung, zu pro-Grundelement und hierarchischen Bounding-Box-Aufbau, Verfehlen, Besuchen und Ausnahmen beinhaltet. Insbesondere beinhaltet eine Ausführungsform Raytracing-Anweisungen zum Durchführen der folgenden Funktionen:
  • Strahlgenerierung - Strahlgenerierungsanweisungen können für jedes Pixel, jede Abtastung oder jede andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
  • Nächstgelegener Treffer - Eine Nächstgelegener-Treffer-Anweisung kann ausgeführt werden, um den nächstgelegenen Kreuzungspunkt eines Strahls mit Grundelementen innerhalb einer Szene zu lokalisieren.
  • Beliebiger Treffer - Eine Beliebiger-Treffer-Anweisung identifiziert mehrere Kreuzungen zwischen einem Strahl und Grundelementen innerhalb einer Szene, um potenziell einen neuen nächstgelegenen Kreuzungspunkt zu identifizieren.
  • Kreuzung - Eine Kreuzungsanweisung führt einen Strahl-Grundelement-Kreuzungstest durch und gibt ein Ergebnis aus.
  • Pro-Grundelement-Bounding-Box-Aufbau - Diese Anweisung errichtet eine Bounding-Box rund um ein gegebenes Grundelement oder eine Gruppe von Grundelementen (z. B. beim Aufbauen einer neuen BVH oder einer anderen Beschleunigungsdatenstruktur).
  • Verfehlen - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines spezifizierten Bereichs einer Szene verfehlt.
  • Besuchen - Zeigt die untergeordneten Volumina an, die ein Strahl durchqueren wird.
  • Ausnahmen - Beinhaltet verschiedene Arten von Ausnahmehandlern (z. B. aufgerufen für verschiedene Fehlerbedingungen).
  • 2D ist ein Blockschaltbild einer Universal-Grafikverarbeitungseinheit (General-Purpose Graphics Processing Unit, GPGPU) 270, die als Grafikprozessor und/oder Rechenbeschleuniger gemäß hier beschriebenen Ausführungsformen konfiguriert sein kann. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit Hostprozessoren (z. B einer oder mehreren CPU(s) 246) und Speicher 271, 272 verbunden sein. In einer Ausführungsform handelt es sich bei dem Speicher 271 um Systemspeicher, der mit den ein oder mehreren CPU(s) 246 geteilt werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der speziell für die GPGPU 270 vorgesehen ist. In einer Ausführungsform können Komponenten in der GPGPU 270 und dem Vorrichtungsspeicher 272 in Speicheradressen abgebildet sein, die für die ein oder mehreren CPUs 246 zugänglich sind. Der Zugriff auf den Speicher 271 und 272 kann über eine Speichersteuerung 268 ermöglicht werden. In einer Ausführungsform beinhaltet die Speichersteuerung 268 eine interne Direktzugriffsspeicher (Direct Memory Access, DMA)-Steuerung 269 oder kann Logik aufweisen, um Operationen durchzuführen, die ansonsten von einer DMA-Steuerung durchgeführt würden.
  • Die GPGPU 270 beinhaltet mehrere Cache-Speicher, was einen L2-Cache 253, einen L1-Cache 254, einen Anweisungscache 255 und gemeinsam genutzten Speicher 256 einschließt, von dem wenigstens ein Teil auch als Cache-Speicher partitioniert sein kann. Die GPGPU 270 kann auch mehrere Recheneinheiten 260A-260N aufweisen. Jede Recheneinheit 260A-260N beinhaltet einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogik-Einheiten 263 und Skalarlogik-Einheiten 264. Die Recheneinheiten 260A-260N können auch lokalen gemeinsam genutzten Speicher 265 und einen Programmzähler 266 beinhalten. Die Recheneinheiten 260A-260N können mit einem konstanten Cache 267 gekoppelt sein, der verwendet werden kann, um konstante Daten zu speichern, bei denen es sich um Daten handelt, die sich während der Kernel-Ausführung oder der Ausführung eines Shader-Programms, das auf der GPGPU 270 ausgeführt wird, nicht ändern. In einer Ausführungsform ist der konstante Cache 267 ein skalarer Datencache, und zwischengespeicherte Daten können direkt abgerufen und in die skalaren Register 262 geladen werden.
  • Während des Betriebs können die ein oder mehreren CPUs 246 Befehle in Register oder Speicher in der GPGPU 270 schreiben, die/der in einen zugänglichen adressierbaren Adressraum abgebildet sind/ist. Die Befehlsprozessoren 257 können die Befehle aus Registern oder dem Speicher auslesen und bestimmen, wie diese Befehle in der GPGPU 270 verarbeitet werden. Ein Thread-Dispatcher 258 kann dann verwendet werden, um Threads an die Recheneinheiten 260A-260N zu versenden, damit diese Befehle ausgeführt werden. Jede Recheneinheit 260A-260N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Zusätzlich kann jede Recheneinheit 260A-260N unabhängig für bedingte Berechnungen konfiguriert werden und kann die Ausgaben von Berechnungen bedingt an den Speicher ausgeben. Die Befehlsprozessoren 257 können die ein oder mehreren CPUs 246 unterbrechen, wenn die übermittelten Befehle vollständig sind.
  • Die 3A-3C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleuniger-Architekturen, die von hier beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente der 3A-3C mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein.
  • 3A ist ein Blockschaltbild eines Grafikprozessors 300, bei dem es sich um eine diskrete Grafikverarbeitungseinheit handeln kann, oder um einen Grafikprozessor, der mit mehreren Verarbeitungskernen integriert ist, oder andere Halbleitervorrichtungen wie etwa Speichervorrichtungen oder Netzschnittstellen, ohne jedoch hierauf beschränkt zu sein. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in den Prozessorspeicher eingestellt sind. In einigen Ausführungsformen weist der Grafikprozessor 300 eine Speicherschnittstelle 314 für Speicherzugriffe auf. Die Speicherschnittstelle 314 kann eine Schnittstelle zum lokalen Speicher, zu einem oder mehreren internen Caches, zu einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher sein.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 auch eine Anzeigesteuerung 302, um Anzeigeausgabedaten an eine Anzeigevorrichtung 318 zu treiben. Die Anzeigesteuerung 302 beinhaltet Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen. Bei der Anzeigevorrichtung 318 kann es sich um eine interne oder externe Anzeigevorrichtung handeln. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine kopfmontierte Anzeigevorrichtung, wie etwa eine VR (Virtual Reality)-Anzeigevorrichtung oder eine AR (Augmented Reality)-Anzeigevorrichtung. In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Video-Codec-Engine 306 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten, einschließlich, jedoch nicht beschränkt auf MPEG (Moving Picture Experts Group)-Formate wie etwa MPEG-2, AVC (Advanced Video Coding)-Formate wie etwa H.264/MPEG-4 AVC, H.265/HEVC, AOMedia (Alliance for Open Media) VP8, VP9 sowie SMPTE (Society of Motion Picture & Television Engineers) 421M/VC-1 und JPEG (Joint Photographic Experts Group)-Formate wie etwa JPEG und MJPEG (Motion JPEG)-Formate.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Blockbildtransfer (Block Image Transfer, BLIT)-Engine 304, um zweidimensionale (2D) Rasterisierer-Operationen durchzuführen, was beispielsweise Bitgrenzenblock-Transfers einschließt. Allerdings werden, in einer Ausführungsform, 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten einer Grafikverarbeitungs-Engine (Graphics Processing Engine, GPE) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen beinhaltet die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen, wie etwa das Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundelementformen (z. B. Rechteck, Dreieck etc.) wirken. Die 3D-Pipeline 312 beinhaltet programmierbare Elemente und Elemente mit fester Funktion, die verschiedene Aufgaben in dem Element durchführen und/oder Ausführungsthreads an ein 3D/Medien-Subsystem 315 spawnen. Während die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen durchzuführen, beinhaltet eine Ausführungsform einer GPE 310 auch eine Medien-Pipeline 316, die speziell verwendet wird, um Medienoperationen wie etwa Videonachbearbeitung und Bildverbesserung durchzuführen.
  • In einigen Ausführungsformen beinhaltet die Medien-Pipeline 316 Festfunktions- oder programmierbare Logikeinheiten zum Durchführen einer oder mehrere spezialisierter Medienoperationen wie etwa Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung anstelle der oder im Auftrag der Video-Codec-Engine 306. In einigen Ausführungsformen beinhaltet die Medien-Pipeline 316 zusätzlich eine Thread-Spawning-Einheit, um Threads zur Ausführung auf einem 3D/Medien-Subsystem 315 zu spawnen. Die gespawnten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die in dem 3D/Medien-Subsystem 315 enthalten sind.
  • In einigen Ausführungsformen beinhaltet das 3D/Medien-Subsystem 315 eine Logik zum Ausführen von Threads, die durch die 3D-Pipeline 312 und die Medien-Pipeline 316 gespawnt werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D/Medien-Subsystem 315, das eine Thread-Dispatch-Logik zum Vermitteln und Versenden der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen beinhaltet. Die Ausführungsressourcen beinhalten eine Anordnung von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen beinhaltet das 3D/Medien-Subsystem 315 einen oder mehrere interne Caches für Thread-Anweisungen und -Daten. In einigen Ausführungsformen beinhaltet das Subsystem auch gemeinsam genutzten Speicher, einschließlich Register und adressierbaren Speicher zum gemeinsamen Nutzen von Daten zwischen Threads und zum Speichern von Ausgabedaten.
  • 3B veranschaulicht einen Grafikprozessor 320 mit einer gekachelten Architektur gemäß hier beschriebenen Ausführungsformen. In einer Ausführungsform beinhaltet der Grafikprozessor 320 einen Grafikverarbeitungs-Engine-Cluster 322, der mehrere Instanzen der Grafikverarbeitungs-Engine 310 von 3A innerhalb einer Grafik-Engine-Kachel 310A-310D aufweist. Jede Grafik-Engine-Kachel 310A-310D kann über einen Satz von Kachelzwischenverbindungen 323A-323F verbunden sein. Jede Grafik-Engine-Kachel 310A-310D kann außerdem über Speicherzwischenverbindungen 325A-325D mit einem Speichermodul oder einer Speichervorrichtung 326A-326D verbunden sein. Die Speichervorrichtungen 326A-326D können beliebige Grafikspeichertechnologien verwenden. Beispielsweise kann es sich bei den Speichervorrichtungen 326A-326D um Grafikspeicher mit doppelter Datenrate (Graphics Double Data Rate, GDDR) handeln. Die Speichervorrichtungen 326A-326D sind, in einer Ausführungsform, Speichermodule mit großer Bandbreite (High Bandwidth Memory, HBM), die auf demselben Halbleiterplättchen (On-Die) mit ihrer jeweiligen Grafik-Engine-Kachel 310A-310D vorliegen können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die oben auf ihrer jeweiligen Grafik-Engine-Kachel 310A-310D gestapelt sind. In einer Ausführungsform befinden sich jede Grafik-Engine-Kachel 310A-310D und der zugehörige Speicher 326A-326D auf getrennten Chiplets, die an ein Basis-Halbleiterplättchen oder ein Basissubstrat gebondet sind, wie ausführlicher in den 11B-11D beschrieben.
  • Der Grafikverarbeitungs-Engine-Cluster 322 kann mit einer On-Chip- oder On-Package Fabric-Zwischenverbindung 324 verbunden sein. Die Fabric-Zwischenverbindung 324 kann eine Kommunikation zwischen Grafik-Engine-Kacheln 310A-310D und Komponenten wie etwa dem Video-Codec 306 und einer oder mehreren Kopier-Engines 304 ermöglichen. Die Kopier-Engines 304 können verwendet werden, um Daten aus, in und zwischen den Speichervorrichtungen 326A-326D zu verschieben und zwischen Speicher, der außerhalb des Grafikprozessors 320 vorliegt (z. B. Systemspeicher). Die Fabric-Zwischenverbindung 324 kann auch verwendet werden, um die Grafik-Engine-Kacheln 310A-310D miteinander zu verbinden. Der Grafikprozessor 320 kann optional eine Anzeigesteuerung 302 beinhalten, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger ausgelegt sein. In der Beschleunigerkonfiguration können die Anzeigesteuerung 302 und die Anzeigevorrichtung 318 entfallen.
  • Der Grafikprozessor 320 kann über eine Host-Schnittstelle 328 mit einem Host-System verbunden sein. Die Host-Schnittstelle 328 kann eine Kommunikation zwischen dem Grafikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Host-Systemschnittstelle sein.
  • 3C veranschaulicht einen Rechenbeschleuniger 330 gemäß hier beschriebenen Ausführungsformen. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten zu dem Grafikprozessor 320 von 3B aufweisen und ist für eine Rechenbeschleunigung optimiert. Ein Rechen-Engine-Cluster 332 kann einen Satz von Rechen-Engine-Kacheln 340A-340D beinhalten, die Ausführungslogik beinhalten können, welche für parallele oder vektorbasierte Universal-Rechenoperationen optimiert ist. In einigen Ausführungsformen beinhalten die Rechen-Engine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, auch wenn in einer Ausführungsform eine oder mehrere der Rechen-Engine-Kacheln 340A-340D Logik beinhalten können, um eine Medienbeschleunigung durchzuführen. Die Rechen-Engine-Kacheln 340A-340D können über Speicherzwischenverbindungen 325A-325D mit dem Speicher 326A-326D verbunden sein. Der Speicher 326A-326D und Speicherzwischenverbindungen 325A-325D können eine ähnliche Technologie aufweisen wie im Grafikprozessor 320 oder auch unterschiedlich sein. Die Rechen-Engine-Kacheln 340A-340D können auch über einen Satz von Kachelzwischenverbindungen 323A-323F miteinander verbunden sein und können mit einer und/oder durch eine Fabric-Zwischenverbindung 324 verbunden und/oder miteinander verbunden sein. In einer Ausführungsform beinhaltet der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als ein vorrichtungsweiter Cache ausgelegt sein kann. Der Rechenbeschleuniger 330 kann auch über eine Host-Schnittstelle 328 mit einem Host-Prozessor und Speicher verbunden sein, in einer ähnlichen Weise wie der Grafikprozessor 320 von 3B.
  • Grafikverarbeitungs-Engine
  • 4 ist ein Blockschaltbild einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (Graphics Processing Engine, GPE) 410 eine Version der GPE 310, die in 3A gezeigt wird, und kann auch eine Grafik-Engine-Kachel 310A-310D von 3B repräsentieren. Elemente von 4 mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein. Beispielsweise sind die 3D-Pipeline 312 und die Medien-Pipeline 316 von 3A dargestellt. Die Medien-Pipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und unter Umständen nicht explizit in der GPE 410 enthalten. Beispielsweise und in wenigstens einer Ausführungsform ist ein getrennter Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403 gekoppelt, der einen Befehlsstrom für die 3D-Pipeline 312 und/oder Medien-Pipelines 316 bereitstellt, oder weist diesen auf. In einigen Ausführungsformen ist ein Befehls-Streamer 403 mit Speicher gekoppelt, bei dem es sich um Systemspeicher oder eines oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher handeln kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medien-Pipeline 316. Bei den Befehlen handelt es sich um Direktiven, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 312 und die Medien-Pipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer beinhalten, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf Daten beinhalten, die im Speicher gespeichert sind, beispielsweise, jedoch nicht beschränkt auf Vertex- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316. Die 3D-Pipeline 312 und die Medien-Pipeline 316 verarbeiten die Befehle und Daten, indem sie Operationen über Logik in den jeweiligen Pipelines durchführen oder einen oder mehrere Ausführungsthreads an eine Grafikkernanordnung 414 versenden. In einer Ausführungsform beinhaltet die Grafikkernanordnung 414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 415A, Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, der Universal- und grafikspezifische Ausführungslogik zum Durchführen von Grafik- und Rechenoperationen beinhaltet, ebenso wie Beschleunigungslogik mit fester Funktion für Texturverarbeitung und/oder maschinelles Lernen und künstliche Intelligenz.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 Festfunktions- und programmierbare Logik beinhalten, um ein oder mehrere Shader-Programme, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme, zu verarbeiten, indem die Anweisungen verarbeitet werden und Ausführungsthreads an die Grafikkernanordnung 414 versendet werden. Die Grafikkernanordnung 414 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) im bzw. in den Grafikkern(en) 415A-414B der Grafikkernanordnung 414 beinhaltet eine Unterstützung verschiedener 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungsthreads ausführen, die mit mehreren Shadern verknüpft sind.
  • In einigen Ausführungsformen beinhaltet die Grafikkernanordnung 414 Ausführungslogik zum Durchführen von Medienfunktionen, wie etwa Video- und/oder Bildverarbeitung. In einer Ausführungsform beinhalten die Ausführungseinheiten Universallogik, die programmierbar ist, um parallele Universal-Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen durchzuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder in Verbindung mit Universallogik im bzw. in den Prozessorkern(en) 107 aus 1 oder Kern 202A-202N wie in 2A durchführen.
  • Ausgabedaten, die von Threads generiert werden, welche auf der Grafikkernanordnung 414 ausgeführt werden, können Daten an den Speicher in einem vereinheitlichten Rückgabepuffer (Unified Return Buffer, URB) 418 ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen unterschiedlichen Threads zu senden, die auf der Grafikkernanordnung 414 ausgeführt werden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Threads auf der Grafikkernanordnung und Festfunktionslogik in der gemeinsam genutzten Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist die Grafikkernanordnung 414 skalierbar, so dass die Anordnung eine variable Anzahl von Grafikkernen beinhaltet, von denen jeder eine variable Anzahl von Ausführungseinheiten aufweist, basierend auf der Zielleistung und dem Leistungsniveau der GPE 410. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass die Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Die Grafikkernanordnung 414 ist mit der gemeinsam genutzten Funktionslogik 420 gekoppelt, die mehrere Ressourcen beinhaltet, welche zwischen den Grafikkernen in der Grafikkernanordnung geteilt werden. Bei den gemeinsam genutzten Funktionen in der gemeinsam genutzten Funktionslogik 420 handelt es sich um Hardwarelogik-Einheiten, die eine spezialisierte Zusatzfunktionalität für die Grafikkernanordnung 414 bereitstellen. In verschiedenen Ausführungsformen beinhaltet die gemeinsam genutzte Funktionslogik 420, ohne jedoch hierauf beschränkt zu sein, Abtaster- 421, Math- 422 und ITC (Inter-Thread Communication) 423-Logik. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 in der gemeinsam genutzten Funktionslogik 420.
  • Eine gemeinsam genutzte Funktion wird wenigstens in einem Fall implementiert, wenn der Bedarf für eine gegebene spezialisierte Funktion nicht für eine Einbeziehung in die Grafikkernanordnung 414 ausreicht. Stattdessen ist eine einzelne Instanziierung dieser spezialisierten Funktion als eigenständige Entität in der gemeinsam genutzten Funktionslogik 420 implementiert und wird von den Ausführungsressourcen in der Grafikkernanordnung 414 gemeinsam genutzt. Der genaue Satz von Funktionen, die durch die Grafikkernanordnung 414 gemeinsam genutzt werden und in der Grafikkernanordnung 414 enthalten sind, variiert zwischen den Ausführungsformen. In einigen Ausführungsformen können spezifische gemeinsam genutzte Funktionen in der gemeinsam genutzten Funktionslogik 420, die durch die Grafikkernanordnung 414 umfassend genutzt werden, in der gemeinsam genutzten Funktionslogik 416 in der Grafikkernanordnung 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik 416 in der Grafikkernanordnung 414 einen Teil oder die gesamte Logik in der gemeinsam genutzten Funktionslogik 420 beinhalten. In einer Ausführungsform können alle Logikelemente in der gemeinsam genutzten Funktionslogik 420 in der gemeinsam genutzten Funktionslogik 416 der Grafikkernanordnung 414 dupliziert sein. In einer Ausführungsform ist die gemeinsam genutzte Funktionslogik 420 zugunsten der gemeinsam genutzten Funktionslogik 416 in der Grafikkernanordnung 414 ausgeschlossen.
  • Ausführungseinheiten
  • Die 5A-5B veranschaulichen eine Thread-Ausführungslogik 500, die eine Anordnung von Verarbeitungselementen beinhaltet, welche in einem Grafikprozessorkern gemäß hier beschriebenen Ausführungsformen eingesetzt wird. Elemente von 5A-5B mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein. Die 5A-5B zeigen einen Überblick über eine Thread-Ausführungslogik 500, die repräsentativ für eine Variante der Hardwarelogik sein kann, welche mit jedem Teilkern 221A-221F von 2B dargestellt wird. 5A ist repräsentativ für eine Ausführungseinheit in einem Universal-Grafikprozessor, während 5B für eine Ausführungseinheit repräsentativ ist, die in einem Rechenbeschleuniger verwendet werden kann.
  • Wie in 5A veranschaulicht, beinhaltet die Thread-Ausführungslogik 500 in einigen Ausführungsformen einen Shader-Prozessor 502, einen Thread-Dispatcher 504, einen Anweisungscache 506, eine skalierbare Ausführungseinheit-Anordnung mit mehreren Ausführungseinheiten 508A-508N, einen Abtaster 510, einen gemeinsam genutzten lokalen Speicher 511, einen Datencache 512 und einen Datenport 514. In einer Ausführungsform kann die skalierbare Ausführungseinheit-Anordnung dynamisch skalieren, indem ein oder mehrere Ausführungseinheiten (z. B. irgendeine der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N-1 und 508N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In einer Ausführungsform sind die enthaltenen Komponenten über eine Zwischenverbindungsstruktur miteinander verbunden, die mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen beinhaltet die Thread-Ausführungslogik 500 eine oder mehrere Verbindungen zu einem Speicher, wie etwa Systemspeicher oder Cache-Speicher, über eines oder mehrere von einem Anweisungscache 506, einem Datenport 514, einem Abtaster 510 und den Ausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Universal-Recheneinheit, die dazu in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen und gleichzeitig mehrere Datenelemente für jeden Thread parallel zu verarbeiten. In verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten 508A-508N skalierbar, so dass sie eine beliebige Anzahl von einzelnen Ausführungseinheiten beinhaltet.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N primär verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 502 kann die verschiedenen Shader-Programme verarbeiten und Ausführungsthreads versenden, die mit den Shader-Programmen über einen Thread-Dispatcher 504 verknüpft sind. In einer Ausführungsform beinhaltet der Thread-Dispatcher eine Logik zum Vermitteln von Thread-Initiierungsanforderungen von den Grafik- und Medien-Pipelines und zum Instanziieren der angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N. Beispielsweise kann eine Geometrie-Pipeline Vertex-, Tessellation- oder Geometrie-Shader zum Verarbeiten an die Thread-Ausführungslogik versenden. In einigen Ausführungsformen kann der Thread-Dispatcher 504 auch Laufzeit-Thread-Spawning-Anforderungen von den ausführenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der eine native Unterstützung für viele standardmäßige 3D-Grafik-Shader-Anweisungen beinhaltet, sodass Shader-Programme von Grafikbibliotheken (z.B. Direct 3D und OpenGL) mit minimaler Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), eine Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und eine Universalverarbeitung (z. B. Rechen- und Medien-Shader). Jede der Ausführungseinheiten 508A-508N ist zur Ausführung von SIMD (Single Instruction Multiple Data, eine Anweisung mehrere Daten) mit mehreren Ausgaben in der Lage, und ein Multithread-Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread in jeder Ausführungseinheit beinhaltet eine dedizierte Registerdatei mit hoher Bandbreite und einen zugehörigen unabhängigen Thread-Zustand. Die Ausführung erfolgt mit mehreren Ausgaben pro Takt an Pipelines, die zu Ganzzahl-Gleitkommaoperationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen in der Lage sind. Während auf Daten vom Speicher oder eine der gemeinsam genutzten Funktionen gewartet wird, bewirkt die Abhängigkeitslogik in den Ausführungseinheiten 508A-508N, dass ein wartender Thread in den Ruhezustand wechselt, bis die angeforderten Daten zurückgegeben worden sind. Während sich der wartende Thread im Ruhezustand befindet, können sich Hardware-Ressourcen der Verarbeitung anderer Threads widmen. Beispielsweise kann während einer Verzögerung, die mit einer Vertex-Shader-Operation verknüpft ist, eine Ausführungseinheit Operationen für einen Pixel-Shader, einen Fragment-Shader oder eine andere Art von Shader-Programm durchführen, einschließlich eines anderen Vertex-Shaders. Verschiedene Ausführungsformen können zur Anwendung kommen, um Ausführungseinheiten durch Verwendung von SIMT (Single Instruction Multiple Thread) als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD zu verwenden. Ein Verweis auf einen SIMD-Kern oder - Betrieb ist auch auf SIMT anwendbar oder auf SIMD in Kombination mit SIMT.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N arbeitet an Anordnungen von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für die Anweisung. Ein Ausführungskanal ist eine logische Einheit der Ausführung für Datenelementzugriff, Maskierung und Flusssteuerung in Anweisungen. Die Anzahl von Kanälen kann unabhängig von der Anzahl von physischen arithmetischen Logikeinheiten (Arithmetic Logic Units, ALUs) oder Gleitkommaeinheiten (Floating Point Units, FPUs) für einen bestimmten Grafikprozessor sein. In einigen Ausführungseinheiten unterstützen Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheit-Anweisungssatz beinhaltet SIMD-Anweisungen. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert sein, und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wird beispielsweise an einem 256 Bit breiten Vektor gearbeitet, werden die 256 Bits des Vektors in einem Register gespeichert, und die Ausführungseinheit arbeitet an dem Vektor als vier getrennte 54-Bit-gepackte Datenelemente (Datenelemente der Größe Vierfachwort (Quad-Word, QW)), acht getrennte 32-Bit-gepackte Datenelemente (Datenelemente der Größe Doppelwort (Double Word, DW)), sechzehn getrennte 16-Bit-gepackte Datenelemente (Datenelemente der Größe Wort (Word, W)) oder zweiunddreißig getrennte 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)). Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können ein oder mehrere Ausführungseinheiten zu einer verschmolzenen Ausführungseinheit 509A-509N mit einer Thread-Steuerungslogik (507A-507N) kombiniert werden, die den verschmolzenen EUs gemeinsam ist. Mehrere EUs können zu einer EU-Gruppe verschmolzen werden. Jede EU in der verschmolzenen EU-Gruppe kann dafür ausgelegt sein, einen getrennten SIMD-Hardware-Thread auszuführen. Die Anzahl von EUs in einer verschmolzenen EU-Gruppe kann je nach Ausführungsform variieren. Zusätzlich können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, jedoch nicht beschränkt auf, SIMD8, SIMD16 und SIMD32. Jede verschmolzene Grafikausführungseinheit 509A-509N beinhaltet wenigstens zwei Ausführungseinheiten. Beispielsweise beinhaltet die verschmolzene Ausführungseinheit 509A eine erste EU 508A, eine zweite EU 508B und Thread-Steuerungslogik 507A, die der ersten EU 508A und der zweiten EU 508B gemeinsam ist. Die Thread-Steuerungslogik 507A steuert Threads, die auf der verschmolzenen Grafikausführungseinheit 509A ausgeführt werden, was es jeder EU in den verschmolzenen Ausführungseinheiten 509A-509N ermöglicht, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungs-Caches (z. B. 506) sind in der Thread-Ausführungslogik 500 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 512) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 500 ausgeführt werden, können auch explizit verwaltete Daten in dem gemeinsam genutzten lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Abtaster 510 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen beinhaltet der Abtaster 510 eine spezielle Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten für eine Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 500 über Thread-Spawning- und Dispatch-Logik. Sobald eine Gruppe von geometrischen Objekten zu Pixeldaten verarbeitet und gerastert worden ist, wird die Pixelprozessorlogik (z. B. die Pixel-Shader-Logik, Fragment-Shader-Logik etc.) in dem Shader-Prozessor 502 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu veranlassen, dass Ergebnisse auf Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer etc.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixel-Shader oder ein Fragment-Shader die Werte der verschiedenen Vertex-Attribute, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt die Pixelprozessorlogik im Shader-Prozessor 502 dann ein von der Anwendungsprogrammierschnittstelle (Application Programming Interface, API) bereitgestelltes Pixel- oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, versendet der Shader-Prozessor 502 Threads über den Thread-Dispatcher 504 an eine Ausführungseinheit (z. B. 508A). In einigen Ausführungsformen verwendet der Shader-Prozessor 502 eine Texturabtastlogik im Abtaster 510, um auf Texturdaten in Texturkarten zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder schließen ein oder mehrere Pixel von der weiteren Verarbeitung aus.
  • In einigen Ausführungsformen stellt der Datenport 514 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 500 bereit, um verarbeitete Daten an einen Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen beinhaltet der Datenport 514 einen oder mehrere Cache-Speicher (z. B. Datencache 512) oder ist damit gekoppelt, um Daten für den Speicherzugriff über den Datenport zwischenzuspeichern.
  • In einer Ausführungsform kann die Ausführungslogik 500 auch einen Raytracer 505 beinhalten, der eine Raytracing-Beschleunigungsfunktionalität bereitstellen kann. Der Raytracer 505 kann einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für eine Strahlgenerierung beinhaltet. Der Raytracing-Anweisungssatz kann dem Raytracing-Anweisungssatz ähneln, der von den Raytracing-Kernen 245 in 2C unterstützt wird, oder hiervon verschieden sein.
  • 5B veranschaulicht beispielhafte interne Einzelheiten einer Ausführungseinheit 508 gemäß Ausführungsformen. Eine Grafikausführungseinheit 508 kann eine Anweisungsabrufeinheit 537, eine GRF-Anordnung (General Register File, Allgemeinregisterdatei) 524, eine ARF-Anordnung (Architectural Register File, Architekturregisterdatei) 526, einen Thread-Arbiter 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, ein Satz von SIMD-Gleitkommaeinheiten (Floating Point Units, FPUs) 534, und, in einer Ausführungsform, ein Satz von dedizierten Ganzzahl-SIMD-ALUs 535 beinhalten. Die GRF 524 und die ARF 526 beinhalten den Satz von allgemeinen Registerdateien und Architekturregisterdateien, die mit jedem gleichzeitigen Hardware-Thread verknüpft sind, der in der Grafikausführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird der Architekturzustand pro Thread in der ARF 526 gepflegt, während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 524 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern in der ARF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, bei der es sich um eine Kombination aus simultanem Multithreading (Simultaneous Multi-Threading, SMT) und feinkörnigem verschachtelten Multithreading (Interleaved Multi-Threading, IMT) handelt. Die Architektur hat eine modulare Konfiguration, die zur Entwurfszeit basierend auf einer Zielanzahl von gleichzeitigen Threads und einer Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei Ressourcen der Ausführungseinheit über Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads auszuführen. Die Anzahl logischer Threads, die durch die Grafikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und mehrere logische Threads können jedem Hardware-Thread zugewiesen sein.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 522 des Threads der Grafikausführungseinheit 508 kann die Anweisungen zur Ausführung an eines von der Sendeeinheit 530, der Verzweigungseinheit 532 oder den SIMD-FPU(s) 534 versenden. Jeder Ausführungsthread kann auf Universalregister in der GRF 524 zugreifen 128, wobei jedes Register 32 Bytes speichern kann, auf die als SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugegriffen werden kann. In einer Ausführungsform hat jeder Ausführungseinheit-Thread Zugriff auf 4 KBytes in der GRF 524, auch wenn Ausführungsformen nicht diesbezüglich eingeschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. In einer Ausführungsform ist die Grafikausführungseinheit 508 in sieben Hardware-Threads unterteilt, die Rechenoperationen unabhängig durchführen können, auch wenn die Anzahl von Threads pro Ausführungseinheit ebenfalls gemäß Ausführungsformen variieren kann. Beispielsweise werden, in einer Ausführungsform, 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 KBytes speichern. In Fällen, in denen 16 Threads auf 4 KBytes zugreifen können, kann die GRF 524 insgesamt 64 KBytes speichern. Flexible Adressierungsmodi können ermöglichen, dass Register zusammen adressiert werden, um effektiv breitere Register aufzubauen oder „strided“ rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Abtasteroperationen und andere Systemkommunikationen mit längerer Latenz über „Senden“-Anweisungen versendet, die von der Nachrichtenweitergabe-Sendeeinheit 530 ausgeführt werden. In einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 532 versendet, um eine SIMD-Divergenz und letztendliche Konvergenz zu ermöglichen.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (Floating Point Units, FPUs) 534 zum Durchführen von Gleitkommaoperationen auf. In einer Ausführungsform unterstützt bzw. unterstützen die FPU(s) 534 auch Ganzzahlberechnungen. In einer Ausführungsform kann bzw. 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 FPUs eine erweiterte mathematische Funktionalität bereit, um transzendente mathematische Funktionen mit hohem Durchsatz und 54-Bit-Gleitkomma mit doppelter Präzision zu unterstützen. In einigen Ausführungsformen liegt auch ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 535 vor, die speziell optimiert werden können, um Operationen durchzuführen, die mit Maschinenlernberechnungen verknüpft sind.
  • In einer Ausführungsform können Anordnungen von mehreren Instanzen der Ausführungseinheit 508 in einer Grafik-Teilkern-Gruppierung (z. B. einem Sub-Slice) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Teilkerngruppierung wä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 Thread, der in der Grafikausführungseinheit 508 ausgeführt wird, 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 beispielsweise in einer Rechen-Engine-Kachel 340A-340D wie in 3C sein, ohne jedoch hierauf beschränkt zu sein. Varianten der Ausführungseinheit 600 können auch in einer Grafik-Engine-Kachel 310A-310D wie in 3B verwendet werden. In einer Ausführungseinheit beinhaltet die Ausführungseinheit 600 eine Thread-Steuerungseinheit 601, eine Thread-Zustandseinheit 602, eine Anweisungsabruf-/Vorausladeeinheit 603 und eine Anweisungsdecodiereinheit 604. Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die Register speichert, welche Hardware-Threads in der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 beinhaltet 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 Grafikausführungseinheit 508 von 5B betrieben werden.
  • Die Ausführungseinheit 600 beinhaltet auch eine Recheneinheit 610, die mehrere unterschiedliche Arten von Funktionseinheiten aufweist. In einer Ausführungsform beinhaltet die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von arithmetischen Logikeinheiten aufweist. Die ALU-Einheit 611 kann dafür ausgelegt sein, 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen durchzuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig durchgeführt werden. Die Recheneinheit 610 kann auch eine systolische Anordnung 612 und eine Math-Einheit 613 beinhalten. Die systolische Anordnung 612 beinhaltet ein W weites und D tiefes Netz von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere datenparallele Operationen in einer systolischen Weise durchzuführen. In einer Ausführungsform kann die systolische Anordnung 612 dafür ausgelegt sein, Matrixoperationen durchzuführen, wie etwa Matrix-Skalarprodukt-Operationen. In einer Ausführungsform unterstützt die systolische Anordnung 612 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung 612 dafür ausgelegt sein, Maschinenlernoperationen zu beschleunigen. In solchen Ausführungsformen kann die systolische Anordnung 612 mit einer Unterstützung für das 16-Bit-Gleitkommaformat bfloat ausgelegt sein. In einer Ausführungsform kann eine Math-Einheit 613 enthalten sein, um einen spezifischen Teilsatz von mathematischen Operationen in einer effizienten und energiesparenderen Weise durchzuführen als die ALU-Einheit 611. Die Math-Einheit 613 kann eine Variante einer mathematischen Logik beinhalten, die in einer gemeinsam genutzten Funktionslogik einer Grafikverarbeitungs-Engine zu finden sein kann, welche von anderen Ausführungsformen bereitgestellt wird (z. B. die mathematische Logik 422 der gemeinsam genutzten Funktionslogik 420 von 4). In einer Ausführungsform kann die Math-Einheit 613 dafür ausgelegt sein, 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Thread-Steuerungseinheit 601 beinhaltet Logik, um die Ausführung von Threads in der Ausführungseinheit zu steuern. Die Thread-Steuerungseinheit 601 kann Thread-Arbitrierungslogik beinhalten, um die Ausführung von Threads in der Ausführungseinheit 600 zu starten, zu stoppen und vorzuziehen. Die Thread-Zustandseinheit 602 kann verwendet werden, um den Thread-Zustand für Threads zu speichern, die für eine Ausführung auf der Ausführungseinheit 600 zugewiesen sind. Das Speichern des Thread-Zustands in der Ausführungseinheit 600 ermöglicht ein schnelles Vorziehen von Threads, wenn diese Threads geblockt oder in den Leerlauf versetzt werden. Die Anweisungsabruf-/Vorausladeeinheit 603 kann Anweisungen aus einem Anweisungscache einer Ausführungslogik höherer Ebene (z. B. dem Anweisungscache 506 wie in 5A) abrufen. Die Anweisungsabruf-/Vorausladeeinheit 603 kann auch Vorausladeanforderungen für Anweisungen ausgeben, die in den Anweisungscache geladen werden sollen, basierend auf einer Analyse von derzeit ausgeführten Threads. Die Anweisungsdecodiereinheit 604 kann verwendet werden, um Anweisungen zu decodieren, die von den Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Anweisungsdecodiereinheit 604 als sekundärer Decoder verwendet werden, um komplexe Anweisungen in konstituierende Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die von Hardware-Threads verwendet werden kann, welche auf der Ausführungseinheit 600 ausgeführt werden. Register in der Registerdatei 606 können auf die Logik verteilt werden, die verwendet wird, um mehrere gleichzeitige Threads in der Recheneinheit 610 der Ausführungseinheit 600 auszuführen. Die Anzahl logischer Threads, die durch die Grafikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und mehrere logische Threads können jedem Hardware-Thread zugewiesen sein. Die Größe der Registerdatei 606 kann je nach Ausführungsform variieren, basierend auf der Anzahl von unterstützen Hardware-Threads. In einer Ausführungsform kann eine Registerumbenennung verwendet werden, um Register dynamisch Hardware-Threads zuzuweisen.
  • 7 ist ein Blockschaltbild, das Grafikprozessor-Anweisungsformate 700 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Anweisungssatz, der Anweisungen in mehreren Formaten aufweist. Die Kästchen mit durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheit-Anweisung enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. In einigen Ausführungsformen handelt es sich bei dem beschriebenen und veranschaulichten Anweisungsformat 700 um Makroweisungen, dahingehend, dass sie Anweisungen sind, die für die Ausführungseinheit bereitgestellt werden, im Gegensatz zu Mikrooperationen, die aus einer Anweisungsdecodierung resultieren, sobald die Anweisung verarbeitet worden ist.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Anweisungen in einem 128-Bit-Anweisungsformat 710. Ein verdichtetes 64-Bit-Anweisungsformat 730 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, Anweisungsoptionen und der Anzahl von Operanden verfügbar. Das native 128-Bit-Anweisungsformat 710 bietet Zugriff auf alle Anweisungsoptionen, während einige Optionen und Operationen im 64-Bit-Format 730 beschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen wird die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 verdichtet. Die Ausführungseinheit-Hardware referenziert einen Satz von Verdichtungstabellen basierend auf den Indexwerten und verwendet die Verdichtungstabellenausgaben, um eine native Anweisung im 128-Bit-Anweisungsformat 710 zu rekonstruieren. Auch andere Größen und Anweisungsformate können verwendet werden.
  • Für jedes Format definiert ein Anweisungs-Opcode 712 die Operation, welche die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden aus. Beispielsweise führt die Ausführungseinheit in Reaktion auf eine Addieranweisung eine gleichzeitige Addieroperation über jeden Farbkanal durch, der ein Texturelement oder ein Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden durch. In einigen Ausführungsformen ermöglicht das Anweisungssteuerfeld 714 eine Steuerung über bestimmte Ausführungsoptionen, wie etwa Kanalauswahl (z. B. Vorhersage) und Datenkanalreihenfolge (z. B. Swizzle). Für Anweisungen im 128-Bit-Anweisungsformat 710 beschränkt ein Ausführungsgrößenfeld (exec-size) 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen steht das Feld exec-size 716 nicht für die Verwendung im kompakten 64-Bit-Anweisungsformat 730 zur Verfügung.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden auf, was zwei Quelloperanden, src0 720, src1 722 und ein Ziel 718 einschließt. In einigen Ausführungseinheiten unterstützen die Ausführungseinheiten Doppelzielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden aufweisen (z.B., SRC2 724), wobei der Anweisungs-Opcode 712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein unmittelbarer (z.B. fest codierter) Wert sein, der mit der Anweisung weitergegeben wird.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das beispielsweise spezifiziert, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Beispielsweise kann die Anweisung in einem ersten Modus eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und in einem zweiten Modus kann die Anweisung eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfeldes 726, ob die Anweisung eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem unmittelbaren Adressfeld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen sind Anweisungen basierend auf Bitfeldern von Opcode 712 gruppiert, um die Opcode-Decodierung 740 zu vereinfachen. Für einen 8-bit-Opcode gestatten es die Bits 4, 5 und 6 der Ausführungseinheit, den Opcode-Typ zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen beinhaltet eine Bewegungs- und Logik-Opcode-Gruppe 742 Datenbewegungs- und Logikanweisungen (z. B. Bewegen (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und Logikgruppe 742 die fünf höchstwertigen Bits (Most Significant Bits, MSB) gemeinsam, wobei Anweisungen zum Bewegen (mov) in der Form 0000xxxxb vorliegen und Logikanweisungen in der Form 0001xxxxb vorliegen. Eine Flusssteuerungsanweisungsgruppe 744 (z.B. Aufruf, Sprung (jmp)) beinhaltet Anweisungen in der Form 0010xxxxb (z.B. 0x20). Eine sonstige Anweisungsgruppe 746 beinhaltet eine Mischung von Anweisungen, einschließlich Synchronisationsanweisungen (z.B. Warten, Senden) in der Form 0011xxxxb (z.B. 0x30). Eine Parallelmathematik-Anweisungsgruppe 748 beinhaltet komponentenweise arithmetische Anweisungen (z. B. Addieren (add), Multiplizieren (mul)) in der Form 0100xxxxb (z.B. 0x40). Die Parallelmathematik-Anweisungsgruppe 748 führt die arithmetischen Operationen parallel über Datenkanäle durch. Die Vektormathematik-Gruppe 750 beinhaltet arithmetische Anweisungen (z.B. dp4) in der Form 0101xxxxb (z.B. 0x50). Die Vektormathematik-Gruppe führt arithmetische Operationen durch, wie etwa Skalarprodukt-Berechnungen für Vektoroperanden. Die veranschaulichte Opcode-Decodierung 740 kann, in einer Ausführungsform, verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit verwendet wird, um eine decodierte Anweisung auszuführen. Beispielsweise können einige Anweisungen als systolische Anweisungen vorgesehen sein, die von einer systolischen Anordnung ausgeführt werden. Andere Anweisungen, wie etwa (hier nicht gezeigte) Raytracing-Anweisungen können an einen Raytracing-Kern oder eine Raytracing-Logik in einem Slice oder einer Partition der Ausführungslogik geleitet werden.
  • Grafik-Pipeline
  • 8 ist ein Blockschaltbild einer anderen Ausführungsform eines Grafikprozessors 800. Elemente von 8 mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Geometrie-Pipeline 820, eine Medien-Pipeline 830, eine Anzeige-Engine 840, Thread-Ausführungslogik 850 und eine Render-Ausgabe-Pipeline 870. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor in einem Mehrkern-Verarbeitungssystem, das einen oder mehrere Universal-Verarbeitungskerne beinhaltet. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere (nicht gezeigte) Steuerregister oder über Befehle gesteuert, die über eine Ringzwischenverbindung 802 an den Grafikprozessor 800 ausgegeben werden. In einigen Ausführungsformen koppelt die Ringzwischenverbindung 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten, wie etwa anderen Grafikprozessoren oder Universalprozessoren. Befehle von einer Ringzwischenverbindung 802 werden von einem Befehls-Streamer 803 interpretiert, der Anweisungen für einzelne Komponenten der Geometrie-Pipeline 820 oder der Medien-Pipeline 830 liefert.
  • In einigen Ausführungsformen lenkt der Befehls-Streamer 803 den Betrieb eines Vertex-Fetchers 805, der Vertex-Daten aus dem Speicher liest und Vertex-Verarbeitungsbefehle ausführt, die von dem Befehls-Streamer 803 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Fetcher 805 Vertex-Daten für einen Vertex-Shader 807 bereit, der Koordinatenraumtransformations- und Beleuchtungsoperationen für jeden Vertex durchführt. In einigen Ausführungsformen führen der Vertex-Fetcher 805 und der Vertex-Shader 807 Vertex-Verarbeitungsanweisungen durch, indem Ausführungsthreads über einen Thread-Dispatcher 831 an Ausführungseinheiten 852A-852B versendet werden.
  • In einigen Ausführungsformen handelt es sich bei den Ausführungseinheiten 852A-852B um eine Anordnung von Vektorprozessoren, die einen Anweisungssatz zum Durchführen von Grafik- und Medienoperationen aufweisen.
  • In einigen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen angehängten L1-Cache 851 auf, der für jede Anordnung spezifisch ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als Datencache, als Anweisungscache oder als einzelner Cache ausgelegt sein, der so partitioniert ist, dass Daten und Anweisungen in unterschiedlichen Partitionen enthalten sind.
  • In einigen Ausführungsformen beinhaltet die Geometrie-Pipeline 820 Tessellationskomponenten zum Durchführen einer hardwarebeschleunigten Tessellation von 3D-Objekten. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 811 die Tessellationsoperationen. Ein programmierbarer Domänen-Shader 817 stellt eine Backend-Auswertung der Tessellationsausgabe bereit. Ein Tessellator 813 arbeitet in Richtung des Hull-Shaders 811 und enthält eine spezielle Logik zum Generieren eines Satzes von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell, das als Eingabe für die Geometrie-Pipeline 820 bereitgestellt wird. In einigen Ausführungsformen können, falls keine Tessellation verwendet wird, können Tessellationskomponenten (z. B. der Hull-Shader 811, der Tessellator 813 und der Domänen-Shader 817) umgangen werden
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 819 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 852A-852B versendet werden, oder können direkt an den Clipper 829 weitergehen. In einigen Ausführungsformen bearbeitet der Geometrie-Shader gesamte geometrische Objekte statt Vertices oder Patches von Vertices wie in vorangehenden Stufen der Grafik-Pipeline. Falls die Tessellation deaktiviert ist, empfängt der Geometrie-Shader 819 Eingaben vom Vertex-Shader 807. In einigen Ausführungsformen ist der Geometrie-Shader 819 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tessellation durchzuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterisierung verarbeitet ein Clipper 829 Vertex-Daten. Bei dem Clipper 829 kann es sich um einen Clipper mit fester Funktion oder einen programmierbaren Clipper mit Clipping- und Geometrie-Shader-Funktionen handeln. In einigen Ausführungsformen versendet eine Rasterisierer- und Tiefentestkomponente 873 in der Render-Ausgabe-Pipeline 870 Pixel-Shader, um die geometrischen Objekte in Pro-Pixel-Darstellungen umzuwandeln. In einigen Ausführungsformen ist die Pixel-Shader-Logik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierer- und Tiefentestkomponente 873 umgehen und auf ungerasterte Vertex-Daten über eine Stream-Out-Einheit 823 zugreifen.
  • Der Grafikprozessor 800 weist einen Zwischenverbindungsbus, eine Zwischenverbindungsstruktur oder einen anderen Zwischenverbindungsmechanismus auf, der eine Daten- und Nachrichtenweitergabe zwischen den Hauptkomponenten des Prozessors gestattet. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und die zugehörigen Logikeinheiten (z. B. der L1-Cache 851, der Abtaster 854, der Textur-Cache 858 etc.) über einen Datenport 856 miteinander verbunden, um Speicherzugriffe durchzuführen und mit Render-Ausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils getrennte Speicherzugriffspfade auf. In einer Ausführungsform kann der Textur-Cache 858 auch als Abtaster-Cache ausgelegt sein.
  • In einigen Ausführungsformen enthält die Render-Ausgabe-Pipeline 870 eine Rasterisierer- und Tiefentestkomponente 873, die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung umwandelt. In einigen Anwendungen beinhaltet die Rasterisiererlogik eine Windower/Maskierer-Einheit zum Durchführen einer Dreiecks- und Linienrasterisierung mit fester Funktion. Ein zugehöriger Render-Cache 878 und Tiefencache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten durch, wenngleich in einigen Fällen Pixeloperationen, die mit 2D-Operationen verknüpft sind (z. B. Bitblock-Bildübertragungen mit Mischen) durch die 2D-Engine 841 durchgeführt werden oder zur Anzeigezeit von der Anzeigesteuerung 843 unter Verwendung von Overlay-Anzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache 875 für alle Grafikkomponenten verfügbar, was die gemeinsame Nutzung von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
  • In einigen Ausführungsformen beinhaltet die Medien-Pipeline 830 des Grafikprozessors eine Medien-Engine 837 und ein Video-Frontend 834. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipeline-Befehle von dem Befehls-Streamer 803. In einigen Ausführungsformen beinhaltet die Medien-Pipeline 830 einen getrennten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 837.
  • In einigen Ausführungsformen beinhaltet die Medien-Engine 837 Thread-Spawning-Funktionalität, um Threads zum Versenden an die Thread-Ausführungslogik 850 über den Thread-Dispatcher 831 zu spawnen.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Anzeige-Engine 840. In einigen Ausführungsformen befindet sich die Anzeige-Engine 840 außerhalb des Prozessors 800 und ist mit dem Grafikprozessor über die Ringzwischenverbindung 802 oder eine(n) andere(n) Zwischenverbindungsbus oder - struktur verbunden. In einigen Ausführungsformen beinhaltet die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843. In einigen Ausführungsformen enthält die Anzeige-Engine 840 Speziallogik, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. In einigen Ausführungsformen ist die Anzeigesteuerung 843 mit einer (nicht gezeigten) Anzeigevorrichtung gekoppelt, bei der es sich um eine systemintegrierte Anzeigevorrichtung wie in einem Laptop-Computer oder um eine externe Anzeigevorrichtung handeln kann, die über einen Anzeigevorrichtungsverbinder angeschlossen ist.
  • In einigen Ausführungsformen sind die Geometrie-Pipeline 820 und die Medien-Pipeline 830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind für keine bestimmte Anwendungsprogrammierschnittstelle (Application Programming Interface, API) spezifisch. In einigen Ausführungsformen übersetzt die Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können In einigen Ausführungsformen wird Unterstützung für OpenGL (Open Graphics Library), OpenCL (Open Computing Language) und/oder die Vulkan Grafik- und -Rechen-API geboten, die alle von der Khronos Group stammen. In einigen Ausführungsformen wird auch Unterstützung für die Direct3D-Bibliothek von der Microsoft Corporation geboten. In einigen Ausführungsformen kann auch eine Kombination dieser Bibliotheken unterstützt werden. Unterstützung kann auch für OpenCV (Open Source Computer Vision Library) geboten werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt werden, falls eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafik-Pipeline-Programmierung
  • 9A ist ein Blockschaltbild, das ein Grafikprozessor-Befehlsformat 900 gemäß einigen Ausführungsformen veranschaulicht. 9B ist ein Blockschaltbild, das eine Grafikprozessor-Befehlsfolge 910 gemäß einer Ausführungsform veranschaulicht. Die Kästchen mit durchgezogenen Linien in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 900 von 9A beinhaltet Datenfelder zum Identifizieren eines Clients 902, einen Befehlsoperationscode (Opcode) 904 und Daten 906 für den Befehl. Ein Sub-Opcode 905 und eine Befehlsgröße 908 sind ebenfalls in einigen Befehlen enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Grafikvorrichtung, welche die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehlsparser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls aufzubereiten und die Befehlsdaten an die entsprechende Client-Einheit zu leiten. In einigen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medien-Einheit auf. Jede Client-Einheit verfügt über eine entsprechende Verarbeitungspipeline, welche die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Sub-Opcode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 906 durch. 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-Opcode. In einigen Ausführungsformen sind Befehle über Vielfache eines Doppelwortes ausgerichtet. Auch andere Befehlsformate können verwendet werden.
  • Das Flussdiagramm in 9B veranschaulicht eine beispielhafte Grafikprozessor-Befehlsfolge 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der dargestellten Befehlsfolge, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolge wird nur zu Beispielszwecken gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge ausgegeben werden, sodass der Grafikprozessor die Folge von Befehlen wenigstens teilweise gleichzeitig verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlsfolge 910 mit einem Pipeline-Entleerungsbefehl 912 beginnen, um jede aktive Grafik-Pipeline zu veranlassen, die aktuell ausstehenden Befehle für die Pipeline abzuschließen. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medien-Pipeline 924 nicht gleichzeitig. Die Pipeline-Entleerung wird durchgeführt, um die aktive Grafik-Pipeline zu veranlassen, etwaige ausstehende Befehle abzuschließen. In Reaktion auf eine Pipeline-Entleerung unterbricht der Befehlsparser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichen-Engines ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Render-Cache, die als „dirty“ (geändert) gekennzeichnet sind, in den Speicher entleert werden. In einigen Ausführungsformen kann der Pipeline-Entleerungsbefehl 912 zur Pipeline-Synchronisierung oder vor dem Versetzen des Grafikprozessors in einen Niedrigenergiezustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen ist ein Pipeline-Auswahlbefehl 913 nur einmalig in einem Ausführungskontext erforderlich, bevor Pipeline-Befehle ausgegeben werden, es sei denn, der Kontext lautet, dass Befehle für beide Pipelines ausgegeben werden sollen. In einigen Ausführungsformen ist ein Pipeline-Entleerungsbefehl 912 unmittelbar vor einem Pipeline-Wechsel über den Pipeline-Auswahlbefehl 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 914 eine Grafik-Pipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medien-Pipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 914 zur Pipeline-Synchronisierung und zum Löschen von Daten aus einem oder mehreren Cache-Speichern in der aktiven Pipeline vor der Verarbeitung eines Stapels von Befehlen verwendet.
  • In einigen Ausführungsformen werden Rückgabepuffer-Zustandsbefehle 916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuteilung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine Cross-Thread-Kommunikation durchzuführen. In einigen Ausführungsformen beinhaltet der Rückgabepuffer-Zustand 916 das Auswählen der Größe und Anzahl von Rückgabepuffern zur Verwendung für einen Satz von Pipeline-Operationen.
  • Die verbleibenden Befehle in der Befehlsfolge differieren basierend auf der aktiven Pipeline für die Operationen. Basierend auf einer Pipeline-Bestimmung 920 wird die Befehlsfolge auf die 3D-Pipeline 922 beginnend mit dem 3D-Pipeline-Zustand 930 oder auf die Medien-Pipeline 924 beginnend mit dem Medien-Pipeline-Zustand 940 zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipeline-Zustands 930 beinhalten 3D-Zustand-Einstellungsbefehle für einen Vertex-Pufferzustand, einen Vertex-Elementzustand, einen konstanten Farbzustand, einen Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Grundelement-Befehle verarbeitet werden. Die Werte dieser Befehle werden wenigstens teilweise basierend auf der jeweils verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind Befehle zum 3D-Pipeline-Zustand 930 auch in der Lage, bestimmte Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, wenn diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der 3D-Grundelement-Befehl 932 verwendet, um von der 3D-Pipeline zu verarbeitende 3D-Grundelemente zu übergeben. Befehle und zugehörige Parameter, die über den 3D-Grundelement-Befehl 932 an den Grafikprozessor weitergegeben werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Daten des 3D-Grundelement-Befehls 932, um Vertex-Datenstrukturen zu generieren. Die Vertex-Datenstrukturen sind in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen, wird der 3D-Grundelement-Befehl 932 verwendet, um Vertex-Operationen an 3D-Grundelementen über Vertex-Shader durchzuführen. Um Vertex-Shader zu verarbeiten, versendet die 3D-Pipeline 922 Shader-Ausführungsthreads an Grafikprozessor- Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über den Befehl oder das Ereignis Ausführen 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang die Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über den Befehl „go“ oder „kick“ in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Grafik-Pipeline zu entleeren. Die 3D-Pipeline wird eine Geometrieverarbeitung für die 3D-Grundelemente durchführen. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert, und die Pixel-Engine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern der Pixel-Shading- und Pixel-Backend-Operationen können auch für diese Operationen eingezogen sein.
  • In einigen Ausführungsformen folgt die Grafikprozessor-Befehlsfolge 910 dem Pfad der Medien-Pipeline 924, wenn Medienoperationen durchgeführt werden. Im Allgemeinen hängen die spezifische Verwendung und die Art und Weise der Programmierung für die Medien-Pipeline 924 von den durchzuführenden Medien- oder Rechenoperationen ab. Spezifische Mediendecodieroperationen können während der Mediendecodierung an die Medien-Pipeline ausgelagert werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Universal-Verarbeitungskernen bereitgestellt werden. In einer Ausführungsformen beinhaltet die Medien-Pipeline auch Elemente für GPGPU-Operationen (General-Purpose Graphics Processor Unit, Universal-Grafikprozessoreinheit), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechen-Shader-Programmen durchzuführen, die sich nicht explizit auf das Rendern von Grafikgrundelementen beziehen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 924 in ähnlicher Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medien-Pipeline-Zustands 940 wird versendet oder vor den Medienobjektbefehlen 942 in eine Befehlswarteschlange eingestellt. In einigen Ausführungsformen weisen die Befehle für den Medien-Pipeline-Zustand 940 Daten zum Konfigurieren der Medien-Pipeline-Elemente auf, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies beinhaltet Daten zum Konfigurieren der Videodecodier- und Videocodierlogik in der Medien-Pipeline, wie etwa ein Codier- oder Decodierformat. In einigen Ausführungsformen unterstützten die Befehle für den Medien-Pipeline-Zustand 940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger auf Medienobjekte für die Verarbeitung durch die Medien-Pipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 942 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und Medienobjektbefehle 942 in eine Warteschlange eingereiht sind, wird die Medien-Pipeline 924 über einen Ausführen-Befehl 944 oder ein gleichwertiges Ausführungsereignis (z. B. einen Registerschreibvorgang) ausgelöst. Die Ausgabe aus der Medien-Pipeline 924 kann dann durch Operationen, die von der 3D-Pipeline 922 oder der Medien-Pipeline 924 bereitgestellt werden, nachbearbeitet werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafiksoftwarearchitektur
  • 10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und wenigstens einen Prozessor 1030. In einigen Ausführungsformen weist der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Universal-Prozessorkerne 1034 auf. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils in dem Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 1010 ein oder mehrere Shader-Programme mit Shader-Anweisungen 1012. Die Shader-Sprachanweisungen können in einer Shader-Sprache hoher Ebene wie etwa HLSL (High Level Shader Language) von Direct3D oder GLSL (OpenGL Shader Language) und so weiter vorliegen. Die Anwendung beinhaltet auch ausführbare Anweisungen 1014 in einer Maschinensprache, die sich für die Ausführung durch den Universal-Prozessorkern 1034 eignet. Die Anwendung beinhaltet außerdem Grafikobjekte 1016, die durch Vertex-Daten definiert sind.
  • In einigen Ausführungsformen handelt es sich bei dem Betriebssystem 1020 um ein Microsoft® Windows® Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 1020 kann eine Grafik-API 1022 wie etwa die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API im Einsatz ist, verwendet das Betriebssystem 1020 einen Frontend-Shader-Compiler 1024, um beliebige Shader-Anweisungen 1012 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Bei der Kompilierung kann es sich um eine Just-in-Time (JIT)-Kompilierung handeln oder die Anwendung kann eine Shader-Vorkompilierung durchführen. In einigen Ausführungsformen werden Shader hoher Ebene während der Kompilierung der 3D-Grafikanwendung 1010 in Shader niedrigerer Ebene kompiliert. In einigen Ausführungsformen werden die Shader-Anweisungen 1012 in einer Zwischenform bereitgestellt, beispielsweise einer Version von Standard Portable Intermediate Representation (SPIR), das von der Vulkan-API verwendet wird.
  • In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 1026 einen Backend-Shader-Compiler 1027, um die Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API im Einsatz ist, werden Shader-Anweisungen 1012 in der GLSL-Hochsprache zur Kompilierung an einen Benutzermodus-Grafiktreiber 1026 weitergegeben. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 Betriebssystem-Kernelmodus-Funktionen 1028, um mit einem Kernelmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu versenden.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentativen Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik in einer integrierten Schaltung wie etwa einem Prozessor repräsentiert und/oder definiert. Beispielsweise kann das maschinenlesbare Medium Befehle beinhalten, die verschiedene Logiken im Prozessor repräsentieren. Beim Auslesen durch eine Maschine können die Befehle die Maschine veranlassen, die Logik zu fertigen, um die hier beschriebenen Techniken bzw. Verfahren durchzuführen. Solche Darstellungen, „IP-Kerne“ genannt, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem physischen, maschinenlesbaren Medium als Hardwaremodell, das die Struktur der integrierten Schaltung beschreibt, gespeichert sein können. Das Hardwaremodell kann an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, welche das Hardwaremodell auf Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann dergestalt gefertigt werden, dass die Schaltung Operationen durchführt, die im Zusammenhang mit den hier beschriebenen Ausführungsformen beschrieben werden.
  • 11A ist ein Blockschaltbild, das ein IP-Kernentwicklungssystem veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung zum Durchführen von Operationen gemäß einer Ausführungsform herzustellen. Das IP-Kernentwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu generieren, die in einen größeren Entwurf integriert oder verwendet werden können, um eine vollständige integrierte Schaltung (z. B. eine integrierte SoC-Schaltung) zu konstruieren. Eine Entwurfseinrichtung 1130 kann eine Softwaresimulation 1110 eines IP-Kernentwurfs in einer Programmiersprache höherer Ebene (z. B. C/C++) generieren. Die Softwaresimulation 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 beinhalten. Ein Entwurf für eine Registertransferebene (Register Transfer Level, RTL) kann dann anhand des Simulationsmodells 1112 erstellt oder synthetisiert werden. Der RTL-Entwurf 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss von digitalen Signalen zwischen Hardwareregistern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu einem RTL-Entwurf 1115 können auch untergeordnete Entwürfe auf der Logikebene oder der Transistorebene erstellt, entwickelt oder synthetisiert werden. Somit können die besonderen Einzelheiten des Erstentwurfs und der Simulation variieren.
  • Der RTL-Entwurf 1115 oder ein Äquivalent können ferner von der Entwurfseinrichtung in ein Hardwaremodell 1120 synthetisiert werden, das in einer Hardware-Beschreibungssprache (Hardware Description Language, HDL) oder einer anderen Repräsentation von physischen Entwurfsdaten vorliegen kann. Die HDL kann ferner simuliert oder getestet werden, um den IP-Kernentwurf zu verifizieren. Der IP-Kernentwurf kann zur Übergabe an eine Drittanbieter-Fertigungseinrichtung 1165 unter Verwendung von nichtflüchtigem Speicher 1140 (z. B. einer Festplatte, Flash-Speicher oder einem beliebigen nichtflüchtigen Datenspeichermedium) gespeichert werden. Alternativ kann der IP-Kernentwurf über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 (z. B. via Internet) übertragen werden. Die Fertigungseinrichtung 1165 kann dann eine integrierte Schaltung fertigen, die wenigstens teilweise auf dem IP-Kernentwurf basiert. Die gefertigte integrierte Schaltung kann dafür ausgelegt sein, Operationen gemäß wenigstens einer der hier beschriebenen Ausführungsformen durchzuführen.
  • 11B zeigt eine Querschnitt-Seitenansicht der Gehäusebaugruppe einer integrierten Schaltung 1170 gemäß einigen hier beschriebenen Ausführungsformen. Die Gehäusebaugruppe der integrierten Schaltung 1170 veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen wie hier beschrieben. Die Gehäusebaugruppe 1170 beinhaltet mehrere Einheiten von Hardwarelogik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann wenigstens teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Abschnitte von dem/den Prozessorkern(en), Grafikprozessor(en) oder anderen hier beschriebenen Beschleunigervorrichtungen aufweisen. Jede Logikeinheit 1172, 1174 kann in einem Halbleiterplättchen implementiert und über eine Zwischenverbindungsstruktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann dafür ausgelegt sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten und kann Zwischenverbindungen, beispielsweise, jedoch nicht beschränkt auf Kontakthöcker oder Pfeiler, aufweisen. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 dafür ausgelegt sein, elektrische Signale wie etwa Eingabe/Ausgabe (E/A)-Signale und/oder Leistungs- oder Massesignale, die mit dem Betrieb der Logik 1172, 1174 verknüpft sind, zu leiten. In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen auch andere geeignete Arten von Substraten aufweisen. Die Gehäusebaugruppe 1170 kann über eine Gehäusezwischenverbindung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Gehäusezwischenverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie etwa eine Hauptplatine, einen anderen Chipsatz oder ein Multi-Chipmodul.
  • In einigen Ausführungsformen sind die Logikeinheiten 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die dafür ausgelegt ist, elektrische Signale zwischen der Logik 1172, 1174 zu leiten. Bei der Brücke 1182 kann es sich um eine dichte Zwischenverbindungsstruktur handeln, die eine Route für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Auch wenn zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 veranschaulicht sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Halbleiterplättchen aufweisen. Die ein oder mehreren Halbleiterplättchen können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Halbleiterplättchen enthalten ist. Alternativ können mehrere Halbleiterplättchen oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Halbleiterplättchen und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • 11C veranschaulicht eine Gehäusebaugruppe 1190, die mehrere Einheiten von Hardware-Logik-Chiplets beinhaltet, die mit einem Substrat 1180 (z. B. einem Basis-Halbleiterplättchen) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger wie hier beschrieben können sich aus diversen Silizium-Chiplets zusammensetzen, die getrennt gefertigt sind. In diesem Kontext ist ein Chiplet eine wenigstens teilweise gepackte integrierte Schaltung, die einzelne Logikeinheiten beinhaltet, welche mit anderen Chiplets zu einem größeren Paket zusammengesetzt werden können. Ein vielfältiger Satz von Chiplets mit unterschiedlicher IP-Kern-Logik kann zu einer einzelnen Vorrichtung zusammengesetzt werden. Zusätzlich können die Chiplets unter Verwendung einer aktiven Interposer-Technologie in ein Basis-Halbleiterplättchen oder ein Basis-Chiplet integriert werden. Die hier beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den unterschiedlichen IP-Formen in der GPU. IP-Kerne können unter Verwendung unterschiedlicher Prozesstechnologien gefertigt und während der Fertigung zusammengestellt werden, wodurch die Komplexität des Zusammenführens mehrerer IPs, insbesondere auf einem großen SoC mit mehreren IP- Varianten, zu ein und demselben Fertigungsprozess vermieden wird. Indem das Verwenden mehrerer Prozesstechnologien ermöglicht wird, wird die Markteinführungszeit verkürzt und eine kostengünstige Möglichkeit zum Erstellen mehrerer Produkt-SKUs bereitgestellt. Zusätzlich sind die getrennten IPs empfänglicher für ein unabhängiges Power-Gating; Komponenten, die bei einer gegebenen Arbeitslast nicht verwendet werden, können abgeschaltet werden, was den Gesamtstromverbrauch reduziert.
  • Die Hardware-Logik-Chiplets können Hardware-Logik-Chiplets für spezielle Zwecke 1172, Logik oder E/A-Chiplets 1174 beinhalten und/oder Speicher-Chiplets 1175. Die Hardware-Logik-Chiplets 1172 und Logik- oder E/A-Chiplets 1174 können wenigstens teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und können einen oder mehrere Abschnitte von dem/den Prozessorkern(en), Grafikprozessor(en), Parallelprozessoren oder anderen hier beschriebenen Beschleunigervorrichtungen beinhalten. Die Speicher-Chiplets 1175 können als DRAM-Speicher (z. B. GDDR, HBM) oder Cache-Speicher (SRAM) ausgeführt sein.
  • Jedes Chiplet kann als getrenntes Halbleiterplättchen gefertigt sein und über eine Zwischenverbindungstruktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann dafür ausgelegt sein, elektrische Signale zwischen den verschiedenen Chiplets und der Logik in dem Substrat 1180 zu leiten. Die Zwischenverbindungsstruktur 1173 kann Zwischenverbindungen aufweisen, wie etwa, ohne jedoch hierauf beschränkt zu sein, Kontakthöcker oder Pfeiler. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 dafür ausgelegt sein, elektrische Signale wie etwa Eingabe/Ausgabe (E/A)-Signale und/oder Leistungs- oder Massesignale, die mit dem Betrieb der Logik-, E/A- und Speicher-Chiplets verknüpft sind, zu leiten.
  • In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen auch andere geeignete Arten von Substraten aufweisen. Die Gehäusebaugruppe 1190 kann über eine Gehäusezwischenverbindung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Gehäusezwischenverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie etwa eine Hauptplatine, einen anderen Chipsatz oder ein Multi-Chipmodul.
  • In einigen Ausführungsform können eine Logik oder ein E/A-Chiplet 1174 und ein Speicher-Chiplet 1175 über eine Brücke 1187 elektrisch gekoppelt sein, die dafür ausgelegt ist, elektrische Signale zwischen der Logik oder dem E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 zu leiten. Bei der Brücke 1187 kann es sich um eine dichte Zwischenverbindungsstruktur handeln, die eine Route für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik oder dem E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als Siliziumbrücke oder Zwischenverbindungsbrücke bezeichnet werden. Beispielsweise ist die Brücke 1187 in einigen Ausführungsformen eine eingebettete Multi-Die-Zwischenverbindungsbrücke (Embedded Multi-Die Interconnect Bridge, EMIB). In einigen Ausführungsformen kann die Brücke 1187 einfach eine Direktverbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 1180 kann Hardwarekomponenten für E/A 1191, Cache-Speicher 1192 und andere Hardwarelogik 1193 beinhalten. Ein Fabric 1185 kann in das Substrat 1180 eingebettet sein, um eine Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 1191, 1193 in dem Substrat 1180 zu ermöglichen. In einer Ausführungsform können E/A 1191, Fabric 1185, Cache, Brücke und andere Hardwarelogik 1193 in ein Basis-Halbleiterplättchen integriert sein, das dem Substrat 1180 überlagert ist.
  • In verschiedenen Ausführungsform kann die Gehäusebaugruppe 1190 eine geringere oder größere Anzahl von Komponenten und Chiplets beinhalten, die durch einen Fabric 1185 oder eine oder mehrere Brücken 1187 miteinander verbunden sind. Die Chiplets in der Gehäusebaugruppe 1190 können in einer 3D- oder 2.5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um eine Punkt-zu-Punkt-Verbindung zwischen beispielsweise Logik- oder E/A-Chiplets und Speicher-Chiplets zu ermöglichen. Der Fabric 1185 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Chiplets (z. B Chiplets 1172, 1174, 1191, 1193) mit anderen Logik- und/oder E/A-Chiplets zu verbinden. In einer Ausführungsform kann der Cache-Speicher 1192 in dem Substrat als ein globaler Cache für die Gehäusebaugruppe 1190, Teil eines verteilten globalen Caches oder als dedizierter Cache für den Fabric 1185 fungieren.
  • 11D veranschaulicht eine Gehäusebaugruppe 1194 mit austauschbaren Chiplets 1195 gemäß einer Ausführungsform. Die austauschbaren Chiplets 1195 können in standardisierte Steckplätze auf einem oder mehreren Basis-Chiplets 1196, 1198 montiert werden. Die Basis-Chiplets 1196, 1198 können über eine Brückenzwischenverbindung 1197, die ähnlich wie die anderen hier beschriebenen Brückenzwischenverbindungen sein kann und beispielsweise eine EMIB sein kann, gekoppelt werden. Speicher-Chiplets können auch über eine Brückenzwischenverbindung mit Logik oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über einen Zwischenverbindungs-Fabric kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für eines von Logik oder E/A oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM und Leistungsbereitstellungsschaltungen in ein oder mehrere der Basis-Chiplets 1196, 1198 eingearbeitet sein, die unter Verwendung unterschiedlicher Prozesstechnologien gefertigt sein können, bezogen auf die austauschbaren Chiplets 1195, die oben auf den Basis-Chiplets gestapelt sind. Beispielsweise können die Basis-Chiplets 1196, 1198 unter Verwendung einer größeren Prozesstechnologie gefertigt sein, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie gefertigt sein können. Ein oder mehrere der austauschbaren Chiplets 1195 können Speicher-Chiplets sein (z. B. DRAM). Unterschiedliche Speicherdichten können für die Gehäusebaugruppe 1194 ausgewählt werden, basierend auf dem Stromverbrauch und/oder der angestrebten Leistung für das Produkt, das die Gehäusebaugruppe 1194 verwendet. Zusätzlich können Logik-Chiplets mit einer unterschiedlichen Typanzahl von Funktionseinheiten zum Montagezeitpunkt ausgewählt werden, basierend auf dem Stromverbrauch und/oder der angestrebten Leistung für das Produkt. Zusätzlich können Chiplets, die IP-Logik-Kerne unterschiedlicher Typen enthalten, in die austauschbaren Chiplet-Steckplätze eingefügt werden, was Hybridprozessorentwürfe ermöglicht, die IP-Blöcke unterschiedlicher Technologien mischen und anpassen können.
  • Beispielhafte integrierte Schaltung eines Ein-Chip-Svstems
  • Die 12-13 veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hier beschriebenen Ausführungsformen gefertigt werden können. Zusätzlich zu dem Veranschaulichten können eine andere Logik und andere Schaltungen enthalten sein, einschließlich zusätzlicher Graphikprozessoren/-kerne, Peripherie-Schnittstellen-Controller oder Universalprozessorkerne.
  • 12 ist ein Blockschaltbild, das eine beispielhafte integrierte Schaltung 1200 eines Ein-Chip-Systems veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. Die beispielhafte integrierte Schaltung 1200 beinhaltet einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs), wenigstens einen Grafikprozessor 1210 und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 beinhalten, von denen jeder ein modularer IP-Kern von derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung 1200 beinhaltet Peripherie- oder Buslogik, einschließlich einer USB-Steuerung 1225, einer UART-Steuerung 1230, einer SPI/SDIO-Steuerung 1235 und einer I2S/I2-Steuerung 1240. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einem oder mehreren von einer HDMI (High-Definition Multimedia Interface)-Steuerung 1250 und einer MIPI (Mobile Industry Processor Interface)-Anzeigeschnittstelle 1255 gekoppelt ist. Eine Datenspeicherung kann durch ein Flash-Speicher-Subsystem 1260 bereitgestellt sein, das einen Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. Die Speicherschnittstelle kann über eine Speichersteuerung 1265 für Zugriffe auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 1270 auf.
  • Die 13A-13B sind Blockschaltbilder, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hier beschriebenen Ausführungsformen veranschaulichen. 13A veranschaulicht einen beispielhaften Grafikprozessor 1310 einer integrierten Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. 13B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 1340 einer integrierten Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. Der Grafikprozessor 1310 von 13A ist ein Beispiel für einen leistungsarmen Grafikprozessorkern. Der Grafikprozessor 1340 von 13B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistung. Jeder der Grafikprozessoren 1310, 1340 kann eine Variante des Grafikprozessors 1210 von 12 sein.
  • Wie in 13A gezeigt, weist der Grafikprozessor 1310 einen Vertex-Prozessor 1305 und einen oder mehrere Fragment-Prozessoren 1315A-1315N auf (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N-1 und 1315N). Der Grafikprozessor 1310 kann verschiedene Shader-Programme über getrennte Logik ausführen, sodass der Vertex-Prozessor 1305 dafür optimiert ist, Operationen für Vertex-Shader-Programme auszuführen, während die ein oder mehreren Fragment-Prozessoren 1315A-1315N Fragment-Shading-Operationen (z. B. Pixel-Shading-Operationen) für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 1305 führt die Vertex-Verarbeitungsstufe der 3D-Grafik-Pipeline durch und generiert Grundelement- und Vertex-Daten. Die ein oder mehreren Fragment-Prozessoren 1315A-1315N verwenden die von dem Vertex-Prozessor 1305 generierten Grundelement- und Vertex-Daten, um einen Rahmenpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die ein oder mehreren Fragment-Prozessoren 1315A-1315N dafür optimiert, Fragment-Shader-Programme wie in der OpenGL-API vorgesehen auszuführen, die verwendet werden können, um ähnliche Operationen wie in einem Pixel-Shader-Programm, wie in der Direct 3D-API vorgesehen, durchzuführen.
  • Der Grafikprozessor 1310 weist zusätzlich eine oder mehrere Speicherverwaltungseinheiten (Memory Management Units, MMUs) 1320A-1320B, einen oder mehrere Caches 1325A-1325B und eine oder mehrere Schaltungszwischenverbindungen 1330A-1330B auf. Die ein oder mehreren MMUs 1320A-1320B sehen eine Abbildung von virtuellen zu physischen Adressen für den Grafikprozessor 1310, einschließlich des Vertex-Prozessors 1305 und/oder der ein oder mehreren Fragment-Prozessoren 1315A-1315N, vor, welche auf Vertex- oder Bild-/Texturdaten verweisen können, die im Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Texturdaten, die in den ein oder mehreren Caches 1325A-1325B gespeichert sind. In einer Ausführungsform können die ein oder mehreren MMUs 1320A-1320B mit anderen MMUs im System synchronisiert sein, einschließlich ein oder mehrerer MMUs, die mit den ein oder mehreren Anwendungsprozessoren 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 verknüpft sind, sodass jeder Prozessor 1205-1220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die ein oder mehreren Schaltungszwischenverbindungen 1330A-1330B ermöglichen es dem Grafikprozessor 1310, eine Schnittstellenverbindung mit anderen IP-Kernen im SoC gemäß Ausführungsformen entweder über einen internen Bus des SoC oder über eine Direktverbindung herzustellen.
  • Wie in 13B gezeigt, beinhaltet der Grafikprozessor 1340 die ein oder mehreren MMUs 1320A-1320B, Caches 1325A-1325B und Schaltungszwischenverbindungen 1330A-1330B des Grafikprozessors 1310 von 13A. Der Grafikprozessor 1340 beinhaltet einen oder mehrere Shader-Kerne 1355A-1355N (z. B., 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N), wodurch eine vereinheitlichte Shader-Kern-Architektur bereitgestellt wird, in der ein einzelner Kern oder Kerntyp alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zum Implementieren von Vertex-Shadern, Fragment-Shadern und/oder Rechen-Shadern. Die genaue Anzahl vorhandener Shader-Kerne kann je nach Ausführungsform und Implementierung variieren. Zusätzlich beinhaltet der Grafikprozessor 1340 einen Zwischenkern-Aufgabenmanager 1345, der als Thread-Dispatcher zum Versenden von Ausführungsthreads an einen oder mehrere Shader-Kerne 1355A-1355N fungiert, und eine Kacheleinheit 1358 zum Beschleunigen von Kacheloperationen für das kachelbasierte Rendering, bei dem Rendering-Operationen für eine Szene in Bildraum unterteilt sind, beispielsweise um eine lokale räumliche Kohärenz in einer Szene auszunutzen oder um die Verwendung interner Caches zu optimieren.
  • 14 veranschaulicht eine Ausführungsform einer Rechenvorrichtung 1400. Die Rechenvorrichtung 1400 (z. B. intelligente tragbare Vorrichtungen, VR (Virtual Reality)-Vorrichtungen, kopfmontierte Anzeigen (Head-Mounted Displays, HMDs), mobile Computer, IoT (Internet of Things)-Vorrichtungen, Laptop-Computer, Desktop-Computer, Server-Computer etc.) kann mit dem Verarbeitungssystem 100 von 1 identisch sein, und dementsprechend werden, der Kürze und Übersichtlichkeit halber sowie zum besseren Verständnis, viele der vorstehend angeführten Einzelheiten mit Bezug auf 1-13 nicht weiter erörtert oder nachstehend wiederholt.
  • Die Rechenvorrichtung 1400 kann eine beliebige Anzahl und eine beliebige Art von Kommunikationsvorrichtungen beinhalten, beispielsweise große Rechenvorrichtungen wie etwa Server-Computer, Desktop-Computer etc. und kann ferner Set-Top-Boxen (z. B. Internet-basierte Kabel-TV-Set-Top-Boxen etc.), auf dem globalen Positionsbestimmungssystem (GPS) basierende Vorrichtungen etc. beinhalten. Die Rechenvorrichtung 1400 kann mobile Rechenvorrichtungen beinhalten, die als Kommunikationsvorrichtungen dienen, beispielsweise Mobiltelefone, einschließlich Smartphones, persönliche digitale Assistenten (PDAs), Tablet-Computer, Laptop-Computer, E-Reader, Smart-TVs, TV-Plattformen, am Körper tragbare Vorrichtungen (z. B. Brillen, Uhren, Armbänder, Smartcards, Schmuck, Kleidungsstücke etc.), Medienwiedergabegeräte etc. Beispielsweise kann die Rechenvorrichtung 1400 in einer Ausführungsform eine mobile Rechenvorrichtung beinhalten, die eine Computerplattform einsetzt, welche eine integrierte Schaltung (Integrated Circuit, „IC“) wie etwa ein Ein-Chip-System (System on a Chip, „SoC“ oder „SOC“) hostet, die verschiedene Hardware- und/oder Softwarekomponenten der Rechenvorrichtung 1400 auf einem einzelnen Chip integriert.
  • Wie veranschaulicht kann die Rechenvorrichtung 1400 in einer Ausführungsform eine beliebige Anzahl und Art von Hardware- und/oder Softwarekomponenten beinhalten, wie etwa (ohne Beschränkung) GPU 1414, Grafiktreiber (auch als „GPU-Treiber“, „Grafiktreiberlogik“, „Treiberlogik“, Benutzermodustreiber (User-Mode Driver, UMD), UMD, Benutzermodustreiber-Framework (User-Mode Driver Framework, UMDF), UMDF oder einfach „Treiber“ bezeichnet) 1416, CPU 1412, Speicher 1408, Netzvorrichtungen, Treiber oder dergleichen sowie Eingabe-/Ausgabe (E/A)-Quellen 1404, beispielsweise Berührungsschirme, Berührungstafeln, Berührungsfelder, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbinder etc.
  • Die Rechenvorrichtung 1400 kann ein Betriebssystem (Operating System, OS) 1406 beinhalten, das als Schnittstelle zwischen Hardware- und/oder physischen Ressourcen der Rechenvorrichtung 1400 und einem Benutzer dient. Es ist vorgesehen, dass die CPU 1412 einen oder mehrere Prozessoren aufweisen kann, während die GPU 1414 einen oder mehrere Grafikprozessoren aufweisen kann.
  • Es ist zu beachten, dass Begriffe wie „Knoten“, „Rechenknoten“, „Server“, „Server-Vorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Server-Computer“, „Maschine“, „Host-Maschine“, „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Rechensystem“ und dergleichen im gesamten Dokument austauschbar verwendet werden können. Es ist ferner zu beachten, dass Begriffe wie „Anwendung“, „Softwareanwendung“, „Programm“, „Softwareprogramm“, „Paket“, „Softwarepaket“ und dergleichen im gesamten Dokument austauschbar verwendet werden können. Auch Begriffe wie „Auftrag“, „Eingabe“, „Anforderung“, „Nachricht“ und dergleichen können im gesamten Dokument austauschbar verwendet werden.
  • Es ist vorgesehen, dass, wie ferner unter Bezugnahme auf 1-13 beschrieben wird, einige Prozesse der Grafik-Pipeline wie vorstehend beschrieben in Software implementiert sind, während der Rest in Hardware implementiert ist. Eine Grafik-Pipeline kann in einem Grafik-Coprozessor-Entwurf implementiert sein, wobei die CPU 1412 so konzipiert ist, dass sie mit der GPU 1414 arbeitet, die in der CPU 1412 enthalten oder gemeinsam mit dieser angeordnet sein kann. In einer Ausführungsform kann die GPU 1414 eine beliebige Anzahl und Art von herkömmlicher Software- und Hardwarelogiken einsetzen, um die herkömmlichen Funktionen im Zusammenhang mit dem Grafik-Rendering durchzuführen, sowie neuartige Software- und Hardwarelogik zum Ausführen einer beliebigen Anzahl und Art von Anweisungen.
  • Wie vorstehend erwähnt, kann der Speicher 1408 einen Direktzugriffsspeicher (Random Access Memory, RAM) beinhalten, der eine Anwendungsdatenbank mit Objektinformationen umfasst. Ein Speichersteuerungsknoten kann auf Daten im RAM zugreifen und diese zur Grafik-Pipeline-Verarbeitung an die GPU 1414 weiterleiten. RAM kann RAM mit doppelter Datenrate (DDR RAM), RAM mit erweiterter Datenausgabe (EDO RAM) etc. beinhalten. Die CPU 1412 interagiert mit einer Hardware-Grafik-Pipeline, um eine Grafik-Pipeline-Funktionalität gemeinsam zu nutzen.
  • Verarbeitete Daten werden in einem Puffer in der Hardware-Grafik-Pipeline gespeichert, und Zustandsinformationen werden im Speicher 1408 gespeichert. Das resultierende Bild wird dann an E/A-Quellen 1504 übertragen, wie etwa eine Anzeigekomponente zum Anzeigen des Bildes. Es ist vorgesehen, dass die Anzeigevorrichtung verschiedenartig ausgeführt sein kann, beispielsweise als Kathodenstrahlröhre (Cathode Ray Tube, CRT), Dünnfilmtransistor (Thin Film Transistor, TFT), Flüssigkristallanzeige (Liquid Crystal Display. LCD), Anordnung von organischen Leuchtdioden (Organic Light Emitting Diode, OLEDs) etc., um Informationen für einen Benutzer anzuzeigen.
  • Der Speicher 1408 kann eine vorab zugeteilte Region eines Puffers (z. B. eines Rahmenpuffers) umfassen; allerdings sollte ein Durchschnittsfachmann erkennen, dass die Ausführungsformen nicht hierauf beschränkt sind und dass ein beliebiger Speicher, der für die tieferliegende Grafik-Pipeline zugänglich ist, verwendet werden kann. Die Rechenvorrichtung 1500 kann ferner einen Plattformsteuerungsknoten (Platform Controller Hub, PCH) 130, wie er in 1 referenziert wird, als eine oder mehrere E/A-Quellen 1404 etc. aufweisen.
  • Die CPU 1412 kann einen oder mehrere Prozessoren zum Ausführen von Anweisungen aufweisen, um beliebige Softwareroutinen durchzuführen, die das Rechensystem implementiert. Die Anweisungen beinhalten häufig eine Art von Operation, die an Daten durchgeführt wird. Sowohl Daten als auch Anweisungen können in Systemspeicher 1408 und einem beliebigen zugehörigen Cache gespeichert sein. Ein Cache ist typischerweise dafür ausgelegt, kürzere Latenzzeiten aufzuweisen als der Systemspeicher 1408; beispielsweise könnte ein Cache auf denselben ein oder mehreren Siliziumchips integriert sein wie die ein oder mehreren Prozessoren und/oder mit schnelleren statischen RAM (SRAM)-Zellen konstruiert sein, während der Systemspeicher 1408 mit langsameren dynamischen RAM (DRAM)-Zellen konstruiert sein könnte. Indem häufiger verwendete Anweisungen und Daten tendenziell im Cache und nicht im Systemspeicher 1508 gespeichert werden, verbessert sich Gesamtleistungseffizienz der Rechenvorrichtung 1400. Es ist vorgesehen, dass in einigen Ausführungsformen die GPU 1414 als Teil der CPU 1412 vorliegen kann (beispielsweise als Teil des physischen CPU-Pakets), in welchem Fall der Speicher 1408 von der CPU 1412 und der GPU 1414 gemeinsam genutzt oder getrennt gehalten werden kann.
  • Der Systemspeicher 1408 kann für andere Komponenten in der Rechenvorrichtung 1400 zur Verfügung gestellt werden. Beispielsweise werden beliebige Daten (z. B. Eingangsgrafikdaten), die von verschiedenen Schnittstellen zur Rechenvorrichtung 1400 (z. B. Tastatur und Maus, Druckeranschluss, LAN (Local Area Network)-Anschluss, Modemanschluss etc.) empfangen werden oder von einem internen Datenspeicherelement der Rechenvorrichtung 1400 (z. B. einem Festplattenlaufwerk) abgerufen werden, oft temporär in eine Warteschlange des Systemspeichers 1408 eingereiht, bevor sie durch die ein oder mehreren Prozessoren in der Implementierung eines Softwareprogramms verarbeitet werden. In ähnlicher Weise werden Daten, für die ein Softwareprogramm bestimmt, dass sie von der Rechenvorrichtung 1400 über eine der Rechensystemschnittstellen an eine externe Entität gesendet werden sollen oder in ein internes Datenspeicherelement gespeichert werden sollen, oft temporär in eine Warteschlange des Systemspeichers 1408 eingereiht, bevor sie übertragen oder gespeichert werden.
  • Ferner kann beispielsweise ein PCH verwendet werden, um sicherzustellen, dass solche Daten ordnungsgemäß zwischen dem Systemspeicher 1408 und einer geeigneten entsprechenden Rechensystemschnittstelle (und internen Datenspeichervorrichtung, falls das Rechensystem so konzipiert ist) weitergegeben werden, und kann bidirektionale Punkt-zu-Punkt-Verbindungen zwischen sich und den beobachteten E/A-Quellen/Vorrichtungen 1404 aufweisen. In ähnlicher Weise kann ein MCH verwendet werden, um die verschiedenen konkurrierenden Anforderungen von Zugriffen auf den Systemspeicher 1508 zwischen CPU 1412 und GPU 1514, den Schnittstellen und internen Datenspeicherelementen, die in unmittelbarem zeitlichen Bezug zueinander auftreten können, zu verwalten.
  • E/A-Quellen 1404 können eine oder mehrere E/A-Vorrichtungen aufweisen, die zum Übertragen von Daten an die und/oder von der Rechenvorrichtung 1400 (z. B. einem Netzadapter); oder für einen großvolumigen nichtflüchtigen Speicher in der Rechenvorrichtung 1400 (z. B. ein Festplattenlaufwerk) implementiert sind. Eine Benutzereingabevorrichtung, die alphanumerische und andere Tasten beinhaltet, kann verwendet werden, um Informationen und Befehlsauswahlen an die GPU 1414 zu übermitteln. Eine andere Art von Benutzereingabevorrichtung ist eine Cursorsteuerung, wie etwa eine Maus, ein Trackball, ein Berührungsschirm, ein Berührungsfeld oder Cursor-Richtungstasten zum Übermitteln von Richtungsinformationen und Befehlsauswahlen an die GPU 1414 und zum Steuern von Cursorbewegungen auf der Anzeigevorrichtung. Kamera- und Mikrofonanordnungen der Rechenvorrichtung 1400 können eingesetzt werden, um Gesten zu beobachten, Audio und Video aufzuzeichnen und optische und akustische Befehle zu empfangen und zu übertragen.
  • Die Rechenvorrichtung 1400 kann ferner eine oder mehrere Netzschnittstellen aufweisen, um einen Zugang zu einem Netz, beispielsweise ein LAN, ein Weiterverkehrsnetz (Wide Area Network, WAN), ein Stadtnetz (Metropolitan Area Network, MAN), ein persönliches Netz (Personal Area Network, PAN), Bluetooth, ein Cloud-Netz, ein Mobilnetz (z. B. der dritten Generation (3G), der vierten Generation (4G) etc.), ein Intranet, das Internet etc. bereitzustellen. Die ein oder mehreren Netzschnittstellen können beispielsweise eine drahtlose Netzschnittstelle mit einer Antenne, die eine oder mehrere Antennen repräsentieren kann, beinhalten. Die ein oder mehreren Netzschnittstellen können zudem beispielsweise eine verdrahtete Netzschnittstelle für die Kommunikation mit entfernten Vorrichtungen über ein Netzwerkkabel beinhalten, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein paralleles Kabel sein kann.
  • Die ein oder mehreren Netzschnittstellen können den Zugang zu einem LAN ermöglichen, beispielsweise indem sie dem IEEE 802.11b- und/oder dem IEEE 802.1 Ig-Standard entsprechen, und/oder die drahtlose Netzschnittstelle kann den Zugang zu einem persönlichen Netz (Personal Area Network) bereitstellen, beispielsweise indem sie dem Bluetooth-Standard entspricht. Andere drahtlose Netzschnittstellen und/oder Protokolle, einschließlich vorheriger und nachfolgender Versionen der Normen bzw. Standards, können ebenfalls unterstützt werden. Zusätzlich zu oder anstelle der Kommunikation über die Drahtlos-LAN-Standards können die ein oder mehreren Netzschnittstellen eine drahtlose Kommunikation beispielsweise unter Verwendung von TDMA-Protokollen (Time Division Multiple Access, Zeitmultiplex-Vielfachzugriff), GSM-Protokollen (Global System for Mobile Communications, Globales System für Mobilkommunikation), CDMA-Protokollen (Code Division Multiple Access, Codemultiplex-Vielfachzugriff) und/oder anderen Arten von drahtlosen Kommunikationsprotokollen bereitstellen.
  • Die ein oder mehrere Netzschnittstellen können eine oder mehrere Kommunikationsschnittstellen beinhalten, wie etwa ein Modem, eine Netzschnittstellenkarte oder andere bekannte Schnittstellenvorrichtungen, wie etwa solche, die für das Koppeln mit dem Ethernet, dem Token-Ring oder anderen Arten von physischem drahtgebundenen oder drahtlosen Zubehör zum Zwecke des Bereitstellens einer Kommunikationsverbindung verwendet werden, um beispielsweise ein LAN oder ein WAN zu unterstützen. Auf diese Weise kann das Computersystem auch mit einer Anzahl von Peripheriegeräten, Clients, Steueroberflächen, Konsolen oder Server über eine herkömmliche Netzinfrastruktur, die beispielsweise ein Intranet oder das Internet beinhaltet, gekoppelt werden.
  • Es versteht sich, dass ein weniger oder mehr ausgestattetes System als das vorstehend beschriebene Beispiel für bestimmte Implementierungen bevorzugt werden kann. Daher kann die Konfiguration der Rechenvorrichtung 1400 von Implementierung zu Implementierung variieren, abhängig von zahlreichen Faktoren wie etwa Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Umständen. Beispiele der elektronischen Vorrichtung oder des Computersystems 1400 können (ohne Einschränkung) beinhalten: ein mobiles Endgerät, einen persönlichen digitalen Assistenten, eine mobile Rechenvorrichtung, ein Smartphone, ein Mobiltelefon, einen Handapparat, einen unidirektionalen Pager, einen bidirektionalen Pager, eine Nachrichtenübertragungsvorrichtung, einen Computer, einen Personalcomputer (PC), einen Desktop-Computer, einen Laptop-Computer, einen Notebook-Computer, einen Handheld-Computer, einen Tablet-Computer, einen Server, eine Server-Anordnung oder eine Server-Farm, einen Web-Server, einen Netzserver, einen Internet-Server, eine Arbeitsstation, einen Minicomputer, einen Mainframe-Computer, einen Supercomputer, ein Netzgerät, ein Web-Gerät, ein verteiltes Computersystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Unterhaltungselektronik, programmierbare Unterhaltungselektronik, Spielvorrichtungen, Fernseher, digitale Fernseher, eine Set-Top-Box, einen drahtlosen Zugangspunkt, eine Basisstation, eine Teilnehmerstation, eine Mobilteilnehmerzentrale, eine Funknetzsteuerung, einen Router, einen Netzknoten, ein Gateway, eine Brücke, einen Switch, eine Maschine oder Kombinationen davon.
  • Ausführungsformen können, einzeln oder in Kombination, implementiert sein als: ein oder mehrere Mikrochips oder integrierte Schaltungen, die unter Verwendung einer Hauptplatine, einer fest verdrahteten Logik, einer Software, die von einer Speichervorrichtung gespeichert wird und durch einen Mikroprozessor ausgeführt wird, einer Firmware, einer anwendungsspezifischen integrierten Schaltung (Application-Specific Integrated Circuit, ASIC) und/oder einer feldprogrammierbaren Gatteranordnung (Field-Programmable Gate Array, FPGA) miteinander verbunden sind. Der Begriff „Logik“ kann in beispielhafter Weise Software oder Hardware und/oder Kombinationen von Software und Hardware beinhalten.
  • Ausführungsformen können beispielsweise als ein Computerprogrammprodukt bereitgestellt sein, das ein oder mehrere maschinenlesbare Medien beinhalten kann, auf denen maschinenausführbare Anweisungen gespeichert sind, die, wenn sie von einer oder mehreren Maschinen wie etwa einem Computer, einem Netz von Computern oder anderen elektronischen Vorrichtungen ausgeführt werden, bewirken können, dass die ein oder mehreren Maschinen Operationen gemäß hier beschriebenen Ausführungen ausführen. Ein maschinenlesbares Medium kann, ohne darauf beschränkt zu sein, Floppy-Disketten, optische Platten, CD-ROMs (Compact Disc-Read Only Memories) und magnetoptische Platten, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Speicher oder andere Arten von Medien/maschinenlesbaren Medien beinhalten, die sich zum Speichern von maschinenausführbaren Anweisungen eignen.
  • Außerdem können Ausführungsformen als ein Computerprogramm, wobei das Programm von einem entfernten Computer (z. B. einem Server) an einen anfordernden Computer (z. B. einen Client) in Form von einem oder mehreren Datensignalen, die in einer Trägerwelle oder einem weiteren Ausbreitungsmedium ausgeführt und/oder durch eine Trägerwelle moduliert sind, übertragen wird, über eine Kommunikationsverbindung (z. B. ein Modem und/oder eine Netzverbindung) heruntergeladen werden.
  • 15 veranschaulicht eine Ausführungsform einer GPU 1414. Wie in 15 gezeigt, weist die GPU 1414 Ausführungseinheiten 1510 mit mehreren Knoten auf (z. B. Knoten0 - Knoten7), die über eine Fabric-Architektur gekoppelt sind. In einer Schaltfläche beinhaltet jeder Knoten mehrere Verarbeitungselemente, die über Fabric-Elemente 1505 mit einem Speicher 1550 gekoppelt sind. In einer solchen Ausführungsform ist jedes Fabric-Element 1505 mit zwei Knoten und zwei Bänken im Speicher 1550 gekoppelt. Dementsprechend koppelt das Fabric-Element 1505A die Knoten 0 und 1 mit den Bänken 0 und 1, Fabric-Element 1505B koppelt die Knoten 2 und 3 mit den Bänken 2 und 3, Fabric-Element 1505C koppelt die Knoten 4 und 5 mit den Bänken 4 und 5 und Fabric-Element 1505D koppelt die Knoten 6 und 7 mit den Bänken 6 und 7.
  • Gemäß einer Ausführungsform beinhaltet jedes Fabric-Element 1505 eine MMU 1520, einen Steuerungscache 1530 und einen Arbiter 1540. MMUs 1520 führen eine Speicherverwaltung durch, um virtuelle Adressräume zwischen den Speicherbänken 0 - 7 zu verwalten. In einer Ausführung verwaltet die MMU 1520 den Transfer von Daten an und von verknüpfte(n) Speicherbänke(n) im Speicher 1550. Der Arbiter 1540 entscheidet zwischen jedem verknüpften Knoten über Zugriffe auf den Speicher 1550. Beispielsweise entscheidet der Arbiter 1540A zwischen den Verarbeitungsknoten 0 und 1 bei Zugriffen auf die Bänke 0 und 1.
  • Der Steuerungscache (Control Cache, CC) 1530 führt eine Komprimierung/Dekomprimierung von Speicherdaten durch. 16 veranschaulicht eine Ausführungsform einer CC 1530. Wie in 16 gezeigt, beinhaltet der CC 1530 eine Komprimierungs-Engine 1621 und eine Dekomprimierungs-Engine 1622. Die Komprimierungs-Engine 1621 komprimiert Daten (z. B. Hauptflächendaten), die von einem Verarbeitungsknoten empfangen werden und in den Speicher 1550 geschrieben werden sollen. Die Komprimierungs-Engine 1622 dekomprimiert Daten, die aus dem Speicher 1550 ausgelesen werden, vor der Übertragung an einen Verarbeitungsknoten. Gemäß einer Ausführungsform beinhalten die komprimierten Daten, die in an jeder Adresse im Speicher 1550 gespeichert sind, verknüpfte Metadaten, die einen Komprimierungszustand der Daten angeben (z. B. wie die Hauptflächendaten zu komprimieren/dekomprimieren sind). In einer solchen Ausführungsform berechnet die MMU 1520 direkt den Metadaten-Speicherort basierend auf der physischen Adresse von Hauptflächendaten.
  • In einer weiteren Ausführungsform ist ein Teil des Speichers abgetrennt, basierend auf der Größe des Speichers. Beispielsweise ist bei einem Komprimierungsschema, bei dem 1 Byte von Metadaten für 256 Bytes von Hauptflächendaten steht, 1/256 Speicher für Metadaten abgetrennt. Somit implementiert eine Ausführungsform mit 8 GB lokalem Speicher eine 32-MB-Zuteilung von Metadatenraum im Speicher 1550. In noch einer weiteren Ausführungsform berechnet die MMU 1520 die Metadaten-Adresse basierend auf der physischen Adresse unter Berücksichtigung von Hash-Implikationen. Infolgedessen werden die endgültigen Inhalte an den CC 1530 weitergeleitet.
  • Sobald die Komprimierung an der Komprimierungs-Engine 1621 erfolgt ist, werden die Daten zur Übertragung gepackt. Beispielsweise packen herkömmliche Systeme komprimierte Daten vom niedrigstwertigen Bit (Least Significant Bit, LSB) zum höchstwertigen Bit (Most Significant Bit, MSB). 17 veranschaulicht ein herkömmliches Packlayout für komprimierte Daten. Somit resultiert, in einer Ausführungsform mit zwei 128B-Kacheln, bei der eine erste Kachel 234 Bits aufweist (z. B. 0-233) und eine zweite Kachel 512-234 aufnimmt, ein herkömmliches Bitstrom-Packen in einer Lückengröße mit einer 0 für eine 64B-Decke. Solche Lücken erfordern, dass gepackte Daten an der Dekomprimierungs-Engine 1622 seriell dekomprimiert werden, wodurch sich die Zugriffszeit erhöht.
  • Gemäß einer Ausführungsform packt (oder adjustiert) der CC 1530 Daten (z. B. Hauptdaten und die Metadaten) in einem gespiegelten Layout, um eine gleichzeitige parallele Dekomprimierung an der Dekomprimierungs-Engine 1622 zu ermöglichen. In einer solchen Ausführungsform resultiert die Anpassung in einer ersten Hälfte von komprimierten Daten (oder einer komprimierten Datenkomponente) beginnend beim LSB eines Bitstreams (oder der LSB-Position) und einer zweiten Hälfte der komprimierten Daten beginnend beim MSB (oder der MSB-Position) des Bitstreams. Beispielsweise packen, bei Komprimierung von 512B auf 256B, komprimierte Bytes erste 128B am LSB und zweite 128B ausgehend vom MSB.
  • Um das gespiegelte Layout zu ermöglichen, implementiert die Komprimierungs-Engine 1621 zwei oder mehr Komprimierer, um Daten parallel zu komprimieren. In einer solchen Ausführungsform kann die Komprimierungs-Engine 1621 zwei 128B breite Komprimierer beinhalten, wobei ein erster Komprimierer die erste Hälfte komprimierter Daten generiert und der zweite Komprimierer die zweite Hälfte komprimierter Daten generiert. In einer Ausführungsform kann die Komprimierungs-Engine 1621 mehrere Kombinationen von Komprimierungsergebnissen bereitstellen. In einer solchen Ausführungsform ist eine 4-Bit-CCS-Codierung implementiert, die für jede 128B-Hälfte des Blocks repliziert wird. Somit kann, basierend auf der CCS-Codierung, eine Bestimmung dahingehend vorgenommen werden, welche(r) von 4 64B-Kanälen aktiv sein soll(en).
  • Gemäß einer Ausführungsform beinhaltet der CC 1530 eine Packlogik 1624 zum Packen der komprimierten Daten. In einer solchen Ausführungsform kann die Packlogik 1624 ein Kanal-Swizzling vornehmen, damit jedes 64B-Paar basierend auf einem Pairing-Bit geswizzelt wird, das mit einem 3D-128B-Block identisch ist. In einer weiteren Ausführungsform empfängt die Packlogik 1624 die erste und die zweite Hälfte der komprimierten Daten und kehrt die zweite Hälfte komprimierter Daten um und packt die Daten so, dass deren LSB zum MSB des endgültigen 256B-Vektors der komprimierten Komponente wird. Dies ermöglicht eine parallele Dekomprimierung von beiden Enden aus. In einer alternativen Ausführungsform kann die Packoperation, die an einer Packlogik 1624 durchgeführt wird, an dem zweiten Komprimierer durchgeführt werden (wobei z. B. das LSB der zweiten Hälfte der komprimierten Daten am MSB umgekehrt und gepackt wird).
  • In einer Ausführungsform ermöglicht das gespiegelte Layout die Verarbeitung von teilweise komprimierten Kacheln, was die Speicherbandbreite reduziert. Beispielsweise kann jede komprimierte Datenkomponente kleiner als 128B sein. In einer weiteren Ausführungsform können die Bitgrößen der komprimierten Datenkomponenten unterschiedlich sein. In einer solchen Ausführungsform kann die erste komprimierte Datenkomponente 128B sein, während die zweite komprimierte Datenkomponente für einen 256B-Bitstream kleiner als 128B sein kann.
  • 18 veranschaulicht eine Ausführungsform eines gespiegelten Packlayouts für komprimierte Metadaten. Wie in 18 gezeigt, wird eine erste Komponente komprimierter Daten (z. B. N Bits) vom LSB bis zu einem ersten Wert X (z. B. 128B bis X) gepackt, während eine zweite Komponente komprimierter Daten (z. B. M Bits) vom MSB bis zu einem zweiten Wert Y (z. B. 128B bis Y) gepackt wird. In einer Ausführungsform ist das MSB gleich N*512 -1, wobei der Bereich von X und Y für einen Komprimierungsmodus 4:N bis zu 128B ausmachen kann. Somit treten potenzielle Lücken in der ersten Komponente oder der zweiten Komponenten zwischen den zwei Komponenten auf.
  • 19 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Packen von komprimierten Daten veranschaulicht. Bei Verarbeitungsblock 1910 werden komprimierte Daten generiert, indem die erste Hälfte komprimierter Daten an einem ersten Komprimierer generiert wird und die zweite Hälfte komprimierter Daten an dem zweiten Komprimierer komprimiert wird. Bei Verarbeitungsblock 1920 wird die erste Hälfte der komprimierten Datenkomponente gepackt, beginnend an der LSB-Position des Bitstroms bis zu einer Hälfte der Größe des komprimierten Bitstroms (z. B. 0-127B von 256B). Bei Verarbeitungsblock 1930 wird die zweite Hälfte der komprimierten Datenkomponente umgekehrt. Bei Verarbeitungsblock 1940 wird die zweite Hälfte der komprimierten Datenkomponente gepackt, beginnend an der MSB-Position des Bitstroms (z. B. 255B-128B). Bei Verarbeitungsblock 1960 wird der komprimierte Datenblock gepackter Daten übertragen.
  • Bei Empfang eines komprimierten Datenblocks am CC 1530 entpackt die Packlogik 1624 den komprimierten Datenblock in Bitströme, wobei die komprimierten LSB- und MSB-Komponenten zur Dekomprimierung an der Dekomprimierungs-Engine 1622 vorliegen. In einer solchen Ausführungsform kehrt die Packlogik 1624 die zweite Hälfte komprimierter Daten um, so dass die Daten in ihrer ursprünglichen Reihenfolge vor dem Packen vorliegen. In einer Ausführungsform beinhaltet die Dekomprimierungs-Engine 1622 wenigstens zwei Komprimierer, um die komprimierten LSB- und MSB-Komponenten parallel zu dekomprimieren.
  • 20 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Durchführen einer parallelen Dekomprimierung für gepackte komprimierte Daten veranschaulicht. Bei Verarbeitungsblock 2010 werden die gepackten Daten empfangen. Bei Verarbeitungsblock 2020 werden die komprimierten MSB- und LSB-Datenkomponenten aus den gepackten komprimierten Daten extrahiert. Bei Verarbeitungsblock 2030 wird die MSB-Komponente umgekehrt, damit sie in der ursprünglichen Reihenfolge vor dem Packen erscheint. Bei Verarbeitungsblock 2040 und 2050 werden die MSB- bzw. LSB-Komponenten parallel in unkomprimierte Speicherdaten dekomprimiert. Auch wenn vorstehend eine Beschreibung unter Bezugnahme auf eine 256B-zu-128B-Komprimierung erfolgt, können andere Ausführungsformen unterschiedliche Komprimierungsverhältnisse aufweisen (z. B. 256B zu 64B, 256B zu 32B etc.).
  • Die nachfolgenden Absätze und/oder Beispiele beziehen sich auf weitere Ausführungsformen oder Beispiele. Besonderheiten in den Beispielen können an beliebiger Stelle in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der unterschiedlichen Ausführungsformen oder Beispiele können auf verschiedene Weise mit einigen Merkmalen kombiniert werden, die enthalten sind, und anderen, die ausgeschlossen sind, um verschiedensten Anwendungen gerecht zu werden. Beispiele können einen Erfindungsgegenstand umfassen, wie etwa ein Verfahren, Mittel zum Durchführen von Handlungen des Verfahrens, wenigstens ein maschinenlesbares Medium mit Anweisungen, die, wenn sie von einer Maschine durchgeführt werden, die Maschine veranlassen, Aktionen des Verfahrens oder einer Einrichtung oder eines Systems zum Ermöglichen einer Hybridkommunikation gemäß hier beschriebenen Ausführungsformen und Beispielen durchzuführen.
  • Einige Ausführungsformen betreffen Beispiel 1, das eine Einrichtung zum Ermöglichen des Packens von komprimierten Daten beinhaltet, umfassend Komprimierungshardware, um Speicherdaten in mehrere komprimierte Datenkomponenten zu komprimieren, und Packhardware, um die mehreren komprimierten Datenkomponenten zu empfangen und eine erste der mehreren komprimierten Datenkomponenten zu packen, beginnend bei einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms, und eine zweite der mehreren komprimierten Datenkomponenten zu packen, beginnend bei einem höchstwertigen Bit (Most Significant Bit, MSB) des komprimierten Bitstroms.
  • Beispiel 2 beinhaltet den Erfindungsgegenstand von Beispiel 1, wobei die Packhardware einen ersten Komprimierer umfasst, um die erste komprimierte Datenkomponente zu komprimieren, und einen zweiten Komprimierer, um die zweite komprimierte Datenkomponente zu komprimieren.
  • Beispiel 3 beinhaltet den Erfindungsgegenstand der Beispiele 1 und 2, wobei die Packhardware die zweite komprimierte Datenkomponente umkehrt und die zweite komprimierte Datenkomponente so packt, dass das LSB der zweiten komprimierten Datenkomponente zum MSB des komprimierten Bitstroms wird.
  • Beispiel 4 beinhaltet den Erfindungsgegenstand der Beispiele 1-3, wobei die Packhardware den komprimierten Bitstrom überträgt.
  • Beispiel 5 beinhaltet den Erfindungsgegenstand der Beispiele 1-4, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  • Beispiel 6 beinhaltet den Erfindungsgegenstand der Beispiele 1-5, wobei die erste komprimierte Datenkomponente und die zweite Datenkomponente Metadaten umfassen, die einen Komprimierungszustand von Speicherdaten angeben.
  • Einige Ausführungsformen betreffen Beispiel 7, das eine Einrichtung zum Ermöglichen einer Datendekomprimierung beinhaltet, umfassend Packhardware, um eine erste komprimierte Datenkomponente ab einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms von gepackten komprimierten Daten zu extrahieren und eine zweite komprimierte Datenkomponente ab einer höchstwertigen Bitposition (Most Significant Bit, MSB) der gepackten komprimierten Daten zu extrahieren, und Dekomprimierungshardware, um die erste komprimierte Datenkomponente und die zweite komprimierte Datenkomponente parallel in unkomprimierte Daten zu dekomprimieren.
  • Beispiel 8 beinhaltet den Erfindungsgegenstand von Beispiel 7, wobei die Dekomprimierungshardware einen ersten Dekomprimierer umfasst, um die erste komprimierte Datenkomponente zu dekomprimieren, und einen zweiten Dekomprimierer, um die zweite komprimierte Datenkomponente zu dekomprimieren.
  • Beispiel 9 beinhaltet den Erfindungsgegenstand der Beispiele 7 und 8, wobei die Packhardware die zweite komprimierte Datenkomponente vor dem Dekomprimieren umkehrt.
  • Beispiel 10 beinhaltet den Erfindungsgegenstand der Beispiele 7-9, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  • Einige Ausführungsformen betreffen Beispiel 11, das ein Verfahren zum Ermöglichen des Packens von komprimierten Daten beinhaltet, umfassend das Komprimieren von Speicherdaten in mehrere komprimierte Datenkomponenten, das Packen einer ersten der mehreren komprimierten Datenkomponenten, beginnend bei einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms, und das Packen einer zweiten der mehreren komprimierten Datenkomponenten, beginnend bei einem höchstwertigen Bit (Most Significant Bit, MSB) des komprimierten Bitstroms.
  • Beispiel 12 beinhaltet den Erfindungsgegenstand von Beispiel 11, ferner umfassend das Komprimieren der ersten komprimierten Datenkomponente an einem ersten Komprimierer und das Komprimieren der zweiten komprimierten Datenkomponente an einem zweiten Komprimierer.
  • Beispiel 13 beinhaltet den Erfindungsgegenstand der Beispiele 11 und 12, ferner umfassend das Umkehren der zweiten komprimierten Datenkomponente und das Packen der zweiten komprimierten Datenkomponente, sodass das LSB der zweiten komprimierten Datenkomponente zum MSB des komprimierten Bitstroms wird.
  • Beispiel 14 beinhaltet den Erfindungsgegenstand der Beispiele 11-13, ferner umfassend das Übertragen des komprimierten Bitstroms.
  • Beispiel 15 beinhaltet den Erfindungsgegenstand der Beispiele 11-14, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  • Einige Ausführungsformen betreffen Beispiel 16, das ein Verfahren zum Ermöglichen einer Datendekomprimierung beinhaltet, umfassend das Extrahieren einer ersten komprimierten Datenkomponente ab einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines Bitstroms von gepackten komprimierten Daten und das Extrahieren einer zweiten komprimierten Datenkomponente ab einer höchstwertigen Bitposition (Most Significant Bit, MSB) der gepackten komprimierten Daten und das parallele Dekomprimieren der ersten komprimierte Datenkomponente und der zweiten komprimierten Datenkomponente in unkomprimierte Daten.
  • Beispiel 17 beinhaltet den Erfindungsgegenstand von Beispiel 16, ferner umfassend das Dekomprimieren der ersten komprimierten Datenkomponente an einem ersten Dekomprimierer und das Dekomprimieren der zweiten komprimierten Datenkomponente an einem zweiten Dekomprimierer.
  • Beispiel 18 beinhaltet den Erfindungsgegenstand der Beispiele 16 und 17, ferner umfassend das Umkehren der zweiten komprimierten Datenkomponente vor dem Dekomprimieren.
  • Beispiel 19 beinhaltet den Erfindungsgegenstand der Beispiele 16-18, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  • Beispiel 20 beinhaltet den Erfindungsgegenstand der Beispiele 16-19, wobei die erste komprimierte Datenkomponente und die zweite Datenkomponente Metadaten umfassen, die einen Komprimierungszustand von Speicherdaten angeben.
  • Die Erfindung ist vorstehend unter Bezugnahme auf spezifische Ausführungsformen beschrieben worden. Fachleute auf dem Gebiet werden jedoch verstehen, dass verschiedene Modifikationen und Änderungen hieran vorgenommen werden können, ohne vom allgemeineren Wesen und Schutzbereich der Erfindung abzuweichen, wie sie in den beigefügten Ansprüchen dargelegt sind. Die vorstehende Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten.

Claims (20)

  1. Einrichtung zum Ermöglichen des Packens von komprimierten Daten, umfassend: Komprimierungshardware zum Komprimieren von Speicherdaten in mehrere komprimierte Datenkomponenten; und Packhardware zum Empfangen der mehreren komprimierten Datenkomponenten und zum Packen einer ersten der mehreren komprimierten Datenkomponenten, beginnend bei einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms, und Packen einer zweiten der mehreren komprimierten Datenkomponenten, beginnend bei einem höchstwertigen Bit (Most Significant Bit, MSB) des komprimierten Bitstroms.
  2. Einrichtung nach Anspruch 1, wobei die Komprimierungshardware umfasst: einen ersten Komprimierer zum Komprimieren der ersten komprimierten Datenkomponente; und einen zweiten Komprimierer zum Komprimieren der zweiten komprimierten Datenkomponente
  3. Einrichtung nach einem der Ansprüche 1 oder 2, wobei die Packhardware die zweite komprimierte Datenkomponente umkehrt und die zweite komprimierte Datenkomponente so packt, dass das LSB der zweiten komprimierten Datenkomponente zum MSB des komprimierten Bitstroms wird.
  4. Einrichtung nach einem der Ansprüche 1-3, wobei die Packhardware den komprimierten Bitstrom überträgt.
  5. Einrichtung nach einem der Ansprüche 1-4, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  6. Einrichtung nach einem der Ansprüche 1-5, wobei die erste komprimierte Datenkomponente und die zweite Datenkomponente Metadaten umfassen, die einen Komprimierungszustand von Speicherdaten angeben.
  7. Einrichtung zum Ermöglichen einer Datendekomprimierung, umfassend: Packhardware zum Extrahieren einer ersten komprimierten Datenkomponente ab einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms von gepackten komprimierten Daten und zum Extrahieren einer zweiten komprimierten Datenkomponente ab einer höchstwertigen Bitposition (Most Significant Bit, MSB) der gepackten komprimierten Daten; und Dekomprimierungshardware zum parallelen Dekomprimieren der ersten komprimierten Datenkomponente und der zweiten komprimierten Datenkomponente in unkomprimierte Daten.
  8. Einrichtung nach Anspruch 7, wobei die Dekomprimierungshardware umfasst: einen ersten Dekomprimierer zum Dekomprimieren der ersten komprimierten Datenkomponente; und einen zweiten Dekomprimierer zum Dekomprimieren der zweiten komprimierten Datenkomponente.
  9. Einrichtung nach einem der Ansprüche 7 oder 8, wobei die Packhardware die zweite komprimierte Datenkomponente vor dem Dekomprimieren umkehrt.
  10. Einrichtung nach einem der Ansprüche 7-9, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  11. Verfahren zum Ermöglichen des Packens von komprimierten Daten, umfassend: Komprimieren von Speicherdaten in mehrere komprimierte Datenkomponenten; Packen einer ersten der mehreren komprimierten Datenkomponenten, beginnend bei einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines komprimierten Bitstroms; und Packen einer zweiten der mehreren komprimierten Datenkomponenten, beginnend bei einem höchstwertigen Bit (Most Significant Bit, MSB) des komprimierten Bitstroms.
  12. Verfahren nach Anspruch 11, ferner umfassend: Komprimieren der ersten komprimierten Datenkomponente an einem ersten Komprimierer; und Komprimieren der zweiten komprimierten Datenkomponente an einem zweiten Komprimierer.
  13. Verfahren nach einem der Ansprüche 11 oder 12, ferner umfassend: Umkehren der zweiten komprimierten Datenkomponente; und Packen der zweiten komprimierten Datenkomponente, sodass das LSB der zweiten komprimierten Datenkomponente zum MSB des komprimierten Bitstroms wird.
  14. Verfahren nach einem der Ansprüche 11-13, ferner umfassend das Übertragen des komprimierten Bitstroms.
  15. Verfahren nach einem der Ansprüche 11-14, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  16. Verfahren zum Ermöglichen einer Datendekomprimierung, umfassend: Extrahieren einer ersten komprimierten Datenkomponente ab einer niedrigstwertigen Bitposition (Least Significant Bit, LSB) eines Bitstroms von gepackten komprimierten Daten; Extrahieren einer zweiten komprimierten Datenkomponente ab einer höchstwertigen Bitposition (Most Significant Bit, MSB) der gepackten komprimierten Daten; und paralleles Dekomprimieren der ersten komprimierte Datenkomponente und der zweiten komprimierten Datenkomponente in unkomprimierte Daten.
  17. Verfahren nach Anspruch 16, ferner umfassend: Dekomprimieren der ersten komprimierten Datenkomponente an einem ersten Dekomprimierer; und Dekomprimieren der zweiten komprimierten Datenkomponente an einem zweiten Dekomprimierer.
  18. Verfahren nach einem der Ansprüche 16 oder 17, ferner umfassend das Umkehren der zweiten komprimierten Datenkomponente vor dem Dekomprimieren.
  19. Verfahren nach einem der Ansprüche 16-18, wobei die erste komprimierte Datenkomponente eine erste Bitgröße umfasst und die zweite komprimierte Datenkomponente eine zweite Bitgröße umfasst.
  20. Verfahren nach einem der Ansprüche 16-19, wobei die erste komprimierte Datenkomponente und die zweite Datenkomponente Metadaten umfassen, die einen Komprimierungszustand von Speicherdaten angeben.
DE102020126551.4A 2019-11-15 2020-10-09 Paralleler dekomprimierungsmechanismus Pending DE102020126551A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/685,224 2019-11-15
US16/685,224 US20210149811A1 (en) 2019-11-15 2019-11-15 Parallel decompression mechanism

Publications (1)

Publication Number Publication Date
DE102020126551A1 true DE102020126551A1 (de) 2021-05-20

Family

ID=75683466

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020126551.4A Pending DE102020126551A1 (de) 2019-11-15 2020-10-09 Paralleler dekomprimierungsmechanismus

Country Status (6)

Country Link
US (1) US20210149811A1 (de)
JP (1) JP2021082260A (de)
KR (1) KR20210059603A (de)
CN (1) CN112817882A (de)
DE (1) DE102020126551A1 (de)
TW (1) TW202121336A (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240118902A1 (en) * 2022-09-30 2024-04-11 Qualcomm Incorporated Single instruction multiple data (simd) sparse decompression with variable density
CN116758175B (zh) * 2023-08-22 2024-01-26 摩尔线程智能科技(北京)有限责任公司 图元块压缩装置、方法、图形处理器及电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7570819B2 (en) * 2005-01-28 2009-08-04 Chih-Ta Star Sung Method and apparatus for displaying images with compression mechanism
US8595428B2 (en) * 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US9292449B2 (en) * 2013-12-20 2016-03-22 Intel Corporation Cache memory data compression and decompression
US20190068981A1 (en) * 2017-08-23 2019-02-28 Qualcomm Incorporated Storing and retrieving lossy-compressed high bit depth image data

Also Published As

Publication number Publication date
JP2021082260A (ja) 2021-05-27
CN112817882A (zh) 2021-05-18
KR20210059603A (ko) 2021-05-25
US20210149811A1 (en) 2021-05-20
TW202121336A (zh) 2021-06-01

Similar Documents

Publication Publication Date Title
DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE102020120372A1 (de) Programmierbare wandlungshardware
DE102019119085A1 (de) Punktbasiertes rendern und entfernung von projektionsrauschen
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102019117218A1 (de) Reduziertes Rendern eines Videos mit sechs Freiheitsgraden
DE102019117495A1 (de) System und verfahren zur 3d-blob-klassifizierung und -übertragung
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020129756A1 (de) Verwendung eines efehls einer rchitektur mit einem efehlssatz (isa) zur ektornormalisierung
DE102020132871A1 (de) Verbessern von hierarchischer tiefenpuffer-cullingeffizienz durch maskenakkumulation
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020105902A1 (de) Hardware-indexzuordnungsmechanismus
DE102020115578A1 (de) Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln
DE102020130880A1 (de) Mechanismus zur partitionierung eines geteilten lokalen speichers
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE102020129625A1 (de) Seitentabellen-mapping-mechanismus
DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
DE102020113400A1 (de) Registerteilungsmechanismus
DE102020113789A1 (de) Asynchroner ausführungsmechanismus
DE112018003999T5 (de) Verfahren und Vorrichtung für effiziente Verarbeitung von abgeleiteten einheitlichen Werten in einem Grafikprozessor
DE102020104651A1 (de) Arbeitsspeicherkomprimierungs-Hashmechanismus
DE102020108411A1 (de) Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit