DE102020115578A1 - Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln - Google Patents

Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln Download PDF

Info

Publication number
DE102020115578A1
DE102020115578A1 DE102020115578.6A DE102020115578A DE102020115578A1 DE 102020115578 A1 DE102020115578 A1 DE 102020115578A1 DE 102020115578 A DE102020115578 A DE 102020115578A DE 102020115578 A1 DE102020115578 A1 DE 102020115578A1
Authority
DE
Germany
Prior art keywords
cache
graphics
partial write
logic
memory
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
DE102020115578.6A
Other languages
English (en)
Inventor
James Valerio
Joydeep Ray
Ben ASHBAUGH
Lakshminarayanan Striramassarma
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 DE102020115578A1 publication Critical patent/DE102020115578A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • 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/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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)
  • Human Computer Interaction (AREA)
  • Computer Graphics (AREA)
  • Mathematical Physics (AREA)
  • Image Generation (AREA)

Abstract

Hier beschriebene Ausführungsformen stellen einen Allzweckgrafikprozessor bereit, der mehrere Kacheln, wobei jede Kachel aus den mehreren Kacheln wenigstens eine Ausführungseinheit, einen lokalen Cache und eine Cache-Steuereinheit umfasst, und einen Speicher mit hoher Bandbreite, der mit den mehreren Kacheln kommunikationstechnisch gekoppelt ist, umfasst, wobei der Speicher mit hoher Bandbreite von den mehreren Kacheln gemeinsam verwendet wird. Die Cache-Steuereinheit dient zum Implementieren eines Protokolls für das Management von partiellem Schreiben zum Empfangen einer partiellen Schreiboperation, die auf eine Cache-Zeile in dem lokalen Cache gerichtet ist, wobei die partielle Schreiboperation Schreibdaten umfasst, Schreiben der Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache, wenn die Cache-Zeile in einem modifizierten Zustand ist, und Weiterleiten der Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu dem Speicher mit hoher Bandbreite, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist. Andere Ausführungsformen weniger Merkmale und können beschrieben und beansprucht sein.

Description

  • HINTERGRUND
  • Der hier beschriebene Gegenstand bezieht sich im Allgemeinen auf das Berechnen und insbesondere auf die Grafikverarbeitung.
  • Der Begriff „Walker“ bezieht sich auf eine Sammlung zugehöriger Arbeitselemente in Grafikverarbeitungsanwendungen. In einer gekachelten Grafikverarbeitungskonfiguration kann derselbe Walker für einen gegebenen Kontext über mehrere Kacheln „rundgesendet“ werden, um parallel ausgeführt zu werden, z. B. um die Leistung einer einzelnen Warteschlange in der Reihenfolge zu skalieren. Ein lokaler Cache-Speicher ist jedoch nicht notwendigerweise über Kacheln kohärent. In einigen Beispielen kann Speicherkonsistenz über unterschiedliche Kacheln durch Leeren von L3-Caches an einem Synchronisationspunkt, entweder aufgrund einer Schrankennachricht oder durch einen Pipe-Steuerbefehl nach der Beendigung eines Walkers unterstützt werden.
  • Falls unterschiedliche Threads in dasselbe Adress-Byte im Cache ohne Synchronisieren schreiben, dann existiert eine „Rennen“-Zustand, und keine Reihenfolge von Cache-Schreibvorgängen ist garantiert. Falls jedoch unterschiedliche Threads (die potentiell auf unterschiedlichen Kacheln ablaufen) auf unterschiedliche Bytes schreiben, erfordert das Open-CL- (OCL-) Speichermodell, dass die Pro-Thread-Lese-Schreib-Reihenfolge auf dieselbe Byte-Adresse beachtet wird, ohne irgendeine Synchronisation.
  • Dementsprechend können Techniken zum Unterstützen von partiellem Schreibmanagement in einer Grafik-Engine mit mehreren Kacheln benutzt werden, z. B. in Grafikverarbeitungsanwendungen.
  • Figurenliste
  • Damit die Art und Weise, in der die vorstehend genannten Merkmale der vorliegenden Ausführungsformen genau verstanden werden können, kann eine speziellere Beschreibung der Ausführungsformen, die vorstehend kurz zusammengefasst sind, mit Bezug auf Ausführungsformen, von denen einige in den beigefügten Zeichnungen dargestellt sind, vorgenommen werden. Es wird jedoch darauf hingewiesen, dass die beigefügten Zeichnungen nur typische Ausführungsformen darstellen und deshalb nicht als ihren Schutzbereich einschränkend zu betrachten sind.
    • 1 ist ein Blockdiagramm eines Verarbeitungssystems gemäß einigen hier beschriebenen Ausführungsformen;
    • 2A, 2B, 2C und 2D sind Blockdiagramme von Berechnungssystemen und Grafikprozessoren gemäß einigen hier beschriebenen Ausführungsformen;
    • 3A, 3B und 3C sind Blockdiagramme von Grafikprozessoren und Rechenbeschleunigerarchitekturen gemäß einigen hier beschriebenen Ausführungsformen;
    • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen hier beschriebenen Ausführungsformen;
    • 5A-5B stellen Thread-Ausführungslogik dar, die eine Anordnung von Verarbeitungselementen enthält, die in einem Grafikprozessor gemäß hier beschriebenen Ausführungsformen eingesetzt ist.
    • 6 stellt eine Ausführungseinheit gemäß hier beschriebenen Ausführungsformen dar;
    • 7 ist ein Blockdiagramm, das Grafikprozessorbefehlsformate gemäß einigen hier beschriebenen Ausführungsformen darstellt;
    • 8 ist ein Blockdiagramm eines Grafikprozessors gemäß einigen hier beschriebenen Ausführungsformen;
    • 9A-9B stellen ein Grafikprozessorbefehlsformat und eine Befehlsfolge gemäß einigen hier beschriebenen Ausführungsformen dar;
    • 10 stellt eine beispielhafte Grafik-Software-Architektur für ein Datenverarbeitungssystem gemäß einigen hier beschriebenen Ausführungsformen dar;
    • 11A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem gemäß einigen hier beschriebenen Ausführungsformen darstellt;
    • 11B stellt eine Querschnittsseitenansicht einer Baugruppe für eine integrierte Schaltung gemäß einigen hier beschriebenen Ausführungsformen dar;
    • 11C stellt eine Baugruppe, die mehrere Einheiten von Hardware-Logik-Chiplets, die mit einem Substrat verbunden sind, enthält, gemäß einigen Ausführungsformen dar.
    • 11D stellt eine Baugruppe, die austauschbare Chiplets enthält, gemäß einer Ausführungsform dar.
    • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte Einchipsystem-Schaltung 1200, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß einer Ausführungsform darstellt.
    • 13A-13B sind Blockdiagramme, die beispielhafte Grafikprozessoren zum Gebrauch in einem SoC gemäß hier beschriebenen Ausführungsformen darstellen;
    • 14 stellt ein Datenverarbeitungssystem, das ausgelegt sein kann, um Management von partiellem Schreiben zu unterstützen, gemäß hier beschriebenen Ausführungsformen dar;
    • 15-16 sind eine schematische Darstellung eines Auftretens von fälschlichem gemeinsamem Verwenden gemäß hier beschriebenen Ausführungsformen;
    • 17, 18 und 19 sind Ablaufpläne, die Operationen in einem Verfahren zum Unterstützen des Managements von partiellem Schreiben gemäß hier beschriebenen Ausführungsformen darstellen.
    • 20 ist ein Blockdiagramm einer Berechnungsvorrichtung, die einen Grafikprozessor enthält, gemäß einigen hier beschriebenen Ausführungsformen.
  • BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Für die Zwecke der Erläuterung sind zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der nachstehend beschriebenen verschiedenen Ausführungsformen bereitzustellen. Es wird jedoch für einen Fachmann offensichtlich sein, dass die Ausführungsformen ohne einige dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind bekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt, um das Verdecken der zugrundeliegenden Prinzipien zu vermeiden und ein gründlicheres Verständnis der Ausführungsformen bereitzustellen. Obwohl einige der folgenden Ausführungsformen mit Bezug auf einen Grafikprozessor beschrieben sind, können die hier beschriebenen Techniken und Lehren auf verschiedene Typen von Schaltungen oder Halbleitervorrichtungen, die Allzweckverarbeitungsvorrichtungen oder Grafikverarbeitungsvorrichtungen enthalten, angewandt werden. Bezugnahme hier auf „eine Ausführungsform“ gibt an, dass ein/e spezielle/s Merkmal, Struktur oder Eigenschaft, das/die in Verbindung mit oder Zuordnung zu der Ausführungsform beschrieben ist, in wenigstens einer aus solchen Ausführungsformen enthalten sein kann. Das Auftreten des Ausdrucks „in einer Ausführungsform“ an verschiedenen Orten in der Spezifikation bezieht sich jedoch nicht notwendigerweise immer auf dieselbe Ausführungsform.
  • In der folgenden Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“, zusammen mit ihren Ableitungen, verwendet sein. Es ist zu verstehen, dass diese Begriffe nicht als Synonyme füreinander vorgesehen sind. „Gekoppelt“ ist verwendet, um anzugeben, dass zwei oder mehr Elemente, die in direktem physikalischem oder elektrischem Kontakt miteinander sein können oder nicht, miteinander zusammenarbeiten oder zusammenwirken. „Verbunden“ ist verwendet, um das Aufbauen einer Kommunikation zwischen zwei oder mehr Elementen, die miteinander gekoppelt sind, anzugeben.
  • In der folgenden Beschreibung stellen die 1-13B eine Übersicht über ein beispielhaftes Datenverarbeitungssystem und Grafikprozessorlogik, die die verschiedenen Ausführungsformen integriert oder sich darauf bezieht, bereit. Die 15-25 stellen spezifische Einzelheiten der verschiedenen Ausführungsformen bereit. Einige Aspekte der folgenden Ausführungsformen sind mit Bezug auf einen Grafikprozessor beschrieben, während andere Aspekte in Bezug auf einen Allzweckprozessor wie z. B. eine zentrale Verarbeitungseinheit (CPU) beschrieben sind. Ähnliche Techniken und Lehren können auf andere Typen von Schaltungen oder Halbleitervorrichtungen angewandt werden, die, ohne jedoch darauf beschränkt zu sein, einen integrierten Vielkernprozessor, ein GPU-Cluster oder eine oder mehrere Instanzen eines im Feld programmierbaren Gatter-Array (FPGA) enthalten. Im Allgemeinen sind die Lehren auf irgendeine/n Prozessor oder Maschine anwendbar, der/die Bild (z. B. Probe, Pixel), Vertexdaten oder Geometriedaten manipuliert oder verarbeitet.
  • Systemüberblick
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Einprozessor-Desktop-System, einem Mehrprozessor-Workstation-System oder einem Serversystem, das eine große Anzahl von Prozessoren 102 oder Prozessorkernen 107 aufweist, verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in eine integrierte Schaltung eines Ein-Chip-Systems (SoC) zum Gebrauch in mobilen, tragbaren oder eingebetteten Vorrichtungen eingebunden ist, wie z. B. in Vorrichtungen des Internets der Dinge (IoT) mit drahtgebundener oder drahtloser Konnektivität zu einem lokalen oder Weitbereichsnetz.
  • In einer Ausführungsform kann das System 100 Folgendes enthalten, damit gekoppelt sein oder darin integriert sein: eine serverbasierte Spieleplattform; eine Spielekonsole, die eine Spiel- und Medienkonsole enthält; eine mobile Spielekonsole, eine tragbare Spielekonsole oder eine Online-Spielekonsole. In einigen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, eines Smartphone, einer Tablet-Berechnungsvorrichtung oder einer mobilen mit dem Internet verbundenen Vorrichtung wie z. B. eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 100 kann außerdem Folgendes enthalten, damit gekoppelt sein oder darin integriert sein: eine am Körper getragene Vorrichtung, wie z. B. eine am Körper getragene Smartwatch-Vorrichtung; intelligente Brille oder Kleidung, die mit Merkmalen für erweiterte Realität (AR) oder virtuelle Realität (VR) erweitert ist, um visuelle, Audio- oder tastbare Ausgaben bereitzustellen, um visuelle, Audio- oder tastbare Wahrnehmungen der realen Welt zu ergänzen, oder anderweitig Text, Audio, Grafik, Video, holographische Bilder oder Video oder tastbare Rückmeldung bereitzustellen; eine andere Vorrichtung für erweiterte Realität (AR); oder eine andere Vorrichtung für virtuelle Realität (VR). In einigen Ausführungsformen enthält das Verarbeitungssystem 100 ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung oder ist Teil davon. In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug wie z. B. einen Bus, einen Sattelschlepper, ein Kraftfahrzeug, ein Motorrad oder Elektrofahrrad, ein Flugzeug oder Segelflugzeug (oder irgendeine Kombination daraus) enthalten, damit gekoppelt sein oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die um das Fahrzeug erfasste Umgebung zu verarbeiten.
  • In einigen Ausführungsformen enthalten der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Befehlen, die dann, wenn sie ausgeführt werden, Operationen für das System oder Anwender-Software ausführen. In einigen Ausführungsformen ist wenigstens einer aus dem einen oder den mehreren Prozessorkernen 107 konfiguriert, einen spezifischen Befehlssatz 109 auszuführen. In einigen Ausführungsformen kann der Befehlssatz 109 „Complex Instruction Set Computing“ (CISC), „Reduced Instruction Set Computing“ (RISC) oder Berechnen über ein „Very Long Instruction Word“ (VLIW) unterstützen. Ein oder mehrere Prozessorkerne 107 können einen unterschiedlichen Befehlssatz 109 verarbeiten, der Befehle zum Unterstützen der Emulation anderer Befehlssätze enthalten kann. Der Prozessorkern 107 kann außerdem andere Verarbeitungsvorrichtungen enthalten, wie z. B. einen digitalen Signalprozessor (DSP).
  • In einigen Ausführungsformen enthält der Prozessor 102 eine Cache-Speicher 104. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen von internem Cache aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 102 gemeinsam verwendet. In einigen Ausführungsformen enthält der Prozessor 102 außerdem einen externen Cache (z. B. einen Ebene-3- (L3-) Cache oder Cache der letzten Ebene (LLC)) (nicht gezeigt), der von den Prozessorkernen 107 unter Verwendung bekannter Cache-Kohärenztechniken gemeinsam verwendet werden kann. Eine Registerdatei 106 kann zusätzlich in dem Prozessor 102 enthalten sein und kann unterschiedliche Typen von Registern zum Speichern unterschiedlicher Typen von Daten enthalten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister). Einige Register können Allzweckregister sein, während andere Register für die Konstruktion des Prozessors 102 spezifisch sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessor(en) 102 mit einem oder mehreren Schnittstellenbus(sen) 110 gekoppelt, um Kommunikationssignale wie z. B. Adresse, Daten oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten in dem System 100 zu übertragen. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus sein, wie z. B. eine Version des „Direct Media Interface“- (DMI-) Busses. Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere „Peripheral Component Interconnect“-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Typen von Schnittstellenbussen enthalten. In einer Ausführungsform enthält/enthalten der/die Prozessor(en) 102 eine integrierte Speichersteuereinheit 116 und einen Plattformsteuereinheit-Hub 130. Die Speichersteuereinheit 116 unterstützt die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuereinheit-Hub (PCH) 130 Verbindungen zu I/O-Vorrichtungen über einen lokalen I/O-Bus bereitstellt.
  • Die Speichervorrichtung 120 kann eine Vorrichtung mit dynamischem Direktzugriffsspeicher (DRAM), eine Vorrichtung mit statischem Direktzugriffsspeicher (SRAM), eine Flash-Speichervorrichtung, eine Phasenwechselspeichervorrichtung oder eine andere Speichervorrichtung sein, die geeignete Leistungsfähigkeit aufweist, um als Prozessspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 arbeiten, um Daten 122 und Befehle 121 zum Gebrauch, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführt, zu speichern. Die Speichersteuereinheit 116 ist außerdem mit einem optionalen externen Grafikprozessor 118 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 108 in den Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen auszuführen. In einigen Ausführungsformen können Grafik-, Medien- oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, der ein Coprozessor ist, der konfiguriert sein kann, eine spezialisierte Gruppe von Grafik-, Medien- oder Rechenoperationen auszuführen. Beispielsweise ist in einer Ausführungsform der Beschleuniger 112 ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um Maschinenlernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen in Übereinstimmung mit dem Grafikprozessor 108 auszuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle des oder in Übereinstimmung mit dem Beschleuniger 112 verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem/den Prozessor(en) 102 verbunden sein. Die Anzeigevorrichtung 111 kann eine oder mehrere aus einer internen Anzeigevorrichtung, wie in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 111 eine am Kopf getragene Anzeigevorrichtung (HMD) wie z. B. eine stereoskopische Anzeigevorrichtung zum Gebrauch in Anwendungen für virtuelle Realität (VR) oder Anwendungen für erweiterte Realität (AR) sein.
  • In einigen Ausführungsformen ermöglicht der Plattformsteuereinheit-Hub 130, dass Peripheriegeräte sich mit der Speichervorrichtung 120 und dem Prozessor 102 über einen Hochgeschwindigkeits-I/O-Bus verbinden. Die I/O-Peripheriegeräte enthalten, ohne jedoch darauf beschränkt zu sein, eine Audiosteuereinheit 146, eine Netzsteuereinheit 134, eine Firmware-Schnittstelle 128, einen Drahtlos-Sender/Empfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z. B. nichtflüchtigen Speichervorrichtung, flüchtigen Speicher, Festplattenlaufwerk, Flash-Speicher NAND, 3D-NAND, 3D XPoint usw.). Die Datenspeichervorrichtung 124 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripherie-Bus wie z. B. einen „Peripheral Component Interconnect“-Bus (z. B. PCI, PCI Express) verbunden sein. Die Berührungssensoren 125 können Sensoren für berührungssensitiven Bildschirm, Drucksensoren oder Fingerabdrucksensoren enthalten. Der Drahtlos-Sender/Empfänger 126 kann ein Wi-Fi-Sender/Empfänger, ein Bluetooth-Sender/Empfänger oder ein Sender/Empfänger eines mobilen Netzes wie z. B. ein 3G-, 4G-, 5G- oder Langzeitentwicklungs- (LTE-) Sender/Empfänger sein. Die Firmware-Schnittstelle 128 ermöglicht Kommunikation mit System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Die Netzsteuereinheit 134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen ist eine Hochleistungsnetzsteuereinheit (nicht gezeigt) mit dem Schnittstellenbus 110 gekoppelt. Die Audiosteuereinheit 146 ist in einer Ausführungsform eine hochauflösende Mehrkanal-Audiosteuereinheit. In einer Ausführungsform enthält das System 100 optional eine alte I/O-Steuereinheit 140 zum Koppeln alter (z. B. Personal System 2 (PS/2)) Vorrichtungen mit dem System. Der Plattformsteuereinheit-Hub 130 kann außerdem mit einer oder mehreren über Steuereinheiten 142 für den universellen seriellen Bus (USB) verbundene Eingabevorrichtungen verbinden, wie z. B. Kombinationen aus Tastatur und Maus 143, einer Kamera 144 oder anderen USB-Eingabevorrichtungen.
  • Es ist zu verstehen, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, da andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Beispielsweise können eine Instanz der Speichersteuereinheit 116 und der Plattformsteuereinheit-Hub 130 in einen diskreten externen Grafikprozessor wie z. B. den externen Grafikprozessor 118 integriert sein. In einer Ausführungsform können der Plattformsteuereinheit-Hub 130 und/oder die Speichersteuereinheit 116 außerhalb des einen oder der mehreren Prozessor(en) 102 sein. Beispielsweise kann das System 100 eine externe Speichersteuereinheit 116 und Plattformsteuereinheit-Hub 130 enthalten, die als ein Speichersteuereinheit-Hub und Peripheriesteuereinheit-Hub innerhalb eines System-Chipsatzes, der in Kommunikation mit dem/den Prozessor(en) 102 ist, konfiguriert sein können.
  • Beispielsweise können Platinen („Sleds“) verwendet werden, auf denen Komponenten wie z. B. CPUs, Speicher und andere Komponenten platziert sind, die für gesteigerte thermische Leistungsfähigkeit konstruiert sind. In einigen Beispielen befinden sich Verarbeitungskomponenten wie z. B. die Prozessoren auf einer Oberseite eines „Sied“, während sich naher Speicher, wie z. B. DIMMs, auf einer Unterseite des „Sled“ befindet. Als ein Ergebnis der verbesserten Luftströmung, die durch diese Konstruktion bereitgestellt ist, können die Komponenten mit höheren Frequenzen und Leistungspegeln arbeiten als in typischen Systemen und erhöhen dadurch die Leistungsfähigkeit. Darüber hinaus sind die „Sleds“ so konfiguriert, dass sie blind mit Strom- und Datenkommunikationskabeln in einem Rack zusammenpassen, und dadurch ist ihre Fähigkeit verbessert, schnell entfernt, hochgerüstet, neu installiert und/oder ersetzt zu werden. Ähnlich sind individuelle Komponenten, die sich auf den „Sleds“ befinden, wie z. B. Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, so konfiguriert, dass sie aufgrund ihres vergrößerten Abstands zueinander leicht aufgerüstet werden können. In der erläuternden Ausführungsform enthalten die Komponenten zusätzlich Hardware-Bestätigungs-Merkmale, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzige Netzarchitektur („Fabric“) nutzen, die mehrere andere Netzarchitekturen, die Ethernet und Omni-Path enthalten, unterstützt. Die „Sleds“ können mit Verteilern über Lichtleitfasern verbunden sein, die höhere Bandbreite und geringere Latenz als typische Zweidrahtleitungen (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der hohen Bandbreite, Zusammenschaltungen mit geringer Latenz und der Netzarchitektur kann das Datenzentrum im Gebrauch Pool-Betriebsmittel wie z. B. Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Beschleuniger für neuronale Netze und/oder künstliche Intelligenz usw.) und Datenspeicherlaufwerke, die physikalisch getrennt sind, verwenden und sie für Rechenbetriebsmittel (z. B. Prozessoren) je nach Bedarf bereitstellen, was es den Rechenbetriebsmitteln ermöglicht, auf die Pool-Betriebsmittel so zuzugreifen, als ob sie lokal wären.
  • Eine Stromversorgung oder -quelle kann Spannung und/oder Strom für das System 100 oder irgendein/e hier beschriebene/s Komponente oder System bereitstellen. In einem Beispiel enthält die Stromquelle einen AD/DC- (Wechselstrom/Gleichstrom-) Adapter auf, der in eine Steckdose gesteckt werden kann. Ein solcher Wechselstrom kann eine Stromquelle aus erneuerbarer Energie (z. B. Solargenergie) sein. In einem Beispiel enthält die Stromquelle eine DC-Stromquelle, wie z. B. einen externen AC/DC-Umsetzer. In einem Beispiel enthält die Stromquelle oder Stromversorgung eine Hardware für drahtloses Laden, 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 enthalten.
  • 2A-2D stellen Berechnungssysteme und Grafikprozessoren dar, die durch hier beschriebenen Ausführungsformen bereitgestellt sind. Die Elemente der 2A-2D, die die gleichen Bezugszeichen (oder Namen) aufweisen wie die Elemente irgendeiner anderen Figur hier, können auf eine Weise arbeiten oder funktionieren, die ähnlich der an anderer Stelle hier beschriebenen ist, sind jedoch nicht darauf beschränkt.
  • 2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200, der einen oder mehrere Prozessorkerne 202A-202N, eine integrierte Speichersteuereinheit 214 und einen integrierten Grafikprozessor 208 aufweist. Der Prozessor 200 kann zusätzliche Kerne bis zu dem und einschließlich des zusätzlichen Kerns 202N enthalten, die durch die gestrichelten Kästen repräsentiert sind. Jeder der Prozessorkerne 202A-202N enthält eine oder mehrere interne Cache-Einheiten 204A-204N. In einigen Ausführungsformen besitzt jeder Prozessorkern außerdem Zugang zu einer oder mehreren gemeinsam verwendeten Cache-Einheiten 206. Die internen Cache-Einheiten 204A-204N und gemeinsam verwendeten Cache-Einheiten 206 repräsentieren eine Cache-Speicherhierarchie innerhalb des Prozessors 200. Die Cache-Speicherhierarchie kann wenigstens eine Ebene von Befehls- und Daten-Cache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam verwendetem Cache mittlerer Ebene, wie z. B. Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Ebenen von Cache enthalten, wobei die höchste Ebene des Cache vor dem externen Speicher als der LLC klassifiziert ist. In einigen Ausführungsformen erhält eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 außerdem eine Gruppe aus einer oder mehreren Bussteuereinheiten 216 und einen Systemagentenkern 210 enthalten. Die eine oder mehreren Bussteuereinheiten 216 managen eine Gruppe peripherer Busse, wie z. B. einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 210 stellt Managementfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen enthält der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuereinheiten 214 zum Managen des Zugriffs auf verschiedene externe Speichervorrichtungen (nicht gezeigt).
  • In einigen Ausführungsformen enthalten ein oder mehrere der Prozessorkerne 202A-202N Unterstützung für simultanes Multi-Threading. In einer solchen Ausführungsform enthält der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während der Verarbeitung mehrerer Threads. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuerungseinheit (PCU) enthalten, die Logik und Komponenten zum Regulieren des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 enthält.
  • In einigen Ausführungsformen enthält der Prozessor 200 zusätzlich einen Grafikprozessor 208 zum Ausführen von Grafikverarbeitungsoperationen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit der Gruppe gemeinsam verwendeter Cache-Einheiten 206 und dem Systemagentenkern 210, der die eine oder mehreren integrierten Speichersteuereinheiten 214 enthält, gekoppelt. In einigen Ausführungsformen enthält der Systemagentenkern 210 außerdem eine Anzeigesteuereinheit 211 zum Treiben der Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigevorrichtungen. In einigen Ausführungsformen kann die Anzeigesteuereinheit 211 außerdem ein separates Modul sein, das mit dem Grafikprozessor über wenigstens eine Zusammenschaltung gekoppelt ist, oder kann in den Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Zusammenschaltungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Es kann jedoch eine alternative Zusammenschaltung verwendet werden, wie z. B. eine Punkt-zu-Punkt-Zusammenschaltung, eine geschaltete Zusammenschaltung oder andere Techniken, die in der Technik gut bekannte Techniken einschließen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit der Ringzusammenschaltung 212 über eine I/O-Verbindungsstrecke 213 gekoppelt.
  • Die beispielhafte I/O-Verbindungsstrecke 213 repräsentiert wenigstens eine aus mehreren Variationen von I/O-Zusammenschaltungen, die eine baugruppeninterne I/O-Zusammenschaltung enthält, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungs-Speichermodul 218, wie z. B. einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen kann jeder aus den Prozessorkernen 202A-202N und dem Grafikprozessor 208 eingebettete Speichermodule 218 als einen gemeinsam verwendeten Cache letzter Ebene verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die die gleiche Befehlssatzarchitektur ausführen. In einer weiteren Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Befehlssatzarchitektur (ISA) heterogen, wobei ein oder mehrere der Prozessorkerne 202A-202N einen ersten Befehlssatz ausführen, während wenigstens einer der anderen Kerne eine Teilmenge des ersten Befehlssatzes oder einen anderen Befehlssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne, die einen relativ hohen Energieverbrauch aufweisen, mit einem oder mehreren Leistungskernen gekoppelt sind, die einen niedrigeren Energieverbrauch aufweisen. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Rechenfähigkeit heterogen. Zusätzlich kann der Prozessor 200 auf einem oder mehreren Chips oder als eine integrierte Schaltung eines SoC implementiert sein, die die dargestellten Komponenten aufweisen, zusätzlich zu anderen Komponenten.
  • 2B ist ein Blockdiagramm von Hardware-Logik eines Grafikprozessorkerns 219 gemäß einigen hier beschriebenen Ausführungsformen. Elemente von 2B, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können auf eine Weise arbeiten oder funktionieren, die ähnlich derjenigen ist, die hier an anderer Stelle beschrieben ist, sind jedoch nicht darauf beschränkt. Der Grafikprozessorkern 219, der manchmal als eine Kernscheibe bezeichnet ist, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 219 ist für eine Grafikkernscheibe beispielhaft, und ein Grafikprozessor, wie er hier beschrieben ist, kann basierend auf Zielleistung und Leistungsfähigkeitshüllen mehrere Grafikkernscheiben enthalten. Jeder Grafikprozessorkern 219 kann einen Block 230 mit fester Funktion enthalten, der mit mehreren Teilkernen 221A-221F, auch als Teilscheiben bezeichnet, die modulare Blöcke von Allzwecklogik und Logik mit fester Funktion enthalten, gekoppelt ist.
  • In einigen Ausführungsformen enthält der Block 230 mit fester Funktion eine Pipeline 231 für Geometrie/feste Funktion, die von allen Teilkernen des Grafikprozessorkerns 219 gemeinsam verwendet werden kann, beispielsweise in Implementierungen für Grafikprozessoren mit geringerer Leistungsfähigkeit und/oder geringerem Energieverbrauch. In verschiedenen Ausführungsformen enthält die Pipeline 231 für Geometrie/feste Funktion eine Pipeline mit fester 3D-Funktion (z. B. 3D-Pipeline 312 wie in den nachstehend beschriebenen 3 und 4), eine Video-Frontend-Einheit, eine Thread-Erzeugungseinheit und einen Thread-Verteiler und einen Manager des vereinheitlichten Rückgabepuffers, der den einheitlichen Rückgabepuffer managt (z. B. den einheitlichen Rückgabepuffer 418 von 4, wie nachstehend beschrieben).
  • In einer Ausführungsform enthält der Block 230 mit fester Funktion außerdem eine Grafik-SoC-Schnittstelle 232, eine Grafikmikrosteuereinheit 233 und eine Medien-Pipeline 234. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen innerhalb einer integrierten Schaltung eines Einchipsystems bereit. Die Grafikmikrosteuereinheit 233 ist ein programmierbarer Teilprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 219, die Thread-Verteilung, Planung und Vorwegnahme enthalten, zu managen. Die Medien-Pipeline 234 (z. B. die Medien-Pipeline 316 von 3 und 4) enthält Logik zum Unterstützen der Decodierung, Codierung und Vorverarbeitung und/oder Nachverarbeitung von Multimediadaten, die Bild- und Videodaten enthalten. Die Medien-Pipeline 234 implementiert Medienoperationen über Anforderungen an die Rechen- und Sample-Logik innerhalb der Teilkerne 221-221F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232, dass der Grafikprozessorkern 219 mit Allzweck-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, die Speicherhierarchieelemente wie z. B. einen gemeinsam verwendeten Cache-Speicher der letzten Ebene, den System-RAM und/oder chipintern oder baugruppenintern eingebetteten DRAM enthalten, zu kommunizieren. Die SoC-Schnittstelle 232 kann außerdem die Kommunikation mit Vorrichtungen mit fester Funktion innerhalb des SoC, wie z. B. Kamerabildaufnahme-Pipelines, ermöglichen und ermöglicht die Verwendung von und/oder implementiert globale Speicher-Atomics, die von dem Grafikprozessorkern 219 und CPUs innerhalb des SoC gemeinsam verwendet werden können. Die SoC-Schnittstelle 232 kann außerdem Leistungsmanagementsteuerung für den Grafikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 219 und anderen Taktdomänen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 dem Empfang von Befehlspuffern aus einem Befehls-Streamer und globalen Thread-Verteiler, die konfiguriert sind, Befehle und Anweisungen für jeden der einen oder mehreren Grafikkerne innerhalb eines Grafikprozessors bereitzustellen. Die Befehle und Anweisungen können zu der Medien-Pipeline 234, wenn Medienoperationen ausgeführt werden sollen, oder einer Pipeline für Geometrie und feste Funktion (z. B. die Pipeline 231 für Geometrie und feste Funktion und die Pipeline 237 für feste Funktion), wenn Grafikverarbeitungsoperationen ausgeführt werden sollen, verteilt werden.
  • Die Grafikmikrosteuereinheit 233 kann konfiguriert sein, verschiedene Planungs - und Managementaufgaben für den Grafikprozessorkern 219 auszuführen. In einer Ausführungsform kann die Grafikmikrosteuereinheit 233 Grafik- und/oder Berechnungslastplanung auf den verschiedenen parallelen Grafik-Engines innerhalb der Ausführungseinheits- (EU-) Anordnungen 222A-222F, 224A-224F innerhalb der Teilkerne 221A-221F ausführen. In diesem Planungsmodell kann Host-Software, die auf einem CPU-Kern eines SoC, das den Grafikprozessorkern 219 enthält, Nutzlast einer von mehreren Grafikprozessor-Doorbells übermitteln, die eine Planungsoperation auf der geeigneten Grafik-Engine aufruft. Planungsoperationen enthalten das Bestimmen, welche Nutzlast als nächstes laufen soll, Übermitteln einer Nutzlast zu einem Befehls-Streamer, Vorwegnahme existierender Nutzlasten, die auf einer Engine laufen, Überwachen des Fortschritts einer Nutzlast und Benachrichtigen der Host-Software, wenn eine Nutzlast fertiggestellt ist. In einer Ausführungsform kann die Grafikmikrosteuereinheit 233 außerdem Niederenergie- oder Leerlauf-Zustände für den Grafikprozessorkern 219 unterstützen, was den Grafikprozessorkern 219 mit der Fähigkeit ausstattet, Register innerhalb des Grafikprozessorkerns 219 über Niederenergiezustandsübergänge unabhängig von dem Betriebssystem und/oder der Grafiktreiber-Software auf dem System zu sichern und wiederherzustellen.
  • Der Grafikprozessorkern 219 kann mehr oder weniger als die dargestellten Teilkerne 221A-221F aufweisen, bis zu N modulare Teilkerne. Für jede Gruppe aus N Teilkernen kann der Grafikprozessorkern 219 außerdem eine Logik 235 mit gemeinsam verwendeter Funktion, einen gemeinsam verwendeten und/oder Cache-Speicher 236, eine Pipeline 237 für Geometrie/feste Funktion, und auch zusätzliche Logik 238 mit fester Funktion enthalten, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die Logik 235 mit gemeinsam verwendeter Funktion kann Logikeinheiten enthalten, die der Logik 420 mit gemeinsam verwendeter Funktion von 4 zugeordnet ist (z. B. Sampler-, Math- und/oder Inter-Thread-Kommunikation-Logik), die durch jeden der N Teilkerne innerhalb des Grafikprozessorkerns 219 gemeinsam verwendet werden können. Der gemeinsam verwendete und/oder Cache-Speicher 236 kann ein Cache der letzten Ebene für die Gruppe der N Teilkerne 221A-221F innerhalb des Grafikprozessorkerns 219 sein und kann außerdem als gemeinsam verwendeter Speicher dienen, der für mehrere Teilkerne zugreifbar ist. Die Pipeline 237 für Geometrie/feste Funktion kann anstelle der Pipeline 231 für Geometrie/feste Funktion innerhalb des Blocks 230 mit fester Funktion enthalten sein und kann die gleichen oder ähnliche Logikeinheiten enthalten.
  • In einer Ausführungsform enthält der Grafikprozessorkern 219 zusätzliche Logik 238 mit fester Funktion, die verschiedene Beschleunigungslogik mit fester Funktion zum Gebrauch durch den Grafikprozessorkern 219 enthalten kann. In einer Ausführungsform enthält die zusätzliche Logik 238 mit fester Funktion eine zusätzliche Geometrie-Pipeline zum Gebrauch für Nur-Positions-Shading. Bei Nur-Position-Shading existieren zwei Geometrie-Pipelines, eine vollständige Geometrie-Pipeline innerhalb der Pipeline 238, 231 für Geometrie/feste Funktion und eine Auswahl-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die innerhalb der zusätzlichen Logik 238 mit fester Funktion enthalten sein kann. In einer Ausführungsform ist die Auswahl-Pipeline eine verschlankte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Auswahl-Pipeline können unterschiedliche Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Nur-Positions-Shading kann lange Auswahl-Abläufe verworfener Dreiecke verdecken, was ermöglicht, dass in einigen Fällen Shading früher fertiggestellt werden kann. Beispielsweise und in einer Ausführungsform kann die Auswahl-Pipeline-Logik innerhalb der zusätzlichen Logik 238 mit fester Funktion Positions-Shader parallel zu der Hauptanwendung ausführen und erzeugt im allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Auswahl-Pipeline nur die Positionsattribute der Vertices abholt und schattiert, ohne Rasterung und Rendern der Pixel zu dem Rahmenpuffer auszuführen. Die Auswahl-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne zu berücksichtigen, ob diese Dreiecke ausgewählt sind. Die vollständige Pipeline (die in diesem Fall als eine Wiedergabe-Pipeline bezeichnet sein kann) kann die Sichtbarkeitsinformationen verbrauchen, um die ausgewählten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke, die schließlich zu der Rasterungsphase weitergegeben werden, zu schattieren.
  • In einer Ausführungsform kann die zusätzliche Logik 238 mit fester Funktion außerdem Maschinenlernbeschleunigungslogik, wie z. B. Matrixmultiplikationslogik mit fester Funktion, für Implementierungen enthalten, die Optimierungen für Maschinenlerntraining oder Inferenzieren enthalten.
  • Innerhalb jeder Grafik enthält der Teilkern 221A-221F eine Gruppe von Ausführungsbetriebsmitteln, die verwendet werden können, um Grafik-, Medien- und Berechnungsoperationen in Reaktion auf Anforderungen durch die Grafik-Pipeline, die Medien-Pipeline oder Shader-Programme auszuführen. Die Grafikteilkerne 221A-221F enthalten mehrere EU-Anordnungen 222A-222F, 224A-224F, Logik zur Thread-Verteilung und thread-übergreifende Kommunikation (TD/IC-Logik) 223A-223F, einen 3D- (z. B. Textur-) Sampler 225A-225F, einen Medien-Sampler 206A-206F, einen Shader-Prozessor 227A-227F und einen gemeinsam verwendeten lokalen Speicher (SLM) 228A-228F. Die EU-Anordnungen 222A-222F, 224A-224F enthalten jeweils mehrere Ausführungseinheiten, die Allzweckgrafikverarbeitungseinheiten sind, die zum Ausführen von Gleitkomma- und Ganzzahl/Festkomma-Logikoperationen zum Bedienen von Grafik-, Medien- oder Berechnungsoperationen, die Grafik-, Medien- oder Computer-Shader-Programme enthalten, fähig sind. Die TD/IC-Logik 223A-223F führt lokale Thread-Verteilung und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Teilkerns aus und unterstützt Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Teilkerns ablaufen. Der 3D-Sampler 225A-225F kann Textur oder andere 3D-Grafik-bezogene Daten in den Speicher lesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Sample-Zustand und dem Texturformat, das einer gegebenen Textur zugeordnet ist, unterschiedlich lesen. Der Medien-Sampler 206A-206F kann ähnliche Leseoperationen basierend auf dem Typ und dem Format, die Mediendaten zugeordnet sind, ausführen. In einer Ausführungsform kann jeder Grafikteilkern 221A-221F alternierend einen einheitlichen 3D- und Medien-Sampler enthalten. Threads, die auf dem Ausführungseinheiten innerhalb jedes der Teilkerne 221A-221F ablaufen, können den gemeinsam verwendeten lokalen Speicher 228A-228F innerhalb jedes Teilkerns verwenden, um zu ermöglichen, dass Threads, die innerhalb einer Thread-Gruppe ablaufen, unter Verwendung eines gemeinsamen Pools von chip-internem Speicher ablaufen.
  • 2C stellt eine Grafikverarbeitungseinheit (GPU) 239 dar, die dedizierte Gruppen von Grafikverarbeitungsbetriebsmitteln, die in Mehrkerngruppen 240A-240N angeordnet sind, enthält. Obwohl nur Einzelheiten einer einzigen Mehrkerngruppe 240A bereitgestellt sind, ist zu verstehen, dass die anderen Mehrkerngruppen 240B-240N mit den gleichen oder ähnlichen Gruppen von Grafikverarbeitungsbetriebsmitteln ausgestattet sein können.
  • Wie dargestellt kann eine Mehrkerngruppe 240A eine Gruppe von Grafikkernen 243, eine Gruppe von Tensorkernen 244 und eine Gruppe von Strahlverfolgungskernen 245 enthalten. Ein Scheduler/Verteiler 241 plant und verteilt die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 243, 244, 245. Eine Gruppe von Registerdateien 242 speichert Operandenwerte, die durch die Kerne 243, 244, 245 verwendet werden, wenn sie die Grafik-Threads ausführen. Diese können beispielsweise Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern gepackter Datenelemente (Ganzzahl- und/oder Gleitkomma-Datenelemente) und Kachelregister zum Speichern von Tensor/Matrixwerten enthalten. In einer Ausführungsform sind die Kachelregister als kombinierte Gruppen von Vektorregistern implementiert.
  • Eine oder mehrere kombinierte Ebene-1 (L1-) Caches und gemeinsam verwendeter Speichereinheiten 247 speichern Grafikdaten wie z. B. Texturdaten, Vertexdaten, Pixeldaten, Strahldaten, Grenzvolumendaten usw. lokal innerhalb jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können außerdem verwendet werden, um Texturoperationen wie z. B. Textur-Mapping und -Sampling auszuführen. Ein Ebene-2 (L2-) Cache 253, der von allen oder einer Teilmenge der Mehrkerngruppen 240A-240N gemeinsam verwendet wird, speichert Grafikdaten und/oder Befehle für mehrere gleichzeitige Grafik-Threads. Die dargestellt kann der L2-Cache 253 über mehrere Mehrkerngruppen 240A-240N gemeinsam verwendet werden. Eine oder mehrere Speichersteuereinheiten 248 koppeln mit GPU 239 mit einem Speicher 249, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe/Ausgabe- (I/O) Schaltungsanordnung 250 koppelt die GPU 239 mit einer oder mehreren I/O-Vorrichtungen 252 wie z. B. digitalen Signalprozessoren (DSPs), Netzsteuereinheiten oder Anwendereingabevorrichtungen. Eine On-Chip-Zusammenschaltung kann verwendet sein, um die I/O-Vorrichtungen 252 mit der GPU 239 und dem Speicher 249 zu koppeln. Eine oder mehrere I/O-Speichermanagementeinheiten (IOMMUs) 251 der I/O-Schaltungsanordnung 250 koppeln die I/O-Vorrichtungen 252 direkt mit dem Systemspeicher 249. In einer Ausführungsform managt die IOMMU 251 mehrere Gruppen von Seitentabellen, um virtuelle Adressen auf physikalische Adressen in dem Systemspeicher 249 abzubilden. In dieser Ausführungsform können die I/O-Vorrichtungen 252, CPU(s) 246 und GPU(s) 239 denselben virtuellen Adressenraum gemeinsam verwenden.
  • In einer Implementierung unterstützt die IOMMU 251 Virtualisierung. In diesem Fall kann sie eine erste Gruppe von Seitentabellen, um virtuelle Gast/Grafikadressen auf physikalische Gast/Grafikadressen abzubilden, und eine zweite Gruppe von Seitentabellen, um die physikalischen Gast/Grafikadressen auf physikalische System/Host-Adressen (z. B. innerhalb des Systemspeichers 249) abzubilden, managen. Die Basisadresse jeder aus der ersten und der zweiten Gruppe von Seitentabellen kann in Steuerregistern gespeichert sein und bei einem Kontextumschalten ausgelagert werden (so dass z. B. der neue Kontext mit Zugriff auf die relevante Gruppe von Seitentabellen ausgestattet ist). Obwohl in 2C nicht dargestellt kann jeder der Kerne 243, 244, 245 und/oder Mehrkerngruppen 240A-240N Übersetzungspuffer (TLBs) enthalten, um Umsetzungen von virtuellem Gast auf physikalischen Gast, Umsetzungen von physikalischem Gast auf physikalischen Host und Umsetzungen von virtuellem Gast auf physikalischen Host zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, GPUs 239 und I/O-Vorrichtungen 252 auf einem/einer einzigen Halbleiterchip und/oder Chipbaugruppe integriert. Der dargestellte Speicher 249 kann auf demselben Chip integriert sein oder kann mit den Speichersteuereinheiten 248 über eine Off-Chip-Schnittstelle gekoppelt sein. In einer Implementierung umfasst der Speicher 249 GDDR6-Speicher, der denselben virtuellen Adressenraum mit anderen physikalischen Speichern auf Systemebene gemeinsam verwendet, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung eingeschränkt sind.
  • In einer Ausführungsform enthalten die Tensorkerne 244 mehrere Ausführungseinheiten, die spezifisch konstruiert sind, um Matrixoperationen auszuführen, die die grundlegende Rechenoperation sind, die verwendet wird, um Operationen für tiefes Lernen auszuführen. Beispielsweise können gleichzeitige Matrixmultiplikationsoperationen für Training und Inferenz in neuronalen Netzen verwendet werden. Die Tensorkerne 244 können Matrixverarbeitung unter Verwendung einer Vielzahl von Genauigkeiten für Operanden ausführen, die einfach genaues Gleitkomma (z. B. 32 Bits), halbgenaues Gleitkomma (z. B. 16 Bits), Ganzzahlwörter (16 Bits), Bytes (8 Bits) und Halb-Bytes (4 Bits) enthalten. In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder gerenderten Szene, potentiell mit Kombinieren von Einzelheiten aus mehreren Rahmen, um ein endgültiges Bild von hoher Qualität zu konstruieren.
  • In Implementierungen für tiefes Lernen kann die Arbeit zur parallelen Matrixmultiplikation zur Ausführung auf den Tensorkernen 244 geplant werden. Das Training neuronaler Netze erfordert insbesondere eine signifikante Anzahl von Matrix-Skalarprodukt-Operationen. Um eine Formulierung des inneren Produkts einer N x N x N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 wenigstens N Skalarproduktverarbeitungselemente enthalten. Bevor das Matrixmultiplizieren beginnt, wird eine vollständige Matrix in Kachelregister geladen, und wenigstens eine Spalte einer zweiten Matrix wird in jedem Zyklus für N Zyklen geladen. In jedem Zyklus sind N Skalarprodukte vorhanden, die verarbeitet werden.
  • Matrixelemente können mit unterschiedlichen Genauigkeiten gespeichert werden, abhängig von der speziellen Implementierung, die 16-Bit-Wörter, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4) enthalten. Betriebsarten mit unterschiedlicher Genauigkeit können für die Tensorkerne 244 spezifiziert sein, um sicherzustellen, dass die effizienteste Genauigkeit für unterschiedliche Arbeitslasten verwendet werden (wie z. B. Inferenz-Arbeitslasten, die Quantisierung in Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 245 Strahlverfolgungsoperationen für sowohl Echtzeit-Strahlverfolgungs- als auch Nicht-Echtzeit-Strahlverfolgungsimplementierungen. Insbesondere enthalten die Strahlverfolgungskerne 245 eine Strahltraversal/schnittpunkt-Schaltungsanordnung zum Ausführen von Strahltraversierung unter Verwendung von Grenzvolumenhierarchien (BVHs) und Identifizieren von Schnittpunkten zwischen Strahlen und Grundelementen, die in den BVH-Volumen eingeschlossen sind, enthalten. Die Strahlverfolgungskerne 245 können außerdem Schaltungsanordnung zum Ausführen von Tiefenprüfung und Auswählen (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) enthalten. In einer Implementierung führen die Strahlverfolgungskerne 245 Traversal- und Schnittpunktoperationen in Übereinstimmung mit den hier beschriebenen Bildentrauschungstechniken aus, wobei wenigstens ein Abschnitt davon auf den Tensorkernen 244 ausgeführt werden kann. Beispielsweise implementieren in einer Ausführungsform die Tensorkerne 244 ein neuronales Netz für tiefes Lernen, um Entrauschen von Rahmen, die durch die Strahlverfolgungskerne 245 erzeugt werden, auszuführen. Die CPU(s) 246, Grafikkerne 243 und/oder Strahlverfolgungskerne 245 können jedoch auch die gesamten oder einen Teil der Algorithmen für Entrauschen und/oder tiefes Lernen implementieren.
  • Zusätzlich kann, wie vorstehend beschrieben, eine verteilte Herangehensweise zum Entrauschen eingesetzt sein, in der die GPU 239 in einer Berechnungsvorrichtung ist, die mit anderen Berechnungsvorrichtungen über ein Netz oder eine Hochgeschwindigkeitszusammenschaltung gekoppelt ist. In dieser Ausführungsform verwenden die zusammengeschalteten Berechnungsvorrichtungen Daten zum Lernen/Trainieren eines neuronalen Netzes gemeinsam, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, das Entrauschen für unterschiedliche Typen von Bildrahmen und/oder unterschiedliche Grafikanwendungen auszuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 245 alle BVH-Traversalen und Strahl-Grundelementschnittpunkte, was erspart, dass die Grafikkerne 243 mit Tausenden von Anweisungen pro Strahl überlastet werden. In einer Ausführungsform enthält jeder Strahlverfolgungskern 245 eine erste Gruppe spezialisierter Schaltungsanordnung zum Ausführen von Grenzboxtests (z. B. für Transversal-Operationen) und eine zweite Gruppe spezialisierter Schaltungsanordnung zum Ausführen der Strahl-Dreiecks-Schnittpunkttests (z. B. sich kreuzende Strahlen, die durchlaufen worden sind). Somit kann in einer Ausführungsform die Mehrkerngruppe 240A einfach eine Strahlsonde starten, und die Strahlverfolgungskerne 245 führen unabhängig Strahltraversierung und Schnittpunkte aus und geben Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) zu dem Thread-Kontext aus. Die anderen Kerne 243, 244 sind frei, um andere Grafik- oder Rechenarbeit auszuführen, während die Strahlverfolgungskerne 245 Traversal- und Schnittpunktoperationen ausführen.
  • In einer Ausführungsform enthält jeder Strahlverfolgungskern 245 eine Traversaleinheit zum Ausführen von BVH-Testoperationen und eine Schnittpunkteinheit, die Strahl-Grundelement-Schnittpunkttests ausführt. Die Schnittpunkteinheit erzeugt eine „Treffen“-, „kein Treffer“- oder „mehrere Treffer“-Antwort, die für den entsprechenden Thread bereitgestellt wird. Während der Traversal- und Schnittpunkt-Operationen sind die Ausführungsbetriebsmittel der anderen Kerne (z. B. Grafikkerne 243 und Tensorkerne 244) frei, um andere Formen von Grafikarbeit auszuführen.
  • In einer nachstehend beschriebenen speziellen Ausführungsform ist eine hybride Herangehensweise für Rasterung/Strahlverfolgung verwendet, in der die Arbeit zwischen den Grafikkernen 243 und den Strahlverfolgungskernen 245 verteilt ist.
  • In einer Ausführungsform enthalten die Strahlverfolgungskerne 245 (und/oder anderen Kerne 243, 244) sowohl Hardware-Unterstützung für einen Strahlverfolgungs-Befehlssatz wie z. B. „DirectX Ray Tracing“ (DXR) von Microsoft, der einen DispatchRays-Befehl enthält, als auch Shader für Strahlerzeugung, besten Treffer, irgendeinen Treffer und keinen Treffer, die die Zuweisung eindeutiger Gruppen von Shadern und Texturen für jedes Objekt ermöglichen. Eine weitere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 245, die Grafikkerne 243 und die Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es wird jedoch darauf hingewiesen, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine spezielle Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlverfolgungs-Befehlssatz unterstützen, der Befehle/Funktionen für Strahlerzeugung, besten Treffer, irgendeinen Treffer, Strahl-Grundelement-Schnittpunkt, pro Grundelement und hierarchische Grenzbox-Konstruktion, Fehlschlag, Besuch und Ausnahmen enthält. Insbesondere enthält eine Ausführungsform Strahlverfolgungsbefehle zum Ausführen der folgenden Funktionen:
    • Strahlerzeugung - Strahlerzeugungsbefehle können für jedes/jeden Pixel, Abtastpunkt oder andere durch einen Anwender definierte Arbeitszuweisung ausgeführt werden.
    • Bester Treffer - Ein Befehl für besten Treffer kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Grundelementen innerhalb einer Szene zu lokalisieren.
    • Irgendein Treffer - Ein Befehl für irgendeinen Treffer identifiziert mehrere Schnittpunkte zwischen einem Strahl und Grundelementen innerhalb einer Szene, potentiell zum Identifizieren eines neuen nächstgelegenen Schnittpunkts.
    • Schnittpunkt - Ein Befehl für einen Schnittpunkt führt einen Strahl-Grundelement-Schnittpunkt-Test aus und gibt ein Ergebnis aus.
    • Pro Grundelement Begrenzungsbox-Konstruktion - Dieser Befehl baut eine Begrenzungsbox um ein gegebenes Grundelement oder Gruppe von Grundelementen auf (z. B. wenn eine neue BVH oder eine andere Beschleunigungsdatenstruktur aufgebaut wird).
    • Fehlschlag - Gibt an, dass ein Strahl alle Geometrie innerhalb einer Szene oder eines spezifizierten Gebiets einer Szene verfehlt.
    • Besuch - Gibt die Nachfolgervolumen an, die ein Strahl traversieren wird.
    • Ausnahmen - Enthält verschiedene Typen von Ausnahme-Handlern (die z. B. für verschiedene Fehlerzustände aufgerufen werden).
  • 2D ist ein Blockdiagramm einer Allzweck-Grafikverarbeitungseinheit (GPGPU) 270, die als ein Grafikprozessor und/oder Rechenbeschleuniger konfiguriert sein kann, gemäß hier beschriebenen Ausführungsformen. Die GPGPU 270 kann mit Host-Prozessoren (z. B. einer oder mehreren CPU(s) 246) und Speicher 271, 272 über einen oder mehrere System- und/oder Speicherbusse zusammengeschaltet sein. In einer Ausführungsform ist der Speicher 271 ein Systemspeicher, der mit der einen oder den mehreren CPU(s) 246 gemeinsam verwendet werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der für die GPGPU 270 dediziert ist. In einer Ausführungsform können Komponenten innerhalb der GPGPU 270 und des Vorrichtungsspeichers 272 in Speicheradressen abgebildet werden, die für die eine oder die mehreren CPU(s) 246 zugänglich sind. Der Zugriff auf den Speicher 271 und 272 kann über eine Speichersteuereinheit 268 unterstützt werden. In einer Ausführungsform enthält die Speichersteuereinheit 268 eine interne Direktspeicherzugriffs- (DMA-) Steuereinheit 269 oder kann Logik enthalten, um Operationen auszuführen, die andernfalls durch eine DMA-Steuereinheit ausgeführt würden.
  • Die GPGPU 270 enthält mehrere Cache-Speicher, die einen L2-Cache 253, einen LI-Cache 254 und einen Befehls-Cache 255 enthalten, und einen gemeinsam verwendeten Speicher 256, von dem wenigstens ein Abschnitt auch als ein Cache-Speicher abgeteilt sein kann. Die GPGPU 270 enthält außerdem mehrere Recheneinheiten 260A-260N. Jede Recheneinheit 260A-260N enthält eine Gruppe von Vektorregistern 261, Skalarregistern 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264. Die Recheneinheiten 260A-260N können außerdem lokalen gemeinsam verwendeten Speicher 265 und einen Programmzähler 266 enthalten. Die Recheneinheiten 260A-260N können mit einem Konstanten-Cache 267 gekoppelt sein, der verwendet werden kann, um konstante Daten, die Daten sind, die sich während des Ablaufs eines Kernel- oder Shader-Programms, das auf der GPGPU 270 abläuft, nicht ändern, zu speichern. In einer Ausführungsform ist der Konstanten-Cache 267 ein Skalardaten-Cache, und zwischengespeicherte Daten können direkt in die Skalarregister 262 geholt werden.
  • Während des Betriebs können die eine oder die mehreren CPU(s) 246 Befehle in Register oder den Speicher in der GPGPU 270 schreiben, der in einen zugänglichen Adressenraum abgebildet worden ist. Die Befehlsprozessoren 257 können die Befehle aus Registern oder dem Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU 270 verarbeitet werden. Ein Thread-Verteiler 258 kann dann verwendet werden, um Threads zu den Recheneinheiten 260A-260N zum Ausführen dieser Befehle zu verteilen. 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 Berechnung konfiguriert sein und kann die Ergebnisse der Berechnung bedingt zu dem Speicher ausgeben. Die Befehlsprozessoren 257 können die eine oder die mehreren CPU(s) 246 unterbrechen, wenn die zugeführten Befehle fertiggestellt sind.
  • 3A-3C stellen Blockdiagramme zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen, die durch hier beschriebene Ausführungsformen bereitgestellt sind, dar. Die Elemente der 3A-3C, die die gleichen Bezugszeichen (oder Namen) aufweisen wie die Elemente irgendeiner anderen Figur hier, können auf eine Weise arbeiten oder funktionieren, die ähnlich der an anderer Stelle hier beschriebenen ist, sind jedoch nicht darauf beschränkt.
  • 3A ist ein Blockdiagramm eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, die mit mehreren Verarbeitungskernen oder anderen Halbleitervorrichtungen wie z. B., ohne jedoch darauf beschränkt zu sein, Speichervorrichtungen oder Netzschnittstellen integriert sein kann. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete I/O-Schnittstelle zu Registern auf dem Grafikprozessor und mit Befehlen, die in den Prozessorspeicher platziert sind. In einigen Ausführungsformen enthält der Grafikprozessor 300 eine Speicherschnittstelle 314, um auf den Speicher zuzugreifen. Die Speicherschnittstelle 314 kann eine Schnittstelle zu einem lokalen Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam verwendeten externen Caches und/oder zu dem Systemspeicher sein.
  • In einigen Ausführungsformen enthält der Grafikprozessor 300 außerdem eine Anzeigesteuereinheit 302 zum Treiben von Anzeigeausgabedaten zu einer Anzeigevorrichtung 318. Die Anzeigesteuereinheit 320 enthält Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammenstellung mehrerer Schichten von Video oder Anwenderschnittstellenelementen. Die Anzeigevorrichtung 318 kann eine interne oder eine externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine am Kopf getragene Anzeigevorrichtung, wie z. B. eine Anzeigevorrichtung für virtuelle Realität (VR) oder eine Anzeigevorrichtung für erweiterte Realität (AR). In einigen Ausführungsformen enthält der Grafikprozessor 300 eine Video-Codec-Engine 306 zum Codieren, Decodieren oder Transcodieren von Medien in ein oder mehrere, aus oder zwischen einem oder mehreren Mediencodierungsformate/n, die, ohne jedoch darauf beschränkt zu sein, sowohl Formate der „Moving Picture Experts Group“ (MPEG) wie z. B. MPEG-2, „Advanced Video Coding“- (AVC-) Formate wie z. B. H.264/MPEG-4 AVC, H.265/HEVC, „Alliance for Open Media“ (AOMedia) VP8, VP9 als auch Formate der „Society of Motion Picture & Television Engineers“ (SMPTE) 421M/VC-1 und „Joint Photographic Experts Group“ (JPEG) wie z. B. JPEG und Motion JPEG (MJPEG) enthalten.
  • In einigen Ausführungsformen enthält der Grafikprozessor 300 eine Blockbildübertragungs- (BLIT-) Engine 304 zum Ausführen zweidimensionaler (2D) Rasterisierer-Operationen, die beispielsweise Bitgrenzenblockübertragungen enthalten. In einer Ausführungsform werden 2D-Grafikoperationen jedoch unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 310 ausgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechen-Engine zum Ausführen von Grafikoperationen, die dreidimensionale (3D-) Grafikoperationen und Medienoperationen enthalten.
  • In einigen Ausführungsformen enthält die GPE 310 eine 3D-Pipeline 312 zum Ausführen von 3D-Operationen wie z. B. Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundformen (z. B. ein Rechteck, Dreieck usw.) arbeiten. Die 3D-Pipeline 312 enthält programmierbare Elemente und Elemente mit fester Funktion, die verschiedene Aufgaben innerhalb des Elements ausführen und/oder Ausführungs-Threads zu einem 3D/Medienteilsystem 315 erzeugen. Obwohl die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen auszuführen, enthält eine Ausführungsform der GPE 310 außerdem eine Medien-Pipeline 316, die spezifisch verwendet wird, um Medienoperationen auszuführen, wie z. B. Videonachverarbeitung und Bildverbesserung.
  • In einigen Ausführungsformen enthält die Medien-Pipeline 316 Logikeinheiten mit fester Funktion oder programmierbare Logikeinheiten zum Ausführen einer oder mehrerer spezialisierter Medienoperationen wie z. B. Video-Decodierungsbeschleunigung, Video-Entschachtelung und Video-Codierungsbeschleunigung anstelle der oder im Auftrag der Video-Codec-Engine 306. In einigen Ausführungsformen enthält die Medien-Pipeline 316 zusätzlich eine Thread-Erzeugungseinheit zum Erzeugen von Threads zur Ausführung auf dem 3D/Medienteilsystem 315. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten, die in dem 3D/Medienteilsystem 315 enthalten sind, aus.
  • In einigen Ausführungsformen enthält das 3D/Medienteilsystem 315 Logik zum Ausführen von Threads, die durch die 3D-Pipeline 312 und die Medien-Pipeline 316 erzeugt werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D/Medienteilsystem 315, das Thread-Verteilungslogik zum Vermitteln und Verteilen der verschiedenen Anforderungen an verfügbare Thread-Ausführungsbetriebsmittel enthält. Die Ausführungsbetriebsmittel enthalten eine Gruppe von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen enthält das 3D-Medienteilsystem 315 einen oder mehrere interne Caches für Thread-Befehle und Daten. In einigen Ausführungsformen enthält das Teilsystem auch gemeinsam verwendeten Speicher, der Register und adressierbaren Speicher enthält, um Daten durch Threads gemeinsam zu verwenden und um Ausgabedaten zu speichern.
  • 3B stellt einen Grafikprozessor 320, der eine gekachelte Architektur aufweist, gemäß hier beschriebenen Ausführungsformen dar. In einer Ausführungsform enthält der Grafikprozessor 320 ein Grafikverarbeitungs-Engine-Cluster 322, das mehrere Instanzen der Grafikverarbeitungs-Engine 310 von 3A innerhalb einer Grafik-Engine-Kachel 310A-310D aufweist. Jede Grafik-Engine-Kachel 310A-310D kann über eine Gruppe von Kachelzusammenschaltungen 323A-323F zusammengeschaltet sein. Jede Grafik-Engine-Kachel 310A-310D kann außerdem mit einem Speichermodul oder einer Speichervorrichtung 326A-326D über Speicherzusammenschaltungen 325A-325D verbunden sein. Die Speichervorrichtungen 326A-326D können irgendeine Grafikspeichertechnologie verwenden. Beispielsweise können die Speichervorrichtungen 326A-326D Grafik-Doppeldatenraten-(GDDR-) Speicher sein. Die Speichervorrichtungen 326A-326D in einer Ausführungsform sind Speicher-Module mit großer Bandbreite (HBM-Module), die auf einem Baustein mit ihrer jeweiligen Grafik-Engine-Kachel 310A-310D sein können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die auf ihrer jeweiligen Grafik-Engine-Kachel 310A-310D gestapelt sein können. In einer Ausführungsform sind jede Grafik-Engine-Kachel 310A-310D und der zugeordnete Speicher 326A-326D auf separaten Chiplets angeordnet, die an ein/en Basisbaustein oder Basissubstrat gebondet sind, wie genauer in den 11B-11D beschrieben ist.
  • Das Grafikverarbeitungs-Engine-Cluster 322 kann mit einer chipinternen oder baugruppeninternen Fabric-Zusammenschaltung 324 verbunden sein. Die Fabric-Zusammenschaltung 324 kann Kommunikation zwischen den Grafik-Engine-Kacheln 310A-310D und Komponenten wie z. B. dem Video-Codec 306 und einer oder mehreren Kopier-Engines 304 ermöglichen. Die Kopier-Engines 304 können verwendet werden, um Daten aus den, in die oder zwischen den Speichervorrichtungen 326A-326D und dem Speicher, der außerhalb des Grafikprozessors 320 ist, (z. B. dem Systemspeicher) zu verlagern. Die Fabric-Zusammenschaltung 324 kann außerdem verwendet werden, um die Grafik-Engine-Kacheln 310A-310D zusammenzuschalten. Der Grafikprozessor 320 kann optional eine Anzeigesteuereinheit 302 enthalten, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann außerdem als ein Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können die Anzeigesteuereinheit 302 und die Anzeigevorrichtung 318 weggelassen sein.
  • Der Grafikprozessor 320 kann mit einem Host-System über eine Host-Schnittstelle 328 verbunden sein. Die Host-Schnittstelle 328 kann die Kommunikation zwischen dem Grafikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann beispielsweise ein PCI-Express-Bus oder ein anderer Typ einer Host-Systemschnittstelle sein.
  • 3C stellt einen Rechenbeschleuniger 330 gemäß hier beschriebenen Ausführungsformen dar. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 320 von 3B enthalten und ist zur Rechenbeschleunigung optimiert. Ein Rechen-Engine-Cluster 332 kann eine Gruppe von Rechen-Engine-Kacheln 340A-340D enthalten, die Ausführungslogik enthalten, die für parallele oder vektorbasierte Allzweckrechenoperationen optimiert ist. In einigen Ausführungsformen enthalten die Rechen-Engine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, obwohl in einer Ausführungsform eine oder mehrere der Rechen-Engine-Kacheln 340A-340D Logik zum Ausführen von Medienbeschleunigung enthalten können. Die Rechen-Engine-Kacheln 340A-340D können mit dem Speicher 326A-326D über Speicherzusammenschaltungen 325A-325D verbunden sein. Der Speicher 326A-326D und die Speicherzusammenschaltungen 325A-325D können eine ähnliche Technologie wie in dem Grafikprozessor 320 sein, oder sie können anders sein. Die Grafik-Rechen-Engine-Kacheln 340A-340D können außerdem über eine Gruppe von Kachelzusammenschaltungen 323A-323F zusammengeschaltet sein und können mit einer Fabric-Zusammenschaltung 324 verbunden und/oder durch sie zusammengeschaltet sein. In einer Ausführungsform enthält der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als ein vorrichtungsweiter Cache konfiguriert sein kann. Der Rechenbeschleuniger 330 kann außerdem mit einem Host-Prozessor und Speicher über eine Host-Schnittstelle 328 auf ähnliche Weise wie der Grafikprozessor 320 von 3B verbunden sein.
  • Grafikverarbei tungs- Engine
  • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors in Übereinstimmung mit einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (GPE) 410 eine Version der GPE 310, die in 3A gezeigt ist, und kann außerdem eine Grafik-Engine-Kachel 310A-310D von 3B repräsentieren. Elemente von 4, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können auf eine Weise arbeiten oder funktionieren, die ähnlich derjenigen ist, die hier an anderer Stelle beschrieben ist, sind jedoch nicht darauf beschränkt. Beispielsweise sind die 3D-Pipeline 312 und die Medien-Pipeline 316 von 3A dargestellt. Die Medien-Pipeline 316 ist optional in einigen Ausführungsformen der GPE 410 und kann in der GPE 410 nicht ausdrücklich enthalten sein. Beispielsweise und in wenigstens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403, der einen Befehlsstrom zu der 3D-Pipeline 312 und/oder Medien-Pipelines 316 bereitstellt, gekoppelt oder enthält ihn. In einigen Ausführungsformen ist der Befehls-Streamer 403 mit Speicher gekoppelt, der Systemspeicher oder einer oder mehrere aus internem Cache-Speicher und gemeinsam verwendetem Cache-Speicher sein kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 Befehle von dem Speicher und sendet die Befehle zu der 3D-Pipeline 312 und/oder Medien-Pipeline 316. Die Befehle sind Anweisungen, die aus einem Ringpuffer geholt werden, der Befehle für die 3D-Pipeline 312 und Medien-Pipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Batch-Befehlspuffer enthalten, die Batches aus mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können außerdem Referenzen auf im Speicher gespeicherte Daten enthalten, wie z. B., ohne jedoch darauf beschränkt zu sein, 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 durch Ausführen von Operationen über Logik innerhalb der entsprechenden Pipelines oder durch Verteilen eines oder mehrerer Ausführungs-Threads zu einer Grafikkernanordnung 414. In einer Ausführungsform enthält 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 enthält. Jeder Grafikkern enthält eine Gruppe von Grafikausführungsbetriebsmitteln, die sowohl Allzweck- und grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen als auch Beschleunigungslogik für Texturverarbeitung mit fester Funktion und/oder maschinelles Lernen und künstliche Intelligenz enthalten.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 Logik mit fester Funktion und programmierbare Logik enthalten, um ein oder mehrere Shader-Programme, wie z. B. Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme, durch Verarbeiten der Befehle und Verteilen von Ausführungs-Threads zu der Grafikkernanordnung 414 zu verarbeiten. Die Grafikkernanordnung 414 stellt einen einheitlichen Block von Ausführungsbetriebsmitteln zum Gebrauch zum Verarbeiten dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) innerhalb des/der Grafikkern(e) 415A-414B der Grafikkernanordnung 414 enthält Unterstützung für verschiedene 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungs-Threads, die mehreren Shadern zugeordnet sind, ausführen.
  • In einigen Ausführungsformen enthält die Grafikkernanordnung 414 Ausführungslogik zum Ausführen von Medienfunktionen wie z. B. Video- und/oder Bildverarbeitung. In einer Ausführungsform enthalten die Ausführungseinheiten Allzwecklogik, die programmierbar ist, um parallele Allzweckberechnungsoperationen auszuführen, zusätzlich zu Grafikverarbeitungsoperationen. Die Allzwecklogik kann Verarbeitungsoperationen parallel oder zusammen mit Allzwecklogik innerhalb des/der Prozessorkern(e) 107 von 1 oder dem Kern 202A-202N wie in 2A ausführen.
  • Ausgabedaten, die durch Threads erzeugt werden, die auf der Grafikkernanordnung 414 ablaufen, können Daten zum Speicher in einem einheitlichen Rückgabepuffer (URB) 418 ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 428 verwendet werden, um Daten zwischen unterschiedlichen Threads, die auf der Grafikkernanordnung 414 ablaufen, zu senden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Threads auf der Grafikkernanordnung und der Logik mit fester Funktion innerhalb der Logik 420 mit gemeinsam verwendeter Funktion verwendet werden.
  • In einigen Ausführungsformen ist die Grafikkernanordnung 414 skalierbar, so dass die Anordnung eine variable Anzahl von Grafikkernen enthält, von denen jeder eine variable Anzahl von Ausführungseinheiten basierend auf der Zielleistung und dem Leistungsfähigkeitsniveau der GPE 410 aufweist. In einer Ausführungsform sind die Ausführungsbetriebsmittel dynamisch skalierbar, so dass Ausführungsbetriebsmittel bei Bedarf aktiviert oder deaktiviert werden können.
  • Die Grafikkernanordnung 414 ist mit der Logik 420 mit gemeinsam verwendeter Funktion, die mehrere Betriebsmittel enthält, die von den Grafikkernen in der Grafikkernanordnung gemeinsam verwendet werden, gekoppelt. Die gemeinsam verwendeten Funktionen innerhalb Logik 420 mit gemeinsam verwendeter Funktion sind Hardware-Logikeinheiten, die spezialisierte ergänzende Funktionalität für die Grafikkernanordnung 414 bereitstellen. In verschiedenen Ausführungsformen enthält die Logik 420 mit gemeinsam verwendeter Funktion, ohne jedoch darauf beschränkt zu sein, Logik für Sampler 421, Math 422 und Thread-übergreifende Kommunikation (ITC) 423. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 innerhalb der Logik 420 mit gemeinsam verwendeter Funktion.
  • Eine gemeinsam verwendete Funktion ist wenigstens in einem Fall implementiert, in dem der Bedarf für eine gegebene spezialisierte Funktion zum Aufnehmen in die Grafikkernanordnung 414 nicht ausreichend ist. Stattdessen ist eine einzige Instanziierung dieser spezialisierten Funktion als eine eigenständige Instanziierung in der Logik 420 für gemeinsam verwendete Funktion implementiert und wird von den Ausführungsbetriebsmitteln innerhalb der Grafikkernanordnung 414 gemeinsam verwendet. Die genaue Gruppe von Funktionen, die von der Grafikkernanordnung 414 gemeinsam verwendet und in der Grafikkernanordnung 414 enthalten ist, variiert über die Ausführungsformen. In einigen Ausführungsformen können spezifische gemeinsam verwendete Funktionen innerhalb der Logik 420 mit gemeinsam verwendeter Funktion, die durch die Grafikkerngruppe 414 extensiv verwendet werden, in der Logik 416 mit gemeinsam verwendeter Funktion innerhalb der Grafikkerngruppe 414 enthalten sein. In verschiedenen Ausführungsformen kann die Logik 416 mit gemeinsam verwendeter Funktion in der Grafikkerngruppe 414 einige der oder alle Logik innerhalb der Logik 420 mit gemeinsam verwendeter Funktion enthalten. In einer Ausführungsform können alle Logikelemente innerhalb der Logik 420 mit gemeinsam verwendeter Funktion innerhalb der Logik 416 mit gemeinsam verwendeter Funktion der Grafikkerngruppe 414 dupliziert sein. In einer Ausführungsform ist die Logik 420 mit gemeinsam verwendeter Funktion zugunsten der Logik 416 mit gemeinsam verwendeter Funktion innerhalb des Grafikkern-Anordnungen 414 ausgeschlossen.
  • Ausführungseinheiten
  • 5A-5B stellen Thread-Ausführungslogik 500 dar, die eine Anordnung von Verarbeitungselementen enthält, die in einem Grafikprozessor gemäß hier beschriebenen Ausführungsformen eingesetzt sind. Elemente der 5A-5B, die die gleichen Bezugszeichen (oder Namen) aufweisen wie die Elemente irgendeiner anderen Figur hier, können auf eine Weise arbeiten oder funktionieren, die ähnlich der an anderer Stelle hier beschriebenen ist, sind jedoch nicht darauf beschränkt. Die 5A-5B stellen eine Übersicht der Thread-Ausführungslogik 500 dar, die für Hardware-Logik repräsentativ sein kann, die mit jedem Teilkern 221A-221F von 2B dargestellt ist. 5A ist für eine Ausführungseinheit innerhalb eines Allzweckgrafikprozessors repräsentativ, während 5B für eine Ausführungseinheit repräsentativ ist, die innerhalb eines Rechenbeschleunigers verwendet sein kann.
  • Wie in 5A dargestellt ist, enthält die Thread-Ausführungslogik 500 in einigen Ausführungsformen einen Shader-Prozessor 502, einen Thread-Verteiler 504, einen Befehls-Cache 506, eine skalierbare Ausführungseinheits-Anordnung, die mehrere Ausführungseinheiten 508A-508N enthält, einen Sampler 510, einen gemeinsam verwendeten lokalen Speicher 511, Daten-Cache 512 und einen Daten-Port 514. In einer Ausführungsform kann die skalierbare Ausführungseinheits-Anordnung durch Aktivieren oder Deaktivieren einer oder mehrerer Ausführungseinheiten (z. B. irgendeiner der Ausführungseinheit 508A, 508B, 508C, 508D bis 508N-1 und 508N) basierend auf den Rechenanforderungen einer Last dynamisch skaliert werden. In einer Ausführungsform sind die enthaltenen Komponenten über ein Zusammenschaltungs-Fabric, das mit jeder der Komponenten gekoppelt ist, miteinander verbunden. In einigen Ausführungsformen enthält die Thread-Ausführungslogik 500 eine oder mehrere Verbindungen zum Speicher, wie z. B. dem Systemspeicher oder Cache-Speicher, durch eines oder mehrere aus dem Befehls-Cache 506, dem Daten-Port 514, dem Sampler 510 und den Ausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Allzweckberechnungseinheit, die zum Ausführen mehrerer gleichzeitiger Hardware-Threads fähig ist, während sie mehrere Datenelemente für jeden Thread parallel verarbeitet. In verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten 508A-508N skalierbar, so dass es irgendeine Anzahl individueller Ausführungseinheiten enthält.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N primär zum Ausführen von Shader-Programmen verwendet. Ein Shader-Prozessor 502 kann die verschiedenen Shader-Programme verarbeiten und Ausführungs-Threads, die den Shader-Programmen zugeordnet sind, über einen Thread-Verteiler 504 verteilen. In einer Ausführungsform enthält der Thread-Verteiler Logik, um Thread-Einleitungsanforderungen aus den Grafik- und Medien-Pipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N zu instanziieren. Beispielsweise kann eine Geometrie-Pipeline Vertex-, Parkettierung- oder Geometrie-Shader zur Thread-Ausführungslogik zur Verarbeitung verteilen. In einigen Ausführungsformen kann der Thread-Verteiler 504 außerdem Laufzeit-Thread-Erzeugungsanforderungen aus den ablaufenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Befehlssatz, der native Unterstützung für viele Standard-3D-Grafik-Shader-Befehle enthält, so dass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertexprogramme, Geometrieprogramme, Vertex-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und Allzweckverarbeitung (z. B. Berechnen und Medien-Shader). Jede der Ausführungseinheiten 508A-508N ist zur Ausführung von Mehrfachausgabe von Einzelbefehl-Mehrfachdaten (SIMD) fähig, und Mehr-Thread-Operation ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit größerer Latenz. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit weist eine dedizierte Registerdatei mit großer Bandbreite und einen zugeordneten unabhängigen Thread-Zustand auf. Die Ausführung ist Mehrfachausgabe pro Takt zu Pipelines, die zu Ganzzahl-, einfach und doppelt genauen Gleitkommazahloperationen, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und verschiedenen anderen Operationen fähig sind. Während auf Daten aus dem Speicher oder einer der gemeinsam verwendeten Funktionen gewartet wird, verursacht eine Abhängigkeitslogik innerhalb der Ausführungseinheiten 508A-508N, dass ein wartender Thread schläft, bis die angeforderten Daten zurückgegeben worden sind. Während der wartende Thread schläft, können Hardware-Betriebsmittel zum Verarbeiten anderer Threads verwendet werden. Beispielsweise kann während einer Verzögerung, die einer Vertex-Shader-Operation zugeordnet ist, eine Ausführungseinheit Operationen für einen Pixel-Shader, Fragment-Shader oder einen andere Typ eines Shader-Programms, das einen anderen Vertex-Shader enthält, ausführen. Verschiedene Ausführungsformen können für die Ausführung durch Verwendung von Einzelbefehl-Mehrfach-Threads (SIMT) als eine Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD gelten. Bezugnahme auf eine/n SIMD-Kern oder -Operation kann auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N arbeitet auf Anordnungen von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für den Befehl. Ein Ausführungskanal ist eine logische Einheit zum Ausführen für Datenelementzugriff, Maskierung und Ablaufsteuerung innerhalb von Befehlen. Die Anzahl von Kanälen kann von der Anzahl physikalischer Arithmetiklogikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen speziellen Grafikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheitenbefehlssatz enthält SIMD-Befehle. Die verschiedenen Datenelemente können als ein Paketdatentyp in einem Register gespeichert sein, und die Ausführungseinheit wird die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeiten. Beispielsweise werden, wenn sie auf einem 256-Bit breiten Vektor arbeitet, die 256 Bits des Vektors in einem Register gespeichert, und die Ausführungseinheit arbeitet auf dem Vektor als vier separaten gepackten 54-Bit-Datenelementen (Datenelemente der Größe Quad-Wort (QW)), acht separaten gepackten 32-Bit-Datenelementen (Datenelemente der Größe Double-Word (DW)), sechzehn separaten gepackten 16-Bit-Datenelementen (Datenelemente der Größe Wort (W)) oder zweiunddreißig separaten 8-Bit-Datenelementen (Datenelemente der Größe Byte (B)). Es sind jedoch andere Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten in eine vereinigte Ausführungseinheit 509A-509N kombiniert sein, die eine Thread-Steuerlogik (507A-507N) aufweist, die den vereinigten EUs gemeinsam ist. Mehrere EUs können in eine EU-Gruppe vereinigt sein. Jede EU in der vereinigten EU-Gruppe kann konfiguriert sein, einen separaten SIMD-Hardware-Thread auszuführen. Die Anzahl von EUs in einer vereinigten EU-Gruppe kann gemäß Ausführungsformen variieren. Zusätzlich können verschiedene SIMD pro EU ausgeführt werden, die, ohne jedoch darauf beschränkt zu sein, SIMD8, SIMD16 und SIMD32 enthalten. Jede vereinigte Grafikausführungseinheit 509A-509N enthält wenigstens zwei Ausführungseinheiten. Beispielsweise enthält die vereinigte Ausführungseinheit 509A eine erste EU 508A, eine zweite EU 508B und die Thread-Steuerlogik 507A, die der ersten EU 508A und der zweite EU 508B gemeinsam ist. Die Thread-Steuerlogik 507A steuert Threads, die auf der vereinigten Grafikausführungseinheit 509A ausgeführt werden, was es jeder EU innerhalb der vereinigten Ausführungseinheiten 509A-509N ermöglicht, unter Verwendung eines gemeinsamen Befehlszeigerregisters abzulaufen.
  • Ein oder mehrere interne Befehls-Caches (z. B. 506) sind in der Thread-Ausführungslogik 500 enthalten, um Thread-Befehle für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (z. B. 512) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 500 ablaufen, können außerdem explizit gemanagte Daten in dem gemeinsam verwendeten lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Sampler 510 enthalten, um Textur-Sampling für 3D-Operationen und Medien-Sampling für Medienoperationen auszuführen. In einigen Ausführungsformen enthält der Sampler 510 spezialisierte Textur- oder Medien-Sampling-Funktionalität, um Textur- oder Mediendaten während des Sampling-Prozesses zu verarbeiten, bevor die gesampelten Daten für eine Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Einleitungsanforderungen zu der Thread-Ausführungslogik 500 über die Thread-Erzeugungs- und Verteilungs-Logik. Sobald eine Gruppe geometrischer Objekte verarbeitet und in Pixeldaten gerastert worden ist, wird die Pixelprozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 502 aufgerufen, um weiter Ausgabeinformationen zu berechnen und zu bewirken, dass Ergebnisse in Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixel-Shader oder Fragment-Shader die Werte der verschiedenen Vertex-Attribute, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt dann die Pixel-Prozessorlogik innerhalb des Shader-Prozessors 502 ein über die Anwendungsprogrammierschnittstelle (API) zugeführtes Pixel- oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, verteilt der Shader-Prozessor 502 Threads über den Thread-Verteiler 504 an eine Ausführungseinheit (z. B. 508A). In einigen Ausführungsformen verwendet der Shader-Prozessor 502 Textur-Sampling-Logik in dem Sampler 510, um auf Texturdaten in Textur-Karten, die in dem Speicher gespeichert sind, zuzugreifen. Arithmetikoperationen auf den Texturdaten und den eingegebenen Geometriedaten berechnen Pixel-Farbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel aus der weiteren Verarbeitung.
  • In einigen Ausführungsformen stellt der Daten-Port 514 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 500 bereit, um verarbeitete Daten zum Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen enthält der Daten-Port 514 einen oder mehrere Cache-Speicher (z. B. Daten-Cache 512) oder ist mit ihnen gekoppelt, um Daten für Speicherzugriff über den Daten-Port zwischenzuspeichern.
  • In einer Ausführungsform kann die Ausführungslogik 500 außerdem eine Strahlverfolgungseinheit 505 enthalten, die eine Strahlverfolgungsbeschleunigungsfunktionalität bereitstellen kann. Die Strahlverfolgungseinheit 505 kann einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen zur Strahlerzeugung enthält. Der Strahlverfolgungsbefehlssatz kann dem Strahlverfolgungsbefehlssatz, der durch die Strahlverfolgungskerne 245 in 2C unterstützt werden, ähnlich oder davon verschieden sein.
  • 5B stellt beispielhafte interne Einzelheiten einer Ausführungseinheit 508 gemäß Ausführungsformen dar. Eine Grafikausführungseinheit 508 kann eine Befehlsabholeinheit 537, eine allgemeine Registerdatei-Anordnung (GRF) 524, eine architektonische Registerdatei-Anordnung (ARF) 526, einen Thread-Vermittler 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, eine Gruppe von SIMD-Gleitkommaeinheiten (FPUs) 534 und in einer Ausführungsform eine Gruppe dedizierter Ganzzahl-SIMD-ALUs 535 enthalten. Die GRF 524 und die ARF 526 enthalten die Gruppe allgemeiner Registerdateien und Architektur-Registerdateien, die jedem gleichzeitigen Hardware-Thread, der in der Grafikausführungseinheit 508 aktiv sein kann, zugeordnet sind. In einer Ausführungsform wird ein architektonischer Zustand pro Thread in der ARF 526 gehalten während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 524 gespeichert sind. Der Ausführungszustand jedes Threads, der die Befehlszeiger für jeden Thread enthält, kann in Thread-spezifischen Registern in der ARF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, die eine Kombination aus gleichzeitigem Multi-Threading (SMT) und feingranularem verschachteltem Multi-Threading (IMT) ist. Die Architektur weist eine modulare Konfiguration auf, die zur Zeit der Konstruktion basierend auf einer Zielanzahl gleichzeitiger Threads und der Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei die Ausführungseinheitsbetriebsmittel über Logik verteilt sind, 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 werden.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Befehle zusammen ausgeben, die jeweils ein unterschiedlicher Befehl sein können. Der Thread-Vermittler 522 des Grafikausführungseinheits-Threads 508 kann die Befehle zu einer aus der Sendeeinheit 530, der Verzweigungseinheit 532 oder der/den SIMD-FPU(s) 534 zur Ausführung verteilen. Jeder Ausführungs-Thread kann auf 128 Allzweckregister innerhalb der GRF 524 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als ein SIMD-8-Elementevektor aus 32-Bit-Datenelementen zugreifbar sind. In einer Ausführungsform besitzt jeder Ausführungseinheit-Thread Zugriff auf 4 Kbytes innerhalb der GRF 524, obwohl Ausführungsformen nicht so eingeschränkt sind und mehr oder weniger Registerbetriebsmittel in anderen Ausführungsformen bereitgestellt sein können. In einer Ausführungsform ist die Grafikausführungseinheit 508 in sieben Hardware-Threads unterteilt, die unabhängig Berechnungsoperationen ausführen können, obwohl die Anzahl von Threads pro Ausführungseinheit gemäß Ausführungsformen auch 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. Wenn 16 Threads auf 4 Kbytes zugreifen können, kann die GRF insgesamt 64 Kbytes speichern. Flexible Adressierungsarten können erlauben, dass Register zusammen adressiert werden, um effektiv breitere Register aufzubauen oder um abgestufte rechteckige Blockdatenstrukturen zu repräsentieren.
  • In einer Ausführungsform werden Speicheroperationen, Sampler-Operationen und andere Systemkommunikation mit größerer Latenz über „Sende“-Befehle verteilt, die durch die Nachricht, die die Sendeeinheit 530 durchlaufen, ausgeführt werden. In einer Ausführungsform werden Verzweigungsbefehle zu einer dedizierten Verzweigungseinheit 532 verteilt, um SIMD-Divergenz und letztendlich Konvergenz zu unterstützen.
  • In einer Ausführungsform enthält die Grafikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 534 zum Ausführen von Gleitkommaoperationen. In einer Ausführungsform können die FPU(s) 534 außerdem Ganzzahlberechnungen unterstützen. In einer Ausführungsform können die FPU(s) 534 bis zur Anzahl von M 32-Bit-Gleitkomma-(oder Ganzzahl-) Operationen SIMD-ausführen oder bis zur 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen SIMD-ausführen. In einer Ausführungsform stellt wenigstens eine der FPU(s) erweiterte Math-Fähigkeiten bereit, um transzendente Math-Operationen mit hohem Durchsatz und doppelt genaue 54-Bit-Gleitkommazahl zu unterstützen. In einigen Ausführungsformen ist außerdem eine Gruppe von 8-Bit-Ganzzahl-SIMD-ALUs 535 vorhanden und kann spezifisch optimiert sein, um Operationen, die Maschinenlernberechnungen zugeordnet sind, auszuführen.
  • In einer Ausführungsform können Anordnungen aus mehreren Instanzen der Grafikausführungseinheit 508 in einer Grafikteilkern-Gruppierung (z. B. einer Teilscheibe) instanziiert sein. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Teilkerngruppierung wählen. In einer Ausführungsform kann die Ausführungseinheit 508 Befehle über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform wird jeder Thread, der auf der Grafikausführungseinheit 508 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • 6 stellt eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform dar. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zum Gebrauch beispielsweise in einer Rechen-Engine-Kachel 340A-340D wie in 3C sein, ist jedoch nicht darauf beschränkt. Varianten der Ausführungseinheit 600 können auch in einer Grafik-Engine-Kachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform enthält die Ausführungseinheit 600 eine Thread-Steuereinheit 601, eine Thread-Zustandseinheit 602, eine Befehlsabhol/vorabholeinheit 603 und eine Befehlsdecodiereinheit 604. Die Ausführungseinheit 600 enthält zusätzlich eine Registerdatei 606, die Register speichert, die Hardware-Threads innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 enthält zusätzlich eine Sendeeinheit 607 und eine Verzweigungseinheit 608. In einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 der Grafikausführungseinheit 508 von 5B arbeiten.
  • Die Ausführungseinheit 600 enthält außerdem eine Recheneinheit 610, die mehrere unterschiedliche Typen von Funktionseinheiten enthält. In einer Ausführungsform enthält die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von Arithmetiklogikeinheiten enthält. Die ALU-Einheit 611 kann konfiguriert sein, 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen auszuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig ausgeführt werden. Die Recheneinheit 610 kann außerdem eine systolische Anordnung 612 und eine Math-Einheit 613 enthalten. Die systolische Anordnung 612 enthält ein W breites und D tiefes Netz von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere Datenparalleloperationen auf systolische Weise auszuführen. In einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, Matrixoperationen wie z. B. Matrix-Skalarprodukt-Operationen auszuführen. In einer Ausführungsform unterstützt die systolische Anordnung 612 sowohl 16-Bit-Gleitkommaoperationen als auch 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, Maschinenlernoperationen zu beschleunigen. In solchen Ausführungsformen kann die systolische Anordnung 612 mit Unterstützung für das bfloat-16-Bit-Gleitkommaformat konfiguriert sein. In einer Ausführungsform kann eine Math-Einheit 613 enthalten sein, um eine spezifische Teilmenge mathematischer Operationen auf effiziente und weniger Energie benötigende Weise als die ALU-Einheit 611 auszuführen. Die Math-Einheit 613 kann eine Variante der Math-Logik enthalten, die in der Logik mit gemeinsam verwendeter Funktion einer Grafikverarbeitungs-Engine zu finden ist, die durch andere Ausführungsformen bereitgestellt ist (z. B. die Math-Logik 422 der Logik 420 mit gemeinsam verwendeter Funktion von 4). In einer Ausführungsform kann die Math-Einheit 613 konfiguriert sein, 32-Bit- und 64-Bit-Gleitkommaoperationen auszuführen.
  • Die Thread-Steuereinheit 601 enthält Logik zum Steuern der Ausführung von Threads innerhalb der Ausführungseinheit. Die Thread-Steuereinheit 601 kann Thread-Vermittlungslogik zum Starten, Anhalten und Vorwegnehmen der Ausführung von Threads innerhalb der Ausführungseinheit 600 enthalten. Die Thread-Zustandseinheit 602 kann verwendet werden, um den Thread-Zustand für Threads, die zum Ausführen auf der Ausführungseinheit 600 zugewiesen sind, zu speichern. Das Speichern des Thread-Zustands innerhalb der Ausführungseinheit 600 ermöglicht das schnelle Vorwegnehmen von Threads, wenn diese Threads blockiert oder frei werden. Die Befehlsabhol/vorabholeinheit 603 kann Befehle aus einem Befehls-Cache einer Ausführungslogik höherer Ebene (z. B. dem Befehls-Cache 506 wie in 5A) holen. Die Befehlsabhol/vorabholeinheit 603 kann außerdem Anforderungen zum Vorabholen für Befehle, die in den Befehls-Cache geladen werden sollen, basierend auf einer Analyse aktuell ablaufender Threads ausgeben. Die Befehlsdecodiereinheit 604 kann verwendet werden, um Befehle, die durch die Recheneinheiten ausgeführt werden sollen, zu decodieren. In einer Ausführungsform kann die Befehlsdecodiereinheit 604 als ein sekundärer Decodierer verwendet werden, um komplexe Befehle in einzelne Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 600 enthält zusätzlich eine Registerdatei 606, die durch Hardware-Threads, die auf der Ausführungseinheit 600 ablaufen, verwendet werden kann. Register in der Registerdatei 606 können über die Logik, die verwendet wird, um mehrere gleichzeitige Threads innerhalb der Recheneinheit 610 der Ausführungseinheit 600 auszuführen, aufgeteilt werden. 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 werden. Die Größe der Registerdatei 606 kann über Ausführungsformen basierend auf der Anzahl unterstützter Hardware-Threads variieren. In einer Ausführungsform kann Registerumbenennung verwendet werden, um Hardware-Threads dynamisch Register zuzuweisen.
  • 7 ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 700 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten einen Befehlssatz, der Befehle in mehreren Formaten aufweist. Die durchgezogen umrandeten Kästen stellen die Komponenten dar, die allgemein in einem Ausführungseinheitenbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Befehle enthalten sind. In einigen Ausführungsformen ist das beschriebene und dargestellte Befehlsformat 700 Makro-Befehle, insofern als es Befehle sind, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die aus dem Decodieren von Befehlen resultieren, sobald der Befehl verarbeitet wird.
  • In einigen Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten nativ Befehle in einem 128-Bit-Befehlsformat 710. Ein kompaktes 64-Bit-Befehlsformat 730 ist für einige Befehle basierend auf dem ausgewählten Befehl, Befehlsoptionen und der Anzahl von Operanden verfügbar. Das native 128-Bit-Befehlsformat 710 stellt Zugriff auf alle Befehlsoptionen bereit, während einige Optionen und Operationen in dem 64-Bit-format 730 eingeschränkt sind. Die nativen Befehle, die in dem 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen ist der Befehl unter Verwendung einer Gruppe von Indexwerten in einem Indexfeld 713 teilweise kompaktiert. Die Ausführungseinheit-Hardware referenziert eine Gruppe von Kompaktierungstabellen basierend auf den Indexwerten und verwendet die Kompaktierungstabellenausgaben, um einen nativen Befehl in dem 128-Bit-Befehlsformat 710 zu rekonstruieren. Andere Größen und Formate von Befehlen können verwendet werden.
  • Für jedes Format definiert der Befehls-Opcode 712 die Operation, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jeden Befehl parallel über die mehreren Datenelemente jedes Operanden aus. Beispielsweise führt die Ausführungseinheit in Reaktion auf einen Add-Befehl eine gleichzeitige Add-Operation über jeden Farbkanal, der ein Texturelement oder ein Bildelement repräsentiert, aus. Standardmäßig führt die Ausführungseinheit jeden Befehl über alle Datenkanäle der Operanden aus. In einigen Ausführungsformen ermöglicht das Befehlssteuerfeld 714 die Steuerung spezieller Ausführungsoptionen wie z. B. Kanalauswahl (z. B. Vorhersage) und Datenkanalreihenfolge (z. B. Swizzle). Für Befehle in dem 128-Bit-Befehlsformat 710 begrenzt ein Ausführungs-Größenfeld 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Ausführungs-Größenfeld 716 zum Gebrauch in dem kompakten 64-Bit-Befehlsformat 730 nicht verfügbar.
  • Einige Anweisungseinheitenbefehle weisen bis zu drei Operanden auf, die zwei Quelloperanden, src0 720, src1 722, und ein Ziel 718 enthalten. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Befehle mit zwei Zielen, wobei eines der Ziele impliziert ist. Datenmanipulationsbefehle können einen dritten Quelloperanden (z. B. SRC2 724) aufweisen, wobei der Befehls-Opcode 712 die Anzahl von Quelloperanden bestimmt. Ein letzter Quelloperand eines Befehls kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit dem Befehl übergeben wird.
  • In einigen Ausführungsformen enthält das 128-Bit-Befehlsformat 710 ein Zugriffs/Adressmodusfeld 726, das beispielsweise spezifiziert, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden durch Bits in dem Befehl direkt bereitgestellt.
  • In einigen Ausführungsformen enthält das 128-Bit-Befehlsformat 710 ein Zugriffs/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl spezifiziert. In einer Ausführungsform wird der Adressmodus verwendet, um eine Datenzugriffsausrichtung für den Befehl zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, die einen 16-Byte-ausgerichteten Zugriffsmodus und einen 1-Byte-ausgerichteten Zugriffsmodus enthalten, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Befehlsoperanden bestimmt. Beispielsweise kann in einem ersten Modus der Befehl Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und in einem zweiten Modus kann der Befehl 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs/Adressmodusfelds 726, ob der Befehl direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen Bits in dem Befehl die Registeradresse eines oder mehrerer Operationen direkt bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Adressen-Immediate-Feld in dem Befehl berechnet werden.
  • In einigen Ausführungsformen sind die Befehle basierend auf Opcode-Bit-Feldern 712 gruppiert, um das Opcode-Decodieren 740 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6, dass die Ausführungseinheit den Typ des Opcode bestimmt. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen enthält eine Verschiebungs- und Logik-Opcode-Gruppe 742 Datenverschiebungs- und Logik-Befehle (z. B. Verschieben (mov), Vergleichen (cmp)). In einigen Ausführungsformen verwendet die Verschiebungs- und Logik-Gruppe 742 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei Verschiebungs- (mov) Befehle in der Form 0000xxxxb sind und Logik-Befehle in der Form 0001xxxxb sind. Eine Ablaufsteuerungsbefehlsgruppe 744 (z. B. Aufruf (call), Sprung (jmp)) enthält Befehle in der Form 0010xxxxb z. B. 0x20). Eine Verschiedenes-Befehlsgruppe 746 enthält eine Mischung aus Befehlen, die Synchronisationsbefehle (z. B. Warten (wait), Senden (send)) in der Form 001 Ixxxxb (z. B. 0x30) enthält. Eine Parallel-Math-Befehlsgruppe 748 enthält komponentenweise Arithmetikbefehle (z. B. Addieren (add), Multiplizieren (mul)) in der Form 0100xxxxb (z. B. 0x40). Die Parallel-Math-Gruppe 748 führt Arithmetikoperationen parallel über Datenkanäle aus. Die Vektor-Math-Gruppe 750 enthält Arithmetikbefehle (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50). Die Vektor-Math-Gruppe führt Arithmetik wie z. B. Skalarproduktberechnungen auf Vektoroperanden aus. Das dargestellte Opcode-Decodieren 740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Abschnitt einer Ausführungseinheit verwendet wird, um einen decodierten Befehl auszuführen. Beispielsweise können einige Befehle als systolische Befehle bezeichnet sein, die durch eine systolische Anordnung ausgeführt werden. Andere Befehle, wie z. B. Strahlverfolgungsbefehle (nicht gezeigt) können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik innerhalb einer Scheibe oder einer Partition der Ausführungslogik geroutet werden.
  • Grafik-Pipeline
  • 8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Grafikprozessors 800. Elemente von 8, die die gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hier aufweisen, können auf eine Weise arbeiten oder funktionieren, die ähnlich derjenigen ist, die hier an anderer Stelle beschrieben ist, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen enthält 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 innerhalb eines Mehrkern-Verarbeitungssystems, das einen oder mehrere Allzweckverarbeitungskerne enthält. Der Grafikprozessor wird durch Registerschreiben in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle, die über eine Ringzusammenschaltung 802 zu dem Grafikprozessor 800 ausgegeben werden, gesteuert. In einigen Ausführungsformen koppelt die Ringzusammenschaltung 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten wie z. B. anderen Grafikprozessoren oder Allzweckprozessoren. Befehle aus der Ringzusammenschaltung 802 werden durch einen Befehls-Streamer 803 interpretiert, der Anweisungen einzelnen Komponenten der Geometrie-Pipeline 820 oder der Medien-Pipeline 830 zuführt.
  • In einigen Ausführungsformen lenkt der Befehls-Streamer 803 die Operation einer Vertex-Abholeinheit 805, die Vertex-Daten aus dem Speicher liest und Vertex-Verarbeitungsbefehle, die durch den Befehls-Streamer 803 bereitgestellt werden, ausführt. In einigen Ausführungsformen stellt die Vertex-Abholeinheit 805 Vertex-Daten für einen Vertex-Shader 807 bereit, der Koordinatenraumtransformation und Ausleuchtungsoperationen für jeden Vertex ausführt. In einigen Ausführungsformen führen die Vertex-Abholeinheit 805 und der Vertex-Shader 807 Vertex-Verarbeitungsbefehle durch Verteilen von Ausführungs-Threads an die Ausführungseinheiten 852A-852B über einen Thread-Verteiler 831 aus.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B eine Anordnung von Vektorprozessoren, die einen Befehlssatz zum Ausführen von Grafik- und Medienoperationen aufweisen. In einigen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen zugeordneten LI-Cache 851 auf, der für jede Anordnung spezifisch ist oder von den Anordnungen gemeinsam verwendet wird. Der Cache kann als ein Daten-Cache, ein Befehls-Cache oder ein einzelner Cache, der partitioniert ist, um Daten und Befehle in unterschiedlichen Partitionen zu beinhalten, konfiguriert sein.
  • In einigen Ausführungsformen enthält die Geometrie-Pipeline 820 Parkettierungskomponenten, um Hardware-beschleunigte Parkettierung von 3D-Objekten auszuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Hüll-Shader 811 die Parkettierungsoperationen. Ein programmierbarer Domänen-Shader 817 stellt Backend-Auswertung der Parkettierungsausgabe bereit. Ein Parkettierer 813 arbeitet unter der Leitung des Hüll-Shaders 811 und beinhaltet Speziallogik, um eine Gruppe detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell zu erzeugen, die als Eingabe in die Geometrie-Pipeline 820 bereitgestellt wird. In einigen Ausführungsformen können, falls keine Parkettierung verwendet wird, die Parkettierungskomponenten (z. B. der Hüll-Shader 811, der Parkettierer 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, die an die Ausführungseinheiten 852A-852B verteilt sind, verarbeitet werden, oder können direkt zu dem Clipper 829 weitergehen. In einigen Ausführungsformen arbeitet der Geometrie-Shader auf vollständigen geometrischen Objekten anstatt auf Vertices oder Ausschnitten von Vertices wie in früheren Stufen der Grafik-Pipeline. Falls die Parkettierung deaktiviert ist, empfängt der Geometrie-Shader 819 Eingaben aus dem Vertex-Shader 807. In einigen Ausführungsformen ist der Geometrie-Shader 819 durch ein Geometrie-Shader-Programm programmierbar, um Geometrie-Parkettierung auszuführen, falls die Parkettierungseinheiten deaktiviert sind.
  • Vor der Rasterung kann ein Clipper 829 die Vertex-Daten verarbeiten. Der Clipper 829 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper, der Clipping- und Geometrie-Shader-Funktionen aufweist, sein. In einigen Ausführungsformen verteilen eine Rasterisierer- und Tiefenprüfungskomponente 873 in der Render-Ausgabe-Pipeline 870 Pixel-Shader, um die geometrischen Objekte in pixelweise Darstellung umzusetzen. 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 Tiefenprüfungskomponente 873 umgehen und auf nicht gerasterte Vertex-Daten über eine Stream-out-Einheit 823 zugreifen.
  • Der Grafikprozessor 800 weist einen Zusammenschaltungsbus, ein Zusammenschaltungs-Fabric oder einen anderen Zusammenschaltungsmechanismus auf, der ermöglicht, dass Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors übergehen. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und zugeordnete Logikeinheiten (z. B. L1-Cache 851, Sampler 854, Textur-Cache 858 usw.) über einen Daten-Port 856 zusammengeschaltet, um Speicherzugriff auszuführen und mit Render-Ausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Sampler 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade auf. In einer Ausführungsform kann der Textur-Cache 858 auch als ein Sampler-Cache konfiguriert sein.
  • In einigen Ausführungsformen enthält die Render-Ausgabe-Pipeline 870 eine Rasterisierer- und Tiefenprüfungskomponente 873, die vertexbasierte Objekte in eine zugeordnete pixelbasierte Repräsentation umsetzt. In einigen Ausführungsformen enthält die Rasterungslogik eine Fensterbildungs/Maskierungs-Einheit, um die feste Funktion einer Dreieck- und Linienrasterung auszuführen. Ein zugeordneter Render-Cache 878 und Tiefen-Cache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen auf den Daten aus, obwohl in einigen Fällen Pixeloperationen, die 2D-Operationen zugeordnet sind (z. B. Bit-Block-Bildübertragung mit Einblendung) durch die 2D-Engine 841 ausgeführt werden oder zur Zeit der Anzeige durch die Anzeigesteuereinheit 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam verwendeter L3-Cache 875 für alle Grafikkomponenten verfügbar, was das gemeinsame Verwenden von Daten ohne die Verwendung des Systemhauptspeichers ermöglicht.
  • In einigen Ausführungsformen enthält die Grafikprozessor-Medien-Pipeline 830 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 enthält die Medien-Pipeline 830 einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medien-Befehle vor dem Senden des Befehls an die Medien-Engine 837. In einigen Ausführungsformen enthält die Medien-Engine 837 Thread-Erzeugungsfunktionalität, um Threads zum Verteilen an die Thread-Ausführungslogik 850 über den Thread-Verteiler 831 zu erzeugen.
  • In einigen Ausführungsformen enthält der Grafikprozessor 800 eine Anzeige-Engine 840. In einigen Ausführungsformen ist die Anzeige-Engine 840 außerhalb des Prozessors 800 und ist mit dem Grafikprozessor über die Ringzusammenschaltung 802 oder einen anderen Zusammenschaltungsbus oder ein Fabric gekoppelt. In einigen Ausführungsformen enthält die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuereinheit 843. In einigen Ausführungsformen beinhaltet die Anzeige-Engine 840 Speziallogik, die zum unabhängigen Betreiben der 3D-Pipeline fähig ist. In einigen Ausführungsformen ist die Anzeigesteuereinheit 843 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt, die eine in das System integrierte Anzeigevorrichtung, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung, die über ein Anzeigevorrichtungsverbindungselement angeschlossen ist, sein kann.
  • In einigen Ausführungsformen sind die Geometrie-Pipeline 820 und die Medien-Pipeline 830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen auszuführen, und sind nicht für irgendeine Anwendungsprogrammierschnittstelle (API) spezifisch. In einigen Ausführungsformen übersetzt Treiber-Software für den Grafikprozessor API-Aufrufe, die für eine spezielle Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die durch den Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen ist Unterstützung für die „Open Graphics Library“ (OpenGL), die „Open Computing Language“ (OpenCL) und Vulkan-Grafik- und Berechnungs-API, alle von der Khronos-Gruppe, bereitgestellt. In einigen Ausführungsformen kann auch Unterstützung für die Direct3D-Bibliothek von Microsoft Corporation bereitgestellt sein. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Es kann auch Unterstützung für die „Open Source Computer Vision Library“ (OpenCV) bereitgestellt sein. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde ebenfalls unterstützt, falls eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafik-Pipeline-Programmierung
  • 9A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 900 gemäß einigen Ausführungsformen darstellt. 9B ein Blockdiagramm ist, das eine Grafikprozessor-Befehlsfolge 910 gemäß einer Ausführungsform darstellt. Die durchgezogen umrandeten Kästen in 9A stellen die Komponenten dar, die allgemein in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 900 von 9A enthält Datenfelder, um einen Client 902, einen Befehlsoperationscode (Opcode) 904 und Daten 906 für den Befehl zu identifizieren. Ein Teil-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, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehls-Parser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu festzusetzen und die Befehlsdaten zu der geeigneten Client-Einheit zu leiten. In einigen Ausführungsformen enthalten die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit weist eine entsprechende Verarbeitungs-Pipeline auf, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen worden ist, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Teil-Opcode 905, um die Operation zu bestimmen, die ausgeführt werden soll. Die Client-Einheit führt den Befehl unter Verwendung der Informationen in dem Datenfeld 906 aus. Für einige Befehle wird eine explizite Befehlsgröße 908 erwartet, um die Größe des Befehls zu spezifizieren. In einigen Ausführungsformen bestimmt der Befehls-Parser automatisch die Größe wenigstens einiger der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen sind Befehle über Vielfache eines Doppelworts ausgerichtet.
  • Das Ablaufdiagramm in 9B stellt eine beispielhafte Grafikprozessor-Befehlssequenz 910 dar. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das mit einer Ausführungsform eines Grafikprozessors ausgestattet ist, eine Version der gezeigten Befehlssequenz, um eine Gruppe von Grafikoperationen aufzubauen, auszuführen und zu beenden. Eine Beispiel-Befehlssequenz ist nur zu Beispielzwecken gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlssequenz beschränkt sind. Außerdem können die Befehle als ein Stapel von Befehlen in einer Befehlssequenz ausgegeben werden, so dass der Grafikprozessor die Sequenz von Befehlen in wenigstens teilweiser Gleichzeitigkeit ausführen kann.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlssequenz 910 mit einem Pipeline-Leerungsbefehl 912 beginnen, um zu bewirken, dass irgendeine aktive Grafik-Pipeline die derzeit anstehenden Befehle für die Pipeline fertigstellt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medien-Pipeline 924 nicht gleichzeitig. Das Leeren der Pipeline wird ausgeführt, um zu bewirken, dass die aktive Grafik-Pipeline irgendwelche anstehenden Befehle fertigstellt. In Reaktion auf ein Leeren der Pipeline wird der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung pausieren, bis die aktiven Zeichnungs-Engines anstehende Operationen fertigstellen und die relevanten Lese-Caches ungültig gemacht werden. Optional können irgendwelche Daten in dem Wiedergabe-Cache, die als „schmutzig“ markiert sind, in den Speicher entleert werden. In einigen Ausführungsformen kann der Pipeline-Leerungsbefehl 912 zur Pipeline-Synchronisation oder vor dem Platzieren des Grafikprozessors in einen Zustand mit geringem Energieverbrauch verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor explizit zwischen Pipelines umschaltet. In einigen Ausführungsformen ist ein Pipeline-Auswahlbefehl 913 nur einmal in einem Ausführungskontext vor dem Ausgeben von Pipeline-Befehlen erforderlich, sofern der Kontext nicht Befehle für beide Pipelines ausgeben muss. In einigen Ausführungsformen ist ein Pipeline-Leerungsbefehl 912 unmittelbar vor dem Umschalten einer Pipeline über den Pipeline-Auswahlbefehl 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 914 eine Grafik-Pipeline für die Operation 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-Synchronisation und zum Entfernen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline vor dem Verarbeiten eines Stapels von Befehlen verwendet.
  • In einigen Ausführungsformen werden Rückgabepufferzustandsbefehle 916 verwendet, um eine Gruppe von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die Operationen Zwischendaten während der Verarbeitung schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor außerdem einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und thread-übergreifende Kommunikation auszuführen. In einigen Ausführungsformen enthält der Rückgabepufferzustand 916 Auswählen der Größe und Anzahl von Rückgabepuffern, die für eine Gruppe von Pipeline-Operationen verwendet werden sollen.
  • Die verbleibenden Befehle in der Befehlssequenz unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 920 ist die Befehlssequenz auf die 3D-Pipeline 922 beginnend mit dem 3D-Pipeline-Zustand 930 oder die Medien-Pipeline 924 beginnend an dem Medien-Pipeline-Zustand 940 zugeschnitten.
  • Die Befehle, um den 3D-Pipeline-Zustand 930 zu konfigurieren, enthalten 3D-Zustandseinstellbefehle für den Vertexpufferzustand, den Vertexelementzustand, den konstanten Farbzustand, den Tiefenpufferzustand und andere Zustandsvariablen, die konfiguriert werden müssen, bevor 3D-Grundelement-Befehle verarbeitet werden. Die Werte dieser Befehle werden wenigstens teilweise basierend auf der speziellen verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind Befehle für den 3D-Pipeline-Zustand 930 außerdem fähig, spezielle Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird ein 3D-Grundelement-Befehl 932 verwendet, um 3D-Grundelemente zu übermitteln, die durch die 3D-Pipeline verarbeitet werden sollen. Befehle und zugeordnete Parameter, die über den 3D-GrundelementeBefehl 932 an den Grafikprozessor übergeben werden, werden zu der Vertexabholfunktion in der Grafik-Pipeline weitergeleitet. Die Vertexabholfunktion verwendet die Daten des 3D-Grundelement-Befehls 932, um Vertexdatenstrukturen zu erzeugen. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird ein 3D-Grundelement-Befehl 932 verwendet, um Vertexoperationen auf 3D-Grundelementen über Vertex-Shader auszuführen. Um Vertex-Shader zu verarbeiten, verteilt die 3D-Pipeline 922 Shader-Ausführungs-Threads an Grafikprozessorausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über einen Ausführungs-934 Befehl oder ein Ereignis getriggert. In einigen Ausführungsformen triggert ein Registerschreiben die Befehlsausführung. In einigen Ausführungsformen wird die Ausführung über einen „Go“- oder „Kick“-Befehl in der Befehlssequenz getriggert. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls getriggert, um die Befehlssequenz über die Grafik-Pipeline zu leeren. Die 3D-Pipeline wird Geometrieverarbeitung für die 3D-Grundelemente ausführen. Sobald die Operationen fertiggestellt sind, werden die resultierenden geometrischen Objekte gerastert, und die Pixel-Engine koloriert die resultierenden Pixel. Zusätzliche Befehle zum Steuern von Pixel-Shading- und Pixel-Backend-Operationen können ebenfalls für diese Operationen enthalten sein.
  • In einigen Ausführungsformen folgt die Grafikprozessor-Befehlssequenz 910 dem Pfad der Medien-Pipeline 924, wenn Medien-Operationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medien-Pipeline 924 von den Medien- oder Berechnungsoperationen ab, die ausgeführt werden sollen. Spezifische Mediendecodierungsoperationen können während der Mediendecodierung zu der Medien-Pipeline entladen werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden, und Mediendecodierung kann ganz oder teilweise unter Verwendung von Betriebsmitteln ausgeführt werden, die durch einen oder mehrere Allzweckverarbeitungskerne bereitgestellt werden. In einer Ausführungsform enthält die Medien-Pipeline außerdem Elemente für Operationen der Allzweckgrafikprozessoreinheit (GPGPU-Operationen), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Berechnungs-Shader-Programmen, die nicht explizit zum Rendern von Grafik-Grundelementen gehören, auszuführen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 924 auf ähnliche Weise wie die 3D-Pipeline 922 konfiguriert. Eine Gruppe von Befehlen zum Konfigurieren des Medien-Pipeline-Zustands 940 wird verteilt oder vor den Medienobjektbefehlen 942 in eine Befehlswarteschlange platziert. In einigen Ausführungsformen enthalten Befehle für den Medien-Pipeline-Zustand 940 Daten zum Konfigurieren der Medien-Pipeline-Elemente, die verwendet werden, um die Medienobjekte zu verarbeiten. Das enthält Daten zum Konfigurieren der Video-Decodier- und Video-Codier-Logik innerhalb der Medien-Pipeline, wie z. B. das Codier- oder Decodierformat. In einigen Ausführungsformen unterstützen Befehle für den Medien-Pipeline-Zustand 940 außerdem das Verwenden eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen beinhalten.
  • In einigen Ausführungsformen führen Medienobjektbefehle 942 Zeiger für Medienobjekte zum Verarbeiten durch die Medien-Pipeline zu. Die Medienobjekte enthalten Speicherpuffer, die Videodaten, die verarbeitet werden sollen, beinhalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände vor dem Ausgeben eines Medienobjektbefehls 942 gültig sein. Sobald der Pipeline-Zustand konfiguriert ist und Medienobjektbefehle 942 in eine Warteschlange eingereiht sind, wird die Medien-Pipeline 924 über einen Ausführungsbefehl 944 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreiben) getriggert. Die Ausgabe aus der Medien-Pipeline 924 kann dann durch Operationen nachverarbeitet werden, die durch die 3D-Pipeline 922 oder die Medien-Pipeline 924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafik-Software-Architektur
  • 10 stellt eine beispielhafte Grafik-Software-Architektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen dar. In einigen Ausführungsformen enthält die Software-Architektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und wenigstens einen Prozessor 1030. In einigen Ausführungsformen enthält der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Allzweckprozessorprozessorkern(e) 1034. Die Grafikanwendung 1010 und das Betriebssystem 1020 laufen jeweils in dem Systemspeicher 1050 des Datenverarbeitungssystems ab.
  • In einigen Ausführungsformen beinhaltet die 3D-Grafikanwendung 1010 ein oder mehrere Shader-Programme, die Shader-Befehle 1012 enthalten. Die Shader-Sprachenbefehle können in einer Shader-Hochsprache wie z. B. der „High Level Shader Language“ (HLSL) oder der „OpenGL Shader Language“ (GLSL) sein. Die Anwendung enthält außerdem ausführbare Befehle 1014 in einer Maschinensprache, die zur Ausführung durch den Allzweckprozessorprozessorkern 1034 geeignet ist. Die Anwendung enthält außerdem Grafikobjekte 1016, die durch Vertexdaten definiert sind.
  • In einigen Ausführungsformen ist das System 1020 ein Microsoft® Windows®-Betriebssystem von Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernel verwendet. Das Betriebssystem 1020 kann eine Grafik-API 1022 wie z. B. die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 1020 einen Frontend-Shader-Compiler 1024, um irgendwelche Shader-Befehle 1012 in HLSL in eine niedrigere Shader-Sprache zu kompilieren. Die Kompilierung kann eine „Just-in-time“- (JIT-) Kompilierung sein, oder die Anwendung kann Shader-Vorkompilierung ausführen. In einigen Ausführungsformen werden Shader hoher Ebene während der Kompilierung der 3D-Grafikanwendung 1010 in Shader niedriger Ebene kompiliert. In einigen Ausführungsformen werden die Shader-Befehle 1012 in einer Zwischenform bereitgestellt, wie z. B. in einer Version der „Standard Portable Intermediate Representation“ (SPIR), die durch die Vulkan-API verwendet wird.
  • In einigen Ausführungsformen beinhaltet ein Anwendermodus-Grafiktreiber 1026 einen Backend-Shader-Compiler 1027, um die Shader-Befehle 1012 in eine Hardwarespezifische Repräsentation umzusetzen. Wenn die OpenGL-API verwendet wird, werden Shader-Befehle 1012 in der GLSL-Hochsprache zur Kompilierung zu einem Anwendermodus-Grafiktreiber 1026 weitergegeben. In einigen Ausführungsformen verwendet der Anwendermodus-Grafiktreiber 1026 Betriebssystemkernelmodusfunktionen 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 verteilen.
  • IP- Kern-Implementierungen
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform kann durch repräsentativen Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik innerhalb einer integrierten Schaltung wie z. B. eines Prozessors repräsentiert und/oder definiert. Beispielsweise kann das maschinenlesbare Medium Befehle enthalten, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn sie durch eine Maschine gelesen werden, können die Befehle bewirken, dass die Maschine die Logik zum Ausführen der hier beschriebenen Techniken herstellt. Solche Repräsentationen, die als „IP-Kerne“ bezeichnet werden, sind wiederverwendbare Einheiten von Logik für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardware-Modell, das die Struktur der integrierten Schaltung beschreibt, gespeichert sein können. Das Hardware-Modell kann verschiedenen Kunden oder Produktionsanlagen geliefert werden, die das Hardware-Modell auf Produktionsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann so hergestellt werden, dass die Schaltung Operationen ausführt, die im Zusammenhang mit irgendeiner der hier beschriebenen Ausführungsformen beschrieben sind.
  • 11A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 1100, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen auszuführen, gemäß einer Ausführungsform darstellt. Das IP-Kern-Entwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Konstruktionen zu erzeugen, die in eine größere Konstruktion integriert werden können, oder kann verwendet werden, um eine vollständige integrierte Schaltung (z. B. eine integrierte Schaltung eines SOC) zu konstruieren. Eine Konstruktionsanlage 1130 kann eine Software-Simulation 1110 einer IP-Kern-Konstruktion in einer Programmier-Hochsprache (z. B. C/C++) erzeugen. Die Software-Simulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 1112 zu konstruieren, zu testen und zu verifizieren. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeit-Simulationen enthalten. Eine Konstruktion auf Registerübertragungsebene (RTL-Konstruktion) 1115 kann dann aus dem Simulationsmodell 1112 erzeugt oder synthetisiert werden. Die RTL-Konstruktion 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardware-Registern modelliert, die die zugeordnete Logik enthält, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Zusätzlich zu einer RTL-Konstruktion 1115 können auch Konstruktionen niedrigerer Ebene auf Logikebene oder Transistorebene erzeugt, konstruiert oder synthetisiert werden. Somit können die speziellen Einzelheiten der anfänglichen Konstruktion und Simulation variieren.
  • Die RTL-Konstruktion 1115 oder ein Äquivalent kann ferner durch die Konstruktionsanlage in ein Hardware-Modell 1120, das in einer Hardware-Beschreibungssprache (HDL) sein kann, oder eine andere Repräsentation physikalischer Konstruktionsdaten synthetisiert werden. Die HDL kann ferner simuliert oder getestet werden, um die IP-Kern-Konstruktion zu verifizieren. Die IP-Kern-Konstruktion kann zur Lieferung an eine Produktionsanlage 1165 Dritter unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. Festplatte, Flash-Speicher oder irgendein nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann die IP-Kern-Konstruktion über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 gesendet werden (z. B. über das Internet). Die Produktionsanlage 1165 kann dann eine integrierte Schaltung herstellen, die wenigstens teilweise auf der IP-Kern-Konstruktion basiert. Die hergestellte integrierte Schaltung kann konfiguriert sein, Operationen in Übereinstimmung mit wenigstens einer hier beschriebenen Ausführungsform auszuführen.
  • 11B stellt eine Querschnittsseitenansicht einer Baugruppe 1170 für eine integrierte Schaltung gemäß einigen hier beschriebenen Ausführungsformen dar. Die Baugruppe 1170 für eine integrierte Schaltung stellt eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie sie hier beschrieben sind, dar. Die Baugruppe 1170 enthält mehrere Einheiten von Hardware-Logik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann wenigstens teilweise in konfigurierbarer Logik oder Logik-Hardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Abschnitte irgendeines aus dem/den Prozessorkern(en), Grafikprozessor(en) oder anderen Beschleunigervorrichtungen, die hier beschrieben sind, enthalten. Jede Einheit der Logik 1172, 1174 kann innerhalb eines Halbleiterbausteins implementiert sein und mit dem Substrat 1180 über eine Zusammenschaltungsstruktur 1173 gekoppelt sein. Die Zusammenschaltungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu lenken und kann Zusammenschaltungen wie z. B. Höcker oder Säulen, ohne darauf beschränkt zu sein, enthalten. In einigen Ausführungsformen kann die Zusammenschaltungsstruktur 1173 konfiguriert sein, elektrische Signale wie beispielsweise Eingabe/Ausgabe- (I/O-) Signale und/oder Strom- oder Massesignale, die der Operation der Logik 1172, 1174 zugeordnet sind, zu lenken. In einigen Ausführungsformen ist das Substrat 1180 ein Epoxid-basiertes Laminatsubstrat. Das Baugruppensubstrat 1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten enthalten. Die Baugruppe 1170 kann mit anderen elektrischen Vorrichtungen über eine Baugruppenzusammenschaltung 1183 verbunden sein. Die Baugruppenzusammenschaltung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen wie z. B. einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul zu lenken.
  • In einigen Ausführungsformen sind die Einheiten der Logik 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die konfiguriert ist, elektrische Signale zwischen der Logik 1172, 1174 zu lenken. Die Brücke 1182 kann eine kompakte Zusammenschaltungsstruktur sein, die einen Weg für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial zusammengesetzt ist. Merkmale zum elektrischen Lenken können auf dem Brückensubstrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Obwohl zwei Einheiten der Logik 1172, 1174 und eine Brücke 1182 dargestellt sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Bausteinen enthalten. Der eine oder die mehreren Bausteine können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Baustein enthalten ist. Alternativ können mehrere Bausteine oder Einheiten der Logik durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Bausteine und Brücken in anderen möglichen Konfigurationen, die dreidimensionale Konfigurationen enthalten, miteinander verbunden sein.
  • 11C stellt eine Baugruppe 1190 dar, die mehrere Einheiten von Hardware-Logik-Chiplets, die mit einem Substrat 1180 (z. B. einem Basisbaustein) verbunden sind, enthält. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, wie sie hier beschrieben sind, können aus diversen Silizium-Chiplets bestehen, die separat hergestellt sind. In diesem Kontext ist ein Chiplet eine wenigstens teilweise paketierte integrierte Schaltung, die unterscheidbare Einheiten von Logik enthält, das mit anderen Chiplets in eine größere Baugruppe zusammengebaut werden kann. Eine diverse Gruppe von Chiplets mit unterschiedlicher IP-Kernlogik kann in eine einzige Vorrichtung zusammengebaut werden. Zusätzlich können die Chiplets in einen Basisbaustein oder ein Basis-Chiplet unter Verwendung aktiver Interposer-Technologie integriert werden. Die hier beschriebenen Konzepte ermöglichen die Zusammenschaltung und Kommunikation zwischen unterschiedlichen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwendung unterschiedlicher Prozesstechnologien hergestellt und während der Herstellung zusammengestellt werden, was die Komplexität des Konvergierens mehrerer IPs, insbesondere auf einem großen SoC mit IPs mehrerer Varianten, in denselben Herstellungsprozess vermeidet. Das Ermöglichen der Verwendung mehrerer Prozesstechnologien verbessert die Zeit bis zur Marktreife und stellt eine kosteneffektive Art und Weise bereit, mehrere Produkt-SKUs zu erzeugen. Zusätzlich sind die untergliederten IPs offener dafür, unabhängig leistungsangesteuert zu werden, so dass Komponenten, die nicht im Gebrauch für eine gegebene Arbeitslast sind, abgeschaltet werden können, was den gesamten Energieverbrauch reduziert.
  • Die Hardware-Logik-Chiplets können Spezial-Hardware-Logik-Chiplets 1172, Logik- oder I/O-Chiplets 1174 und/oder Speicher-Chiplets 1175 enthalten. Die Hardware-Logik-Chiplets 1172 und Logik- oder I/O-Chiplets 1174 können wenigstens teilweise in konfigurierbarer Logik oder Hardware-Logik mit fester Funktionalität implementiert sein und können einen oder mehrere Abschnitte irgendeines aus den Prozessorkern(en), Grafikprozessor(en), Parallelprozessoren oder anderen Beschleunigervorrichtungen, die hier beschrieben sind, enthalten. Die Speicher-Chiplets 1175 können DRAM- (z. B. GDDR-, HBM-) Speicher oder Cache- (SRAM-) Speicher sein.
  • Jedes Chiplet kann als ein separater Halbleiterbaustein produziert und mit dem Substrat 1180 über eine Zusammenschaltungsstruktur 1173 gekoppelt ist sein. Die Zusammenschaltungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen den verschiedenen Chiplets und Logik innerhalb des Substrats 1180 zu lenken. Die Zusammenschaltungsstruktur 1173 kann Zusammenschaltungen wie z. B., ohne jedoch darauf beschränkt zu sein, Höcker oder Säulen enthalten. In einigen Ausführungsformen kann die Zusammenschaltungsstruktur 1173 konfiguriert sein, elektrische Signale wie beispielsweise Eingabe/Ausgabe- (I/O-) Signale und/oder Strom- oder Massesignale, die der Operation der Logik-, I/O- und Speicher-Chiplets zugeordnet sind, zu lenken.
  • In einigen Ausführungsformen ist das Substrat 1180 ein Epoxid-basiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten enthalten. Die Baugruppe 1190 kann mit anderen elektrischen Vorrichtungen über eine Baugruppenzusammenschaltung 1183 verbunden sein. Die Baugruppenzusammenschaltung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen wie z. B. einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul zu lenken.
  • In einigen Ausführungsformen können ein Logik- oder I/O-Chiplet 1174 und ein Speicher-Chiplet 1175 über eine Brücke 1187, die konfiguriert ist, elektrische Signale zwischen dem Logik- oder I/O-Chiplet 1174 und einem Speicher-Chiplet 1175 zu lenken, elektrisch gekoppelt sein. Die Brücke 1187 kann eine kompakte Zusammenschaltungsstruktur sein, die einen Weg für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Merkmale für elektrisches Lenken können auf dem Brückensubstrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder I/O-Chiplet 1174 und einem Speicher-Chiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als eine Siliziumbrücke oder eine Zusammenschaltungsbrücke bezeichnet sein. Beispielsweise ist in einigen Ausführungsformen die Brücke 1187 eine eingebettete Mehrbaustein-Zusammenschaltungsbrücke (EMIB). In einigen Ausführungsformen kann die Brücke 1187 einfach eine direkte Verbindung von einem Chiplet zu einem weiteren Chiplet sein.
  • Das Substrat 1180 kann Hardware-Komponenten für I/O 1191, Cache-Speicher 1192 und andere Hardware-Logik 1193 enthalten. Ein Fabric 1185 kann in das Substrat 1180 eingebettet sein, um Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 1191, 1193 innerhalb des Substrats 1180 zu ermöglichen. In einer Ausführungsform können die I/O 1191, das Fabric 1185, der Cache, die Brücke und andere Hardware-Logik 1193 in einen Basisbaustein integriert sein, der oben auf dem Substrat 1180 geschichtet ist.
  • In verschiedenen Ausführungsformen kann eine Baugruppe 1190 eine kleinere oder eine größere Anzahl von Komponenten und Chiplets enthalten, die durch ein Fabric 1185 oder eine oder mehrere Brücken 1187 zusammengeschaltet sind. Die Chiplets innerhalb der Baugruppe 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-Zusammenschaltung zwischen beispielsweise Logik- oder I/O-Chiplets und Speicher-Chiplets zu unterstützen. Das Fabric 1185 kann verwendet werden, um die verschiedenen Logik- und/oder I/O-Chiplets (z. B. die Chiplets 1172, 1174, 1191, 1193) mit anderen Logik- und/oder I/O-Chiplets zusammenzuschalten. In einer Ausführungsform kann der Cache-Speicher 1192 innerhalb des Substrats als globaler Cache für die Baugruppe 1190, Teil eines verteilten globalen Cache oder als ein dedizierter Cache für das Fabric 1185 agieren.
  • 11D stellt eine Baugruppe 1194, die austauschbare Chiplets 1195 enthält, gemäß einer Ausführungsform dar. 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ückenzusammenschaltung 1197, die ähnlich den anderen hier beschriebenen Brückenzusammenschaltungen sein kann, gekoppelt sein und können beispielsweise eine EMIB sein. Speicher-Chiplets können außerdem mit Logik- oder I/O-Chiplets über eine Brückenzusammenschaltung verbunden sein. I/O- und Logik-Chiplets können über ein Zusammenschaltungs-Fabric kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für Logik oder I/O oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM und Stromzuleitungsschaltungen in eines oder mehrere aus den Basis-Chiplets 1196, 1198 gefertigt werden, die unter Verwendung einer anderen Prozesstechnologie im Vergleich zu den austauschbaren Chiplets 1195, die oben auf den Basis-Chiplets gestapelt sind, gefertigt werden können. Beispielsweise können die Basis-Chiplets 1196, 1198 unter Verwendung einer größeren Prozesstechnologie gefertigt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie hergestellt werden können. Eines oder mehrere aus den austauschbaren Chiplets 1195 können Speicher- (z. B. DRAM-) Chiplets sein. Unterschiedliche Speicherdichten können für die Baugruppe 1194 bedingt durch die Leistung und/oder Leistungsfähigkeit, die für das Produkt, das die Baugruppe 1194 verwendet, erzielt werden soll, ausgewählt werden. Zusätzlich können Logik-Chiplets mit einer unterschiedlichen Anzahl des Typs von Funktionseinheiten zur Zeit des Zusammenbaus basierend auf der Leistung und/oder Leistungsfähigkeit, die für das Produkt erzielt werden soll, ausgewählt werden. Zusätzlich können Chiplets, die IP-Logikkerne unterschiedlicher Typen beinhalten, in die Steckplätze für austauschbare Chiplets eingeführt werden, was Hybridprozessorkonstruktionen erlaubt, die IP-Blöcke unterschiedlicher Technologie mischen und anpassen können.
  • Beispielhafte integrierte Schaltung eines Einchipsystems
  • 12-13 stellen beispielhafte integrierte Schaltungen und zugeordnete Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein können, gemäß verschiedenen hier beschriebenen Ausführungsformen dar. Zusätzlich zu dem Dargestellten können andere Logik und Schaltungen enthalten sein, die zusätzliche Grafikprozessoren/Kerne, Peripherieschnittstellensteuereinheiten oder Allzweckprozessorprozessorkerne enthalten.
  • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte Einchipsystem-Schaltung 1200, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß einer Ausführungsform darstellt. Die beispielhafte integrierte Schaltung 1200 enthält einen oder mehrere Anwendungsprozessor(en) 1205 (z. B. CPUs), wenigstens einen Grafikprozessor 1210, und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 enthalten, von denen jeder ein modularer IP-Kern aus derselben oder mehreren unterschiedlichen Konstruktionsanlagen sein kann. Die integrierte Schaltung 1200 enthält Peripherie- oder Buslogik, die eine USB-Steuereinheit 1225, eine UART-Steuereinheit 1230, eine SPI/SDIO-Steuereinheit 1235 und eine I2S/I2C-Steuereinheit 1240 enthält. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 enthalten, die mit einer oder mehreren aus einer hochauflösenden Multimediaschnittstellen- (HDMI-) Steuereinheit 1250 und einer „Mobile Industry Processor Interface“- (MIPI-) Anzeigeschnittstelle 1255 gekoppelt ist. Ein Speicher kann durch ein Flash-Speicher-Teilsystem 1260 bereitgestellt sein, das Flash-Speicher und eine Flash-Speicher-Steuereinheit enthält. Eine Speicherschnittstelle kann über eine Speichersteuereinheit 1265 zum Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen enthalten zusätzlich eine eingebettete Sicherheits-Engine 1270.
  • 13A-13B sind Blockdiagramme, die beispielhafte Grafikprozessoren zum Gebrauch in einem SoC gemäß hier beschriebenen Ausführungsformen darstellen. 13A stellt einen beispielhaften Grafikprozessor 1310 einer integrierten Schaltung eines Einchipsystems, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß einer Ausführungsform dar. 13B stellt einen zusätzlichen beispielhaften Grafikprozessor 1340 einer integrierten Schaltung eines Einchipsystems, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß einer Ausführungsform dar. Der Grafikprozessor 1310 von 13A ist ein Beispiel eines Grafikprozessorkerns mit geringem Energieverbrauch. Der Grafikprozessor 1340 von 13B ist ein Beispiel eines Grafikprozessorkerns mit höherer Leistung. Jeder der Grafikprozessoren 1310, 1340 kann Varianten des Grafikprozessors 1210 von 12 sein.
  • Wie in 13A gezeigt ist, enthält der Grafikprozessor 1310 einen Vertex-Prozessor 1305 und einen oder mehrere Fragment-Prozessor(en) 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N-1 und 1315N). Der Grafikprozessor 1310 kann unterschiedliche Shader-Programme über separate Logik ausführen, so dass der Vertex-Prozessor 1305 optimiert ist, um Operationen für Vertex-Shader-Programme auszuführen, während der eine oder die mehreren Fragment-Prozessor(en) 1315A-1315N Fragment- (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 aus und erzeugt Grundelemente und Vertex-Daten. Der/die Fragment-Prozessor(en) 1315A-1315N verwenden die Grundelemente und Vertex-Daten, die durch den Vertex-Prozessor 1305 erzeugt werden, um einen Rahmenpuffer zu produzieren, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform ist/sind der/die Fragment-Prozessor(en) 1315A-1315N optimiert, um Fragment-Shader-Programme auszuführen, wie sie in der OpenGL-API vorgesehen sind, was verwendet werden kann, um ähnliche Operationen wie ein Pixel-Shader-Programm auszuführen, wie sie in der Direct-3D-API vorgesehen sind.
  • Der Grafikprozessor 1310 enthält zusätzlich eine oder mehrere Speichermanagementeinheiten (MMUs) 1320A-1320B, Cache(s) 1325A-1325B und Schaltungszusammenschaltungen 1330A-1330B. Die eine oder mehreren MMU(s) 1320A-1320B stellen die Abbildung virtueller auf physikalische Adressen für den Grafikprozessor 1310 bereit, der den Vertex-Prozessor 1305 und/oder die Fragment-Prozessor(en) 1315A-1315N enthält, die im Speicher gespeicherte Vertex- oder Bild/Texturdaten referenzieren können, zusätzlich zu Vertex- oder Bild/Texturdaten, die in dem einen oder den mehreren Cache(s) 1325A-1325B gespeichert sind. In einer Ausführungsform können die eine oder die mehreren MMU(s) 1320A-1320B mit anderen MMUs innerhalb des Systems synchronisiert sein, die eine oder mehrere MMUs enthalten, die dem einen oder den mehreren Anwendungsprozessor(en) 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 zugeordnet sind, so dass jeder Prozessor 1205-1220 an einem gemeinsam verwendeten oder einheitlichen virtuellen Speichersystem teilhaben kann. Die eine oder die mehreren Schaltungszusammenschaltung(en) 1330A-1330B ermöglichen dem Grafikprozessor 1310 eine Schnittstelle mit anderen IP-Kernen innerhalb des SoC, entweder über einen internen Bus des SoC oder über eine direkte Verbindung gemäß Ausführungsformen.
  • Wie in 13B gezeigt ist, enthält der Grafikprozessor 1340 die eine oder die mehreren MMU(s) 1320A-1320B, Caches 1325A-1325B und Schaltungszusammenschaltungen 1330A-1330B des Grafikprozessors 1310 von 13A. Der Grafikprozessor 1340 enthält einen oder mehrere Shader-Kern(e) 1355A-1355N z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N), die eine einheitliche Shader-Kernarchitektur bereitstellen, in der ein einzelner Kern oder Typ oder Kern alle Typen eines programmierbaren Shader-Codes ausführen kann, die Shader-Programmcode zum Implementieren von Vertex-Shader, Fragment-Shader und/oder Rechen-Shader enthalten. Die genaue Anzahl von Shader-Kernen kann unter Ausführungsformen und Implementierungen variieren. Zusätzlich enthält der Grafikprozessor 1340 einen kernübergreifenden Aufgabemanager 1345, der als ein Thread-Verteiler arbeitet, um Ausführungs-Threads zu einem oder mehreren Shader-Kernen 1355A-1355N zu verteilen, und eine Kachelungseinheit 1358, um Kachelungsoperationen für kachelbasiertes Rendern zu beschleunigen, wobei Render-Operationen für eine Szene im Bildraum unterteilt sind, beispielsweise um lokale räumliche Kohärenz innerhalb einer Szene zu auszunutzen oder die Verwendung interner Caches zu optimieren.
  • Management von partiellem Schreiben in einer Rechen-Engine mit mehreren Kacheln
  • Wie vorstehend beschrieben kann in einer gekachelten Grafikverarbeitungskonfiguration derselbe Walker für einen gegebenen Kontext über mehrere Kacheln „rundgesendet“ werden, um parallel ausgeführt zu werden, z. B. um die Leistung einer einzelnen Warteschlange in der Reihenfolge zu skalieren. Ein lokaler Cache-Speicher ist jedoch nicht notwendigerweise über Kacheln kohärent. In einigen Beispielen kann die Speicherkonsistenz über unterschiedliche Kacheln durch Leeren von L3-Caches an einem Synchronisationspunkt unterstützt werden: entweder aufgrund einer Schrankennachricht oder durch einen Pipe-Steuerbefehl nach der Beendigung eines Walkers.
  • Falls unterschiedliche Threads in dasselbe Adress-Byte im Cache ohne Synchronisieren schreiben, dann existiert eine „Rennen“-Zustand, und keine Reihenfolge von Cache-Schreibvorgängen ist garantiert. Falls jedoch unterschiedliche Threads (die potentiell auf unterschiedlichen Kacheln ablaufen) auf unterschiedliche Bytes schreiben, erfordert das Open-CL- (OCL-) Speichermodell, dass die Pro-Thread-Lese-Schreib-Reihenfolge auf dieselbe Byte-Adresse beachtet wird, ohne irgendeine Synchronisation. Beispielsweise wird die folgende Sequenz von Operationen betrachtet:
    • 1. Thread-0 in Kachel-0 schreibt in die Byte-Adresse A. Die
    • Schreibanforderung für Kachel L3 ist ein partielles Schreiben. Der L3-Cache
    • liest die gesamte Cache-Zeile aus dem Speicher, fügt das aktualisierte Byte A
    • ein und hält die gesamte Zeile in dem Cache in einem „Modifiziert“-Zustand.
    • 2. Unterdessen schreibt Thread 1 in Kachel-1 in die Byte-Adresse A+1, die in
    • dieselbe Cache-Zeile fällt wie A. Der Kachel-1-L3-Cache liest die gesamte Cache-Zeile aus dem Speicher, fügt das aktualisierte Byte A+1 ein und hält
    • die gesamte Zeile in dem Cache in einem „Modifiziert“-Zustand.
    • 3. Zeile A des Kachel-0-L3 wird geleert. Der Kachel-0-L3 wird die neue
    • Cache-Zeile in den Speicher schreiben.
    • 4. Zeile A des Kachel-1-L3 wird ebenfalls geleert. Jetzt wird die Kachel-1 die Thread-0-Daten (Adresse A) durch Leeren ihrer Cache-Zeile überschreiben.
  • Partielles Schreiben erzeugt außerdem Probleme mit der Speicherkomprimierung. Typischerweise ist jeder Speicherkomprimierungsblock pro Kachel und ist nicht mit anderen Kacheln synchronisiert. Komprimierung arbeitet auf einem 2-Cache-Zeilenblock, und jedes Byte des CCS (d. h. Komprimierungs-Metadaten) bildet auf 4 Cache-Zeilen von Daten ab. Da der kleinste adressierbare Speicher 1 Byte ist, wird das Problem des partiellen Schreibens auf einen 256-Byte-Block (d. h. 4 Cache-Zeilen) erweitert, wenn Komprimieren aktiviert ist.
  • 14 stellt ein Datenverarbeitungssystem, das ausgelegt sein kann, um Management von partiellem Schreiben zu unterstützen, gemäß hier beschriebenen Ausführungsformen dar. Bezug nehmend auf 14 kann in einigen Beispielen ein Datenverarbeitungssystem 1400 als ein heterogenes Verarbeitungssystem implementiert sein, das einen Komplex 1410 einer zentralen Verarbeitungseinheit (CPU-Komplex), einen einheitlichen Speicher 1430 und eine Allzweckgrafikverarbeitungseinheit (GPGPU) 1440 aufweist. Der CPU-Komplex 1410 umfasst einen oder mehrere Prozessoren 1412, die ein Betriebssystem 1414 ausführen. Eine oder mehrere Spiele- und/oder Medien-Anwendungen 1416 können auf der durch das Betriebssystem 1414, das auf dem Prozessor 1412 abläuft, bereitgestellten Umgebung ablaufen. Der CPU-Komplex 1410 kann ferner ein Grafikvorrichtungslaufwerk 1420 umfassen, das einen Verteiler 1424 ausführt. Der Prozessor 1412 kann als irgendeiner aus den hier beschriebenen Prozessoren implementiert sein.
  • Die GPGPU 1440 enthält mehrere Rechenblöcke 1444A-1444N, die eine oder mehrere Instanzen der hier beschriebenen Ausführungslogik enthalten. Die GPGPU 1440 enthält außerdem eine Gruppe von Registern 1445, Cache-Speicher 1447 und ein Stromversorgungs- und Leistungsmodul 1446, die als gemeinsam verwendete Betriebsmittel für die Rechenblöcke 1444A-1444N verwendet werden können. In einer Ausführungsform enthalten die Register 1445 direkt und indirekt zugängliche Register, wobei die indirekt zugänglichen Register zum Gebrauch in Matrixrechenoperationen optimiert sein können. Das Stromversorgungs- und Leistungsmodul 1446 kann konfiguriert sein, die Stromversorgung und Taktfrequenzen für die Rechenblöcke 1444A-1444N anzupassen, um Gate-Leerlauf-Komponenten innerhalb der Rechenblöcke 1444A-1444N unter schweren Arbeitslasten mit Energie zu versorgen. Die GPGPU 1440 enthält lokalen Speicher 1448 der GPGPU, der physikalische Speichermodule ist, die eine Grafikkarte oder ein Mehrchipmodul mit der GPGPU 1440 gemeinsam verwenden.
  • Der vereinheitlichte Speicher 1430 repräsentiert einen einheitlichen Adressenraum, auf den durch den Prozessor 1412 und die GPGPU 1440 zugegriffen werden kann. Der einheitliche Speicher enthält sowohl Systemspeicher 1432 als auch GPGPU-Speicher 1438. In einigen Ausführungsformen enthält der GPGPU-Speicher 1438 den lokalen GPGPU-Speicher 1434 innerhalb der GPGPU 1440 und kann außerdem einen Teil des oder den gesamten Systemspeicher 1432 enthalten. Beispielsweise kann kompilierter Code 1434B, der in dem Systemspeicher 1412 gespeichert ist, auch in den GPGPU-Speicher 1438 zum Zugriff durch die GPGPU 1440 abgebildet werden. In einer Ausführungsform kann eine Laufzeitbibliothek 1436 in dem Systemspeicher 1432 die Kompilierung und/oder Ausführung von kompiliertem Code 1434B unterstützen. Der Prozessor 1412 kann Befehle für einen Compiler 1435, die in dem Systemspeicher 1432 gespeichert sind, ausführen. Der Compiler 1435 kann Quellcode 1434A in kompilierten Code 1434B zur Ausführung durch den Prozessor 1412 und/oder die GPGPU 1440 kompilieren. In einer Ausführungsform ist der Compiler 1435 ein Shader-Compiler zum Kompilieren von Shader-Programmen spezifisch für die Ausführung durch die GPGPU 1440 oder kann ihn enthalten.
  • 15 ist eine schematische Darstellung einer Architektur 1500 einer Mehrkachel-GPGPU 1440 gemäß einigen Ausführungsformen. Bezug nehmend auf 15 können in einigen Beispielen Verarbeitungsbetriebsmittel einer GPGPU 1440 in eine Anzahl von Kacheln unterteilt sein, die einen gemeinsamen Speicher mit hoher Bandbreite gemeinsam verwenden. Die GPGPU 1440, die in 15 dargestellt ist, umfasst eine erste Kachel (Kachel 0) 1510, die eine Ausführungseinheit 1512, einen Ebene-3-Cache und eine Cache-Steuereinheit (CCU) 1516 umfasst, und eine zweite Kachel (Kachel 1) 1520, die eine Ausführungseinheit 1522, einen Ebene-3-Cache 1524 und eine Cache-Steuereinheit (CCU) 1526 umfasst. Die jeweiligen Kacheln 1510, 1520 sind mit einem Speicher 1530 mit hoher Bandbreite 1530, der von den Kacheln 1510, 1520 gemeinsam verwendet wird, kommunikationstechnisch gekoppelt. Es ist zu verstehen, dass die GPGPU 1440 mehr als zwei Kacheln umfassen kann.
  • In einigen Beispielen sind die L3-Caches 1514, 1524 über die Kacheln 1510, 1520 nicht kohärent, und es gibt keine Byte-„Enables“. Somit kann jede Kachel 1510, 1520 die Cache-Zeilen der L3-Caches 1514, 1524 unabhängig lesen/modifizieren/schreiben. Ferner kann das Leeren des L3-Cache ein Überschreiben für andere modifizierte Daten in der L3-Cache-Zeile verursachen. Zusätzlich verursacht Komprimierung in dem L3-Cache ein ähnliches Problem, wenn auch mit einer gröberen Granularität (z. B. 256 Bytes).
  • 16 ist eine schematische Darstellung eines Auftretens 1600 von fälschlichem gemeinsamem Verwenden gemäß hier beschriebenen Ausführungsformen. Bezug nehmend auf 16 wird der in 16 dargestellte Kernel-Code, falls er auf zwei separaten Kacheln abläuft, zu Schreiboperationen in zwei unterschiedlichen Adressen auf derselben Cache-Zeile führen und dadurch zu einer Situation führen, in der die Cache-Zeile fälschlicherweise von zwei Prozessen, die auf unterschiedlichen Kacheln ablaufen gemeinsam verwendet wird.
  • Es sind hier Techniken beschrieben, um diese und andere Probleme zu adressieren. In einigen Beispielen können diese Probleme adressiert werden durch Implementieren von Techniken, die entweder Cache- Operationen für partielles Schreiben in L3-Caches umgehen oder Cache-Schreiben als Cache-Operationen mit durchgängigem Schreiben ausführen, teilweise abhängig von dem Zustand der Cache-Zeile(n) in den Schreiboperationen. Allgemein muss in einigen Beispielen eine Cache-Steuereinheit, die einen lokalen Cache in einer Kachel managt, ein Protokoll für das Management von partiellem Schreiben implementieren, das dazu dient, eine partielle Schreiboperation, die sich auf eine Cache-Zeile in dem lokalen Cache richtet, zu empfangen, wobei die partielle Schreiboperation Schreibdaten umfasst, die Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache zu schreiben, wenn die Cache-Zeile in einem modifizierten Zustand ist, und die Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu dem Speicher mit hoher Bandbreite weiterzuleiten, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist.
  • Auf der Anwendungsebene kann eine Anwendung eine Warteschlange pro Vorrichtung zeigen und steuern, welche Operationen auf spezifischen Betriebsmitteln ausgeführt werden. Das Programmiermodell kann Lese/Schreib-Zugriff auf dieselben Betriebsmittel über unterschiedliche Warteschlangen einschränken, und irgendein gemeinsames Verwenden von Daten kann ein explizites Leeren des L3-Cache erfordern. Das Zwischenspeichern von partiellem Schreiben kann ermöglicht werden, falls eine GPGPU in einer Einzelkachelkonfiguration arbeitet, falls ein Walker zu nur einer einzigen Kachel verteilt wird, oder falls die Anwendung zusichert, dass kein Risiko für fälschliches gemeinsames Verwenden für eine spezielle Oberfläche vorhanden ist. Außerdem können Komprimierungsoperationen auf einer selektiven Basis abgeschaltet werden, entweder durch eine einheitliche Speichervorrichtung (UMD) wie z. B. den einheitlichen Speicher 1430 oder durch eine Anwendung.
  • 17, 18 und 19 sind Ablaufpläne, die Operationen in einem Verfahren zum Unterstützen des Managements von partiellem Schreiben gemäß hier beschriebenen Ausführungsformen darstellen. In einigen Beispielen implementieren die jeweiligen Cache-Steuereinheiten 1516, 1526 ein Protokoll für das Management von partiellem Schreiben zum Managen partieller Schreiboperationen direkt zu ihrem jeweiligen lokalen Cache 1514, 1524. Bezug nehmend auf 17 wird bei Operation 1710 eine partielle Schreiboperation in einer Kachel empfangen. Falls bei Operation 1715 die partielle Schreiboperation zu einem Cache-Fehlschlag führt, geht die Steuerung zu 1725 über, und die Daten, die der partiellen Schreiboperation zugeordnet sind, werden in den gemeinsam verwendeten Speicher 1530 mit hoher Bandbreite geschrieben. Im Gegensatz dazu geht, falls bei Operation 1725 die partielle Schreiboperation der Daten nicht zu einem Cache-Fehlschlag führt, dann die Steuerung zu Operation 1720 über.
  • Falls bei Operation 1720 die Cache-Zeile, auf die sich die partielle Schreiboperation richtet, in einem exklusiven (E) Zustand oder einem gemeinsam verwendeten (S) Zustand ist, geht dann die Steuerung zu 1725 über, und die Daten, die der partiellen Schreiboperation zugeordnet sind, werden in den gemeinsam verwendeten Speicher 1530 mit hoher Bandbreite geschrieben. Im Gegensatz dazu geht, falls bei Operation 1725 die Cache-Zeile, auf die sich die partielle Schreiboperation richtet, nicht in einem exklusiven (E) Zustand oder einem gemeinsam verwendeten (S) Zustand ist, dann die Steuerung zu Operation 1730 über, und die Daten, die der partielle Schreiboperation zugeordnet sind, werden in die Cache-Zeile geschrieben, vorausgesetzt dass die Cache-Zeile in einem modifizierten (M) Zustand ist. In einigen Beispielen werden die Daten, die der partiellen Schreiboperation zugeordnet sind, unter Verwendung einer Operation mit durchgängigem Schreiben in den Cache geschrieben, wenn die Cache-Zeile in einem exklusiven Zustand ist.
  • In einigen Beispielen können die Cache-Steuereinheiten 1516, 1526 konfiguriert sein, das Protokoll für das Management von partiellem Schreiben unter speziellen Bedingungen zu deaktivieren. Bezug nehmend auf 18 kann bei Operation 1810 die UMD ein Deaktivierungs-Flag für partielles Schreiben einstellen, wenn der Walker-Befehl nicht über mehrere Kacheln rundgesendet wird. In einigen Beispielen wird der Rechenzustand ohne Pipeline (z. B. programmiert durch einen Befehl STATE_COMPUTE_MODE) ein Bit verwenden, um das Verhalten für partielles Schreiben zu überschreiben (SingleTileMode). Bei Operation 1815 wird der Walker-Befehl in einer Cache-Steuereinheit 1516, 1526 empfangen. Falls bei Operation 1820 dieses Bit eingestellt ist, dann geht die Steuerung zu Operation 1825 über, und die mit Bezug auf 17 beschriebenen Protokolle für das Management von partiellem Schreiben werden deaktiviert. In diesem Fall wird die Cache-Steuereinheit 1516, 1526 partielle Schreiboperation in L3 im M-Zustand zwischenspeichern. In einigen Beispielen kann die UMD dieses Bit einstellen, wenn der Walker nicht über mehrere Kacheln rundgesendet wird, d. h. der Walker läuft nur in einer einzigen Kachel, und somit ist kein Risiko für fälschliches gemeinsames Verwenden zwischen Kacheln vorhanden. Im Gegensatz dazu geht, falls bei Operation 1820 dieses Bit nicht eingestellt ist, dann die Steuerung zu Operation 1830 über, und die mit Bezug auf 17 beschriebenen Protokolle für das Management von partiellem Schreiben werden implementiert.
  • In einigen Beispielen kann eine Software-Anwendung ein Flag einstellen, um die Protokolle für das Management von partiellem Schreiben zu deaktivieren. Bezug nehmend auf 19 kann bei Operation 1910 eine Software-Anwendung ein Flag zum Deaktivieren des partiellen Schreibens einstellen. In einigen Beispielen kann eine Anwendung die Fähigkeit aufweisen zu spezifizieren, ob eine Oberfläche kein fälschliches gemeinsames Verwenden mit einer Auflösung von 256B Blöcken außerhalb einer Thread-Gruppe aufweist. Das kann zur Zeit der Betriebsmittelzuweisung stattfinden (z. B. clCreateBuffer() - ein neues Flag wird in diesen API-Aufrufen hinzugefügt). In einigen Beispielen kann ein Oberflächenzustandsattribut (disableMultiGpuPartialWr) implementiert sein, das die UMD einstellen wird, wenn das Flag durch einen API-Aufruf einer Anwendung zugesichert ist. Beispielsweise wird für zustandslose Nachrichten ein Befehl STATE_BASE_ADDRESS ein neues Attribut aufweisen, um das anzugeben. Wenn dieses Attribut eingestellt ist, wird der Daten-Port (HDC) das L3-Zwischenspeichern partieller Schreibvorgänge aktivieren.
  • Bei Operation 1915 wird der Walker-Befehl in einer Cache-Steuereinheit 1516, 1526 empfangen. Falls bei Operation 1920 dieses Bit eingestellt ist, dann geht die Steuerung zu Operation 1925 über, und die mit Bezug auf 17 beschriebenen Protokolle für das Management von partiellem Schreiben werden deaktiviert. In diesem Fall wird die Cache-Steuereinheit 1516, 1526 partielle Schreiboperation in L3 im M-Zustand zwischenspeichern. In einigen Beispielen kann die UMD dieses Bit einstellen, wenn der Walker nicht über mehrere Kacheln rundgesendet wird, d. h. der Walker läuft nur in einer einzigen Kachel, und somit ist kein Risiko für fälschliches gemeinsames Verwenden zwischen Kacheln vorhanden. Im Gegensatz dazu geht, falls bei Operation 1920 dieses Bit nicht eingestellt ist, dann die Steuerung zu Operation 1930 über, und die mit Bezug auf 17 beschriebenen Protokolle für das Management von partiellem Schreiben werden implementiert.
  • 20 ist ein Blockdiagramm einer Berechnungsvorrichtung 2000, die einen Grafikprozessor 2004 enthält, gemäß einer Ausführungsform. Die Berechnungsvorrichtung 2000 kann eine Berechnungsvorrichtung sein, wie sie hier beschrieben ist, wie z. B. das Datenverarbeitungssystem 100 wie in 1. Die Berechnungsvorrichtung 2000 kann außerdem eine Kommunikationsvorrichtung wie z. B. eine Set-Top-Box (z. B. Internetbasierte Kabelfernseh-Set-Top-Boxes usw.), auf dem globalen Positionierungssystem (GPS) basierende Vorrichtungen usw. sein oder darin enthalten sein. Die Berechnungsvorrichtung 2000 kann außerdem mobile Berechnungsvorrichtungen wie z. B. Mobiltelefone, Smartphones, persönliche digitale Assistenten (PDAs), Tablet-Computer, Laptop-Computer, E-Lesegeräte, intelligente Fernsehgeräte, Fernsehplattformen, am Körper tragbare Vorrichtungen (z. B. Brillen, Armbanduhren, Armbänder, Smartcards, Schmuck, Bekleidungsgegenstände usw.), Media-Player usw. sein oder darin enthalten sein. Beispielsweise enthält die Berechnungsvorrichtung 2000 in einer Ausführungsform eine mobile Berechnungsvorrichtung, die eine integrierte Schaltung („IC“) einsetzt, wie z. B. ein Einchipsystem („SoC“ oder „SOC“), die verschiedene Hardware- und/oder Software-Komponenten der Berechnungsvorrichtung 2000 auf einem einzigen Chip integriert.
  • Die Berechnungsvorrichtung 2000 enthält einen Grafikprozessor 2004. Der Grafikprozessor 2004 repräsentiert irgendeinen hier beschriebenen Grafikprozessor. Der Grafikprozessor enthält eine oder mehrere Grafik-Engine(s), Grafikprozessorkerne und andere Grafikausführungsbetriebsmittel wie hier beschrieben. Solche Grafikausführungsbetriebsmittel können in den Formen präsentiert sein, die, ohne jedoch darauf beschränkt zu sein, Ausführungseinheiten, Shader-Engines, Fragment-Prozessoren, Vertex-Prozessoren, Streaming-Multiprozessoren, Grafikprozessor-Cluster oder irgendeine Zusammenstellung von Berechnungsbetriebsmitteln, die für die Verarbeitung von Grafik - . und Bildbetriebsmitteln geeignet sind, enthalten.
  • In einer Ausführungsform enthält der Grafikprozessor 2004 einen Cache 2014, der ein einzelner Cache sein kann oder in mehrere Segmente des Cache-Speichers unterteilte sein kann, die, ohne jedoch darauf beschränkt zu sein, L1-, L2-, L3 oder L4-Caches, Render-Caches, Tiefen-Caches, Sampler-Caches und/oder Shader-Einheit-Caches enthalten. In einer Ausführungsform enthält der Grafikprozessor 2004 einen Scheduler 2024, der eine Variante der Scheduler-Einheit 1622 von 16 oder eine andere hier beschriebene Scheduler-Logik sein kann. Der Grafikprozessor 2004 kann zusätzlich einen Befehls-Streamer 2026, einen Thread-Verteiler 2034 und Sperr/Synchronisationslogik 2036 enthalten, zusätzlich zu einer GPGPU-Engine 2044, die Hardware-Logik zum Ausführen von Grafikverarbeitung und Allzweckbefehlsausführung wie hier beschrieben enthält.
  • Wie dargestellt kann in einer Ausführungsform und zusätzlich zu dem Grafikprozessor 2004 die Berechnungsvorrichtung 2000 ferner irgendeine Anzahl und Typ von Hardware-Komponenten und/oder Software-Komponenten enthalten, die, ohne jedoch darauf beschränkt zu sein, einen Anwendungsprozessor 2006, Speicher 2008 und Eingabe/Ausgabe- (I/O-) Quellen 2010 enthalten. Der Anwendungsprozessor 2006 kann mit einer Hardware-Grafik-Pipeline zusammenwirken, wie mit Bezug auf 3 dargestellt ist, um die Grafik-Pipeline-Funktionalität gemeinsam zu verwenden. Verarbeitete Daten werden in einem Puffer in der Hardware-Grafik-Pipeline gespeichert, und Zustandsinformationen werden in dem Speicher 2008 gespeichert. Die resultierenden Daten können zu einer Anzeigesteuereinheit zur Ausgabe über eine Anzeigevorrichtung wie z. B. die Anzeigevorrichtung 323 von 3 übertragen werden. Die Anzeigevorrichtung kann von verschiedenen Typen sein, wie z. B. Kathodenstrahlröhre (CRT), Dünnschichttransistor (TFT), Flüssigkristallanzeige (LCD), Anordnung aus organischen Leuchtdioden (OLED) usw., und kann konfiguriert sein, Informationen für einen Anwender über eine grafische Anwenderschnittstelle anzuzeigen.
  • Der Anwendungsprozessor 2006 kann einen oder Prozessoren enthalten, wie z. B. Prozessor(en) 102 von 1, und kann die zentrale Verarbeitungseinheit (CPU) sein, die wenigstens teilweise verwendet wird, um ein Betriebssystem (OS) 2002 für die Berechnungsvorrichtung 2000 auszuführen. Das OS 2002 kann als eine Schnittstelle zwischen Hardware und/oder physikalischen Betriebsmitteln der Computervorrichtung 2000 und einem oder mehreren Anwendern dienen. Das OS 2002 kann Grafiktreiberlogik 2022, wie z. B. den Anwendermodus-Grafiktreiber 1026 und/oder Kernelmodus-Grafiktreiber 1029 von 10, enthalten.
  • Es ist angedacht, dass in einigen Ausführungsformen der Grafikprozessor 2004 als Teil des Anwendungsprozessors 2006 (wie z. B. als Teil einer physikalischen CPU-Baugruppe) existieren kann, wobei in diesem Fall wenigstens ein Abschnitt des Speichers 2008 von dem Anwendungsprozessor 2006 und dem Grafikprozessor 2004 gemeinsam verwendet werden kann, obwohl wenigstens ein Abschnitt des Speichers 2008 exklusiv für den Grafikprozessor 2004 sein kann oder der Grafikprozessor 2004 einen separaten Speichervorrat aufweisen kann. Der Speicher 2008 kann einen im Voraus zugewiesenen Bereich eines Puffers (z. B. Rahmenpuffer) umfassen; es ist jedoch durch einen normalen Fachmann zu verstehen, dass die Ausführungsformen nicht so eingeschränkt sind und dass irgendein Speicher, der für die untere Grafik-Pipeline zugänglich ist, verwendet werden kann. Der Speicher 2008 kann verschiedene Arten von Direktzugriffsspeicher (RAM) (z. B. SDRAM, SRAM usw.) enthalten, der eine Anwendung umfasst, die von dem Grafikprozessor 2004 Gebrauch macht, um einen Desktop oder eine 3D-Grafikszene zu rendern. Eine Speichersteuereinheit kann verwendet werden, um auf Daten in dem Speicher 2008 zuzugreifen und die Daten zu dem Grafikprozessor 2004 zur Grafik-Pipeline-Verarbeitung weiterzuleiten. Der Speicher 2008 kann für andere Komponenten innerhalb der Berechnungsvorrichtung 2000 zur Verfügung gestellt werden. Beispielsweise können irgendwelche Daten (z. B. eingegebene Grafikdaten), die von verschiedenen I/O-Quellen 2010 der Berechnungsvorrichtung 2000 empfangen werden, temporär in den Speicher 2008 in Warteschlangen eingereiht werden, bevor auf ihnen durch einen oder mehrere Prozessor(en) (z. B. den Anwendungsprozessor 2006) in der Implementierung eines Software-Programms oder einer Anwendung gearbeitet wird. Ähnlich werden Daten, für die ein Software-Programm bestimmt, dass sie von der Berechnungsvorrichtung 2000 zu einer äußeren Entität über eine der Schnittstellen des Berechnungssystems gesendet werden sollten oder in ein internes Speicherelement gespeichert werden sollen, häufig temporär in dem Speicher 2008 in eine Warteschlange eingereiht, bevor sie gesendet oder gespeichert werden.
  • Die I/O-Quellen können Vorrichtungen wie z. B. berührungssensitive Bildschirme, berührungssensitive Tafeln, Touch-Pads, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbindungselemente, Netzvorrichtungen oder dergleichen enthalten. Zusätzlich können die I/O-Quellen 2010 eine oder mehrere I/O-Vorrichtungen enthalten, die zum Übertragen von Daten zu und/oder von der Berechnungsvorrichtung 2000 (z. B. einen Netzadapter); oder für einen großen nichtflüchtigen Speicher innerhalb der Berechnungsvorrichtung 2000 (z. B. ein Festplattenlaufwerk) implementiert sind. Anwendereingabevorrichtungen, die alphanumerische und andere Tasten enthalten, können verwendet werden, um Informationen und Befehlsauswahlen zu dem Grafikprozessor 2004 zu kommunizieren. Ein weiterer Typ einer Anwendereingabevorrichtung ist Cursor-Steuerung, wie z. B. eine Maus, ein Trackball, ein berührungssensitiver Bildschirm, ein Touchpad oder Cursor-Richtungstasten, um Richtungsinformationen und Befehlsauswahlen zu der GPU zu kommunizieren und die Bewegung des Cursors auf der Anzeigevorrichtung zu steuern. Kamera- und MikrofonAnordnungen der Computervorrichtung 2000 können eingesetzt werden, um Gesten zu beobachten, Audio und Video aufzunehmen und visuelle und Audio-Befehle zu empfangen und zu senden.
  • I/O-Quellen 2010, die als Netzschnittstellen konfiguriert sind, können Zugang zu einem Netz bereitstellen, wie z. B. einem LAN, einem Weitbereichsnetz (WAN), einem Regionalnetz (MAN), einem persönlichen Netz (PAN), Bluetooth, einem Cloud-Netz, einem Zellular- oder Mobilfunknetz (z. B. 3. Generation (3G), 4. Generation (4G) usw.) einem Intranet, dem Internet usw. Netzschnittstelle(n) können beispielsweise eine drahtlose Netzschnittstelle enthalten, die eine oder mehrere Antenne(n) aufweist. Netzschnittstelle(n) können außerdem beispielsweise eine drahtgebundene Netzschnittstelle zum Kommunizieren mit entfernten Vorrichtungen über ein Netzkabel, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Lichtleiterkabel, ein serielles Kabel oder ein paralleles Kabel sein kann, enthalten.
  • Netzschnittstelle(n) können Zugang zu einem LAN bereitstellen, beispielsweise dadurch, dass sie mit den IEEE 802.11-Standards konform sind, und/oder die drahtlose Netzschnittstelle kann Zugang zu einem persönlichen Netz bereitstellen, beispielsweise dadurch, dass sie mit Bluetooth-Standards konform ist. Andere drahtlose Netzschnittstellen und/oder Protokolle, die frühere und nachfolgende Versionen der Standards enthalten, können ebenfalls unterstützt werden. Zusätzlich zu oder anstelle der Kommunikation über die Drahtlos-LAN-Standards können Netzschnittstelle(n) drahtlose Kommunikation unter Verwendung beispielsweise von Zeitmultiplex- (TDMA-) Protokollen, Protokollen des globalen Systems für Mobilkommunikation (GSM), Codemultiplex- (CDMA-) Protokollen und/oder irgendeinem anderen Typ drahtloser Kommunikationsprotokolle bereitstellen.
  • Es ist zu verstehen, dass ein weniger oder höher ausgestattetes System als das vorstehend beschriebene Beispiel für spezielle Implementierungen bevorzugt sein kann. Deshalb kann die Konfiguration der Berechnungsvorrichtung 2000 von Implementierung zu Implementierung variieren, abhängig von zahlreichen Faktoren wie z. B. Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Gegebenheiten. Beispiele enthalten (ohne Einschränkung) eine mobile Vorrichtung, einen persönlichen digitalen Assistenten, eine mobile Berechnungsvorrichtung, ein Smartphone, ein Mobiltelefon, ein Handgerät, einen Einweg-Pager, einen Zweiwege-Pager, eine Nachrichtenübermittlungsvorrichtung, einen Computer, einen Personalcomputer (PC), einen Desktop-Computer, einen Laptop-Computer, einen Notebook-Computer, einen tragbaren Computer, einen Tablet-Computer, einen Server, eine Server-Anordnung oder Server-Farm, einen Webserver, einen Netz-Server, einen Internet-Server, eine Workstation, einen Mini-Computer, einen Mainframe-Computer, einen Supercomputer, eine Netzeinrichtung, eine Web-Einrichtung, ein verteiltes Berechnungssystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Unterhaltungselektronik, programmierbare Unterhaltungselektronik, Fernsehgerät, digitales Fernsehgerät, Set-Top-Box, drahtlosen Zugangspunkt, Basisstation, Teilnehmerstation, Mobilteilnehmerzentrum, Funknetzsteuereinheit, Router, Hub, Gateway, Bridge, Switch, Maschine oder Kombinationen daraus.
  • Die folgenden Bestimmungen und/oder Beispiele gehören zu spezifischen Ausführungsformen oder Beispielen dafür. Eigenheiten in den Beispielen können irgendwo in einer oder mehreren Ausführungsformen verwendet sein. Die verschiedenen Merkmale der unterschiedlichen Ausführungsformen oder Beispiele können auf verschiedene Arten kombiniert werden, wobei einige Merkmale enthalten sind und andere ausgeschlossen sind, um zu einer Vielzahl unterschiedlicher Anwendungen zu passen. Beispiele können einen Gegenstand wie z. B. ein Verfahren, Mittel zum Ausführen von Aktionen des Verfahrens, wenigstens ein maschinenlesbares Medium, das Anweisungen enthält, die dann, wenn sie durch eine Maschine ausgeführt werden, die Maschine veranlassen, Aktionen des Verfahrens oder einer Einrichtung oder eines Systems gemäß Ausführungsformen und Beispielen, die hier beschrieben sind, auszuführen, enthalten. Verschiedene Komponenten können ein Mittel zum Ausführen der beschriebenen Operationen und Funktionen sein.
  • Beispiel 1 ist ein Allzweckgrafikprozessor, der mehrere Kacheln, wobei jede Kachel aus den mehreren Kacheln wenigstens eine Ausführungseinheit, einen lokalen Cache und eine Cache-Steuereinheit umfasst; und einen Speicher mit hoher Bandbreite, der mit den mehreren Kacheln kommunikationstechnisch gekoppelt ist, umfasst, wobei der Speicher mit hoher Bandbreite von den mehreren Kacheln gemeinsam verwendet wird; wobei die Cache-Steuereinheit dazu dient, ein Protokoll für das Management von partiellem Schreiben zu implementieren, um eine partielle Schreiboperation zu empfangen, die für eine Cache-Zeile in dem lokalen Cache bestimmt ist, wobei die partielle Schreiboperation Schreibdaten umfasst; die Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache zu schreiben, wenn die Cache-Zeile in einem modifizierten Zustand ist; und die Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu dem Speicher mit hoher Bandbreite weiterzuleiten, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist.
  • Beispiel 2 kann den Gegenstand von Beispiel 1 umfassen, wobei die Cache-Steuereinheit dazu dient, eine Cache-Operation mit durchgängigem Schreiben zu implementieren, wenn die Cache-Zeile in einem exklusiven Zustand ist.
  • Beispiel 3 kann den Gegenstand eines der Beispiele 1-2 umfassen, wobei die Cache-Steuereinheit dazu dient, das Protokoll für das Management von partiellem Schreiben in Reaktion auf das Detektieren eines Deaktivierungszustands-Flags für partielles Schreiben zu deaktivieren.
  • Beispiel 4 kann den Gegenstand eines der Beispiele 1-3 umfassen, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch einen Rechenzustandsbefehl eingestellt wird.
  • Beispiel 5 kann den Gegenstand eines der Beispiele 1-4 umfassen, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch eine Anwendung über eine Eingabe in eine Anwendungsprogrammierschnittstelle (API) eingestellt wird.
  • Beispiel 6 kann den Gegenstand eines der Beispiele 1-5 umfassen, wobei die Steuereinheit dazu dient, das Protokoll für das Management von partiellem Schreiben für 256-Byte-Blöcke des Cache in Reaktion auf das Deaktivierungs-Flag für partielles Schreiben zu deaktivieren.
  • Beispiel 7 kann den Gegenstand eines der Beispiele 1-5 umfassen, wobei die Steuereinheit dazu dient, Komprimierungsoperationen für den lokalen Cache zu deaktivieren.
  • Beispiel 8 ist ein Allzweckgrafikverarbeitungssystem, das eine Speichervorrichtung und einen mit der Speichervorrichtung kommunikationstechnisch gekoppelten Allzweckgrafikprozessor, der mehrere Kacheln umfasst, wobei jede Kachel aus den mehreren Kacheln wenigstens eine Ausführungseinheit, einen lokalen Cache und eine Cache-Steuereinheit umfasst; und einen Speicher mit hoher Bandbreite, der mit den mehreren Kacheln kommunikationstechnisch gekoppelt ist, umfasst, wobei der Speicher mit hoher Bandbreite von den mehreren Kacheln gemeinsam verwendet wird; wobei die Cache-Steuereinheit dazu dient, ein Protokoll für das Management von partiellem Schreiben zu implementieren, um eine partielle Schreiboperation zu empfangen, die für eine Cache-Zeile in dem lokalen Cache bestimmt ist, wobei die partielle Schreiboperation Schreibdaten umfasst; die Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache zu schreiben, wenn die Cache-Zeile in einem modifizierten Zustand ist; und die Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu dem Speicher mit hoher Bandbreite weiterzuleiten, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist.
  • Beispiel 9 kann den Gegenstand von Beispiel 9 umfassen, wobei die Cache-Steuereinheit dazu dient, eine Cache-Operation mit durchgängigem Schreiben zu implementieren, wenn die Cache-Zeile in einem exklusiven Zustand ist.
  • Beispiel 10 kann den Gegenstand eines der Beispiele 8-9 umfassen, wobei die Cache-Steuereinheit dazu dient ,das Protokoll für das Management von partiellem Schreiben in Reaktion auf das Detektieren eines Deaktivierungszustands-Flags für partielles Schreiben zu deaktivieren.
  • Beispiel 11 kann den Gegenstand eines der Beispiele 8-10 umfassen, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch einen Rechenzustandsbefehl eingestellt wird.
  • Beispiel 12 kann den Gegenstand eines der Beispiele 8-11 umfassen, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch eine Anwendung über eine Eingabe in eine Anwendungsprogrammierschnittstelle (API) eingestellt wird.
  • Beispiel 13 kann den Gegenstand eines der Beispiele 8-12 umfassen, wobei die Steuereinheit dazu dient, das Protokoll für das Management von partiellem Schreiben für 256-Byte-Blöcke des Cache in Reaktion auf das Deaktivierungs-Flag für partielles Schreiben zu deaktivieren.
  • Beispiel 14 kann den Gegenstand eines der Beispiele 8-13 umfassen, wobei die Steuereinheit dazu dient, Komprimierungsoperationen für den lokalen Cache zu deaktivieren.
  • Beispiel 15 ist ein computerimplementiertes Verfahren, das Empfangen, in einer Cache-Steuereinheit einer Kachel in einem Grafikprozessor, der mehrere Kacheln umfasst, einer partiellen Schreiboperation, die auf eine Cache-Zeile in einem lokalen Cache der Kachel gerichtet ist, wobei die partielle Schreiboperation Schreibdaten umfasst; Schreiben der Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache, wenn die Cache-Zeile in einem modifizierten Zustand ist; und Weiterleiten der Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu einem mit den mehreren Kacheln kommunikationstechnisch gekoppelten Speicher mit hoher Bandbreite, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist, umfasst.
  • Beispiel 16 kann den Gegenstand von Beispiel 15 umfassen, wobei die Operationen zusätzlich das Implementieren einer Cache-Operation mit durchgängigem Schreiben, wenn die Cache-Zeile in einem exklusiven Zustand ist, umfassen.
  • Beispiel 17 kann den Gegenstand eines der Beispiele 15-16 umfassen, wobei die Operationen zusätzlich das Deaktivieren des Protokolls für das Management von partiellem Schreiben in Reaktion auf das Detektieren eines Deaktivierungszustands-Flags für partielles Schreiben umfassen.
  • Beispiel 18 kann den Gegenstand eines der Beispiele 15-17 umfassen, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch einen Rechenzustandsbefehl eingestellt wird.
  • Beispiel 19 kann den Gegenstand eines der Beispiele 15-18 umfassen, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch eine Anwendung über eine Eingabe in eine Anwendungsprogrammierschnittstelle (API) eingestellt wird.
  • Beispiel 20 kann den Gegenstand eines der Beispiele 15-19 umfassen, das ferner das Deaktivieren des Protokolls für das Management von partiellem Schreiben für 256-Byte-Blöcke des Cache in Reaktion auf das Deaktivierungs-Flag für partielles Schreiben umfasst.
  • Beispiel 21 kann den Gegenstand eines der Beispiele 15-20 umfassen, das ferner das Deaktivieren von Komprimierungsoperationen für den lokalen Cache umfasst.
  • Ausführungsformen können beispielsweise als ein Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien enthalten kann, die darauf gespeichert durch eine Maschine ausführbare Befehle aufweisen, die dann, wenn sie durch eine oder mehrere Maschinen wie z. B. einen Computer, ein Netz aus Computern oder andere elektronische Vorrichtungen ausgeführt werden, dazu führen können, dass die eine oder die mehreren Maschinen Operationen in Übereinstimmung mit hier beschriebenen Ausführungsformen ausführen. Ein maschinenlesbares Medium kann, ohne jedoch darauf beschränkt zu sein, Floppy-Disketten, optische Platten, CD-ROMs (Compact Disc-Festwertspeicher) und magneto-optische Platten, ROMs, RAMs, EPROMs (löschbare programmierbare Festwertspeicher), EEPROMs (elektrisch löschbare programmierbare Festwertspeicher), magnetische oder optische Karten, Flash-Speicher oder einen anderen Typ von Medien / maschinenlesbarem Medium, der zum Speichern von durch eine Maschine ausführbaren Anweisungen geeignet ist, enthalten.
  • Außerdem können Ausführungsformen als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. einem Server) zu einem anfordernden Computer (z. B. einem Client) mit Hilfe eines oder mehrerer Datensignale, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium verwirklicht oder durch sie/es moduliert sind, über eine Kommunikationsverbindung (z. B. eine Modem- und/oder Netzverbindung) übertragen wird.
  • Fachleute werden aus der vorstehenden Beschreibung erkennen, dass die umfassenden Techniken der Ausführungsformen in einer Vielzahl von Formen implementiert sein können. Deshalb sollte, obwohl die Ausführungsformen in Verbindung mit speziellen Beispielen dafür beschrieben worden sind, der tatsächliche Schutzbereich der Ausführungsformen nicht so eingeschränkt sein, da andere Modifikationen für den qualifizierten Praktiker bei Studieren der Zeichnungen, der Spezifikation und der folgenden Ansprüche offensichtlich werden.

Claims (21)

  1. Allzweckgrafikprozessor, der Folgendes umfasst: mehrere Kacheln, wobei jede Kachel aus den mehreren Kacheln wenigstens eine Ausführungseinheit, einen lokalen Cache und eine Cache-Steuereinheit umfasst; und einen Speicher mit hoher Bandbreite, der mit den mehreren Kacheln kommunikationstechnisch gekoppelt ist, wobei der Speicher mit hoher Bandbreite von den mehreren Kacheln gemeinsam verwendet wird; wobei die Cache-Steuereinheit dazu dient, ein Protokoll für das Management von partiellem Schreiben zu implementieren zum: Empfangen einer partiellen Schreiboperation, die auf eine Cache-Zeile in dem lokalen Cache gerichtet ist, wobei die partielle Schreiboperation Schreibdaten umfasst; Schreiben der Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache, wenn die Cache-Zeile in einem modifizierten Zustand ist; und Weiterleiten der Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu dem Speicher mit hoher Bandbreite, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist.
  2. Einrichtung nach Anspruch 1, wobei die Cache-Steuereinheit dient zum: Implementieren einer Cache-Operation mit durchgängigem Schreiben, wenn die Cache-Zeile in einem exklusiven Zustand ist.
  3. Einrichtung nach Anspruch 2, wobei die Cache-Steuereinheit dient zum: Deaktivieren des Protokolls für das Management von partiellem Schreiben in Reaktion auf das Detektieren eines Deaktivierungszustands-Flags für partielles Schreiben.
  4. Einrichtung nach Anspruch 3, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch einen Rechenzustandsbefehl eingestellt wird.
  5. Einrichtung nach Anspruch 3, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch eine Anwendung über eine Eingabe in eine Anwendungsprogrammierschnittstelle (API) eingestellt wird.
  6. Einrichtung nach Anspruch 5, wobei die Steuereinheit dient zum: Deaktivieren des Protokolls für das Management von partiellem Schreiben für 256-Byte-Blöcke des Cache in Reaktion auf das Deaktivierungs-Flag für partielles Schreiben.
  7. Einrichtung nach Anspruch 6, wobei die Steuereinheit dient zum: Deaktivieren von Komprimierungsoperationen für den lokalen Cache.
  8. Allzweckgrafikverarbeitungssystem, das Folgendes umfasst: eine Speichervorrichtung und einen Allzweckgrafikprozessor, der mit der Speichervorrichtung kommunikationstechnisch gekoppelt ist, der Folgendes umfasst: mehrere Kacheln, wobei jede Kachel aus den mehreren Kacheln wenigstens eine Ausführungseinheit, einen lokalen Cache und eine Cache-Steuereinheit umfasst; und einen Speicher mit hoher Bandbreite, der mit den mehreren Kacheln kommunikationstechnisch gekoppelt ist, wobei der Speicher mit hoher Bandbreite von den mehreren Kacheln gemeinsam verwendet wird; wobei die Cache-Steuereinheit dazu dient, ein Protokoll für das Management von partiellem Schreiben zu implementieren zum: Empfangen einer partiellen Schreiboperation, die auf eine Cache-Zeile in dem lokalen Cache gerichtet ist, wobei die partielle Schreiboperation Schreibdaten umfasst; Schreiben der Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache, wenn die Cache-Zeile in einem modifizierten Zustand ist; und Weiterleiten der Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu dem Speicher mit hoher Bandbreite, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist.
  9. Allzweckgrafikverarbeitungssystem nach Anspruch 8, wobei die Cache-Steuereinheit dient zum: Implementieren einer Cache-Operation mit durchgängigem Schreiben, wenn die Cache-Zeile in einem exklusiven Zustand ist.
  10. Allzweckgrafikverarbeitungssystem nach Anspruch 9, wobei die Cache-Steuereinheit dient zum: Deaktivieren des Protokolls für das Management von partiellem Schreiben in Reaktion auf das Detektieren eines Deaktivierungszustands-Flags für partielles Schreiben.
  11. Allzweckgrafikverarbeitungssystem nach Anspruch 10, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch einen Rechenzustandsbefehl eingestellt wird.
  12. Allzweckgrafikverarbeitungssystem nach Anspruch 10, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch eine Anwendung über eine Eingabe in eine Anwendungsprogrammierschnittstelle (API) eingestellt wird.
  13. Allzweckgrafikverarbeitungssystem nach Anspruch 12, wobei die Steuereinheit dient zum: Deaktivieren des Protokolls für das Management von partiellem Schreiben für 256-Byte-Blöcke des Cache in Reaktion auf das Deaktivierungs-Flag für partielles Schreiben.
  14. Allzweckgrafikverarbeitungssystem nach Anspruch 13, wobei die Steuereinheit dient zum: Deaktivieren von Komprimierungsoperationen für den lokalen Cache.
  15. Computerimplementiertes Verfahren, das Folgendes umfasst: Empfangen, in einer Cache-Steuereinheit einer Kachel in einem Grafikprozessor, der mehrere Kacheln umfasst, einer partiellen Schreiboperation, die auf eine Cache-Zeile in einem lokalen Cache der Kachel gerichtet ist, wobei die partielle Schreiboperation Schreibdaten umfasst; Schreiben der Daten, die der partiellen Schreiboperation zugeordnet sind, in den lokalen Cache, wenn die Cache-Zeile in einem modifizierten Zustand ist; und Weiterleiten der Schreibdaten, die der partiellen Schreiboperation zugeordnet sind, zu einem mit den mehreren Kacheln kommunikationstechnisch gekoppelten Speicher mit hoher Bandbreite, wenn die partielle Schreiboperation einen Cache-Fehlschlag auslöst oder wenn die Cache-Zeile in einem exklusiven Zustand oder einem gemeinsam verwendeten Zustand ist.
  16. Computerimplementiertes Verfahren nach Anspruch 15, das ferner Folgendes umfasst: Implementieren einer Cache-Operation mit durchgängigem Schreiben, wenn die Cache-Zeile in einem exklusiven Zustand ist.
  17. Computerimplementiertes Verfahren nach Anspruch 16, das ferner Folgendes umfasst: Deaktivieren des Protokolls für das Management von partiellem Schreiben in Reaktion auf das Detektieren eines Deaktivierungszustands-Flags für partielles Schreiben.
  18. Computerimplementiertes Verfahren nach Anspruch 17, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch einen Rechenzustandsbefehl eingestellt wird.
  19. Computerimplementiertes Verfahren nach Anspruch 18, wobei das Deaktivierungszustands-Flag für partielles Schreiben durch eine Anwendung über eine Eingabe in eine Anwendungsprogrammierschnittstelle (API) eingestellt wird.
  20. Computerimplementiertes Verfahren nach Anspruch 19, das ferner Folgendes umfasst: Deaktivieren des Protokolls für das Management von partiellem Schreiben für 256-Byte-Blöcke des Cache in Reaktion auf das Deaktivierungs-Flag für partielles Schreiben.
  21. Computerimplementiertes Verfahren nach Anspruch 19, das ferner Folgendes umfasst: Deaktivieren von Komprimierungsoperationen für den lokalen Cache.
DE102020115578.6A 2019-06-28 2020-06-12 Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln Pending DE102020115578A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/457,088 US10802967B1 (en) 2019-06-28 2019-06-28 Partial write management in a multi-tiled compute engine
US16/457,088 2019-06-28

Publications (1)

Publication Number Publication Date
DE102020115578A1 true DE102020115578A1 (de) 2020-12-31

Family

ID=72750321

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020115578.6A Pending DE102020115578A1 (de) 2019-06-28 2020-06-12 Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln

Country Status (3)

Country Link
US (2) US10802967B1 (de)
CN (1) CN112233010A (de)
DE (1) DE102020115578A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11301384B2 (en) 2019-06-28 2022-04-12 Intel Corporation Partial write management in a multi-tiled compute engine

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11797451B1 (en) * 2021-10-15 2023-10-24 Meta Platforms Technologies, Llc Dynamic memory management in mixed mode cache and shared memory systems
GB2614069A (en) * 2021-12-21 2023-06-28 Advanced Risc Mach Ltd Cache systems
US11941742B2 (en) * 2022-06-23 2024-03-26 Apple Inc. Tiled processor communication fabric

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7200623B2 (en) * 1998-11-24 2007-04-03 Oracle International Corp. Methods to perform disk writes in a distributed shared disk system needing consistency across failures
KR101815180B1 (ko) * 2012-10-22 2018-01-04 인텔 코포레이션 고성능 인터커넥트 코히어런스 프로토콜
US9529532B2 (en) * 2014-03-07 2016-12-27 Cavium, Inc. Method and apparatus for memory allocation in a multi-node system
US20170123979A1 (en) * 2015-10-28 2017-05-04 Intel Corporation Systems, devices, and methods for handling partial cache misses
US20180011792A1 (en) * 2016-07-06 2018-01-11 Intel Corporation Method and Apparatus for Shared Virtual Memory to Manage Data Coherency in a Heterogeneous Processing System
CN109661656B (zh) * 2016-09-30 2023-10-03 英特尔公司 用于利用条件所有权请求的智能存储操作的方法和装置
US10282296B2 (en) * 2016-12-12 2019-05-07 Intel Corporation Zeroing a cache line
US10956332B2 (en) * 2017-11-01 2021-03-23 Advanced Micro Devices, Inc. Retaining cache entries of a processor core during a powered-down state
US11151006B2 (en) * 2018-07-02 2021-10-19 Samsung Electronics Co., Ltd. HBM RAS cache architecture
US10564972B1 (en) * 2018-09-28 2020-02-18 Intel Corporation Apparatus and method for efficiently reclaiming demoted cache lines
US10802967B1 (en) 2019-06-28 2020-10-13 Intel Corporation Partial write management in a multi-tiled compute engine

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11301384B2 (en) 2019-06-28 2022-04-12 Intel Corporation Partial write management in a multi-tiled compute engine

Also Published As

Publication number Publication date
US11301384B2 (en) 2022-04-12
US20210056028A1 (en) 2021-02-25
CN112233010A (zh) 2021-01-15
US10802967B1 (en) 2020-10-13

Similar Documents

Publication Publication Date Title
DE102020120372A1 (de) Programmierbare wandlungshardware
DE112018005527T5 (de) Automatisches aufwecken von leistungsdomänen fürgrafikkonfigurationsanforderungen
DE102020115578A1 (de) Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102019117495A1 (de) System und verfahren zur 3d-blob-klassifizierung und -übertragung
DE102019101118A1 (de) Anweisung und Logik für systolisches Skalarprodukt mit Akkumulation
DE102020106002A1 (de) Dynamischer lastausgleich von rechenanlagen unter unterschiedlichen rechenkontexten
DE102020130880A1 (de) Mechanismus zur partitionierung eines geteilten lokalen speichers
DE112018007634T5 (de) Vorrichtung und verfahren für eine virtualisierte anzeige
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020129625A1 (de) Seitentabellen-mapping-mechanismus
DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
DE112018003999T5 (de) Verfahren und Vorrichtung für effiziente Verarbeitung von abgeleiteten einheitlichen Werten in einem Grafikprozessor
DE102020104651A1 (de) Arbeitsspeicherkomprimierungs-Hashmechanismus
DE102020113400A1 (de) Registerteilungsmechanismus
DE102019123443A1 (de) Mechanismus zum gemeinsamen Benutzen von Registern
DE102019120922A1 (de) Vorrichtung und verfahren für multifrequenz-vertex-shadinghintergrund
DE102020130847A1 (de) Dynamischer aktualisierungsmechanismus für konstanten
DE102020133275A1 (de) Compiler-unterstützte registerdatei-schreibverringerung
DE102020126551A1 (de) Paralleler dekomprimierungsmechanismus
DE102020113789A1 (de) Asynchroner ausführungsmechanismus
DE102020132088A1 (de) Berechnung effizienter kanalübergreifender operationen in parallelrechenmaschinen mit systolischen arrays