DE102020108215A1 - Bedienflächenzugriff mittels flacher Speicherzuordnung - Google Patents

Bedienflächenzugriff mittels flacher Speicherzuordnung Download PDF

Info

Publication number
DE102020108215A1
DE102020108215A1 DE102020108215.0A DE102020108215A DE102020108215A1 DE 102020108215 A1 DE102020108215 A1 DE 102020108215A1 DE 102020108215 A DE102020108215 A DE 102020108215A DE 102020108215 A1 DE102020108215 A1 DE 102020108215A1
Authority
DE
Germany
Prior art keywords
memory
data
graphics
area
processor
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
DE102020108215.0A
Other languages
English (en)
Inventor
Niranjan L. Cooray
Altug Koker
Vidhya Krishnan
Ronald W. Silvas
John H. Feit
Prasoonkumar Surti
Joydeep Ray
Abhishek R. Appu
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 DE102020108215A1 publication Critical patent/DE102020108215A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/907Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Abstract

Die hierin beschriebenen Ausführungsformen stellen eine Einrichtung bereit, die einen Prozessor umfasst, um einen ersten Speicherbereich für Daten für eine Grafik-Arbeitslast zuzuweisen, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst, einen zweiten Speicherbereich für Komprimierungs-Metadaten zuzuweisen, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist, und eine direkte Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen zu konfigurieren. Andere Ausführungsformen können beschrieben und beansprucht werden.

Description

  • HINTERGRUND
  • Der hier beschriebene Erfindungsgegenstand betrifft allgemein die Grafikverarbeitung.
  • Die meisten Grafikverarbeitungssysteme verwenden ein oder mehrere Datenkomprimierungsverfahren, um Grafikdaten zu komprimieren, bevor die Grafikdaten im Speicher gespeichert werden. Informationen über das Komprimierungsverfahren, das zum Codieren eines bestimmten Dateneintrags verwendet wird, können an einem separaten Speicherplatz als Metadaten gespeichert sein, die logisch mit dem Dateneintrag verknüpft sind. Einige Grafikverarbeitungssysteme verwenden eine Zuordnungstabelle, um die logische Verknüpfung zwischen dem Dateneintrag und den Komprimierungs-Metadaten bereitzustellen. Dieses Verfahren kann Latenzzeiten im Grafikverarbeitungssystem nach sich ziehen, was die Leistung großer Grafikverarbeitungssysteme einschränkt.
  • Dementsprechend können Verfahren zum Codieren von Komprimierungs-Metadaten z. B. in Anwendungen zur Grafikverarbeitung von Nutzen sein.
  • Figurenliste
  • Damit die Art und Weise, wie die oben genannten Merkmale der vorliegenden Ausführungsformen im Einzelnen funktionieren, verstanden werden kann, kann eine genauere Beschreibung der oben kurz zusammengefassten Ausführungsformen unter Bezugnahme auf Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es ist jedoch zu beachten, dass die beigefügten Zeichnungen lediglich typische Ausführungsformen darstellen und daher nicht im Sinne einer Einschränkung des Schutzumfangs zu verstehen sind.
    • 1 ist ein Blockdiagramm eines Verarbeitungssystems gemäß einigen hier beschriebenen Ausführungsformen;
    • 2 ist ein Blockdiagramm eines Prozessors gemäß einigen hier beschriebenen Ausführungsformen;
    • 3 ist ein Blockdiagramm eines Grafikprozessors gemäß einigen hier beschriebenen Ausführungsformen;
    • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen hier beschriebenen Ausführungsformen;
    • 5 ist ein Blockdiagramm der Hardware-Logik eines Grafikprozessorkerns gemäß einigen hier beschriebenen Ausführungsformen;
    • 6A-6B zeigen Thread-Ausführungslogik, die eine Anordnung von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern gemäß hier beschriebenen Ausführungsformen verwendet werden;
    • 7 ist ein Blockdiagramm, das Grafikprozessor-Befehlsformate gemäß einigen hier beschriebenen Ausführungsformen darstellt;
    • 8 ist ein Blockdiagramm eines Grafikprozessors gemäß einigen hier beschriebenen Ausführungsformen;
    • 9A-9B zeigen ein(e) Grafikprozessor-Befehlsformat und -Befehlssequenz gemäß einigen hier beschriebenen Ausführungsformen;
    • 10 zeigt eine beispielhafte Grafiksoftware-Architektur für ein Datenverarbeitungssystem gemäß einigen hier beschriebenen Ausführungsformen;
    • 11A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem gemäß einigen hier beschriebenen Ausführungsformen darstellt;
    • 11B zeigt eine seitliche Querschnittansicht einer integrierten Schaltungspaketanordnung gemäß einigen hier beschriebenen Ausführungsformen.
    • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung in Form eines Ein-Chip-Systems gemäß einer Ausführungsform darstellt;
    • 13A-13B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC gemäß hier beschriebenen Ausführungsformen darstellen.
    • 14A-14B zeigen zusätzliche beispielhafte Grafikprozessorlogik gemäß hier beschriebenen Ausführungsformen.
    • 15 zeigt ein Datenverarbeitungssystem, das dafür ausgelegt sein kann, den Bedienflächenzugriff mittels flacher Speicherzuordnung (Flat Memory Mapping) gemäß hier beschriebenen Ausführungsformen zu unterstützen;
    • 16A und 16B sind Flussdiagramme, die Operationen eines Verfahrens zur Unterstützung des Bedienflächenzugriffs mittels flacher Speicherzuordnung gemäß hier beschriebenen Ausführungsformen veranschaulichen;
    • 17 zeigt Aspekte einer Datenverarbeitungsumgebung, die dafür ausgelegt sein kann, den Bedienflächenzugriff mittels flacher Speicherzuordnung gemäß hier beschriebenen Ausführungsformen zu unterstützen;
    • 18A und 18B zeigen eine Speicherzuordnung eines Verfahrens zur Unterstützung des Bedienflächenzugriffs mittels flacher Speicherzuordnung gemäß hier beschriebenen Ausführungsformen;
    • 19 ist ein Blockdiagramm einer Computervorrichtung, die einen Grafikprozessor gemäß einigen hier beschriebenen Ausführungsformen aufweist.
  • BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Zu Erläuterungszwecken werden zahlreiche konkrete Details dargelegt, um ein gründliches Verständnis der verschiedenen weiter unten beschriebenen Ausführungsformen zu schaffen. Allerdings ist es für einen Fachmann auf diesem Gebiet der Technik offensichtlich, dass die Ausführungsformen ohne einige dieser spezifischen Details in die Praxis umgesetzt werden können. In anderen Fällen sind hinlänglich bekannte Strukturen und Vorrichtungen in Form eines Blockdiagramms gezeigt, um zu vermeiden, dass die zugrundeliegenden Prinzipien unklar werden, und ein gründlicheres Verständnis der Ausführungsformen zu vermitteln. Obwohl einige der folgenden Ausführungsformen unter Bezugnahme auf einen Grafikprozessor beschrieben werden, können die hier beschriebenen Verfahren und Lehren auf verschiedene Arten von Schaltungen oder Halbleitervorrichtungen zur Anwendung kommen, einschließlich Universal-Verarbeitungsvorrichtungen oder Grafikverarbeitungsvorrichtungen. Verweise hierin auf „eine bestimmte Ausführungsform“ oder „eine Ausführungsform“ bedeuten, dass ein/e besondere/s Merkmal, Struktur oder Eigenschaft, das/die in Verbindung oder im Zusammenhang mit der Ausführungsform beschrieben wird, in wenigstens einer Ausführungsform der Erfindung enthalten sein kann. Allerdings beziehen sich Vorkommnisse der Formulierung „in einer Ausführungsform“ an verschiedenen Stellen der Spezifikation nicht notwendigerweise alle auf dieselbe Ausführungsform.
  • In der nachstehenden Beschreibung und in den Patentansprüchen können die Begriffe „gekoppelt“ und „verbunden“ sowie Ableitungen davon verwendet werden. Es ist zu beachten, dass diese Begriffe nicht als Synonyme beabsichtigt sind. „Gekoppelt“ wird verwendet, um anzuzeigen, dass zwei oder mehr Elemente, die in direktem physischen oder elektrischen Kontakt miteinander stehen können oder auch nicht, zusammenwirken oder interagieren. „Verbunden“ wird verwendet, um die Herstellung einer Kommunikationsverbindung zwischen zwei oder mehr miteinander gekoppelten Elementen anzuzeigen.
  • In der folgenden Beschreibung geben die 1-14 einen Überblick über ein/e beispielhafte/s Datenverarbeitungssystem und Grafikprozessorlogik, das/die die verschiedenen Ausführungsformen enthält oder sich auf diese bezieht. Die 15-25 enthalten spezifische Einzelheiten zu den verschiedenen Ausführungsformen. Einige Aspekte der folgenden Ausführungsformen werden unter Bezugnahme auf einen Grafikprozessor beschrieben, während andere Aspekte unter Bezugnahme auf einen Universal-Prozessor, wie z. B. eine Zentraleinheit (CPU, Central Processing Unit), beschrieben werden. Ähnliche Verfahren und Lehren können auf andere Arten von Schaltungen oder Halbleitervorrichtungen angewandt werden, einschließlich, aber nicht beschränkt auf einen Prozessor mit vielen integrierten Kernen (MIC, Many Integrated Cores), einen GPU-Cluster oder eine oder mehrere Instanzen einer feldprogrammierbaren Gatteranordnung (FPGA, Field Programmable Gate Array). Allgemein sind die Lehren auf jeden Prozessor oder jede Maschine anwendbar, die Bild- (z. B. Probe, Pixel), Vertex- oder Geometriedaten be- oder verarbeiten.
  • Systemüberblick
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. In verschiedenen Ausführungsformen weist das System 100 einen oder mehrere Prozessoren 102 und einen oder mehrere Grafikprozessoren 108 auf und kann ein Desktop-System mit einem Prozessor, ein Arbeitsstationssystem mit mehreren Prozessoren oder ein Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 sein. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in ein Ein-Chip-System (SoC, System-on-a-Chip) in Form einer integrierten Schaltung für den Einsatz in mobilen, tragbaren oder eingebetteten Vorrichtungen integriert ist.
  • In einer Ausführungsform kann das System 100 eine Server-basierte Spieleplattform, eine Spielkonsole einschließlich einer Spiel- und Medienkonsole, eine mobile Spielkonsole, eine tragbare Spielkonsole oder eine Online-Spielkonsole aufweisen oder in eine solche integriert sein. In einigen Ausführungsformen ist das System 100 ein Mobiltelefon, ein Smartphone, eine Tablet-Computervorrichtung oder eine mobile Internet-Vorrichtung. Das Verarbeitungssystem 100 kann auch eine tragbare Vorrichtung, z. B. eine tragbare Smartwatch-Vorrichtung, intelligente Sehhilfenvorrichtung, Augmented-Reality-Vorrichtung oder Virtual-Reality-Vorrichtung aufweisen, mit einer solchen gekoppelt oder in eine solche integriert sein. In einigen Ausführungsformen ist das Verarbeitungssystem 100 ein Fernseher oder eine Set-Top-Box-Vorrichtung mit einem oder mehreren Prozessoren 102 und einer grafischen Schnittstelle, die von einem oder mehreren Grafikprozessoren 108 erzeugt wird.
  • In einigen Ausführungsformen weisen die ein oder mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 auf, um Befehle zu verarbeiten, die bei Ausführung Operationen für System- und Benutzersoftware durchführen. In einigen Ausführungsformen ist jeder der ein oder mehreren Prozessorkerne 107 dafür ausgelegt, einen bestimmten Befehlssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Befehlssatz 109 das Rechnen mit komplexem Befehlssatz (CISC, Complex Instruction Set Computing), Rechnen mit reduziertem Befehlssatz (RISC, Reduced Instruction Set Computing) oder Rechnen mit sehr langem Befehlswort (VLIW, Very Long Instruction Word) ermöglichen. Mehrere Prozessorkerne 107 können jeweils einen anderen Befehlssatz 109 verarbeiten, der Befehle aufweisen kann, um die Emulation anderer Befehlssätze zu ermöglichen. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen, wie z. B. einen Digitalsignalprozessor (DSP), aufweisen.
  • In einigen Ausführungsformen weist der Prozessor 102 Cache-Speicher 104 auf. Abhängig von der Architektur kann der Prozessor 102 einen einzigen internen Cache oder mehrere Ebenen internen Cache aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 102 gemeinsam genutzt. In einigen Ausführungsformen nutzt der Prozessor 102 auch externen Cache (z. B. einen Level-3 (L3)-Cache oder Last-Level-Cache (LLC)) (nicht gezeigt), der von den Prozessorkernen 107 unter Verwendung bekannter Cache-Kohärenztechniken gemeinsam genutzt werden kann. Der Prozessor 102 weist darüber hinaus eine Registerdatei 106 auf, die verschiedene Arten von Registern zum Speichern unterschiedlicher Datentypen aufweisen kann (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister). Einige Register können Universal-Register sein, während andere Register spezifisch für das Design des Prozessors 102 sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessoren 102 mit einem oder mehreren Schnittstellenbussen 110 gekoppelt, um Kommunikationssignale wie Adressen, Daten oder Steuersignale zwischen Prozessor 102 und anderen Komponenten im System 100 zu übertragen. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus sein, wie z. B. eine Version des Direct Media Interface (DMI)-Busses. Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheral Component Interconnect (z. B. PCI, PCI Express)-Busse, Speicherbusse oder andere Arten von Schnittstellenbussen aufweisen. In einer Ausführungsform weisen die ein oder mehreren Prozessoren 102 eine integrierte Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 auf. Die Speichersteuerung 116 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuerungsknoten (PCH, Platform Controller Hub) 130 über einen lokalen E/A-Bus Verbindungen zu E/A-Vorrichtungen bereitstellt.
  • Die Speichervorrichtung 120 kann eine dynamische Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory)-Vorrichtung, eine statische Direktzugriffsspeicher (SRAM, Static Random Access Memory)-Vorrichtung, eine Flash-Speichervorrichtung, eine Phasenwechselspeichervorrichtung oder eine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 betrieben werden, um Daten 122 und Befehle 121 zu speichern, die verwendet werden, wenn die ein oder mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 116 ist auch mit einem optionalen externen Grafikprozessor 112 gekoppelt, der mit den ein oder mehreren Grafikprozessoren 108 in Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit den ein oder mehreren Prozessoren 102 verbunden sein. Die Anzeigevorrichtung 111 kann eine oder mehrere von einer internen Anzeigevorrichtung, wie z. B. in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung sein, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist. In einer Ausführungsform kann die Anzeigevorrichtung 111 eine kopfmontierte Anzeige (HMD, Head Mounted Display) sein, z. B. eine stereoskopische Anzeigevorrichtung für den Einsatz in Virtual-Reality (VR) oder Augmented-Reality (AR)-Anwendungen.
  • In einigen Ausführungsformen ermöglicht der Plattformsteuerungsknoten 130 das Verbinden von Peripherievorrichtungen mit der Speichervorrichtung 120 und dem Prozessor 102 über einen Hochgeschwindigkeits-E/A-Bus. Zu den E/A-Peripherievorrichtungen gehören, ohne jedoch darauf beschränkt zu sein, eine Audio-Steuerung 146, eine Netzsteuerung 134, eine Firmware-Schnittstelle 128, ein drahtloser Sendeempfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z. B. Festplatte, Flash-Speicher usw.). Die Datenspeichervorrichtung 124 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie z. B. einen Peripheral Component Interconnect (z. B. PCI, PCI Express)-Bus, angeschlossen werden. Zu den Berührungssensoren 125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren zählen. Der drahtlose Sendeempfänger 126 kann ein WiFi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Sendeempfänger für Mobilfunknetze wie ein 3G-, 4G- oder LTE (Long Term Evolution)-Sendeempfänger sein. Die Firmware-Schnittstelle 128 ermöglicht die Kommunikation mit der System-Firmware und kann z. B. eine einheitliche, erweiterbare Firmware-Schnittstelle (UEFI, Unified Extensible Firmware Interface) sein. Die Netzsteuerung 134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen ist eine Hochleistungs-Netzsteuerung (nicht gezeigt) mit dem Schnittstellenbus 110 gekoppelt. Die Audio-Steuerung 146 ist in einer Ausführungsform eine mehrkanalige High-Definition-Audio-Steuerung. In einer Ausführungsform weist das System 100 eine optionale ältere E/A-Steuerung 140 zum Koppeln von älteren (z. B. Personal System 2 (PS/2)) Vorrichtungen mit dem System auf. Der Plattformsteuerungsknoten 130 kann auch mit einer oder mehreren USB (Universal Serial Bus)-Steuerungen verbunden sein, um Eingabevorrichtungen wie Tastatur- und Maus- 143 Kombinationen, eine Kamera 144 oder andere USB-Eingabevorrichtungen anzuschließen.
  • Es ist einzusehen, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, da auch andere Arten von Datenverarbeitungssystemen, die anders konfiguriert sind, verwendet werden können. Beispielsweise kann eine Instanz der Speichersteuerung 116 und des Plattformsteuerungsknotens 130 in einen diskreten externen Grafikprozessor, wie den externen Grafikprozessor 112, integriert sein. In einer Ausführungsform können der Plattformsteuerungsknoten 130 und/oder die Speichersteuerung 160 außerhalb der ein oder mehreren Prozessoren 102 liegen. Beispielsweise kann das System 100 eine externe Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 aufweisen, die als Speichersteuerungsknoten bzw. Peripheriesteuerungsknoten innerhalb eines System-Chipsatzes konfiguriert sein können, der mit den ein oder mehreren Prozessoren 102 in Kommunikationsverbindung steht.
  • 2 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200 mit einem oder mehreren Prozessorkernen 202A-202N, einer integrierten Speichersteuerung 214 und einem integrierten Grafikprozessor 208. Elemente von 2, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente von anderen Figuren der vorliegenden Patentschrift haben, können in beliebiger ähnlicher Weise wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt. Der Prozessor 200 kann zusätzliche Kerne bis einschließlich den zusätzlichen Kern 202N aufweisen, wie durch die gestrichelten Kästchen dargestellt. Jeder der Prozessorkerne 202A-202N weist eine oder mehrere interne Cache-Einheiten 204A-204N auf. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 206.
  • Die internen Cache-Einheiten 204A-204N und die gemeinsam genutzten Cache-Einheiten 206 stellen eine Cache-Speicherhierarchie innerhalb des Prozessors 200 dar. Die Cache-Speicherhierarchie kann wenigstens eine Ebene Befehls- und Datencache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen gemeinsam genutzten Mid-Level-Cache (mittlere Cache-Ebene) aufweisen, wie z. B. eine Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cache-Ebenen, wobei die höchste Cache-Ebene vor dem externen Speicher als LLC klassifiziert ist. In einigen Ausführungsformen erhält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 216 und einen Systemagentenkern 210 aufweisen. Die ein oder mehreren Bussteuerungseinheiten 216 verwalten eine Reihe von Peripheriebussen, wie z. B. einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 210 stellt Verwaltungsfunktionen für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 auf, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In einigen Ausführungsformen weisen einer oder mehrere der Prozessorkerne 202A-202N Unterstützung für simultanes Multithreading auf. In einer solchen Ausführungsform weist der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während der Multithread-Verarbeitung auf. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuerungseinheit (PCU, Power Control Unit) aufweisen, die Logik und Komponenten zum Regeln des Energiezustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 aufweist.
  • In einigen Ausführungsformen weist der Prozessor 200 zusätzlich den Grafikprozessor 208 auf, um Grafikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz gemeinsam genutzter Cache-Einheiten 206 und dem Systemagentenkern 210, der die ein oder mehreren integrierten Speichersteuerungen 214 aufweist, gekoppelt. In einigen Ausführungsformen weist der Systemagentenkern 210 auch eine Anzeigesteuerung 211 auf, um die Grafikprozessorausgabe an ein oder mehrere gekoppelte Anzeigen zu steuern. In einigen Ausführungsformen kann die Anzeigesteuerung 211 auch ein separates Modul sein, das über wenigstens ein Interconnect (Zwischenverbindung) mit dem Grafikprozessor gekoppelt ist, oder kann in den Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Interconnect-Einheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Es kann jedoch eine alternative Interconnect-Einheit verwendet werden, wie z. B. ein Punkt-zu-Punkt-Interconnect, ein geschaltetes Interconnect oder andere Techniken, einschließlich in der Technik hinreichend bekannter Techniken. In einigen Ausführungsformen ist der Grafikprozessor 208 über eine E/A-Verbindung 213 mit dem Ring-Interconnect 212 gekoppelt.
  • Die beispielhafte E/A-Verbindung 213 stellt wenigstens eine von mehreren Varianten von E/A-Interconnects dar, einschließlich eines E/A-Interconnect auf dem Paket, das die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem hochleistungsfähigen eingebetteten Speichermodul 218, wie z. B. einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen nutzen jeder der Prozessorkerne 202A-202N und der Grafikprozessor 208 eingebettete Speichermodule 218 als gemeinsamen Last-Level-Cache.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die die gleiche Befehlssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 202A-202N in Bezug auf die Befehlssatzarchitektur (ISA, Instruction Set Architecture) heterogen, wobei einer oder mehrere der Prozessorkerne 202A-202N einen ersten Befehlssatz ausführen, während wenigstens einer der anderen Kerne eine Teilmenge des ersten Befehlssatzes oder einen anderen Befehlssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N in Bezug auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Stromverbrauch mit einem oder mehreren Leistungskernen mit geringerem Stromverbrauch gekoppelt sind. Zusätzlich kann der Prozessor 200 auf einem oder mehreren Chips oder als SoC in Form einer integrierten Schaltung mit den abgebildeten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 3 ist ein Blockdiagramm eines Grafikprozessors 300, bei dem es sich um eine diskrete Grafikverarbeitungseinheit oder um einen Grafikprozessor, der mit mehreren Verarbeitungskernen integriert ist, handeln kann. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit den Registern auf dem Grafikprozessor und mit Befehlen, die in den Prozessorspeicher gegeben werden. In einigen Ausführungsformen weist der Grafikprozessor 300 eine Speicherschnittstelle 314 zum Zugreifen auf den Speicher auf. Die Speicherschnittstelle 314 kann eine Schnittstelle zum lokalen Speicher, zu einem oder mehreren internen Caches, zu einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher sein.
  • In einigen Ausführungsformen weist der Grafikprozessor 300 auch eine Anzeigesteuerung 302 auf, um die Anzeigeausgabedaten an eine Anzeigevorrichtung 320 zu steuern. Die Anzeigesteuerung 302 weist Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Komposition mehrerer Schichten von Video- oder Benutzerschnittstellenelementen auf. Die Anzeigevorrichtung 320 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 320 eine kopfmontierte Anzeigevorrichtung, wie z. B. eine VR (Virtual-Reality)-Anzeigevorrichtung oder eine AR (Augmented-Reality)-Anzeigevorrichtung. In einigen Ausführungsformen weist der Grafikprozessor 300 eine Videocodec-Engine 306 auf, zum Codieren, Decodieren oder Transcodieren von Medien in, aus oder zwischen ein oder mehreren Mediencodierungsformaten, einschließlich, jedoch nicht beschränkt auf MPEG (Moving Picture Experts Group)-Formate wie MPEG-2, AVC (Advanced Video Coding)-Formate wie H.264/MPEG-4 AVC ebenso wie Formate der Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und der Joint Photographic Experts Group (JPEG) wie JPEG sowie MJPEG (Motion JPEG)-Formate.
  • In einigen Ausführungsformen weist der Grafikprozessor 300 eine Blockbildübertragungs (BLIT, Block Image Transfer)-Engine 304 zum Durchführen von zweidimensionalen (2D) Rasterungsoperationen, einschließlich z. B. Bitgrenzen-Blockübertragungen, auf. In einer Ausführungsform werden 2D-Grafikoperationen jedoch mit einer oder mehreren Komponenten der Grafikverarbeitungs-Engine (GPE, Graphics Processing Engine) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen weist die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen auf, z. B. das Rendern dreidimensionaler Bilder und Szenen mit Hilfe von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 312 weist programmierbare und feste Funktionselemente auf, die verschiedene Aufgaben innerhalb des Elements durchführen und/oder Ausführungs-Threads an ein 3D/Mediensubsystem 315 erzeugen (Spawn). Während die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen durchzuführen, weist eine Ausführungsform der GPE 310 auch eine Medienpipeline 316 auf, die speziell zum Durchführen von Medienoperationen wie z. B. Video-Nachbearbeitung und Bildverbesserung verwendet wird.
  • In einigen Ausführungsformen weist die Medienpipeline 316 Festfunktions- oder programmierbare Logikeinheiten auf, um eine oder mehrere spezialisiertere Medienoperationen wie z. B. Beschleunigung der Video-Decodierung, Video-Entschachtelung (Deinterlacing) und Beschleunigung der Video-Codierung anstelle oder im Auftrag der Video-Codec-Engine 306 durchzuführen. In einigen Ausführungsformen weist die Medienpipeline 316 zusätzlich eine Thread-Erzeugungseinheit zum Erzeugen von Threads zur Ausführung auf dem 3D/Mediensubsystem 315 auf. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten des 3D/Mediensubsystems 315 durch.
  • In einigen Ausführungsformen weist das 3D/Mediensubsystem 315 Logik zum Ausführen von Threads, die von der 3D-Pipeline 312 und der Medienpipeline 316 erzeugt werden, auf. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D/Mediensubsystem 315, das eine Thread-Abfertigungslogik zum Arbitrieren und Verteilen der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen aufweist. Die Ausführungsressourcen weisen eine Anordnung von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads auf. In einigen Ausführungsformen weist das 3D/Mediensubsystem 315 einen oder mehrere interne Caches für Thread-Befehle und Daten auf. In einigen Ausführungsformen weist das Subsystem auch gemeinsam genutzten Speicher, einschließlich Registern und adressierbarem Speicher, auf, um Daten zwischen Threads zu teilen und Ausgabedaten zu speichern.
  • Grafikverarbeitungs- Engine
  • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors gemäß einigen Ausführungsformen; In einer Ausführungsform ist die Grafikverarbeitungsmaschine (GPE, Graphics Processing Engine) 410 eine Version der in 3 gezeigten GPE 310. Elemente der von 4, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente von anderen Figuren der vorliegenden Patentschrift aufweisen, können in beliebiger ähnlicher Weise wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt. Beispielsweise sind die 3D-Pipeline 312 und die Medienpipeline 316 von 3 dargestellt. Die Medienpipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und möglicherweise nicht explizit in die GPE 410 aufgenommen. So ist beispielsweise und in wenigstens einer Ausführungsform ein separater Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehlsgeber (Command Streamer) 403 gekoppelt oder weist einen solchen auf, der einen Befehlsdatenstrom an die 3D-Pipeline 312 und/oder die Medienpipelines 316 bereitstellt. In einigen Ausführungsformen ist der Befehlsgeber 403 mit dem Speicher gekoppelt, der entweder der Systemspeicher oder eines oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher sein kann. In einigen Ausführungsformen empfängt der Befehlsgeber 403 Befehle aus dem Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medienpipeline 316. Bei den Befehlen handelt es sich um Anweisungen, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 312 und die Medienpipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer enthalten, in denen Stapel aus mehreren Befehlen gespeichert werden. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf im Speicher gespeicherte Daten aufweisen, wie z. B., jedoch nicht beschränkt auf, 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 innerhalb der jeweiligen Pipelines ausführen oder einen oder mehrere Ausführungs-Threads an eine Grafikkernanordnung 414 verteilen. In einer Ausführungsform weist die Grafikkernanordnung 414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 415A, Grafikkern(e) 415B) auf, wobei jeder Block einen oder mehrere Grafikkerne aufweist. Jeder Grafikkern weist einen Satz von Grafikausführungsressourcen auf, der universelle und grafikspezifische Ausführungslogik zum Durchführen von Grafik- und Rechenoperationen sowie Texturverarbeitung mit festen Funktionen und/oder Beschleunigungslogik für maschinelles Lernen und künstliche Intelligenz aufweist.
  • In verschiedenen Ausführungsformen weist die 3D-Pipeline 312 Festfunktions- und programmierbare Logik zum Verarbeiten eines oder mehrerer Schattierer (Shader)-Programme auf, wie z. B. Vertexschattierer, Geometrieschattierer, Pixelschattierer, Fragmentschattierer, Rechenschattierer oder andere Schattiererprogramme, indem die Befehle verarbeitet und Ausführungs-Threads an die Grafikkernanordnung 414 verteilt werden. Die Grafikkernanordnung 414 stellt einen einheitlichen Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Schattiererprogramme bereit. Universal-Ausführungslogik (z. B. Ausführungseinheiten) in den ein oder mehreren Grafikkernen 415A-414B der Grafikkernanordnung 414 beinhaltet Unterstützung für verschiedene 3D-API-Schattierersprachen und kann mehrere simultane Ausführungs-Threads ausführen, die mit mehreren Schattierern verknüpft sind.
  • In einigen Ausführungsformen weist die Grafikkernanordnung 414 auch Ausführungslogik zum Durchführen von Medienfunktionen, wie z. B. Video- und/oder Bildverarbeitung, auf. In einer Ausführungsform weisen die Ausführungseinheiten zusätzlich Universal-Logik auf, die dafür programmierbar ist, parallele Universal-Rechenoperationen durchzuführen, zusätzlich zu den Grafikverarbeitungsoperationen. Die Universal-Logik kann Verarbeitungsoperationen parallel oder in Verbindung mit der Universal-Logik in den ein oder mehreren Prozessorkernen 107 von 1 oder Kern 202A-202N wie in 2 durchführen.
  • Ausgabedaten, die von Threads erzeugt werden, die auf der Grafikkernanordnung 414 ausgeführt werden, können Daten in den Speicher in einem einheitlichen Rückgabepuffer (URB, Unified Return Buffer) 418 ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen verschiedenen Threads, die auf der Grafikkernanordnung 414 ausgeführt werden, zu senden. In einigen Ausführungsformen kann der URB 418 zusätzlich für die Synchronisation zwischen Threads auf der Grafikkernanordnung und Festfunktionslogik innerhalb der gemeinsamen Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist die Grafikkernanordnung 414 skalierbar, derart, dass die Anordnung eine variable Anzahl von Grafikkernen aufweist, von denen jeder eine variable Anzahl von Ausführungseinheiten hat, die auf dem angestrebten Energie- und Leistungsniveau der GPE 410 basiert. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, so dass Ausführungsressourcen je nach Bedarf aktiviert oder deaktiviert werden können.
  • Die Grafikkernanordnung 414 ist mit einer gemeinsamen Funktionslogik 420 gekoppelt, die mehrere Ressourcen aufweist, die von den Grafikkernen in der Grafikkernanordnung gemeinsam genutzt werden. Die gemeinsamen Funktionen innerhalb der gemeinsamen Funktionslogik 420 sind Hardware-Logikeinheiten, die spezielle Zusatzfunktionen an die Grafikkernanordnung 414 bereitstellen. In verschiedenen Ausführungsformen weist die gemeinsame Funktionslogik 420, ohne jedoch darauf beschränkt zu sein, Abtaster- 421, Mathematik- 422 und Thread-übergreifende Kommunikations (ITC, Inter-Thread Communication) 423 -Logik auf. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 innerhalb der gemeinsamen Funktionslogik 420.
  • Eine gemeinsam genutzte Funktion wird implementiert, wenn die Nachfrage nach einer bestimmten spezialisierten Funktion nicht ausreicht, um sie in die Grafikkernanordnung 414 aufzunehmen. Stattdessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eigenständige Einheit in der gemeinsamen Funktionslogik 420 implementiert und von den Ausführungsressourcen innerhalb der Grafikkernanordnung 414 gemeinsam genutzt. Der genaue Satz an Funktionen, die von der Grafikkernanordnung 414 gemeinsam genutzt werden und in der Grafikkernanordnung 414 enthalten sind, variiert je nach Ausführungsform. In einigen Ausführungsformen können spezifische gemeinsam genutzte Funktionen innerhalb der gemeinsamen Funktionslogik 420, die von der Grafikkernanordnung 414 in großem Umfang genutzt werden, in der gemeinsamen Funktionslogik 416 innerhalb der Grafikkernanordnung 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsame Funktionslogik 416 innerhalb der Grafikkernanordnung 414 einige oder die gesamte Logik innerhalb der gemeinsamen Funktionslogik 420 aufweisen. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsamen Funktionslogik 420 in der gemeinsamen Funktionslogik 416 der Grafikkernanordnung 414 dupliziert sein. In einer Ausführungsform ist die gemeinsame Funktionslogik 420 zugunsten der gemeinsamen Funktionslogik 416 innerhalb der Grafikkernanordnung 414 ausgeschlossen.
  • 5 ist ein Blockdiagramm der Hardware-Logik eines Grafikprozessorkerns 500 gemäß einigen hier beschriebenen Ausführungsformen. Elemente von 5, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente von anderen Figuren der vorliegenden Patentschrift aufweisen, können in beliebiger ähnlicher Weise wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt. Der abgebildete Grafikprozessorkern 500 ist in einigen Ausführungsformen in der Grafikkernanordnung 414 von 4 enthalten. Der Grafikprozessorkern 500, manchmal auch als Kern-Slice bezeichnet, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 500 ist beispielhaft für eine Grafikkern-Slice, und ein Grafikprozessor wie hier beschrieben kann mehrere Grafikkern-Slices aufweisen, basierend auf den angestrebten Energie- und Leistungsbereichen. Jeder Grafikkern 500 kann einen Festfunktionsblock 530 aufweisen, der mit mehreren Unterkernen 501A-501F gekoppelt ist, die auch als Sub-Slices bezeichnet werden und modulare Blöcke mit Universal- und Festfunktionslogik aufweisen.
  • In einigen Ausführungsformen weist der Festfunktionsblock 530 eine Geometrie/Festfunktionspipeline 536 auf, die von allen Unterkernen im Grafikprozessor 500 gemeinsam genutzt werden kann, z. B. bei Grafikprozessor-Implementierungen mit geringerer Leistung und/oder geringerem Stromverbrauch. In verschiedenen Ausführungsformen beinhaltet die Geometrie/Festfunktionspipeline 536 eine 3D-Festfunktionspipeline (z. B. 3D-Pipeline 312 wie in 3 und 4), eine Video-Frontendeinheit, einen Thread-Erzeuger (Spawner) und einen Thread-Abfertiger (Dispatcher) sowie einen einheitlichen Rückgabepuffer-Manager, der einheitliche Rückgabepuffer verwaltet, wie z. B. den einheitlichen Rückgabepuffer 418 von 4.
  • In einer Ausführungsform weist der Festfunktionsblock 530 auch eine Grafik-SoC-Schnittstelle 537, einen Grafik-Mikrocontroller 538 und eine Medienpipeline 539 auf. Die Grafik-SoC-Schnittstelle 537 stellt eine Schnittstelle zwischen dem Grafikkern 500 und anderen Prozessorkernen innerhalb einer integrierten Schaltung in Form eines Ein-Chip-Systems bereit. Der Grafik-Mikrocontroller 538 ist ein programmierbarer Subprozessor, der dafür ausgelegt sein kann, verschiedene Funktionen des Grafikprozessors 500 zu verwalten, einschließlich Thread-Abfertigung, Planung und Betriebsmittelentzug. Die Medienpipeline 539 (z. B. Medienpipeline 316 in 3 und 4) weist Logik auf, die das Decodieren, Codieren, Vorverarbeiten und/oder Nachbearbeiten von Multimediadaten, einschließlich Bild- und Video-Daten, ermöglicht. Die Medienpipeline 539 implementiert Medienoperationen über Anforderungen an Rechen- oder Abtastlogik innerhalb der Unterkerne 501-501F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 537 dem Grafikkern 500, mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchieelementen wie einem gemeinsamen Last-Level-Cache-Speicher, dem System-RAM und/oder eingebettetem DRAM auf dem Chip (On-Chip) oder dem Paket (On-Package), zu kommunizieren. Die SoC-Schnittstelle 537 kann auch die Kommunikation mit Festfunktionsvorrichtungen innerhalb des SoC ermöglichen, wie z. B. Kamera-Bildgebungspipelines, und ermöglicht die Verwendung von globalen Speicheratomen, die von dem Grafikkern 500 und den CPUs innerhalb des SoC gemeinsam genutzt werden können, und/oder implementiert diese. Die SoC-Schnittstelle 537 kann auch Energieverwaltungskontrollen für den Grafikkern 500 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 500 und anderen Taktdomänen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 537 den Empfang von Befehlspuffern von einem Befehlsgeber und einem globalen Thread-Abfertiger, die dafür ausgelegt sind, Befehle und Anweisungen an jeden von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors bereitzustellen. Die Befehle und Anweisungen können an die Medienpipeline 539 verteilt werden, wenn Medienoperationen durchgeführt werden sollen, oder an eine Geometrie- und Festfunktionspipeline (z. B. Geometrie- und Festfunktionspipeline 536, Geometrie- und Festfunktionspipeline 514), wenn Grafikverarbeitungsoperationen durchgeführt werden sollen.
  • Der Grafik-Mikrocontroller 538 kann dafür ausgelegt sein, verschiedene Planungs- und Verwaltungsaufgaben für den Grafikkern 500 auszuführen. In einer Ausführungsform kann der Grafik-Mikrocontroller 538 Grafik- und/oder Rechenlastplanung auf den verschiedenen Grafik-Parallel-Engines innerhalb der Ausführungseinheit (EU, Execution Unit)-Anordnungen 502A-502F, 504A-504F innerhalb der Unterkerne 501A-501F durchführen. In diesem Planungsmodell kann Host-Software, die auf einem CPU-Kern eines SoC, das den Grafikkern 500 aufweist, ausgeführt wird, Arbeitslasten an eine von mehreren Grafikprozessor-Doorbells senden, was eine Planungsoperation auf der entsprechenden Grafik-Engine bewirkt. Zu den Planungsoperationen zählen das Bestimmen der nächsten auszuführenden Arbeitslast, das Übermitteln einer Arbeitslast an einen Befehlsgeber, das Entziehen vorhandener Arbeitslasten, die auf einer Engine laufen, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Grafik-Mikrocontroller 538 auch Stromspar- oder Ruhezustände für den Grafikkern 500 ermöglichen, wodurch der Grafikkern 500 die Fähigkeit erhält, Register innerhalb des Grafikkerns 500 über stromsparende Zustandsübergänge unabhängig vom Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu speichern und wiederherzustellen.
  • Der Grafikkern 500 kann mehr oder weniger als die abgebildeten Unterkerne 501A-501F, bis zu N modulare Unterkerne aufweisen. Für jeden Satz von N Unterkernen kann der Grafikkern 500 auch eine gemeinsame Funktionslogik 510, einen gemeinsamen und/oder Cache-Speicher 512, eine Geometrie-/Festfunktionspipeline 514 sowie zusätzliche Festfunktionslogik 516 zum Beschleunigen verschiedener Grafik- und Rechenoperationen aufweisen. Die gemeinsame Funktionslogik 510 kann Logikeinheiten aufweisen, die mit der gemeinsamen Funktionslogik 420 von 4 verknüpft sind (z. B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik) und die von jedem der N Unterkerne innerhalb des Grafikkerns 500 geteilt werden können. Der gemeinsame und/oder Cache-Speicher 512 kann ein Last-Level-Cache für den Satz von N Unterkernen 501A-501F innerhalb des Grafikkerns 500 sein und kann auch als gemeinsamer Speicher dienen, auf den mehrere Unterkerne zugreifen können. Die Geometrie-/Festfunktionspipeline 514 kann anstelle der Geometrie-/Festfunktionspipeline 536 in dem Festfunktionsblock 530 enthalten sein und kann dieselben oder ähnliche Logikeinheiten aufweisen.
  • In einer Ausführungsform weist der Grafikkern 500 zusätzliche Festfunktionslogik 516 auf, die verschiedene Festfunktions-Beschleunigungslogik zur Verwendung durch den Grafikkern 500 aufweisen kann. In einer Ausführungsform enthält die zusätzliche Festfunktionslogik 516 eine zusätzliche Geometriepipeline zur Verwendung in der reinen Positionsschattierung. Bei der reinen Positionsschattierung gibt es zwei Geometriepipelines, die volle Geometriepipeline innerhalb der Geometrie-/Festfunktionspipeline 516, 536 und eine Auslese (Culling)-Pipeline, bei der es sich um eine zusätzliche Geometriepipeline handelt, die in der zusätzlichen Festfunktionslogik 516 enthalten sein kann. In einer Ausführungsform ist die Auslesepipeline eine abgespeckte Version der vollen Geometriepipeline. Die volle Pipeline und die Auslesepipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen eigenen Kontext hat. Die reine Positionsschattierung kann lange Auslesedurchläufe von verworfenen Dreiecken verdecken, so dass das Schattieren in einigen Instanzen früher abgeschlossen werden kann. Beispielsweise kann die Auslesepipelinelogik innerhalb der zusätzlichen Festfunktionslogik 516 Positionsschattierer parallel zur Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als die volle Pipeline, da die Auslesepipeline nur das Positionsattribut der Vertizes abruft und schattiert, ohne eine Rasterung und Renderung der Pixel in den Framepuffer durchzuführen. Die Auslesepipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Rücksicht darauf, ob diese Dreiecke ausgelesen werden. Die volle Pipeline (die in diesem Fall als Wiedergabepipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die ausgelesenen Dreiecke zu überspringen und nur die sichtbaren Dreiecke zu schattieren, die schließlich in die Rasterungsphase übergeleitet werden.
  • In einer Ausführungsform kann die zusätzliche Festfunktionslogik 516 auch eine Maschinenlern-Beschleunigungslogik aufweisen, wie z. B. eine Festfunktionsmatrix-Multiplikationslogik, für Implementierungen, die Optimierungen für das Trainieren des maschinellen Lernens oder die Inferenzierung beinhalten.
  • Innerhalb jedes Grafik-Unterkerns 501A-501F ist eine Reihe von Ausführungsressourcen vorhanden, die zum Durchführen von Grafik-, Medien- und Rechenoperationen in Reaktion auf Anforderungen von Grafikpipeline-, Medienpipeline- oder Schattiererprogrammen verwendet werden können. Die Grafik-Unterkerne 501A-501F weisen mehrere EU-Anordnungen 502A-502F, 504A-504F, Thread-Abfertiger- und Inter-Thread-Kommunikationslogik (TD/IC) 503A-503F, einen 3D (z. B. Textur)-Abtaster 505A-505F, einen Medienabtaster 506A-506F, einen Schattiererprozessor 507A-507F und gemeinsamen lokalen Speicher (SLM, Shared Local Memory) 508A-508F auf. Die EU-Anordnungen 502A-502F, 504A-504F weisen jeweils mehrere Ausführungseinheiten auf, bei denen es sich um Universal-Grafikverarbeitungseinheiten handeln kann, die Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation durchführen können, einschließlich Grafik-, Medien- oder Rechenschattiererprogramme. Die TD/IC-Logik 503A-503F führt lokale Thread-Abfertigungs- und Thread-Steuerungsoperationen für die Ausführungseinheiten innerhalb eines Unterkerns aus und ermöglicht die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Unterkerns ausgeführt werden. Der 3D-Abtaster 505A-505F kann Textur- oder andere 3D-Grafikdaten in den Speicher einlesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem mit einer gegebenen Textur verbundenen Texturformat unterschiedlich einlesen. Der Medienabtaster 506A-506F kann basierend auf dem Typ und dem Format, die mit Mediendaten verknüpft sind, ähnliche Leseoperationen durchführen. In einer Ausführungsform kann jeder Grafik-Unterkern 501A-501F abwechselnd einen einheitlichen 3D- und einen Medienabtaster aufweisen. Threads, die auf den Ausführungseinheiten innerhalb jedes der Unterkerne 501A-501F ausgeführt werden, können den gemeinsamen lokalen Speicher 508A-508F innerhalb jedes Unterkerns nutzen, um zu ermöglichen, dass Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, bei der Ausführung einen gemeinsamen Pool von chipinternem (On-Chip-) Speicher verwenden.
  • Ausführungseinheiten
  • 6A-6B veranschaulichen die Thread-Ausführungslogik 600 einschließlich einer Anordnung von Verarbeitungselementen, die in einem Grafikprozessorkern gemäß hier beschriebenen Ausführungsformen verwendet werden. Elemente von 6A-6B, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente von anderen Figuren der vorliegenden Patentschrift aufweisen, können in beliebiger ähnlicher Weise wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt. 6A zeigt eine Übersicht der Thread-Ausführungslogik 600, die eine Variante der Hardware-Logik enthalten kann, die mit jedem Unterkern 501A-501F von 5 dargestellt ist. 6B veranschaulicht beispielhafte interne Details einer Ausführungseinheit.
  • Wie in 6A dargestellt, weist in einigen Ausführungsformen die Thread-Ausführungslogik 600 einen Schattiererprozessor 602, einen Thread-Abfertiger 604, einen Befehlscache 606, eine skalierbare Ausführungseinheitenanordnung mit mehreren Ausführungseinheiten 608A-608N, einen Abtaster 610, einen Datencache 612 und einen Datenport 614 auf. In einer Ausführungsform kann die skalierbare Ausführungseinheitenanordnung dynamisch skaliert werden, indem eine oder mehrere Ausführungseinheiten (z. B. beliebige der Ausführungseinheiten 608A, 608B, 608C, 608D bis 608N-1 und 608N) basierend auf den Rechenerfordernissen einer Arbeitslast aktiviert oder deaktiviert werden. In einer Ausführungsform sind die enthaltenen Komponenten über ein Interconnect-Geflecht miteinander verbunden, das mit jeder der Komponenten verbunden ist. In einigen Ausführungsformen weist die Thread-Ausführungslogik 600 eine oder mehrere Verbindungen zum Speicher, wie z. B. Systemspeicher oder Cache-Speicher, über eines oder mehrere von Befehlscache 606, Datenport 614, Abtaster 610 und Ausführungseinheiten 608A-608N auf. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 608A) eine eigenständige programmierbare Universal-Berechnungseinheit, die mehrere gleichzeitige Hardware-Threads ausführen und mehrere Datenelemente parallel für jeden Thread verarbeiten kann. In verschiedenen Ausführungsformen ist die Ausführungseinheitenanordnung 608A-608N so skalierbar, dass sie beliebig viele einzelne Ausführungseinheiten aufweist.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 608A-608N hauptsächlich zum Ausführen von Schattiererprogrammen verwendet. Ein Schattiererprozessor 602 kann die verschiedenen Schattiererprogramme verarbeiten und die mit den Schattiererprogrammen verknüpften Ausführungs-Threads über einen Thread-Abfertiger 604 verteilen. In einer Ausführungsform weist der Thread-Abfertiger Logik auf, um Thread-Initiationsanforderungen von den Grafik- und Medienpipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 608A-608N zu instanziieren. Beispielsweise kann eine Geometriepipeline Vertex-, Tesselations- oder Geometrieschattierer zur Verarbeitung an die Thread-Ausführungslogik verteilen. In einigen Ausführungsformen kann der Thread-Abfertiger 604 auch Thread-Erzeugungsanforderungen zur Laufzeit von den ausgeführten Schattiererprogrammen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 608A-608N einen Befehlssatz, der native Unterstützung für viele Standard-3D-Grafikschattiererbefehle beinhaltet, so dass 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 Universal-Verarbeitung (z. B. Rechen- und Medienschattierer). Jede der Ausführungseinheiten 608A-608N ist in der Lage zur superskalaren SIMD (Single Instruction Multiple Data, eine Instruktion - mehrere Daten)-Ausführung, und der Multithread-Betrieb ermöglicht angesichts von Speicherzugriffen mit höherer Latenzzeit eine effiziente Ausführungsumgebung. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit verfügt über eine dedizierte Registerdatei mit hoher Bandbreite und einen zugehörigen unabhängigen Thread-Zustand. Die Ausführung erfolgt superskalar pro Takt an Pipelines, die ganzzahlige, einfach und doppelt genaue Gleitkommaoperationen, SIMD-Zweigfähigkeit, logische Operationen, transzendentale Operationen und verschiedene andere Operationen ausführen können. Während des Wartens auf Daten aus dem Speicher oder von einer der gemeinsamen Funktionen bewirkt die Abhängigkeitslogik innerhalb der Ausführungseinheiten 608A-608N, dass ein wartender Thread im Ruhezustand ist, bis die angeforderten Daten zurückgegeben wurden. Während der wartende Thread im Ruhezustand ist, werden möglicherweise Hardware-Ressourcen für die Verarbeitung anderer Threads verwendet. Beispielsweise kann eine Ausführungseinheit während einer Verzögerung im Zusammenhang mit einer Vertexschattiereroperation Operationen für einen Pixelschattierer, Fragmentschattierer oder eine andere Art von Schattiererprogramm, einschließlich eines anderen Vertexschattierers, durchführen.
  • Jede Ausführungseinheit in den Ausführungseinheiten 608A-608N arbeitet an Anordnungen von Datenelementen. Die Anzahl der Datenelemente ist die „Ausführungsgröße“ oder Anzahl der Kanäle für den Befehl. Ein Ausführungskanal ist eine logische Ausführungseinheit für den Datenelementzugriff, die Maskierung und die Ablaufsteuerung innerhalb von Befehlen. Die Anzahl der Kanäle kann unabhängig von der Anzahl der physischen arithmetischen Logikeinheiten (ALU, Arithmetic Logic Units) oder Gleitkommaeinheiten (FPU, Floating Point Units) für einen bestimmten Grafikprozessor sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 608A-608N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Befehlssatz der Ausführungseinheit weist SIMD-Befehle auf. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert sein, und die Ausführungseinheit wird die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeiten. So sind beispielsweise, bei Betrieb auf einem 256 Bit breiten Vektor, die 256 Bits des Vektors in einem Register gespeichert, und die Ausführungseinheit bearbeitet den Vektor als vier separate 64-Bit-gepackte Datenelemente (Vierwort-Datenelemente (QW, Quad Word)), acht separate 32-Bit-gepackte Datenelemente (Doppelwort-Datenelemente (DW, Double Word)), sechzehn separate 16-Bit-gepackte Datenelemente (Einwort-Datenelemente (W, Word)) oder zweiunddreißig separate 8-Bit-Datenelemente (Byte-Datenelemente (B)). Es sind jedoch auch andere Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer fusionierten Ausführungseinheit 609A-609N mit einer Thread-Steuerungslogik (607A-607N) kombiniert werden, die den fusionierten EUs gemeinsam ist. Mehrere EUs können zu einer EU-Gruppe fusioniert werden. Jede EU in der fusionierten EU-Gruppe kann dafür ausgelegt sein, einen separaten SIMD-Hardware-Thread auszuführen. Die Anzahl der EUs in einer fusionierten EU-Gruppe kann je nach Ausführungsform variieren. Zusätzlich können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, jedoch nicht beschränkt auf SIMD8, SIMD16 und SIMD32. Jede fusionierte Grafikausführungseinheit 609A-609N weist wenigstens zwei Ausführungseinheiten auf. Beispielsweise umfasst die fusionierte Ausführungseinheit 609A eine erste EU 608A, eine zweite EU 608B und Thread-Steuerungslogik 607A, die der ersten EU 608A und der zweiten EU 608B gemeinsam ist. Die Thread-Steuerungslogik 607A steuert die auf der fusionierten Grafikausführungseinheit 609A ausgeführten Threads, so dass jede EU innerhalb der fusionierten Ausführungseinheiten 609A-609N unter Verwendung eines gemeinsamen Befehlszeigerregisters ausgeführt werden kann.
  • Ein oder mehrere interne Befehlscaches (z. B. 606) sind in der Thread-Ausführungslogik 600 enthalten, um Thread-Befehle für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 612) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In einigen Ausführungsformen ist ein Abtaster 610 enthalten, um Texturabtastung für 3D-Operationen und Medienabtastung für Medienoperationen zu ermöglichen. In einigen Ausführungsformen weist der Abtaster 610 spezielle Textur- oder Medienabtastfunktionen auf, um Textur- oder Mediendaten während des Abtastvorgangs zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medienpipelines Thread-Initiationsanforderungen über die Thread-Erzeugungs- und Abfertigungslogik an die Thread-Ausführungslogik 600. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastert wurde, wird die Pixelprozessorlogik (z. B. Pixelschattiererlogik, Fragmentschattiererlogik usw.) innerhalb des Schattiererprozessors 602 aufgerufen, um weiter Ausgabeinformationen zu berechnen und zu bewirken, dass die Ergebnisse auf die Ausgabeflächen geschrieben werden (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.). In einigen Ausführungsformen berechnet ein Pixelschattierer oder Fragmentschattierer die Werte der verschiedenen Vertexattribute, die interpoliert werden sollen, über das gerasterte Objekt. In einigen Ausführungsformen führt die Pixelprozessorlogik innerhalb des Schattiererprozessors 602 dann ein von einer Anwendungsprogrammierschnittstelle (API) bereitgestelltes Pixel- oder Fragmentschattiererprogramm aus. Um das Schattiererprogramm auszuführen, verteilt der Schattiererprozessor 602 Threads über den Thread-Abfertiger 604 an eine Ausführungseinheit (z. B. 608A). In einigen Ausführungsformen verwendet der Schattiererprozessor 602 Texturabtastlogik im Abtaster 610, um auf Texturdaten in Texturabbildungen zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den eingegebenen Geometriedaten berechnen die Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel für die weitere Verarbeitung.
  • In einigen Ausführungsformen stellt der Datenport 614 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 600 bereit, um verarbeitete Daten zur weiteren Verarbeitung auf einer Grafikprozessor-Ausgabepipeline in den Speicher auszugeben. In einigen Ausführungsformen weist der Datenport 614 einen oder mehrere Cache-Speicher (z. B. Datencache 612) auf oder ist mit diesen gekoppelt, um Daten für den Speicherzugriff über den Datenport zwischenzuspeichern.
  • Wie in 6B dargestellt, kann eine Grafikausführungseinheit 608 eine Befehlsabrufeinheit 637, eine allgemeine Registerdatei (GRF, General Register File)-Anordnung 624, eine Architekturregisterdatei (ARF, Architectural Register File)-Anordnung 626, einen Thread-Arbiter 622, eine Sendeeinheit 630, eine Verzweigungseinheit 632, einen Satz von SIMD-Gleitkommaeinheiten (FPU, Floating Point Unit) 634 und in einer Ausführungsform einen Satz von dedizierten ganzzahligen SIMD-ALUs 635 aufweisen. Die GRF 624 und die ARF 626 weisen den Satz von allgemeinen Registerdateien und Architekturregisterdateien auf, die mit jedem gleichzeitigen Hardware-Thread verknüpft sind, der in der Grafikausführungseinheit 608 aktiv sein kann. In einer Ausführungsform wird der Architekturzustand pro Thread in der ARF 626 gehalten, während die Daten, die während der Thread-Ausführung verwendet werden, in der GRF 624 gespeichert sind. Der Ausführungszustand jedes Threads, einschließlich der Befehlszeiger für jeden Thread, kann in Thread-spezifischen Registern in der ARF 626 gehalten werden.
  • In einer Ausführungsform hat die Grafikausführungseinheit 608 eine Architektur, die eine Kombination aus simultanem Multithreading (SMT, Simultaneous Multi-Threading) und feinkörnigem verschachteltem Multithreading (IMT, Interleaved Multi-Threading) darstellt. Die Architektur hat einen modularen Aufbau, der zum Zeitpunkt der Entwicklung basierend auf einer angestrebten Anzahl gleichzeitiger Threads und Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit auf die verwendete Logik aufgeteilt werden, mehrere gleichzeitige Threads auszuführen.
  • In einer Ausführungsform kann die Grafikausführungseinheit 608 mehrere Befehle parallel ausgeben, die jeweils unterschiedliche Befehle sein können. Der Thread-Arbiter 622 des Grafikausführungseinheit-Threads 608 kann die Befehle zur Ausführung an entweder die Sendeeinheit 630, die Verzweigungseinheit 642 oder die SIMD-FPU(s) 634 verteilen. Jeder Ausführungs-Thread kann auf 128 Universal-Register innerhalb der GRF 624 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. In einer Ausführungsform hat jeder Thread der Ausführungseinheit Zugriff auf 4 kByte innerhalb der GRF 624, wenngleich die Ausführungsformen nicht darauf beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. In einer Ausführungsform können bis zu sieben Threads gleichzeitig ausgeführt werden, wobei die Anzahl der Threads pro Ausführungseinheit je nach Ausführungsform ebenfalls variieren kann. In einer Ausführungsform, in der sieben Threads auf 4 kByte zugreifen können, kann die GRF 624 insgesamt 28 kByte speichern. Durch flexible Adressierungsmodi können Register gemeinsam adressiert werden, um effektiv breitere Register zu bilden oder um gestaffelte rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Abtastoperationen und andere Systemkommunikationen mit längerer Latenzzeit über „Senden“-Befehle verteilt, die von der Nachrichtenaustausch-Sendeeinheit 630 ausgeführt werden. In einer Ausführungsform werden Verzweigungsbefehle an eine spezielle Verzweigungseinheit 632 verteilt, um SIMD-Divergenz und schließliche Konvergenz zu ermöglichen.
  • In einer Ausführungsform weist die Grafikausführungseinheit 608 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU) 634 auf, um Gleitkommaoperationen durchzuführen. In einer Ausführungsform unterstützen die ein oder mehreren FPUs 634 auch Ganzzahlberechnung. In einer Ausführungsform können die ein oder mehreren FPUs 634 bis zu einer Anzahl von M 32-Bit-Gleitkomma (oder Ganzzahl)-Operationen nach dem SIMD-Prinzip ausführen, oder bis zu 2M 16-Bit-Ganzzahl oder 16-Bit-Gleitkommaoperationen nach dem SIMD-Prinzip ausführen. In einer Ausführungsform bietet wenigstens eine der FPU(s) erweiterte mathematische Fähigkeiten zur Unterstützung transzendentaler mathematischer Funktionen mit hohem Durchsatz und doppelt genauer 64-Bit-Gleitkommafunktion. In einigen Ausführungsformen ist auch ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 635 vorhanden, die speziell für die Durchführung von Operationen im Zusammenhang mit maschinellen Lernberechnungen optimiert sein können.
  • In einer Ausführungsform können Anordnungen mehrerer Instanzen der Grafikausführungseinheit 608 in einer Grafik-Unterkerngruppierung (z. B. einer Sub-Slice) instanziiert sein. Für die Skalierbarkeit können Produktarchitekten die genaue Anzahl der Ausführungseinheiten pro Unterkerngruppierung wählen. In einer einzigen Ausführungsform kann die Ausführungseinheit 608 Befehle über mehrere Ausführungskanäle hinweg ausführen. In einer weiteren Ausführungsform wird jeder Thread, der auf der Grafikausführungseinheit 608 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • 7 ist ein Blockdiagramm, das Grafikprozessor-Befehlsformate 700 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Ausführungseinheiten des Grafikprozessors einen Befehlssatz mit Befehlen in mehreren Formaten. Die durchgezogenen Kästchen veranschaulichen die Komponenten, die im Allgemeinen in einem Ausführungseinheitenbefehl enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional oder nur in einer Untermenge der Befehle enthalten sind. In einigen Ausführungsformen bildet das beschriebene und veranschaulichte Befehlsformat 700 Makrobefehle, da es sich um Befehle handelt, die an die Ausführungseinheit geliefert werden, im Gegensatz zu Mikrooperationen, die aus der Befehlsdecodierung resultieren, sobald der Befehl verarbeitet wird.
  • In einigen Ausführungen unterstützen die Ausführungseinheiten des Grafikprozessors nativ Befehle in einem 128-Bit-Befehlsformat 710. Für einige Befehle ist ein komprimiertes 64-Bit-Befehlsformat 730 verfügbar, das auf dem ausgewählten Befehl, den Befehlsoptionen und der Anzahl der Operanden basiert. Das native 128-Bit-Befehlsformat 710 bietet Zugriff auf alle Befehlsoptionen, während einige Optionen und Operationen im 64-Bit-Format 730 eingeschränkt sind. Die im 64-Bit-Format 730 verfügbaren nativen Befehle variieren je nach Ausführungsform. In einigen Ausführungsformen wird der Befehl teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 komprimiert. Die Hardware der Ausführungseinheit verweist auf einen Satz von Komprimierungstabellen, die auf den Indexwerten basieren, und verwendet die Ausgaben der Komprimierungstabellen, um einen nativen Befehl im 128-Bit-Befehlsformat 710 zu rekonstruieren.
  • Für jedes Format definiert der Befehls-Opcode 712 die Operation, die die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jeden Befehl parallel über die mehreren Datenelemente jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit in Reaktion auf einen Hinzufügen-Befehl eine gleichzeitige Hinzufügen-Operation über jeden Farbkanal aus, der ein Texturelement oder Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jeden Befehl über alle Datenkanäle der Operanden aus. In einigen Ausführungsformen ermöglicht das Feld Befehlssteuerung („Control“) 714 die Kontrolle über bestimmte Ausführungsoptionen, wie z. B. die Kanalauswahl (z. B. Prädikation) und die Reihenfolge der Datenkanäle (z. B. Swizzle). Bei Befehlen im 128-Bit-Befehlsformat 710 begrenzt ein Feld Ausführungsgröße („exec size“) 716 die Anzahl der Datenkanäle, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Feld Ausführungsgröße 716 nicht für die Verwendung im kompakten 64-Bit-Befehlsformat 730 verfügbar.
  • Einige Ausführungseinheitenbefehle haben bis zu drei Operanden, darunter zwei Quelloperanden, SRC0 720, SRC1 722, und einen Zieloperanden (DEST) 718. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Befehle mit zwei Zielen, wobei eines der Ziele impliziert wird. Datenmanipulationsbefehle können einen dritten Quelloperanden haben (z. B. SRC2 724), wobei der Befehls-Opcode 712 die Anzahl der Quelloperanden bestimmt. Der letzte Quelloperand eines Befehls kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit dem Befehl übergeben wird.
  • In einigen Ausführungsformen weist das 128-Bit-Befehlsformat 710 ein Feld Zugriffs-/Adressierungsmodus („Access/Address Mode“) 726 auf, das beispielsweise angibt, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt in Form von Bits im Befehl bereitgestellt.
  • In einigen Ausführungsformen weist das 128-Bit-Befehlsformat 710 ein Feld Zugriffs-/Adressierungsmodus 726 auf, das einen Adressierungsmodus und/oder einen Zugriffsmodus für den Befehl angibt. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffssynchronisation für den Befehl zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, einschließlich eines 16-Byte-synchronisierten Zugriffsmodus und eines 1-Byte-synchronisierten Zugriffsmodus, wobei die Byte-Synchronisation des Zugriffsmodus die Zugriffssynchronisation der Befehlsoperanden bestimmt. Beispielsweise kann der Befehl in einem ersten Modus eine Byte-synchronisierte Adressierung für Quell- und Zieloperanden verwenden, und in einem zweiten Modus kann der Befehl eine 16-Byte-synchronisierte Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressierungsmodusteil des Feldes Zugriffs-/Adressierungsmodus 726, ob der Befehl direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen Bits im Befehl die Registeradresse eines oder mehrerer Operanden direkt bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Unmittelbaradressierungs-Feld im Befehl berechnet werden.
  • In einigen Ausführungsformen sind die Befehle basierend auf Opcode 712 Bitfeldern gruppiert, um die Opcode-Decodierung 740 zu vereinfachen. Bei einem 8-Bit-Opcode kann die Ausführungseinheit anhand der Bits 4, 5 und 6 den Typ des Opcodes bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen weist eine Verschiebungs- und Logik („Move/Logic“)-Opcodegruppe 742 Datenverschiebungs- und Logikbefehle (z. B. verschieben („move“, MOV), vergleichen („compare“, CMP)) auf. In einigen Ausführungsformen teilt sich die Verschiebungs- und Logikgruppe 742 die fünf höchstwertigsten Bits (MSB, Most Significant Bit), wobei Verschiebungs (MOV)-Befehle in der Form 0000xxxxb und Logikbefehle in der Form 0001xxxxb vorliegen. Eine Befehlsgruppe Ablaufsteuerung („Flow Control“) 744 (z. B. aufrufen („call“, springen („jump“, JMP)) weist Befehle in der Form 0010xxxxb (z. B. 0x20) auf. Eine Befehlsgruppe Verschiedenes („Miscellaneous“) 746 weist eine Mischung von Befehlen einschließlich Synchronisationsbefehlen (z. B. warten („wait“), senden („send“)) in der Form OOllxxxxb (z. B. 0x30) auf. Eine Befehlsgruppe Parallelmathematik („Parallel Math“) 748 weist komponentenweise arithmetische Befehle (z. B. addieren („add“), multiplizieren („multiply“, MUL)) in der Form 0 1 00xxxxb (z. B. 0x40) auf. Die Gruppe Parallelmathematik 748 führt die arithmetischen Operationen parallel über Datenkanäle hinweg aus. Die Gruppe Vektormathematik („Vector Math“) 750 weist arithmetische Befehle (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50) auf. Die Gruppe Vektormathematik führt arithmetische Operationen wie z. B. Skalarproduktberechnungen an Vektoroperanden durch.
  • Grafikpipeline
  • 8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Grafikprozessors 800. Elemente von 8, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente von anderen Figuren der vorliegenden Patentschrift aufweisen, können in beliebiger ähnlicher Weise wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen weist der Grafikprozessor 800 eine Geometriepipeline 820, eine Medienpipeline 830, eine Anzeige-Engine 840, eine Thread-Ausführungslogik 850 und eine Render-Ausgabepipeline 870 auf. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor innerhalb eines Mehrkern-Verarbeitungssystems, das einen oder mehrere Universal-Verarbeitungskerne aufweist. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder durch Befehle gesteuert, die über ein Ring-Interconnect 802 an den Grafikprozessor 800 ausgegeben werden. In einigen Ausführungsformen koppelt das Ring-Interconnect 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten, wie z. B. anderen Grafikprozessoren oder Universal-Prozessoren. Befehle vom Ring-Interconnect 802 werden von einem Befehlsgeber 803 interpretiert, der Befehle an einzelne Komponenten der Geometriepipeline 820 oder der Medienpipeline 830 liefert.
  • In einigen Ausführungsformen leitet der Befehlsgeber 803 die Operation eines Vertexabrufers 805 an, der Vertexdaten aus dem Speicher liest und die vom Befehlsgeber 803 bereitgestellten Vertexverarbeitungsbefehle ausführt. In einigen Ausführungsformen stellt der Vertexabrufer 805 Vertexdaten an einen Vertexschattierer 807 bereit, der die Koordinatenraumtransformation und Beleuchtungsoperationen für jeden Vertex durchführt. In einigen Ausführungsformen führen Vertexabrufer 805 und Vertexschattierer 807 Vertexverarbeitungsbefehle aus, indem sie Ausführungs-Threads über einen Thread-Abfertiger 831 an die Ausführungseinheiten 852A-852B verteilen.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B eine Anordnung von Vektorprozessoren mit einem Befehlssatz zum Durchführen von Grafik- und Medienoperationen. In einigen Ausführungen ist den Ausführungseinheiten 852A-852B ein L1-Cache 851 beigefügt, der für jede Anordnung spezifisch ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als Datencache, Befehlscache oder als einzelner Cache ausgestaltet sein, der so partitioniert ist, dass er Daten und Befehle in verschiedenen Partitionen enthält.
  • In einigen Ausführungsformen weist die Geometriepipeline 820 Tessellationskomponenten auf, um eine Hardware-beschleunigte Tessellation von 3D-Objekten durchzuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Mantelschattierer 811 die Tesselationsoperationen. Ein programmierbarer Domänenschattierer 817 stellt eine Backend-Auswertung der Tessellationsausgabe bereit. Ein Tessellator 813 arbeitet in der Richtung des Mantelschattierers 811 und weist eine spezielle Logik auf, um eine Reihe detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell, das als Eingang in die Geometriepipeline 820 bereitgestellt wird, zu erzeugen. In einigen Ausführungsformen können, wenn keine Tesselation verwendet wird, Tessellationskomponenten (z. B. Mantelschattierer 811, Tessellator 813 und Domänenschattierer 817) umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte von einem Geometrieschattierer 819 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 852A-852B verteilt werden, oder können direkt an den Clipper (Begrenzer) 829 weitergeleitet werden. In einigen Ausführungsformen wirkt der Geometrieschattierer auf ganze geometrische Objekte und nicht wie in früheren Phasen der Grafikpipeline auf Vertizes oder Positionen von Vertizes. Wenn die Tesselation deaktiviert ist, empfängt der Geometrieschattierer 819 Eingänge vom Vertexschattierer 807. In einigen Ausführungsformen ist der Geometrieschattierer 819 durch ein Geometrieschattiererprogramm programmierbar, um eine Geometrie-Tesselation durchzuführen, wenn die Tesselationseinheiten deaktiviert sind.
  • Vor der Rasterung kann ein Clipper 829 Vertexdaten verarbeiten. Der Clipper 829 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrieschattiererfunktionen sein. In einigen Ausführungsformen werden durch eine Rasterisierer- und Tiefenprüfungskomponente 873 in der Render-Ausgabepipeline 870 Pixelschattierer abgefertigt, um die geometrischen Objekte in pixelgenaue Darstellungen zu konvertieren. In einigen Ausführungsformen ist die Pixelschattiererlogik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierer- und Tiefenprüfungskomponente 873 umgehen und über eine Ausgabe (Stream-Out)-Einheit 823 auf nicht gerasterte Vertexdaten zugreifen.
  • Der Grafikprozessor 800 verfügt über einen Interconnect-Bus, ein Interconnect-Geflecht oder einen anderen Interconnect-Mechanismus, der den Daten- und Nachrichtenaustausch zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und die zugehörigen Logikeinheiten (z. B. L1-Cache 851, Abtaster 854, Texturcache 858 usw.) über einen Datenport 856 miteinander verbunden, um den Speicherzugriff durchzuführen und mit den Render-Ausgabepipelinekomponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen haben der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade. In einer Ausführungsform kann der Texturcache 858 auch als Abtastercache ausgelegt sein.
  • In einigen Ausführungsformen weist die Render-Ausgabepipeline 870 eine Rasterisierer- und Tiefenprüfungskomponente 873 auf, die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung konvertiert. In einigen Ausführungsformen weist die Rasterisiererlogik eine Fenster/Maskier-Einheit auf, um eine Dreiecks- und Linienrasterung mit fester Funktion durchzuführen. Ein zugehöriger Rendercache 878 und Tiefencache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationenkomponente 877 führt pixelbasierte Operationen an den Daten durch, obwohl in einigen Fällen Pixeloperationen, die mit 2D-Operationen verknüpft sind (z. B. Bitblock-Bildübertragungen mit Überblendung), von der 2D-Engine 841 durchgeführt werden oder zum Zeitpunkt der Anzeige durch die Anzeigesteuerung 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen steht allen Grafikkomponenten ein gemeinsamer L3-Cache 875 zur Verfügung, der die gemeinsame Nutzung von Daten ohne Inanspruchnahme des Hauptsystemspeichers ermöglicht.
  • In einigen Ausführungsformen umfasst die Medienpipeline 830 des Grafikprozessors eine Medien-Engine 837 und ein Video-Frontend 834. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipelinebefehle vom Befehlsgeber 803. In einigen Ausführungsformen weist die Medienpipeline 830 einen separaten Befehlsgeber auf. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle, bevor es den Befehl an die Medien-Engine 837 sendet. In einigen Ausführungsformen weist die Medien-Engine 837 eine Thread-Erzeugungsfunktionalität auf, um Threads zu erzeugen, die über den Thread-Abfertiger 831 an die Thread-Ausführungslogik 850 verteilt werden.
  • In einigen Ausführungsformen weist der Grafikprozessor 800 eine Anzeige-Engine 840 auf. In einigen Ausführungsformen liegt die Anzeige-Engine 840 außerhalb des Prozessors 800 und ist mit dem Grafikprozessor über das Ring-Interconnect 802 oder einen anderen Interconnect-Bus bzw. ein Interconnect-Geflecht gekoppelt. In einigen Ausführungsformen weist die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843 auf. In einigen Ausführungsformen weist die Anzeige-Engine 840 eine spezielle Logik auf, die unabhängig von der 3D-Pipeline arbeiten kann. In einigen Ausführungsformen ist die Anzeigesteuerung 843 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt, die eine integrierte Systemanzeigevorrichtung, etwa in einem Laptop-Computer, oder eine über einen Anzeigevorrichtungsanschluss angeschlossene externe Anzeigevorrichtung sein kann.
  • In einigen Ausführungsformen können die Geometriepipeline 820 und die Medienpipeline 830 so ausgelegt werden, dass sie Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchführen können und nicht spezifisch für eine bestimmte Anwendungsprogrammierschnittstelle (API) sind. In einigen Ausführungsformen übersetzt die Treibersoftware für den Grafikprozessor API-Aufrufe, die spezifisch für eine bestimmte Grafik- oder Medienbibliothek sind, in Befehle, die vom Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Graphics and Compute API, alle von der Khronos Group, bereitgestellt. In einigen Ausführungsformen kann auch Unterstützung für die Direct3D-Bibliothek der Microsoft Corporation bereitgestellt werden. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde ebenfalls unterstützt, wenn eine Zuordnung von der Pipeline der zukünftigen API zur Pipeline des Grafikprozessors möglich ist.
  • Grafikpipeline-Programmierung
  • 9A ist ein Blockdiagramm, das Grafikprozessor-Befehlsformate 900 gemäß einigen Ausführungsformen darstellt. 9B ist ein Blockdiagramm, das eine Befehlssequenz 910 eines Grafikprozessors gemäß einer Ausführungsform darstellt. Die durchgezogenen Kästchen in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder nur in einer Untermenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 900 von 9A weist Datenfelder auf, um einen Client 902, einen Befehlsoperationscode („Opcode“) 904 und Daten („Data“) 906 für den Befehl zu identifizieren. Ein Sub-Opcode 905 und eine Befehlsgröße („Command Size“) 908 sind ebenfalls in einigen Befehlen enthalten.
  • In einigen Ausführungsformen gibt der Client 902 die Client-Einheit der Grafikvorrichtung an, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Befehlsanalysator (Parser) des Grafikprozessors das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die entsprechende Client-Einheit zu leiten. In einigen Ausführungsformen weisen die Client-Einheiten des Grafikprozessors eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit auf. Jede Client-Einheit verfügt über eine entsprechende Verarbeitungspipeline, die die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wird, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Sub-Opcode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung der Informationen im Daten-Feld 906 aus. Bei einigen Befehlen wird eine explizite Befehlsgröße 908 erwartet, um die Größe des Befehls anzugeben. In einigen Ausführungsformen bestimmt der Befehlsanalysator automatisch die Größe wenigstens einiger der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen werden Befehle über Vielfache eines Doppelwortes synchronisiert.
  • Das Flussdiagramm in 9B zeigt eine beispielhafte Grafikprozessor-Befehlssequenz 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der gezeigten Befehlssequenz, um eine Reihe von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlssequenz wird nur zu Beispielzwecken 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 Stapel von Befehlen in einer Befehlssequenz ausgegeben werden, so dass der Grafikprozessor die Befehlssequenz wenigstens teilweise gleichzeitig verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlssequenz 910 mit einem Befehl zur Pipelineleerung („Pipeline Flush“) 912 beginnen, um zu bewirken, dass jede aktive Grafikpipeline die aktuell ausstehenden Befehle für die Pipeline abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medienpipeline 924 nicht gleichzeitig. Die Pipeline wird geleert, um zu bewirken, dass die aktive Grafikpipeline ausstehende Befehle abschließt. In Reaktion auf eine Pipelineleerung unterbricht der Befehlsanalysator für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichen-Engines die ausstehenden Operationen abgeschlossen haben und die entsprechenden Lesecaches ungültig geworden sind. Optional können alle Daten im Render-Cache, der als „schmutzig“ gekennzeichnet ist, in den Speicher entleert werden. In einigen Ausführungsformen kann der Befehl zur Pipelineleerung 912 für die Pipelinesynchronisierung oder vor dem Versetzen des Grafikprozessors in einen Stromsparzustand verwendet werden.
  • In einigen Ausführungsformen wird ein Befehl zur Pipelineauswahl („Pipeline Select“) 913 verwendet, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor explizit zwischen Pipelines umschaltet. In einigen Ausführungsformen ist ein Befehl zur Pipelineauswahl 913 nur einmal innerhalb eines Ausführungskontextes erforderlich, bevor Pipelinebefehle erteilt werden, es sei denn, der Kontext soll Befehle für beide Pipelines erteilen. In einigen Ausführungsformen ist ein Befehl zur Pipelineleerung 912 unmittelbar vor einer Pipelineumschaltung über den Befehl zur Pipelineauswahl 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Befehl zur Pipelinesteuerung („Pipeline Control“) 914 eine Grafikpipeline für den Betrieb und wird zum Programmieren der 3D-Pipeline 922 und der Medienpipeline 924 verwendet. In einigen Ausführungsformen konfiguriert der Befehl zur Pipelinesteuerung 914 den Pipelinezustand für die aktive Pipeline. In einer Ausführungsform wird der Befehl zur Pipelinesteuerung 914 zur Pipelinesynchronisierung und zum Löschen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline verwendet, bevor ein Stapel von Befehlen verarbeitet wird.
  • In einigen Ausführungsformen werden Befehle für den Rückgabepufferzustand („Return Buffer State“) 916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipelineoperationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und Thread-übergreifende Kommunikation durchzuführen. In einigen Ausführungsformen umfasst der Rückgabepufferzustand 916 das Auswählen der Größe und Anzahl der Rückgabepuffer, die für eine Reihe von Pipelineoperationen verwendet werden sollen.
  • Die übrigen Befehle in der Befehlssequenz unterscheiden sich je nach der aktiven Pipeline für Operationen. Basierend auf einer Pipelinebestimmung 920 wird die Befehlssequenz auf die 3D-Pipeline 922 beginnend mit dem 3D-Pipelinezustand („3D Pipeline State“) 930 oder die Medienpipeline 924 beginnend mit dem Medienpipelinezustand („Media Pipeline State“) 940 zugeschnitten.
  • Zu den Befehlen zum Konfigurieren des 3D-Pipelinezustands 930 zählen Befehle zum Einstellen des 3D-Zustands für den Vertexpufferzustand, des Vertexelementzustands, des Konstantfarbzustands, des Tiefenpufferzustands und andere Zustandsvariablen, die konfiguriert werden müssen, bevor 3D-Primitivbefehle ausgeführt werden. Die Werte dieser Befehle werden wenigstens teilweise basierend auf der jeweils verwendeten 3D-API bestimmt. In einigen Ausführungsformen können mit den Befehlen für den 3D-Pipelinezustand 930 auch bestimmte Pipelineelemente selektiv deaktiviert oder umgangen werden, wenn diese Elemente nicht verwendet werden sollen.
  • In einigen Ausführungsformen wird der Befehl 3D-Primitiv („3D Primitive“) 932 -Befehl verwendet, um 3D-Primitive zur Verarbeitung durch die 3D-Pipeline zu übermitteln. Befehle und zugehörige Parameter, die über den Befehl 3D-Primitiv 932 an den Grafikprozessor übergeben werden, werden an die Vertexabruffunktion in der Grafikpipeline weitergeleitet. Die Vertexabruffunktion verwendet die Daten des Befehls 3D-Primitiv 932, um Vertexdatenstrukturen zu erzeugen. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der Befehl 3D-Primitiv 932 verwendet, um Vertexoperationen an 3D-Primitiven über Vertexschattierer durchzuführen. Zum Verarbeiten von Vertexschattierern verteilt die 3D-Pipeline 922 Schattiererausführungs-Threads an Ausführungseinheiten des Grafikprozessors.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über ein/en Ausführungsbefehl oder -ereignis („Execute“) 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang die Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen Startbefehl, „Go“- oder „Kick“, in der Befehlssequenz ausgelöst. In einer Ausführungsform wird die Befehlsausführung mit Hilfe eines Pipelinesynchronisationsbefehls ausgelöst, um die Befehlssequenz durch die Grafikpipeline zu leeren. Die 3D-Pipeline wird die Geometrieverarbeitung für die 3D-Primitive durchführen. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert, und die Pixel-Engine färbt die resultierenden Pixel ein. Zusätzliche Befehle zum Steuern der Pixelschattierung und der Pixel-Backend-Operationen können ebenfalls in diese Operationen einbezogen sein.
  • In einigen Ausführungsformen folgt die Grafikprozessor-Befehlssequenz 910 bei der Ausführung von Medienoperationen dem Pfad der Medienpipeline 924. Im Allgemeinen hängen die spezifische Verwendung und die Art der Programmierung der Medienpipeline 924 von den durchzuführenden Medien- oder Rechenoperationen ab. Bestimmte Mediendecodierungsoperationen können während der Mediendecodierung an die Medienpipeline ausgelagert werden. In einigen Ausführungsformen kann die Medienpipeline auch umgangen werden und kann die Mediendecodierung ganz oder teilweise mit Hilfe von Ressourcen durchgeführt werden, die von einem oder mehreren Universal-Verarbeitungskernen bereitgestellt werden. In einer Ausführungsform weist die Medienpipeline auch Elemente für GPGPU (General-Purpose Graphics Processor Unit)-Operationen auf, bei denen der Grafikprozessor zum Durchführen von SIMD-Vektoroperationen mit Hilfe von rechnergestützten Schattiererprogrammen verwendet wird, die nicht explizit mit dem Rendern von Grafik-Primitiven zusammenhängen.
  • In einigen Ausführungsformen ist die Medienpipeline 924 in ähnlicher Weise konfiguriert wie die 3D-Pipeline 922. Eine Reihe von Befehlen zum Konfigurieren des Medienpipelinezustands 940 wird vor den Befehlen für Medienobjekte („Media Object“) 942 verteilt oder in eine Befehlswarteschlange gestellt. In einigen Ausführungsformen weisen die Befehle für den Medienpipelinezustand 940 Daten zum Konfigurieren der Medienpipelineelemente auf, die zur Verarbeitung der Medienobjekte verwendet werden sollen. Dazu gehören Daten zum Konfigurieren der Video-Decodierung und der Video-Codierungslogik innerhalb der Medienpipeline, wie z. B. das Codierungs- oder Decodierungsformat. In einigen Ausführungsformen unterstützen die Befehle für den Medienpipelinezustand 940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern die Befehle für Medienobjekte 942 Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline. Die Medienobjekte weisen Speicherpuffer mit zu verarbeitenden Video-Daten auf. In einigen Ausführungsformen müssen alle Medienpipelinezustände gültig sein, bevor ein Befehl für Medienobjekte 942 erteilt wird. Sobald der Pipelinezustand konfiguriert ist und die Befehle für Medienobjekte 942 in die Warteschlange gestellt sind, wird die Medienpipeline 924 über einen Ausführungsbefehl („Execute“) 944 oder ein gleichwertiges Ausführungsereignis (z. B. Registerschreiben) ausgelöst. Die Ausgabe von der Medienpipeline 924 kann dann durch Operationen, die von der 3D-Pipeline 922 oder der Medienpipeline 924 bereitgestellt werden, nachbearbeitet werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise konfiguriert und ausgeführt wie Medienoperationen.
  • Grafiksoftware- Architektur
  • 10 veranschaulicht eine beispielhafte Grafiksoftware-Architektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen weist die Software-Architektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und wenigstens einen Prozessor 1030 auf. In einigen Ausführungsformen weist der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Universal-Prozessorkerne 1034 auf. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils im Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen weist die 3D-Grafikanwendung 1010 ein oder mehrere Schattiererprogramme mit Schattiererbefehlen 1012 auf. Die Befehle für die Schattierersprache können in einer Schattiererhochsprache, wie z. B. High Level Shader Language (HLSL) oder OpenGL Shader Language (GLSL), erfolgen. Die Anwendung beinhaltet auch ausführbare Befehle 1014 in einer Maschinensprache, die für die Ausführung durch den Universal-Prozessorkern 1034 geeignet sind. Die Anwendung weist außerdem Grafikobjekte 1016 auf, die durch Vertexdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows®-Betriebssystem der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein quelloffenes UNIX-ähnliches Betriebssystem mit einer Variante des Linux-Kernels. Das Betriebssystem 1020 kann eine Grafik-API 1022 unterstützen, wie z. B. die Direct3D-API, die OpenGL-API oder die Vulkan-API. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 1020 einen Frontend-Schattierer-Kompilierer 1024, um beliebige Schattiererbefehle 1012 in HLSL in eine niedrigere Schattierersprache zu kompilieren. Die Kompilierung kann eine zeitnahe („Just-in-Time“, JIT)-Kompilierung sein, oder die Anwendung kann eine Schattierervorkompilierung durchführen. In einigen Ausführungsformen werden Schattierer einer hohen Ebene während der Kompilierung der 3D-Grafikanwendung 1010 in Schattierer einer niedrigen Ebene kompiliert. In einigen Ausführungsformen werden die Schattiererbefehle 1012 in einer Zwischenform bereitgestellt, wie z. B. einer Version der Standard Portable Intermediate Representation (SPIR), die von der Vulkan-API verwendet wird.
  • In einigen Ausführungsformen weist der Benutzermodus-Grafiktreiber 1026 einen Backend-Schattierer-Kompilierer 1027 auf, um die Schattiererbefehle 1012 in eine Hardware-Spezifische Darstellung zu konvertieren. Wenn die OpenGL-API verwendet wird, werden die Schattiererbefehle 1012 in der GLSL-Hochsprache zur Kompilierung an einen Benutzermodus-Grafiktreiber 1026 übergeben. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 die Kernelmodus-Funktionen 1028 des Betriebssystems, um mit einem Kernelmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu verteilen.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist und die Logik innerhalb einer integrierten Schaltung wie z. B. einem Prozessor repräsentiert und/oder definiert. So kann das maschinenlesbare Medium beispielsweise Befehle aufweisen, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn die Befehle von einer Maschine gelesen werden, können sie diese dazu veranlassen, die Logik zum Durchführen der hier beschriebenen Verfahren zu erstellen. Solche Darstellungen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Einheiten von Logik für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als Hardware-Modell gespeichert sein können, das die Struktur der integrierten Schaltung beschreibt. Das Hardware-Modell kann an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, die das Hardware-Modell auf Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann so hergestellt werden, dass die Schaltung Operationen ausführt, wie sie hier in Verbindung mit jeder der beschriebenen Ausführungsformen beschrieben werden.
  • 11A ist ein Blockdiagramm, das ein IP-Kernentwicklungssystem 1100 veranschaulicht, das zur Herstellung einer integrierten Schaltung verwendet werden kann, um Operationen gemäß einer Ausführungsform durchzuführen. Das IP-Kern-Entwicklungssystem 1100 kann zum Generieren modularer, wiederverwendbarer Designs verwendet werden, die in ein größeres Design integriert oder zum Aufbau einer gesamten integrierten Schaltung (z. B. einer integrierten SOC-Schaltung) verwendet werden können. Eine Entwicklungseinrichtung 1130 kann eine Software-Simulation 1110 eines IP-Kerndesigns in einer höheren Programmiersprache (z. B. C/C++) generieren. Mit der Software-Simulation 1110 kann das Verhalten des IP-Kerns mit Hilfe eines Simulationsmodells 1112 entworfen, getestet und verifiziert werden. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitsimulationen umfassen. Ein Registertransferebenen (RTL, Register Transfer Level)-Design 1115 kann dann aus dem Simulationsmodell 1112 erstellt oder synthetisiert werden. Das RTL-Design 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss von digitalen Signalen zwischen den Hardware-Registern modelliert, einschließlich der zugehörigen Logik, die mit den modellierten digitalen Signalen ausgeführt wird. Zusätzlich zu einem RTL-Design 1115 können auch untergeordnete Designs auf Logik- oder Transistorebene erstellt, entworfen oder synthetisiert werden. Daher können die besonderen Details des ursprünglichen Designs und der Simulation variieren.
  • Das RTL-Design 1115 oder ein gleichwertiges Design kann von der Entwicklungseinrichtung weiter in ein Hardware-Modell 1120 synthetisiert werden, das in einer Hardware-Beschreibungssprache (HDL, Hardware Description Language) oder einer anderen Darstellung von physischen Designdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kerndesign zu verifizieren. Das IP-Kerndesign kann für die Lieferung an eine Fertigungseinrichtung eines Drittanbieters 1165 unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann das IP-Kemdesign (z. B. über das Internet) über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 übertragen werden. Die Fertigungseinrichtung 1165 kann dann eine integrierte Schaltung herstellen, die wenigstens teilweise auf dem IP-Kerndesign basiert. Die hergestellte integrierte Schaltung kann dafür ausgelegt sein, Operationen gemäß wenigstens einer hier beschriebenen Ausführungsform auszuführen.
  • 11B zeigt eine seitliche Querschnittansicht einer integrierten Schaltungspaketanordnung 1170 gemäß einigen hier beschriebenen Ausführungsformen. Die integrierte Schaltungspaketanordnung 1170 veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen wie hier beschrieben. Die Paketanordnung 1170 weist mehrere Einheiten der Hardware-Logik 1172, 1174 auf, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann wenigstens teilweise in konfigurierbarer Logik- oder Festfunktionslogik-Hardware implementiert sein und kann einen oder mehrere Teile eines oder mehrerer der hier beschriebenen Prozessorkerne, Grafikprozessoren oder anderer Beschleunigervorrichtungen aufweisen. Jede Einheit der Logik 1172, 1174 kann innerhalb eines Halbleiterchips implementiert und über eine Interconnect-Struktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Interconnect-Struktur 1173 kann dafür ausgelegt sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten, und kann Interconnects wie z. B., jedoch nicht beschränkt auf, Kontaktierhügel oder Säulen enthalten. In einigen Ausführungsformen kann die Interconnect-Struktur 1173 dafür ausgelegt sein, elektrische Signale wie z. B. Eingangs-/Ausgangssignale (E/A-Signale) und/oder Leistungs- oder Massesignale, die mit dem Betrieb der Logik 1172, 1174 verknüpft sind, zu leiten. In einigen Ausführungsformen ist das Substrat 1180 ein Laminatsubstrat auf Epoxidbasis. In anderen Ausführungsformen kann das Paketsubstrat 1180 andere geeignete Arten von Substraten aufweisen. Die Paketanordnung 1170 kann über ein Paket-Interconnect 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Das Paket-Interconnect 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen, wie z. B. eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul, zu leiten.
  • In einigen Ausführungsformen sind die Logikeinheiten 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die dafür ausgelegt ist, elektrische Signale zwischen den Logiken 1172, 1174 zu leiten. Die Brücke 1182 kann eine dichte Interconnect-Struktur sein, die einen Leitweg für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat aus Glas oder einem geeigneten Halbleitermaterial aufweisen. Auf dem Brückensubstrat können elektrische Leiterwegmerkmale ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen den Logiken 1172, 1174 bereitzustellen.
  • Auch wenn zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 abgebildet sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Chips aufweisen. Die ein oder mehreren Chips können durch keine oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen sein kann, wenn die Logik auf einem einzigen Chip enthalten ist. Alternativ können mehrere Chips oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Chips und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • Beispielhafte integrierte Schaltung in Form eines Ein-Chip-Systems
  • 12-14 zeigen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die mit einem oder mehreren IP-Kernen hergestellt sein können, gemäß verschiedenen hier beschriebenen Ausführungsformen. Zusätzlich zur Darstellung hier können weitere Logik und Schaltungen vorhanden sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Universal-Prozessorkerne.
  • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung in Form eines Ein-Chip-Systems 1200, die mit einem oder mehreren IP-Kernen hergestellt sein kann, gemäß einer Ausführungsform darstellt. Die beispielhafte integrierte Schaltung 1200 weist einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs) und wenigstens einen Grafikprozessor 1210 auf und kann zusätzlich einen Bildprozessor 1215 und/oder einen Video-Prozessor 1220 aufweisen, wobei jeder dieser Prozessoren ein modularer IP-Kern aus derselben oder mehreren verschiedenen Designeinrichtungen sein kann. Die integrierte Schaltung 1200 weist Peripherie- oder Buslogik auf, einschließlich einer USB-Steuerung 1225, einer UART-Steuerung 1230, einer SPI/SDIO-Steuerung 1235 und einer I2S/I2C-Steuerung 1240. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einer oder mehreren HDMI (High-Definition Multimedia Interface)-Steuerungen 1250 und einer MIPI (Mobile Industry Processor Interface)-Anzeigeschnittstelle 1255 gekoppelt ist. Die Speicherung kann durch ein Flash-Speichersubsystem 1260 erfolgen, das einen Flash-Speicher und eine Flash-Speichersteuerung aufweist. Die Speicherschnittstelle kann über eine Speichersteuerung 1265 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 1270 auf.
  • 13A-13B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC darstellen, gemäß hier beschriebenen Ausführungsformen. 13A zeigt einen beispielhaften Grafikprozessor 1310 einer integrierten Schaltung in Form eines Ein-Chip-Systems, die mithilfe eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß einer Ausführungsform. 13B zeigt einen zusätzlichen beispielhaften Grafikprozessor 1340 einer integrierten Schaltung in Form eines Ein-Chip-Systems, die mithilfe eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß einer Ausführungsform. Der Grafikprozessor 1310 von 13A ist ein Beispiel für einen Grafikprozessorkern mit geringer Leistung. Der Grafikprozessor 1340 in 13B ist ein Beispiel für einen leistungsfähigeren Grafikprozessorkern. Jeder der Grafikprozessoren 1310, 1340 kann eine Variante des Grafikprozessors 1210 von 12 sein.
  • Wie in 13A dargestellt, weist der Grafikprozessor 1310 einen Vertexprozessor 1305 und einen oder mehrere Fragmentprozessoren 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N-1 und 1315N) auf. Der Grafikprozessor 1310 kann verschiedene Schattiererprogramme über separate Logik ausführen, so dass der Vertexprozessor 1305 für zum Ausführen von Operationen für Vertex-Schattiererprogramme optimiert ist, während die ein oder mehreren Fragmentprozessoren 1315A-1315N Fragment (z. B. Pixel)-Schattierungsoperationen für Fragment- oder Pixelschattiererprogramme ausführen. Der Vertexprozessor 1305 führt die Vertexverarbeitungsphase der 3D-Grafikpipeline aus und erzeugt Primitive und Vertexdaten. Die ein oder mehreren Fragmentprozessoren 1315A-1315N verwenden die vom Vertexprozessor 1305 erzeugten Primitiv- und Vertexdaten, um einen Framepuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die ein oder mehreren Fragmentprozessoren 1315A-1315N zum Ausführen von Fragmentschattiererprogrammen wie in der OpenGL-API vorgesehen optimiert, die verwendet werden können, um ähnliche Operationen wie ein Pixelschattiererprogramm wie in der Direct 3D-API vorgesehen durchzuführen.
  • Der Grafikprozessor 1310 weist zusätzlich ein oder mehrere Speicherverwaltungseinheiten (MMU, Memory Management Unit) 1320A-1320B, Caches 1325A-1325B und Schaltungs-Interconnects 1330A-1330B auf. Die ein oder mehreren MMUs 1320A-1320B sorgen für die Zuordnung von virtuellen zu physischen Adressen für den Grafikprozessor 1310, der den Vertexprozessors 1305 und/oder die ein oder mehreren Fragmentprozessoren 1315A-1315N aufweist, die auf im Speicher gespeicherte Vertex- oder Bild-/Texturdaten verweisen können, zusätzlich zu den in ein oder mehreren Caches 1325A-1325B gespeicherten Vertex- oder Bild-/Texturdaten. In einer Ausführungsform können die ein oder mehreren MMUs 1320A-1320B mit anderen MMUs innerhalb des Systems synchronisiert sein, einschließlich einer oder mehrerer MMUs, die mit den ein oder mehreren Anwendungsprozessoren 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 verknüpft sind, so dass jeder Prozessor 1205-1220 an einem gemeinsam genutzten oder einheitlichen virtuellen Speichersystem teilhaben kann. Die ein oder mehreren Schaltungs-Interconnects 1330A-1330B ermöglichen es dem Grafikprozessor 1310, sich mit anderen IP-Kernen innerhalb des SoC zu verbinden, entweder über einen internen Bus des SoC oder über eine direkte Verbindung, je nach Ausführungsform.
  • Wie in 13B dargestellt, weist der Grafikprozessor 1340 eine oder mehrere MMUs 1320A-1320B, die Caches 1325A-1325B und die Schaltungs-Interconnects 1330A-1330B des Grafikprozessors 1310 von 13A auf. Der Grafikprozessor 1340 weist einen oder mehrere Schattiererkerne 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N) auf, was eine einheitliche Schattiererkernarchitektur bereitstellt, in der ein einzelner Kern oder Typ von Kern alle Arten von programmierbarem Schattierercode ausführen kann, einschließlich Schattiererprogrammcode zum Implementieren von Vertexschattierern, Fragmentschattierern und/oder Rechenschattierern. Die genaue Anzahl der vorhandenen Schattiererkerne kann je nach Ausführungsform und Implementierung variieren. Zusätzlich weist der Grafikprozessor 1340 einen kernübergreifenden (Inter-Core-) Taskmanager 1345 auf, der als Thread-Abfertiger fungiert, um Ausführungs-Threads an einen oder mehrere Schattiererkerne 1355A-1355N zu verteilen, und eine Kachelungseinheit 1358, um Kachelungsoperationen für das kachelbasierte Rendern zu beschleunigen, bei denen die Renderungsoperationen für eine Szene im Bildraum unterteilt werden, um z. B. die lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Nutzung interner Caches zu optimieren.
  • 14A-14B veranschaulichen zusätzliche beispielhafte Grafikprozessorlogik gemäß hier beschriebenen Ausführungsformen. 14A veranschaulicht einen Grafikkern 1400, der im Grafikprozessor 1210 von 12 enthalten sein kann und ein einheitlicher Schattiererkern 1355A-1355N wie in 13B sein kann. 14B zeigt eine hochparallele Universal-Grafikverarbeitungseinheit 1430, die sich für den Einsatz auf einem Mehrchipmodul eignet.
  • Wie in 14A dargestellt, weist der Grafikkern 1400 einen gemeinsamen Befehlscache 1402, eine Textureinheit 1418 und einen Cache-/gemeinsamen Speicher 1420 auf, die den Ausführungsressourcen innerhalb des Grafikkerns 1400 gemeinsam sind. Der Grafikkern 1400 kann mehrere Slices 1401A-1401N oder eine Partition für jeden Kern aufweisen, und ein Grafikprozessor kann mehrere Instanzen des Grafikkerns 1400 aufweisen. Die Slices 1401A-1401N können Unterstützungslogik einschließlich eines lokalen Befehlscaches 1404A-1404N, eines Thread-Planers 1406A-1406N, eines Thread-Abfertigers 1408A-1408N und eines Registersatzes 1410A aufweisen. Um logische Operationen durchzuführen, können die Slices 1401A-1401N einen Satz zusätzlicher Funktionseinheiten (AFU, Additional Function Unit, 1412A-1412N), Gleitkommaeinheiten (FPU, Floating-Point Unit, 1414A-1414N), arithmetische Logikeinheiten (ALU, Arithmetic Logic Unit, 1416-1416N) für Ganzzahlen, Adressrecheneinheiten (ACU, Address Computational Unit, 1413A-1413N), doppelt genaue Gleitkommaeinheiten (DPFPU, Double-Precision FPU, 1415A-1415N) und Matrixverarbeitungseinheiten (MPU, Matrix Processing Unit, 1417A-1417N) aufweisen.
  • Einige der Recheneinheiten arbeiten mit einer bestimmten Genauigkeit. Die FPUs 1414A-1414N können beispielsweise Gleitkommaberechnungen mit einfacher Genauigkeit (32-Bit) und halber Genauigkeit (16-Bit) durchführen, während die DPFPUs 1415A-1415N Gleitkommaberechnungen mit doppelter Genauigkeit (64-Bit) durchführen. Die ALUs 1416A-1416N können ganzzahlige Operationen mit variabler Genauigkeit mit 8-Bit-, 16-Bit- und 32-Bit-Genauigkeit durchführen und können für Operationen mit gemischter Genauigkeit konfiguriert werden. Die MPUs 1417A-1417N können auch für Matrixoperationen mit gemischter Genauigkeit konfiguriert werden, einschließlich halb genauer Gleitkomma- und 8-Bit-Ganzzahloperationen. Die MPUs 1417-1417N können eine Vielzahl von Matrixoperationen durchführen, um Anwendungs-Frameworks für maschinelles Lernen zu beschleunigen, einschließlich der Unterstützung für eine beschleunigte allgemeine Matrix-zu-Matrix-Multiplikation (GEMM, General Matrix To Matrix Multiplication). Die AFUs 1412A-1412N können zusätzliche logische Operationen ausführen, die von den Gleitkomma- oder Ganzzahleinheiten nicht unterstützt werden, einschließlich trigonometrischer Operationen (z. B. Sinus, Cosinus usw.).
  • Wie in 14B dargestellt, kann eine Universal-Verarbeitungseinheit (GPGPU) 1430 derart ausgelegt sein, dass hochparallele Rechenoperationen von einer Anordnung von Grafikverarbeitungseinheiten durchgeführt werden können. Darüber hinaus kann die GPGPU 1430 direkt mit anderen Instanzen der GPGPU verbunden sein, um einen Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für insbesondere tiefe neuronale Netze zu verbessern. Die GPGPU 1430 weist eine Host-Schnittstelle 1432 auf, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In einer Ausführungsform ist die Host-Schnittstelle 1432 eine PCI-Express-Schnittstelle. Die Host-Schnittstelle kann jedoch auch ein/e herstellerspezifische/s Kommunikationsschnittstelle oder Kommunikationsgeflecht sein. Die GPGPU 1430 empfängt Befehle vom Host-Prozessor und verwendet einen globalen Planer (Scheduler) 1434, um die Ausführungs-Threads, die mit diesen Befehlen verknüpft sind, an einen Satz von Rechenclustern 1436A-1436H zu verteilen. Die Rechencluster 1436A-1436H teilen sich einen Cachespeicher 1438. Der Cachespeicher 1438 kann als übergeordneter Cache für Cachespeicher innerhalb der Rechencluster 1436A-1436H dienen.
  • Die GPGPU 1430 weist Speicher 1434A-1434B auf, der über einen Satz von Speichersteuerungen 1442A-1442B mit den Rechenclustern 1436A-1436H gekoppelt ist. In verschiedenen Ausführungsformen kann der Speicher 1434A-1434B verschiedene Arten von Speichervorrichtungen aufweisen, darunter dynamische Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory) oder Grafik-Direktzugriffsspeicher, wie z. B. synchrone Grafik-Direktzugriffsspeicher (SGRAM, Synchronous Graphics RAM), einschließlich Grafikspeicher mit doppelter Datenrate (GDDR, Graphics Double Data Rate).
  • Die Rechencluster 1436A-1436H weisen in einer Ausführungsform jeweils einen Satz von Grafikkernen auf, wie z. B. den Grafikkern 1400 von 14A, zu denen mehrere Typen von Ganzzahl- und Gleitkomma-Logikeinheiten zählen können, welche Rechenoperationen in einem Bereich von Genauigkeiten durchführen können, darunter auch solche, die für Berechnungen des maschinellen Lernens geeignet sind. Beispielsweise kann in einer Ausführungsform wenigstens eine Teilmenge der Gleitkommaeinheiten in jedem der Rechencluster 1436A-1436H zum Durchführen von 16-Bit- oder 32-Bit-Gleitkommaoperationen ausgelegt sein, während eine andere Teilmenge der Gleitkommaeinheiten zum Durchführen von 64-Bit-Gleitkommaoperationen ausgelegt sein kann.
  • Mehrere Instanzen der GPGPU 1430 können für den Betrieb als Rechencluster ausgelegt sein. Der Kommunikationsmechanismus, den der Rechencluster für die Synchronisation und den Datenaustausch verwendet, variiert von Ausführungsform zu Ausführungsform. In einer Ausführungsform kommunizieren die mehreren Instanzen der GPGPU 1430 über die Host-Schnittstelle 1432. In einer Ausführungsform weist die GPGPU 1430 einen E/A-Knoten 1439 auf, der die GPGPU 1430 mit einer GPU-Verbindung 1440 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 1440 mit einer dedizierten GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 1430 ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 1440 mit einem Hochgeschwindigkeits-Interconnect gekoppelt, um Daten an andere GPGPUs oder Parallelprozessoren zu senden und von diesen zu empfangen. In einer Ausführungsform befinden sich die mehreren Instanzen der GPGPU 1430 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzvorrichtung, die über die Host-Schnittstelle 1432 zugänglich ist. In einer Ausführungsform kann die GPU-Verbindung 1440 dafür ausgelegt sein, zusätzlich oder alternativ zur Host-Schnittstelle 1432 eine Verbindung zu einem Host-Prozessor zu ermöglichen.
  • Während die abgebildete Konfiguration der GPGPU 1430 zum Trainieren von neuronalen Netzen ausgelegt sein kann, stellt eine Ausführungsform eine alternative Konfiguration der GPGPU 1430 bereit, die für den Einsatz innerhalb einer Hochleistungs- oder einer Niedrigenergie-Inferenzplattform ausgelegt sein kann. In einer Inferenzkonfiguration weist die GPGPU 1430 im Vergleich zur Trainingskonfiguration weniger Rechencluster 1436A-1436H auf. Darüber hinaus kann sich die Speichertechnologie, die mit dem Speicher 1434A-1434B verknüpft ist, zwischen Inferenz- und Trainingskonfiguration unterscheiden, wobei die Speichertechnologien mit höherer Bandbreite für Trainingskonfigurationen vorgesehen sind. In einer Ausführungsform kann die Inferenzkonfiguration der GPGPU 1430 die Inferenzierung spezifischer Befehle unterstützen. Beispielsweise kann eine Inferenzkonfiguration Unterstützung für einen oder mehrere ganzzahlige 8-Bit-Skalarproduktbefehle bereitstellen, die häufig bei Inferenzoperationen für eingesetzte neuronale Netze verwendet werden.
  • Bedienflächenzugriff mittels flacher Speicherzuordnung
  • Wie oben beschrieben, verwenden einige Grafikverarbeitungssysteme ein oder mehrere Datenkomprimierungsverfahren, um Grafikdaten zu komprimieren, bevor die Grafikdaten im Speicher gespeichert werden. Informationen über das Komprimierungsverfahren, das zum Codieren eines Dateneintrags verwendet wird, können an einem separaten Speicherplatz als Metadaten gespeichert sein, die logisch mit dem Dateneintrag verknüpft sind. Wenn die Daten aus dem Speicher abgerufen werden, werden die Komprimierungs-Metadaten zusammen mit den Daten abgerufen und verwendet, um die Dekomprimierung der Metadaten zu ermöglichen.
  • Einige Grafikverarbeitungssysteme verwenden eine Zuordnungstabelle, um die logische Verknüpfung zwischen dem Dateneintrag und den Komprimierungs-Metadaten bereitzustellen. Dieses Verfahren kann einen Zeiger auf die Metadaten, die aus einer Tabelle abgerufen werden sollen, erfordern, um Metadaten aus dem Speicher abzurufen, was zu Latenzzeiten im Grafikverarbeitungssystem führen kann, wodurch die Leistung großer Grafikverarbeitungssysteme eingeschränkt wird.
  • In einigen Aspekten löst der in der vorliegenden Patentschrift beschriebene Erfindungsgegenstand diese und andere Fragen, indem eine Datenverarbeitungsarchitektur und Verfahren zur Unterstützung des Bedienflächenzugriffs mittels flacher Speicherzuordnung bereitgestellt werden. Allgemein ist in einigen Beispielen ein erster Speicherbereich für Daten in einer Grafik-Arbeitslast zugewiesen. Der erste Speicherbereich umfasst eine erste Mehrzahl von adressierbaren Speicherplätzen. Ein zweiter Speicherbereich ist für Komprimierungs-Metadaten zugewiesen, die sich auf die Daten für die Grafik-Arbeitslast beziehen. Der zweite Speicherbereich umfasst eine zweite Mehrzahl adressierbarer Speicherplätze. In einigen Beispielen wird dem zweiten Speicherbereich eine Größe zugewiesen, die einem vorgegebenen Verhältnis zur Größe des ersten Speicherbereichs entspricht. Beispielsweise kann in einem Metadatenschema mit 4 Metadatenbits für jeweils 128 Byte Daten das Verhältnis des ersten Speicherbereichs zum zweiten Speicherbereich 256:1 betragen. Da es ein direktes, festes Verhältnis zwischen der Größe des ersten Speicherbereichs und des zweiten Speicherbereichs gibt, kann eine direkte Speicherzuordnung zwischen den Speicheradressen im ersten Speicherbereich und im zweiten Speicherbereich konfiguriert werden. Wenn also im Betrieb ein Speicherzugriff erfolgt, um auf Daten an einer Adresse im ersten Speicherbereich zuzugreifen, können die mit den Daten verknüpften Komprimierungs-Metadaten direkt aus dem zweiten Speicherbereich abgerufen werden, ohne eine Nachschlagetabelle zu konsultieren, wodurch die Latenzzeit vermieden wird, die damit verbunden ist, auf eine Nachschlagetabelle zuzugreifen, um den Speicherplatz der Komprimierungsdaten zu bestimmen.
  • 15 zeigt ein Datenverarbeitungssystem, das dafür ausgelegt sein kann, den Bedienflächenzugriff mittels flacher Speicherzuordnung gemäß hier beschriebenen Ausführungsformen zu unterstützen. Es wird Bezug genommen auf 15; in einigen Beispielen kann ein Datenverarbeitungssystem 1500 als heterogenes Verarbeitungssystem implementiert sein, das einen Zentraleinheit (CPU)-Komplex 1510, einen einheitlichen Speicher 1530 und eine Universal-Grafikverarbeitungseinheit (GPGPU, General-Purpose Graphics Processing Unit) 1540 aufweist. Der CPU-Komplex 1510 umfasst einen oder mehrere Prozessoren 1512, die ein Betriebssystem 1514 ausführen. Eine oder mehrere Spiel- und/oder Medienanwendungen 1516 können in der Umgebung ausgeführt werden, die vom Betriebssystem 1514 bereitgestellt wird, das auf dem Prozessor 1512 ausgeführt wird. Der CPU-Komplex 1510 kann ferner einen Grafikvorrichtungstreiber 1520 umfassen, der einen Abfertiger (Dispatcher) 1524 ausführt. Der Prozessor 1512 kann als beliebiger der hier beschriebenen Prozessoren implementiert sein.
  • Die GPGPU 1540 weist mehrere Rechenblöcke 1544A-1544N auf, die eine oder mehrere Instanzen der hier beschriebenen Ausführungslogik aufweisen. Die GPGPU 1540 weist auch eine Reihe von Registern 1545, Cache-Speicher 1547 und ein Energie- und Leistungsmodul 1546 auf, die als geteilte Ressourcen für die Rechenblöcke 1544A-1544N verwendet werden können. In einer Ausführungsform beinhalten die Register 1545 direkt und indirekt zugängliche Register, wobei die indirekt zugänglichen Register für die Verwendung in Matrixberechnungsoperationen optimiert sein können. Das Energie- und Leistungsmodul 1546 kann dafür ausgelegt sein, die Leistungsabgabe und die Taktfrequenzen für die Rechenblöcke 1544A-1544N anzupassen, um Gatter-Leerlaufkomponenten innerhalb der Rechenblöcke 1544A-1544N unter hoher Arbeitsbelastung mit Strom zu versorgen. Die GPGPU 1540 weist lokalen GPGPU-Speicher 1548auf, bei dem es sich um physische Speichermodule handelt, die sich eine Grafikkarte oder ein Mehrchip-Modul mit der GPGPU 1540 teilen.
  • Der einheitliche Speicher 1530 repräsentiert einen einheitlichen Adressraum, auf den der Prozessor 1512 und die GPGPU 1540 zugreifen können. Der einheitliche Speicher weist den Systemspeicher 1532 sowie den GPGPU-Speicher 1538 auf. In einigen Ausführungsformen weist der GPGPU-Speicher 1538 lokalen GPGPU-Speicher 1534 innerhalb der GPGPU 1540 auf und kann auch einen Teil vom oder den gesamten Systemspeicher 1532 aufweisen. Beispielsweise kann kompilierter Code 1534B, der im Systemspeicher 1512 gespeichert ist, auch GPGPU-Speicher 1538 zugeordnet sein, für den Zugriff durch die GPGPU 1540. In einer Ausführungsform kann eine Laufzeitbibliothek 1536 im Systemspeicher 1532 die Kompilierung und/oder Ausführung von kompiliertem Code 1534B ermöglichen. Der Prozessor 1512 kann Befehle für einen Kompilierer 1535 ausführen, die im Systemspeicher 1532 gespeichert sind. Der Kompilierer 1535 kann Quellcode 1534A in kompilierten Code 1534B zur Ausführung durch den Prozessor 1512 und/oder die GPGPU 1540 kompilieren. In einer Ausführungsform ist der Kompilierer 1535 ein Schattierer-Kompilierer oder kann einen solchen aufweisen, um Schattiererprogramme speziell für die Ausführung durch die GPGPU 1540 zu kompilieren.
  • In dem in 15 dargestellten Beispiel kann ein Komprimierungsmanager 1522 entweder vom CPU-Komplex 1510 und/oder von der GPGPU 1540 ausgeführt werden. In einigen Beispielen kann der Komprimierungsmanager 1522 als Logikbefehle implementiert sein, die auf einem nicht transitorischen, computerlesbaren Medium ausgeführt sind (d.h. Software), während in einer anderen Ausführungsform der Kontextmanager 1522 auf Firmware, Logikschaltungen oder Kombinationen davon reduziert sein kann. In einigen Beispielen können Teile des Kontextmanagers 1522 durch das Basis-Ein-/Ausgabesystem (BIOS, Basic Input/Output System) des Datenverarbeitungssystems 1500 implementiert sein.
  • Nach der Beschreibung verschiedener struktureller Komponenten zum Implementieren einer groben Rechenschattierung werden nun Operationen zum Implementieren der groben Rechenschattierung unter Bezugnahme auf 16A-16B, 17 und 18 beschrieben. In einigen Beispielen können die in 16A-16B dargestellten Operationen durch den Kontextmanager 1522 allein oder in Kombination mit anderen Komponenten eines Client-Systems 1500 wie in 15 dargestellt implementiert sein.
  • Es wird Bezug genommen auf 16A und 17; bei Operation 1610 wird ein erster Speicherbereich für eine Grafik-Arbeitslast zugewiesen. In einigen Beispielen weist der Komprimierungsmanager 1522 einen ersten Abschnitt 1720 des Speichers 1710 für Grafikdaten zu, die mit einer Grafik-Arbeitslast verknüpft sind. Bei den Grafikdaten kann es sich z. B. um Vertexdaten, Oberflächendaten, Farbdaten oder dergleichen handeln. Der erste Speicherbereich umfasst eine Mehrzahl von adressierbaren Speicherplätzen.
  • Bei Operation 1615 wird ein zweiter Speicherbereich für Komprimierungsdaten zugewiesen, die sich auf die im ersten Speicherbereich gespeicherten Grafikdaten beziehen. In einigen Beispielen weist der Komprimierungsmanager 1522 einen zweiten Abschnitt 1730 des Speichers 1710 für Komprimierungsdaten zu, die mit den im ersten Abschnitt 1720 des Speichers 1710 gespeicherten Grafikdaten verknüpft sind. Zu den Komprimierungsdaten können beispielsweise Daten gehören, die ein oder mehrere Elemente eines Komprimierungsverfahrens, das zur Komprimierung der Grafikdaten verwendet wird, definieren.
  • In einigen Beispielen ist dem zweiten Abschnitt 1730 des Speichers eine Größe zugewiesen, die einem vorgegebenen Verhältnis zur Größe des ersten Abschnitts 1720 des Speichers 1710 entspricht. In einigen Beispielen kann das Verhältnis der Größe des ersten Speicherbereichs zum zweiten Speicherbereich mit 256:1 konfiguriert sein.
  • Bei Operation 1620 wird eine direkte Speicherzuordnung zwischen der ersten Mehrzahl von Speicherplätzen und der zweiten Mehrzahl von Speicherplätzen konfiguriert. Wie in 17 dargestellt, kann der Speicher 1710 derart ausgelegt sein, dass jeder adressierbare Speicherplatz im ersten Speicherbereich 1710 direkt einem Speicherplatz im zweiten Speicherbereich 1730 zugeordnet ist, der die Komprimierungsdaten für die Grafikdaten enthält, die im ersten Abschnitt 1720 des Speicherbereichs gespeichert sind.
  • Bei Operation 1625 wird das Datenverarbeitungssystem 1500 dafür konfiguriert, Grafikdaten an einen oder mehrere adressierbare Speicherplätze im ersten Speicherbereich 1720 zu schreiben, und bei Operation 1630 wird das Datenverarbeitungssystem dafür konfiguriert, Komprimierungsdaten, die den in Operation 1620 geschriebenen Grafikdaten zugeordnet sind, an den adressierbaren Speicherplatz im zweiten Speicherbereich 1730 zu schreiben, der direkt dem adressierbaren Speicherplatz im ersten Speicherbereich 1720 zugeordnet ist.
  • 18A veranschaulicht eine Zuordnung zwischen einem 64-kB-Speicherbereich 1722 im ersten Speicherbereich und einem 256-Byte-Speicherbereich 1732 im zweiten Speicherbereich. Es wird Bezug genommen auf 18A; in einigen Beispielen ist die Speicheradresse jedes 2-kB-Speicherbereichs im 64-kB-Speicherbereich 1722 direkt der Speicheradresse eines 8-Byte-Speicherbereichs im 256-Byte-Speicherbereich 1732 zugeordnet. Diese Aufteilung des 64-kB-Speicherbereichs in kleinere, 2 kB große Speicherblöcke könnte genutzt werden, um den Speicherzugriff zu parallelisieren, indem der Speicher in Bänken angeordnet und die Adressen über die Speicherbänke hinweg gestreut gespeichert (Hashing) werden.
  • Wie in 18A dargestellt, werden beim Schreiben von Grafikdaten in den 64-kB-Speicherbereich 1722 die entsprechenden Komprimierungsdaten in den 256-Byte-Speicherbereich geschrieben. Da Grafikdaten in den 64-kB-Speicherbereich geschrieben werden und die entsprechenden Komprimierungsdaten in den 256-Byte-Speicherbereich 1732 geschrieben werden, können die Komprimierungs-Metadaten im 256-Byte-Speicherbereich 1732 leicht fragmentiert werden. Dies kann zu einer ineffizienten Zuweisung der 256 Byte Speicher und einem ineffizienten Lesezugriff auf den 256-Byte-Speicherbereich 1732 führen, da sich Daten und Metadaten nicht in derselben Speicherbank befinden.
  • Um diese Probleme zu beheben können, wie in 18B dargestellt, in einigen Beispielen die Komprimierungsdaten in den 256 Bytes Speicher umgepackt werden (Operation 1635), um alle Daten in einer zusammenhängenden Speicherregion im 256-Byte-Speicherbereich zu positionieren. In einigen Beispielen können die Daten mit Hilfe einer Hash-Funktion umgepackt werden.
  • 19 ist ein Blockdiagramm einer Computervorrichtung 1900, die einen Grafikprozessor 1904 gemäß einer Ausführungsform aufweist. Die Computervorrichtung 1900 kann eine Computervorrichtung wie hier beschrieben sein, wie z. B. das Datenverarbeitungssystem 100 wie in 1. Die Computervorrichtung 1900 kann auch eine Kommunikationsvorrichtung wie eine Set-Top-Box (z. B. Internet-basierte Set-Top-Boxen für Kabelfernsehen usw.), auf dem globalen Positionserkennungssystem (GPS, Global Positioning System) basierende Vorrichtungen usw. beinhalten oder darin enthalten sein. Die Computervorrichtung 1900 kann auch in mobilen Computervorrichtungen wie Mobiltelefonen, Smartphones, persönlichen digitalen Assistenten (PDAs), Tablet-Computern, Laptops, E-Readern, intelligenten Fernsehern, Fernsehplattformen, tragbaren Vorrichtungen (z. B. Brillen, Uhren, Armbändern, Smartcards, Schmuck, Kleidungsstücken usw.), Medienabspielvorrichtungen usw. bestehen oder darin enthalten sein. Beispielsweise weist in einer Ausführungsform die Computervorrichtung 1900 eine mobile Computervorrichtung auf, die eine integrierte Schaltung („IC“, Integrated Circuit) wie ein Ein-Chip-System („SoC“ oder „SOC“, System on a Chip) verwendet, die verschiedene Hardware- und/oder Software-Komponenten der Computervorrichtung 1900 auf einem einzigen Chip integriert.
  • Die Computervorrichtung 1900 weist einen Grafikprozessor 1904 auf. Der Grafikprozessor 1904 steht für jeden hier beschriebenen Grafikprozessor. Der Grafikprozessor weist eine/n oder mehrere Grafik-Engines, Grafikprozessorkerne und andere Grafikausführungsressourcen wie hier beschrieben auf. Solche Grafikausführungsressourcen können in den folgenden Formen vorliegen, sind jedoch nicht darauf beschränkt: Ausführungseinheiten, Schattierer-Engines, Fragmentprozessoren, Vertexprozessoren, Streaming-Multiprozessoren, Grafikprozessor-Cluster oder eine beliebige Zusammenstellung von Rechenressourcen, die für die Verarbeitung von Grafiken geeignet sind, und Bildressourcen.
  • In einer Ausführungsform weist der Grafikprozessor 1904 einen Cache 1914 auf, der ein einzelner Cache oder in mehrere Segmente Cache-Speicher unterteilt sein kann, einschließlich, jedoch nicht beschränkt auf eine beliebige Anzahl von L1-, L2-, L3- oder L4-Caches, Render-Caches, Tiefen-Caches, Abtaster-Caches und/oder Schattiereinheiten-Caches. In einer Ausführungsform weist der Grafikprozessor 1904 einen Planer 1924 auf, der eine Variante der Planereinheit 1622 von 16 oder eine andere hier beschriebene Planerlogik sein kann. Der Grafikprozessor 1904 kann zusätzlich einen Befehlsgeber 1926, einen Thread-Abfertiger 1934 und Sperr-/Synchronisationslogik 1936 aufweisen, zusätzlich zu einer GPGPU-Engine 1944, die Hardware-Logik zum Durchführen der hier beschriebenen Grafikverarbeitung und Ausführung von Universal-Befehlen aufweist.
  • Wie dargestellt kann, in einer Ausführungsform und zusätzlich zum Grafikprozessor 1904, die Computervorrichtung 1900 ferner eine beliebige Anzahl und Art von Hardware-Komponenten und/oder Software-Komponenten aufweisen, einschließlich, jedoch nicht beschränkt auf einen Anwendungsprozessor 1906, einen Speicher 1908 und Ein-/Ausgabe (E/A)-Quellen 1910. Der Anwendungsprozessor 1906 kann mit einer Hardware-Grafikpipeline interagieren, wie unter Bezugnahme auf 3 dargestellt, um die Funktionalität der Grafikpipeline gemeinsam zu nutzen. Verarbeitete Daten werden in einem Puffer in der Hardware-Grafikpipeline gespeichert und Zustandsinformationen werden im Speicher 1908 abgelegt. Die resultierenden Daten können an eine Anzeigesteuerung zur Ausgabe über eine Anzeigevorrichtung, wie z. B. die Anzeigevorrichtung 323 von 3, übertragen werden. Bei der Anzeigevorrichtung kann es sich um verschiedene Typen handeln, wie z. B. Kathodenstrahlröhre (CRT, Cathode Ray Tube), Dünnfilmtransistor (TFT, Thin Film Transistor), Flüssigkristallanzeige (LCD, Liquid Crystal Display), organische Leuchtdioden (OLED, Organic Light Emitting Diode)-Anordnung usw., und sie kann dafür ausgelegt sein, über eine grafische Benutzerschnittstelle Informationen für einen Benutzer anzuzeigen.
  • Der Anwendungsprozessor 1906 kann einen oder mehrere Prozessoren aufweisen, wie zum Beispiel Prozessor(en) 102 von 1, und kann die zentrale Verarbeitungseinheit (CPU) sein, die wenigstens teilweise zum Ausführen eines Betriebssystems (OS) 1902 für die Computervorrichtung 1900 genutzt wird. Das OS 1902 kann als Schnittstelle zwischen Hardware und/oder physischen Ressourcen der Computervorrichtung 1900 und einem oder mehreren Benutzern dienen. Das OS 1902 kann Grafiktreiber-Logik 1922 wie zum Beispiel den Benutzermodus-Grafiktreiber 1026 und/oder den Kernel-Modus-Grafiktreiber 1029 von 10 aufweisen.
  • Es wird betrachtet, dass in einigen Ausführungsformen der Grafikprozessor 1904 als Teil des Anwendungsprozessors 1906 (z. B. als Teil eines physischen CPU-Pakets) vorhanden sein kann, wobei in diesem Fall wenigstens ein Teil des Speichers 1908 von Anwendungsprozessor 1906 und Grafikprozessor 1904 gemeinsam genutzt werden kann, wenngleich wenigstens ein Teil des Speichers 1908 exklusiv dem Grafikprozessor 1904 vorbehalten sein kann, oder dass der Grafikprozessor 1904 eine separaten Menge Speicher haben kann. Der Speicher 1908 kann einen vorbelegten Bereich eines Puffers (z. B. Framepuffer) umfassen; allerdings versteht es sich für den Durchschnittsfachmann auf diesem Gebiet der Technik, dass die Ausführungsformen nicht hierauf beschränkt sind und dass jeder Speicher, der für die untere Grafikpipeline zugänglich ist, verwendet werden kann. Der Speicher 1908 kann verschiedene Formen von Direktzugriffsspeicher (RAM, Random Access Memory) beinhalten (z. B. SDRAM, SRAM usw.), die eine Anwendung umfassen, die den Grafikprozessor 1904 zum Rendern eines Arbeitsplatzes (Desktop) oder einer 3D-Grafikszene nutzt. Eine Speichersteuerung kann verwendet werden, um auf Daten im Speicher 1908 zuzugreifen und die Daten zur Grafikpipeline-Verarbeitung an den Grafikprozessor 1904 weiterzuleiten. Der Systemspeicher 1908 kann für andere Komponenten innerhalb der Computervorrichtung 1900 zur Verfügung gestellt werden. Beispielsweise können alle Daten (z. B. Eingangsgrafikdaten), die von verschiedenen E/A-Quellen 1910 der Computervorrichtung 1900 empfangen werden, vorübergehend in eine Warteschlange im Speicher 1908 gestellt werden, bevor sie von einem oder mehreren Prozessoren (z. B. Anwendungsprozessor 1906) bei der Implementierung eines Software-Programms oder einer Anwendung bearbeitet werden. In ähnlicher Weise werden Daten, von denen ein Software-Programm bestimmt, dass sie von der Computervorrichtung 1900 über eine der Computersystemschnittstellen an eine externe Einheit übertragen oder in einem internen Speicherelement gespeichert werden sollen, oft vorübergehend im Speicher 1908 in eine Warteschlange gestellt, bevor sie übertragen oder gespeichert werden.
  • Zu den E/A-Quellen können Vorrichtungen wie Berührungsschirme, Touchpanels, Touchpads, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Ports, Anschlüsse, Netzvorrichtungen oder dergleichen zählen. Zusätzlich können zu den E/A-Quellen 1910 eine oder mehrere E/A-Vorrichtungen zählen, die für die Übertragung von Daten an die und/oder von der Computervorrichtung 1900 (z. B. ein Netzadapter) oder für einen groß angelegten nichtflüchtigen Speicher innerhalb der Computervorrichtung 1900 (z. B. ein Festplattenlaufwerk) implementiert sind. Benutzereingabevorrichtungen, die alphanumerische und andere Tasten aufweisen, können zum Übermitteln von Informationen und Befehlsauswahlen an den Grafikprozessor 1904 verwendet werden. Eine andere Art von Benutzereingabevorrichtung ist die Cursorsteuerung, wie z. B. eine Maus, ein Trackball, ein Berührungsschirm, ein Touchpad oder Cursor-Richtungstasten, um Richtungsinformationen und Befehlsauswahlen an die GPU zu übermitteln und die Cursorbewegung auf der Anzeigevorrichtung zu steuern. Kamera- und Mikrofonanordnungen der Computervorrichtung 1900können zum Beobachten von Gesten, zum Aufzeichnen von Audio- und Video-Aufnahmen und zum Empfangen bzw. Übertragen von visuellen und akustischen Befehlen verwendet werden.
  • E/A-Quellen 1910, die als Netzschnittstellen ausgelegt sind, können Zugang zu einem Netz bereitstellen, z. B. zu einem LAN, einem Weitverkehrsnetz (WAN, Wide Area Network), einem Großstadtnetz (MAN, Metropolitan Area Network), einem Netz für den persönlichen Bereich (PAN, Personal Area Network), Bluetooth, einem Cloud-Netz, einem Zellular- oder Mobilfunknetz (z. B. 3. Generation (3G), 4. Generation (4G) usw.), einem Intranet, dem Internet usw. Die ein oder mehreren Netzschnittstellen können beispielsweise eine drahtlose Netzschnittstelle mit einer oder mehreren Antennen aufweisen. Die ein oder mehreren Netzschnittstellen können zudem beispielsweise eine drahtgebundene Netzschnittstelle für die Kommunikation mit entfernten Vorrichtungen über ein Netzkabel, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein paralleles Kabel sein kann, aufweisen.
  • Die ein oder mehreren Netzschnittstellen können den Zugang zu einem LAN ermöglichen, beispielsweise indem sie IEEE 802.11-Standards entsprechen, und/oder die drahtlose Netzschnittstelle kann den Zugang zu einem Netz für den persönlichen Bereich (PAN) erlauben, beispielsweise indem sie dem Bluetooth-Standard entspricht. Andere drahtlose Netzschnittstellen und/oder Protokolle, einschließlich vorhergehender und nachfolgender Versionen der Standards, werden möglicherweise ebenfalls unterstützt. Zusätzlich zu oder anstelle der Kommunikation über die Drahtlos-LAN-Standards können eine oder mehrere Netzschnittstellen drahtlose Kommunikation beispielsweise über TDMA-Protokolle (Time Division Multiple Access, Zeitmultiplex-Vielfachzugriff), GSM-Protokolle (Global Systems for Mobile Communications, Globales System für Mobilkommunikation), CDMA-Protokolle (Code Division Multiple Access, Codemultiplex-Vielfachzugriff) und/oder andere Arten drahtloser Kommunikationsprotokolle ermöglichen.
  • Es ist einzusehen, dass für bestimmte Implementierungen ein weniger oder umfangreicher ausgerüstetes System als das oben beschriebene Beispiel bevorzugt werden kann. Daher kann die Konfiguration der Computervorrichtung 1900 von Implementierung zu Implementierung variieren, was von zahlreichen Faktoren wie Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Umständen abhängt. Beispiele sind etwa (ohne jedoch darauf beschränkt zu sein): eine mobile Vorrichtung, ein persönlicher digitaler Assistent (PDA), eine mobile Computervorrichtung, ein Smartphone, ein Mobiltelefon, ein Handapparat, ein Einweg-Pager, ein Zwei-Wege-Pager, eine Nachrichtenübermittlungsvorrichtung, ein Computer, ein Personal-Computer (PC), ein Desktop-Computer, ein Laptop-Computer, ein Notebook-Computer, ein tragbarer Computer, ein Tablet-Computer, ein Server, eine Server-Anordnung oder Server-Farm, ein Web-Server, ein Netzserver, ein Internet-Server, eine Arbeitsstation, ein Minicomputer, ein Mainframe-Computer, ein Supercomputer, ein Netzgerät, ein Web-Gerät, ein verteiltes Computersystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Unterhaltungselektronik, programmierbare Unterhaltungselektronik, Fernseher, digitale Fernseher, eine Set-Top-Box, ein drahtloser Zugangspunkt, eine Basisstation, eine Teilnehmerstation, eine Mobilfunkvermittlungsstelle, eine Funknetzsteuerung, ein Router, ein Netzknoten, ein Netzübergang (Gateway), eine Brücke (Bridge), eine Vermittlung (Switch), eine Maschine oder Kombinationen davon.
  • Die folgenden Sätze und/oder Beispiele beziehen sich auf spezifische Ausführungsformen oder Beispiele derselben. Besonderheiten in den Beispielen können an beliebiger Stelle in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der verschiedenen Ausführungsformen oder Beispiele können auf verschiedene Weise kombiniert werden, wobei einige Merkmale eingeschlossen und andere ausgeschlossen werden können, um mehreren unterschiedlichen Anwendungen gerecht zu werden. Beispiele können Erfindungsgegenstände beinhalten, etwa ein Verfahren, Mittel zum Durchführen von Aktionen des Verfahrens, wenigstens ein maschinenlesbares Medium mit Befehlen, die bei Ausführung durch eine Maschine die Maschine veranlassen, Aktionen des Verfahrens, oder einer Einrichtung oder eines Systems gemäß hier beschriebenen Ausführungsformen und Beispielen durchzuführen. Verschiedene Komponenten können ein Mittel zum Durchführen der beschriebenen Operationen oder Funktionen sein.
  • Beispiel 1 ist eine Einrichtung, die einen Prozessor umfasst, um einen ersten Speicherbereich für Daten für eine Grafik-Arbeitslast zuzuweisen, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst, einen zweiten Speicherbereich für Komprimierungs-Metadaten zuzuweisen, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist, und eine direkte Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen zu konfigurieren.
  • Beispiel 2 kann den Gegenstand von Beispiel 1 umfassen, wobei das vorgegebene Verhältnis der dem ersten Speicherbereich zugewiesenen Speichermenge zu der Speichermenge im zweiten Speicherbereich 256:1 beträgt.
  • Beispiel 3 kann den Gegenstand eines der Beispiele 1-2 umfassen, wobei der Prozessor dazu dient, eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  • Beispiel 4 kann den Gegenstand eines der Beispiele 1-3 umfassen, wobei der Prozessor dazu dient, von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  • Beispiel 5 kann den Gegenstand eines der Beispiele 1-4 umfassen, wobei der Prozessor dazu dient, die Komprimierungs-Metadaten im zweiten Speicherbereich umzupacken, unter Verwendung einer Hash-Funktion, die einen ersten adressierbaren Speicherplatz im zweiten Speicherbereich mit einem zweiten adressierbaren Speicherplatz im zweiten Speicherbereich verknüpft.
  • Beispiel 6 kann den Gegenstand eines der Beispiele 1-5 umfassen, wobei der Prozessor dazu dient, eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse und der Hash-Funktion einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  • Beispiel 7 kann den Gegenstand eines der Beispiele 1-5 umfassen, wobei der Prozessor dazu dient, von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  • Beispiel 8 ist ein nicht transitorisches, maschinenlesbares Medium, das Befehle speichert, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, bewirken, dass den einen oder die mehreren Prozessoren einen ersten Speicherbereich für Daten für eine Grafik-Arbeitslast zuweisen, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst, einen zweiten Speicherbereich für Komprimierungs-Metadaten zuweisen, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist, und eine direkte Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen konfigurieren.
  • Beispiel 9 kann den Gegenstand von Beispiel 8 umfassen, wobei das vorgegebene Verhältnis der dem ersten Speicherbereich zugewiesenen Speichermenge zu der Speichermenge im zweiten Speicherbereich 256:1 beträgt.
  • Beispiel 10 kann den Gegenstand eines der Beispiele 8-9 umfassen, ferner Befehle umfassend, die den Prozessor dafür konfigurieren, eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  • Beispiel 11 kann den Gegenstand eines der Beispiele 8-10 umfassen, ferner Befehle umfassend, die den Prozessor dafür konfigurieren, von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  • Beispiel 12 kann den Gegenstand eines der Beispiele 8-11 umfassen, ferner Befehle umfassend, die den Prozessor dafür konfigurieren, die Komprimierungs-Metadaten im zweiten Speicherbereich umzupacken, unter Verwendung einer Hash-Funktion, die einen ersten adressierbaren Speicherplatz im zweiten Speicherbereich mit einem zweiten adressierbaren Speicherplatz im zweiten Speicherbereich verknüpft.
  • Beispiel 13 kann den Gegenstand eines der Beispiele 8-11 umfassen, ferner Befehle umfassend, die den Prozessor dafür konfigurieren, eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse und der Hash-Funktion einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  • Beispiel 14 kann den Gegenstand eines der Beispiele 8-11 umfassen, ferner Befehle umfassend, die den Prozessor dafür konfigurieren, von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  • Beispiel 15 ist ein computerimplementiertes Verfahren, das umfasst, einen ersten Speicherbereich für Daten für eine Grafik-Arbeitslast zuzuweisen, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst, einen zweiten Speicherbereich für Komprimierungs-Metadaten zuzuweisen, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist, und eine direkte Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen zu konfigurieren.
  • Beispiel 16 kann den Gegenstand von Beispiel 15 umfassen, wobei das vorgegebene Verhältnis der dem ersten Speicherbereich zugewiesenen Speichermenge zu der Speichermenge im zweiten Speicherbereich 256:1 beträgt.
  • Beispiel 17 kann den Gegenstand eines der Beispiele 15-16 umfassen, ferner umfassend, Empfangen einer Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; Bestimmen, anhand der ersten Speicheradresse, eines zweiten Speicheradressraum im zweiten Speicherbereich; und Abrufen, von der zweiten Speicheradresse, der dort gespeicherten Komprimierungs-Metadaten.
  • Beispiel 18 kann den Gegenstand eines der Beispiele 15-17 umfassen, ferner umfassend, Abrufen, von der ersten Speicheradresse, der Daten für die Grafik-Arbeitslast; und Verwenden der Komprimierungs-Metadaten, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  • Beispiel 19 kann den Gegenstand eines der Beispiele 15-18 umfassen, ferner umfassend, Umpacken der Komprimierungs-Metadaten im zweiten Speicherbereich, unter Verwendung einer Hash-Funktion, die einen ersten adressierbaren Speicherplatz im zweiten Speicherbereich mit einem zweiten adressierbaren Speicherplatz im zweiten Speicherbereich verknüpft.
  • Beispiel 20 kann den Gegenstand eines der Beispiele 15-19 umfassen, ferner umfassend, Empfangen einer Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; Bestimmen, anhand der ersten Speicheradresse und der Hash-Funktion, eines zweiten Speicheradressraums im zweiten Speicherbereich; und Abrufen, von der zweiten Speicheradresse, der dort gespeicherten Komprimierungs-Metadaten.
  • Beispiel 21 kann den Gegenstand eines der Beispiele 15-20 umfassen, ferner umfassend, Abrufen, von der ersten Speicheradresse, der Daten für die Grafik-Arbeitslast; und Verwenden der Komprimierungs-Metadaten, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  • Ausführungsformen können z. B. als Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien mit darauf gespeicherten maschinenausführbaren Befehlen aufweisen kann, die bei Ausführung durch eine oder mehrere Maschinen, wie z. B. einen Computer, ein Computernetz oder andere elektronische Vorrichtungen, dazu führen können, dass die ein oder mehreren Maschinen Operationen gemäß hier beschriebenen Ausführungsformen ausführen. Zu maschinenlesbaren Datenträgern können zählen, ohne jedoch darauf beschränkt zu sein, : Disketten, optische Platten, CD-ROMs (Compact Disc-Read Only Memories) und magnetooptische Platten, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Speicher oder andere Arten von Medien/ maschinenlesbaren Medien, die zum Speichern maschinenausführbarer Befehle geeignet sind.
  • Weiterhin können Ausführungsformen als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. einem Server) an einen anfordernden Computer (z. B. einen Client) in Form von einem oder mehreren Datensignalen, die durch eine Trägerwelle oder ein anderes Ausbreitungsmedium ausgeführt sind, über eine Kommunikationsverbindung (z. B. eine Modem- oder eine Netzverbindung) übertragen werden kann.
  • Fachleute auf diesem Gebiet werden aus der vorstehenden Beschreibung erkennen, dass die umfassenden Techniken der Ausführungsformen in vielfältigen Formen implementiert werden können. Daher soll, obwohl die Ausführungsformen in Verbindung mit bestimmten Beispielen derselben beschrieben wurden, der tatsächliche Schutzumfang der Ausführungsformen nicht auf diese beschränkt sein, da für den Fachmann nach dem Studium der Zeichnungen, der Beschreibung und der nachfolgenden Ansprüche weitere Modifikationen offensichtlich sind.

Claims (21)

  1. Einrichtung, umfassend: einen Prozessor zum: Zuweisen eines ersten Speicherbereichs für Daten für eine Grafik-Arbeitslast, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst; Zuweisen eines zweiten Speicherbereichs für Komprimierungs-Metadaten, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist; und Konfigurieren einer direkten Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen.
  2. Einrichtung nach Anspruch 1, wobei das vorbestimmte Verhältnis der dem ersten Speicherbereich zugeordneten Speichermenge zu der Speichermenge im zweiten Speicherbereich 256:1 beträgt.
  3. Einrichtung nach Anspruch 1, wobei der Prozessor dazu dient: eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  4. Einrichtung nach Anspruch 3, wobei der Prozessor dazu dient: von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  5. Einrichtung nach Anspruch 1, wobei der Prozessor dazu dient: die Komprimierungs-Metadaten im zweiten Speicherbereich umzupacken, unter Verwendung einer Hash-Funktion, die einen ersten adressierbaren Speicherplatz im zweiten Speicherbereich mit einem zweiten adressierbaren Speicherplatz im zweiten Speicherbereich verknüpft.
  6. Einrichtung nach Anspruch 5, wobei der Prozessor dazu dient: eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse und der Hash-Funktion einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  7. Einrichtung nach Anspruch 6, wobei der Prozessor dazu dient: von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  8. Nicht transitorisches maschinenlesbares Medium, das Befehle speichert, die bei Ausführung durch einen oder mehrere Prozessoren den einen oder die mehreren Prozessoren veranlassen zum: Zuweisen eines ersten Speicherbereichs für Daten für eine Grafik-Arbeitslast, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst; Zuweisen eines zweiten Speicherbereichs für Komprimierungs-Metadaten, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist; und Konfigurieren einer direkten Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen.
  9. Nicht transitorisches, maschinenlesbares Medium nach Anspruch 8, wobei das vorbestimmte Verhältnis der dem ersten Speicherbereich zugewiesenen Speichermenge zu der Speichermenge im zweiten Speicherbereich 256:1 beträgt.
  10. Nicht transitorisches, maschinenlesbares Medium nach Anspruch 8, das ferner Befehle umfasst, die den Prozessor dafür konfigurieren: eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  11. Nicht -transitorisches, maschinenlesbares Medium nach Anspruch 10, das ferner Befehle umfasst, die den Prozessor dafür konfigurieren: von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  12. Nicht transitorisches, maschinenlesbares Medium nach Anspruch 8, das ferner Befehle umfasst, die den Prozessor dafür konfigurieren: die Komprimierungs-Metadaten im zweiten Speicherbereich umzupacken, unter Verwendung einer Hash-Funktion, die einen ersten adressierbaren Speicherplatz im zweiten Speicherbereich mit einem zweiten adressierbaren Speicherplatz im zweiten Speicherbereich verknüpft.
  13. Nicht transitorisches, maschinenlesbares Medium nach Anspruch 12, das ferner Befehle umfasst, die den Prozessor dafür konfigurieren: eine Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast zu empfangen, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; anhand der ersten Speicheradresse und der Hash-Funktion einen zweiten Speicheradressraum im zweiten Speicherbereich zu bestimmen; und von der zweiten Speicheradresse die dort gespeicherten Komprimierungs-Metadaten abzurufen.
  14. Nicht transitorisches, maschinenlesbares Medium nach Anspruch 13, das ferner Befehle umfasst, die den Prozessor dafür konfigurieren: von der ersten Speicheradresse die Daten für die Grafik-Arbeitslast abzurufen; und die Komprimierungs-Metadaten zu verwenden, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  15. Computerimplementiertes Verfahren, umfassend: Zuweisen eines ersten Speicherbereichs für Daten für eine Grafik-Arbeitslast, wobei der erste Speicherbereich eine erste Mehrzahl von adressierbaren Speicherplätzen umfasst; Zuweisen eines zweiten Speicherbereichs für Komprimierungs-Metadaten, die sich auf die Daten für die Grafik-Arbeitslast beziehen, wobei der zweite Speicherbereich eine zweite Mehrzahl von adressierbaren Speicherplätzen umfasst und eine Speichermenge aufweist, die einem vorbestimmten Verhältnis der Speichermenge entspricht, die dem ersten Speicherbereich zugewiesen ist; und Konfigurieren einer direkten Speicherzuordnung zwischen der ersten Mehrzahl von adressierbaren Speicherplätzen und der zweiten Mehrzahl von adressierbaren Speicherplätzen.
  16. Verfahren nach Anspruch 15, wobei das vorbestimmte Verhältnis der dem ersten Speicherbereich zugewiesenen Speichermenge zu der Speichermenge im zweiten Speicherbereich 256:1 beträgt.
  17. Verfahren nach Anspruch 15, ferner umfassend: Empfangen einer Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; Bestimmen, anhand der ersten Speicheradresse, eines zweiten Speicheradressraums im zweiten Speicherbereich; und Abrufen, von der zweiten Speicheradresse, der dort gespeicherten Komprimierungs-Metadaten.
  18. Verfahren nach Anspruch 17, ferner umfassend: Abrufen, von der ersten Speicheradresse, der Daten für die Grafik-Arbeitslast; und Verwenden der Komprimierungs-Metadaten, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
  19. Verfahren nach Anspruch 15, ferner umfassend: Umpacken der Komprimierungs-Metadaten im zweiten Speicherbereich unter Verwendung einer Hash-Funktion, die einen ersten adressierbaren Speicherplatz im zweiten Speicherbereich mit einem zweiten adressierbaren Speicherplatz im zweiten Speicherbereich verknüpft.
  20. Verfahren nach Anspruch 19, ferner umfassend: Empfangen einer Speicherzugriffsanforderung für Daten für die Grafik-Arbeitslast, wobei die Datenzugriffsanforderung eine erste Speicheradresse im ersten Speicherbereich umfasst; Bestimmen, anhand der ersten Speicheradresse und der Hash-Funktion, eines zweiten Speicheradressraums im zweiten Speicherbereich; und Abrufen, von der zweiten Speicheradresse, der dort gespeicherten Komprimierungs-Metadaten.
  21. Verfahren nach Anspruch 20, ferner umfassend: Abrufen, von der ersten Speicheradresse, der Daten für die Grafik-Arbeitslast; und Verwenden der Komprimierungs-Metadaten, um die Dekomprimierung der Daten für die Grafik an der ersten Speicheradresse im ersten Speicherbereich zu ermöglichen.
DE102020108215.0A 2019-03-27 2020-03-25 Bedienflächenzugriff mittels flacher Speicherzuordnung Pending DE102020108215A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/366,266 2019-03-27
US16/366,266 US10802970B1 (en) 2019-03-27 2019-03-27 Control surface access using flat memory mapping

Publications (1)

Publication Number Publication Date
DE102020108215A1 true DE102020108215A1 (de) 2020-10-01

Family

ID=72605650

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020108215.0A Pending DE102020108215A1 (de) 2019-03-27 2020-03-25 Bedienflächenzugriff mittels flacher Speicherzuordnung

Country Status (3)

Country Link
US (2) US10802970B1 (de)
CN (1) CN111754382A (de)
DE (1) DE102020108215A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11416402B2 (en) 2019-03-27 2022-08-16 Intel Corporation Control surface access using flat memory mapping

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114896058B (zh) * 2022-04-27 2023-09-22 南京鼎华智能系统有限公司 基于内存运算的派工系统以及派工方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10115177B2 (en) * 2014-06-27 2018-10-30 Samsung Electronics Co., Ltd. Online texture compression and decompression in hardware
US10783694B2 (en) * 2017-08-25 2020-09-22 Advanced Micro Devices, Inc. Texture residency checks using compression metadata
US10802970B1 (en) 2019-03-27 2020-10-13 Intel Corporation Control surface access using flat memory mapping

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11416402B2 (en) 2019-03-27 2022-08-16 Intel Corporation Control surface access using flat memory mapping

Also Published As

Publication number Publication date
CN111754382A (zh) 2020-10-09
US20210049098A1 (en) 2021-02-18
US20200310973A1 (en) 2020-10-01
US10802970B1 (en) 2020-10-13
US11416402B2 (en) 2022-08-16

Similar Documents

Publication Publication Date Title
DE102019117592A1 (de) Videoverarbeitungsmechanismus
DE102019117514A1 (de) Punktwolkenblickwinkel und skalierbare komprimierung/dekomprimierung
DE102019120661A1 (de) Videoverfeinerungsmechanismus
DE102019119102A1 (de) Spärliche repräsentation für voxel
DE102019119085A1 (de) Punktbasiertes rendern und entfernung von projektionsrauschen
DE112018005527T5 (de) Automatisches aufwecken von leistungsdomänen fürgrafikkonfigurationsanforderungen
DE102019117495A1 (de) System und verfahren zur 3d-blob-klassifizierung und -übertragung
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102019117218A1 (de) Reduziertes Rendern eines Videos mit sechs Freiheitsgraden
DE102019101118A1 (de) Anweisung und Logik für systolisches Skalarprodukt mit Akkumulation
DE102020105902A1 (de) Hardware-indexzuordnungsmechanismus
DE102020129756A1 (de) Verwendung eines efehls einer rchitektur mit einem efehlssatz (isa) zur ektornormalisierung
DE112018007634T5 (de) Vorrichtung und verfahren für eine virtualisierte anzeige
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus
DE102020130880A1 (de) Mechanismus zur partitionierung eines geteilten lokalen speichers
DE102020115578A1 (de) Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln
DE102019117545A1 (de) Reduzierung von registerbankkonflikten für ausführungseinheiten eines multithread-prozessors
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE112018007635T5 (de) Vorrichtung und verfahren zur effizienten gemeinsamen nutzung einer lokalen anzeige für einen virtualisierten grafikprozessor
DE112018003999T5 (de) Verfahren und Vorrichtung für effiziente Verarbeitung von abgeleiteten einheitlichen Werten in einem Grafikprozessor
DE102020113789A1 (de) Asynchroner ausführungsmechanismus
DE102020104651A1 (de) Arbeitsspeicherkomprimierungs-Hashmechanismus
DE102020113400A1 (de) Registerteilungsmechanismus