DE102020131293A1 - Einrichtung und verfahren zur multi-adapter-kodierung - Google Patents

Einrichtung und verfahren zur multi-adapter-kodierung Download PDF

Info

Publication number
DE102020131293A1
DE102020131293A1 DE102020131293.8A DE102020131293A DE102020131293A1 DE 102020131293 A1 DE102020131293 A1 DE 102020131293A1 DE 102020131293 A DE102020131293 A DE 102020131293A DE 102020131293 A1 DE102020131293 A1 DE 102020131293A1
Authority
DE
Germany
Prior art keywords
graphics processor
processor
graphics
forecast
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
DE102020131293.8A
Other languages
English (en)
Inventor
Changliang Wang
Dmitry Ermilov
Penne Lee
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 DE102020131293A1 publication Critical patent/DE102020131293A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1423Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display
    • G06F3/1431Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display using a single graphics controller
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/003Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
    • G09G5/005Adapting incoming signals to the display format of the display terminal
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/149Data rate or code amount at the encoder output by estimating the code amount by means of a model, e.g. mathematical model or statistical model
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/177Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a group of pictures [GOP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/40Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video transcoding, i.e. partial or full decoding of a coded input stream followed by re-encoding of the decoded output stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/439Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using cascaded computational arrangements for performing a single operation, e.g. filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/04Changes in size, position or resolution of an image
    • G09G2340/0407Resolution change, inclusive of the use of different resolutions for different screen areas
    • G09G2340/0435Change or adaptation of the frame rate of the video stream
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/02Graphics controller able to handle multiple formats, e.g. input or output formats
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/06Use of more than one graphics processor to process data before displaying to one or more screens
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/10Display system comprising arrangements, such as a coprocessor, specific for motion video images

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Computer Graphics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Algebra (AREA)
  • Human Computer Interaction (AREA)
  • Image Generation (AREA)

Abstract

Einrichtung und Verfahren für eine Multi-Adapter- und/oder Multi-Durchlauf-Kodierung an dualen Grafikprozessoren. Eine Ausführungsform eines Prozessors umfasst beispielsweise: einen Zentralprozessor, der auf einem ersten Halbleiterplättchen integriert ist, wobei der Zentralprozessor eine Vielzahl von Kernen umfasst, um Anweisungen auszuführen und Daten zu verarbeiten; einen ersten Grafikprozessor, der auf dem ersten Halbleiterplättchen integriert ist, wobei der erste Grafikprozessor eine Medienverarbeitungsschaltung umfasst, um eine oder mehrere vorläufige Vorausberechnungsoperationen an Videoinhalten durchzuführen, um eine Vorausberechnungsstatistik zu generieren; eine Verbindung, um den ersten Grafikprozessor mit einem Vorausberechnungspuffer zu koppeln, wobei der erste Grafikprozessor die Vorausberechnungsstatistik über die Verbindung an den Vorausberechnungspuffer übertragen soll; wobei die Vorausberechnungsstatistik von einem zweiten Grafikprozessor verwendet werden soll, um die Videoinhalte zu kodieren, um kodiertes Video zu generieren.

Description

  • Hintergrund
  • Gebiet der Erfindung
  • Diese Erfindung betrifft allgemein das Gebiet der Grafikprozessoren. Insbesondere betrifft die Erfindung eine Einrichtung und ein Verfahren zur Multi-Adapter-Kodierung.
  • Beschreibung des Standes der Technik
  • Eine Medienkodierung von hoher Qualität ist in vielen wichtigen Client- und Serveranwendungsfällen, wie etwa Transkodierung, Videobearbeitung, Miracast, Übertragung von Videospielinhalten (engl. game streaming) und digitaler Videoaufzeichnung von Spielen (digital video recording - DVR) zu einer wichtigen Funktion geworden. Eine Möglichkeit, die Qualität des kodierten Datenstroms zu verbessern, ist das Aktivieren von Look Ahead (LA, etwa: Vorausberechnung), welches ein erster Kodierungsdurchlauf ist, der die Komplexität, relative Bewegung und Abhängigkeiten eines Einzelbilds vor dem Kodieren schätzt. Aus diesem Grund wird LA manchmal als 2-Durchlauf-Kodierung bezeichnet. Die Tiefe der Vorausberechnungswarteschlange kann von einem Einzelbild bis zu vielen (z. B. 60 Einzelbildern) reichen. Diese Informationen können verwendet werden, um dem Kodierer zugeführt zu werden, um eine bessere Genauigkeit und Qualität der Ratensteuerung zu ergeben.
  • Jedoch sind Verwendungen, wie etwa Miracast und die Übertragung von Videospielinhalten sehr latenzsensitive Anwendungen, bei denen die Latenzstrafe eines zusätzlichen Look-Ahead-Durchlaufs nicht erwünscht ist.
  • Figurenliste
  • Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden ausführlichen Beschreibung in Verbindung mit den folgenden Zeichnungen erhalten werden, in denen:
    • 1 ein Blockschaltplan einer Ausführungsform eines Computersystems mit einem Prozessor, der einen oder mehrere Prozessorkerne und Grafikprozessoren aufweist, ist;
    • 2A-D Blockschaltpläne einer Ausführungsform eines Prozessors sind, der einen oder mehrere Prozessorkerne, eine integrierte Speichersteuerung und einen integrierten Grafikprozessor aufweist;
    • 3A-3C Blockschaltpläne einer Ausführungsform eines Grafikprozessors sind, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, in den eine Vielzahl von Prozessorkernen integriert ist;
    • 4 ein Blockschaltplan einer Ausführungsform einer grafikverarbeitenden Maschine für einen Grafikprozessor ist;
    • 5A-B Blockschaltpläne einer anderen Ausführungsform eines Grafikprozessors sind;
    • 6 ein Blockschaltplan einer Verarbeitungsstrangausführungslogik, die eine Anordnung von Verarbeitungselementen beinhaltet, ist;
    • 7 ein Anweisungsformat für eine Grafikprozessor-Ausführungseinheit gemäß einer Ausführungsform darstellt;
    • 8 ein Blockschaltplan einer anderen Ausführungsform eines Grafikprozessors ist, die eine Grafikpipeline, eine Medienpipeline, eine Anzeigemaschine, Verarbeitungsstrangausführungslogik und eine Bildsyntheseausgabepipeline beinhaltet;
    • 9A ein Blockschaltplan ist, der ein Grafikprozessor-Befehlsformat gemäß einer Ausführungsform darstellt;
    • 9B ein Blockschaltplan ist, der eine Grafikprozessor-Befehlssequenz gemäß einer Ausführungsform darstellt;
    • 10 eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform darstellt;
    • 11A-D ein beispielhaftes IP-Core-Entwicklungssystem darstellen, das verwendet werden kann, um einen integrierten Schaltkreis zum Durchführen von Operationen gemäß einer Ausführungsform zu fertigen;
    • 12 einen beispielhaften integrierten Schaltkreis auf einem Ein-Chip-System darstellt, der unter Verwenden von einem oder mehreren IP-Kernen gemäß einer Ausführungsform erstellt werden kann;
    • 13 einen beispielhaften Grafikprozessor eines integrierten Schaltkreises auf einem Ein-Chip-System darstellt, der unter Verwenden von einem oder mehreren IP-Kernen erstellt werden kann;
    • 14 einen zusätzlichen beispielhaften Grafikprozessor eines integrierten Schaltkreises auf einem Ein-Chip-System darstellt, der unter Verwenden von einem oder mehreren IP-Kernen erstellt werden kann;
    • 15 eine Ausführungsform eines Grafikverarbeitungssystems darstellt, das sowohl eine integrierte GPU (iGPU) und eine diskrete GPU (dGPU) verwendet;
    • 16 eine Ausführungsform darstellt, bei der Dekodieren und Kodieren durchgeführt wird, um Statistiken zu generieren;
    • 17A-C Ausführungsformen mit unterschiedlichen Vorausberechnungstiefen (engl. lookahead depths) darstellen;
    • 18A-B Verarbeitungsoperationen von Einzelbildern darstellen, die unter der dGPU und der iGPU verteilt werden;
    • 19 eine Ausführungsform darstellt, bei der GOP-Kodierung unter einer iGPU und einer dGPU verteilt ist; und
    • 20 eine verteilte Kodierung von Einzelbildern unter Verwenden einer iGPU und einer dGPU darstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten zu Erläuterungszwecken dargelegt, um ein tiefgreifendes Verständnis der nachstehend beschriebenen Ausführungsformen der Erfindung bereitzustellen. Es wird jedoch einem Fachmann ersichtlich, dass die Ausführungsformen der Erfindung ohne manche dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind bekannte Strukturen und Vorrichtungen in Form von Blockschaltplänen gezeigt, um ein Verschleiern der zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung zu vermeiden.
  • BEISPIELHAFTE GRAFIKPROZESSOR-ARCHITEKTUREN UND DATENTYPEN
  • Systemüberblick
  • 1 ist ein Blockschaltplan eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann bei einem Desktopsystem mit einem einzelnen Prozessor, einem Workstationsystem mit mehreren Prozessoren oder einem Serversystem verwendet werden, das eine große Anzahl von Prozessoren 102 oder Prozessorkernen 107 aufweist. Bei einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in einen integrierten Schaltkreis auf einem Ein-Chip-System(system-ona-chip - SoC) aufgenommen ist, zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen, wie etwa in IoT(Internet-of-things - Internet der Dinge)-Vorrichtungen mit drahtgebundener oder drahtloser Konnektivität zu einem lokalen oder einem Weitverkehrsnetzwerk.
  • Bei einer Ausführungsform kann das System 100 Folgendes beinhalten, mit Folgendem gekoppelt werden oder in Folgendem integriert sein: eine serverbasierte Spieleplattform; eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole; eine mobile Spielekonsole, eine tragbare Spielekonsole oder eine Online-Spielekonsole. Bei manchen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Computervorrichtung oder einer mobilen, mit dem Internet verbundenen Vorrichtung, wie etwa einem Laptop mit einer niedrigen internen Speicherkapazität. Das Verarbeitungssystem 100 kann auch Folgendes beinhalten, sich mit Folgendem koppeln oder in Folgendes integriert sein: eine tragbare Vorrichtung, wie etwa eine tragbare Smart-Armbanduhrvorrichtung; Datenbrillen oder intelligente Bekleidung (smart clothes), die mit AR(augmented reality - erweiterte Realität)- oder VR(virtual reality - virtuelle Realität)-Funktionen verbessert wurden, um visuelle, akustische oder taktile Ausgaben bereitzustellen, um visuelle, akustische oder taktile Erlebnisse aus der Realität zu ergänzen oder Text, Audio, Grafik, Video, Hologramme oder Video oder taktile Rückmeldungen anderweitig bereitzustellen; eine andere AR(augmented reality - erweiterte Realität)-Vorrichtung; oder eine andere VR(virtual reality -virtuelle Realität)-Vorrichtung. Bei manchen Ausführungsformen beinhaltet das Verarbeitungssystem 100 ein Fernseh- oder ein Beistellgerät oder ist Teil davon. Bei einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug, wie etwa einen Bus, eine Sattelzugmaschine, einen PKW, ein Motorrad oder ein Elektromotorrad, ein Flugzeug oder ein Segelflugzeug (oder jede Kombination davon) beinhalten, damit gekoppelt sein oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die um das Fahrzeug herum erfasste Umgebung zu verarbeiten.
  • Bei manchen Ausführungsformen beinhaltet der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Anweisungen, die, wenn sie ausgeführt werden, Operationen für System- oder Benutzersoftware durchführen. Bei manchen Ausführungsformen ist mindestens einer aus dem einen oder den mehreren Prozessorkernen 107 konfiguriert zum Verarbeiten eines spezifischen Anweisungssatzes 109. Bei manchen Ausführungsformen kann der Anweisungssatz 109 Rechnen mit komplexem Anweisungssatz (Complex Instruction Set Computing - CISC), Rechnen mit reduziertem Anweisungssatz (Reduced Instruction Set Computing - RISC) oder Rechnen über ein sehr langes Anweisungswort (Very Long Instruction Word - VLIW) ermöglichen. Ein oder mehrere Prozessorkerne 107 können jeweils einen anderen Anweisungssatz 109 verarbeiten, der Anweisungen zum Erleichtern der Emulation von anderen Anweisungssätzen beinhalten kann. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen, wie etwa einen digitalen Signalprozessor (digital signal processor - DSP), beinhalten.
  • Bei manchen Ausführungsformen beinhaltet der Prozessor 102 einen Cachespeicher 104. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen von internen Caches aufweisen. Bei manchen Ausführungsformen wird der Cachespeicher von verschiedenen Komponenten des Prozessors 102 gemeinsam genutzt. Bei manchen Ausführungsformen verwendet der Prozessor 102 auch einen externen Cache (z. B. einen Cache der Ebene 3 (L3) oder einen Cache der letzten Ebene (LLC)) (nicht gezeigt), den sich Prozessorkerne 107 unter Verwenden bekannter Cachekohärenztechniken teilen können. Außerdem kann eine Registerdatei 106 in dem Prozessor 102 beinhaltet sein und unterschiedliche Typen von Registern zum Speichern von unterschiedlichen Typen von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister) beinhalten. Einige Register können Allzweckregister sein, während andere Register für den Aufbau des Prozessors 102 spezifisch sein können.
  • Bei manchen Ausführungsformen sind ein oder mehrere Prozessor(en) 102 mit einem oder mehreren Schnittstellenbus(sen) 110 gekoppelt, um Kommunikationssignale, wie etwa Adress-, Daten- oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten in dem System 100 zu übertragen. Der Schnittstellenbus 110 kann bei einer Ausführungsform ein Prozessorbus, wie etwa eine Version des DMI(Direct Media Interface - Direkte Medienschnittstelle)-Busses, sein. Jedoch sind Prozessorbusse nicht auf den DMI-Bus beschränkt und können einen oder mehrere Busse zur Verbindung von Peripheriegeräten (Peripheral Component Interconnect, z. B. PCI, PCI express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. Bei einer Ausführungsform beinhaltet/n der/die Prozessor(en) 102 eine integrierte Speichersteuerung 116 und einen Platform Controller Hub 130. Die Speichersteuerung 116 vereinfacht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Platform Controller Hub (PCH) 130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 120 kann eine dynamische Direktzugriffsspeicher(dynamic random-access Speicher - DRAM)-Vorrichtung, eine statische Direktzugriffsspeicher(static random-access Speicher - SRAM)-Vorrichtung, Flash-Speichervorrichtung, Phasenwechsel-Speichervorrichtung oder eine andere Speichervorrichtung sein, die eine geeignete Leistung aufweist, um als Prozessspeicher zu dienen. Bei einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 arbeiten, um Daten 122 und Anweisungen 121 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 116 ist auch 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 durchzuführen. Bei manchen Ausführungsformen können Grafik-, Medien- und oder Rechenoperationen von einem Beschleuniger 112 unterstützt werden, der ein Co-Prozessor ist, der konfiguriert sein kann, um einen spezialisierten Satz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Bei einer Ausführungsform ist der Beschleuniger 112 beispielsweise ein Matrixmultiplikationsbeschleuniger, der zum Optimieren von maschinellem Lernen oder Rechenoperationen verwendet wird. Bei einer Ausführungsform ist der Beschleuniger 112 ein Strahlenverfolgungs(ray tracing)-Beschleuniger, der zum Durchführen von Strahlenverfolgungsoperationen im Zusammenspiel mit dem Grafikprozessor 108 verwendet wird. Bei einer Ausführungsform kann ein externer Beschleuniger 119 an Stelle von oder im Zusammenspiel mit dem Beschleuniger 112 verwendet werden.
  • Bei manchen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem/den Prozessor(en) 102 verbunden werden. Die Anzeigevorrichtung 111 kann eins oder mehrere aus einer internen Anzeigevorrichtung, wie bei einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angebracht ist, sein. Bei einer Ausführungsform kann die Anzeigevorrichtung 111 eine Datenbrille (head mounted display - HMD), wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in VR(virtual reality - virtuelle Realität)-Anwendungen oder AR(augmented reality - erweiterte Realität)-Anwendungen, sein.
  • Bei manchen Ausführungsformen ermöglicht der Platform Controller Hub 130 Peripheriegeräten, sich mit der Speichervorrichtung 120 und dem Prozessor 102 über einen Hochgeschwindigkeits-E/A-Bus zu verbinden. Die E/A-Peripheriegeräte beinhalten unter anderem eine Audiosteuerung 146, eine Netzwerksteuerung 134, eine Firmware-Schnittstelle 128, einen drahtlosen Transceiver 126, berührungsempfindliche Sensoren 125, eine Datenspeichervorrichtung 124 (z. B. nichtflüchtigen Speicher, flüchtigen Speicher, Festplattenlaufwerk, Flash-Speicher, NAND, 3D NAND, 3D XPoint usw.). Die Datenspeichervorrichtung 124 kann sich über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriegerätebus, wie etwa einen Peripheral Component Interconnect-Bus (z. B. PCI, PCI express) verbinden. Die berührungsempfindlichen Sensoren 125 können berührungsempfindliche Bildschirmsensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. Der drahtlose Transceiver 126 kann ein Wi-Fi-Transceiver, ein Bluetooth-Transceiver oder ein Mobilfunknetz-Transceiver sein, wie etwa ein 3G-, 4G-, 5G- oder Long-Term-Evolution (LTE)-Transceiver. Die Firmware-Schnittstelle 128 ermöglicht eine Kommunikation mit System-Firmware und kann beispielsweise eine Vereinheitlichte Erweiterbare Firmware-Schnittstelle (unified extensible firmware interface - UEFI) sein. Die Netzwerksteuerung 134 kann eine Netzwerkverbindung zu einem drahtgebundenen Netzwerk ermöglichen. Bei manchen Ausführungsformen wird eine Hochleistungs-Netzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 110 gekoppelt. Die Audiosteuerung 146 ist bei einer Ausführungsform eine mehrkanalige hochauflösende Audiosteuerung. Bei einer Ausführungsform beinhaltet das System 100 eine optionale Altsystem-E/A-Steuerung 140 zum Koppeln von Altsystemvorrichtungen (z. B. Personal System 2 - PS/2) mit dem System. Der Platform Controller Hub 130 kann sich auch mit einer oder mehreren Eingabevorrichtungen, die sich über Universal Serial Bus(USB)-Steuerungen 142 verbinden, wie etwa Kombinationen aus Tastatur und Maus 143, eine Kamera 144 oder andere USB-Eingabevorrichtungen, verbinden.
  • Es versteht sich, dass das gezeigte System 100 beispielhaft und nicht beschränkend ist, da andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz der Speichersteuerung 116 und des Platform Controller Hub 130 in einen diskreten externen Grafikprozessor integriert werden, wie etwa den externen Grafikprozessor 118. Bei einer Ausführungsform können der Platform Controller Hub 130 und/oder die Speichersteuerung 116 extern von dem einen oder den mehreren Prozessor(en) 102 sein. Das System 100 kann beispielsweise eine/n externe/n Speichersteuerung 116 und Platform Controller Hub 130 beinhalten, die als Memory Controller Hub und ein Controller Hub für Peripheriegeräte (peripheral controller hub) in einem System-Chipsatz konfiguriert sein können, der in Kommunikation mit dem/den Prozessor(en) 102 steht.
  • Beispielsweise können Leiterplatten („Sleds“) verwendet werden, auf welche Komponenten, wie etwa CPUs, Speicher und andere Komponenten, gesetzt sind, für eine erhöhte thermische Leistung konzipiert sind. In einigen Beispielen befinden sich Verarbeitungskomponenten, wie etwa die Prozessoren, auf einer Oberseite eines Sleds, während sich nahe Speicher, wie etwa DIMMs, auf einer Unterseite des Sleds befinden. Im Ergebnis des verbesserten Luftstroms, der durch diese Ausgestaltung bereitgestellt ist, können die Komponenten bei höheren Frequenzen und Leistungsniveaus arbeiten als bei typischen Systemen, wodurch die Leistung erhöht wird. Ferner sind die Sleds konfiguriert, um blind mit Strom- und Datenkommunikationskabeln in einem Rack zusammensteckbar zu sein, wodurch sich ihr Vermögen, schnell entfernt, aktualisiert, neu installiert und/oder ersetzt zu werden, erhöht. Ähnlich dazu sind einzelne Komponenten, die sich auf den Sleds befinden, wie etwa Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, konfiguriert, um aufgrund ihres erhöhten Abstands zueinander leicht aktualisiert zu werden. Bei der veranschaulichenden Ausführungsform beinhalten die Komponenten außerdem Hardware-Nachweismerkmale, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzige Netzwerkarchitektur („Fabric“) nutzen, die mehrere andere Netzwerkarchitekturen, einschließlich Ethernet und Omni-Path, unterstützt. Die Sleds können mit Switches über Glasfasern gekoppelt werden, die eine höhere Bandbreite und geringere Latenz als die übliche Verkabelung mit verdrehten Adernpaaren bereitstellen, (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.). Aufgrund der hohen Bandbreite sowie den Verbindungen und der Netzwerkarchitektur mit geringer Latenz kann das Datenzentrum bei Verwendung Ressourcen bündeln, wie etwa Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Beschleuniger für neuronale Netze und/oder künstliche Intelligenz usw.), sowie Datenspeicherlaufwerke, die physikalisch untergliedert sind, und sie an Rechenressourcen (z. B. Prozessoren) je nach Bedarf bereitstellen, wodurch den Rechenressourcen ermöglicht wird, auf die gebündelten Ressourcen zuzugreifen, als wären diese lokal.
  • Eine Stromversorgung oder -quelle kann dem System 100 oder jedem/r hier beschriebenen Komponente oder System Spannung und/oder Strom bereitstellen. Bei einem Beispiel beinhaltet die Stromversorgung einen AC/DC(Wechselstrom in Gleichstrom)-Adapter zum Einstecken in eine Netzsteckdose. Eine derartige AC-Energie kann aus einer erneuerbaren Energiequelle (z. B. Solarstrom) stammen. In einem Beispiel beinhaltet die Stromquelle eine Gleichstromquelle, wie etwa einen externen AC/DC-Wandler. In einem Beispiel beinhaltet die Stromquelle oder die Stromversorgung drahtlose Auflade-Hardware zum Aufladen über die Nähe zu einem Ladefeld. In einem Beispiel kann die Stromquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Stromversorgung, eine Solarstromversorgung oder eine Quelle auf Brennstoffzellenbasis beinhalten.
  • 2A-2D stellen Rechensysteme und Grafikprozessoren dar, die durch hier beschriebene Ausführungsformen bereitgestellt sind. Die Elemente der 2A-2D, welche die gleiche Bezugszahl (oder - bezeichnung) wie Elemente einer beliebigen anderen Figur hier aufweisen, können auf ähnliche Weise operieren oder funktionieren, wie an anderer Stelle hier beschrieben ist, sind jedoch nicht darauf beschränkt.
  • 2A ist ein Blockschaltplan einer Ausführungsform eines Prozessors 200, der einen oder mehrere Prozessorkerne 202A-202N, eine integrierte Speichersteuerung 214 und einen integrierten Grafikprozessor 208 aufweist. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich eines zusätzlichen Kerns 202N aufweisen, die durch die Rahmen in gestrichelten Linien dargestellt sind. Jeder der Prozessorkerne 202A-202N beinhaltet eine oder mehrere interne Cacheeinheiten 204A-204N. Bei manchen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cacheeinheiten 206. Die internen Cacheeinheiten 204A-204N und die gemeinsam genutzten Cacheeinheiten 206 stellen eine Cachespeicher-Hierarchie in dem Prozessor 200 dar. Die Cachespeicher-Hierarchie kann mindestens eine Anweisungs- und Datencacheebene in jedem Prozessorkern und eine oder mehrere Ebenen von gemeinsam genutzten Mittelebenencaches, wie etwa der Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder anderen Cacheebenen, beinhalten, wobei die höchste Cacheebene vor dem externen Speicher als der LLC klassifiziert ist. Bei manchen Ausführungsformen erhält Cachekohärenzlogik die Kohärenz zwischen den verschiedenen Cacheeinheiten 206 und 204A-204N.
  • Bei manchen Ausführungsformen kann der Prozessor 200 auch einen Satz von einer oder mehreren Bussteuereinheiten 216 und einen System-Agent-Kern 210 beinhalten. Die eine oder die mehreren Bussteuereinheiten 216 verwalten einen Satz von Peripheriebussen, wie etwa einen oder mehrere Peripheriekomponenten-Verbindungsbusse (z. B. PCI oder PCI-Express). Der System-Agent-Kern 210 stellt Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. Bei manchen Ausführungsformen beinhaltet der System-Agent-Kern 210 eine oder mehrere integrierte Speichersteuerungen 214, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • Bei manchen Ausführungsformen unterstützen der eine oder die mehreren Prozessorkerne 202A-202N mehrere simultane Verarbeitungsstränge. Bei einer solchen Ausführungsform beinhaltet der System-Agent-Kern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während der mehrsträngigen Verarbeitung. Der System-Agent-Kern 210 kann außerdem eine Leistungssteuerungseinheit (power control unit - PCU) beinhalten, die Logik und Komponenten zum Regulieren des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 beinhaltet.
  • Bei manchen Ausführungsformen beinhaltet der Prozessor 200 außerdem einen Grafikprozessor 208 zum Ausführen von Grafikverarbeitungsoperationen. Bei manchen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz von gemeinsam genutzten Cacheeinheiten 206 und dem System-Agent-Kern 210 einschließlich der einen oder den mehreren integrierten Speichersteuerungen 214 gekoppelt. Bei manchen Ausführungsformen beinhaltet der System-Agent-Kern 210 auch eine Anzeigesteuerung 211 zum Ansteuern der Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen. Bei manchen Ausführungsformen kann die Anzeigesteuerung 211 auch ein separates Modul sein, das mit dem Grafikprozessor über mindestens eine Verbindung gekoppelt ist, oder sie kann in dem Grafikprozessor 208 integriert sein.
  • Bei manchen Ausführungsformen wird eine ringbasierte Verbindungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Es kann jedoch eine alternative Verbindungseinheit verwendet werden, wie etwa eine Punkt-zu-Punkt-Verbindung, eine Schaltverbindung oder andere Techniken, einschließlich im Stand der Technik bekannter Techniken. Bei manchen Ausführungsformen ist der Grafikprozessor 208 mit der Ringverbindung 212 über eine E/A-Verknüpfung 213 verbunden.
  • Die beispielhafte E/A-Verknüpfung 213 stellt zumindest eine von mehreren Variationen von E/A-Verbindungen dar, einschließlich einer E/A-Verbindung am Gehäuse, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 218, wie etwa einem eDRAM-Modul, erleichtert. Bei manchen Ausführungsformen kann jeder der Prozessorkerne 202A-202N und der Grafikprozessor 208 eingebettete Speichermodule 218 als einen gemeinsam genutzten Cache der letzten Ebene verwenden.
  • Bei manchen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, welche die gleiche Anweisungssatzarchitektur ausführen. Bei einer anderen Ausführungsform sind Prozessorkerne 202A-202N hinsichtlich der Anweisungssatzarchitektur (instruction set architecture - ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Untersatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. Bei einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne einen relativ höheren Energieverbrauch aufweisen, gekoppelt damit, dass ein oder mehrere Leistungskerne einen geringeren Energieverbrauch aufweisen. Bei einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich ihrer Rechenkapazität heterogen. Außerdem kann der Prozessor 200 auf einem oder mehreren Chips oder als ein integrierter Schaltkreis auf einem SoC implementiert sein, der zusätzlich zu anderen Komponenten die dargestellten Komponenten aufweist.
  • 2B ist ein Blockschaltplan von Hardware-Logik eines Grafikprozessorkerns 219 gemäß einigen hier beschriebenen Ausführungsformen. Die Elemente von 2B, welche die gleiche Bezugszahl (oder -bezeichnung) wie Elemente einer beliebigen anderen Figur hier aufweisen, können auf ähnliche Weise operieren oder funktionieren, wie an anderer Stelle hier beschrieben ist, sind jedoch nicht darauf beschränkt. Der Grafikprozessorkern 219, der manchmal als Kern-Slice bezeichnet wird, kann einer oder mehrere Grafikkerne in einem modularen Grafikprozessor sein. Der Grafikprozessorkern 219 ist beispielhaft für einen Grafikkern-Slice und ein Grafikprozessor, wie hier beschrieben, kann mehrere Grafikkern-Slices beinhalten, die auf einer Soll-Leistung und Leistungsbereichsgrenzen basieren. Jeder Grafikprozessorkern 219 kann einen Block mit fester Funktion 230 beinhalten, der mit mehreren Subkernen 221A-221F gekoppelt ist, die auch als Sub-Slices bezeichnet werden, die modulare Blöcke von Allzwecklogik und Logik mit fester Funktion beinhalten.
  • Bei manchen Ausführungsformen beinhaltet der Block mit fester Funktion 230 eine Geometrie- bzw. Pipeline mit fester Funktion 231, die von allen Subkernen in dem Grafikprozessorkern 219 gemeinsam genutzt werden kann, beispielsweise bei Grafikprozessorimplementierungen von geringer Leistung und/oder geringer Energie. Bei verschiedenen Ausführungsformen beinhaltet die Geometrie- bzw. Pipeline mit fester Funktion 231 eine 3D-Pipeline mit fester Funktion (z. B. eine 3D-Pipeline 312 wie nachstehend in 3 und 4 beschrieben) ein Video-Frontend, einen Initiator von Verarbeitungssträngen (engl. thread spawner) und einen Weiterleiter von Verarbeitungssträngen (engl. thread dispatcher) und eine vereinheitlichte Rückgabepuffer-Verwaltungseinheit, die vereinheitlichte Rückgabepuffer (z. B. den vereinheitlichten Rückgabepuffer 418 in 4, wie nachstehend beschrieben) verwaltet.
  • Bei einer Ausführungsform beinhaltet der Block mit fester Funktion 230 auch eine Grafik-SoC-Schnittstelle 232, einen Grafik-Mikrocontroller 233 und eine Medienpipeline 234. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen in einem integrierten Schaltkreis auf einem Ein-Chip-System bereit. Der Grafik-Mikrocontroller 233 ist ein programmierbarer Sub-Prozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 219 zu verwalten, einschließlich Weiterleitung, Ablaufplanung und kurzzeitiges Beenden von Verarbeitungssträngen (engl. preemption). Die Medienpipeline 234 (z. B. Medienpipeline 316 von 3 und 4) beinhaltet Logik, um das Dekodieren, Kodieren, Vorverarbeiten und/oder Nachbearbeiten von Multimedia-Daten, einschließlich Bild- und Videodaten, zu erleichtern. Die Medienpipeline 234 implementiert Medienoperationen über Anfragen an Rechnungs- oder Abtastlogik in den Subkernen 221-221F.
  • Bei einer Ausführungsform befähigt die SoC-Schnittstelle 232 den Grafikprozessorkern 219, mit Allzweckanwendungs-Prozessorkernen (z. B. CPUs) und/oder anderen Komponenten in einem SoC, einschließlich Speicherhierarchieelementen, wie etwa einem gemeinsam genutzten Last-Level-Cache, dem System-RAM und/oder eingebettetem chipinternen oder DRAM am Gehäuse, zu kommunizieren. Die SoC-Schnittstelle 232 kann auch eine Kommunikation mit Vorrichtungen mit fester Funktion in dem SoC ermöglichen, wie etwa Kamerabildgebungspipelines, und ermöglicht die Verwendung von und/oder implementiert globale atomare Speicheroperationen, die von dem Grafikprozessorkern 219 und den CPUs in dem SoC gemeinsam genutzt werden können. Die SoC-Schnittstelle 232 kann auch Energiemanagementsteuerungen für den Grafikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 219 und anderen Taktdomänen in dem SoC aktivieren. Bei einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Weiterleiter von Verarbeitungssträngen, die konfiguriert sind, um Befehle und Anweisungen an jeden aus einem oder mehreren Grafikkernen in einem Grafikprozessor bereitzustellen. Die Befehle und Anweisungen können an die Medienpipeline 234 weitergeleitet werden, wenn Medienoperationen ausgeführt werden sollen, oder an eine Geometrie- bzw. Pipeline mit fester Funktion (z. B. die Geometrie- bzw. Pipeline mit fester Funktion 231, die Geometrie- bzw. Pipeline mit fester Funktion 237), wenn Grafikverarbeitungsoperationen durchgeführt werden sollen.
  • Der Grafik-Mikrocontroller 233 kann konfiguriert sein, um verschiedene Ablaufplanungs- und Verwaltungsaufgaben für den Grafikprozessorkern 219 durchzuführen. Bei einer Ausführungsform kann der Grafik-Mikrocontroller 233 Grafik- und/oder Arbeitslast-Ablaufplanungen auf den verschiedenen parallelen Grafikmaschinen in den Ausführungseinheits(execution unit - EU)-Anordnungen 222A-222F, 224A-224F in den Subkernen 221A-221F durchführen bzw. errechnen. In diesem Ablaufplanungsmodell kann Host-Software, die auf einem CPU-Kern eines SoC, das den Grafikprozessorkern 219 beinhaltet, ausgeführt wird, Arbeitslasten an eins von mehreren Grafikprozessorsignalen („doorbells“) zustellen, was eine Ablaufplanungsoperation an der passenden Grafikmaschine auslöst. Ablaufplanungsoperationen beinhalten Bestimmen, welche Arbeitslast als Nächstes durchzuführen ist, Zustellen einer Arbeitslast an einen Befehlsstreamer, kurzzeitiges Beenden bestehender Arbeitslasten, die auf einer Maschine laufen, Überwachen des Fortschritts einer Arbeitslast und Benachrichtigen der Host-Software, wenn eine Arbeitslast erledigt wurde. Bei einer Ausführungsform kann der Grafik-Mikrocontroller 233 auch Niedrigenergie- oder inaktive Zustände für den Grafikprozessorkern 219 ermöglichen, wodurch dem Grafikprozessorkern 219 die Fähigkeit bereitgestellt wird, Register im Grafikprozessorkern 219 über Niedrigenergiezustandsübergänge unabhängig vom Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu sichern und wiederherzustellen.
  • Der Grafikprozessorkern 219 kann mehr als oder weniger als die dargestellten Subkerne 221A-221F beinhalten, bis zu N modulare Subkerne. Für jeden Satz von N Subkernen kann der Grafikprozessorkern 219 auch gemeinsam genutzte Funktionslogik 235, einen gemeinsam genutzten und/oder einen Cachespeicher 236, eine Geometrie- bzw. Pipeline mit fester Funktion 237 sowie zusätzliche Logik mit fester Funktion 238 beinhalten, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam genutzte Funktionslogik 235 kann Logikeinheiten beinhalten, die mit der gemeinsam genutzten Funktionslogik 420 von 4 (z. B. Abtaster, mathematische Logik und/oder Logik für Kommunikation zwischen Verarbeitungssträngen) verknüpft sind, die von jedem der N Subkerne in dem Grafikprozessorkern 219 gemeinsam genutzt werden kann. Der gemeinsam genutzte und/oder Cachespeicher 236 kann ein Cache der letzten Ebene für den Satz von N Subkernen 221A-221F in dem Grafikprozessorkern 219 sein und kann auch als gemeinsam genutzter Speicher dienen, der für viele Subkerne zugänglich ist. Die Geometrie- bzw. Pipeline mit fester Funktion 237 kann an Stelle der Geometrie- bzw. Pipeline mit fester Funktion 231 in dem Block mit fester Funktion 230 beinhaltet sein und kann die gleichen oder ähnliche Logikeinheiten beinhalten.
  • Bei einer Ausführungsform beinhaltet der Grafikprozessorkern 219 zusätzliche Logik mit fester Funktion 238, die unterschiedliche Beschleunigungslogik mit fester Funktion zur Verwendung durch den Grafikprozessorkern 219 beinhalten kann. Bei einer Ausführungsform beinhaltet die zusätzliche Logik mit fester Funktion 238 eine zusätzliche Geometriepipeline zur Verwendung beim Schattieren von nur der Position (engl. position-only shading). Beim Schattieren von nur der Position sind zwei Geometriepipelines vorhanden, die vollständige Geometriepipeline in der Geometrie- bzw. Pipeline mit fester Funktion 238, 231 und eine Löschpipeline (engl. cull pipeline), die eine zusätzliche Geometriepipeline ist, die in der zusätzlichen Logik mit fester Funktion 238 beinhaltet sein kann. Bei einer Ausführungsform ist die Löschpipeline eine abgespeckte Version der vollständigen Geometriepipeline. Die vollständige Pipeline und die Löschpipeline können unterschiedliche Varianten derselben Anwendung ausführen, wobei jede Variante einen separaten Kontext aufweist. Das Schattieren von nur der Position kann lange Löschläufe von verworfenen Dreiecken verbergen, wodurch ermöglicht wird, dass das Schattieren bei einigen Varianten früher abgeschlossen wird. Zum Beispiel und bei einer Ausführungsform kann die Logik der Löschpipeline in der zusätzlichen Logik mit fester Funktion 238 Positionsschattierer parallel zu der Hauptanwendung ausführen und generiert im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Löschpipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterung und eine Bildsynthese der Pixel an den Einzelbildpuffer durchzuführen. Die Löschpipeline kann die generierten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu errechnen, ungeachtet dessen, ob diese Dreiecke gelöscht werden. Die vollständige Pipeline (die in diesem Fall als Wiedergabe-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die gelöschten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke, die letztendlich an die Rasterungsphase weitergegeben werden, zu schattieren.
  • Bei einer Ausführungsform kann die zusätzliche Logik mit fester Funktion 238 auch Beschleunigungslogik für maschinelles Lernen beinhalten, wie etwa Matrixmultiplikationslogik mit fester Funktion, für Implementierungen, die Optimierungen für Training oder Inferenzieren für maschinelles Lernen beinhalten.
  • In jedem Grafik-Subkern 221A-221F ist ein Satz von Ausführungsressourcen beinhaltet, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen in Reaktion auf Anforderungen der Grafikpipeline, der Medienpipeline oder von Schattiererprogrammen durchzuführen. Die Grafik-Subkerne 221A-221F beinhalten mehrere EU-Anordnungen 222A-222F, 224A-224F, Verarbeitungsstrangweiterleitungslogik und Kommunikationslogik zwischen Verarbeitungssträngen (thread dispatch/inter-thread communication - TD/IC) 223A-223F, einen 3D- (z. B. Textur-)Abtaster 225A-225F, einen Medien-Abtaster 206A-206F, einen Schattiererprozessor 227A-227F und gemeinsam genutzten lokalen Speicher (shared local memory - SLM) 228A-228F. Die EU-Anordnungen 222A-222F, 224A-224F beinhalten jeweils mehrere Ausführungseinheiten, die Allzweck-Grafikverarbeitungseinheiten sind, die in der Lage sind, Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienste einer Grafik-, Medien- oder Rechenoperation durchzuführen, die Grafik-, Medien- oder Rechen-Schattiererprogramme beinhalten. Die TD/IC-Logik 223A-223F führt eine Weiterleitung von lokalen Verarbeitungssträngen und Steueroperationen für Verarbeitungsstränge für die Ausführungseinheiten in einem Subkern durch und ermöglicht die Kommunikation zwischen Verarbeitungssträngen, die in den Ausführungseinheiten des Subkerns ausgeführt werden. Der 3D-Abtaster 225A-225F kann Textur- oder andere auf 3D-Grafik bezogene Daten in den Speicher einlesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem mit einer gegebenen Textur verknüpften Texturformat unterschiedlich auslesen. Der Medien-Abtaster 206A-206F kann basierend auf dem mit Mediendaten verknüpften Typ bzw. Format ähnliche Leseoperationen durchführen. Bei einer Ausführungsform kann jeder Grafik-Subkern 221A-221F alternativ dazu einen vereinheitlichten 3D- und Medien-Abtaster beinhalten. Verarbeitungsstränge, die auf den Ausführungseinheiten in jedem der Subkerne 221A-221F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher 228A-228F in jedem Subkern nutzen, um zu ermöglichen, dass Verarbeitungsstränge, die in einer Verarbeitungsstranggruppe ausgeführt werden, unter Verwenden eines gemeinsamen Bündels von chipinternem Speicher ausgeführt werden.
  • 2C stellt eine Grafikverarbeitungseinheit (GPU) 239 dar, die zweckbestimmte Sätze von Grafikverarbeitungsressourcen beinhalten, die in Mehrkerngruppen 240A-240N angeordnet sind. Obwohl die Einzelheiten von nur einer einzigen Mehrkerngruppe 240A bereitgestellt sind, versteht es sich, dass die anderen Mehrkerngruppen 240B-240N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie dargestellt, kann eine Mehrkerngruppe 240A einen Satz von Grafikkernen 243, einen Satz von Tensorkernen 244 und einen Satz von Raytracing(Strahlenverfolgungs)-Kernen 245 beinhalten. Ein Ablaufplaner /Weiterleiter 241 plant und leitet die Grafik-Verarbeitungsstränge zur Ausführung auf den verschiedenen Kernen 243, 244, 245 weiter. Ein Satz von Registerdateien 242 speichert Operandenwerte, die von den Kernen 243, 244, 245 beim Ausführen der Grafik-Verarbeitungsstränge verwendet werden. Diese können beispielsweise Ganzzahlregister zum Speichen von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkomma-Datenelemente) und Kachelregister zum Speichern von Tensor-/Matrixwerten beinhalten. Bei einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Level 1 (L1)-Caches und gemeinsam genutzte Speichereinheiten 247 speichern Grafikdaten, wie etwa Texturdaten, Vertexdaten, Pixeldaten, Strahlendaten, Hüllkörperdaten usw. lokal in jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können auch verwendet werden, um texturbezogene Operationen, wie etwa Texturabbildung (engl. texture mapping) und Abtasten, durchzuführen. Ein Level 2 (L2)-Cache 253, der von allen oder einer Teilgruppe der Mehrkerngruppen 240A-240N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere zeitgleich ablaufende Grafik-Verarbeitungsstränge. Wie dargestellt, kann der L2-Cache 253 über eine Vielzahl von Mehrkerngruppen 240A-240N gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 248 koppeln die GPU 239 mit einem Speicher 249, der ein Systemspeicher (z. B. DRAM) und/oder ein zweckbestimmter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Die E/A(Eingabe-/Ausgabe-)Schaltung 250 koppelt die GPU 239 mit einer oder mehreren E/A-Vorrichtungen 252, wie etwa digitalen Signalprozessoren (DSPs), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Eine chipinterne Verbindung kann zum Koppeln der E/A-Vorrichtungen 252 mit der GPU 239 und dem Speicher 249 verwendet werden. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs) 251 der E/A-Schaltung 250 koppeln die E/A-Vorrichtungen 252 unmittelbar mit dem Systemspeicher 249. Bei einer Ausführungsform verwaltet die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen physikalischen Adressen im Systemspeicher 249 zuzuordnen. Bei dieser Ausführungsform können die E/A-Vorrichtungen 252, CPU(s) 246 und GPU(s) 239 den gleichen virtuellen Adressraum gemeinsam nutzen.
  • In einer Implementierung unterstützt die IOMMU 251 eine Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen als physikalische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physikalischen Gast-/Grafikadressen als physikalische System-/Hostadressen (z. B. im Systemspeicher 249) abzubilden. Die Basisadressen von jedem aus dem ersten und dem zweiten Satz von Seitentabellen können in Kontrollregistern gespeichert werden und an einen Kontextwechsel ausgelagert werden (so dass z. B. der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt wird). Obwohl in 2C nicht dargestellt, kann jeder der Kerne 243, 244, 245 und/oder der Mehrkerngruppen 240A-240N Befehlsübersetzungspuffer (translation lookaside buffers - TLBs) beinhalten, um virtuelle Gastübersetzungen in physikalischen Gastübersetzungen, physikalische Gastübersetzungen in physikalischen Hostübersetzungen und virtuelle Gastübersetzungen in physikalischen Hostübersetzungen zwischenzuspeichern.
  • Bei einer Ausführungsform sind die CPUs 246, GPUs 239 und E/A-Vorrichtungen 252 auf einem einzelnen Halbleiterchip und/oder Chipmodul integriert. Der dargestellte Speicher 249 kann auf dem gleichen Chip integriert sein oder mit den Speichersteuerungen 248 über eine chipexterne Schnittstelle gekoppelt sein. Bei einer Implementierung umfasst der Speicher 249 einen GDDR6-Speicher, der den gleichen virtuellen Adressraum wie andere physikalische Speicher auf Systemebene gemeinsam nutzt, obwohl die der Erfindung zugrundeliegenden Prinzipien nicht auf diese spezifische Implementierung beschränkt sind.
  • Bei einer Ausführungsform beinhalten die Tensorkerne 244 eine Vielzahl von Ausführungseinheiten, die spezifisch zum Durchführen von Matrixoperationen ausgestaltet sind, welche die grundlegende Rechenoperation darstellen, die zum Durchführen von Abläufen des mehrschichtigen maschinellen Lernens (engl. deep learning) verwendet wird. Zum Beispiel können gleichzeitige Matrixmultiplikationsoperationen zum Training und Inferenzieren von neuronalen Netzen verwendet werden. Die Tensorkerne 244 können eine Matrixverarbeitung unter Verwenden einer Vielfalt von Operandengenauigkeiten durchführen, einschließlich Gleitkommazahlen mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkommazahlen mit halber Genauigkeit (z. B. 16 Bit), ganzzahlige Worte (16 Bit), Bytes (8 Bit) und Halb-Bytes (4 Bit). Bei einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder synthetisierten Bildszene, indem sie potentiell Einzelheiten von mehreren Einzelbildern kombiniert, um ein hochqualitatives finales Bild zu erstellen.
  • Bei Implementierungen des mehrschichtigen maschinellen Lernens können parallele Matrixmultiplikationsarbeiten zur Ausführung an den Tensorkernen 244 geplant werden. Das Training neuronaler Netze erfordert insbesondere eine beträchtliche Anzahl von Matrix-Punktproduktoperationen. Um eine Formulierung eines inneren Produkts (Skalarprodukts) einer N x N x N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Punktprodukt-Verarbeitungselemente beinhalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Säule einer zweiten Matrix wird in jeden Zyklus für N Zyklen geladen. In jedem Zyklus liegen N Punktprodukte vor, die verarbeitet werden.
  • Matrixelemente können, abhängig von der konkreten Implementierung, bei unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halb-Bytes (z. B. INT4). Unterschiedliche Genauigkeitsmodi können für die Tensorkerne 244 angegeben werden, um zu gewährleisten, dass die effizienteste Präzision für unterschiedliche Arbeitslasten verwendet wird (z. B., wie etwa Inferenzierungsarbeitslasten, die eine Quantisierung in Bytes und Halb-Bytes tolerieren können).
  • Bei einer Ausführungsform beschleunigen die Raytracing-Kerne 245 Strahlenverfolgungsoperationen sowohl für Implementierungen von Echtzeit-Strahlenverfolgung als auch von Nicht-Echtzeit-Strahlenverfolgung. Insbesondere beinhalten die Raytracing-Kerne 245 Strahldurchquerungs-/ -schnittpunkt-Schaltungen zum Durchführen von Strahldurchquerung unter Verwenden von Hüllkörperhierarchien (bounding volume hierarchies - BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Primitiven, die in den BVH-Volumen eingeschlossen sind. Die Raytracing-Kerne 245 können auch Schaltungen zum Durchführen von Tiefentests und Löschen (z. B. unter Verwenden eines Z-Puffers oder einer ähnlichen Anordnung) beinhalten. Bei einer Implementierung führen die Raytracing-Kerne 245 Durchquerungs- und Schnittpunktoperationen im Einklang mit den hier beschriebenen Bild-Rauschunterdrückungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen 244 ausgeführt werden kann. Bei einer Ausführungsform implementieren die Tensorkerne 244 beispielsweise ein neuronales Netz des mehrschichtigen maschinellen Lernens, um eine Rauschunterdrückung von Einzelbildern durchzuführen, die von den Raytracing-Kernen 245 generiert wurden. Jedoch können die CPU(s) 246, Grafikkerne 243 und/oder Raytracing-Kerne 245 auch alles oder einen Teil der Rauschunterdrückungs- und/oder Deep-Learning-Algorithmen implementieren.
  • Außerdem kann, wie vorstehend beschrieben, ein verteilter Ansatz auf die Rauschunterdrückung angewendet werden, bei dem die GPU 239 sich in einer Rechenvorrichtung befindet, die mit anderen Rechenvorrichtungen über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung gekoppelt ist. Bei dieser Ausführungsform nutzen die verbundenen Rechenvorrichtungen Lern-/Trainingsdaten des neuronalen Netzes gemeinsam, um die Geschwindigkeit, mit der das Gesamtsystem lernt, zu erhöhen, um eine Rauschunterdrückung für unterschiedliche Typen von Einzelbildern und/oder unterschiedlichen Grafikanwendungen durchzuführen.
  • Bei einer Ausführungsform verarbeiten die Raytracing-Kerne 245 alle BVH-Durchquerungen und Strahl-Primitiv-Schnittpunkte, wodurch sie die Grafikkerne 243 vor einer Überladung mit Tausenden von Anweisungen pro Strahl schützen. Bei einer Ausführungsform beinhaltet jeder Raytracing-Kern 245 einen ersten Satz von spezialisierter Schaltung zum Durchführen von Hüllkörpertests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierter Schaltung zum Durchführen der Strahl-Dreieck-Schnittpunkt-Tests (z. B. sich schneidende Strahlen, die durchquert wurden). Somit kann die Mehrkerngruppe bei einer Ausführungsform 240A einfach einen Teststrahl absenden und die Raytracing-Kerne 245 führen unabhängig einen Test zu Strahldurchquerung und -schnittpunkt durch und führen Trefferdaten (z. B. einen Treffer, keinen Treffer, viele Treffer usw.) an den Verarbeitungsstrangkontext zurück. Die anderen Kerne 243, 244 sind freigestellt, um andere Grafik- oder Rechenarbeiten durchzuführen, während die Raytracing-Kerne 245 die Durchquerungs- und Schnittpunktoperationen durchführen.
  • Bei einer Ausführungsform beinhaltet jeder Raytracing-Kern 245 eine Durchquerungseinheit, um BVH-Testoperationen durchzuführen, und eine Schnittpunkteinheit, die Strahl-Primitiv-Schnittpunkttests durchführt. Die Schnittpunkteinheit generiert eine „Treffer““-, „kein Treffer“- oder „Mehrfachtreffer“-Reaktion, die sie an den entsprechenden Verarbeitungsstrang bereitstellt. Während der Durchquerungs- und Schnittpunktoperationen sind die Ausführungsressourcen der anderen Kerne (z. B. Grafikkerne 243 und Tensorkerne 244) freigestellt, um andere Arten von Grafikarbeiten durchzuführen.
  • Bei einer spezifischen, nachstehend beschriebenen Ausführungsform wird ein Hybridrasterungs-/Strahlenverfolgungsansatz angewendet, bei dem Arbeiten zwischen den Grafikkernen 243 und den Raytracing-Kernen 245 verteilt werden.
  • Bei einer Ausführungsform beinhalten die Raytracing-Kerne 245 (und/oder andere Kerne 243, 244) Hardwareunterstützung für einen Strahlenverfolgungsanweisungssatz, wie etwa DirectX Ray Tracing (DXR) von Microsoft, der einen DispatchRays-Befehl beinhaltet, sowie Strahlerzeugungs-, Nächstliegender-Treffer-, Jeder-Treffer- und Fehltreffer-Schattierer, welche die Zuweisung von eindeutigen Sätzen von Schattierern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlenverfolgungsplattform, die von den Raytracing-Kernen 245, den Grafikkernen 243 und den Tensorkernen 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf eine bestimmte Strahlenverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlenverfolgungsanweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlengenerierung, nächstliegendem Treffer, jedem Treffer, Strahl-Primitiv-Schnittpunkt, primitivspezifischer und hierarchischer Hüllkörperaufbau, Fehltreffer, Besuch und Ausnahmen beinhaltet. Insbesondere beinhaltet eine Ausführungsform Strahlenverfolgungsanweisungen zum Durchführen der folgenden Funktionen:
  • Strahlgenerierung - Strahlgenerierungsanweisungen können für jede/s Pixel, Abtastung oder andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
  • Nächstliegender Treffer - Eine Nächstliegender-Treffer-Anweisung kann ausgeführt werden, um den nächstliegenden Schnittpunkt eines Strahls mit Primitiven in einer Szene zu orten.
  • Jeder Treffer - Eine Jeder-Treffer-Anweisung identifiziert mehrere Schnittpunkte zwischen einem Strahl und Primitiven in einer Szene, um potentiell einen neuen nächstliegenden Schnittpunkt zu identifizieren.
  • Schnittpunkt - Eine Schnittpunktanweisung führt einen Strahl-Primitiv-Schnittpunkt-Test durch und gibt ein Ergebnis aus.
  • Primitivspezifischer Hüllkörperaufbau - Diese Anweisung baut einen Hüllkörper um ein gegebenes Primitiv oder eine Gruppe von Primitiven auf (z. B. beim Aufbau eines neuen BVH oder einer anderen
    Beschleu nigungsdatenstru ktu r).
  • Fehltreffer - Zeigt an, dass ein Strahl die gesamte Geometrie in einer Szene oder einen bestimmten Bereich einer Szene verfehlt.
  • Besuch - Zeigt die untergeordneten Volumina an, die ein Strahl durchqueren wird.
  • Ausnahmen - Beinhaltet verschiedene Arten von Ausnahmeroutinen (z. B. aufgerufen für verschiedene Fehlerbedingungen).
  • 2D ist ein Blockschaltplan für eine Allzweck-Grafikverarbeitungseinheit (general purpose graphics processing unit - GPGPU) 270, die als Grafikprozessor und/oder Rechenbeschleuniger gemäß hier beschriebenen Ausführungsformen konfiguriert sein kann. Die GPGPU 270 kann sich mit Host-Prozessoren (z. B. einer oder mehreren CPU(s) 246) und dem Speicher 271, 272 über einen oder mehrere System- und/oder Speicherbusse verbinden. Bei einer Ausführungsform ist der Speicher 271 ein Systemspeicher, der von der einen oder den mehreren CPU(s) 246 gemeinsam genutzt werden kann, während der Speicher 272 ein Gerätespeicher ist, der für die GPGPU 270 zweckbestimmt ist. Bei einer Ausführungsform können Komponenten in der GPGPU 270 und dem Gerätespeicher 272 in Speicheradressen abgebildet werden, die für die eine oder die mehreren CPU(s) zugänglich sind 246. Der Zugriff auf die Speicher 271 und 272 kann über eine Speichersteuerung 268 ermöglicht werden. Bei einer Ausführungsform beinhaltet die Speichersteuerung 268 eine interne direkte Speicherzugriffs(direct memory access - DMA)-Steuerung 269 oder kann Logik beinhalten, um Operationen durchzuführen, die anderenfalls von einer DMA-Steuerung durchgeführt würden.
  • Die GPGPU 270 beinhaltet mehrere Cache-Speicher, einschließlich einen L2-Cache 253, einen Ll-Cache 254, einen Anweisungscache 255 und einen gemeinsam genutzten Speicher 256, von dem zumindest ein Teil auch als Cachespeicher partitioniert sein kann. Die GPGPU 270 beinhaltet auch mehrere Recheneinheiten 260A-260N. Jede Recheneinheit 260A-260N beinhaltet einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264. Die Recheneinheiten 260A-260N können auch einen lokalen gemeinsam genutzten Speicher 265 und einen Programmzähler 266 beinhalten. Die Recheneinheiten 260A-260N können mit einem konstanten Cache 267 gekoppelt werden, der verwendet werden kann, um konstante Daten zu speichern, wobei es sich um Daten handelt, die sich während der Ausführung des Systemkern- oder Schattiererprogramms, das auf der GPGPU 270 ausgeführt wird, nicht ändern. Bei einer Ausführungsform ist der konstante Cache 267 ein Cache für skalare Daten, und zwischengespeicherte Daten können direkt in die Skalarregister 262 abgerufen werden.
  • Während des Betriebs können die eine oder die mehreren CPU(s) 246 Befehle in Register oder Speicher in der GPGPU 270 schreiben, die in einen zugänglichen Adressraum abgebildet wurden. Die Befehlsprozessoren 257 können die Befehle aus Registern oder dem Speicher auslesen und bestimmen, wie diese Befehle in der GPGPU 270 verarbeitet werden. Ein Weiterleiter von Verarbeitungssträngen 258 kann dann verwendet werden, um Verarbeitungsstränge an die Recheneinheiten 260A-260N zum Durchführen dieser Befehle weiterzuleiten. Jede Recheneinheit 260A-260N kann Verarbeitungsstränge unabhängig von den anderen Recheneinheiten ausführen. Außerdem kann jede Recheneinheit 260A-260N für bedingte Berechnungen unabhängig konfiguriert sein und kann die Rechenergebnisse unter bestimmten Bedingungen an den Speicher ausgeben. Die Befehlsprozessoren 257 können die eine oder die mehreren CPU(s) 246 unterbrechen, wenn die zugestellten Befehle vollständig sind.
  • 3A-3C stellen Blockschaltpläne von zusätzlichen Grafikprozessor- und Rechenbeschleunigerarchitekturen dar, die von hier beschriebenen Ausführungsformen bereitgestellt sind. Die Elemente der 3A-3C, welche die gleiche Bezugszahl (oder -bezeichnung) wie Elemente einer beliebigen anderen Figur hier aufweisen, können auf ähnliche Weise operieren oder funktionieren, wie an anderer Stelle hier beschrieben ist, sind jedoch nicht darauf beschränkt.
  • 3A ist ein Blockschaltplan eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, in den eine Vielzahl von Prozessorkernen bzw. andere Halbleitervorrichtungen, wie etwa, unter anderem, Speichervorrichtungen oder Netzwerkschnittstellen, integriert sind. Bei manchen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die im Prozessorspeicher platziert sind. Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Speicherschnittstelle 314, um auf den Speicher zuzugreifen. Die Speicherschnittstelle 314 kann eine Schnittstelle mit einem lokalen Speicher, mit einem oder mehreren internen Caches, mit einem oder mehreren gemeinsam genutzten externen Caches und/oder einem Systemspeicher sein.
  • Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 300 auch eine Anzeigesteuerung 302, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 318 zu steuern. Die Anzeigesteuerung 302 beinhaltet Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Komposition von mehreren Ebenen von Video- oder Benutzerschnittstellenelementen. Die Anzeigevorrichtung 318 kann eine interne oder eine externe Anzeigevorrichtung sein. Bei einer Ausführungsform ist die Anzeigevorrichtung 318 eine Datenbrille (head mounted display device), wie etwa eine VR(virtuelle Realität - virtual reality)-Anzeigevorrichtung oder eine AR(erweiterte Realität - augmented reality)-Anzeigevorrichtung. Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Video-Codec-Maschine 306 zum Kodieren, Dekodieren oder Transkodieren von Medien in, aus oder zwischen ein(em) oder mehrere(n) Medienkodierformat(en), einschließlich, unter anderem, Formaten der Moving Picture Experts Group (MPEG), wie etwa MPEG-2, Formaten der Advanced Video Coding (AVC), wie etwa H.264/MPEG-4 AVC, H.265/HEVC, Alliance for Open Media(AOMedia) VP8-, VP9- sowie Formaten der Society of Motion Picture & Television Engineers(SMPTE) 421M/VC-1- und der Joint Photographic Experts Group(JPEG), wie etwa die Formate JPEG und Motion JPEG (MJPEG).
  • Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Blockbildtransfer(block image transfer - BLIT)-Maschine 304 zum Durchführen von zweidimensionalen (2D) Rasterungsoperationen einschließlich, beispielsweise, Bitgrenzenblocktransfers. Bei einer Ausführungsform jedoch werden 2D-Grafikoperationen unter Verwenden von einer oder mehreren Komponenten einer Grafikverarbeitungsmaschine (graphics processing engine - GPE) 310 durchgeführt. Bei manchen Ausführungsformen ist die GPE 310 eine Rechenmaschine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • Bei manchen Ausführungsformen beinhaltet die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen, wie etwa Synthetisieren von dreidimensionalen Bildern und Szenen unter Verwenden von Verarbeitungsfunktionen, die an 3D-Primitiv-Formen (z. B. Rechteck, Dreieck usw.) arbeiten. Die 3D-Pipeline 312 beinhaltet programmierbare Elemente und Elemente mit fester Funktion, die verschiedene Aufgaben in dem Element ausführen und/oder Verarbeitungsstränge in einem 3D-/Medien-Teilsystem 315 initialisieren. Obwohl die 3D-Pipeline 312 zum Durchführen von Medienoperationen verwendet werden kann, beinhaltet eine Ausführungsform der GPE 310 auch eine Medienpipeline 316, die spezifisch zum Durchführen von Medienoperationen, wie etwa Videonachbearbeitung und Bildverbesserung, verwendet wird.
  • Bei manchen Ausführungsformen beinhaltet die Medienpipeline 316 Einheiten mit fester Funktion oder programmierbarer Logik, um eine oder mehrere spezialisierte Medienoperationen durchzuführen, wie etwa Videodekodierungsbeschleunigung, Videozeilenentflechtung und Videokodierungsbeschleunigung an Stelle der oder für die Video-Codec-Maschine 306. Bei manchen Ausführungsformen beinhaltet die Medienpipeline 316 zusätzlich eine Verarbeitungsstranginitialisierungseinheit zum Initialisieren von Verarbeitungssträngen zur Ausführung auf dem 3D-/Medien-Teilsystem 315. Die initialisierten Verarbeitungsstränge führen Berechnungen für Medienoperationen an einer oder mehreren der Grafikausführungseinheiten durch, die in dem 3D-/Medien-Teilsystem 315 beinhaltet sind.
  • Bei manchen Ausführungsformen beinhaltet das 3D-/Medien-Teilsystem 315 Logik zum Ausführen von Verarbeitungssträngen, die von der 3D-Pipeline 312 und der Medienpipeline 316 initialisiert wurden. Bei einer Ausführungsform senden die Pipelines Verarbeitungsstrangausführungsanfragen an das 3D-/Medien-Teilsystem 315, welches Verarbeitungsstrang-Weiterleitungslogik zum Vermitteln und Weiterleiten der verschiedenen Anfragen an verfügbare Verarbeitungsstrangausführungsressourcen beinhaltet. Die Ausführungsressourcen beinhalten eine Anordnung von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Verarbeitungsstränge. Bei manchen Ausführungsformen beinhaltet das 3D-/Medien-Teilsystem 315 einen oder mehrere interne Caches für Verarbeitungsstranganweisungen und -daten. Bei manchen Ausführungsformen beinhaltet das Teilsystem auch gemeinsam genutzten Speicher, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Verarbeitungssträngen gemeinsam zu nutzen und ausgegebene Daten zu speichern.
  • 3B stellt einen Grafikprozessor 320 dar, der eine gekachelte Architektur gemäß hier beschriebenen Ausführungsformen aufweist. Bei einer Ausführungsform beinhaltet der Grafikprozessor 320 einen Grafikverarbeitungsmaschinen-Cluster 322, der mehrere Instanzen der Grafikverarbeitungsmaschine 310 von 3A in einer Grafikmaschine-Kachel 310A-310D aufweist. Jede Grafikmaschine-Kachel 310A-310D kann über einen Satz von Kachelverbindungen 323A-323F verbunden werden. Jede Grafikmaschine-Kachel 310A-310D kann auch mit einem Speichermodul oder einer Speichervorrichtung 326A-326D über Speicherverbindungen 325A-325D verbunden werden. Die Speichervorrichtungen 326A-326D können jede Grafikspeichertechnik verwenden. Zum Beispiel können die Speichervorrichtungen 326A-326D Grafikspeicher mit doppelter Datengeschwindigkeit (graphics double data rate - GDDR) sein. Die Speichervorrichtungen 326A-326D sind bei einer Ausführungsform Hoch-Bandbreitenspeicher(high bandwidth memory - HBM)-Module, die auf demselben Halbleiterplättchen mit ihrer jeweiligen Grafikmaschine-Kachel 310A-310D liegen können. Bei einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die oben auf ihre jeweilige Grafikmaschine-Kachel 310A-310D gestapelt werden können. Bei einer Ausführungsform liegt jede Grafikmaschine-Kachel 310A-310D und zugehöriger Speicher 326A-326D auf separaten Chiplets, die auf ein Basis-Halbleiterplättchen oder Basissubstrat gebondet sind, wie im Einzelnen in 11B-11D beschrieben.
  • Der Grafikverarbeitungsmaschine-Cluster 322 kann sich mit einer chipinternen oder modulinternen Fabric-Verbindung 324 verbinden. Die Fabric-Verbindung 324 kann eine Kommunikation zwischen Grafikmaschine-Kacheln 310A-310D und Komponenten, wie etwa dem Video-Codec 306 und einer oder mehreren Kopiermaschinen 304 ermöglichen. Die Kopiermaschinen 304 können verwendet werden, um Daten aus den Speichervorrichtungen 326A-326D und dem Speicher, der extern von dem Grafikprozessor 320 (z. B. Systemspeicher) liegt, heraus, dort hinein und dazwischen zu bewegen. Die Fabric-Verbindung 324 kann auch verwendet werden, um die Grafikmaschine-Kacheln 310A-310D miteinander zu verbinden. Der Grafikprozessor 320 kann gegebenenfalls eine Anzeigesteuerung 302 beinhalten, um eine Verbindung zu einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann auch als ein Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration kann auf die Anzeigesteuerung 302 und die Anzeigevorrichtung 318 verzichtet werden.
  • Der Grafikprozessor 320 kann sich mit einem Host-System über eine Host-Schnittstelle 328 verbinden. Die Host-Schnittstelle 328 kann eine Kommunikation zwischen dem Grafikprozessor 320, Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Host-System-Schnittstelle sein.
  • 3C stellt gemäß hier beschriebenen Ausführungsformen einen Rechenbeschleuniger 330 dar. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 320 von 3B beinhalten und ist für die Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster 332 kann einen Satz von Rechenmaschine-Kacheln 340A-340D beinhalten, die Ausführungslogik beinhalten, die für parallele oder vektorbasierte Allzweck-Rechenoperationen optimiert sind. Bei manchen Ausführungsformen beinhalten die Rechenmaschine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, obwohl bei einer Ausführungsform eine oder mehrere der Rechenmaschine-Kacheln 340A-340D Logik zum Durchführen von Medienbeschleunigung beinhalten können. Die Rechenmaschine-Kacheln 340A-340D können sich mit dem Speicher 326A-326D über Speicherverbindungen 325A-325D verbinden. Die Speicher 326A-326D und die Speicherverbindungen 325A-325D können von ähnlicher Technik wie im Grafikprozessor 320 sein oder sie können anders sein. Die Grafik-Rechenmaschine-Kacheln 340A-340D können auch über einen Satz von Kachelverbindungen 323A-323F verbunden sein und können mit einer Fabric-Verbindung 324 verbunden und/oder zusammengeschaltet sein. Bei einer Ausführungsform beinhaltet der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als vorrichtungsübergreifender Cache konfiguriert sein kann. Der Rechenbeschleuniger 330 kann sich auch mit einem Host-Prozessor und Speicher über eine Host-Schnittstelle 328 auf ähnliche Weise wie der Grafikprozessor 320 von 3B verbinden.
  • Grafikverarbeitungsmaschine
  • 4 ist ein Blockschaltplan einer Grafikverarbeitungsmaschine 410 eines Grafikprozessors gemäß einigen Ausführungsformen. Bei einer Ausführungsform ist die Grafikverarbeitungsmaschine (GPE) 410 eine Version der in 3A gezeigten GPE 310 und kann auch eine Grafikmaschine-Kachel 310A-310D von 3B darstellen. Elemente von 4, welche die gleiche Bezugszahl (oder -bezeichnung) wie Elemente einer beliebigen anderen Figur hier aufweisen, können auf ähnliche Weise operieren oder funktionieren, wie an anderer Stelle hier beschrieben ist, sind jedoch nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 312 und die Medienpipeline 316 von 3A dargestellt. Die Medienpipeline 316 ist bei manchen Ausführungsformen der GPE 410 gegebenenfalls vorhanden und braucht nicht ausdrücklich in der GPE 410 beinhaltet zu sein. Zum Beispiel und bei mindestens einer Ausführungsform sind ein separater Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • Bei manchen Ausführungsformen ist die GPE 410 mit einem Befehlsstreamer 403 gekoppelt, der einen Befehlsstrom an die 3D-Pipeline 312 und/oder die Medienpipeline 316 bereitstellt, oder beinhaltet einen solchen. Bei manchen Ausführungsformen ist der Befehlsstreamer 403 mit einem Speicher gekoppelt, der ein Systemspeicher oder ein oder mehrere interne/r Cachespeicher und gemeinsam genutzte/r Cachespeicher sein kann. Bei manchen Ausführungsformen empfängt der Befehlsstreamer 403 Befehle vom Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medienpipeline 316. Die Befehle sind Weisungen, die aus einem Ringpuffer abgerufen wurden, der Befehle für die 3D-Pipeline 312 und die Medienpipeline 316 speichert. Bei einer Ausführungsform kann der Ringpuffer außerdem Stapelbefehlpuffer beinhalten, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf im Speicher gespeicherte Daten beinhalten, wie etwa, unter anderem, Vertex- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 316. Die 3D-Pipeline 312 und die Medienpipeline 316 verarbeiten die Befehle und Daten, indem sie Operationen über Logik in den jeweiligen Pipelines durchführen oder indem sie einen oder mehrere Ausführungsverarbeitungsstränge an eine Grafikkernanordnung 414 weiterleiten. Bei einer Ausführungsform beinhaltet die Grafikkernanordnung 414 einen oder mehrere Blöcke von Grafikkernen (z. B. (den) Grafikkern(e) 415A, (den) Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, die Allzweck- und grafikspezifische Ausführungslogik beinhalten, um Grafik- und Rechenoperationen sowie Texturverarbeitung mit fester Funktion und/oder Beschleunigungslogik für maschinelles Lernen und künstliche Intelligenz durchzuführen.
  • Bei verschiedenen Ausführungsformen kann die 3D-Pipeline 312 Logik mit fester Funktion und programmierbare Logik beinhalten, um ein oder mehrere Schattiererprogramme, wie etwa Vertexschattierer, Geometrieschattierer, Pixelschattierer, Fragmentschattierer, Rechenschattierer oder andere Schattiererprogramme durch Verarbeiten der Anweisungen und Weiterleiten von Ausführungserarbeitungssträngen an die Grafikkernanordnung 414 zu verarbeiten. Die Grafikkernanordnung 414 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung beim Verarbeiten dieser Schattiererprogramme bereit. Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) in dem/den Grafikkern(en) 415A-414B der Grafikkernanordnung 414 beinhaltet Unterstützung für verschiedene 3D-API-Schattierer-Sprachen und kann mehrere gleichzeitige Ausführungsverarbeitungsstränge, die mit mehreren Schattierern verknüpft sind, ausführen.
  • Bei manchen Ausführungsformen beinhaltet die Grafikkernanordnung 414 Ausführungslogik zum Durchführen von Medienfunktionen, wie etwa Video- und/oder Bildverarbeitung. Bei einer Ausführungsform beinhalten die Ausführungseinheiten Allzwecklogik, die programmierbar ist, um zusätzlich zu Grafikverarbeitungsoperationen parallele Allzweck-Rechenoperationen durchzuführen. Die Allzwecklogik kann Verarbeitungsoperationen parallel zu oder in Verbindung mit Allzwecklogik in dem/den Prozessorkern(en) 107 von 1 oder dem Kern 202A-202N wie in 2A durchführen.
  • Ausgabedaten, die von Verarbeitungssträngen generiert wurden, die auf der Grafikkernanordnung 414 ausgeführt werden, können Daten an einen Speicher in einem vereinheitlichten Rückgabepuffer (unified return buffer - URB) 418 ausgeben. Der URB 418 kann Daten für mehrere Verarbeitungsstränge speichern. Bei manchen Ausführungsformen kann der URB 418 zum Senden von Daten zwischen unterschiedlichen Verarbeitungssträngen, die auf der Grafikkernanordnung 414 ausgeführt werden, verwendet werden. Bei manchen Ausführungsformen kann der URB 418 außerdem zur Synchronisierung von Verarbeitungssträngen auf der Grafikkernanordnung und Logik mit fester Funktion in der gemeinsam genutzten Funktionslogik 420 verwendet werden.
  • Bei manchen Ausführungsformen ist die Grafikkernanordnung 414 skalierbar, sodass die Anordnung eine Anzahl von Grafikkernen beinhaltet, von denen jeder eine variable Anzahl von Ausführungseinheiten basierend auf der Soll-Leistung und dem Leistungsniveau der GPE 410 aufweist. Bei einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Die Grafikkernanordnung 414 ist mit gemeinsam genutzter Funktionslogik 420 gekoppelt, die mehrere Ressourcen beinhaltet, die von den Grafikkernen in der Grafikkernanordnung gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen in der gemeinsam genutzten Funktionslogik 420 sind Hardware-Logikeinheiten, die eine spezialisierte ergänzende Funktionalität an die Grafikkernanordnung 414 bereitstellt. Bei verschiedenen Ausführungsformen beinhaltet gemeinsam genutzte Funktionslogik 420 unter anderem Abtastlogik 421, mathematische Logik 422 und Kommunikationslogik zwischen Verarbeitungssträngen (ITC) 423. Außerdem implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 in der gemeinsam genutzten Funktionslogik 420.
  • Eine gemeinsam genutzte Funktion wird zumindest in einem Fall implementiert, in dem die Nachfrage nach einer gegebenen spezialisierten Funktion für eine Einbeziehung in die Grafikkernanordnung 414 nicht ausreicht. Statt dessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eine eigenständige Entität in der gemeinsam genutzten Funktionslogik 420 implementiert und wird von den Ausführungsressourcen in der Grafikkernanordnung 414 gemeinsam genutzt. Der genaue Satz von Funktionen, die in der Grafikkernanordnung 414 gemeinsam genutzt werden und in der Grafikkernanordnung 414 beinhaltet sind, variiert unter den Ausführungsformen. Bei manchen Ausführungsformen können spezifische gemeinsam genutzte Funktionen in der gemeinsam genutzten Funktionslogik 420, die weiträumig von der Grafikkernanordnung 414 verwendet werden, in gemeinsam genutzter Funktionslogik 416 in der Grafikkernanordnung 414 beinhaltet sein. Bei verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik 416 in der Grafikkernanordnung 414 einen Teil oder die ganze Logik in der gemeinsam genutzten Funktionslogik 420 beinhalten. Bei einer Ausführungsform können alle Logikelemente in der gemeinsam genutzten Funktionslogik 420 in der gemeinsam genutzten Funktionslogik 416 der Grafikkernanordnung 414 dupliziert sein. Bei einer Ausführungsform wird die gemeinsam genutzte Funktionslogik 420 zugunsten der gemeinsam genutzten Funktionslogik 416 in der Grafikkernanordnung 414 ausgeschlossen.
  • Ausführungseinheiten
  • 5A-5B stellen Verarbeitungsstrangausführungslogik 500 dar, die eine Anordnung von Verarbeitungselementen, die in einem Grafikprozessorkern eingesetzt werden, gemäß hier beschriebener Ausführungsformen beinhaltet. Elemente der 5A-5B, welche die gleiche Bezugszahl (oder -bezeichnung) wie Elemente einer beliebigen anderen Figur hier aufweisen, können auf ähnliche Weise operieren oder funktionieren, wie an anderer Stelle hier beschrieben ist, sind jedoch nicht darauf beschränkt. 5A-5B stellt einen Überblick über Verarbeitungsstrangausführungslogik 500 dar, die für Hardware-Logik stellvertretend sein kann, die in jedem Subkern 221A-221F von 2B dargestellt ist. 5A stellt eine Ausführungseinheit in einem Allzweck-Grafikprozessor dar, während 5B für eine Ausführungseinheit darstellt, die in einem Rechenbeschleuniger verwendet werden kann.
  • Wie in 5A dargestellt, beinhaltet die Verarbeitungsstrangausführungslogik 500 bei manchen Ausführungsformen einen Schattiererprozessor 502, einen Weiterleiter von Verarbeitungssträngen 504, einen Anweisungscache 506, eine skalierbare Ausführungseinheitsanordnung, die eine Vielzahl von Ausführungseinheiten 508A-508N beinhaltet, einen Abtaster 510, gemeinsam genutzten lokalen Speicher 511, einen Datencache 512 und einen Datenanschluss 514. Bei einer Ausführungsform kann die skalierbare Ausführungseinheitsanordnung dynamisch skalieren, in dem sie eine oder mehrere Ausführungseinheiten (z. B. jede der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N-1 und 508N) basierend auf den Datenverarbeitungsanforderungen einer Arbeitslast aktiviert oder deaktiviert. Bei einer Ausführungsform sind die beinhalteten Komponenten über eine Fabric-Verbindung zusammengeschaltet, die mit jeder der Komponenten verknüpft ist. Bei manchen Ausführungsformen beinhaltet Verarbeitungsstrangausführungslogik 500 eine oder mehrere Verbindungen mit Speicher, wie etwa Systemspeicher oder Cachespeicher, über einen oder mehrere aus Anweisungscache 506, Datenanschluss 514, Abtaster 510 und Ausführungseinheiten 508A-508N. Bei manchen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Allzweck-Datenverarbeitungseinheit, die in der Lage zum Ausführen mehrerer gleichzeitiger Hardware-Verarbeitungsstränge ist, während sie für jeden Verarbeitungsstrang mehrere Datenelemente parallel verarbeitet. Bei verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten 508A-508N skalierbar, um eine beliebige Anzahl von einzelnen Ausführungseinheiten zu beinhalten.
  • Bei manchen Ausführungsformen werden die Ausführungseinheiten 508A-508N hauptsächlich zum Ausführen von Schattiererprogrammen verwendet. Ein Schattiererprozessor 502 kann die verschiedenen Schattiererprogramme verarbeiten und Ausführungsverarbeitungsstränge, die mit den Schattiererprogrammen verknüpft sind, über einen Weiterleiter von Verarbeitungssträngen 504 weiterleiten. Bei einer Ausführungsform beinhaltet der Weiterleiter von Verarbeitungssträngen Logik zum Vermitteln von Verarbeitungsstranginitialisierungsanfragen aus der Grafik- und der Medienpipeline und instantiiert die angeforderten Verarbeitungsstränge auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N. Eine Geometriepipeline kann beispielsweise Vertex-, Tessellations- oder Geometrieschattierer an die Logik zur Ausführung eines Verarbeitungsstrangs zum Verarbeiten weiterleiten. Bei manchen Ausführungsformen kann der Weiterleiter von Verarbeitungssträngen 504 auch Laufzeit-Verarbeitungsstranginitialisierungsanfragen aus den ausgeführten Schattiererprogrammen verarbeiten.
  • Bei manchen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der native Unterstützung für viele standardmäßige 3D-Grafik-Schattierer-Anweisungen beinhaltet, sodass Schattiererprogramme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit minimaler Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertexprogramme, Geometrieprogramme, Vertexschattierer), Pixelverarbeitung (z. B. Pixelschattierer, Fragmentschattierer) und Allzweck-Verarbeitung (z. B. Rechen- und Medienschattierer). Jede der Ausführungseinheiten 508A-508N ist in der Lage zur Einzelanweisung-Mehrfachdaten(single instruction multiple data - SIMD)-Ausführung mit Mehrfachausgabe und ein mehrsträngiger Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Verarbeitungsstrang in jeder Ausführungseinheit weist eine zweckbestimmte Hochbandbreiten-Registerdatei und einen damit verknüpften unabhängigen Verarbeitungsstrangstatus auf. Die Ausführung besteht in einer Mehrfachausgabe pro Taktzyklus an Pipelines, die in der Lage zu Ganzzahl- und Gleitkommaoperationen mit einzelner und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen sind. Während er auf Daten aus dem Speicher oder auf eine der gemeinsam genutzten Funktionen wartet, veranlasst Abhängigkeitslogik in den Ausführungseinheiten 508A-508N, dass ein wartender Verarbeitungsstrang schläft, bis die angeforderten Daten zurückgegeben wurden. Während der wartende Verarbeitungsstrang schläft, können Hardwareressourcen mit dem Verarbeiten anderer Verarbeitungsstränge beschäftigt sein. Zum Beispiel kann eine Ausführungseinheit während einer Verzögerung, die mit einer Vertexschattierer-Operation verknüpft ist, Operationen für einen Pixelschattierer, Fragmentschattierer oder eine andere Art von Schattiererprogramm, einschließlich eines anderen Vertexschattierers, durchführen. Verschiedene Ausführungsformen können eine Ausführung durch Verwendung von Einzelanweisung-Mehrfachstrangverarbeitung (Single Instruction Multiple Thread - SIMT) als eine Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD betreffen. Ein Verweis auf eine(n) SIMD-Kern oder -operation kann auch auf SIMT zutreffen oder auf SIMD in Kombination mit SIMT zutreffen.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N arbeitet an Anordnungen von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße““ oder die Anzahl von Kanälen für die Anweisung. Ein Ausführungskanal ist eine logische Ausführungseinheit für einen Zugriff durch Datenelemente, Maskierung und Flusssteuerung innerhalb von Anweisungen. Die Anzahl von Kanälen kann unabhängig von der Anzahl von physikalischen arithmetischen Logikeinheiten (Arithmetic Logic Units - ALUs) oder Gleitkommaeinheiten (floating point units - FPUs) für einen bestimmten Grafikprozessor sein. Bei manchen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N Ganzzahl- und G leitkomma-Datentypen.
  • Der Ausführungseinheit-Anweisungssatz beinhaltet SIMD-Anweisungen. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert sein und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wenn beispielsweise an einem 256 Bit breiten Vektor gearbeitet wird, werden die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet an dem Vektor als vier separate gepackte 54-Bit-Datenelemente (Datenelemente mit Vierfachwort(Quad-Word - QW)-Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente mit Doppelwort(Double Word - DW)-Größe), sechzehn separate gepackte 16-Bit Datenelemente(Datenelemente mit Wort(Word - W)-Größe) oder zweiunddreißig separate 8-Bit Datenelemente (Datenelemente mit Byte-(B)-Größe). Es sind jedoch verschiedene Vektorbreiten und Registergrößen möglich.
  • Bei einer Ausführungsform können eine oder mehrere Ausführungseinheiten in eine vereinigte Ausführungseinheit 509A-509N kombiniert werden, die Verarbeitungsstrangsteuerlogik (507A-507N) aufweist, die für vereinigte EUs (execution units) üblich ist. Mehrere EUs können zu einer EU-Gruppe vereinigt werden. Jede EU in der vereinigten EU-Gruppe kann konfiguriert sein, einen separaten SIMD-Hardware-Verarbeitungsstrang auszuführen. Die Anzahl von EUs in einer vereinigten EU-Gruppe kann gemäß Ausführungsformen variieren. Außerdem können verschiedene SIMD-Breiten pro EU ausgeführt werden, einschließlich, unter anderem SIMD8, SIMD16 und SIMD32. Jede vereinigte Grafik-Ausführungseinheit 509A-509N beinhaltet mindestens zwei Ausführungseinheiten. Die vereinigte Ausführungseinheit 509A beinhaltet beispielsweise eine erste EU 508A, eine zweite EU 508B und Verarbeitungsstrangsteuerlogik 507A, die der ersten EU 508A und der zweiten EU 508B gemeinsam ist. Die Verarbeitungsstrangsteuerlogik 507A steuert Verarbeitungsstränge, die auf der vereinigten Grafik-Ausführungseinheit 509A ausgeführt werden, was jeder EU in den vereinigten Ausführungseinheiten 509A-509N gestattet, unter Verwenden eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungscaches (z. B. 506) sind in der Verarbeitungsstrangausführungslogik 500 beinhaltet, um Verarbeitungsstranganweisungen für die Ausführungseinheiten zwischenzuspeichern. Bei manchen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 512) beinhaltet, um Verarbeitungsstrangdaten während der Verarbeitungsstrangausführung zwischenzuspeichern. Verarbeitungsstränge, die auf der Ausführungslogik 500 ausgeführt werden, können auch explizit verwaltete Daten in dem gemeinsam genutzten lokalen Speicher 511 speichern. Bei manchen Ausführungsformen ist ein Abtaster 510 beinhaltet, um Texturabtastung für 3D-Operationen und Medienabtastung für Medienoperationen bereitzustellen. Bei manchen Ausführungsformen beinhaltet der Abtaster 510 spezialisierte Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor er die abgetasteten Daten an eine Ausführungseinheit bereitstellt.
  • Während der Ausführung senden die Grafik- und Medienpipelines Verarbeitungsstranginitiationsanfragen an die Verarbeitungsstrangausführungslogik 500 über Verarbeitungsstranginitialisierungs- und Weiterleitungslogik. Sobald eine Gruppe geometrischer Objekte verarbeitet worden ist und in Pixeldaten gerastert wurde, wird Pixelprozessorlogik (z. B. Pixelschattiererlogik, Fragmentschattiererlogik usw.) im Schattiererprozessor 502 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu veranlassen, dass die Ergebnisse an Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Matrizenpuffer usw.) geschrieben werden. Bei manchen Ausführungsformen berechnet ein Pixelschattierer oder ein Fragmentschattierer die Werte der verschiedenen Vertexattribute, die über das gerasterte Objekt interpoliert werden sollen. Bei manchen Ausführungsformen führt die PixelProzessorlogik im Schattiererprozessor 502 dann ein über die Anwendungsprogrammierungsschnittstelle (application programming interface - API) zugeführtes Pixel- oder Fragmentschattiererprogramm aus. Um das Schattiererprogramm auszuführen, leitet der Schattiererprozessor 502 Verarbeitungsstränge an eine Ausführungseinheit (z. B. 508A) über den Weiterleiter von Verarbeitungssträngen 504 weiter. Bei manchen Ausführungsformen verwendet der Schattiererprozessor 502 Texturabtastlogik in dem Abtaster 510, um auf Texturdaten in Texturkarten, die im Speicher gespeichert sind, zuzugreifen. Durch arithmetische Operationen an den Texturdaten und den eingegebenen Geometriedaten werden Pixelfarbdaten für jedes geometrische Fragment berechnet oder es werden ein oder mehrere Pixel von der weiteren Bearbeitung entfernt.
  • Bei manchen Ausführungsformen stellt der Datenanschluss 514 einen Speicherzugriffmechanismus für die Verarbeitungsstrangausführungslogik 500 bereit, um verarbeitete Daten an den Speicher zur weiteren Verarbeitung auf einer Grafikprozessor-Ausgabepipeline auszugeben. Bei manchen Ausführungsformen beinhaltet der Datenanschluss 514 einen oder mehrere Cachespeicher (z. B. Datencache 512) oder ist damit gekoppelt, um Daten für einen Speicherzugriff über den Datenanschluss zwischenzuspeichern.
  • Bei einer Ausführungsform kann die Ausführungslogik 500 auch einen Strahlenverfolger 505 beinhalten, der eine Strahlenverfolgungsbeschleunigungsfunktionalität bereitstellen kann. Der Strahlenverfolger 505 kann einen Strahlenverfolgungsanweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlgenerierung beinhaltet. Der Strahlenverfolgungsanweisungssatz kann ähnlich zu oder verschieden von dem Strahlenverfolgungsanweisungssatz sein, der von den Raytracing-Kernen 245 in 2C unterstützt wird.
  • 5B stellt gemäß Ausführungsformen beispielhafte interne Einzelheiten einer Ausführungseinheit 508 dar. Eine Grafikausführungseinheit 508 kann eine Anweisungsabrufeinheit 537, eine allgemeine Registerdateianordnung (general register file - GRF) 524, eine architektonische Registerdateianordnung (architectural register file - ARF) 526, einen Verarbeitungsstrangvermittler 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkommaeinheiten (floating point units - FPUs) 534 und bei einer Ausführungsform einen Satz von zweckbestimmten ganzzahligen SIMD-ALUs 535 beinhalten. Die GRF 524 und die ARF 526 beinhalten den Satz von allgemeinen Registerdateien und Architektur-Registerdateien, die mit jedem gleichzeitigen Hardware-Verarbeitungsstrang verknüpft sind, der in der Grafik-Ausführungseinheit 508 aktiv sein kann. Bei einer Ausführungsform wird der architektonische Zustand pro Verarbeitungsstrang in der ARF 526 aufrechterhalten, während Daten, die während der Verarbeitungsstrangausführung verwendet werden, in der GRF 524 gespeichert werden. Der Ausführungsstatus jedes Verarbeitungsstrangs, einschließlich der Befehlszeiger für jeden Verarbeitungsstrang, kann in verarbeitungsstrangspezifischen Registern in der ARF 526 gehalten werden.
  • Bei einer Ausführungsform weist die Grafik-Ausführungseinheit 508 eine Architektur auf, die eine Kombination aus simultanem mehrsträngigem Betrieb (Simultaneous Multi-Threading - SMT) und feinkörnigem verschachteltem mehrsträngigem Betrieb (Interleaved Multi-threading - IMT) ist. Die Architektur weist eine modulare Konfiguration auf, die zur Entwicklungszeit basierend auf einer Zielanzahl von gleichzeitigen Verarbeitungssträngen und einer Anzahl von Registern pro Ausführungseinheit fein eingestellt werden kann, wobei Ausführungseinheitsressourcen über Logik verteilt sind, die verwendet wird, um mehrere gleichzeitige Verarbeitungsstränge auszuführen. Die Anzahl von logischen Verarbeitungssträngen, die durch die Grafik-Ausführungseinheit 508 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Verarbeitungssträngen beschränkt und es können jedem Hardware-Verarbeitungsstrang mehrere logische Verarbeitungsstränge zugewiesen werden.
  • Bei einer Ausführungsform kann die Grafik-Ausführungseinheit 508 mehrere Anweisungen gleichzeitig ausgeben, die alle unterschiedliche Anweisungen sein können. Der Verarbeitungsstrangvermittler 522 des Grafik-Ausführungseinheitsverarbeitungsstrangs 508 kann die Anweisungen an eine aus der Sendeeinheit 530, Verzweigungseinheit 532 oder SIMD-FPU(s) 534 zur Ausführung weiterleiten. Jeder Ausführungsverarbeitungsstrang kann auf 128 Allzweckregister in der GRF 524 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als ein SIMD 8-Element-Vektor für 32-Bit-Datenelemente zugänglich sind. Bei einer Ausführungsform hat jeder Ausführungseinheitsverarbeitungsstrang Zugriff auf 4 Kbytes in der GRF 524, obwohl Ausführungsformen nicht so beschränkt sind und größere oder weniger Registerressourcen bei anderen Ausführungsformen bereitgestellt sein können. Bei einer Ausführungsform ist die Grafik-Ausführungseinheit 508 in sieben Hardware-Verarbeitungsstränge partitioniert, die unabhängig Rechenoperationen durchführen können, obwohl die Anzahl von Verarbeitungssträngen pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. Bei einer Ausführungsform werden beispielsweise bis zu 16 Hardware-Verarbeitungsstränge unterstützt. Bei einer Ausführungsform, bei der sieben Verarbeitungsstränge auf 4 Kbytes zugreifen können, kann die GRF 524 insgesamt 28 Kbytes speichern. Wenn 16 Verarbeitungsstränge auf 4Kbytes zugreifen können, kann die GRF 524 insgesamt 64 Kbytes speichern. Flexible Adressierungsmodi können gestatten, dass Register gemeinsam adressiert werden, um effektiv breitere Register zu erstellen oder um regelmäßig aufgeteilte (engl. strided) rechteckige Blockdatenstrukturen darzustellen.
  • Bei einer Ausführungsform werden Speicheroperationen, Abtasteroperationen und andere Systemkommunikationen mit längerer Latenz über „Sende““-Anweisungen weitergeleitet, die von der Nachrichten übertragenden Sendeeinheit 530 ausgeführt werden. Bei einer Ausführungsform werden Verzweigungsanweisungen an eine zweckbestimmte Verzweigungseinheit 532 weitergeleitet, um eine SIMD-Divergenz und schließliche Konvergenz zu ermöglichen.
  • Bei einer Ausführungsform beinhaltet die Grafik-Ausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (floating point unit - FPU(s)) 534, um Gleitkommaoperationen durchzuführen. Bei einer Ausführungsform unterstützen die FPU(s) 534 auch ganzzahlige Berechnungen. Bei einer Ausführungsform können die FPU(s) 534 SIMD bis zu einer Anzahl von M 32-Bit Gleitkomma(oder Ganzzahl)-Operationen ausführen oder SIMD bis zu 2 M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen ausführen. Bei einer Ausführungsform stellt mindestens eine der FPU(s) eine erweiterte Rechenfähigkeit bereit, um transzendente mathematische Funktionen mit hohem Durchsatz und 54-Bit-Gleitkomma mit doppelter Genauigkeit zu unterstützen. Bei manchen Ausführungsformen ist auch ein Satz von 8-Bit-Ganzzahl-SIMD ALUs 535 vorhanden und kann spezifisch optimiert sein, um Operationen durchzuführen, die mit Berechnungen des maschinellen Lernens verknüpft sind.
  • Bei einer Ausführungsform können Anordnungen von mehrfachen Instanzen der Grafik-Ausführungseinheit 508 in einer Grafik-Subkern-Gruppierung (z. B. einem Sub-Slice) instantiiert werden. Zur Skalierbarkeit können Produktentwickler die genaue Anzahl von Ausführungseinheiten pro Subkern-Gruppierung wählen. Bei einer Ausführungsform kann eine Ausführungseinheit 508 Anweisungen über eine Vielzahl von Ausführungskanälen hinweg ausführen. Bei einer weiteren Ausführungsform wird jeder Verarbeitungsstrang, der auf der Grafik-Ausfü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 zur Verwendung in beispielsweise einer Rechenmaschine-Kachel 340A-340D wie in 3C sein, ist jedoch nicht darauf beschränkt. Varianten der Ausführungseinheit 600 können auch in einer Grafikmaschine-Kachel 310A-310D wie in 3B verwendet werden. Bei einer Ausführungsform beinhaltet die Ausführungseinheit 600 eine Verarbeitungsstrang-Steuereinheit 601, eine Verarbeitungsstrang-Statuseinheit 602, eine Befehlsabruf-/vorabruf-Einheit 603 und eine Anweisungsdekodiereinheit 604. Die Ausführungseinheit 600 beinhaltet außerdem eine Registerdatei 606, die Register speichert, die Hardware-Verarbeitungssträngen in der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 beinhaltet außerdem eine Sendeeinheit 607 und eine Verzweigungseinheit 608. Bei einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich arbeiten wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 der Grafik-Ausführungseinheit 508 von 5B.
  • Die Ausführungseinheit 600 beinhaltet auch eine Recheneinheit 610, die mehrere unterschiedliche Typen von funktionellen Einheiten beinhaltet. Bei einer Ausführungsform beinhaltet die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von arithmetischen Logikeinheiten beinhaltet. Die ALU-Einheit 611 kann konfiguriert sein, um 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und -Gleitkommaoperationen durchzuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig durchgeführt werden. Die Recheneinheit 610 kann auch eine systolische Anordnung 612 und eine mathematische Einheit 613 beinhalten. Die systolische Anordnung 612 beinhaltet ein W-breites und D-tiefes Netzwerk von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere datenparallele Operationen auf eine systolische Weise durchzuführen. Bei einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, um Matrixoperationen durchzuführen, wie etwa Matrix-Punktproduktoperationen. Bei einer Ausführungsform unterstützt die systolische Anordnung 612 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. Bei einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, Operationen des maschinellen Lernens zu beschleunigen. Bei derartigen Ausführungsformen kann die systolische Anordnung 612 mit Unterstützung für das Bfloat-16-Bit-Gleitkommaformat konfiguriert sein. Bei einer Ausführungsform kann eine mathematische Einheit 613 beinhaltet sein, um einen spezifischen Untersatz von mathematischen Operationen auf eine effiziente und weniger Leistung erfordernde Weise als die ALU-Einheit 611 durchzuführen. Die mathematische Einheit 613 kann eine Variante von mathematischer Logik beinhalten, die in der gemeinsam genutzten Funktionslogik einer Grafikverarbeitungsmaschine gefunden werden kann, die von anderen Ausführungsformen bereitgestellt ist (z. B. die mathematische Logik 422 der gemeinsam genutzten Funktionslogik 420 von 4). Bei einer Ausführungsform kann die mathematische Einheit 613 konfiguriert sein, um 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Verarbeitungsstrang-Steuereinheit 601 beinhaltet Logik zum Steuern der Ausführung von Verarbeitungssträngen innerhalb der Ausführungseinheit. Die Verarbeitungsstrang-Steuereinheit 601 kann Verarbeitungsstrang-Vermittlungslogik zum Starten, Anhalten und kurzem Unterbrechen der Ausführung von Verarbeitungssträngen in der Ausführungseinheit 600 beinhalten. Die Verarbeitungsstrang-Statuseinheit 602 kann zum Speichern des Verarbeitungsstrangstatus für Verarbeitungsstränge, die zum Ausführen auf der Ausführungseinheit 600 zugewiesen sind, verwendet werden. Das Speichern des Verarbeitungsstrangstatus in der Ausführungseinheit 600 ermöglicht die schnelle kurze Unterbrechung von Verarbeitungssträngen, wenn diese Verarbeitungsstränge blockiert werden oder inaktiv sind. Die Anweisungsabruf-/-vorabrufeinheit 603 kann Anweisungen aus einem Anweisungscache einer Ausführungslogik auf höherer Ebene abrufen (z. B. dem Anweisungscache 506 wie in 5A). Die Anweisungsabruf-/- vorabrufeinheit 603 kann auch Vorabrufanforderungen für Anweisungen herausgeben, um basierend auf einer Analyse aktuell ausgeführter Verarbeitungsstränge in den Anweisungscache geladen zu werden. Die Anweisungsdekodiereinheit 604 kann zum Dekodieren von Anweisungen verwendet werden, die von den Recheneinheiten ausgeführt werden sollen. Bei einer Ausführungsform kann die Anweisungsdekodiereinheit 604 als ein sekundärer Dekodierer zum Dekodieren von komplexen Anweisungen in einzelnen Mikrooperationen verwendet werden.
  • Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die von Hardware-Verarbeitungssträngen verwendet werden kann, die auf der Ausführungseinheit 600 ausgeführt werden. Register in der Registerdatei 606 können über die Logik aufgeteilt werden, die zum Ausführen von mehreren gleichzeitigen Verarbeitungssträngen in der Recheneinheit 610 der Ausführungseinheit 600 verwendet wird. Die Anzahl von logischen Verarbeitungssträngen, die von der Grafik-Ausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Verarbeitungssträngen beschränkt und es können jedem Hardware-Verarbeitungsstrang mehrere logische Verarbeitungsstränge zugewiesen werden. Die Größe der Registerdatei 606 kann basierend auf der Anzahl von unterstützten Hardware-Verarbeitungssträngen über Ausführungsformen hinweg variieren. Bei einer Ausführungsform kann eine Registerumbenennung verwendet werden, um Register Hardware-Verarbeitungssträngen dynamisch zuzuordnen.
  • 7 ist ein Blockschaltplan, der ein Grafikprozessoranweisungsformat 700 gemäß einigen Ausführungsformen darstellt. Bei einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Anweisungssatz, der Anweisungen in mehreren Formaten aufweist. Die durchgehend umrandeten Rahmen stellen die Komponenten dar, die im Allgemeinen in einer Ausführungseinheitsanweisung beinhaltet sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder die nur in einem Untersatz der Anweisungen beinhaltet sind. Bei manchen Ausführungsformen handelt es sich bei dem beschriebenen und dargestellten Anweisungsformat 700 um Makroanweisungen, da es sich um Anweisungen handelt, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die sich aus der Anweisungsdekodierung ergeben, nachdem die Anweisung verarbeitet wurde.
  • Bei manchen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Anweisungen in einem 128-Bit-Anweisungsformat 710. Ein kompaktiertes 64-Bit-Anweisungsformat 730 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl von Operanden verfügbar. Das native 128-Bit-Anweisungsformat 710 stellt einen Zugriff auf alle Anweisungsoptionen bereit, während einige Optionen und Operationen im 64-Bit-Format 730 beschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. Bei manchen Ausführungsformen ist die Anweisung unter Verwenden eines Satzes von Indexwerten in einem Indexfeld 713 teilweise kompaktiert. Die Ausführungseinheit-Hardware bezieht sich auf einen Satz von Kompaktiertabellen basierend auf den Indexwerten und verwendet die Ausgaben der Kompaktiertabelle zum Rekonstruieren einer nativen Anweisung im 128-Bit-Anweisungsformat 710. Es können andere Anweisungsgrößen und -formate verwendet werden.
  • Für jedes Format definiert ein Anweisungs-Opkode 712 die Operation, die die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen die einzelnen Anweisungen parallel über die verschiedenen Datenelemente der einzelnen Operanden durch. Beispielsweise führt die Ausführungseinheit in Reaktion auf eine Hinzufügeanweisung eine gleichzeitige Hinzufügeoperation in jedem Farbkanal durch, der ein Texturelement oder ein Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung in allen Datenkanälen der Operanden aus. Bei manchen Ausführungsformen ermöglicht ein Anweisungssteuerungsfeld 714 eine Steuerung über bestimmte Ausführungsoptionen, wie etwa Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. willkürliches Umordnen (Swizzle)). Bei Anweisungen im 128-Bit-Anweisungsformat 710 beschränkt ein exec-size(Ausführungsgröße)-Feld 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. Bei manchen Ausführungsformen ist das exec-size-Feld 716 für eine Verwendung beim 64-Bit-Kompaktanweisungsformat 730 nicht verfügbar.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden, einschließlich zweier Quelloperanden, src0 720, srcl 722, und ein Ziel 718 auf. Bei manchen Ausführungsformen unterstützen die Ausführungseinheiten duale Zielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden (z. B. SRC2 724) aufweisen, wobei der Anweisungs-Opkode 712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein unmittelbarer (z. B. fest kodierter) Wert sein, der mit der Anweisung mitgeschickt wird.
  • Bei manchen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das beispielsweise angibt, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn ein direkter Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • Bei manchen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. Bei einer Ausführungsform wird der Zugriffsmodus zum Definieren einer Datenzugriffsausrichtung für die Anweisung verwendet. Einige Ausführungsformen unterstützen Zugriffsmodi, die einen ausgerichteten 16-Byte-Zugriffsmodus und einen ausgerichteten 1-Byte-Zugriffsmodus beinhalten, wobei die Byteausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Zum Beispiel kann die Anweisung, wenn sie in einem ersten Modus ist, eine Byteausrichtungs-Adressierung für Quell- und Zieloperanden verwenden, und wenn sie in einem zweiten Modus ist, kann die Anweisung eine ausgerichtete 16-Byte-Adressierung für alle Quell- und Zieloperanden verwenden.
  • Bei einer Ausführungsform bestimmt der Adressmodusteil des Zugriffs-/Adressmodusfelds 726, ob die Anweisung eine direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem direkten Adressfeld in der Anweisung errechnet werden.
  • Bei manchen Ausführungsformen sind Anweisungen basierend auf Opkode-Bit-Feldern 712 gruppiert, um Opkode-Dekodierung 740 zu vereinfachen. Für einen 8-Bit-Opkode gestatten die Bits 4, 5 und 6 der Ausführungseinheit, den Typ des Opkodes zu bestimmen. Die exakte gezeigte Opkodegruppierung ist lediglich als Beispiel angeführt. Bei manchen Ausführungsformen beinhaltet eine Bewegungs- und Logik-Opkodegruppe 742 Datenbewegungs- und Logikanweisungen (z. B. bewegen (mov), vergleichen (cmp)). Bei manchen Ausführungsformen haben die Bewegungs- und Logikgruppe 742 die fünf wichtigsten Bits (most significant bit - MSB) gemeinsam, wobei Bewegungs-(mov-)Anweisungen in Form von 0000xxxxb vorliegen und Logikanweisungen in Form von 0001xxxxb vorliegen. Eine Flusssteuerungsanweisungsgruppe 744 (z. B. rufen, springen (jmp)) beinhaltet Anweisungen in der Form 0010xxxxb (z. B. 0x20). Eine gemischte Anweisungsgruppe 746 beinhaltet eine Mischung aus Anweisungen, einschließlich Synchronisierungsanweisungen (z. B. warte, sende) in der Form 0011xxxxb (z. B. 0x30). Eine parallele mathematische Anweisungsgruppe 748 beinhaltet komponentenbezogene arithmetische Anweisungen (z. B. füge hinzu (add), multipliziere (mul)) in der Form 0100xxxxb (z. B. 0x40). Die parallele mathematische Gruppe 748 führt die arithmetischen Operationen parallel über mehrere Datenkanäle durch. Die mathematische Vektorgruppe 750 beinhaltet arithmetische Anweisungen (z. B. dp4) in der Form 0101xxxxb (z.B. 0x50). Die mathematische Vektorgruppe führt Arithmetik, wie etwa Punktproduktberechnungen an Vektoroperanden, durch. Die dargestellte Opkodedekodierung 740 kann bei einer Ausführungsform verwendet werden, um zu bestimmen, welcher Abschnitt einer Ausführungseinheit zum Ausführen einer dekodierten Anweisung verwendet wird. Einige Anweisungen können beispielsweise als systolische Anweisungen bezeichnet werden, die von einer systolischen Anordnung durchgeführt werden. Andere Anweisungen, wie etwa Strahlenverfolgungsanweisungen (nicht gezeigt) können zu einem RayTracing(Strahlenverfolgungs)-Kern oder zu Strahlenverfolgungslogik in einem Slice oder einer Partition von Ausführungslogik geroutet werden.
  • Grafikpipeline
  • 8 ist ein Blockschaltplan einer anderen Ausführungsform eines Grafikprozessors 800. Elemente von 8, welche die gleiche Bezugszahl (oder -bezeichnung) wie Elemente einer beliebigen anderen Figur hier aufweisen, können auf ähnliche Weise operieren oder funktionieren, wie an anderer Stelle hier beschrieben ist, sind jedoch nicht darauf beschränkt.
  • Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Geometriepipeline 820, eine Medienpipeline 830, eine Anzeigemaschine 840, Verarbeitungsstrangausführungslogik 850 und eine Bildsyntheseausgabepipeline 870. Bei manchen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor innerhalb eines Mehrkernverarbeitungssystems, das einen oder mehrere Allzweckprozessorkerne beinhaltet. Der Grafikprozessor wird durch Registereinträge in ein oder mehrere Kontrollregister (nicht gezeigt) oder über Befehle, die über eine Ringverbindung 802 an den Grafikprozessor 800 ausgegeben werden, gesteuert. Bei manchen Ausführungsformen koppelt die Ringverbindung 802 den Grafikprozessor 800 an andere Verarbeitungskomponenten, wie etwa andere Grafikprozessoren oder Allzweckprozessoren. Befehle von der Ringverbindung 802 werden von einem Befehlsstreamer 803 interpretiert, der Anweisungen an einzelne Komponenten der Geometriepipeline 820 oder der Medienpipeline 830 zuführt.
  • Bei manchen Ausführungsformen leitet der Befehlsstreamer 803 den Betrieb einer Vertexabrufvorrichtung 805, die Vertexdaten aus einem Speicher ausliest und Vertexverarbeitungsbefehle ausführt, die vom Befehlsstreamer 803 bereitgestellt werden. Bei manchen Ausführungsformen stellt die Vertexabrufvorrichtung 805 Vertexdaten für einen Vertexschattierer 807 bereit, der Koordinatenraumtransformationen und Beleuchtungsoperationen an jedem Vertex ausführt. Bei manchen Ausführungsformen führen die Vertexabrufvorrichtung 805 und der Vertexschattierer 807 Vertexverarbeitungsanweisungen aus, indem sie Ausführungsverarbeitungsstränge über einen Weiterleiter von Verarbeitungssträngen 831 an die Ausführungseinheiten 852A-852B weiterleiten.
  • Bei manchen Ausführungsformen sind die Ausführungseinheiten 852A-852B eine Anordnung von Vektorprozessoren, die einen Anweisungssatz zum Durchführen von Grafik- und Medienoperationen aufweist. Bei manchen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen angeschlossenen Ll-Cache 851 auf, der für die jeweilige Anordnung spezifisch ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als Datencache, Anweisungscache oder als einzelner Cache konfiguriert sein, der partitioniert ist, um Daten und Anweisungen in unterschiedlichen Partitionen zu enthalten.
  • Bei manchen Ausführungsformen umfasst die Geometriepipeline 820 Tessellationskomponenten zum Durchführen von hardwarebeschleunigter Tessellation von 3D-Objekten. Bei manchen Ausführungsformen konfiguriert ein programmierbarer Hull-Schattierer 811 die Tessellationsoperationen. Ein programmierbarer Domänen-Schattierer 817 stellt eine Backend-Evaluierung einer Tessellationsausgabe bereit. Eine Tessellationsvorrichtung 813 arbeitet unter Steuerung des Hull-Schattierers 811 und enthält Speziallogik zum Generieren eines Satzes von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell, das als Eingabe in die Geometriepipeline 820 bereitgestellt wird. Wenn keine Tessellation verwendet wird, können bei manchen Ausführungsformen Tessellationskomponenten (z. B. der Hull-Schattierer 811, die Tessellationsvorrichtung 813 und der Domänen-Schattierer 817) umgangen werden.
  • Bei manchen Ausführungsformen können komplette geometrische Objekte von einem Geometrieschattierer 819 über einen oder mehrere Verarbeitungsstränge verarbeitet werden, die zu den Ausführungseinheiten 852A-852B weitergeleitet wurden, oder sie können direkt an den Clipper 829 gehen. Bei manchen Ausführungsformen arbeitet der Geometrieschattierer an ganzen geometrischen Objekten und nicht an Vertices oder Stücken von Vertices, wie in vorangegangenen Stufen der Grafikpipeline. Wenn die Tessellation ausgeschaltet ist, empfängt der Geometrieschattierer 819 Eingaben vom Vertexschattierer 807. Bei manchen Ausführungsformen ist der Geometrieschattierer 819 durch ein Geometrieschattiererprogramm programmierbar, um Geometrie-Tessellation durchzuführen, wenn die Tessellationseinheiten ausgeschaltet sind.
  • Vor der Rasterung verarbeitet ein Clipper 829 Vertexdaten. Der Clipper 829 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper sein, der Clipping- und Geometrieschattierer-Funktionen aufweist. Bei manchen Ausführungsformen leitet eine Rasterungsvorrichtung und Tiefentestkomponente 873 in der Bildsyntheseausgabepipeline 870 Pixelschattierer weiter, um die geometrischen Objekte in ihre pixelweisen Darstellungen umzuwandeln. Bei manchen Ausführungsformen ist eine Pixelschattiererlogik in der Verarbeitungsstrangausführungslogik 850 beinhaltet. Bei manchen Ausführungsformen kann eine Anwendung die Rasterungsvorrichtung und Tiefentestkomponente 873 umgehen und über eine Stream-Out-Einheit 823 auf ungerasterte Vertexdaten zugreifen.
  • Der Grafikprozessor 800 weist einen Verbindungsbus, eine Fabric-Verbindung oder einen anderen Verbindungsmechanismus auf, der ein Übertragen von Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors gestattet. Bei manchen Ausführungsformen sind die Ausführungseinheiten 852A-852B und zugeordnete Logikeinheiten (z. B. ein Ll-Cache 851, ein Abtaster 854, ein Texturcache 858 usw.) über einen Datenanschluss 856 verbunden, um einen Speicherzugriff durchzuführen und mit Bildsyntheseausgabepipelinekomponenten des Prozessors zu kommunizieren. Bei manchen Ausführungsformen weisen der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade auf. Bei einer Ausführungsform kann der Texturcache 858 auch als ein Abtastercache konfiguriert sein.
  • Bei manchen Ausführungsformen enthält die Bildsyntheseausgabepipeline 870 eine Rasterungsvorrichtung und eine Tiefentestkomponente 873, die vertexbasierte Objekte in eine zugeordnete pixelbasierte Darstellung umwandelt. Bei manchen Ausführungsformen beinhaltet die Rasterungsvorrichtungslogik eine Fensterbildungs- /Maskiereinheit zur Durchführung von Dreieck- und Linienrasterung mit fester Funktion. Ein zugeordneter Bildynthesecache 878 und ein Tiefenpuffercache 879 sind bei manchen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten durch, obwohl in manchen Fällen Pixeloperationen, die mit 2D-Operationen zusammenhängen (z. B. Bit Block Image Transfers mit Überblendung) von der 2D-Maschine 841 durchgeführt werden oder zum Anzeigezeitpunkt von der Anzeigesteuerung 843 unter Verwendung von Überlagerungsanzeigeebenen ergänzt werden. Bei manchen Ausführungsformen steht ein gemeinsam genutzter L3-Cache 875 für alle Grafikkomponenten zur Verfügung, der das gemeinsame Nutzen der Daten ohne Einsatz eines Hauptsystemspeichers ermöglicht.
  • Bei manchen Ausführungsformen beinhaltet die Grafikprozessor-Medienpipeline 830 eine Medienmaschine 837 und ein Video-Frontend 834. Bei manchen Ausführungsformen empfängt das Video-Frontend 834 Pipelinebefehle vom Befehlsstreamer 803. Bei manchen Ausführungsformen beinhaltet die Medienpipeline 830 einen separaten Befehlsstreamer. Bei manchen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle, bevor es den Befehl zur Medienmaschine 837 sendet. Bei manchen Ausführungsformen beinhaltet die Medienmaschine 837 Verarbeitungsstranginitialisierungsfunktionalität, um Verarbeitungsstränge zur Weiterleitung an Verarbeitungsstrangausführungslogik 850 über einen Weiterleiter von Verarbeitungssträngen 831 zu initialisieren.
  • Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Anzeigemaschine 840. Bei manchen Ausführungsformen ist die Anzeigemaschine 840 extern vom Prozessor 800 und über die Ringverbindung 802 oder ein(en) anderen/s Verbindungsbus oder -Fabric mit dem Grafikprozessor gekoppelt. Bei manchen Ausführungsformen beinhaltet die Anzeigemaschine 840 eine 2D-Maschine 841 und eine Anzeigesteuerung 843. Bei manchen Ausführungsformen enthält die Anzeigemaschine 840 Speziallogik, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. Bei manchen Ausführungsformen ist die Anzeigesteuerung 843 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt, die eine systemintegrierte Anzeigevorrichtung sein kann, wie etwa in einem Laptopcomputer, oder eine externe Anzeigevorrichtung, die über eine Anzeigevorrichtungsverbindung angeschlossen ist.
  • Bei manchen Ausführungsformen sind die Geometriepipeline 820 und die Medienpipeline 830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht für eine bestimmte Anwendungsprogrammierschnittstelle (application programming interface - API) spezifisch. Bei manchen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Anfragen, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die vom Grafikprozessor verarbeitet werden können. Bei manchen Ausführungsformen werden die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan-Grafik- und Rechen-API, alle von der Khronos Group, unterstützt. Bei manchen Ausführungsformen wird auch die Direct3D-Bibliothek von Microsoft Corporation unterstützt. Bei manchen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Auch die Open Source Computer Vision Library (OpenCV) kann unterstützt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors durchgeführt werden kann.
  • Grafikpipeline-Programmierung
  • 9A ist ein Blockschaltplan, der ein Grafikprozessor-Befehlsformat 900 gemäß einigen Ausführungsformen darstellt. 9B ist ein Blockschaltplan, der eine Grafikprozessor-Befehlssequenz 910 gemäß einer Ausführungsform darstellt. Die Rahmen mit durchgehenden Linien in 9A stellen die Komponenten dar, die im Allgemeinen in einem Grafikbefehl beinhaltet sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder nur in einem Untersatz der Grafikbefehle beinhaltet sind. Das beispielhafte Grafikprozessor-Befehlsformat 900 von 9A beinhaltet Datenfelder zum Identifizieren eines Client 902, eines Befehlsoperationskodes (Opkode) 904 und Daten 906 für den Befehl. Ein Sub-Opkode 905 und eine Befehlsgröße 908 sind in einigen Befehlen ebenfalls enthalten.
  • Bei manchen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Grafikvorrichtung, welche die Befehlsdaten verarbeitet. Bei manchen Ausführungsformen untersucht ein Grafikprozessorbefehlszerteiler das Client-Feld für jeden Befehl, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten zur geeigneten Client-Einheit zu routen. Bei manchen Ausführungsformen beinhalten die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Bildsyntheseeinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit weist eine entsprechende Verarbeitungspipeline auf, welche die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wird, liest die Client-Einheit den Opkode 904 und, falls vorhanden, den Sub-Opkode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen im Datenfeld 906 durch. Bei manchen Befehlen wird erwartet, dass eine explizite Befehlsgröße 908 die Größe des Befehls spezifiziert. Bei manchen Ausführungsformen bestimmt der Befehlszerteiler automatisch die Größe von zumindest einigen der Befehle basierend auf dem Befehlsopkode. Bei manchen Ausführungsformen werden Befehle über Mehrfache eines Doppelworts angeordnet. Es können auch andere Befehlsformate verwendet werden.
  • Das Flussdiagramm in 9B stellt eine beispielhafte Grafikprozessor-Befehlssequenz 910 dar. Bei manchen Ausführungsformen verwendet eine Software oder eine Firmware eines Datenverarbeitungssystems, die eine Ausführungsform eines Grafikprozessors einbindet, eine Version der gezeigten Befehlssequenz, die einen Satz von Grafikoperationen erstellt, ausführt und beendet. Eine beispielhafte Befehlssequenz ist lediglich als Beispiel gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlssequenz beschränkt sind. Darüber hinaus können die Befehle als Befehlsstapel in einer Befehlssequenz ausgegeben werden, sodass der Grafikprozessor die Befehlssequenz in zumindest teilweiser Übereinstimmung verarbeitet.
  • Bei manchen Ausführungsformen kann die Grafikprozessor-Befehlssequenz 910 mit einem Pipelinespülbefehl 912 beginnen, damit jegliche aktive Grafikpipelines die noch unerledigten Befehle für die Pipeline beenden. Bei manchen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medienpipeline 924 nicht gleichzeitig. Die Pipelinespülung wird durchgeführt, um die aktive Grafikpipeline zu veranlassen, jegliche noch unerledigte Befehle zu beenden. In Reaktion auf eine Pipelinespülung pausiert der Befehlszerteiler für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichenmaschinen unerledigte Operationen beenden und die relevanten Lesecaches invalidiert sind. Gegebenenfalls können beliebige Daten im Bildsynthesecache, die als „unsauber‟ markiert sind, in einen Speicher gespült werden. Bei manchen Ausführungsformen kann der Pipelinespülbefehl 912 zur Pipelinesynchronisierung verwendet werden oder bevor der Grafikprozessor in einen Niedrigleistungszustand versetzt wird.
  • Bei manchen Ausführungsformen wird ein Pipelineauswahlbefehl 913 verwendet, wenn eine Befehlssequenz vom Grafikprozessor explizit verlangt, zwischen den Pipelines umzuschalten. Bei manchen Ausführungsformen ist ein Pipelineauswahlbefehl 913 nur einmal innerhalb eines Ausführungskontexts erforderlich, bevor Pipelinebefehle ausgegeben werden, sofern der Kontext nicht die Ausgabe von Befehlen für beide Pipelines darstellt. Bei manchen Ausführungsformen ist ein Pipelinespülbefehl 912 direkt vor einer Pipelineumschaltung durch den Pipelineauswahlbefehl 913 erforderlich.
  • Bei manchen Ausführungsformen konfiguriert ein Pipelinesteuerbefehl 914 eine Grafikpipeline zum Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medienpipeline 924 zu programmieren. Bei manchen Ausführungsformen konfiguriert der Pipelinesteuerbefehl 914 den Pipelinezustand für die aktive Pipeline. Bei einer Ausführungsform wird der Pipelinesteuerbefehl 914 zur Pipelinesynchronisierung und zur Entfernung von Daten aus einem oder mehreren Cachespeichern innerhalb der aktiven Pipeline verwendet, bevor ein Befehlsstapel verarbeitet wird.
  • Bei manchen Ausführungsformen werden Rückgabepufferzustandsbefehle 916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipelineoperationen erfordern die Zuordnung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in welche die Operationen während der Verarbeitung Zwischendaten schreiben. Bei manchen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer zum Speichern von Ausgabedaten und zum Durchführen von Kreuzverarbeitungsstrangkommunikation. Bei manchen Ausführungsformen beinhaltet der Rückgabepufferzustand 916 Auswählen der Größe und der Anzahl von Rückgabepuffern zur Verwendung für einen Satz von Pipelineoperationen.
  • Die restlichen Befehle in der Befehlssequenz unterscheiden sich je nach aktiver Pipeline für Operationen. Basierend auf einer Pipelinebestimmung 920 wird die Befehlssequenz auf die 3D-Pipeline 922, beginnend mit dem 3D-Pipelinezustand 930, oder die Medienpipeline 924, beginnend mit dem Medienpipelinezustand 940, zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipelinezustands 930 beinhalten 3D-Zustandseinstellungsbefehle für einen Vertexpufferzustand, Vertexelementzustand, konstanten Farbzustand, Tiefenpufferzustand und andere Zustandsvariablen, die konfiguriert werden müssen, bevor 3D-Primitiv-Befehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der jeweils verwendeten 3D-API bestimmt. Bei manchen Ausführungsformen sind 3D-Pipelinezustand-Befehle 930 auch in der Lage, bestimmte Pipeline-Elemente selektiv auszuschalten oder zu umgehen, wenn diese Elemente nicht verwendet werden.
  • Bei manchen Ausführungsformen wird ein 3D-Primitiv-Befehl 932 verwendet, um 3D-Primitive zuzustellen, die von der 3D-Pipeline verarbeitet werden sollen. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl 932 zum Grafikprozessor geleitet werden, werden zur Vertexabruffunktion in der Grafikpipeline weitergeleitet. Die Vertexabruffunktion verwendet die 3D-Primitiv-Befehlsdaten 932 zum Generieren von Vertexdatenstrukturen. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. Bei manchen Ausführungsformen wird der 3D-Primitiv-Befehl 932 verwendet, um Vertexoperationen an 3D-Primitiven über Vertexschattierer durchzuführen. Zum Verarbeiten der Vertexschattierer leitet die 3D-Pipeline 922 Schattierer-Ausführungsverarbeitungsstränge an Grafikprozessor-Ausführungseinheiten weiter.
  • Bei manchen Ausführungsformen wird die 3D-Pipeline 922 über einen Ausführungsbefehl 934 oder -ereignis ausgelöst. Bei manchen Ausführungsformen löst eine Registereintragung die Befehlsausführung aus. Bei manchen Ausführungsformen wird die Ausführung durch einen „Go‟- oder „Kick‟-Befehl in der Befehlssequenz ausgelöst. Bei einer Ausführungsform wird die Befehlsausführung unter Verwenden eines Pipelinesynchronisierungsbefehls ausgelöst, um die Befehlssequenz durch die Grafikpipeline zu spülen. Die 3D-Pipeline führt Geometrieverarbeitung für die 3D-Primitive durch. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixelmaschine färbt die resultierenden Pixel ein. Zusätzliche Befehle zur Steuerung von Pixelschattierung und Pixel-Backend-Operationen können ebenfalls für diese Operationen beinhaltet sein.
  • Bei manchen Ausführungsformen folgt die Grafikprozessor-Befehlssequenz 910 dem Pfad der Medienpipeline 924, wenn die Medienoperationen durchgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medienpipeline 924 von den Medien oder den durchzuführenden Rechenoperationen ab. Spezifische Mediendekodierungsoperationen können während der Mediendekodierung an die Medienpipeline abgeladen werden. Bei manchen Ausführungsformen kann die Medienpipeline auch umgangen werden und die Mediendekodierung kann als Ganzes oder zum Teil unter Verwenden von Ressourcen durchgeführt werden, die von einem oder mehreren Allzweck-Prozessorkernen bereitgestellt werden. Bei einer Ausführungsform beinhaltet die Medienpipeline auch Elemente für Allzweck-Grafikprozessoreinheit(GPGPU)-Operationen, wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwenden von rechnerischen Schattiererprogrammen durchzuführen, die nicht explizit mit der Bildsynthese von Grafikprimitiven zusammenhängen.
  • Bei manchen Ausführungsformen ist die Medienpipeline 924 auf ähnliche Weise konfiguriert wie die 3D-Pipeline 922. Ein Satz von Befehlen zum Konfigurieren des Medienpipelinezustands 940 wird vor den Medienobjektbefehlen 942 in eine Befehlswarteschlange weitergeleitet oder gesetzt. Bei manchen Ausführungsformen umfassen die Befehle für den Medienpipelinezustand 940 Daten zum Konfigurieren der Medienpipelineelemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies beinhaltet Daten zum Konfigurieren der Videodekodier- und Videokodierlogik in der Medienpipeline, wie etwa das Kodier- oder Dekodierformat. Bei manchen Ausführungsformen unterstützen die Befehle für den Medienpipelinezustand 940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die eine Gruppe von Zustandseinstellungen enthalten.
  • Bei manchen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline. Die Medienobjekte beinhalten Speicherpuffer, die zu verarbeitende Videodaten enthalten. Bei manchen Ausführungsformen müssen alle Medienpipelinezustände gültig sein, bevor ein Medienobjektbefehl 942 ausgegeben werden kann. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle 942 in eine Warteschlange gestellt sind, wird die Medienpipeline 924 über einen Ausführungsbefehl 944 oder ein äquivalentes Ausführungsereignis (z. B. einen Registereintrag) ausgelöst. Eine Ausgabe der Medienpipeline 924 kann dann von Operationen nachbearbeitet werden, die von der 3D-Pipeline 922 oder der Medienpipeline 924 bereitgestellt werden. Bei manchen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise konfiguriert und ausgeführt wie Medienoperationen.
  • Grafiksoftwarearchitektur
  • 10 stellt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen dar. Bei manchen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030. Bei manchen Ausführungsformen beinhaltet der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Allzweck-Prozessorkern(e) 1034. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils im Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • Bei manchen Ausführungsformen enthält die 3D-Grafikanwendung 1010 ein oder mehrere Schattiererprogramme, die Schattiereranweisungen 1012 beinhalten. Die Schattiererspracheanweisungen können in einer höheren Schattierersprache, wie etwa High-Level Shading Language (HLSL) von Direct3D, OpenGL Shading Language (GLSL) und so weiter, vorliegen. Die Anwendung beinhaltet auch ausführbare Anweisungen 1014 in einer Maschinensprache, die zur Ausführung durch den Allzweck-Prozessorkern 1034 geeignet ist. Die Anwendung beinhaltet auch Grafikobjekte 1016, die durch Vertexdaten definiert sind.
  • Bei manchen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows®-Betriebssystem von Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das auf einer Variante des Linux-Systemkerns basiert. Das Betriebssystem 1020 kann eine Grafik-API 1022, wie etwa die Direct3D-API, die OpenGL-API oder die Vulkan-API, unterstützen. Wenn die Direct3D-API in Verwendung ist, verwendet das Betriebssystem 1020 einen Frontend-Schattiererkompilierer 1024 zum Kompilieren jeglicher Schattiereranweisungen 1012 in HLSL in eine niedrigere Schattierersprache. Die Kompilation kann eine einsatzsynchrone (just-in-time - JIT) Kompilation sein oder die Anwendung kann eine Schattierervorkompilation durchführen. Bei manchen Ausführungsformen werden hohe Schattierer während der Kompilation der 3D-Grafikanwendung 1010 in niedrige Schattierer kompiliert. Bei manchen Ausführungsformen sind die Schattiereranweisungen 1012 in einer Zwischenform bereitgestellt, wie etwa einer Version der von der Vulkan-API verwendeten Standard Portable Intermediate Representation (SPIR).
  • Bei manchen Ausführungsformen enthält ein Benutzermodusgrafiktreiber 1026 einen Backend-Schattiererkompilierer 1027 zum Umwandeln der Schattiereranweisungen 1012 in eine hardwarespezifische Darstellung. Wenn die OpenGL-API in Verwendung ist, werden Schattiereranweisungen 1012 in der hohen GLSL-Sprache zur Kompilation zu einem Benutzermodusgrafiktreiber 1026 geleitet. Bei manchen Ausführungsformen verwendet der Benutzermodusgrafiktreiber 1026 Betriebssystemkernmodusfunktionen 1028 zum Kommunizieren mit einem Systemkernmodusgrafiktreiber 1029. Bei manchen Ausführungsformen kommuniziert der Systemkernmodusgrafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen weiterzuleiten.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch repräsentativen Kode implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik in einem integrierten Schaltkreis, wie etwa einen Prozessor, darstellt und/oder definiert. Das maschinenlesbare Medium kann beispielsweise Anweisungen beinhalten, die unterschiedliche Logik in dem Prozessor darstellen. Wenn sie durch eine Maschine gelesen werden, können die Anweisungen die Maschine veranlassen, die Logik zu erstellen, um die hier beschriebenen Techniken durchzuführen. Solche Repräsentationen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für einen integrierten Schaltkreis, die auf einem physischen, maschinenlesbaren Medium als Hardwaremodell gespeichert sein können, das die Struktur des integrierten Schaltkreises beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Produktionseinrichtungen geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die den integrierten Schaltkreis erstellen. Der integrierte Schaltkreis kann derart erstellt werden, dass die Schaltung Operationen, die im Zusammenhang mit einer der hier beschriebenen Ausführungsformen beschrieben sind, durchführt.
  • 11A ist ein Blockschaltplan, der ein IP-Core-Entwicklungssystem 1100 darstellt, das zum Fertigen eines integrierten Schaltkreises verwendet werden kann, um Operationen gemäß einer Ausführungsform durchzuführen. Das IP-Core-Entwicklungssystem 1100 kann zum Generieren von modularen, wiederverwendbaren Designs verwendet werden, die in einem größeren Design untergebracht werden können oder zum Errichten eines gesamten integrierten Schaltkreises (z. B. einem auf einem SOC integrierten Schaltkreis) verwendet werden können. Eine Entwicklungsstätte 1130 kann eine Softwaresimulation 1110 eines IP-Kern-Architektur-Designs in einer hohen Programmiersprache (z. B. C/C++) generieren. Die Softwaresimulation 1110 kann zum Entwickeln, Testen und Verifizieren des Verhaltens des IP-Kerns unter Verwenden eines Simulationsmodells 1112 verwendet werden. Das Simulationsmodell 1112 kann Simulationen der Funktion, des Verhaltens und/oder des Zeitverlaufs beinhalten. Ein Registertransferebenen(register transfer level - RTL)-Design 1115 kann dann aus dem Simulationsmodell 1112 geschaffen oder synthetisiert werden. Das RTL-Design 1115 ist eine Abstraktion des Verhaltens des integrierten Schaltkreises, das den Fluss digitaler Signale zwischen Hardwareregistern modelliert, einschließlich der zugehörigen Logik, die unter Verwenden der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu einem RTL-Design 1115 können auch Designs auf niedrigeren Logikebenen oder Transistorebenen erzeugt, entwickelt oder synthetisiert werden. Somit können die spezifischen Einzelheiten des/der Anfangsdesigns und -simulation variieren.
  • Das RTL-Design 1115 oder sein Äquivalent kann ferner von der Entwicklungsstätte zu einem Hardware-Modell 1120 synthetisiert werden, das in einer Hardwarebeschreibungssprache(hardware description language - HDL) oder einer anderen Darstellung von physikalischen Designdaten vorliegen kann. Die HDL kann ferner simuliert oder getestet werden, um das IP-Kern-Design zu verifizieren. Das IP-Kern-Design kann zur Zuführung an eine externe Produktionsstätte 1165 unter Verwenden eines nichtflüchtigen Speichers 1140 (z. B. einer Festplatte, eines Flash-Speichers oder jedes nichtflüchtigen Speichermediums) gespeichert werden. Alternativ dazu kann das IP-Kern-Design über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 (z. B. über das Internet) übertragen werden. Die Produktionsstätte 1165 kann dann einen integrierten Schaltkreis erstellen, der zumindest teilweise auf dem IP-Kern-Design basiert. Der erstellte integrierte Schaltkreis kann konfiguriert sein, um Operationen gemäß zumindest einer hier beschriebenen Ausführungsform durchzuführen.
  • 11B stellt eine seitliche Querschnittsansicht einer Modulbaugruppe eines integrierten Schaltkreises 1170 gemäß einigen hier beschriebenen Ausführungsformen dar. Die Modulbaugruppe eines integrierten Schaltkreises 1170 stellt eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen wie hier beschrieben dar. Die Modulbaugruppe 1170 beinhaltet mehrere Einheiten von Hardware-Logik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann zumindest teilweise in konfigurierbarer Logikhardware oder Logikhardware mit fester Funktion implementiert sein und kann einen oder mehrere Abschnitte von einem aus dem/den Prozessorkern(en), Grafikprozessor(en) oder anderen hier beschriebenen Beschleunigervorrichtungen beinhalten. Jede Logikeinheit 1172, 1174 kann in einem Halbleiterplättchen implementiert und mit dem Substrat 1180 über eine Verbindungsstruktur 1173 gekoppelt sein. Die Verbindungsstruktur 1173 kann konfiguriert sein, um elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu routen, und kann Verbindungen, wie etwa, unter anderem, Kontaktierhügel (engl. bumps) oder Säulen (engl. Pillars) beinhalten. Bei manchen Ausführungsformen kann die Verbindungsstruktur 1173 konfiguriert sein, um elektrische Signale zu routen, wie etwa, beispielsweise Eingabe/Ausgabe(E/A)-Signale und/oder Strom- oder Massesignale, die mit dem Betrieb der Logik 1172, 1174 verknüpft sind. Bei manchen Ausführungsformen ist das Substrat 1180 ein epoxidharzbasiertes Schichtsubstrat. Das Substrat 1180 kann bei anderen Ausführungsformen andere geeignete Typen von Substraten beinhalten. Die Modulbaugruppe 1170 kann mit anderen elektrischen Vorrichtungen über eine Modulverbindung 1183 verbunden sein. Die Modulverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen, wie etwa eine Hauptplatine, einen anderen Chipsatz oder ein Multi-Chip-Modul, zu routen.
  • Bei manchen Ausführungsformen sind die Logikeinheiten 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die konfiguriert ist, elektrische Signale zwischen der Logik 1172, 1174 zu routen. Die Brücke 1182 kann eine dichte Verbindungsstruktur sein, die eine Strecke für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial zusammengestellt ist. Elektrische Routing-Funktionen können auf dem Brückensubstrat ausgebildet sein, um eine Verbindung von Chip zu Chip zwischen der Logik 1172, 1174 bereitzustellen.
  • Obwohl zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 dargestellt sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Halbleiterplättchen beinhalten. Das eine oder die mehreren Halbleiterplättchen können durch keine oder mehrere Brücken verbunden sein, da die Brücke 1182 ausgeschlossen werden kann, wenn sich die Logik auf einem einzelnen Halbleiterplättchen befindet. Alternativ dazu können mehrere Halbleiterplättchen oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Außerdem können mehrere Logikeinheiten, Halbleiterplättchen und Brücken miteinander in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, verbunden sein.
  • 11C stellt eine Modulbaugruppe 1190 dar, die mehrere Einheiten von Hardware-Logik-Chiplets beinhaltet, die mit einem Substrat 1180 (z. B. einem Basis-Halbleiterplättchen) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger wie hier beschrieben können aus verschiedenen Silizium-Chiplets aufgebaut sein, die separat gefertigt werden. In diesem Zusammenhang ist ein Chiplet ein zumindest teilweise gepackter integrierter Schaltkreis, der distinkte Logikeinheiten beinhaltet, die mit anderen Chiplets in ein größeres Modul zusammengebaut werden können. Ein davon verschiedener Satz von Chiplets mit anderer IP-Kern-Logik kann in eine einzelne Vorrichtung zusammengebaut werden. Außerdem können die Chiplets in ein Basis-Halbleiterplättchen oder Basis-Chiplet unter Verwenden von aktiver Interposer-Technik integriert werden. Die hier beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den unterschiedlichen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwenden unterschiedlicher Verarbeitungstechnologien gefertigt und während der Fertigung zusammengestellt werden, wodurch die Komplexität des Konvergierens von mehreren IPs, insbesondere auf einem großen SoC mit IPs von unterschiedlichen Typen, auf den gleichen Fertigungsprozess vermeidet. Das Ermöglichen der Verwendung mehrerer Verarbeitungstechnologien verbessert die Markteinführungszeit und bietet eine kostengünstige Möglichkeit zur Herstellung mehrerer Produkt-Artikelnummern (stock keeping units - SKUs. Außerdem eignen sich die untergliederten IPs eher dazu, unabhängig voneinander leistungsgesteuert zu werden, Komponenten, die bei einer gegebenen Arbeitslast nicht in Verwendung sind, können abgeschaltet werden, was den gesamten Stromverbrauch reduziert.
  • Die Hardware-Logik-Chiplets können Spezialzweck-Hardware-Logik-Chiplets 1172, Logik- oder E/A-Chiplets 1174 und/oder Speicher-Chiplets 1175 beinhalten. Die Hardware-Logik-Chiplets 1172 und Logik- oder E/A-Chiplets 1174 können zumindest teilweise in Hardware mit konfigurierbarer Logik oder mit Logik mit fester Funktionalität implementiert werden und können einen oder mehrere Abschnitte eines aus dem/den hier beschriebenen Prozessorkern(en), Grafikprozessor(en), Parallelprozessoren oder anderen Beschleunigervorrichtungen beinhalten. Die Speicher-Chiplets 1175 können DRAM- (z. B. GDDR, HBM) Speicher oder Cache- (SRAM) Speicher sein.
  • Jedes Chiplet kann als separates Halbleiterplättchen erstellt werden und mit dem Substrat 1180 über eine Verbindungsstruktur 1173 gekoppelt werden. Die Verbindungsstruktur 1173 kann konfiguriert sein, um elektrische Signale zwischen den verschiedenen Chiplets und der Logik innerhalb des Substrats 1180 zu routen. Die Verbindungsstruktur 1173 kann Verbindungen, wie etwa, unter anderem, Kontakthügel oder Säulen, beinhalten. Bei manchen Ausführungsformen kann die Verbindungsstruktur 1173 konfiguriert sein, elektrische Signale zu routen, wie etwa, beispielsweise, Eingabe/Ausgabe(E/A)-Signale und/oder Strom- oder Massesignale, die mit dem Betrieb der Logik-, E/A- und Speicher-Chiplets verknüpft sind.
  • Bei manchen Ausführungsformen ist das Substrat 1180 ein epoxidharzbasiertes Schichtsubstrat. Das Substrat 1180 kann bei anderen Ausführungsformen andere geeignete Typen von Substraten beinhalten. Die Modulbaugruppe 1190 kann mit anderen elektrischen Vorrichtungen über eine Modulverbindung 1183 verbunden sein. Die Modulverbindung 1183 kann mit einer Oberfläche des Substrats 1180 verbunden sein, um elektrische Signale an andere elektrische Vorrichtungen zu routen, wie etwa eine Hauptplatine, einen anderen Chipsatz oder ein Multi-Chip-Modul.
  • Bei manchen Ausführungsformen können ein Logik- oder E/A-Chiplet 1174 und ein Speicher-Chiplet 1175 elektrisch über eine Brücke 1187 gekoppelt sein, die konfiguriert ist, elektrische Signale zwischen dem Logik- oder E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 zu routen. Die Brücke 1187 kann eine dichte Verbindungsstruktur sein, die eine Strecke für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial zusammengestellt ist. Elektrische Routing-Merkmale können an dem Brückensubstrat ausgebildet sein, um eine Verbindung von Chip zu Chip zwischen dem Logik- oder E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als Siliziumbrücke oder als Verbindungsbrücke bezeichnet werden. Die Brücke 1187 ist bei manchen Ausführungsformen beispielsweise eine eingebettete Brücke zur Verbindung mehrerer Halbleiterplättchen (Embedded Multi-die Interconnect Bridge - EMIB). Bei manchen Ausführungsformen kann die Brücke 1187 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 1180 kann Hardware-Komponenten für E/A 1191, Cachespeicher 1192 und andere Hardware-Logik 1193 beinhalten. Ein Fabric 1185 kann in dem Substrat 1180 eingebettet sein, um eine Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 1191, 1193 innerhalb des Substrats 1180 zu ermöglichen. Bei einer Ausführungsform können E/A 1191, Fabric 1185, Cache, Brücke und andere Hardware-Logik 1193 in ein Basis-Halbleiterplättchen integriert sein, das oben auf das Substrat 1180 geschichtet ist.
  • Bei verschiedenen Ausführungsformen kann eine Modulbaugruppe 1190 eine kleinere oder größere Anzahl von Komponenten und Chiplets, die durch ein Fabric 1185 oder eine oder mehrere Brücken 1187 verbunden sind, beinhalten. Die Chiplets innerhalb der Modulbaugruppe 1190 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um eine Punkt-zu-Punkt-Verbindung zwischen beispielsweise Logik- oder E/A-Chiplets und Speicher-Chiplets zu ermöglichen. Das Fabric 1185 kann zum Verbinden der verschiedenen Logik- und/oder E/A-Chiplets (z. B. Chiplets 1172, 1174, 1191, 1193) mit anderen Logik- und/oder E/A-Chiplets verwendet werden. Bei einer Ausführungsform kann der Cachespeicher 1192 innerhalb des Substrats als globaler Cache für die Modulbaugruppe 1190, einen Teil eines verteilten globalen Caches oder als zweckbestimmter Cache für das Fabric 1185 fungieren.
  • 11D stellt eine Modulbaugruppe 1194 dar, die gemäß einer Ausführungsform austauschbare Chiplets 1195 beinhaltet. 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ückenverbindung 1197 gekoppelt werden, die ähnlich den anderen hier beschriebenen Brückenverbindungen sein kann und beispielsweise ein EMIB sein kann. Speicher-Chiplets können auch über eine Brückenverbindung mit Logik- oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über eine Fabric-Verbindung kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für eins aus Logik oder E/A oder Speicher/Cache unterstützen.
  • Bei einer Ausführungsform können SRAM- und Auflade(power delivery)-Schaltkreise in einem oder mehreren der Basis-Chiplets 1196, 1198 erstellt werden, die, bezogen auf die austauschbaren Chiplets 1195, die oben auf die Basis-Chiplets gestapelt werden, unter Verwenden einer anderen Verarbeitungstechnologie erstellt werden können. Die Basis-Chiplets 1196, 1198 können beispielsweise unter Verwenden einer Technik für größere Prozesse gefertigt werden, wohingegen die austauschbaren Chiplets unter Verwenden einer Technik für kleinere Prozesse hergestellt werden können. Eins oder mehrere der austauschbaren Chiplets 1195 können Speicher- (z.B. DRAM) Chiplets sein. Unterschiedliche Speicherdichten können für die Modulbaugruppe 1194 basierend auf der Leistung und/oder den Eigenschaften, die für das Produkt, das die Modulbaugruppe 1194 verwendet, anvisiert werden, ausgewählt werden. Außerdem können Logik-Chiplets mit einer anderen Anzahl oder Typ von funktionellen Einheiten zum Montagezeitpunkt basierend auf der für das Produkt anvisierten Leistung und/oder Eigenschaften ausgewählt werden. Außerdem können Chiplets, die IP-Logik-Kerne unterschiedlicher Typen enthalten, in die Steckplätze für austauschbare Chiplets eingesetzt werden, wodurch hybride Prozessor-Designs ermöglicht werden, die IP-Blöcke mit unterschiedlicher Technologie frei kombinierbar mischen können.
  • Beispielhafter integrierter Schaltkreis auf einem Ein-Chip-System
  • 12-13 stellen beispielhafte integrierte Schaltkreise und zugehörige Grafikprozessoren dar, die unter Verwenden von einem oder mehreren IP-Kernen gemäß verschiedenen hier beschriebenen Ausführungsformen erstellt werden können. Zusätzlich zu dem Dargestellten kann/können andere Logik und Schaltkreise beinhaltet sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripheriegeräte-Schnittstellensteuerungen oder Allzweck-Prozessorkerne.
  • 12 ist ein Blockschaltplan, der einen beispielhaften integrierten Schaltkreis auf einem Ein-Chip-System 1200 darstellt, der unter Verwenden von einem oder mehreren IP-Kernen gemäß einer Ausführungsform erstellt werden kann. Der beispielhafte integrierte Schaltkreis 1200 beinhaltet einen oder mehrere Anwendungsprozessor(en) 1205 (z. B. CPUs), mindestens einen Grafikprozessor 1210, und kann außerdem einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 beinhalten, von denen jeder ein modularer IP-Kern von der gleichen oder mehreren unterschiedlichen Entwicklungsstätten sein kann. Der integrierte Schaltkreis 1200 beinhaltet eine Peripheriegeräte- oder Bus-Logik, die eine USB-Steuerung 1225, eine UART-Steuerung 1230, eine SPI/SDIO-Steuerung 1235 und eine I2S/I2C-Steuerung 1240 beinhalten. Außerdem kann der integrierte Schaltkreis eine Anzeigevorrichtung 1245 beinhalten, die mit einer oder mehreren aus einer hochauflösenden Multimedia-Schnittstellen(high definition multimedia interface - HDMI)-Steuerung 1250 und einer Mobile Industry Processor Interface(MIPI)-Anzeigeschnittstelle 1255 gekoppelt ist. Speicher kann von einem Flash-Speichersubsystem 1260 bereitgestellt sein, das einen Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. Eine Speicherschnittstelle kann über eine Speichersteuerung 1265 für einen Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltkreise beinhalten zusätzlich eine eingebettete Sicherheitsmaschine 1270.
  • 13-14 sind Blockschaltpläne, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hier beschriebenen Ausführungsformen darstellen. 13 stellt einen beispielhaften Grafikprozessor 1310 eines integrierten Schaltkreises auf einem Ein-Chip-System dar, der unter Verwenden von einem oder mehreren IP-Kernen gemäß einer Ausführungsform erstellt werden kann. 13 stellt einen zusätzlichen beispielhaften Grafikprozessor 1340 eines integrierten Schaltkreises auf einem Ein-Chip-System dar, der unter Verwenden von einem oder mehreren IP-Kernen gemäß einer Ausführungsform erstellt werden kann. Der Grafikprozessor 1310 von 13 ist ein Beispiel für einen Grafikprozessorkern mit einer niedrigen Leistung. Der Grafikprozessor 1340 von 13 ist ein Beispiel für einen Grafikprozessorkern mit einer höheren Leistung. Die einzelnen Grafikprozessoren 1310, 1340 können Varianten des Grafikprozessors 1210 von 12 sein.
  • Wie in 13 gezeigt, beinhaltet der Grafikprozessor 1310 einen Vertexprozessor 1305 und einen oder mehrere Fragmentprozessor(en) 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D bis zu 1315N-1 und 1315N). Der Grafikprozessor 1310 kann unterschiedliche Schattiererprogramme über separate Logik ausführen, sodass der Vertexprozessor 1305 optimiert wird, um Operationen für Vertexschattiererprogramme auszuführen, während der eine oder die mehreren Fragmentprozessor(en) 1315A-1315N Fragment- (z. B. Pixel-) Schattierungsoperationen für Fragment- oder Pixelschattiererprogramme ausführen. Der Vertexprozessor 1305 führt die Vertexverarbeitungsstufe der 3D-Grafikpipeline durch und generiert Primitiv- und Vertexdaten. Der/die Fragmentprozessor(en) 1315A-1315N verwenden die Primitiv- und Vertexdaten, die von dem Vertexprozessor 1305 generiert wurden, um einen Einzelbildpuffer zu erzeugen, der an einer Anzeigevorrichtung angezeigt wird. Bei einer Ausführungsform ist der/sind die Fragmentprozessor(en) 1315A-1315N optimiert, um Fragmentschattiererprogramme, wie in der OpenGL-API bereitgestellt, auszuführen, die verwendet werden können, um ähnliche Operationen wie ein Pixelschattiererprogramm, wie es in Direct 3D-API bereitgestellt ist, durchzuführen.
  • Der Grafikprozessor 1310 beinhaltet außerdem eine oder mehrere Speicherverwaltungseinheiten (MMUs) 1320A-1320B, Cache(s) 1325A-1325B und (eine) Schaltkreisverbindung(en) 1330A-1330B. Die eine oder die mehreren MMU(s) 1320A-1320B stellen virtuelle zu physikalischer Adressabbildung für den Grafikprozessor 1310 bereit, einschließlich für den Vertex-Prozessor 1305 und/oder den/die Fragment-Prozessor(en) 1315A-1315N, 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. Bei einer Ausführungsform können die eine oder die mehreren MMU(s) 1320A-1320B mit anderen MMUs innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die mit dem einen oder den mehreren Anwendungsprozessor(en) 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 verknüpft sind, sodass jeder Prozessor 1205-1220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem partizipieren kann. Gemäß Ausführungsformen ermöglicht/en die eine oder die mehrere(n) Schaltkreisverbindung(en) 1330A-1330B, dass der Grafikprozessor 1310 mit anderen IP-Kernen in dem SoC eine Schnittstelle bilden kann, entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
  • Wie in 14 gezeigt, beinhaltet der Grafikprozessor 1340 die eine oder die mehreren MMU(s) 1320A-1320B, Cache(s) 1325A-1325B und Schaltkreisverbindung(en) 1330A-1330B des Grafikprozessors 1310 von 13. Der Grafikprozessor 1340 beinhaltet einen oder mehrere Schattiererkern(e) 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis zu 1355N-1 und 1355N), wodurch eine vereinheitlichte Schattiererkernarchitektur bereitgestellt ist, bei der ein einzelner Kern oder Typ von Kern alle Typen von programmierbarem Schattiererkode ausführen kann, einschließlich Schattiererprogrammkode zum Implementieren von Vertexschattierern, Fragmentschattierern und/oder Rechenschattierern. Die genaue Anzahl von vorhandenen Schattiererkernen kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem beinhaltet der Grafikprozessor 1340 einen Verwalter für Aufgaben zwischen den Kernen (inter-core task manager) 1345, der als Weiterleiter von Verarbeitungssträngen agiert, um Ausführungsverarbeitungsstränge an einen oder mehrere Schattiererkerne 1355A-1355N und eine Kacheleinheit 1358 weiterzuleiten, um Kacheloperationen für eine kachelbasierte Bildsynthese zu beschleunigen, wobei Bildsyntheseoperationen für eine Szene in Bildraum aufgeteilt werden, beispielsweise zum Ausnutzen einer lokalen räumlichen Kohärenz innerhalb einer Szene oder zum Optimieren der Verwendung von internen Caches.
  • EINRICHTUNG UND VERFAHREN ZUR MULTI-ADAPTER UND/ODER MULTI-DURCHLAUFKODIERUNG
  • Medienkodierung von hoher Qualität ist in vielen wichtigen Client- und Serveranwendungsfällen, wie etwa Transkodierung, Videobearbeitung, Miracast, Übertragung von Videospielinhalten (engl. game streaming) und digitaler Videoaufzeichnung von Spielen (digital video recording - DVR) zu einer wichtigen Funktion geworden. Eine Möglichkeit, die Qualität des kodierten Datenstroms zu verbessern, ist das Aktivieren einer Look Ahead (LA)-Funktionalität, die einen ersten Kodierungsdurchlauf durchführt, der die Komplexität, relative Bewegung und Abhängigkeiten eines Einzelbilds vor dem Kodieren schätzt. Aus diesem Grund wird LA manchmal als „2-Durchlauf“-Kodierung bezeichnet. Die Tiefe der Look-Ahead-Warteschlange kann von 1 Einzelbild bis zu vielen (z. B. 60 Einzelbilder) reichen. Diese Informationen können verwendet werden, um dem Kodierer zugeführt zu werden, um eine bessere Genauigkeit und Qualität der Ratensteuerung zu ergeben. Es gibt jedoch Verwendungen, bei denen die Latenzstrafe eines zusätzlichen Look-Ahead-Durchlaufs nicht erwünscht ist.
  • Eine Ausführungsform der Erfindung verbessert die Qualität des kodierten Datenstroms beträchtlich, ohne die Latenzstrafe, die mit Look Ahead verknüpft ist. Bezug nehmend auf 15 erfordert diese Ausführungsform keine Änderungen an bestehenden Anwendungen 1501, da sie eine Unterstützung über eine anwendungsagnostische Kodierungsbibliothek 1502 anstrebt, welche die zugrundeliegenden Hardwaredetails von den Anwendungen abstrahiert. Bei der dargestellten Ausführungsform ist die Kodierungsbibliothek 1502 mit einem Dual-Adaptermodul 1504 konfiguriert, um Kodierungs-/Dekodierungsoperationen über mehrere Grafikprozessoren zu verteilen. Bei der in 15 gezeigten Ausführungsform wird die Kodierungs-/Dekodierungsarbeit zwischen einem diskreten Grafikprozessor 1505 (z. B. einer in das System über PCIe oder eine andere Hochgeschwindigkeitsverbindung integrierten GPU) und einem integrierten Grafikprozessor 1506 (z. B. einer auf einem gemeinsamen Halbleiterplättchen mit der Host-CPU integrierten GPU) verteilt. Bei einer Ausführungsform ist der integrierte Grafikprozessor 1506 beispielsweise der in 2A gezeigte Grafikprozessor 208 und der diskrete Grafikprozessor 1505 ist die in 2C gezeigte GPU 239.
  • Insbesondere werden bei einer Ausführungsform Erstdurchlauf-Vorkodierungsoperationen an die Medienverarbeitungsschaltung 1521 des integrierten Grafikprozessors 1506 weitergeleitet und die eigentlichen Kodierungsoperationen werden an die Medienverarbeitungsschaltung 1511 des diskreten Grafikprozessors 1505 (unter Verwenden der Ergebnisse der Vorkodierungsoperationen) weitergeleitet. Bei einer Ausführungsform leitet das Dual-Adaptermodul 1504, das der Kodierungsbibliothek 1502 hinzugefügt wurde, den Vorausberechnungs(Look Ahead - LA)-Durchlauf an die GPU mit niedrigerer Leistung weiter, wie etwa die integrierte GPU (iGPU) 1506, welche Speicherzuordnungs- und Synchronisierungsoperationen zwischen sich selbst und der diskreten GPU (dGPU) 1505 bewerkstelligt, die dann die vollständige Kodierung durchführt.
  • Es ist zu beachten, dass die Grafikprozessoren 1505-1506 und die Medienverarbeitungspipelines 1511-1521 weder symmetrisch noch von der gleichen Generation zu sein brauchen. Somit können die Ausführungsformen der Erfindung viele Kombinationen unterstützen, wobei unterschiedliche integrierte und diskrete Grafikprozessoren frei kombiniert gemischt werden.
  • 16 stellt den Datenfluss zwischen den Adaptern bei einer Ausführungsform dar. Bei dieser Ausführungsform kann der diskrete Grafikprozessor (dGPU) 1505 auf einer Grafikkarte integriert sein und mit einem lokalen Videospeicher 1691 gekoppelt sein. Die Grafikkarte kann eine E/A-Schnittstelle, wie etwa eine PCIe-Schnittstelle, beinhalten, um die dGPU mit der iGPU 1506 zu koppeln. Die iGPU 1506 kann auf einem Prozessorchip mit einer Vielzahl von CPU-Kernen und einer Systemspeichersteuerung integriert sein, um die iGPU mit einer Systemspeichervorrichtung 1690 zu koppeln. Bei einer Ausführungsform kann die iGPU auf den Gerätespeicher 1691 zugreifen und die dGPU 1505 kann auf den Systemspeicher 1690 über PCIe-Verknüpfungen (oder andere Typen von E/A-Verknüpfungen) zugreifen. Es wird jedoch angemerkt, dass die der Erfindung zugrundeliegenden Prinzipien auf jedem System mit dualen Grafikprozessoren oder mit einem Grafikprozessor und einem anderen Typ von Prozessor (z. B. einer CPU) implementiert werden können.
  • In 16 hat die Anwendung 1601 eine Transkodierungsoperation angefordert, bei der ein Advanced Video Coding (AVC)-Videostream 1630 in einen High Efficiency Video Coding (HEVC)-Videostream 1631 transkodiert wird. Die Anwendung 1601 öffnet (eine) gleichzeitig ablaufende Sitzung(en) 1605 mit sowohl der iGPU 1506 als auch der dGPU 1505 gemäß dem Dual-Adaptermodul 1504. Der AVC-Videoinhalt 1630 wird in einem ersten Speicherbereich 1690 gespeichert wie die ausgeführte Anwendung 1601 und Abschnitte der Kodierungsbibliothek 1502. Der HEVC-Inhalt 1631 kann in demselben Speicherbereich 1690 gespeichert werden oder kann in einem anderen Speicherbereich 1691 (z. B. in einer Grafikspeichervorrichtung, die auf der Grafikkarte der dGPU 1505 konfiguriert ist) gespeichert werden.
  • Ein erster Satz von Befehlen wird an die iGPU 1506 über die Sitzung 1605 herausgegeben, um Look-Ahead(LA)-Operationen durchzuführen. In Reaktion darauf dekodiert ein AVC-Dekodierer 1620 eine spezifizierte Anzahl von Einzelbildern des AVC-Videos 1630. Der HEVC-Kodierer 1625 evaluiert dann die Einzelbildsequenz, um LA-Statistiken zu generieren, die in einem LA-Statistikpuffer 1615 gespeichert werden, der ein Raum in einem der Speicher 1690-1691, ein Cache in der Cachehierarchie, ein Satz von Registern und/oder jeder andere Typ von Speicher sein kann. Die LA-Statistiken werden aus dem LA-Puffer 1615 ausgelesen und von einem HEVC-Kodierer 1615 auf der dGPU 1505 verwendet, um den HEVC-Videostream 1631 effizient zu kodieren. Der HEVC-Kodierer 1615 kann beispielsweise Aktivitäts-/Bewegungsdaten verwenden, die in den Statistiken beinhaltet sind, um zu bestimmen, wann ein neues Schlüsselbild (engl. intra-coded frame) (oder ein ähnlicher Einzelbildtyp) generiert werden soll, und kann die Statistik verwenden, um eine passende Einzelbild-/Puffergröße zu bestimmen.
  • Verschiedene Statistiktypen können von dem HEVC-Kodierer 1615 extrahiert und zum Kodieren der HEVC-Einzelbildsequenz verwendet werden, einschließlich, unter anderem, der Version des sich in Verwendung befindlichen Kodierungsstandards, eines oder mehrerer Synchronisierungszäune bzw. -gatter zum Angeben von Abhängigkeiten zwischen oder innerhalb von Einzelbildern, Schlüsselbildkodierungsdaten, die den Inhalt einzelner Einzelbilder betreffen, einer Ziel-Einzelbildgröße und/oder -Puffergröße und/oder Aktivitätsniveaus (z. B. einer detektierten Bewegung) unter den Einzelbildern.
  • Ungeachtet der gesammelten spezifischen LA-Statistik verwendet der HEVC-Kodierer 1615 auf der dGPU 1505 diese zum Generieren des HEVC-Videostreams 1631. Insbesondere dekodiert ein AVC-Dekodierer 1610 auf der dGPU 1505 den gleichen AVC-Videostream 1630, um Einzelbilder zu generieren, die dann von dem HEVC-Kodierer 1615 gemäß der LA-Statistik 1615 kodiert werden, um das HEVC-Video 1631 zu generieren. Somit wird bei dieser Ausführungsform an Stelle eines vollständigen Pixelpuffers ein relativ kleiner Statistikpuffer 1615 gemeinsam genutzt. Darüber hinaus gestattet das Verwenden der LA-Statistik 1615 der dGPU 1505, das HEVC-Video 1631 mit einer beträchtlich reduzierten Latenz zu synthetisieren.
  • Es werden nun zusätzliche Einzelheiten von zwei spezifischen Anwendungsfällen, Transkodierung und Übertragung von Videospielinhalten, bereitgestellt. Es wird jedoch angemerkt, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf einen jeglichen spezifischen Anwendungsfall beschränkt sind.
  • 17A stellt eine Transkodierungsoperation unter Verwenden von nur der dGPU dar, während 17B die gleiche Transkodierungsoperation unter Verwenden von sowohl der iGPU 1506 als auch der dGPU 1505 darstellt. Der Look Ahead(LA)- oder Vorkodierungs(PreEnc)-Durchlauf können, verglichen mit der dGPU 1505, 1 bis N Einzelbilder auf der iGPU 1506 im Voraus durchlaufen lassen, wie in 17B angegeben. Wenn sich der Bitstrom zum Dekodieren im Systemspeicher (z. B. dem Speicher 1690) befindet, besteht keine Notwendigkeit, ihn an die iGPU (die einen direkten Zugriff auf den Systemspeicher aufweist) zu übertragen, und es ist effizienter, auf beiden GPUs zu dekodieren als unkomprimierte Pixeldaten zwischen dem Systemspeicher und einem lokalen Gerätespeicher (z. B. Speicher 1691) zu kopieren.
  • Ein Vergleich der 17A-B stellt die 2x-Reduzierung der Latenz durch das Verwenden von zwei Adaptern mit einer Look-Ahead-Tiefe von 8 dar. Der Einfachheit halber und zur Klarstellung stellt 17C ein Beispiel mit einer Look-Ahead-Tiefe von 1 dar.
  • Bei der Übertragung eines Videospielinhaltsszenarios auf einem Dual-Adapter-System kann das Kodieren an die iGPU verlagert werden, um Bandbreite und Leistung für die eigentliche Spiel-Bildsynthese durch die Grafikmaschinen auf der dGPU 1505 einzusparen. 18A stellt eine Ausführungsform dar, bei der jedes Einzelbild, das durch die dGPU 1505 synthetisiert wurde, aus dem lokalen Speicher 1691 der dGPU in den Systemspeicher 1690 kopiert wird, wo es von der iGPU 1506 vorkodiert und kodiert wird.
  • 18B stellt eine Ausführungsform dar, bei der ein leichtgewichtiger Vorkodierungsdurchlauf jedes synthetisierten Einzelbilds auf der dGPU 1505 durchgeführt wird, während das Einzelbild aus dem lokalen Speicher 1691 in den Systemspeicher 1690 kopiert wird. Diese Ausführungsform verbirgt die durch Look Ahead-Operationen eingebrachte Latenz und erhöht die Leistung.
  • 19 stellt ein anderes Beispiel für einen Anwendungsfall für Transkodierung dar. Bei einer Ausführungsform zerteilt die Kodierungsbibliothek 1502, die von dem Host ausgeführt wird, zunächst den Bitstrom bei 1901 und bereitet ihn zum Dekodieren vor, als erste Phase der Transkodierungsoperation. Jedoch, an Stelle dass sie den Bitstrom zur Verarbeitung der aktuellen komprimierten Bildergruppe(compressed group of pictures - GOP1) Einzelbild für Einzelbild zustellt, kopiert sie GOP1 in den lokalen Videospeicher der dGPU bei 1902 und bei 1911, der GOP1 bei 1902 dekodiert. Die iGPU geht dann bei 1903 zurück zum Start der nächsten Bildergruppe, GOP2, und kodiert GOP2 bei 1904. Die dGPU beginnt das Kodieren von GOP1 bei 1913 und kopiert die kodierte GOP1 bei 1914 in den Systemspeicher. Schließlich führt die iGPU bei 1905 ein Zusammenfügen des Bitstroms durch.
  • Somit ist die iGPU 1506 immer noch frei, GOP2 parallel zu GOP1 zu dekodieren und zu kodieren. Sobald ein Abschließen der Transkodierung der Einzelbilder von GOP1 beginnt, können die komprimierten Bitströme zurück in den Systemspeicher 1690 (bei 1914) kopiert, mit den GOP2-Bitströmen (bei 1905) zusammengefügt und an die Anwendung zurückgesendet werden. Die Kopien in den und aus dem lokalen Speicher der dGPU würden auf jeden Fall gemacht werden, wenn die dGPU ausschließlich zum Kodieren, aber für alle GOPs, verwendet würde. Diese Techniken reduzieren die Kopierbandbreite, indem sie einen Teil der Verarbeitung im Systemspeicher 1690 belassen, der von der iGPU 1506 verwendet wird.
  • Wie zu sehen ist, verdoppelt sich die Leistung des Systems jetzt, da die zwei Adapter im Zusammenspiel miteinander arbeiten. Bei einer Ausführungsform berücksichtigt der Bitratensteuerungsalgorithmus die Bitrate aller vorherigen GOPs, wenn er über die Quantisierungsparameter (QP) der aktuellen GOP, die er gerade kodiert, entscheidet. Dies kann durch eine bidirektionale Rückmeldungsschleife zwischen der dGPU und der iGPU abgeschwächt werden.
  • Während ein Aufteilen der Kodierung die Leistung erhöht, erhöht es die Latenz der Anzahl von Einzelbildern, die gepuffert werden müssen, speziell, wenn die Größe der GOP sehr groß ist. Dies braucht in Fällen der Verwendung von hochqualitativem Video oder bei der Transkodierung kein Problem zu sein, aber um dies abzuschwächen, kann auch eine Aufteilung an Mini-GOP-Grenzen vorgenommen werden. Hier gibt eine Mini-GOP einen Abschnitt einer vollständigen GOP an, doch die erforderlichen abhängigen Einzelbilder, die an einem anderen Adapter kodiert worden sind, müssen zur Verwendung als Referenzeinzelbild in den anderen Adapter (und umgekehrt) kopiert werden.
  • Wie in 20 zu sehen, wird das Einzelbild P2 auf der iGPU kodiert und muss anschließend in den lokalen Speicher der dGPU kopiert werden, um als Referenz zum Kodieren der Einzelbilder P6, B7, B8 und B9 verwendet werden zu können. Ähnlich dazu muss das Einzelbild P6 zurück in den iGPU-Speicher kopiert werden, um P10, B11, B12 und B13 zu kodieren. Der Mini-GOP-Ansatz weist engere Synchronisierungsanforderungen auf und eine höhere Kopierbandbreite vollständig unkomprimierter Pixel, doch ist er flexibler im Senken der Latenz des Kodierens.
  • Ausführungsformen der Erfindung sprechen einige Herausforderungen an, die mit dem Nutzen von Multi-Adapterkonfigurationen zusammenhängen. Aktuelle Implementierungen kopieren beispielsweise Daten zwischen den lokalen Speichern der Adapter oder lassen die Daten in dem Layout mit dem kleinsten gemeinsamen Nenner im Systemspeicher, um sie von Adaptern gemeinsam zu nutzen, welches normalerweise linear, nicht willkürlich umgeordnet und unkomprimiert ist und für einen Zugriff einer Vorrichtung nicht effizient ist. Im Gegensatz dazu nutzen Ausführungsformen der Erfindung einen linearen Statistikpuffer 1615 gemeinsam, der die Kopierbandbreite des Zugriffs darauf von dem diskreten Adapter aus sowie jegliche Probleme eines nicht optimalen Layouts beschränkt.
  • Einige Multi-Adapter-Bildsyntheseverfahren greifen auf Einzelbilder oder partielle Einzelbilder zurück, die auf unterschiedlichen Adaptern synthetisiert werden sollen. Dies erfordert, dass die Adapter exakt symmetrisch sind, anderenfalls wird der Qualitätsunterschied bemerkbar. Im Gegensatz dazu generiert die in einigen vorstehend beschriebenen Implementierungen verwendete Vorkodierung Statistik an einem Adapter und führt diese Statistik an den primären Kodierer zu. Es ist nicht von Bedeutung, welcher zugrundeliegende Kodierer die Statistik generiert.
  • Ferner besteht in einer Anwendungsbefähigung für Multi-Adapter-Bildsyntheseverfahren eine bedeutende Herausforderung, die die Annahme von 3D-Spielen begrenzt hat. Eine Ausführungsform der Erfindung ergänzt eine bestehende Kodierungsbibliothek 1502 durch Dual-Adapter-Fähigkeiten 1504 und stellt dadurch bestehenden Anwendungen transparent eine Dual-Adapter-Unterstützung bereit.
  • Schließlich kann eine Synchronisierung von Adaptern eine Herausforderung darstellen. Eine Ausführungsform der Erfindung verwendet den Statistikpuffer 1615, um zwischen den dualen Adaptern eine Synchronisierung durchzuführen, wodurch das Erfordernis des CPU-Marshalling der Daten beseitigt und die Last an der CPU reduziert wird.
  • Bei den vorstehend beschriebenen Ausführungsformen kann sich der Begriff „Maschine“ oder „Modul“ oder „Logik“ auf Folgendes beziehen, Folgendes beinhalten oder einen Teil von Folgendem bilden: einen anwendungsspezifischen integrierten Schaltkreis (application-specific integrated circuit - ASIC), einen elektronischen Schaltkreis, einen Prozessor (gemeinsam genutzt, zweckbestimmt oder Gruppenprozessor) und/oder Speicher (gemeinsam genutzt, zweckbestimmt, oder Gruppenspeicher), der ein oder mehrere Software- oder Firmwareprogramme ausführt, eine kombinatorische Logikschaltung und/oder andere geeignete Komponenten, welche die beschriebene Funktionalität bereitstellen. In Ausführungsformen kann eine Maschine, ein Modul oder Logik in Firmware, Hardware, Software oder jede Kombination aus Firmware, Hardware und Software implementiert sein.
  • BEISPIELE
  • Folgendes sind beispielhafte Implementierungen verschiedener Ausführungsformen der Erfindung.
  • Beispiel 1. Prozessor, folgendes umfassend: einen ersten Grafikprozessor, der auf einem ersten Halbleiterplättchen integriert ist, wobei der erste Grafikprozessor eine Medienverarbeitungsschaltung umfasst, um eine oder mehrere vorläufige Vorausberechnungsoperationen an Videoinhalten durchzuführen, um eine Vorausberechnungsstatistik zu generieren; eine Verbindung, um den ersten Grafikprozessor mit einem Vorausberechnungspuffer zu koppeln, wobei der erste Grafikprozessor die Vorausberechnungsstatistik über die Verbindung an den Vorausberechnungspuffer übertragen soll; und wobei die Vorausberechnungsstatistik von einem zweiten Grafikprozessor verwendet werden soll, um die Videoinhalte zu kodieren, um kodiertes Video zu generieren.
  • Beispiel 2. Prozessor nach Beispiel 1, wobei die Videoinhalte in einem ersten Kodierungsformat kodiert werden, wobei die Medienverarbeitungsschaltung auf dem ersten Grafikprozessor einen ersten Dekodierer umfasst, um die Videoinhalte im ersten Kodierungsformat zu dekodieren, um eine erste Sequenz von Video-Einzelbildern zu generieren, und ferner einen ersten Kodierer umfasst, um die erste Sequenz von Video-Einzelbildern gemäß einem zweiten Kodierungsformat zu evaluieren, um die Vorausberechnungsstatistik zu generieren.
  • Beispiel 3. Prozessor nach Beispiel 2, wobei der zweite Grafikprozessor einen zweiten Dekodierer umfasst, um die Videoinhalte im ersten Kodierungsformat zu kodieren, um eine zweite Sequenz von Video-Einzelbildern zu generieren, wobei der zweite Grafikprozessor ferner einen zweiten Kodierer umfasst, um die zweite Sequenz von Video-Einzelbildern unter Verwenden der Vorausberechnungsstatistik zu kodieren.
  • Beispiel 4. Prozessor nach Beispiel 3, wobei die Vorausberechnungsstatistik Daten umfasst, die eins oder mehrere von Folgenden betreffen: Änderungen zwischen Einzelbildern in der ersten Sequenz von Video-Einzelbildern, Synchronisierungsdaten, die Abhängigkeiten zwischen Einzelbildern betreffen, Versionsdaten und Daten, die eine Ziel-Einzelbildgröße und/oder
    -Puffergröße betreffen.
  • Beispiel 5. Prozessor nach Beispiel 1, ferner umfassend: einen Zentralprozessor, der auf einem ersten Halbleiterplättchen integriert ist, wobei der Zentralprozessor mit dem ersten Grafikprozessor gekoppelt ist und eine Vielzahl von Kernen umfasst, um Anweisungen auszuführen und Daten zu verarbeiten.
  • Beispiel 6. Prozessor nach Beispiel 1, ferner umfassend: eine Speichersteuerung, die mit dem ersten Grafikprozessor auf dem ersten Halbleiterplättchen gekoppelt ist, wobei die Speichersteuerung den ersten Grafikprozessor mit einer Systemspeichervorrichtung koppeln soll, wobei die Videoinhalte auf der Systemspeichervorrichtung gespeichert sind.
  • Beispiel 7. Prozessor nach Beispiel 6, ferner umfassend: eine Eingabe/Ausgabe(E/A)-Schnittstelle, um den ersten Grafikprozessor mit einer E/A-Verbindung zu koppeln.
  • Beispiel 8. Prozessor nach Beispiel 7, wobei der zweite Grafikprozessor mit dem ersten Grafikprozessor über die E/A-Verbindung gekoppelt ist.
  • Beispiel 9. Prozessor nach Beispiel 8, ferner umfassend: einen Gerätespeicher, der auf einer Grafikkarte mit dem zweiten Grafikprozessor integriert ist, wobei der zweite Grafikprozessor über eine lokale Speicherverbindung auf den Gerätespeicher zugreifen soll und über die E/A-Verbindung auf den Systemspeicher zugreifen soll und wobei der erste Grafikprozessor über die E/A-Verbindung auf den Gerätespeicher zugreifen soll.
  • Beispiel 10. Prozessor nach Beispiel 9, wobei der Vorausberechnungspuffer einen spezifizierten Bereich im Gerätespeicher und/oder im Systemspeicher umfasst.
  • Beispiel 11. Verfahren, Folgendes umfassend: Durchführen, auf einem ersten Grafikprozessor, von einer oder mehreren vorläufigen Vorausberechnungsoperationen an Videoinhalten, um eine Vorausberechnungsstatistik zu generieren, und Speichern der Vorausberechnungsstatistik in einem Vorausberechnungspuffer; Kodieren der Videoinhalte auf einem zweiten Grafikprozessor gemäß der Vorausberechnu ng sstatistik.
  • Beispiel 12. Verfahren nach Beispiel 11, wobei die Videoinhalte in einem ersten Kodierungsformat kodiert sind, wobei das Verfahren ferner umfasst: Dekodieren der Videoinhalte im ersten Kodierungsformat durch den ersten Grafikprozessor, um eine erste Sequenz von Video-Einzelbildern zu generieren, und Verwenden eines Kodierers auf dem ersten Grafikprozessor, um die erste Sequenz von Video-Einzelbildern gemäß einem zweiten Kodierungsformat zu evaluieren, um die Vorausberechnungsstatistik zu generieren.
  • Beispiel 13. Verfahren nach Beispiel 12, ferner umfassend: Dekodieren der Videoinhalte auf einem zweiten Grafikprozessor, um eine zweite Sequenz von Video-Einzelbildern zu generieren; und Kodieren der zweiten Sequenz von Video-Einzelbildern unter Verwenden der Vorausberechnungsstatistik.
  • Beispiel 14. Verfahren nach Beispiel 13, wobei die Vorausberechnungsstatistik Daten umfasst, die eins oder mehrere aus Folgenden betreffen: Änderungen zwischen Einzelbildern in der ersten Sequenz von Video-Einzelbildern, Synchronisierungsdaten, die Abhängigkeiten zwischen Einzelbildern betreffen, Versionsdaten und Daten, die eine Ziel-Einzelbildgröße und/oder
    -Puffergröße betreffen.
  • Beispiel 15. Verfahren nach Beispiel 11, ferner umfassend: Ausführen einer Anwendung auf einem Zentralprozessor, der auf einem ersten Halbleiterplättchen mit dem ersten Grafikprozessor integriert ist, wobei die Anwendung Bibliotheksprogrammkode referenzieren soll, um Dekodieren und Kodieren unter Verwenden des zweiten Grafikprozessors durchzuführen.
  • Beispiel 16. Verfahren nach Beispiel 11, wobei die Videoinhalte auf einer Systemspeichervorrichtung gespeichert sind, die mit dem ersten Grafikprozessor über eine Speicherschnittstelle gekoppelt ist.
  • Beispiel 17. Verfahren nach Beispiel 16, wobei der erste Grafikprozessor mit dem zweiten Grafikprozessor über eine E/A-Verbindung gekoppelt ist.
  • Beispiel 18. Verfahren nach Beispiel 17, wobei der zweite Grafikprozessor über eine lokale Speicherverbindung auf den Gerätespeicher zugreifen soll und über die E/A-Verbindung auf den Systemspeicher zugreifen soll und wobei der erste Grafikprozessor über die E/A-Verbindung auf den Gerätespeicher zugreifen soll.
  • Beispiel 19. Verfahren nach Beispiel 18, wobei der Vorausberechnungspuffer einen spezifizierten Bereich im Gerätespeicher und/oder im Systemspeicher umfasst.
  • Beispiel 20. Maschinenlesbares Medium, das darauf gespeicherten Programmkode aufweist, der, wenn er von einer Maschine ausgeführt wird, die Maschine veranlasst, die folgenden Operationen durchzuführen: Durchführen, auf einem ersten Grafikprozessor, von einer oder mehreren vorläufigen Vorausberechnungsoperationen an Videoinhalten, um eine Vorausberechnungsstatistik zu generieren, und Speichern der Vorausberechnungsstatistik in einem Vorausberechnungspuffer; Kodieren der Videoinhalte auf einem zweiten Grafikprozessor gemäß der Vorausberechnungsstatistik.
  • Beispiel 21. Verfahren nach Beispiel 22, wobei die Videoinhalte in einem ersten Kodierungsformat kodiert werden, wobei das Verfahren ferner Programmkode umfasst, um die Maschine zu veranlassen, die folgenden Operationen durchzuführen: Dekodieren der Videoinhalte im ersten Kodierungsformat durch den ersten Grafikprozessor, um eine erste Sequenz von Video-Einzelbildern zu generieren, und Verwenden eines Kodierers an dem ersten Grafikprozessor, um die erste Sequenz von Video-Einzelbildern gemäß einem zweiten Kodierungsformat zu evaluieren, um die Vorausberechnungsstatistik zu generieren.
  • Beispiel 22. Verfahren nach Beispiel 21, ferner umfassend Programmkode, um die Maschine zu veranlassen, die folgenden Operationen durchzuführen: Dekodieren der Videoinhalte auf einem zweiten Grafikprozessor, um eine zweite Sequenz von Video-Einzelbildern zu generieren; und Kodieren der zweiten Sequenz von Video-Einzelbildern unter Verwenden der Vorausberechnungsstatistik.
  • Beispiel 23. Verfahren nach Beispiel 22, wobei die Vorausberechnungsstatistik Daten umfasst, die eins oder mehrere aus Folgenden betreffen: Änderungen zwischen Einzelbildern in der ersten Sequenz von Video-Einzelbildern, Synchronisierungsdaten, die Abhängigkeiten zwischen Einzelbildern betreffen, Versionsdaten und Daten, die eine Ziel-Einzelbildgröße und/oder
    -Puffergröße betreffen.
  • Beispiel 24. Verfahren nach Beispiel 20, ferner umfassend Programmkode, um die Maschine zu veranlassen, die folgenden Operationen durchzuführen: Ausführen einer Anwendung auf einem Zentralprozessor, der auf einem ersten Halbleiterplättchen mit dem ersten Grafikprozessor integriert ist, wobei die Anwendung Bibliotheksprogrammkode referenzieren soll, um Dekodieren und Kodieren unter Verwenden des zweiten Grafikprozessors durchzuführen.
  • Beispiel 25. Verfahren nach Beispiel 20, wobei die Videoinhalte auf einer Systemspeichervorrichtung, die über eine Speicherschnittstelle mit dem ersten Grafikprozessor gekoppelt ist, gespeichert sind.
  • Beispiel 26. Verfahren nach Beispiel 25, wobei der erste Grafikprozessor über eine E/A-Verbindung mit dem zweiten Grafikprozessor gekoppelt ist.
  • Beispiel 27. Verfahren nach Beispiel 26, wobei der zweite Grafikprozessor über eine lokale Speicherverbindung auf den Gerätespeicher zugreifen soll und über die E/A-Verbindung auf den Systemspeicher zugreifen soll und wobei der erste Grafikprozessor über die E/A-Verbindung auf den Gerätespeicher zugreifen soll.
  • Beispiel 28. Verfahren nach Beispiel 27, wobei der Vorausberechnungspuffer einen spezifizierten Bereich im Gerätespeicher und/oder im Systemspeicher umfasst.
  • Ausführungsformen der Erfindung können verschiedene Schritte beinhalten, die vorstehend beschrieben worden sind. Die Schritte können in maschinenausführbaren Anweisungen ausgestaltet sein, die verwendet werden können, um einen Allzweck- oder Spezialzweckprozessor zu veranlassen, die Schritte durchzuführen. Alternativ dazu können diese Schritte von spezifischen Hardwarekomponenten, die festverdrahtete Logik zum Durchführen der Schritte enthalten, oder von jeder Kombination aus programmierten Rechenkomponenten und kundenspezifischen Hardwarekomponenten durchgeführt werden.
  • Wie hier beschrieben, können sich Anweisungen auf spezifische Hardwarekonfigurationen beziehen, wie etwa anwendungsspezifische integrierte Schaltkreise (application specific integrated circuits - ASICs), die konfiguriert sind, bestimmte Operationen durchzuführen, oder eine vorbestimmte Funktionalität aufweisen, oder Softwareanweisungen, die in einem Speicher gespeichert sind, der in einem nichtflüchtigen computerlesbaren Medium ausgestaltet ist. Somit können die in den Figuren gezeigten Techniken unter Verwendung von Kode und Daten, die auf einer oder mehreren elektronischen Vorrichtungen (z. B. einer Endstation, einem Netzwerkelement usw.) gespeichert sind und ausgeführt werden, implementiert werden. Solche elektronischen Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netzwerk) Kode und Daten unter Verwenden von maschinenlesbaren Computermedien, wie etwa nichtflüchtigen maschinenlesbaren Computerspeichermedien (z. B. magnetischen Datenspeichern; optischen Datenspeichern; Direktzugriffsspeichern; Nurlesespeichern; Flash- Speichervorrichtungen; Phasenwechselspeichern) und flüchtigen maschinenlesbaren Computer-Kommunikationsmedien (z. B. elektrischen, optischen, akustischen oder einer anderen Form sich verbreitender Signale - wie etwa Trägerwellen, Infrarotsignalen, digitalen Signalen usw.).
  • Außerdem beinhalten solche elektronischen Vorrichtungen in der Regel einen Satz von einem oder mehreren Prozessoren, die mit einem oder mehreren anderen Komponenten gekoppelt sind, wie etwa eine oder mehrere Speichervorrichtungen (nichtflüchtige maschinenlesbare Speichermedien), Benutzereingabe-/-ausgabevorrichtungen (z. B. eine Tastatur, ein berührungsempfindlicher Bildschirm und/oder eine Anzeige) und Netzwerkverbindungen. Das Koppeln des Satzes von Prozessoren und anderer Komponenten geschieht in der Regel über einen oder mehrere Busse und Brücken (auch bezeichnet als Bussteuerungen). Die Speichervorrichtung und die Signale, die den Netzwerkverkehr tragen, stellen jeweils ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien dar. Somit speichert die Speichervorrichtung einer gegebenen elektronischen Vorrichtung in der Regel Kode und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren dieser elektronischen Vorrichtung. Selbstverständlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwenden unterschiedlicher Kombinationen von Software, Firmware und/oder Hardware implementiert sein. In dieser gesamten ausführlichen Beschreibung sind zu Erläuterungszwecken zahlreiche spezifische Einzelheiten dargelegt worden, um ein tiefgreifendes Verständnis der vorliegenden Erfindung bereitzustellen. Es wird einem Fachmann jedoch ersichtlich, dass die Erfindung ohne einige dieser spezifischen Einzelheiten praktiziert werden kann. In bestimmten Fällen sind bekannte Strukturen und Funktionen nicht in detailreichen Einzelheiten beschrieben worden, um ein Verschleiern des Gegenstands der vorliegenden Erfindung zu vermeiden. Dementsprechend sind der Umfang und der Geist der Erfindung anhand der folgenden Ansprüche zu beurteilen.

Claims (25)

  1. Prozessor, Folgendes umfassend: einen ersten Grafikprozessor, der auf einem ersten Halbleiterplättchen integriert ist, wobei der erste Grafikprozessor eine Medienverarbeitungsschaltung umfasst, um eine oder mehrere vorläufige Vorausberechnungsoperationen an Videoinhalten durchzuführen, um eine Vorausberechnungsstatistik zu generieren; eine Verbindung, um den ersten Grafikprozessor mit einem Vorausberechnungspuffer zu koppeln, wobei der erste Grafikprozessor die Vorausberechnungsstatistik über die Verbindung an den Vorausberechnungspuffer übertragen soll; und wobei die Vorausberechnungsstatistik von einem zweiten Grafikprozessor verwendet werden soll, um die Videoinhalte zu kodieren, um kodiertes Video zu generieren.
  2. Prozessor nach Anspruch 1, wobei die Videoinhalte in einem ersten Kodierungsformat kodiert sind, wobei die Medienverarbeitungsschaltung auf dem ersten Grafikprozessor einen ersten Dekodierer umfasst, um die Videoinhalte im ersten Kodierungsformat zu dekodieren, um eine erste Sequenz von Video-Einzelbildern zu generieren, und ferner einen ersten Kodierer umfasst, um die erste Sequenz von Video-Einzelbildern gemäß einem zweiten Kodierungsformat zu evaluieren, um die Vorausberechnungsstatistik zu generieren.
  3. Prozessor nach Anspruch 2, wobei der zweite Grafikprozessor einen zweiten Dekodierer umfasst, um die Videoinhalte im ersten Kodierungsformat zu dekodieren, um eine zweite Sequenz von Video-Einzelbildern zu generieren, wobei der zweite Grafikprozessor ferner einen zweiten Kodierer umfasst, um die zweite Sequenz von Video-Einzelbildern unter Verwenden der Vorausberechnungsstatistik zu kodieren.
  4. Prozessor nach Anspruch 3, wobei die Vorausberechnungsstatistik Daten umfasst, die eins oder mehrere von Folgenden betreffen: Änderungen zwischen Einzelbildern in der ersten Sequenz von Video-Einzelbildern, Synchronisierungsdaten, die Abhängigkeiten zwischen Einzelbildern betreffen, Versionsdaten und Daten, die eine Ziel-Einzelbildgröße und/oder -Puffergröße betreffen.
  5. Prozessor nach einem der Ansprüche 1 bis 4, ferner umfassend: einen Zentralprozessor, der auf einem ersten Halbleiterplättchen integriert ist, wobei der Zentralprozessor mit dem ersten Grafikprozessor gekoppelt ist und eine Vielzahl von Kernen umfasst, um Anweisungen auszuführen und Daten zu verarbeiten.
  6. Prozessor nach einem der Ansprüche 1 bis 5, ferner umfassend: eine Speichersteuerung, die mit dem ersten Grafikprozessor auf dem ersten Halbleiterplättchen gekoppelt ist, wobei die Speichersteuerung den ersten Grafikprozessor mit einer Systemspeichervorrichtung koppeln soll, wobei die Videoinhalte in der Systemspeichervorrichtung gespeichert sind.
  7. Prozessor nach Anspruch 6, ferner umfassend: eine Eingabe/Ausgabe(E/A)-Schnittstelle, um den ersten Grafikprozessor mit einer E/A-Verbindung zu koppeln.
  8. Prozessor nach Anspruch 7, wobei der zweite Grafikprozessor über die E/A-Verbindung mit dem ersten Grafikprozessor gekoppelt ist.
  9. Prozessor nach Anspruch 8, ferner umfassend: einen Gerätespeicher, der auf einer Grafikkarte mit dem zweiten Grafikprozessor integriert ist, wobei der zweite Grafikprozessor über eine lokale Speicherverbindung auf den Gerätespeicher zugreifen soll und über die E/A-Verbindung auf den Systemspeicher zugreifen soll und wobei der erste Grafikprozessor über die E/A-Verbindung auf den Gerätespeicher zugreifen soll.
  10. Prozessor nach Anspruch 9, wobei der Vorausberechnungspuffer einen spezifizierten Bereich im Gerätespeicher und/oder im Systemspeicher umfasst.
  11. Verfahren, Folgendes umfassend: Durchführen, auf einem ersten Grafikprozessor, von einer oder mehreren vorläufigen Vorausberechnungsoperationen an Videoinhalten, um eine Vorausberechnungsstatistik zu generieren, und Speichern der Vorausberechnungsstatistik in einem Vorausberechnungspuffer; Kodieren der Videoinhalte auf einem zweiten Grafikprozessor gemäß der Vorausberechnungsstatistik.
  12. Verfahren nach Anspruch 11, wobei die Videoinhalte in einem ersten Kodierungsformat kodiert sind, wobei das Verfahren ferner umfasst: Dekodieren der Videoinhalte im ersten Kodierungsformat durch den ersten Grafikprozessor, um eine erste Sequenz von Video-Einzelbildern zu generieren, und Verwenden eines Kodierers auf dem ersten Grafikprozessor, um die erste Sequenz von Video-Einzelbildern gemäß einem zweiten Kodierungsformat zu evaluieren, um die Vorausberechnungsstatistik zu generieren.
  13. Verfahren nach Anspruch 12, ferner umfassend: Dekodieren der Videoinhalte auf einem zweiten Grafikprozessor, um eine zweite Sequenz von Video-Einzelbildern zu generieren; und Kodieren der zweiten Sequenz von Video-Einzelbildern unter Verwenden der Vorausberechnungsstatistik.
  14. Verfahren nach Anspruch 13, wobei die Vorausberechnungsstatistik Daten umfasst, die eins oder mehrere aus Folgenden betreffen: Änderungen zwischen Einzelbildern in der ersten Sequenz von Video-Einzelbildern, Synchronisierungsdaten, die Abhängigkeiten zwischen Einzelbildern betreffen, Versionsdaten und Daten, die eine Ziel-Einzelbildgröße und/oder -Puffergröße betreffen.
  15. Verfahren nach einem der Ansprüche 11 bis 14, ferner umfassend: Ausführen einer Anwendung auf einem Zentralprozessor, der auf einem ersten Halbleiterplättchen mit dem ersten Grafikprozessor integriert ist, wobei die Anwendung Bibliotheksprogrammkode referenzieren soll, um Dekodieren und Kodieren unter Verwenden des zweiten Grafikprozessors durchzuführen.
  16. Verfahren nach einem der Ansprüche 11 bis 15, wobei die Videoinhalte auf einer Systemspeichervorrichtung gespeichert sind, die über eine Speicherschnittstelle mit dem ersten Grafikprozessor gekoppelt ist.
  17. Verfahren nach Anspruch 16, wobei der erste Grafikprozessor über eine E/A-Verbindung mit dem zweiten Grafikprozessor gekoppelt ist.
  18. Verfahren nach Anspruch 17, wobei der zweite Grafikprozessor über eine lokale Speicherverbindung auf den Gerätespeicher zugreifen soll und über die E/A-Verbindung auf den Systemspeicher zugreifen soll und wobei der erste Grafikprozessor über die E/A-Verbindung auf den Gerätespeicher zugreifen soll.
  19. Verfahren nach Anspruch 18, wobei der Vorausberechnungspuffer einen spezifizierten Bereich im Gerätespeicher und/oder im Systemspeicher umfasst.
  20. Maschinenlesbares Medium, das darauf gespeicherten Programmkode aufweist, der, wenn er durch eine Maschine ausgeführt wird, die Maschine veranlasst, die folgenden Operationen durchzuführen: Durchführen, auf einem ersten Grafikprozessor, von einer oder mehreren vorläufigen Vorausberechnungsoperationen an Videoinhalten, um eine Vorausberechnungsstatistik zu generieren, und Speichern der Vorausberechnungsstatistik in einem Vorausberechnungspuffer; Kodieren der Videoinhalte auf einem zweiten Grafikprozessor gemäß der Vorausberechnungsstatistik.
  21. Maschinenlesbares Medium nach Anspruch 20, wobei die Videoinhalte in einem ersten Kodierungsformat kodiert sind, wobei das Verfahren ferner Programmkode umfasst, um die Maschine zu veranlassen, die folgenden Operationen durchzuführen: Dekodieren der Videoinhalte im ersten Kodierungsformat durch den ersten Grafikprozessor, um eine erste Sequenz von Video-Einzelbildern zu generieren, und Verwenden eines Kodierers auf dem ersten Grafikprozessor, um die erste Sequenz von Video-Einzelbildern gemäß einem zweiten Kodierungsformat zu evaluieren, um die Vorausberechnungsstatistik zu generieren.
  22. Maschinenlesbares Medium nach Anspruch 21, ferner umfassend Programmkode, um die Maschine zu veranlassen, die folgenden Operationen durchzuführen: Dekodieren der Videoinhalte auf einem zweiten Grafikprozessor, um eine zweite Sequenz von Video-Einzelbildern zu generieren; und Kodieren der zweiten Sequenz von Video-Einzelbildern unter Verwenden der Vorausberechnungsstatistik.
  23. Maschinenlesbares Medium nach Anspruch 22, wobei die Vorausberechnungsstatistik Daten umfasst, die eins oder mehrere aus Folgenden betreffen: Änderungen zwischen Einzelbildern in der ersten Sequenz der Video-Einzelbilder, Synchronisierungsdaten, die Abhängigkeiten zwischen Einzelbildern betreffen, Versionsdaten und Daten, die eine Ziel-Einzelbildgröße und/oder -Puffergröße betreffen.
  24. Maschinenlesbares Medium nach einem der Ansprüche 20 bis 23, ferner umfassend Programmkode, um die Maschine zu veranlassen, die folgenden Operationen durchzuführen: Ausführen einer Anwendung auf einem Zentralprozessor, der auf einem ersten Halbleiterplättchen mit dem ersten Grafikprozessor integriert ist, wobei die Anwendung Bibliotheksprogrammkode referenzieren soll, um Dekodieren und Kodieren unter Verwenden des zweiten Grafikprozessors durchzuführen.
  25. Maschinenlesbares Medium nach einem der Ansprüche 20 bis 24, wobei die Videoinhalte auf einer Systemspeichervorrichtung gespeichert werden, die mit dem ersten Grafikprozessor über eine Speicherschnittstelle gekoppelt ist.
DE102020131293.8A 2019-12-27 2020-11-26 Einrichtung und verfahren zur multi-adapter-kodierung Pending DE102020131293A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/728,749 2019-12-27
US16/728,749 US11069022B1 (en) 2019-12-27 2019-12-27 Apparatus and method for multi-adapter encoding

Publications (1)

Publication Number Publication Date
DE102020131293A1 true DE102020131293A1 (de) 2021-07-01

Family

ID=76310543

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020131293.8A Pending DE102020131293A1 (de) 2019-12-27 2020-11-26 Einrichtung und verfahren zur multi-adapter-kodierung

Country Status (4)

Country Link
US (2) US11069022B1 (de)
KR (1) KR20210084226A (de)
CN (1) CN113052746A (de)
DE (1) DE102020131293A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230140640A1 (en) * 2021-11-03 2023-05-04 Intel Corporation 3d graphics driver to split frames into multiple command buffer submissions based on analysis of previous frames
CN114339412B (zh) * 2021-12-30 2024-02-27 咪咕文化科技有限公司 视频质量增强方法、移动终端、存储介质及装置
US11849129B2 (en) * 2022-03-18 2023-12-19 Qualcomm Incorporated Intra-block copy decoding using dynamic re-mapping of on-chip memory

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6630936B1 (en) * 2000-09-28 2003-10-07 Intel Corporation Mechanism and method for enabling two graphics controllers to each execute a portion of a single block transform (BLT) in parallel
US7768517B2 (en) * 2006-02-21 2010-08-03 Nvidia Corporation Asymmetric multi-GPU processing
US8395619B1 (en) * 2008-10-02 2013-03-12 Nvidia Corporation System and method for transferring pre-computed Z-values between GPUs
US9392295B2 (en) * 2011-07-20 2016-07-12 Broadcom Corporation Adaptable media processing architectures
US9094684B2 (en) * 2011-12-19 2015-07-28 Google Technology Holdings LLC Method for dual pass rate control video encoding
US8775762B2 (en) * 2012-05-07 2014-07-08 Advanced Micro Devices, Inc. Method and apparatus for batching memory requests
US9451251B2 (en) * 2012-11-27 2016-09-20 Broadcom Corporation Sub picture parallel transcoding
US10110911B2 (en) * 2014-11-11 2018-10-23 Cisco Technology, Inc. Parallel media encoding
US10063866B2 (en) * 2015-01-07 2018-08-28 Texas Instruments Incorporated Multi-pass video encoding
US10674111B2 (en) * 2017-12-11 2020-06-02 Disney Enterprises, Inc. Systems and methods for profile based media segment rendering

Also Published As

Publication number Publication date
KR20210084226A (ko) 2021-07-07
US11069022B1 (en) 2021-07-20
US20210201434A1 (en) 2021-07-01
US11532067B2 (en) 2022-12-20
US20210342969A1 (en) 2021-11-04
CN113052746A (zh) 2021-06-29

Similar Documents

Publication Publication Date Title
DE112020000850T5 (de) Cache-Struktur und -Nutzung
DE102019117585A1 (de) Selektives Packen von Patches für immersives Video
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE112018005527T5 (de) Automatisches aufwecken von leistungsdomänen fürgrafikkonfigurationsanforderungen
DE102020129623A1 (de) Blickgedämpfter virtueller desktop
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus
DE102020131293A1 (de) Einrichtung und verfahren zur multi-adapter-kodierung
DE102019110027A1 (de) Kachelbasiertes rendern für mehrere auflösungen von bildern
DE102020127035A1 (de) Programmierbarer umordnungspuffer für dekomprimierung
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE112017001845T5 (de) Strahltraversierung mit reduzierter Genauigkeit mit Wiederverwendung von Ebenen
DE102020132871A1 (de) Verbessern von hierarchischer tiefenpuffer-cullingeffizienz durch maskenakkumulation
DE102019117545A1 (de) Reduzierung von registerbankkonflikten für ausführungseinheiten eines multithread-prozessors
DE112017004077T5 (de) Einrichtung und verfahren für optimiertes kachelbasiertes rendering
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE102020130880A1 (de) Mechanismus zur partitionierung eines geteilten lokalen speichers
DE102020129625A1 (de) Seitentabellen-mapping-mechanismus
DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
DE102020130995A1 (de) Verfahren und vorrichtung zur codierung basierend auf wichtigkeitswerten
DE112018003999T5 (de) Verfahren und Vorrichtung für effiziente Verarbeitung von abgeleiteten einheitlichen Werten in einem Grafikprozessor
DE102020113400A1 (de) Registerteilungsmechanismus
DE112017004178T5 (de) Auslagern der Kernel-Ausführung zu der Grafik