DE102020130865A1 - Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping - Google Patents

Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping Download PDF

Info

Publication number
DE102020130865A1
DE102020130865A1 DE102020130865.5A DE102020130865A DE102020130865A1 DE 102020130865 A1 DE102020130865 A1 DE 102020130865A1 DE 102020130865 A DE102020130865 A DE 102020130865A DE 102020130865 A1 DE102020130865 A1 DE 102020130865A1
Authority
DE
Germany
Prior art keywords
instruction
hardware
instructions
graphics
logic
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
DE102020130865.5A
Other languages
English (en)
Inventor
Supratim Pal
Sasikanth Avancha
Ishwar Bhati
Wei-Yu Chen
Dipankar Das
Ashutosh Garg
Chandra S. Gurram
Junjie Gu
Guei-Yuan Lueh
Subramaniam Maiyuran
Jorge E. Parra
Sudarshan Srinivasan
Varghese George
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 DE102020130865A1 publication Critical patent/DE102020130865A1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3824Operand accessing
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

Hier beschriebene Ausführungsformen stellen eine Anweisung und verknüpfte Logik bereit, um Vektor-Multiplikation-Addition-Anweisungen mit automatischer Null-Auslassung (Zero-Skipping) für dünn besetzte Eingaben zu ermöglichen. Eine Ausführungsform sieht einen Universal-Grafikprozessor vor, der Logik zum Durchführen von Operationen umfasst, umfassend das Abrufen einer Hardware-Makroanweisung mit einer Prädikatmaske, einer Wiederholungszählung und einem Satz von Anfangsoperanden, wobei die Anfangsoperanden einen Zieloperanden und mehrere Quelloperanden beinhalten. Die Hardware-Makroanweisung ist dafür ausgelegt, eine oder mehrere Multiplizier-/Addieroperationen an Eingabedaten durchzuführen, die mit einem Satz von Matrizen verknüpft sind.

Description

  • STAND DER TECHNIK
  • Die Matrixmultiplikation ist eine der gängigsten Operationen, die bei Arbeitslasten in den Bereichen Hochleistungsverarbeitung (High-Performance Computing, HPC) und Maschinenlernen (Machine Learning, ML) durchgeführt wird. Matrixmultiplikationsoperationen werden oft in Prozessorfunktionseinheiten durchgeführt, wobei eine Variante der verschmolzenen Multiplikation-Addition-Anweisung verwendet wird. Da Matrizen, die bei diesen Arbeitslasten verwendet werden, ob dünn besetzt sind, haben/hat der für die Anweisung bereitgestellte Multiplikator und/oder der Multiplikand wahrscheinlich den Wert Null, was die Akkumulation eines Nullwertes zur Folge hat. Dementsprechend können solche Operationen umgangen werden, ohne das Endergebnis zu beeinflussen.
  • Figurenliste
  • Damit die Art und Weise, in der die vorstehend erwähnten Merkmale der vorliegenden Ausführungsformen realisiert werden, im Einzelnen verstanden werden kann, kann eine genauere Beschreibung der vorstehend zusammengefassten Ausführungsformen unter Bezugnahme auf Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es sei jedoch angemerkt, dass die beigefügten Zeichnungen lediglich typische Ausführungsformen veranschaulichen und daher nicht im Sinne einer Einschränkung des Schutzumfangs zu verstehen sind.
    • 1 ist ein Blockschaltbild eines Verarbeitungssystems gemäß einer Ausführungsform;
    • 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die von hier beschriebenen Ausführungsformen bereitgestellt werden;
    • 3A-3C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleuniger-Architekturen, die von hier beschriebenen Ausführungsformen bereitgestellt werden;
    • 4 ist ein Blockschaltbild einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors gemäß einigen Ausführungsformen;
    • 5A-5B veranschaulichen eine Thread-Ausführungslogik, die eine Anordnung von Verarbeitungselementen beinhaltet, welche in einem Grafikprozessorkern gemäß hier beschriebenen Ausführungsformen eingesetzt werden;
    • 6 veranschaulicht eine zusätzliche Ausführungseinheit gemäß einer Ausführungsform;
    • 7 ist ein Blockschaltbild, das Grafikprozessor-Anweisungsformate gemäß einigen Ausführungsformen veranschaulicht;
    • 8 ist ein Blockschaltbild eines Grafikprozessors gemäß einer anderen Ausführungsform;
    • 9A-9B veranschaulicht ein Grafikprozessor-Befehlsformat und eine Befehlsfolge gemäß einigen Ausführungsformen;
    • 10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen;
    • 11A ist ein Blockschaltbild, das ein IP-Kernentwicklungssystem gemäß einer Ausführungsform veranschaulicht;
    • 11B zeigt eine Querschnitt-Seitenansicht der Gehäusebaugruppe einer integrierten Schaltung gemäß einigen hier beschriebenen Ausführungsformen;
    • 11C veranschaulicht eine Gehäusebaugruppe, die mehrere Einheiten von Hardware-Logik-Chiplets beinhaltet, die mit einem Substrat verbunden sind;
    • 11D veranschaulicht eine Gehäusebaugruppe mit austauschbaren Chiplets gemäß einer Ausführungsform;
    • 12 veranschaulicht eine beispielhafte integrierte Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hier beschriebenen Ausführungsformen gefertigt sein kann;
    • 13A-13B sind Blockschaltbilder, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hier beschriebenen Ausführungsformen veranschaulichen;
    • 14 veranschaulicht einen Maschinenlern-Softwarestapel gemäß einer Ausführungsform;
    • 15A-15B veranschaulichen Schichten von beispielhaften tiefen neuronalen Netzen;
    • 16 veranschaulicht ein beispielhaftes rekurrentes neuronales Netz;
    • 17 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzes;
    • 18 ist ein Blockschaltbild, das verteiltes Lernen veranschaulicht;
    • 19 ist ein Blockschaltbild eines Datenverarbeitungssystems gemäß einer Ausführungsform;
    • 20 veranschaulicht eine allgemeine Matrixmultiplikationsoperation an Quell- und Zielmatrizen;
    • 21A-21C veranschaulichen eine Anweisung und verknüpfte Hardwarelogik zum Ermöglichen einer Multiplizieren-Addieren-Vektoroperation mit Null-Auslassung (Zero-Skipping) für dünn besetzte Eingaben;
    • 22 veranschaulicht eine Anweisungserweiterung und Auslassung für dünn besetzte Eingaben gemäß einer Ausführungsform;
    • 23 veranschaulicht ein Verfahren zum Ermöglichen der Ausführung einer Multiplizieren/Addieren/Vektor-Anweisung gemäß einer Ausführungsform; und
    • 24 ist ein Blockschaltbild einer Rechenvorrichtung mit einem Grafikprozessor gemäß einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Hier beschriebene Ausführungsformen stellen eine neue Anweisung (madv) bereit, die mehrere Multiplikation-Addition-Anweisungen komprimiert, welche gemeinhin in Allgemeinen Matrixmultiplikationskernels (General Matrix Multiply Kernels, GEMMs) vorliegen. Beim Ausführen der Anweisung kann eine Grafikprozessor-Funktionseinheit die Rundsendequelle für Nullwerte vergleichen und eine skipMask-Bitmap erstellen, die der madv-Anweisung als Prädikat zugeführt wird. Das Prädikat wird verwendet, um einzelne Multiplikation-Addition-Anweisungen während der Erweiterung der madv-Anweisung zu überspringen. Das Überspringen von Anweisungsinstanzen ist insbesondere für dünn besetzte Matrixmultiplikationen nützlich. Die Anzahl von Anweisungswiederholungen, die während der Erweiterung übersprungen werden können, steht in Beziehung zur dünnen Besetzung der Eingabe. In der HPC/ML-Rechendomäne können Matrizen eine dünne Besetzung aufweisen, die 50 % überschreitet, was es erlaubt, dass mehr als die der Hälfte dynamischen Multiplikation-Addition-Anweisungen umgangen wird, was wiederum eine mehr als zweifache Beschleunigung solcher Arbeitslasten nach sich zieht. Des Weiteren reduziert sich die Anweisungsabruf- und Decodierbandbreite, die durch solche Arbeitsleisten verbraucht wird, zusammen mit der Menge an Betriebsleistung, die durch den Grafikprozessor verbraucht wird. Im Allgemeinen ist eine direkte Korrelation zwischen den Vorteilen, die durch die madv-Anweisung bereitgestellt werden, und der Anzahl von Nullen in einer gegebenen Eingabematrix zu beobachten.
  • Zum Zwecke der Erläuterung werden zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der verschiedenen nachstehend beschriebenen Ausführungsformen zu vermitteln. Allerdings wird es Fachleuten auf dem Gebiet klar sein, dass die Ausführungsformen ohne einige dieser spezifischen Einzelheiten in die Praxis umgesetzt werden können. In anderen Fällen sind bekannte Strukturen und Vorrichtungen in Form eines Blockschaltbilds gezeigt, um zu vermeiden, dass die zugrundeliegenden Prinzipien unklar werden und um ein gründlicheres Verständnis der Ausführungsformen zu vermitteln. Auch wenn einige der nachstehenden Ausführungsformen unter Bezugnahme auf einen Grafikprozessor beschrieben werden, können die hier beschriebenen Techniken bzw. Verfahren sowie Lehren auf verschiedene Arten von Schaltungen oder Halbleitervorrichtungen angewendet werden, was Universalverarbeitungsvorrichtungen oder Grafikverarbeitungsvorrichtungen einschließt. Verweise hierin auf „genau eine Ausführungsform“ oder „eine Ausführungsform“ bedeuten, dass ein besonderes Merkmal, eine Struktur oder eine Eigenschaft, die in Verbindung oder Verknüpfung mit der Ausführungsform beschrieben wird, in wenigstens einer dieser Ausführungsformen enthalten sein kann. Allerdings beziehen sich die Vorkommnisse des Ausdrucks „in einer Ausführungsform“ an verschiedenen Stellen der Beschreibung nicht notwendigerweise alle auf dieselbe Ausführungsform.
  • In der folgenden 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 anzugeben, dass zwei oder mehr Elemente, die in direktem physischen oder elektrischen Kontakt miteinander stehen können oder nicht, zusammenwirken oder miteinander interagieren. „Verbunden“ wird verwendet, um anzugeben, dass eine Kommunikationsverbindung zwischen zwei oder mehr Elementen hergestellt wird, die miteinander gekoppelt sind.
  • In der folgenden Beschreibung bieten die 1-13 einen Überblick über ein beispielhaftes Datenverarbeitungssystem und Grafikprozessorlogik, welche die verschiedenen Ausführungsformen beinhaltet oder sich auf diese bezieht. Die 14-19 bieten einen Überblick über das Maschinenlernen und die Anwendbarkeit von Grafik- und Parallelprozessoren auf das Maschinenlernen. Die 20-24 liefern spezifische Einzelheiten zu verschiedenen Ausführungsformen. Einige Aspekte der nachfolgenden Ausführungsformen werden unter Bezugnahme auf einen Grafikprozessor beschrieben, während andere Aspekte unter Bezugnahme auf einen Universalprozessor, wie etwa eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU), beschrieben werden. Ähnliche Techniken bzw. Verfahren sowie Lehren können auf andere Arten von Schaltungen oder Halbleitervorrichtungen angewendet werden, einschließlich, jedoch nicht beschränkt auf einen Prozessor mit zahlreichen integrierten Kernen, einen GPU-Cluster oder eine oder mehrere Instanzen einer feldprogrammierbaren Gatteranordnung (Field-Programmable Gate Array, FPGA). Im Allgemeinen sind die Lehren auf jeden Prozessor oder jede Maschine anwendbar, die Bilder (z. B. Abtastungen, Pixel), Vertex-Daten oder Geometriedaten manipuliert oder verarbeitet oder der/die Parallelverarbeitungsoperationen im Bereich Maschinenlernen und Hochleistungsverarbeitung durchführt.
  • Systemübersicht
  • 1 ist ein Blockschaltbild eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Einzelprozessor-Desktopsystem, einem Mehrprozessor-Arbeitsstationssystem oder einem Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in die integrierte Schaltung eines Ein-Chip-Systems (System-on-a-Chip, SoC) aufgenommen wird und für den Einsatz in mobilen, handgehaltenen oder eingebetteten Vorrichtungen ausgelegt ist, wie etwa in IoT (Internet of Things)-Vorrichtungen mit drahtgebundener oder drahtloser Anbindung an ein lokales oder ein Weitverkehrsnetz.
  • In einer Ausführungsform kann das System 100 eine serverbasierte Gaming-Plattform, eine Spielekonsole, einschließlich einer Spiel- und Medienkonsole, eine mobile Gaming-Konsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole beinhalten, mit dieser gekoppelt sein oder in eine solche integriert sein. In einigen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Rechenvorrichtung oder einer mobilen Internet-verbundenen Vorrichtung wie etwa einem Laptop mit geringer interner Datenspeicherkapazität. Das Verarbeitungssystem 100 kann auch beinhalten, gekoppelt sein mit oder integriert sein in: tragbare Vorrichtungen, wie etwa eine am Körper tragbare SmartWatch-Vorrichtung; intelligente Brillen oder Kleidung, die um AR (Augmented Reality)-Merkmale oder VR (Virtual Reality)-Merkmale erweitert sind, um visuelle, akustische oder taktile Ausgaben bereitzustellen, um eine reale visuelle, akustische oder taktile Erfahrung zu ergänzen oder sonstwie Text, Audiodaten, Grafiken, Video, holografische Bilder oder Videos oder eine taktile Rückmeldung bereitzustellen, eine andere AR (Augmented Reality)-Vorrichtung; oder eine andere VR (Virtual Reality)-Vorrichtung. In einigen Ausführungsformen beinhaltet das Verarbeitungssystem 100 ein Fernsehgerät oder ein Beistellgerät (Set-Top-Box). In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug wie etwa einen Bus, einen Traktor, einen Anhänger, ein Auto, einen Motor oder ein elektrisches Kraftrad, ein Flugzeug oder einen Gleiter (oder eine beliebige Kombination davon) beinhalten, hiermit gekoppelt sein oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die Umgebung zu verarbeiten, die um das Fahrzeug herum erkannt wird.
  • In einigen Ausführungsformen weisen die ein oder mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Anweisungen auf, die, wenn sie ausgeführt werden, Operationen für System- oder Benutzersoftware durchführen. In einigen Ausführungsformen ist wenigstens einer der ein oder mehreren Prozessorkerne 107 dafür ausgelegt, einen bestimmten Anweisungssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Anweisungssatz 109 eine Verarbeitung komplexer Anweisungssätze (Complex Instruction Set Computing, CISC), eine Verarbeitung reduzierter Anweisungssätze (Reduced Instruction Set Computing, RISC) oder eine Verarbeitung über ein sehr langes Anweisungswort (Very Long Instruction Word, VLIW) ermöglichen. Ein oder mehrere Prozessorkerne 107 können einen unterschiedlichen Anweisungssatz 109 verarbeiten, der Anweisungen zum Ermöglichen der Emulation anderer Anweisungssätze beinhalten kann. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen beinhalten, wie etwa einen Digitalsignalprozessor (Digital Signal Processor, DSP).
  • In einigen Ausführungsformen weist der Prozessor 102 Cache-Speicher 104 auf. Je nach Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen (Levels) von internem Cache aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 102 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor auch einen externen Cache (z. B. einen Level-3 (L3)-Cache oder einen (nicht gezeigten) Cache der letzten Ebene (Last Level Cache, LLC), der von Prozessorkernen 107 unter Verwendung bekannter Cache-Kohärenz-Techniken gemeinsam genutzt werden kann. Eine Registerdatei 106 kann zusätzlich im Prozessor 102 enthalten sein und kann unterschiedliche Arten von Registern zum Speichern von unterschiedlichen Datentypen enthalten (z. B. Ganzzahlenregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister). Bei einigen Registern kann es sich um Universalregister handeln, während andere Register spezifisch für den Entwurf des Prozessors 102 sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessoren 102 mit einem oder mehreren Schnittstellenbussen 110 gekoppelt, um Kommunikationssignale wie etwa Adressen, Daten oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten im System 100 zu übertragen. Der Schnittstellenbus 110 kann, in einer Ausführungsform, ein Prozessorbus sein, wie etwa eine Version des DMI (Direct Media Interface)-Busses. Allerdings sind Prozessorbusse nicht auf den DMI-Bus beschränkt und können einen oder mehrere PCI (Peripheral Component Interconnect)-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. In einer Ausführungsform weisen die Prozessoren 102 eine integrierte Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 auf. Die Speichersteuerung 116 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuerungsknoten (Platform Controller Hub, PCH) 130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Bei der Speichervorrichtung 120 kann es sich um eine dynamische Direktzugriff-Speichervorrichtung (Dynamic Random Access Memory, DRAM), eine statische Direktzugriff-Speichervorrichtung (Static Random Access Memory, SRAM), eine Flash-Speichervorrichtung, eine Phasenwechsel-Speichervorrichtung oder irgendeine andere Speichervorrichtung handeln, die über eine geeignete Leistung verfügt, um als Prozessorspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 betrieben werden, um Daten 122 und Anweisungen 121 zu speichern, die verwendet werden, wenn die ein oder mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 116 ist auch mit einem optionalen externen Grafikprozessor 118 gekoppelt, der mit den ein oder mehreren Grafikprozessoren 108 in Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, bei dem es sich um einen Coprozessor handelt, der dafür ausgelegt sein kann, einen Spezialsatz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Beispielsweise ist, in einer Ausführungsform, der Beschleuniger 112 ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um Maschinenlern- oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Raytracing-Beschleuniger, der verwendet werden kann, um zusammen mit dem Grafikprozessor 108 Raytracing-Operationen durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle des oder zusammen mit dem Beschleuniger 112 verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem bzw. den Prozessor(en) 102 verbunden sein. Bei der Anzeigevorrichtung 111 kann es sich um eines oder mehrere von einer internen Anzeigevorrichtung, wie beispielsweise in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort etc.) angeschlossen ist, handeln. In einer Ausführungsform kann es sich bei der Anzeigevorrichtung 111 um eine kopfmontierte Anzeige (Head-mounted Display, HMD) wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in VR (Virtual Reality)-Anwendungen oder AR (Augmented Reality)-Anwendungen handeln.
  • In einigen Ausführungsformen ermöglicht es der Plattformsteuerungsknoten 130 Peripheriegeräten, eine Verbindung zur Speichervorrichtung 120 und dem Prozessor 102 über einen E/A-Hochgeschwindigkeitsbus herzustellen. Die E/A-Peripheriegeräte beinhalten, ohne jedoch hierauf beschränkt zu sein, eine Audiosteuerung 146, eine Netzsteuerung 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z. B. nichtflüchtigen Speicher, flüchtigen Speicher, ein Festplattenlaufwerk, Flash-Speicher, NAND, 3D NAND, 3D XPoint etc.). Die Datenspeichervorrichtung 124 kann eine Verbindung über eine Datenspeicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie etwa einen PCI (Peripheral Component Interconnect)-Bus (z. B. PCI, PCI Express), herstellen. Die Berührungssensoren 125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. Bei dem drahtlosen Sendeempfänger 126 kann es sich um einen WiFi-Sendeempfänger, einen Bluetooth-Sendeempfänger oder einen Mobilnetz-Sendeempfänger wie etwa einen 4G-, 5G- oder LTE (Long Term Evolution)-Sendeempfänger handeln. Die Firmware-Schnittstelle 128 ermöglicht eine Kommunikation mit der Systemfirmware; hierbei kann es sich beispielsweise um eine vereinheitlichte erweiterbare Firmware-Schnittstelle (Unified Extensible Firmware Interface, UEFI) handeln. Die Netzsteuerung 134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen ist eine (nicht gezeigte) Hochleistungs-Netzsteuerung mit dem Schnittstellenbus 110 gekoppelt. Die Audiosteuerung 146 ist, in einer Ausführungsform, eine hochauflösende Mehrkanal-Audiosteuerung. In einer Ausführungsform beinhaltet das System 100 eine optionale E/A-Altsteuerung 140 für das Koppeln von Altgeräten (z.B. PS/2 (Personal System 2)) mit dem System. Der Plattformsteuerungsknoten 130 kann auch eine Verbindung zu einer oder mehreren USB (Universal Serial Bus)-Steuerungen 142 herstellen, um Eingabevorrichtungen wie etwa Kombinationen von Tastatur und Maus 143, eine Kamera 144 oder andere USB-Eingabevorrichtungen zu verbinden.
  • Es versteht sich, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, da auch andere Arten von Datenverarbeitungssystemen, die anders ausgestaltet sind, verwendet werden können. Beispielsweise kann eine Instanz der Speichersteuerung 116 und des Plattformsteuerungsknotens 130 in einen diskreten externen Grafikprozessor integriert sein, wie etwa den externen Grafikprozessor 118. In einer Ausführungsform können der Plattformsteuerungsknoten 130 und/oder die Speichersteuerung 116 außerhalb der ein oder mehreren Prozessoren 102 vorliegen. Beispielsweise kann das System 100 eine externe Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 beinhalten, die als Speichersteuerungsknoten und Peripheriesteuerungsknoten in einem Systemchipsatz ausgestaltet sind, der in einer Kommunikationsverbindung mit dem bzw. den Prozessor(en) 102 steht.
  • Beispielsweise können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie etwa CPUs, Speicher und andere Komponenten angeordnet sind, die für eine höhere thermische Leistung ausgelegt sind. In einigen Beispielen befinden sich Verarbeitungskomponenten wie etwa die Prozessoren auf der Oberseite eines Schlittens, während sich Nahspeicher, wie etwa DIMMs, auf der Unterseite des Schlittens befinden. Resultierend aus dem verbesserten Luftstrom, der durch dieses Design bereitgestellt wird, können die Komponenten mit höheren Frequenzen und Leistungspegeln arbeiten als typische Systeme, was die Leistungsfähigkeit erhöht. Weiterhin sind die Schlitten dafür ausgelegt, blind mit Strom- und Datenkommunikationskabeln in einem Gestellrahmen zusammengefügt zu werden, was ihre Fähigkeit zum schnellen Ausbauen, Hochrüsten, Wiederinstallieren und/oder Austauschen verbessert. In ähnlicher Weise sind die Einzelkomponenten, die auf den Schlitten angeordnet sind, wie etwa Prozessoren, Beschleuniger, Arbeitsspeicher und Datenspeicherlaufwerke, dank des größeren Abstands zueinander derart ausgelegt, dass sie leicht hochgerüstet werden können. In der veranschaulichenden Ausführungsform weisen die Komponenten darüber hinaus Hardware-Bestätigungsmerkmale auf, um deren Authentizität nachzuweisen.
  • Ein Rechenzentrum kann eine einzelne Netzarchitektur („Fabric“) nutzen, die mehrere andere Netzarchitekturen unterstützt, einschließlich Ethernet und Omni-Path. Die Schlitten können mit Switches über optische Fasern gekoppelt sein, die eine höhere Bandbreite und geringere Latenz als typische Kabel mit verdrillten Leitungspaaren (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der Verbindungen und der Netzarchitektur mit hoher Bandbreite und geringer Latenz kann das Rechenzentrum im Gebrauch Ressourcen, wie etwa Arbeitsspeicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Beschleuniger für neuronale Netze und/oder künstliche Intelligenz usw.) und Datenspeicherlaufwerke zu „Pools“ zusammenfassen, die physisch getrennt sind, und sie für Rechenressourcen (z. B. Prozessoren) nach Bedarf bereitstellen, wodurch die Rechenressourcen auf die zusammengefassten Ressourcen zugreifen können, als ob sie lokal vorhanden wären.
  • Eine Stromversorgung oder Stromquelle kann Spannung und/oder Strom für das System 100 oder eine(s) der hier beschriebenen Komponenten oder Systeme bereitstellen. In einem Beispiel beinhaltet die Stromversorgung einen AC-zu-DC-Adapter (Wechselstrom zu Gleichstrom) zum Einstecken in eine Wandsteckdose. Ein solcher Wechselstrom (AC) kann von einer erneuerbaren Energiequelle (z. B. Solarenergie) stammen. In einem Beispiel beinhaltet die Stromquelle eine Gleichstromquelle (DC) wie etwa einen externen AC-zu-DC-Wandler. In einem Beispiel beinhaltet die Stromquelle oder Stromversorgung das drahtlose Laden von Hardware, um über die Nähe zu einem Ladefeld zu laden. In einem Beispiel kann die Stromquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Stromversorgung, eine Solarstromversorgung oder eine Brennstoffzellenquelle beinhalten.
  • 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die von hier beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von 2A-D mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein.
  • 2A ist ein Blockschaltbild einer Ausführungsform eines Prozessors 200 mit einem oder mehreren Prozessorkernen 202A-202N, einer integrierten Speichersteuerung 214 und einem integrierten Grafikprozessor 208. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N aufweisen, dargestellt durch die Kästchen mit gestrichelten Linien. Jeder der Prozessorkerne 202A-202N weist einen oder mehrere interne Cache-Einheiten 204A-204N auf. In einigen Ausführungsformen hat jeder Prozessor auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 206. Die internen Cache-Einheiten 204A-204N und die gemeinsam genutzten Cache-Einheiten 206 repräsentieren eine Cache-Speicherhierarchie im Innern des Prozessors 200. Die Cache-Speicherhierarchie kann wenigstens eine Ebene von Anweisungs- und Datencache in jedem Prozessorkern und eine oder mehrere Ebenen von gemeinsam genutztem Cache mittlerer Ebene aufweisen, wie etwa eine Ebene 2 (Level 2, L2), eine Ebene 3 (Level 3, L3), eine Ebene 4 (Level 4, L4) oder andere Ebenen von Cache, wobei die höchste Cache-Ebene vor dem externen Speicher als LLC (Last Level Cache) eingestuft wird. In einigen Ausführungsformen hält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 216 und einen Systemagentenkern 210 aufweisen. Die ein oder mehreren Bussteuerungseinheiten 216 verwalten einen Satz von Peripheriebussen, wie etwa einen oder mehrere PCI- oder PCI Express-Busse. Der Systemagentenkern 210 stellt eine Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 zum Verwalten des Zugriffs auf verschiedene (nicht gezeigte) externe Speichervorrichtungen auf.
  • In einigen Ausführungsformen bieten ein oder mehrere der Prozessorkerne 202A-202N Unterstützung für simultanes Multithreading. In einer solchen Ausführungsform weist der Systemagentenkern 210 Komponenten für das Koordinieren und Betreiben der Kerne 202A-202N während einer Multithread-Verarbeitung auf. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuerungseinheit (Power Control Unit, PCU) aufweisen, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 aufweist.
  • In einigen Ausführungsformen weist der Prozessor 200 zusätzlich einen Grafikprozessor 208 zum Ausführen von Grafikverarbeitungsoperationen auf. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz von gemeinsam genutzten Cache-Einheiten 206 und dem Systemagentenkern 210 gekoppelt, was die ein oder mehreren integrierten Speichersteuerungen 214 einschließt. In einigen Ausführungsformen weist der Systemagentenkern 210 auch eine Anzeigesteuerung 211 auf, um eine Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu treiben. In einigen Ausführungsformen kann die Anzeigesteuerung 211 auch ein getrenntes Modul sein, das über wenigstens eine Zwischenverbindung mit dem Grafikprozessor gekoppelt ist, oder kann im Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Zwischenverbindungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Allerdings kann eine alternative Zwischenverbindungseinheit verwendet werden, wie etwa eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik bestens bekannt sind. In einigen Ausführungsformen ist der Grafikprozessor 208 über eine E/A-Verbindung 213 mit der Ringzwischenverbindung 212 gekoppelt.
  • Die beispielhafte E/A-Verbindung 213 stellt wenigstens eine von mehreren Varianten von E/A-Zwischenverbindungen dar, einschließlich einer E/A-Zwischenverbindung auf dem Gehäuse, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsmodul 218, wie etwa einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen kann jeder der Prozessorkerne 202A-202N und kann der Grafikprozessor 208 eingebettete Speichermodule 218 als gemeinsam genutzten Last-Level-Cache verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die dieselbe Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Anweisungssatzarchitektur (Instruction Set Architecture, ISA) heterogen, wobei ein oder mehrere Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während wenigstens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N heterogen hinsichtlich der Mikroarchitektur, wobei ein oder mehrere Kerne, die einen relativ höheren Energieverbrauch aufweisen, mit einem oder mehreren Leistungskernen gekoppelt sind, die einen geringeren Energieverbrauch aufweisen. In einer Ausführungsform sind die Prozessorkerne 202A-202N heterogen hinsichtlich der Rechenfähigkeit. Zusätzlich kann der Prozessor 200 auf einem oder mehreren Chips oder als integrierte SoC-Schaltung mit den dargestellten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 2B ist ein Blockschaltbild von Hardwarelogik eines Grafikprozessorkerns 219 gemäß einigen hier beschriebenen Ausführungsformen. Elemente von 2B mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein. Bei dem Grafikprozessorkern 219, der manchmal als Kern-Slice bezeichnet wird, kann es sich um einen oder mehrere Grafikkerne in einem modularen Grafikprozessor handeln. Der Grafikprozessorkern 219 ist beispielhaft für ein Grafikkern-Slice, und ein Grafikprozessor wie hier beschrieben kann mehrere Grafikkern-Slices aufweisen, basierend auf Zielleistung und Leistungshüllen. Jeder Grafikprozessorkern 219 kann einen Festfunktionsblock 230 aufweisen, der mit mehreren Unterkernen 221A-221F, auch als Sub-Slices bezeichnet, gekoppelt ist, die modulare Blöcke von Universal- und Festfunktionslogik aufweisen.
  • In einigen Ausführungsformen beinhaltet der Festfunktionsblock 230 eine Geometrie/Festfunktions-Pipeline 231, die von allen Teilkernen in dem Grafikprozessor 219 gemeinsam genutzt werden kann, beispielsweise in Grafikprozessor-Implementierungen mit geringerer Leistung und/oder geringerem Stromverbrauch. In verschiedenen Ausführungsformen beinhaltet die Geometrie/Festfunktions-Pipeline 231 eine 3D-Festfunktions-Pipeline (z. B. eine 3D- Pipeline 312 wie in 3 und 4, wie nachstehend beschrieben), eine Video-Frontend-Einheit, einen Thread-Spawner und einen Thread-Dispatcher und einen URB-Manager, der vereinheitlichte Rückgabepuffer verwaltet (z. B. den vereinheitlichen Rückgabepuffer 418 in 4, wie nachstehend beschrieben).
  • In einer Ausführungsform beinhaltet der Festfunktionsblock 230 auch eine Grafik-SoC-Schnittstelle 232, eine Grafik-Mikrosteuerung 233 und eine Medien-Pipeline 234. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen in einer integrierten Schaltung eines Ein-Chip-Systems bereit. Die Grafik-Mikrosteuerung 233 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 219 zu verwalten, einschließlich Thread-Versand, Zeitplanung und Präemption (Vorziehen). Die Medien-Pipeline 234 (z. B. die Medien-Pipeline 316 von 3 und 4) beinhaltet Logik, um eine Decodierung, Codierung, Vorverarbeitung und/oder Nachverarbeitung von Multimediadaten, einschließlich Bild- und Videodaten, zu ermöglichen. Die Medien-Pipeline 234 implementiert Medienoperationen über Anforderungen an die Rechen- oder Abtastlogik in den Teilkernen 221-221F.
  • In einer Ausführungsform ermöglicht es die SoC-Schnittstelle 232 dem Grafikprozessorkern 219, mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten in einem SoC, einschließlich Speicherhierarchie-Elementen wie etwa einem gemeinsam genutzten Last-Level-Cache-Speicher, dem System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM, zu kommunizieren. Die SoC-Schnittstelle 232 kann auch eine Kommunikation mit Festfunktionsvorrichtungen im SoC, wie etwa Kamera-Bildgebungspipelines, ermöglichen und ermöglicht die Verwendung globaler Speicheratome und/oder implementiert globale Speicheratome, die von dem Grafikprozessorkern 219 und CPUs im SoC gemeinsam genutzt werden können. Die SoC-Schnittstelle 232 kann auch Energieverwaltungssteuerungen für den Grafikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikprozessorkerns 219 und anderen Taktdomänen im SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 den Empfang von Befehlspuffern von einem Befehls-Streamer und einem globalen Thread-Dispatcher, die dafür ausgelegt sind, Befehle und Anweisungen für jeden der ein oder mehreren Grafikkerne in einem Grafikprozessor bereitzustellen. Die Befehle und Anweisungen können an die Medien-Pipeline 234 versendet werden, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie- und Festfunktions-Pipeline (z. B. die Geometrie- und Festfunktions-Pipeline 231, die Geometrie- und Festfunktions-Pipeline 237), wenn Grafikverarbeitungsoperationen durchzuführen sind.
  • Die Grafik-Mikrosteuerung 233 kann dafür ausgelegt sein, verschiedene Zeitplanungs- und Verwaltungsaufgaben für den Grafikprozessorkern 219 durchzuführen. In einer Ausführungsform kann die Grafik-Mikrosteuerung 233 eine Grafik- und/oder Rechenarbeitslast-Zeitplanung an den verschiedenen parallelen Grafik-Engines in Ausführungseinheit (EU)-Anordnungen 222A-222F, 224A-224F in den Unterkernen 221A-221F durchführen. In diesem Zeitplanungsmodell kann Host-Software, die auf einem CPU-Kern eines den Grafikprozessorkern 219 aufweisenden SoC ausgeführt wird, Arbeitslasten von einer von mehreren Grafikprozessor-Doorbells übergeben, was eine Zeitplanungsoperation an der entsprechenden Grafik-Engine aufruft. Zeitplanungsoperationen beinhalten das Bestimmen, welche Arbeitslast als Nächstes ausgeführt werden soll, das Übergeben einer Arbeitslast an einen Befehls-Streamer, das Vorziehen vorhandener Arbeitslasten, die auf einer Engine ausgeführt werden, das Überwachen einer Arbeitslast und das Benachrichtigen von Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann die Grafik-Mikrosteuerung 233 auch Niedrigenergie- oder Ruhezustände für den Grafikprozessorkern 219 ermöglichen, indem es dem Grafikprozessorkern 219 ermöglicht wird, Register in dem Grafikprozessorkern 219 über Niedrigenergie-Zustandswechsel hinweg unabhängig von dem Betriebssystem und/oder der Grafiktreiber-Software auf dem System zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 219 kann mehr oder weniger als die dargestellten Teilkerne 221A-221F, bis zu N modulare Teilkerne, aufweisen. Für jeden Satz von N Teilkernen kann der Grafikprozessorkern 219 auch gemeinsam genutzte Funktionslogik 235, gemeinsam genutzten Speicher und/oder Cache-Speicher 236, eine Geometrie/Festfunktions-Pipeline 237, sowie zusätzliche Festfunktionslogik 238 aufweisen, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam genutzte Funktionslogik 235 kann mit der gemeinsam genutzten Funktionslogik 420 von 4 verknüpfte Logikeinheiten beinhalten (z. B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik), die von allen N Teilkernen in dem Grafikprozessorkern 219 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher 236 kann ein Last-Level-Cache für den Satz von N Teilkernen 221A-221F in dem Grafikprozessorkern 219 sein und kann auch als gemeinsam genutzter Speicher dienen, der für mehrere Teilkerne zugänglich ist. Die Geometrie/Festfunktions-Pipeline 237 kann anstelle der Geometrie/Festfunktions-Pipeline 231 in dem Festfunktionsblock 230 enthalten sein und kann dieselbe oder ähnliche Logikeinheiten aufweisen.
  • In einer Ausführungsform weist der Grafikprozessorkern 219 zusätzliche Funktionslogik 238 auf, die verschiedene Festfunktions-Beschleunigungslogiken zur Verwendung durch den Grafikprozessorkern 219 beinhalten kann. In einer Ausführungsform beinhaltet die zusätzliche Festfunktionslogik 238 eine zusätzliche Geometrie-Pipeline zur Verwendung beim Position-only-Shading. Beim Position-only-Shading gibt es zwei Geometrie-Pipelines, die vollständige Geometrie-Pipeline in der Geometrie/Festfunktions-Pipeline 238, 231, und eine Cull-Pipeline, bei der es sich um eine zusätzliche Geometrie-Pipeline handelt, die in der zusätzlichen Festfunktionslogik 238 enthalten sein kann. In einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Cull-Pipeline können unterschiedliche Instanzen derselben Anwendung ausführen, wobei jede Instanz einen getrennten Kontext hat. Das Position-only-Shading kann lange Cull-Läufe von verworfenen Dreiecken verbergen, wodurch es in einigen Instanzen möglich ist, das Shading früher abzuschließen. Beispielsweise und in einer Ausführungsform kann die Cull-Pipeline-Logik in der zusätzlichen Festfunktionslogik 238 Position-Shader parallel zu der Hauptanwendung ausführen und generiert im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterisierung und ein Rendering der Pixel für den Rahmenpuffer durchzuführen. Die Cull-Pipeline kann die generierten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Rücksicht darauf, ob diese Dreiecke ausgesondert werden. Die vollständige Pipeline (die in dieser Instanz als Replay-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen nutzen, um die ausgesonderten Dreiecke zu überspringen und nur die sichtbaren Dreiecke zu schattieren, die letztendlich an die Rasterisierungsphase weitergegeben werden.
  • In einer Ausführungsform kann die zusätzliche Festfunktionslogik 238 auch Maschinenlern-Beschleunigungslogik aufweisen, wie etwa eine Festfunktions-Matrixmultiplikationslogik, für Implementierungen, die Optimierungen für Maschinenlerntraining oder Inferenzierung beinhalten.
  • In jedem Grafik-Teilkern 221A-221F ist ein Satz von Ausführungsressourcen enthalten, der verwendet werden kann, um Grafik-, Medien- und Rechenoperationen in Reaktion auf Anforderungen von der Grafik-Pipeline, der Medien-Pipeline oder von Shader-Programmen durchzuführen. Die Grafik-Teilkerne 221A-221F beinhalten mehrere EU-Anordnungen 222A-222F, 224A-224F, TD/IC (Thread Dispatch & Inter-Thread Communication)-Logik 223A-223F, einen 3D (z. B. Textur)-Abtaster 225A-225F, einen Medienabtaster 206A-206F, einen Shader-Prozessor 227A-227F und einen gemeinsam genutzten lokalen Speicher (Shared Local Memory, SLM) 228A-228F. Die EU-Anordnungen 222A-222F, 224A-224F weisen jeweils mehrere Ausführungseinheiten auf, bei denen es sich um Universal-Grafikverarbeitungseinheiten handelt, die dazu in der Lage sind, Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation durchzuführen, was Grafik-, Medien- oder Rechen-Shader-Programme einschließt. Die TD/IC-Logik 223A-223F führt lokale Thread-Versende- und Thread-Steuerungsoperationen für die Ausführungseinheiten in einem Teilkern durch und ermöglicht die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Teilkerns ausgeführt werden. Der 3D-Abtaster 225A-225F kann Textur- oder andere 3D-Grafikbezogene Daten in den Speicher einlesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem Texturformat, das mit einer gegebenen Textur verknüpft ist, unterschiedlich lesen. Der Medienabtaster 206A-206F kann ähnliche Leseoperationen basierend auf dem mit den Mediendaten verknüpften Typ und Format durchführen. In einer Ausführungsform kann jeder Grafik-Teilkern 221A-221F alternativ einen vereinheitlichten 3D- und Medienabtaster aufweisen. Threads, die auf den Ausführungseinheiten in jedem der Teilkerne 221A-221F ausgeführt werden, können gemeinsam genutzten lokalen Speicher 228A-228F in jedem Teilkern verwenden, um Threads zu ermöglichen, die in einer Thread-Gruppe unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher ausgeführt werden.
  • 2C veranschaulicht eine Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) 239, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, welche zu Mehrkerngruppen 240A-240N angeordnet sind. Auch wenn die Einzelheiten von nur einer einzigen Mehrkerngruppe 240A bereitgestellt werden, versteht sich, dass die anderen Mehrkerngruppen 240B-240N mit denselben oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 240A einen Satz von Grafikkernen 243, einen Satz von Tensorkernen 244 und einen Satz von Raytracing-Kernen 245 beinhalten. Ein Planer/Dispatcher 241 plant und versendet die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 243, 244, 245. Ein Satz von Registerdateien 242 speichert Operandenwerte, die von den Kernen 243, 244, 245 bei Ausführung der Grafik-Threads verwendet werden. Diese können beispielsweise Ganzzahlenregister zum Speichern von ganzzahligen Werten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkomma-Datenelemente) und Kachelregister zum Speichern von Tensor/Matrixwerten beinhalten. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Level-1 (L1)-Caches und gemeinsam genutzte Speichereinheiten 247 speichern Grafikdaten wie etwa Texturdaten, Vertex-Daten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten etc. lokal in jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können auch verwendet werden, um Texturoperationen durchzuführen, wie etwa das Abbilden und Abtasten von Texturen. Ein Level-2- (L2)-Cache 253, der von allen oder einer Teilmenge der Mehrkerngruppen 240A-240N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 253 von mehreren Mehrkerngruppen 240A-240N gemeinsam genutzt werden. Ein oder mehrere Speichersteuerungen 248 koppeln die GPU 239 mit einem Speicher 249, bei dem es sich um einen Systemspeicher (z. B. DRAM) und/oder einen dedizierten Grafikspeicher (z. B. GDDR6-Speicher) handeln kann.
  • Eingabe/Ausgabe (E/A)-Schaltungen 250 koppeln die GPU 239 mit einer oder mehreren E/A-Vorrichtungen 252 wie etwa Digitalsignalprozessoren (DSPs), Netzsteuerungen oder Benutzereingabevorrichtungen. Eine On-Chip-Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen 252 mit der GPU 239 und dem Speicher 249 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (Input Output Memory Management Units, IOMMUs) 251 der E/-A-Schaltungen 250 koppeln die E/A-Vorrichtungen 252 direkt mit dem Systemspeicher 249. In einer Ausführungsform verwaltet die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen im Systemspeicher 249 abzubilden. In dieser Ausführungsform können die E/A-Vorrichtungen 252, die CPU(s) 246 und die GPU(s) 239 denselben virtuellen Adressraum gemeinsam nutzen.
  • In einer Implementierung unterstützt die IOMMU 251 eine Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen auf physikalische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physikalischen Gast-/Grafikadressen auf physikalische System-/Host-Adressen abzubilden (z. B. innerhalb des Systemspeichers 249). Die Basisadressen von jedem der ersten und zweiten Sätze von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z. B. damit der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt wird). Auch wenn dies in 2C nicht dargestellt ist, kann jeder der Kerne 243, 244, 245 und/oder der Mehrkerngruppen 240A-240N Übersetzungspuffer (Translation Lookaside Buffers, TLBs) aufweisen, um Translationen von Gast virtuell zu Gast physisch, Translationen von Gast physisch zu Host physisch und Translationen von Gast virtuell zu Host physisch zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, die GPUs 239 und die E/A-Vorrichtungen 252 auf einem einzelnen Halbleiterchip und/oder Chip-Paket integriert. Der veranschaulichte Speicher 249 kann auf demselben Chip integriert sein oder kann über eine Chip-externe Schnittstelle mit den Speichersteuerungen 248 gekoppelt sein. In einer Ausführungsform umfasst der Speicher 249 GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physikalische Speicher auf Systemebene teilt, auch wenn die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform beinhalten die Tensorkerne 244 mehrere Ausführungseinheiten, die spezifisch zum Durchführen von Matrixoperationen ausgelegt sind, bei denen es sich um die zum Durchführen von Operationen zum tiefen Lernen verwendeten grundlegenden Rechenoperationen handelt. Beispielsweise können simultane Matrixmultiplikationsoperationen zum Trainieren und Inferenzieren von neuronalen Netzen verwendet werden. Die Tensorkerne 244 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkommazahlen mit einfacher Genauigkeit (z. B. 32 Bits), Gleitkommazahlen mit halber Genauigkeit (z. B. 16 Bits), Ganzzahlwörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). In einer Ausführungsform extrahiert eine neuronale Netzimplementierung Merkmale jeder gerenderten Szene, wobei potenziell Einzelheiten aus mehreren Rahmen kombiniert werden, um ein qualitativ hochwertiges endgültiges Bild aufzubauen.
  • In Implementierungen von tiefem Lernen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 244 geplant werden. Insbesondere das Trainieren neuronaler Netze erfordert eine signifikante Anzahl von Matrix-Skalarprodukt-Operationen. Um eine Innenproduktformulierung einer NxNxN-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Skalarprodukt-Verarbeitungselemente beinhalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen, und mindestens eine Spalte einer zweiten Matrix wird für N Zyklen in jedem Zyklus geladen. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der bestimmten Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, was 16-Bit-Wörter, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4) einschließt. Unterschiedliche Genauigkeitsmodi können für die Tensorkerne 244 spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für unterschiedliche Arbeitslasten verwendet wird (z. B. zum Inferenzieren von Arbeitslasten, die eine Quantisierung in Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Raytracing-Kerne 245 Raytracing-Operationen sowohl für Echtzeit-Raytracing- als auch Nicht-Echtzeit-Raytracing-Implementierungen. Insbesondere beinhalten die Raytracing-Kerne 245 Strahldurchquerungs-/Kreuzungsschaltungen zum Durchführen einer Strahldurchquerung unter Verwendung von Hüllvolumenhierarchien (Bounding Volume Hierarchies, BVH) und zum Identifizieren von Kreuzungen zwischen Strahlen und Grundelementen, die in den BVH-Volumina eingeschlossen sind. Die Raytracing-Kerne 245 können auch Schaltungen zum Durchführen von Tiefentests und Culling (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) beinhalten. In einer Implementierung führen die Raytracing-Kerne 245 Durchquerungs- und Kreuzungsoperationen zusammen mit den hierin beschriebenen Bild-Rauschunterdrückungstechniken aus, von denen mindestens ein Abschnitt auf den Tensorkernen 244 ausgeführt werden kann. Beispielsweise implementieren, in einer Ausführungsform, die Tensorkerne 244 ein neuronales Netz zum tiefen Lernen, um eine Rauschunterdrückung für die von den Raytracing-Kernen 245 generierten Frames durchzuführen. Die CPU(s) 246, der/die Grafikkern(e) 243 und/oder die Raytracing-Kerne 245 können jedoch auch alle oder einen Teil der Rauschunterdrückungsalgorithmen und/oder der Algorithmen zum tiefen Lernen implementieren.
  • Zusätzlich kann, wie oben beschrieben, ein verteilter Ansatz zur Rauschunterdrückung eingesetzt werden, bei dem sich die GPU 239 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung mit anderen Rechenvorrichtungen gekoppelt ist. In dieser Ausführungsform teilen sich die verbundenen Rechenvorrichtungen Lern-/Trainingsdaten eines neuronalen Netzes, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Rauschunterdrückung für unterschiedliche Arten von Bildrahmen und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Raytracing-Kerne 245 alle BVH-Durchquerungs- und Strahl-Grundelement-Kreuzungen, wodurch verhindert wird, dass die Grafikkerne 3130 mit Tausenden von Anweisungen pro Strahl überladen werden. In einer Ausführungsform beinhaltet jeder Raytracing-Kern 245 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Bounding-Box-Tests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen der Strahldreieck-Kreuzungstests (z. B. kreuzende Strahlen, die durchquert worden sind). Somit kann, in einer Ausführungsform, die Mehrkerngruppe 240A einfach eine Strahlsondierung starten, und die Raytracing-Kerne 245 führen unabhängig eine Strahldurchquerung und -kreuzung durch und geben Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrfacher Treffer usw.) an den Thread-Kontext zurück. Die anderen Kerne 243, 244 werden zur Durchführung anderer Grafik- oder Rechenarbeit freigegeben, während die Raytracing-Kerne 245 die Durchquerungs- und Kreuzungsoperationen durchführen.
  • In einer Ausführungsform beinhaltet jeder Raytracing-Kern 245 eine Durchquerungseinheit zum Durchführen von BVH-Test-Operationen und eine Kreuzungseinheit, die Strahl-Grundelement-Kreuzungstests durchführt. Die Kreuzungseinheit generiert eine Antwort „Treffer“, „Kein Treffer“ oder „Mehrfacher Treffer“, die sie für den geeigneten Thread bereitstellt. Während der Durchquerungs- und Kreuzungsoperationen werden die Ausführungsressourcen der anderen Kerne (z. B. der Grafikkerne 243 und der Tensorkerne 244) freigegeben, um andere Formen von Grafikarbeit auszuführen.
  • In einer bestimmten nachstehend beschriebenen Ausführungsform wird ein hybrider Ansatz für Rasterung/Raytracing verwendet, bei dem die Arbeit zwischen den Grafikkernen 243 und den Raytracing-Kernen 245 verteilt wird.
  • In einer Ausführungsform beinhalten die Raytracing-Kerne 245 (und/oder andere Kerne 243, 244) eine Hardwareunterstützung für einen Raytracing-Anweisungssatz, wie etwa Microsoft DirectX-RayTracing (DXR), der einen DispatchRays-Befehl beinhaltet sowie Strahlerzeugung, nächstgelegener Treffer, beliebiger Treffer und Shader verfehlt, welche die Zuordnung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Raytracing-Plattform, die durch die Raytracing-Kerne 245, Grafikkerne 243 und Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Raytracing-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlgenerierung, zu nächstgelegenem Treffer, beliebigem Treffer, zu einer Strahl-Grundelement-Kreuzung, zu pro-Grundelement und hierarchischen Bounding-Box-Aufbau, Verfehlen, Besuchen und Ausnahmen beinhaltet. Insbesondere beinhaltet eine Ausführungsform Raytracing-Anweisungen zum Durchführen der folgenden Funktionen:
  • Strahlgenerierung - Strahlgenerierungsanweisungen können für jedes Pixel, jede Abtastung oder jede andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
  • Nächstgelegener Treffer - Eine Nächstgelegener-Treffer-Anweisung kann ausgeführt werden, um den nächstgelegenen Kreuzungspunkt eines Strahls mit Grundelementen in einer Szene zu lokalisieren.
  • Beliebiger Treffer - Eine Beliebiger-Treffer-Anweisung identifiziert mehrere Kreuzungen zwischen einem Strahl und Grundelementen in einer Szene, um potenziell einen neuen nächstgelegenen Kreuzungspunkt zu identifizieren.
  • Kreuzung - Eine Kreuzungsanweisung führt einen Strahl-Grundelement-Kreuzungstest durch und gibt ein Ergebnis aus.
  • Pro-Grundelement-Bounding-Box-Aufbau - Diese Anweisung errichtet eine Bounding-Box rund um ein gegebenes Grundelement oder eine Gruppe von Grundelementen (z. B. beim Aufbauen einer neuen BVH oder einer anderen Beschleunigungsdatenstruktur).
  • Verfehlen - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines spezifizierten Bereichs einer Szene verfehlt.
  • Besuchen - Zeigt die untergeordneten Volumina an, die ein Strahl durchqueren wird.
  • Ausnahmen - Beinhaltet verschiedene Arten von Ausnahmehandlern (z. B. aufgerufen für verschiedene Fehlerbedingungen).
  • 2D ist ein Blockschaltbild einer Universal-Grafikverarbeitungseinheit (General-Purpose Graphics Processing Unit, GPGPU) 270, die als Grafikprozessor und/oder Rechenbeschleuniger gemäß hier beschriebenen Ausführungsformen konfiguriert sein kann. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit Hostprozessoren (z. B einer oder mehreren CPU(s) 246) und Speicher 271, 272 verbunden sein. In einer Ausführungsform handelt es sich bei dem Speicher 271 um Systemspeicher, der mit den ein oder mehreren CPU(s) 246 geteilt werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der speziell für die GPGPU 270 vorgesehen ist. In einer Ausführungsform können Komponenten in der GPGPU 270 und dem Vorrichtungsspeicher 272 in Speicheradressen abgebildet sein, die für die ein oder mehreren CPUs 246 zugänglich sind. Der Zugriff auf den Speicher 271 und 272 kann über eine Speichersteuerung 268 ermöglicht werden. In einer Ausführungsform beinhaltet die Speichersteuerung 268 eine interne Direktzugriffsspeicher (Direct Memory Access, DMA)-Steuerung 269 oder kann Logik aufweisen, um Operationen durchzuführen, die ansonsten von einer DMA-Steuerung durchgeführt würden.
  • Die GPGPU 270 beinhaltet mehrere Cache-Speicher, was einen L2-Cache 253, einen L1-Cache 254, einen Anweisungscache 255 und gemeinsam genutzten Speicher 256 einschließt, von dem wenigstens ein Teil auch als Cache-Speicher partitioniert sein kann. Die GPGPU 270 kann auch mehrere Recheneinheiten 260A-260N aufweisen. Jede Recheneinheit 260A-260N beinhaltet einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogik-Einheiten 263 und Skalarlogik-Einheiten 264. Die Recheneinheiten 260A-260N können auch lokalen gemeinsam genutzten Speicher 265 und einen Programmzähler 266 beinhalten. Die Recheneinheiten 260A-260N können mit einem konstanten Cache 267 gekoppelt sein, der verwendet werden kann, um konstante Daten zu speichern, bei denen es sich um Daten handelt, die sich während der Kernel-Ausführung oder der Ausführung eines Shader-Programms, das auf der GPGPU 270 ausgeführt wird, nicht ändern. In einer Ausführungsform ist der konstante Cache 267 ein skalarer Datencache, und zwischengespeicherte Daten können direkt abgerufen und in die skalaren Register 262 geladen werden.
  • Während des Betriebs können die ein oder mehreren CPUs 246 Befehle in Register oder Speicher in der GPGPU 270 schreiben, die/der in einen zugänglichen adressierbaren Adressraum abgebildet sind/ist. Die Befehlsprozessoren 257 können die Befehle aus Registern oder dem Speicher auslesen und bestimmen, wie diese Befehle in der GPGPU 270 verarbeitet werden. Ein Thread-Dispatcher 258 kann dann verwendet werden, um Threads an die Recheneinheiten 260A-260N zu versenden, damit diese Befehle ausgeführt werden. Jede Recheneinheit 260A-260N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Zusätzlich kann jede Recheneinheit 260A-260N unabhängig für bedingte Berechnungen konfiguriert sein und kann die Ausgaben von Berechnungen bedingt an den Speicher ausgeben. Die Befehlsprozessoren 257 können die ein oder mehreren CPUs 246 unterbrechen, wenn die übermittelten Befehle vollständig sind.
  • 3A-3C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleuniger-Architekturen, die von hier beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von 3A-3C mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein.
  • 3A ist ein Blockschaltbild eines Grafikprozessors 300, bei dem es sich um eine diskrete Grafikverarbeitungseinheit handeln kann, oder um einen Grafikprozessor, der mit mehreren Verarbeitungskernen integriert ist, oder andere Halbleitervorrichtungen wie etwa Speichervorrichtungen oder Netzschnittstellen, ohne jedoch hierauf beschränkt zu sein. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in den Prozessorspeicher eingestellt sind. In einigen Ausführungsformen weist der Grafikprozessor 300 eine Speicherschnittstelle 314 für Speicherzugriffe auf. Die Speicherschnittstelle 314 kann eine Schnittstelle zum lokalen Speicher, zu einem oder mehreren internen Caches, zu einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher sein.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 auch eine Anzeigesteuerung 302, um Anzeigeausgabedaten an eine Anzeigevorrichtung 318 zu treiben. Die Anzeigesteuerung 302 weist Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen auf. Bei der Anzeigevorrichtung 318 kann es sich um eine interne oder externe Anzeigevorrichtung handeln. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine kopfmontierte Anzeigevorrichtung, wie etwa eine VR (Virtual Reality)-Anzeigevorrichtung oder eine AR (Augmented Reality)-Anzeigevorrichtung. In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Video-Codec-Engine 306 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten, einschließlich, jedoch nicht beschränkt auf MPEG (Moving Picture Experts Group)-Formate wie etwa MPEG-2, AVC (Advanced Video Coding)-Formate wie etwa H.264/MPEG-4 AVC, H.265/HEVC, AOMedia (Alliance for Open Media) VP8, VP9 sowie SMPTE (Society of Motion Picture & Television Engineers) 0,265M/VC-8 und JPEG (Joint Photographic Experts Group)-Formate wie etwa JPEG und MJPEG (Motion JPEG)-Formate.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Blockbildtransfer (Block Image Transfer, BLIT)-Engine 304, um zweidimensionale (2D) Rasterisierer-Operationen durchzuführen, was beispielsweise Bitgrenzenblock-Transfers einschließt. Allerdings werden, in einer Ausführungsform, 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten einer Grafikverarbeitungs-Engine (Graphics Processing Engine, GPE) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen beinhaltet die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen, wie etwa das Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundelementformen (z. B. Rechteck, Dreieck etc.) wirken. Die 3D-Pipeline 312 beinhaltet programmierbare Elemente und Elemente mit fester Funktion, die verschiedene Aufgaben in dem Element durchführen und/oder Ausführungsthreads an ein 3D/Medien-Subsystem 315 spawnen. Während die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen durchzuführen, beinhaltet eine Ausführungsform einer GPE 310 auch eine Medien-Pipeline 316, die speziell verwendet wird, um Medienoperationen wie etwa Videonachbearbeitung und Bildverbesserung durchzuführen.
  • In einigen Ausführungsformen beinhaltet die Medien-Pipeline 316 Festfunktions- oder programmierbare Logikeinheiten zum Durchführen einer oder mehrere spezialisierter Medienoperationen wie etwa Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung anstelle der oder im Auftrag der Video-Codec-Engine 306. In einigen Ausführungsformen beinhaltet die Medien-Pipeline 316 zusätzlich eine Thread-Spawning-Einheit, um Threads zur Ausführung auf einem 3D/Medien-Subsystem 315 zu spawnen. Die gespawnten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die in dem 3D/Medien-Subsystem 315 enthalten sind.
  • In einigen Ausführungsformen beinhaltet das 3D/Medien-Subsystem 315 eine Logik zum Ausführen von Threads, die durch die 3D-Pipeline 312 und die Medien-Pipeline 316 gespawnt werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D/Medien-Subsystem 315, das eine Thread-Dispatch-Logik zum Vermitteln und Versenden der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen beinhaltet. Die Ausführungsressourcen beinhalten eine Anordnung von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen beinhaltet das 3D/Medien-Subsystem 315 einen oder mehrere interne Caches für Thread-Anweisungen und -Daten. In einigen Ausführungsformen beinhaltet das Subsystem auch gemeinsam genutzten Speicher, einschließlich Register und adressierbaren Speicher zum gemeinsamen Nutzen von Daten zwischen Threads und zum Speichern von Ausgabedaten.
  • 3B veranschaulicht einen Grafikprozessor 320 mit einer gekachelten Architektur gemäß hier beschriebenen Ausführungsformen. In einer Ausführungsform beinhaltet der Grafikprozessor 320 einen Grafikverarbeitungs-Engine-Cluster 322, der mehrere Instanzen der Grafikverarbeitungs-Engine 310 von 3A in einer Grafik-Engine-Kachel 310A-310D aufweist. Jede Grafik-Engine-Kachel 310A-310D kann über einen Satz von Kachelzwischenverbindungen 323A-323F verbunden sein. Jede Grafik-Engine-Kachel 310A-310D kann außerdem über Speicherzwischenverbindungen 325A-325D mit einem Speichermodul oder einer Speichervorrichtung 326A-326D verbunden sein. Die Speichervorrichtungen 326A-326D können beliebige Grafikspeichertechnologien verwenden. Beispielsweise kann es sich bei den Speichervorrichtungen 326A-326D um Grafikspeicher mit doppelter Datenrate (Graphics Double Data Rate, GDDR) handeln. Die Speichervorrichtungen 326A-326D sind, in einer Ausführungsform, Speichermodule mit großer Bandbreite (High Bandwidth Memory, HBM), die auf demselben Halbleiterplättchen (On-Die) mit ihrer jeweiligen Grafik-Engine-Kachel 310A-310D vorliegen können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die oben auf ihrer jeweiligen Grafik-Engine-Kachel 310A-310D gestapelt sind. In einer Ausführungsform befinden sich jede Grafik-Engine-Kachel 310A-310D und der zugehörige Speicher 326A-326D auf getrennten Chiplets, die an ein Basis-Halbleiterplättchen oder ein Basissubstrat gebondet sind, wie ausführlicher in 11B-11D beschrieben.
  • Der Grafikverarbeitungs-Engine-Cluster 322 kann mit einer On-Chip- oder On-Package Fabric-Zwischenverbindung 324 verbunden sein. Die Fabric-Zwischenverbindung 324 kann eine Kommunikation zwischen Grafik-Engine-Kacheln 310A-310D und Komponenten wie etwa dem Video-Codec 306 und einer oder mehreren Kopier-Engines 304 ermöglichen. Die Kopier-Engines 304 können verwendet werden, um Daten aus, in und zwischen den Speichervorrichtungen 326A-326D zu verschieben und zwischen Speicher, der außerhalb des Grafikprozessors 320 vorliegt (z. B. Systemspeicher). Die Fabric-Zwischenverbindung 324 kann auch verwendet werden, um die Grafik-Engine-Kacheln 310A-310D miteinander zu verbinden. Der Grafikprozessor 320 kann optional eine Anzeigesteuerung 302 beinhalten, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger ausgelegt sein. In der Beschleunigerkonfiguration können die Anzeigesteuerung 302 und die Anzeigevorrichtung 318 entfallen.
  • Der Grafikprozessor 320 kann über eine Host-Schnittstelle 328 mit einem Host-System verbunden sein. Die Host-Schnittstelle 328 kann eine Kommunikation zwischen dem Grafikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Host-Systemschnittstelle sein.
  • 3C veranschaulicht einen Rechenbeschleuniger 330 gemäß hier beschriebenen Ausführungsformen. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten zu dem Grafikprozessor 320 von 3B aufweisen und ist für eine Rechenbeschleunigung optimiert. Ein Rechen-Engine-Cluster 332 kann einen Satz von Rechen-Engine-Kacheln 340A-340D beinhalten, die Ausführungslogik beinhalten können, welche für parallele oder vektorbasierte Universal-Rechenoperationen optimiert ist. In einigen Ausführungsformen beinhalten die Rechen-Engine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, auch wenn in einer Ausführungsform eine oder mehrere der Rechen-Engine-Kacheln 340A-340D Logik beinhalten können, um eine Medienbeschleunigung durchzuführen. Die Rechen-Engine-Kacheln 340A-340D können über Speicherzwischenverbindungen 325A-325D mit dem Speicher 326A-326D verbunden sein. Der Speicher 326A-326D und Speicherzwischenverbindungen 325A-325D können eine ähnliche Technologie aufweisen wie im Grafikprozessor 320 oder auch unterschiedlich sein. Die Rechen-Engine-Kacheln 340A-340D können auch über einen Satz von Kachelzwischenverbindungen 323A-323F miteinander verbunden sein und können mit einer und/oder durch eine Fabric-Zwischenverbindung 324 verbunden und/oder miteinander verbunden sein. In einer Ausführungsform beinhaltet der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als ein vorrichtungsweiter Cache ausgelegt sein kann. Der Rechenbeschleuniger 330 kann auch über eine Host-Schnittstelle 328 mit einem Host-Prozessor und Speicher verbunden sein, in einer ähnlichen Weise wie der Grafikprozessor 320 von 3B.
  • Grafikverarbeitungs- Engine
  • 4 ist ein Blockschaltbild einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (Graphics Processing Engine, GPE) 410 eine Version der GPE 310, die in 3A gezeigt wird, und kann auch eine Grafik-Engine-Kachel 310A-310D von 3B repräsentieren. Elemente von 4 mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein. Beispielsweise sind die 3D-Pipeline 312 und die Medien-Pipeline 316 von 3 dargestellt. Die Medien-Pipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und unter Umständen nicht explizit in der GPE 410 enthalten. Beispielsweise und in wenigstens einer Ausführungsform ist ein getrennter Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403 gekoppelt, der einen Befehlsstrom für die 3D-Pipeline 312 und/oder Medien-Pipelines 316 bereitstellt, oder weist diesen auf. In einigen Ausführungsformen ist ein Befehls-Streamer 403 mit Speicher gekoppelt, bei dem es sich um Systemspeicher oder eines oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher handeln kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medien-Pipeline 316. Bei den Befehlen handelt es sich um Direktiven, die aus einem Ringpuffer abgerufen werden, welcher Befehle für die 3D-Pipeline 312 und die Medien-Pipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer beinhalten, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf Daten beinhalten, die im Speicher gespeichert sind, beispielsweise, jedoch nicht beschränkt auf Vertex- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316. Die 3D-Pipeline 312 und die Medien-Pipeline 316 verarbeiten die Befehle und Daten, indem sie Operationen über Logik in den jeweiligen Pipelines durchführen oder einen oder mehrere Ausführungsthreads an eine Grafikkernanordnung 414 versenden. In einer Ausführungsform beinhaltet die Grafikkernanordnung 414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 415A, Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, der Universal- und grafikspezifische Ausführungslogik zum Durchführen von Grafik- und Rechenoperationen beinhaltet, ebenso wie Beschleunigungslogik mit fester Funktion für Texturverarbeitung und/oder maschinelles Lernen und künstliche Intelligenz.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 Festfunktions- und programmierbare Logik beinhalten, um ein oder mehrere Shader-Programme, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme, zu verarbeiten, indem die Anweisungen verarbeitet werden und Ausführungsthreads an die Grafikkernanordnung 414 versendet werden. Die Grafikkernanordnung 414 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) in dem bzw. den Grafikkern(en) 415A-414B der Grafikkernanordnung 414 beinhaltet eine Unterstützung verschiedener 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungsthreads ausführen, die mit mehreren Shadern verknüpft sind.
  • In einigen Ausführungsformen beinhaltet die Grafikkernanordnung 414 Ausführungslogik zum Durchführen von Medienfunktionen, wie etwa Video- und/oder Bildverarbeitung. In einer Ausführungsform beinhalten die Ausführungseinheiten Universallogik, die programmierbar ist, um parallele Universal-Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen durchzuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder in Verbindung mit Universallogik in dem bzw. den Prozessorkern(en) 107 aus 1 oder Kern 202A-202N wie in 2A durchführen.
  • Ausgabedaten, die von Threads generiert werden, welche auf der Grafikkernanordnung 414 ausgeführt werden, können Daten an den Speicher in einem vereinheitlichten Rückgabepuffer (Unified Return Buffer, URB) 418 ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen unterschiedlichen Threads zu senden, die auf der Grafikkernanordnung 414 ausgeführt werden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Threads auf der Grafikkernanordnung und Festfunktionslogik in der gemeinsam genutzten Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist die Grafikkernanordnung 414 skalierbar, so dass die Anordnung eine variable Anzahl von Grafikkernen beinhaltet, von denen jeder eine variable Anzahl von Ausführungseinheiten aufweist, basierend auf der Zielleistung und dem Leistungsniveau der GPE 410. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass die Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Die Grafikkernanordnung 414 ist mit der gemeinsam genutzten Funktionslogik 420 gekoppelt, die mehrere Ressourcen beinhaltet, welche zwischen den Grafikkernen in der Grafikkernanordnung geteilt werden. Bei den gemeinsam genutzten Funktionen in der gemeinsam genutzten Funktionslogik 420 handelt es sich um Hardwarelogik-Einheiten, die eine spezialisierte Zusatzfunktionalität für die Grafikkernanordnung 414 bereitstellen In verschiedenen Ausführungsformen beinhaltet die gemeinsam genutzte Funktionslogik 420, ohne jedoch hierauf beschränkt zu sein, Abtaster- 421, Math- 422 und ITC (Inter-Thread Communication) 423-Logik. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Caches 425 in der gemeinsam genutzten Funktionslogik 420.
  • Eine gemeinsam genutzte Funktion wird wenigstens in einem Fall implementiert, wenn der Bedarf für eine gegebene spezialisierte Funktion nicht für eine Einbeziehung in die Grafikkernanordnung 414 ausreicht. Stattdessen ist eine einzelne Instanziierung dieser spezialisierten Funktion als eigenständige Entität in der gemeinsam genutzten Funktionslogik 420 implementiert und wird von den Ausführungsressourcen in der Grafikkernanordnung 414 gemeinsam genutzt. Der genaue Satz von Funktionen, die durch die Grafikkernanordnung 414 gemeinsam genutzt werden und in der Grafikkernanordnung 414 enthalten sind, variiert zwischen den Ausführungsformen. In einigen Ausführungsformen können spezifische gemeinsam genutzte Funktionen in der gemeinsam genutzten Funktionslogik 420, die durch die Grafikkernanordnung 414 umfassend genutzt werden, in der gemeinsam genutzten Funktionslogik 416 in der Grafikkernanordnung 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik 416 in der Grafikkernanordnung 414 einen Teil oder die gesamte Logik in der gemeinsam genutzten Funktionslogik 420 beinhalten. In einer Ausführungsform können alle Logikelemente in der gemeinsam genutzten Funktionslogik 420 in der gemeinsam genutzten Funktionslogik 416 der Grafikkernanordnung 414 dupliziert sein. In einer Ausführungsform ist die gemeinsam genutzte Funktionslogik 420 zugunsten der gemeinsam genutzten Funktionslogik 416 in der Grafikkernanordnung 414 ausgeschlossen.
  • Ausführungseinheiten
  • 5A-5B veranschaulichen eine Thread-Ausführungslogik 500, die eine Anordnung von Verarbeitungselementen beinhaltet, welche in einem Grafikprozessorkern gemäß hier beschriebenen Ausführungsformen eingesetzt wird. Die Elemente von 5A-5B mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein. 5A-5B zeigen eine Übersicht über eine Thread-Ausführungslogik 500, die repräsentativ für eine Variante der Hardwarelogik sein kann, welche mit jedem Teilkern 221A-221F von 2B dargestellt wird. 5A ist repräsentativ für eine Ausführungseinheit in einem Universal-Grafikprozessor, während 5B für eine Ausführungseinheit repräsentativ ist, die in einem Rechenbeschleuniger verwendet werden kann.
  • Wie in 5A veranschaulicht, beinhaltet die Thread-Ausführungslogik 500 in einigen Ausführungsformen einen Shader-Prozessor 502, einen Thread-Dispatcher 504, einen Anweisungscache 506, eine skalierbare Ausführungseinheit-Anordnung mit mehreren Ausführungseinheiten 508A-508N, einen Abtaster 510, einen gemeinsam genutzten lokalen Speicher 511, einen Datencache 512 und einen Datenport 514. In einer Ausführungsform kann die skalierbare Ausführungseinheit-Anordnung dynamisch skalieren, indem ein oder mehrere Ausführungseinheiten (z. B. irgendeine der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N-1 und 508N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In einer Ausführungsform sind die enthaltenen Komponenten über eine Zwischenverbindungsstruktur miteinander verbunden, die mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen beinhaltet die Thread-Ausführungslogik 500 eine oder mehrere Verbindungen zu einem Speicher, wie etwa Systemspeicher oder Cache-Speicher, über eines oder mehrere von einem Anweisungscache 506, einem Datenport 514, einem Abtaster 510 und den Ausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Universal-Recheneinheit, die dazu in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen und gleichzeitig mehrere Datenelemente für jeden Thread parallel zu verarbeiten. In verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten 508A-508N skalierbar, so dass sie eine beliebige Anzahl von einzelnen Ausführungseinheiten beinhaltet.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N primär verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 502 kann die verschiedenen Shader-Programme verarbeiten und Ausführungsthreads versenden, die mit den Shader-Programmen über einen Thread-Dispatcher 504 verknüpft sind. In einer Ausführungsform beinhaltet der Thread-Dispatcher Logik zum Vermitteln von Thread-Initiierungsanforderungen von den Grafik- und Medien-Pipelines und zum Instanziieren der angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N. Beispielsweise kann eine Geometrie-Pipeline Vertex-, Tessellation- oder Geometrie-Shader zum Verarbeiten an die Thread-Ausführungslogik versenden. In einigen Ausführungsformen kann der Thread-Dispatcher 504 auch Laufzeit-Thread-Spawning-Anforderungen von den ausführenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der eine native Unterstützung für viele standardmäßige 3D-Grafik-Shader-Anweisungen beinhaltet, sodass Shader-Programme von Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit minimaler Translation ausgeführt werden. Die Ausführungseinheiten unterstützen eine Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), eine Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und eine Universalverarbeitung (z. B. Rechen- und Medien-Shader). Jede der Ausführungseinheiten 508A-508N ist zur Ausführung von SIMD (Single Instruction Multiple Data, eine Anweisung mehrere Daten) mit mehreren Ausgaben in der Lage, und ein Multithread-Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread in jeder Ausführungseinheit beinhaltet eine dedizierte Registerdatei mit hoher Bandbreite und einen zugehörigen unabhängigen Thread-Zustand. Die Ausführung erfolgt mit mehreren Ausgaben pro Takt an Pipelines, die zu Ganzzahl-Gleitkommaoperationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen in der Lage sind. Während auf Daten vom Speicher oder eine der gemeinsam genutzten Funktionen gewartet wird, bewirkt eine Abhängigkeitslogik in den Ausführungseinheiten 508A-508N, dass ein wartender Thread in den Ruhezustand wechselt, bis die angeforderten Daten zurückgegeben worden sind. Während sich der wartende Thread im Ruhezustand befindet, können sich Hardware-Ressourcen der Verarbeitung anderer Threads widmen. Beispielsweise kann, während einer Verzögerung, die mit einer Vertex-Shader-Operation verknüpft ist, eine Ausführungseinheit Operationen für einen Pixel-Shader, einen Fragment-Shader oder eine andere Art von Shader-Programm durchführen, einschließlich eines anderen Vertex-Shaders. Verschiedene Ausführungsformen können zur Anwendung kommen, um Ausführungseinheiten durch Verwendung von SIMT (Single Instruction Multiple Thread) als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD zu verwenden. Ein Verweis auf einen SIMD-Kern oder -Betrieb ist auch auf SIMT anwendbar oder auf SIMD in Kombination mit SIMT.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N arbeitet an Anordnungen von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für die Anweisung. Ein Ausführungskanal ist eine logische Einheit der Ausführung für Datenelementzugriff, Maskierung und Flusssteuerung in Anweisungen. Die Anzahl von Kanälen kann unabhängig von der Anzahl von physischen arithmetischen Logikeinheiten (Arithmetic Logic Units, ALUs) oder Gleitkommaeinheiten (Floating Point Units, FPUs) für einen bestimmten Grafikprozessor sein. In einigen Ausführungseinheiten unterstützen Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheit-Anweisungssatz beinhaltet SIMD-Anweisungen. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert sein, und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wird beispielsweise an einem 256 Bit breiten Vektor gearbeitet, werden die 256 Bits des Vektors in einem Register gespeichert, und die Ausführungseinheit arbeitet an dem Vektor als vier getrennte 54-Bit-gepackte Datenelemente (Datenelemente der Größe Vierfachwort (Quad-Word, QW)), acht getrennte 32-Bit-gepackte Datenelemente (Datenelemente der Größe Doppelwort (Double Word, DW)), sechzehn getrennte 16-Bit-gepackte Datenelemente (Datenelemente der Größe Wort (Word, W)) oder zweiunddreißig getrennte 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)). Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können ein oder mehrere Ausführungseinheiten zu einer verschmolzenen Ausführungseinheit 509A-509N mit einer Thread-Steuerungslogik (507A-507N) kombiniert werden, die den verschmolzenen EUs gemeinsam ist. Mehrere EUs können zu einer EU-Gruppe verschmolzen werden. Jede EU in der verschmolzenen EU-Gruppe kann dafür ausgelegt sein, einen getrennten SIMD-Hardware-Thread auszuführen. Die Anzahl von EUs in einer verschmolzenen EU-Gruppe kann je nach Ausführungsform variieren. Zusätzlich können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, jedoch nicht beschränkt auf, SIMD8, SIMD16 und SIMD32. Jede verschmolzene Grafikausführungseinheit 509A-509N beinhaltet wenigstens zwei Ausführungseinheiten. Beispielsweise beinhaltet die verschmolzene Ausführungseinheit 509A eine erste EU 508A, eine zweite EU 508B und Thread-Steuerungslogik 507A, die der ersten EU 508A und der zweiten EU 508B gemeinsam ist. Die Thread-Steuerungslogik 507A steuert Threads, die auf der verschmolzenen Grafikausführungseinheit 509A ausgeführt werden, was es jeder EU in den verschmolzenen Ausführungseinheiten 509A-509N ermöglicht, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungs-Caches (z. B. 506) sind in der Thread-Ausführungslogik 500 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 512) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 500 ausgeführt werden, können auch explizit verwaltete Daten in dem gemeinsam genutzten lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Abtaster 510 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen beinhaltet der Abtaster 510 eine spezielle Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten für eine Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 500 über Thread-Spawning- und Dispatch-Logik. Sobald eine Gruppe von geometrischen Objekten zu Pixeldaten verarbeitet und gerastert worden ist, wird die Pixelprozessorlogik (z. B. die Pixel-Shader-Logik, Fragment-Shader-Logik etc.) in dem Shader-Prozessor 502 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu veranlassen, dass Ergebnisse auf Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer etc.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixel-Shader oder ein Fragment-Shader die Werte der verschiedenen Vertex-Attribute, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt die Pixelprozessorlogik im Shader-Prozessor 502 dann ein von der Anwendungsprogrammierschnittstelle (Application Programming Interface, API) bereitgestelltes Pixel- oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, versendet der Shader-Prozessor 502 Threads über den Thread-Dispatcher 504 an eine Ausführungseinheit (z. B. 508A). In einigen Ausführungsformen verwendet der Shader-Prozessor 502 eine Texturabtastlogik im Abtaster 510, um auf Texturdaten in Texturkarten zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder schließen ein oder mehrere Pixel von der weiteren Verarbeitung aus.
  • In einigen Ausführungsformen stellt der Datenport 514 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 500 bereit, um verarbeitete Daten an einen Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen beinhaltet der Datenport 514 einen oder mehrere Cache-Speicher (z. B. Datencache 512) oder ist damit gekoppelt, um Daten für den Speicherzugriff über den Datenport zwischenzuspeichern.
  • In einer Ausführungsform kann die Ausführungslogik 500 auch einen Raytracer 505 beinhalten, der eine Raytracing-Beschleunigungsfunktionalität bereitstellen kann. Der Raytracer 505 kann einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für eine Strahlgenerierung beinhaltet. Der Raytracing-Anweisungssatz kann ähnlich dem Raytracing-Anweisungssatz sein, der von den Raytracing-Kernen 245 in 2C unterstützt wird, oder hiervon verschieden sein.
  • 5B veranschaulicht beispielhafte interne Einzelheiten einer Ausführungseinheit 508 gemäß Ausführungsformen. Eine Grafikausführungseinheit 508 kann eine Anweisungsabrufeinheit 537, eine GRF-Anordnung (General Register File, Allgemeinregisterdatei) 524, eine ARF-Anordnung (Architectural Register File, Architekturregisterdatei) 526, einen Thread-Arbiter 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkommaeinheiten (Floating Point Units, FPUs) 534, und, in einer Ausführungsform, einen Satz von dedizierten Ganzzahl-SIMD-ALUs 535 beinhalten. Die GRF 524 und die ARF 526 beinhalten den Satz von allgemeinen Registerdateien und Architekturregisterdateien, die mit jedem gleichzeitigen Hardware-Thread verknüpft sind, der in der Grafikausführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird der Architekturzustand pro Thread in der ARF 526 gepflegt, während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 524 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern in der ARF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, bei der es sich um eine Kombination aus simultanem Multithreading (Simultaneous MultiThreading, SMT) und feinkörnigem verschachtelten Multithreading (Interleaved MultiThreading, IMT) handelt. Die Architektur hat eine modulare Konfiguration, die zur Entwurfszeit basierend auf einer Zielanzahl von gleichzeitigen Threads und einer Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei Ressourcen der Ausführungseinheit über Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads auszuführen. Die Anzahl logischer Threads, die durch die Grafikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und mehrere logische Threads können jedem Hardware-Thread zugewiesen sein.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 522 des Threads der Grafikausführungseinheit 508 kann die Anweisungen zur Ausführung an eines von der Sendeeinheit 530, der Verzweigungseinheit 532 oder dem/den SIMD-FPU(s) 534 versenden. Jeder Ausführungsthread kann auf Universalregister in der GRF 524 zugreifen 128, wobei jedes Register 32 Bytes speichern kann, auf die als SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugegriffen werden kann. In einer Ausführungsform hat jeder Ausführungseinheit-Thread Zugriff auf 4 KBytes in der GRF 524, auch wenn Ausführungsformen nicht diesbezüglich eingeschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. In einer Ausführungsform ist die Grafikausführungseinheit 508 in sieben Hardware-Threads unterteilt, die Rechenoperationen unabhängig durchführen können, auch wenn die Anzahl von Threads pro Ausführungseinheit ebenfalls gemäß Ausführungsformen variieren kann. Beispielsweise werden, in einer Ausführungsform, bis zu 16 Hardware-Threads unterstützt. In einer Ausführungsform, in der sieben Threads auf 4 KBytes zugreifen können, kann die GRF 524 insgesamt 28 KBytes speichern. In Fällen, in denen 16 Threads auf 4 KBytes zugreifen können, kann die GRF 524 insgesamt 64 KBytes speichern. Flexible Adressierungsmodi können ermöglichen, dass Register zusammen adressiert werden, um effektiv breitere Register aufzubauen oder „strided“ rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Abtasteroperationen und andere Systemkommunikationen mit längerer Latenz über „Senden“-Anweisungen versendet, die von der Nachrichtenweitergabe-Sendeeinheit 530 ausgeführt werden. In einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 532 versendet, um eine SIMD-Divergenz und letztendliche Konvergenz zu ermöglichen.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine oder mehrere SΠVID-Gleitkommaeinheiten (Floating Point Units, FPUs) 534 zum Durchführen von Gleitkommaoperationen auf. In einer Ausführungsform unterstützt bzw. unterstützen die FPU(s) 534 auch Ganzzahlberechnungen. In einer Ausführungsform kann bzw. können die FPU(s) 534 bis zu einer Anzahl M von 32-Bit Gleitkomma- (oder Ganzzahl-)Operationen SIMD-ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen SΠVID-ausführen. In einer Ausführungsform stellt wenigstens eine der FPUs eine erweiterte mathematische Funktionalität bereit, um transzendente mathematische Funktionen mit hohem Durchsatz und 54-Bit-Gleitkomma mit doppelter Präzision zu unterstützen. In einigen Ausführungsformen liegt auch ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 535 vor, die speziell optimiert werden können, um Operationen durchzuführen, die mit Maschinenlernberechnungen verknüpft sind.
  • In einer Ausführungsform können Anordnungen von mehreren Instanzen der Grafikausführungseinheit 508 in einer Grafik-Teilkern-Gruppierung (z. B. einem Sub-Slice) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Teilkerngruppierung wählen. In einer Ausführungsform kann die Grafikausführungseinheit 508 Anweisungen über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform wird jeder Thread, der in der Grafikausführungseinheit 508 ausgeführt wird, in einem anderen Kanal ausgeführt.
  • 6 veranschaulicht eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zur Verwendung beispielsweise in einer Rechen-Engine-Kachel 340A-340D wie in 3C sein, ohne jedoch hierauf beschränkt zu sein. Varianten der Ausführungseinheit 600 können auch in einer Grafik-Engine-Kachel 310A-310D wie in 3B verwendet werden. In einer Ausführungseinheit beinhaltet die Ausführungseinheit 600 eine Thread-Steuerungseinheit 601, eine Thread-Zustandseinheit 602, eine Anweisungsabruf-/Vorausladeeinheit 603 und eine Anweisungsdecodiereinheit 604. Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die Register speichert, welche Hardware-Threads in der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 beinhaltet zusätzlich eine Sendeeinheit 607 und eine Verzweigungseinheit 608. In einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 der Grafikausführungseinheit 508 von 5B betrieben werden.
  • Die Ausführungseinheit 600 beinhaltet auch eine Recheneinheit 610, die mehrere unterschiedliche Arten von Funktionseinheiten aufweist. In einer Ausführungsform beinhaltet die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von arithmetischen Logikeinheiten aufweist. Die ALU-Einheit 611 kann dafür ausgelegt sein, 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen durchzuführen Ganzzahl- und Gleitkommaoperationen können gleichzeitig durchgeführt werden. Die Recheneinheit 610 kann auch eine systolische Anordnung 612 und eine Math-Einheit 613 beinhalten. Die systolische Anordnung 612 beinhaltet ein W weites und D tiefes Netz von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere datenparallele Operationen in einer systolischen Weise durchzuführen. In einer Ausführungsform kann die systolische Anordnung 612 dafür ausgelegt sein, Matrixoperationen durchzuführen, wie etwa Matrix-Skalarprodukt-Operationen. In einer Ausführungsform unterstützt die systolische Anordnung 612 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung 612 dafür ausgelegt sein, Maschinenlernoperationen zu beschleunigen. In solchen Ausführungsformen kann die systolische Anordnung 612 mit einer Unterstützung für das 16-Bit-Gleitkommaformat bfloat ausgelegt sein. In einer Ausführungsform kann eine Math-Einheit 613 enthalten sein, um einen spezifischen Teilsatz von mathematischen Operationen in einer effizienten und energiesparenderen Weise durchzuführen als die ALU-Einheit 611. Die Math-Einheit 613 kann eine Variante einer mathematischen Logik beinhalten, die in einer gemeinsam genutzten Funktionslogik einer Grafikverarbeitungs-Engine zu finden sein kann, welche von anderen Ausführungsformen bereitgestellt wird (z. B. die mathematische Logik 422 der gemeinsam genutzten Funktionslogik 420 von 4). In einer Ausführungsform kann die Math-Einheit 613 dafür ausgelegt sein, 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Thread-Steuerungseinheit 601 beinhaltet Logik, um die Ausführung von Threads in der Ausführungseinheit zu steuern. Die Thread-Steuerungseinheit 601 kann Thread-Arbitrierungslogik beinhalten, um die Ausführung von Threads in der Ausführungseinheit 600 zu starten, zu stoppen und vorzuziehen. Die Thread-Zustandseinheit 602 kann verwendet werden, um den Thread-Zustand für Threads zu speichern, die für eine Ausführung auf der Ausführungseinheit 600 zugewiesen sind. Das Speichern des Thread-Zustands in der Ausführungseinheit 600 ermöglicht ein schnelles Vorziehen von Threads, wenn diese Threads geblockt oder in den Leerlauf versetzt werden. Die Anweisungsabruf-/Vorausladeeinheit 603 kann Anweisungen aus einem Anweisungscache einer Ausführungslogik höherer Ebene (z. B. dem Anweisungscache 506 wie in 5A) abrufen). Die Anweisungsabruf-/Vorausladeeinheit 603 kann auch Vorausladeanforderungen für Anweisungen ausgeben, die in den Anweisungscache geladen werden sollen, basierend auf einer Analyse von derzeit ausgeführten Threads. Die Anweisungsdecodiereinheit 604 kann verwendet werden, um Anweisungen zu decodieren, die von den Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Anweisungsdecodiereinheit 604 als sekundärer Decoder verwendet werden, um komplexe Anweisungen in konstituierende Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die von Hardware-Threads verwendet werden kann, welche auf der Ausführungseinheit 600 ausgeführt werden. Register in der Registerdatei 606 können auf die Logik verteilt werden, die verwendet wird, um mehrere gleichzeitige Threads in der Recheneinheit 610 der Ausführungseinheit 600 auszuführen. Die Anzahl logischer Threads, die durch die Grafikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und mehrere logische Threads können jedem Hardware-Thread zugewiesen sein. Die Größe der Registerdatei 606 kann je nach Ausführungsform variieren, basierend auf der Anzahl von unterstützen Hardware-Threads. In einer Ausführungsform kann eine Registerumbenennung verwendet werden, um Register dynamisch Hardware-Threads zuzuweisen.
  • 7 ist ein Blockschaltbild, das Grafikprozessor-Anweisungsformate 700 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Anweisungssatz, der Anweisungen in mehreren Formaten aufweist. Die Kästchen mit durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheit-Anweisung enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. In einigen Ausführungsformen handelt es sich bei dem beschriebenen und veranschaulichten Anweisungsformat 700 um Makroweisungen, dahingehend, dass sie Anweisungen sind, die für die Ausführungseinheit bereitgestellt werden, im Gegensatz zu Mikrooperationen, die aus einer Anweisungsdecodierung resultieren, sobald die Anweisung verarbeitet worden ist.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Anweisungen in einem 128-Bit-Anweisungsformat 710. Ein verdichtetes 64-Bit-Anweisungsformat 730 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, Anweisungsoptionen und der Anzahl von Operanden verfügbar. Das native 128-Bit-Anweisungsformat 710 bietet Zugriff auf alle Anweisungsoptionen, während einige Optionen und Operationen im 64-Bit-Format 730 beschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen wird die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 verdichtet. Die Ausführungseinheit-Hardware referenziert einen Satz von Verdichtungstabellen basierend auf den Indexwerten und verwendet die Verdichtungstabellenausgaben, um eine native Anweisung im 128-Bit-Anweisungsformat 710 zu rekonstruieren. Auch andere Größen und Anweisungsformate können verwendet werden.
  • Für jedes Format definiert ein Anweisungs-Opcode 712 die Operation, welche die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden aus. Beispielsweise führt die Ausführungseinheit in Reaktion auf eine Addieranweisung eine gleichzeitige Addieroperation über jeden Farbkanal durch, der ein Texturelement oder ein Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden durch. In einigen Ausführungsformen ermöglicht das Anweisungssteuerfeld 714 eine Steuerung über bestimmte Ausführungsoptionen, wie etwa Kanalauswahl (z. B. Vorhersage) und Datenkanalreihenfolge (z. B. Swizzle). Für Anweisungen im 128-Bit-Anweisungsformat 710 beschränkt ein Ausführungsgrößenfeld (exec-size) 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen steht das Feld exec-size 716 nicht für die Verwendung im kompakten 64-Bit-Anweisungsformat 730 zur Verfügung.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden auf, was zwei Quelloperanden, src0 720, src1 722 und ein Ziel (dest) 718 einschließt. In einigen Ausführungseinheiten unterstützen die Ausführungseinheiten Doppelzielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden aufweisen (z. B., src2 724), wobei der Anweisungs-Opcode 712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit der Anweisung weitergegeben wird.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das beispielsweise spezifiziert, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Beispielsweise kann die Anweisung in einem ersten Modus eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und in einem zweiten Modus kann die Anweisung eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfeldes 726, ob die Anweisung eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem unmittelbaren Adressfeld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen sind Anweisungen basierend auf Bitfeldern von Opcode 712 gruppiert, um die Opcode-Decodierung 740 zu vereinfachen. Für einen 8-bit-Opcode gestatten es die Bits 4, 5 und 6 der Ausführungseinheit, den Opcode-Typ zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen beinhaltet eine Bewegungs- und Logik-Opcode-Gruppe 742 Datenbewegungs- und Logikanweisungen (z. B. Bewegen (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und Logikgruppe 742 die fünf höchstwertigen Bits (Most Significant Bits, MSB) gemeinsam, wobei Anweisungen zum Bewegen (mov) in der Form 0000xxxxb vorliegen und Logikanweisungen in der Form 0001xxxxb vorliegen. Eine Flusssteuerungsanweisungsgruppe 744 (z. B. Aufruf, Sprung (jmp)) beinhaltet Anweisungen in der Form OOlOxxxxb (z. B. 0x20). Eine sonstige Anweisungsgruppe 746 beinhaltet eine Mischung von Anweisungen, einschließlich Synchronisationsanweisungen (z. B. Warten, Senden) in der Form 0011xxxxb (z. B. 0x30). Eine Parallelmathematik-Anweisungsgruppe 748 beinhaltet komponentenweise arithmetische Anweisungen (z. B. Addieren (add), Multiplizieren (mul)) in der Form 0 1 00xxxxb (z. B. 0x40). Die Parallelmathematik-Gruppe 748 führt die arithmetischen Operationen parallel über Datenkanäle durch. Die Vektormathematik-Gruppe 750 beinhaltet arithmetische Anweisungen (z. B. dp4) in der Form OlOlxxxxb (z. B. 0x50). Die Vektormathematik-Gruppe führt arithmetische Operationen durch, wie etwa Skalarprodukt-Berechnungen für Vektoroperanden. Die veranschaulichte Opcode-Decodierung 740 kann, in einer Ausführungsform, verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit verwendet wird, um eine decodierte Anweisung auszuführen. Beispielsweise können einige Anweisungen als systolische Anweisungen vorgesehen sein, die von einer systolischen Anordnung ausgeführt werden. Andere Anweisungen, wie etwa (hier nicht gezeigte) Raytracing-Anweisungen können an einen Raytracing-Kern oder eine Raytracing-Logik in einem Slice oder einer Partition der Ausführungslogik geleitet werden.
  • Grafik-Pipeline
  • 8 ist ein Blockschaltbild einer anderen Ausführungsform eines Grafikprozessors 800. Elemente von 8 mit den gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin können ähnlich wie an anderer Stelle hierin beschrieben betrieben werden oder funktionieren, ohne jedoch darauf beschränkt zu sein.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Geometrie-Pipeline 820, eine Medien-Pipeline 830, eine Anzeige-Engine 840, Thread-Ausführungslogik 850 und eine Render-Ausgabe-Pipeline 870. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor in einem Mehrkern-Verarbeitungssystem, das einen oder mehrere Universal-Verarbeitungskerne beinhaltet. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere (nicht gezeigte) Steuerregister oder über Befehle gesteuert, die über eine Ringzwischenverbindung 802 an den Grafikprozessor 800 ausgegeben werden. In einigen Ausführungsformen koppelt die Ringzwischenverbindung 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten, wie etwa anderen Grafikprozessoren oder Universalprozessoren. Befehle von einer Ringzwischenverbindung 802 werden von einem Befehls-Streamer 803 interpretiert, der Anweisungen für einzelne Komponenten der Geometrie-Pipeline 820 oder der Medien-Pipeline 830 liefert.
  • In einigen Ausführungsformen lenkt der Befehls-Streamer 803 den Betrieb eines Vertex-Fetchers 805, der Vertex-Daten aus dem Speicher liest und Vertex-Verarbeitungsbefehle ausführt, die von dem Befehls-Streamer 803 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Fetcher 805 Vertex-Daten für einen Vertex-Shader 807 bereit, der Koordinatenraumtransformations- und Beleuchtungsoperationen für jeden Vertex durchführt. In einigen Ausführungsformen führen der Vertex-Fetcher 805 und der Vertex-Shader 807 Vertex-Verarbeitungsanweisungen durch, indem Ausführungsthreads über einen Thread-Dispatcher 831 an Ausführungseinheiten 852A-852B versendet werden.
  • In einigen Ausführungsformen handelt es sich bei den Ausführungseinheiten 852A-852B um eine Anordnung von Vektorprozessoren, die einen Anweisungssatz zum Durchführen von Grafik- und Medienoperationen aufweisen. In einigen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen angehängten L1-Cache 851 auf, der für jede Anordnung spezifisch ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als Datencache, als Anweisungscache oder als einzelner Cache ausgelegt sein, der so partitioniert ist, dass Daten und Anweisungen in unterschiedlichen Partitionen enthalten sind.
  • In einigen Ausführungsformen beinhaltet die Geometrie-Pipeline 820 Tessellationskomponenten zum Durchführen einer hardwarebeschleunigten Tessellation von 3D-Objekten. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 811 die Tessellationsoperationen. Ein programmierbarer Domänen-Shader 817 stellt eine Backend-Auswertung der Tessellationsausgabe bereit. Ein Tessellator 813 arbeitet in Richtung des Hull-Shaders 811 und enthält eine spezielle Logik zum Generieren eines Satzes von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell, das als Eingabe für die Geometrie-Pipeline 820 bereitgestellt wird. In einigen Ausführungsformen können, falls keine Tessellation verwendet wird, Tessellationskomponenten (z. B. der Hull-Shader 811, der Tessellator 813 und der Domänen-Shader 817) umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 819 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 852A-852B versendet werden, oder können direkt an den Clipper 829 weitergehen. In einigen Ausführungsformen bearbeitet der Geometrie-Shader gesamte geometrische Objekte statt Vertices oder Patches von Vertices wie in vorangehenden Stufen der Grafik-Pipeline. Falls die Tessellation deaktiviert ist, empfängt der Geometrie-Shader 819 Eingaben vom Vertex-Shader 807. In einigen Ausführungsformen ist der Geometrie-Shader 819 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tessellation durchzuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterisierung verarbeitet ein Clipper 829 Vertex-Daten. Bei dem Clipper 829 kann es sich um einen Clipper mit fester Funktion oder einen programmierbaren Clipper mit Clipping- und Geometrie-Shader-Funktionen handeln. In einigen Ausführungsformen versendet eine Rasterisierer- und Tiefentestkomponente 873 in der Render-Ausgabe-Pipeline 870 Pixel-Shader, um die geometrischen Objekte in Pro-Pixel-Darstellungen umzuwandeln. In einigen Ausführungsformen ist die Pixel-Shader-Logik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierer- und Tiefentestkomponente 873 umgehen und auf ungerasterte Vertex-Daten über eine Stream-Out-Einheit 823 zugreifen.
  • Der Grafikprozessor 800 weist einen Zwischenverbindungsbus, eine Zwischenverbindungsstruktur oder einen anderen Zwischenverbindungsmechanismus auf, der eine Daten- und Nachrichtenweitergabe zwischen den Hauptkomponenten des Prozessors gestattet. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und die zugehörigen Logikeinheiten (z. B. der L1-Cache 851, der Abtaster 854, der Textur-Cache 858 etc.) über einen Datenport 856 miteinander verbunden, um Speicherzugriffe durchzuführen und mit Render-Ausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils getrennte Speicherzugriffspfade auf. In einer Ausführungsform kann der Textur-Cache 858 auch als Abtaster-Cache ausgelegt sein.
  • In einigen Ausführungsformen enthält die Render-Ausgabe-Pipeline 870 eine Rasterisierer- und Tiefentestkomponente 873, die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung umwandelt. In einigen Anwendungen beinhaltet die Rasterisiererlogik eine Windower/Maskierer-Einheit zum Durchführen einer Dreiecks- und Linienrasterisierung mit fester Funktion. Ein zugehöriger Render-Cache 878 und Tiefencache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten durch, wenngleich in einigen Fällen Pixeloperationen, die mit 2D-Operationen verknüpft sind (z. B. Bitblock-Bildübertragungen mit Mischen) durch die 2D-Engine 841 durchgeführt werden oder zur Anzeigezeit von der Anzeigesteuerung 843 unter Verwendung von Overlay-Anzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache 875 für alle Grafikkomponenten verfügbar, was die gemeinsame Nutzung von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
  • In einigen Ausführungsformen beinhaltet die Medien-Pipeline 830 des Grafikprozessors eine Medien-Engine 837 und ein Video-Frontend 834. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipeline-Befehle von dem Befehls-Streamer 803. In einigen Ausführungsformen beinhaltet die Medien-Pipeline 830 einen getrennten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 837. In einigen Ausführungsformen beinhaltet die Medien-Engine 837 Thread-Spawning-Funktionalität, um Threads zum Versenden an die Thread-Ausführungslogik 850 über den Thread-Dispatcher 831 zu spawnen.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Anzeige-Engine 840. In einigen Ausführungsformen befindet sich die Anzeige-Engine 840 außerhalb des Prozessors 800 und ist mit dem Grafikprozessor über die Ringzwischenverbindung 802 oder eine(n) andere(n) Zwischenverbindungsbus oder -struktur verbunden. In einigen Ausführungsformen beinhaltet die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843. In einigen Ausführungsformen enthält die Anzeige-Engine 840 Speziallogik, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. In einigen Ausführungsformen ist die Anzeigesteuerung 843 mit einer (nicht gezeigten) Anzeigevorrichtung gekoppelt, bei der es sich um eine systemintegrierte Anzeigevorrichtung wie in einem Laptop-Computer oder um eine externe Anzeigevorrichtung handeln kann, die über einen Anzeigevorrichtungsverbinder angeschlossen ist.
  • In einigen Ausführungsformen sind die Geometrie-Pipeline 820 und die Medien-Pipeline 830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind für keine bestimmte Anwendungsprogrammierschnittstelle (Application Programming Interface, API) spezifisch. In einigen Ausführungsformen übersetzt die Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für OpenGL (Open Graphics Library), OpenCL (Open Computing Language) und/oder die Vulkan Grafik- und -Rechen-API geboten, die alle von der Khronos Group stammen. In einigen Ausführungsformen wird auch Unterstützung für die Direct3D-Bibliothek von der Microsoft Corporation geboten. In einigen Ausführungsformen kann auch eine Kombination dieser Bibliotheken unterstützt werden. Unterstützung kann auch für OpenCV (Open Source Computer Vision Library) geboten werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt werden, falls eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafik- Pipeline-Programmierung
  • 9A ist ein Blockschaltbild, das ein Grafikprozessor-Befehlsformat 900 gemäß einigen Ausführungsformen veranschaulicht. 9B ist ein Blockschaltbild, das eine Grafikprozessor-Befehlsfolge 910 gemäß einer Ausführungsform veranschaulicht. Die Kästchen mit durchgezogenen Linien in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 900 von 9A beinhaltet Datenfelder zum Identifizieren eines Clients 902, einen Befehlsoperationscode (Opcode) 904 und Daten 906 für den Befehl. Ein Sub-Opcode 905 und eine Befehlsgröße 908 sind ebenfalls in einigen Befehlen enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Grafikvorrichtung, welche die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehlsparser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls aufzubereiten und die Befehlsdaten an die entsprechende Client-Einheit zu leiten. In einigen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medien-Einheit auf. Jede Client-Einheit verfügt über eine entsprechende Verarbeitungspipeline, welche die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Sub-Opcode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 906 durch. Für einige Befehle wird eine explizite Befehlsgröße 908 erwartet, um die Größe des Befehls zu spezifizieren. In einigen Ausführungsformen bestimmt der Befehlsparser automatisch die Größe von wenigstens einigen der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen sind Befehle über Vielfache eines Doppelwortes ausgerichtet. Auch andere Befehlsformate können verwendet werden.
  • Das Flussdiagramm in 9B veranschaulicht eine beispielhafte Grafikprozessor-Befehlsfolge 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der dargestellten Befehlsfolge, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolge wird nur zu Beispielszwecken gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge ausgegeben werden, sodass der Grafikprozessor die Folge von Befehlen wenigstens teilweise gleichzeitig verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlsfolge 910 mit einem Pipeline-Entleerungsbefehl 912 beginnen, um jede aktive Grafik-Pipeline zu veranlassen, die aktuell ausstehenden Befehle für die Pipeline abzuschließen. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medien-Pipeline 924 nicht gleichzeitig. Die Pipeline-Entleerung wird durchgeführt, um die aktive Grafik-Pipeline zu veranlassen, etwaige ausstehende Befehle abzuschließen. In Reaktion auf eine Pipeline-Entleerung unterbricht der Befehlsparser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichen-Engines ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Render-Cache, die als „dirty“ (geändert) gekennzeichnet sind, in den Speicher entleert werden. In einigen Ausführungsformen kann der Pipeline-Entleerungsbefehl 912 zur Pipeline-Synchronisierung oder vor dem Versetzen des Grafikprozessors in einen Niedrigenergiezustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen ist ein Pipeline-Auswahlbefehl 913 nur einmalig in einem Ausführungskontext erforderlich, bevor Pipeline-Befehle ausgegeben werden, es sei denn, der Kontext lautet, dass Befehle für beide Pipelines ausgegeben werden sollen. In einigen Ausführungsformen ist ein Pipeline-Entleerungsbefehl 912 unmittelbar vor einem Pipeline-Wechsel über den Pipeline-Auswahlbefehl 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 914 eine Grafik-Pipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medien-Pipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 914 zur Pipeline-Synchronisierung und zum Löschen von Daten aus einem oder mehreren Cache-Speichern in der aktiven Pipeline vor der Verarbeitung eines Stapels von Befehlen verwendet.
  • In einigen Ausführungsformen werden Rückgabepuffer-Zustandsbefehle 916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuteilung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine Cross-Thread-Kommunikation durchzuführen. In einigen Ausführungsformen beinhaltet der Rückgabepuffer-Zustand 916 das Auswählen der Größe und Anzahl von Rückgabepuffern zur Verwendung für einen Satz von Pipeline-Operationen.
  • Die verbleibenden Befehle in der Befehlsfolge differieren basierend auf der aktiven Pipeline für die Operationen. Basierend auf einer Pipeline-Bestimmung 920 wird die Befehlsfolge auf die 3D-Pipeline 922 beginnend mit dem 3D-Pipeline-Zustand 930 oder auf die Medien-Pipeline 924 beginnend mit dem Medien-Pipeline-Zustand 940 zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipeline-Zustands 930 beinhalten 3D-Zustand-Einstellungsbefehle für einen Vertex-Pufferzustand, einen Vertex-Elementzustand, einen konstanten Farbzustand, einen Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitiv-Befehle verarbeitet werden. Die Werte dieser Befehle werden wenigstens teilweise basierend auf der jeweils verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind Befehle zum 3D-Pipeline-Zustand 930 auch in der Lage, bestimmte Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, wenn diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 932 verwendet, um von der 3D-Pipeline zu verarbeitende 3D-Primitive zu übergeben. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl 932 an den Grafikprozessor weitergegeben werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Daten des 3D-Primitiv-Befehls 932, um Vertex-Datenstrukturen zu generieren. Die Vertex-Datenstrukturen sind in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen, wird der 3D-Grundelement-Befehl 932 verwendet, um Vertex-Operationen an 3D-Grundelementen über Vertex-Shader durchzuführen. Um Vertex-Shader zu verarbeiten, versendet die 3D-Pipeline 922 Shader-Ausführungsthreads an Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über den Befehl oder das Ereignis Ausführen 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang die Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über den Befehl „go“ oder „kick“ in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Grafik-Pipeline zu entleeren. Die 3D-Pipeline wird eine Geometrieverarbeitung für die 3D-Grundelemente durchführen. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert, und die Pixel-Engine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern der Pixel-Shading- und Pixel-Backend-Operationen können auch für diese Operationen eingezogen sein.
  • In einigen Ausführungsformen folgt die Grafikprozessor-Befehlsfolge 910 dem Pfad der Medien-Pipeline 924, wenn Medienoperationen durchgeführt werden. Im Allgemeinen hängen die spezifische Verwendung und die Art und Weise der Programmierung für die Medien-Pipeline 924 von den durchzuführenden Medien- oder Rechenoperationen ab. Spezifische Mediendecodieroperationen können während der Mediendecodierung an die Medien-Pipeline ausgelagert werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Universal-Verarbeitungskernen bereitgestellt werden. In einer Ausführungsformen beinhaltet die Medien-Pipeline auch Elemente für GPGPU-Operationen (General-Purpose Graphics Processor Unit, Universal-Grafikprozessoreinheit), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechen-Shader-Programmen durchzuführen, die sich nicht explizit auf das Rendern von Grafikgrundelementen beziehen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 924 in ähnlicher Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medien-Pipeline-Zustands 940 wird versendet oder vor den Medienobjektbefehlen 942 in eine Befehlswarteschlange eingestellt. In einigen Ausführungsformen weisen die Befehle für den Medien-Pipeline-Zustand 940 Daten zum Konfigurieren der Medien-Pipeline-Elemente auf, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies beinhaltet Daten zum Konfigurieren der Videodecodier- und Videocodierlogik in der Medien-Pipeline, wie etwa ein Codier- oder Decodierformat. In einigen Ausführungsformen unterstützten die Befehle für den Medien-Pipeline-Zustand 940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger auf Medienobjekte für die Verarbeitung durch die Medien-Pipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 942 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und Medienobjektbefehle 942 in eine Warteschlange eingereiht sind, wird die Medien-Pipeline 924 über einen Ausführen-Befehl 944 oder ein gleichwertiges Ausführungsereignis (z. B. einen Registerschreibvorgang) ausgelöst. Die Ausgabe aus der Medien-Pipeline 924 kann dann durch Operationen, die von der 3D-Pipeline 922 oder der Medien-Pipeline 924 bereitgestellt werden, nachbearbeitet werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafiksoftwarearchitektur
  • 10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und wenigstens einen Prozessor 1030. In einigen Ausführungsformen weist der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Universal-Prozessorkerne 1034 auf. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils in dem Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 1010 ein oder mehrere Shader-Programme mit Shader-Anweisungen 1012. Die Shader-Sprachanweisungen können in einer Shader-Sprache hoher Ebene wie etwa HLSL (High Level Shader Language) von Direct3D oder GLSL (OpenGL Shader Language) und so weiter vorliegen. Die Anwendung beinhaltet auch ausführbare Anweisungen 1014 in einer Maschinensprache, die sich für die Ausführung durch den Universal-Prozessorkern 1034 eignet. Die Anwendung beinhaltet außerdem Grafikobjekte 1016, die durch Vertex-Daten definiert sind.
  • In einigen Ausführungsformen handelt es sich bei dem Betriebssystem 1020 um ein Microsoft® Windows® Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 1020 kann eine Grafik-API 1022 wie etwa die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API im Einsatz ist, verwendet das Betriebssystem 1020 einen Frontend-Shader-Compiler 1024, um beliebige Shader-Anweisungen 1012 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Bei der Kompilierung kann es sich um eine Just-in-Time (JIT)-Kompilierung handeln oder die Anwendung kann eine Shader-Vorkompilierung durchführen. In einigen Ausführungsformen werden Shader hoher Ebene während der Kompilierung der 3D-Grafikanwendung 1010 in Shader niedrigerer Ebene kompiliert. In einigen Ausführungsformen werden die Shader-Anweisungen 1012 in einer Zwischenform bereitgestellt, beispielsweise einer Version von SPIR (Standard Portable Intermediate Representation), das von der Vulkan-API verwendet wird.
  • In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 1026 einen Backend-Shader-Compiler 1027, um die Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API im Einsatz ist, werden Shader-Anweisungen 1012 in der GLSL-Hochsprache zur Kompilierung an einen Benutzermodus-Grafiktreiber 1026 weitergegeben. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 Betriebssystem-Kernelmodus-Funktionen 1028, um mit einem Kernelmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu versenden.
  • IP- Kern-Implementierungen
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentativen Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik in einer integrierten Schaltung wie etwa einem Prozessor repräsentiert und/oder definiert. Beispielsweise kann das maschinenlesbare Medium Anweisungen beinhalten, die verschiedene Logiken im Prozessor repräsentieren. Beim Auslesen durch eine Maschine können die Anweisungen die Maschine veranlassen, die Logik zu fertigen, um die hier beschriebenen Techniken bzw. Verfahren durchzuführen. Solche Darstellungen, „IP-Kerne“ genannt, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem physischen, maschinenlesbaren Medium als Hardwaremodell, welches die Struktur der integrierten Schaltung beschreibt, gespeichert sein können. Das Hardwaremodell kann an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, die das Hardwaremodell auf Fertigungsmaschinen laden, welche die integrierte Schaltung herstellen. Die integrierte Schaltung kann dergestalt gefertigt werden, dass die Schaltung Operationen durchführt, die im Zusammenhang mit den hier beschriebenen Ausführungsformen beschrieben werden.
  • 11A ist ein Blockschaltbild, das ein IP-Kernentwicklungssystem veranschaulicht, welches verwendet werden kann, um eine integrierte Schaltung zum Durchführen von Operationen gemäß einer Ausführungsform herzustellen. Das IP-Kernentwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu generieren, die in einen größeren Entwurf integriert oder verwendet werden können, um eine vollständige integrierte Schaltung (z. B. eine integrierte SoC-Schaltung) zu konstruieren. Eine Entwurfseinrichtung 1130 kann eine Softwaresimulation 1110 eines IP-Kernentwurfs in einer Programmiersprache höherer Ebene (z. B. C/C++) generieren. Die Softwaresimulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 1112 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitsteuerungssimulationen beinhalten. Ein Entwurf für eine Registertransferebene (Register Transfer Level, RTL) kann dann anhand des Simulationsmodells 1112 erstellt oder synthetisiert werden. Der RTL-Entwurf 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss von digitalen Signalen zwischen Hardwareregistern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu einem RTL-Entwurf 1115 können auch untergeordnete Entwürfe auf der Logikebene oder der Transistorebene erstellt, entwickelt oder synthetisiert werden. Somit können die besonderen Einzelheiten des Erstentwurfs und der Simulation variieren.
  • Der RTL-Entwurf 1115 oder ein Äquivalent können ferner von der Entwurfseinrichtung in ein Hardwaremodell 1120 synthetisiert werden, das in einer Hardware-Beschreibungssprache (Hardware Description Language, HDL) oder einer anderen Repräsentation von physischen Entwurfsdaten vorliegen kann. Die HDL kann ferner simuliert oder getestet werden, um den IP-Kernentwurf zu verifizieren. Der IP-Kernentwurf kann zur Übergabe an eine Drittanbieter-Fertigungseinrichtung 1165 unter Verwendung von nichtflüchtigem Speicher 1140 (z. B. einer Festplatte, Flash-Speicher oder einem beliebigen nichtflüchtigen Datenspeichermedium) gespeichert werden. Alternativ kann der IP-Kernentwurf über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 (z. B. via Internet) übertragen werden. Die Fertigungseinrichtung 1165 kann dann eine integrierte Schaltung fertigen, die wenigstens teilweise auf dem IP-Kernentwurf basiert. Die gefertigte integrierte Schaltung kann dafür ausgelegt sein, Operationen gemäß wenigstens einer der hier beschriebenen Ausführungsformen durchzuführen.
  • 11B zeigt eine Querschnitt-Seitenansicht der Gehäusebaugruppe einer integrierten Schaltung 1170 gemäß einigen hier beschriebenen Ausführungsformen. Die Gehäusebaugruppe der integrierten Schaltung 1170 veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen wie hier beschrieben Die Gehäusebaugruppe 1170 beinhaltet mehrere Einheiten von Hardwarelogik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann wenigstens teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Abschnitte von dem/den Prozessorkern(en), Grafikprozessor(en) oder anderen hier beschriebenen Beschleunigervorrichtungen aufweisen. Jede Logikeinheit 1172, 1174 kann in einem Halbleiterplättchen implementiert und über eine Zwischenverbindungsstruktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann dafür ausgelegt sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten und kann Zwischenverbindungen, beispielsweise, jedoch nicht beschränkt auf Kontakthöcker oder Pfeiler, aufweisen. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 dafür ausgelegt sein, elektrische Signale wie etwa Eingabe/Ausgabe (E/A)-Signale und/oder Leistungs- oder Massesignale, die mit dem Betrieb der Logik 1172, 1174 verknüpft sind, zu leiten. In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen auch andere geeignete Arten von Substraten aufweisen. Die Gehäusebaugruppe 1170 kann über eine Gehäusezwischenverbindung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Gehäusezwischenverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie etwa eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul.
  • In einigen Ausführungsformen sind die Logikeinheiten 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die dafür ausgelegt ist, elektrische Signale zwischen der Logik 1172, 1174 zu leiten. Bei der Brücke 1182 kann es sich um eine dichte Zwischenverbindungsstruktur handeln, die eine Route für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Auch wenn zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 veranschaulicht sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Halbleiterplättchen aufweisen. Die ein oder mehreren Halbleiterplättchen können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Halbleiterplättchen enthalten ist. Alternativ können mehrere Halbleiterplättchen oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Halbleiterplättchen und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • 11C veranschaulicht eine Gehäusebaugruppe 1190, die mehrere Einheiten von Hardware-Logik-Chiplets beinhaltet, welche mit einem Substrat 1180 (z. B. einem Basis-Halbleiterplättchen) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger wie hier beschrieben können sich aus diversen Silizium-Chiplets zusammensetzen, die getrennt gefertigt sind. In diesem Kontext ist ein Chiplet eine wenigstens teilweise gepackte integrierte Schaltung, die einzelne Logikeinheiten beinhaltet, welche mit anderen Chiplets zu einem größeren Paket zusammengesetzt werden können. Ein vielfältiger Satz von Chiplets mit unterschiedlicher IP-Kern-Logik kann zu einer einzelnen Vorrichtung zusammengesetzt werden. Zusätzlich können die Chiplets unter Verwendung einer aktiven Interposer-Technologie in ein Basis-Halbleiterplättchen oder ein Basis-Chiplet integriert sein. Die hier beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den unterschiedlichen IP-Formen in der GPU. IP-Kerne können unter Verwendung unterschiedlicher Prozesstechnologien gefertigt und während der Fertigung zusammengestellt werden, wodurch die Komplexität des Zusammenführens mehrerer IPs, insbesondere auf einem großen SoC mit mehreren IP- Varianten, zu ein und demselben Fertigungsprozess vermieden wird. Indem das Verwenden mehrerer Prozesstechnologien ermöglicht wird, wird die Markteinführungszeit verkürzt und eine kostengünstige Möglichkeit zum Erstellen mehrerer Produkt-SKUs bereitgestellt. Zusätzlich sind die getrennten IPs empfänglicher für ein unabhängiges Power-Gating; Komponenten, die bei einer gegebenen Arbeitslast nicht verwendet werden, können abgeschaltet werden, was den Gesamtstromverbrauch reduziert.
  • Die Hardware-Logik-Chiplets können Hardware-Logik-Chiplets für spezielle Zwecke 1172, Logik oder E/A-Chiplets 1174 beinhalten und/oder Speicher-Chiplets 1175. Die Hardware-Logik-Chiplets 1172 und Logik- oder E/A-Chiplets 1174 können wenigstens teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und können einen oder mehrere Abschnitte von dem/den Prozessorkern(en), Grafikprozessor(en), Parallelprozessoren oder anderen hier beschriebenen Beschleunigervorrichtungen beinhalten. Die Speicher-Chiplets 1175 können als DRAM-Speicher (z. B. GDDR, HBM) oder Cache-Speicher (SRAM) ausgeführt sein.
  • Jedes Chiplet kann als getrenntes Halbleiterplättchen gefertigt sein und über eine Zwischenverbindungstruktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann dafür ausgelegt sein, elektrische Signale zwischen den verschiedenen Chiplets und der Logik in dem Substrat 1180 zu leiten. Die Zwischenverbindungsstruktur 1173 kann Zwischenverbindungen aufweisen, wie etwa, ohne jedoch hierauf beschränkt zu sein, Kontakthöcker oder Pfeiler. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 dafür ausgelegt sein, elektrische Signale wie etwa Eingabe/Ausgabe (E/A)-Signale und/oder Leistungs- oder Massesignale, die mit dem Betrieb von Logik 1172, 1174, E/A und Speicher-Chiplets verknüpft sind, zu leiten.
  • In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen auch andere geeignete Arten von Substraten aufweisen. Die Gehäusebaugruppe 1190 kann über eine Gehäusezwischenverbindung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Gehäusezwischenverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie etwa eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul.
  • In einigen Ausführungsform können eine Logik oder ein E/A-Chiplet 1174 und ein Speicher-Chiplet 1175 über eine Brücke 1187 elektrisch gekoppelt sein, die dafür ausgelegt ist, elektrische Signale zwischen der Logik oder dem E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 zu leiten. Bei der Brücke 1187 kann es sich um eine dichte Zwischenverbindungsstruktur handeln, die eine Route für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1174, 1175 oder einem E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als Siliziumbrücke oder Zwischenverbindungsbrücke bezeichnet werden. Beispielsweise ist die Brücke 1187 in einigen Ausführungsformen eine eingebettete Multi-Die-Zwischenverbindungsbrücke (Embedded Multi-Die Interconnect Bridge, EMIB). In einigen Ausführungsformen kann die Brücke 1187 einfach eine Direktverbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 1180 kann Hardwarekomponenten für E/A 1191, Cache-Speicher 1192 und andere Hardwarelogik 1193 beinhalten. Ein Fabric 1185 kann in das Substrat 1180 eingebettet sein, um eine Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 1191, 1193 in dem Substrat 1180 zu ermöglichen. In einer Ausführungsform können E/A 1191, Fabric 1185, Cache, Brücke und andere Hardwarelogik 1193 in ein Basis-Halbleiterplättchen integriert sein, das dem Substrat 1180 überlagert ist.
  • In verschiedenen Ausführungsform kann die Gehäusebaugruppe 1190 eine geringere oder größere Anzahl von Komponenten und Chiplets beinhalten, die durch einen Fabric 1185 oder eine oder mehrere Brücken 1187 miteinander verbunden sind. Die Chiplets in der Gehäusebaugruppe 1190 können in einer 3D- oder 2.5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um eine Punkt-zu-Punkt-Verbindung zwischen beispielsweise Logik- oder E/A-Chiplets und Speicher-Chiplets zu ermöglichen. Der Fabric 1185 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Chiplets (z. B Chiplets 1172, 1174, 1191, 1193) mit anderen Logik- und/oder E/A-Chiplets zu verbinden. In einer Ausführungsform kann der Cache-Speicher 1192 in dem Substrat als ein globaler Cache für die Gehäusebaugruppe 1190, Teil eines verteilten globalen Caches oder als dedizierter Cache für den Fabric 1185 fungieren.
  • 11D veranschaulicht eine Gehäusebaugruppe 1194 mit austauschbaren Chiplets 1195 gemäß einer Ausführungsform. Die austauschbaren Chiplets 1195 können in standardisierte Steckplätze auf einem oder mehreren Basis-Chiplets 1196, 1198 montiert werden. Die Basis-Chiplets 1196, 1198 können über eine Brückenzwischenverbindung 1197, die ähnlich wie die anderen hier beschriebenen Brückenzwischenverbindungen sein kann und beispielsweise eine EMIB sein kann, gekoppelt werden. Speicher-Chiplets können auch über eine Brückenzwischenverbindung mit Logik oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über einen Zwischenverbindungs-Fabric kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für eines von Logik oder E/A oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM und Leistungsbereitstellungsschaltungen in ein oder mehrere der Basis-Chiplets 1196, 1198 eingearbeitet sein, die unter Verwendung unterschiedlicher Prozesstechnologien gefertigt sein können, bezogen auf die austauschbaren Chiplets 1195, die oben auf den Basis-Chiplets gestapelt sind. Beispielsweise können die Basis-Chiplets 1196, 1198 unter Verwendung einer größeren Prozesstechnologie gefertigt sein, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie gefertigt sein können. Ein oder mehrere der austauschbaren Chiplets 1195 können Speicher-Chiplets sein (z. B. DRAM). Unterschiedliche Speicherdichten können für die Gehäusebaugruppe 1194 ausgewählt werden, basierend auf dem Stromverbrauch und/oder der angestrebten Leistung für das Produkt, das die Gehäusebaugruppe 1194 verwendet. Zusätzlich können Logik-Chiplets mit einer unterschiedlichen Typanzahl von Funktionseinheiten zum Montagezeitpunkt ausgewählt werden, basierend auf dem Stromverbrauch und/oder der angestrebten Leistung für das Produkt. Zusätzlich können Chiplets, die IP-Logik-Kerne unterschiedlicher Typen enthalten, in die austauschbaren Chiplet-Steckplätze eingefügt werden, was Hybridprozessorentwürfe ermöglicht, die IP-Blöcke unterschiedlicher Technologien mischen und anpassen können.
  • Beispielhafte integrierte Schaltung eines Ein-Chip-Systems
  • 12-13 veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hier beschriebenen Ausführungsformen gefertigt sein können. Zusätzlich zu dem Veranschaulichten können eine andere Logik und andere Schaltungen enthalten sein, einschließlich zusätzlicher Graphikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkerne.
  • 12 ist ein Blockschaltbild, das eine beispielhafte integrierte Schaltung 1200 eines Ein-Chip-Systems veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt sein kann. Die beispielhafte integrierte Schaltung 1200 beinhaltet einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs), wenigstens einen Grafikprozessor 1210 und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 beinhalten, von denen jeder ein modularer IP-Kern von derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung 1200 beinhaltet Peripherie- oder Buslogik, einschließlich einer USB-Steuerung 1225, einer UART-Steuerung 1230, einer SPI/SDIO-Steuerung 1235 und einer I2S/I2-Steuerung 1240. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einem oder mehreren von einer HDMI (High-Definition Multimedia Interface)-Steuerung 1250 und einer MIPI (Mobile Industry Processor Interface)-Anzeigeschnittstelle 1255 gekoppelt ist. Eine Datenspeicherung kann durch ein Flash-Speicher-Subsystem 1260 bereitgestellt sein, das einen Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. Die Speicherschnittstelle kann über eine Speichersteuerung 1265 für Zugriffe auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 1270 auf.
  • 13A-13B sind Blockschaltbilder, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hier beschriebenen Ausführungsformen veranschaulichen. 13A veranschaulicht einen beispielhaften Grafikprozessor 1310 einer integrierten Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt sein kann. 13B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 1340 einer integrierten Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt sein kann. Der Grafikprozessor 1310 von 13A ist ein Beispiel für einen leistungsarmen Grafikprozessorkern. Der Grafikprozessor 1340 von 13B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistung. Jeder der Grafikprozessoren 1310, 1340 kann eine Variante des Grafikprozessors 1210 von 12 sein.
  • Wie in 13A gezeigt, weist der Grafikprozessor 1310 einen Vertex-Prozessor 1305 und einen oder mehrere Fragment-Prozessoren 1315A-1315N auf (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N-1 und 1315N). Der Grafikprozessor 1310 kann verschiedene Shader-Programme über getrennte Logik ausführen, sodass der Vertex-Prozessor 1305 dafür optimiert ist, Operationen für Vertex-Shader-Programme auszuführen, während die ein oder mehreren Fragment-Prozessoren 1315A-1315N Fragment-Shading-Operationen (z. B. Pixel-Shading-Operationen) für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 1305 führt die Vertex-Verarbeitungsstufe der 3D-Grafik-Pipeline durch und generiert Grundelement- und Vertex-Daten. Die ein oder mehreren Fragment-Prozessoren 1315A-1315N verwenden die von dem Vertex-Prozessor 1305 generierten Grundelement- und Vertex-Daten, um einen Rahmenpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die ein oder mehreren Fragment-Prozessoren 1315A-1315N dafür optimiert, Fragment-Shader-Programme wie in der OpenGL-API vorgesehen auszuführen, die verwendet werden können, um ähnliche Operationen wie in einem Pixel-Shader-Programm, wie in der Direct 3D-API vorgesehen, durchzuführen.
  • Der Grafikprozessor 1310 weist zusätzlich eine oder mehrere Speicherverwaltungseinheiten (Memory Management Units, MMUs) 1320A-1320B, einen oder mehrere Caches 1325A-1325B und eine oder mehrere Schaltungszwischenverbindungen 1330A-1330B auf. Die ein oder mehreren MMUs 1320A-1320B sehen eine Abbildung von virtuellen zu physischen Adressen für den Grafikprozessor 1310, einschließlich des Vertex-Prozessors 1305 und/oder der ein oder mehreren Fragment-Prozessoren 1315A-1315N, vor, welche auf Vertex- oder Bild-/Texturdaten verweisen können, die im Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Texturdaten, die in den ein oder mehreren Caches 1325A-1325B gespeichert sind. In einer Ausführungsform können die ein oder mehreren MMUs 1320A-1320B mit anderen MMUs im System synchronisiert sein, einschließlich ein oder mehrerer MMUs, die mit den ein oder mehreren Anwendungsprozessoren 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 verknüpft sind, sodass jeder Prozessor 1205-1220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die ein oder mehreren Schaltungszwischenverbindungen 1330A-1330B ermöglichen es dem Grafikprozessor 1310, eine Schnittstellenverbindung mit anderen IP-Kernen im SoC gemäß Ausführungsformen entweder über einen internen Bus des SoC oder über eine Direktverbindung herzustellen.
  • Wie in 13B gezeigt, beinhaltet der Grafikprozessor 1340 die ein oder mehreren MMUs 1320A-1320B, Caches 1325A-1325B und Schaltungszwischenverbindungen 1330A-1330B des Grafikprozessors 1310 von 13A. Der Grafikprozessor 1340 beinhaltet einen oder mehrere Shader-Kerne 1355A-1355N (z. B., 1355A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N), wodurch eine vereinheitlichte Shader-Kern-Architektur bereitgestellt wird, in der ein einzelner Kern oder Kerntyp alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zum Implementieren von Vertex-Shadern, Fragment-Shadern und/oder Rechen-Shadern. Die genaue Anzahl vorhandener Shader-Kerne kann je nach Ausführungsform und Implementierung variieren. Zusätzlich beinhaltet der Grafikprozessor 1340 einen Zwischenkern-Aufgabenmanager 1345, der als Thread-Dispatcher zum Versenden von Ausführungsthreads an einen oder mehrere Shader-Kerne 1355A-1355N fungiert, und eine Kacheleinheit 1358 zum Beschleunigen von Kacheloperationen für das kachelbasierte Rendering, bei dem Rendering-Operationen für eine Szene in Bildraum unterteilt sind, beispielsweise um eine lokale räumliche Kohärenz in einer Szene auszunutzen oder um die Verwendung interner Caches zu optimieren.
  • Maschinenlernen - Übersicht
  • Ein Maschinenlernalgorithmus ist ein Algorithmus, der, basierend auf einem Satz von Daten, lernfähig ist. Ausführungsformen von Maschinenlernalgorithmen können dahingehend ausgestaltet sein, dass sie Abstraktionen auf hoher Ebene in einem Datensatz modellieren. Beispielsweise können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, zu welcher von mehreren Kategorien eine gegebene Eingabe gehört; Regressionsalgorithmen können einen numerischen Wert bei gegebener Eingabe ausgeben; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu generieren oder eine Text-zu-Sprache-Umwandlung und/oder eine Spracherkennung durchführen.
  • Eine beispielhafte Art von Maschinenlernalgorithmus ist ein neuronales Netz. Es gibt viele Arten von neuronalen Netzen; eine einfache Art eines neuronalen Netzes ist ein vorwärtsgerichtetes Netz (Feedforward-Netz). Ein vorwärtsgerichtetes Netz kann als azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. Typischerweise beinhaltet eine vorwärtsgerichtete Netztopologie eine Eingabeschicht und eine Ausgabeschicht, die durch wenigstens eine versteckte Schicht getrennt sind. Die versteckte Schicht wandelt Eingaben, die von der Eingabeschicht empfangen werden, in eine Darstellung um, die zum Generieren von Ausgaben in der Ausgabeschicht genutzt werden kann. Die Netzknoten sind über Kanten an den Knoten in benachbarten Schichten vollständig verbunden, aber es gibt keine Kanten zwischen Knoten innerhalb einer Schicht. Daten, die an den Knoten einer Eingabeschicht eines vorwärtsgerichteten Netzes empfangen werden, werden über eine Aktivierungsfunktion, welche die Zustände der Knoten jeder aufeinanderfolgenden Schicht in dem Netz berechnet, an die Knoten der Ausgabeschicht ausgebreitet (d. h. „vorwärtsgerichtet weitergeleitet“), basierend auf Koeffizienten („Gewichtungen“), die jeweils mit jeder der Kanten verknüpft sind, welche die Schichten verbinden. In Abhängigkeit von dem spezifischen Modell, das durch den ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe von dem Algorithmus des neuronalen Netzes verschiedene Formen annehmen.
  • Bevor ein Maschinenlernalgorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes angelernt bzw. trainiert. Das Trainieren eines neuronalen Netzes beinhaltet das Auswählen einer Netztopologie, das Verwenden eines Satzes von Trainingsdaten, welche ein Problem repräsentieren, das durch das Netz modelliert wird, und das Anpassen der Gewichtungen, bis das Netzmodell mit einem minimalen Fehler für alle Instanzen des Trainingsdatensatzes arbeitet. Beispielsweise wird während eines Trainingsprozesses mit überwachtem Lernen für ein neuronales Netz die Ausgabe, die durch das Netz in Reaktion auf die Eingabe, welche eine Instanz in einer Trainingsdatenmenge repräsentiert, erzeugt wird, mit der als „korrekt“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe repräsentiert, wird berechnet, und die Gewichtungen, die mit den Verbindungen verknüpft sind, werden angepasst, um diesen Fehler zu minimieren, wenn das Fehlersignal durch die Schichten des Netzes rückwärtsgerichtet ausgebreitet wird. Das Netz wird als „trainiert“ betrachtet, wenn die Fehler für jede der Ausgaben, die anhand der Instanzen des Trainingsdatensatzes generiert wird, minimiert sind.
  • Die Genauigkeit eines Maschinenlernalgorithmus kann durch die Qualität des Datensatzes, der verwendet wird, um den Algorithmus zu trainieren, signifikant beeinflusst werden. Der Trainingsprozess kann rechnerisch aufwändig sein und kann eine signifikante Menge an Zeit auf einem herkömmlichen Universalprozessor in Anspruch nehmen. Dementsprechend wird Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist zum Optimieren des Trainings von neuronalen Netzen besonderes nützlich, da sich die Berechnungen, die zum Anpassen der Koeffizienten in neuronalen Netzen durchgeführt werden, naturgemäß für parallele Implementierungen anbieten. Insbesondere sind viele Maschinenlernalgorithmen und Softwareanwendungen angepasst worden, um die Parallelverarbeitungshardware in Universal-Grafikverarbeitungsvorrichtungen zu nutzen.
  • 14 ist eine verallgemeinerte Darstellung eines Maschinenlern-Softwarestapels 1400. Eine Maschinenlernanwendung 1402 kann dafür ausgelegt sein, ein neuronales Netz unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netz zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 1402 kann Trainings- und Inferenzfunktionalität für ein neuronales Netz und/oder spezialisierte Software beinhalten, die verwendet werden kann, um ein neuronales Netz vor dem Einsatz zu trainieren. Die Maschinenlernanwendung 1402 kann jede Art von Maschinenintelligenz implementieren, was, ohne jedoch hierauf beschränkt zu sein, Bilderkennung, Abbildung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachenübersetzung beinhalten kann.
  • Eine Hardwarebeschleunigung für die Maschinenlernanwendung 1402 kann über ein Maschinenlern-Framework 1404 ermöglicht werden. Das Maschinenlern-Framework 1404 kann eine Bibliothek von Maschinenlern-Grundelementen bereitstellen. Maschinenlern-Grundelemente sind grundlegende Operationen, die gemeinhin von Maschinenlernalgorithmen durchgeführt werden. Ohne das Maschinenlern-Framework 1404 müssten Entwickler von Maschinenlernalgorithmen die Hauptrechenlogik, die mit dem Maschinenlernalgorithmus verknüpft ist, erzeugen und optimieren und die Rechenlogik dann erneut optimieren, wenn neue Parallelprozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung dafür ausgelegt sein, die notwendigen Berechnungen unter Verwendung der vom Maschinenlern-Framework 1404 bereitgestellten Grundelemente durchzuführen. Beispielhafte Grundelemente beinhalten Tensorfaltungen, Aktivierungsfunktionen und Pooling, bei denen es sich um Rechenoperationen handelt, die während des Trainings eines neuronalen Faltungsnetzes (CNN) durchgeführt werden. Das Maschinenlern-Framework 1404 kann außerdem Grundelemente zum Implementieren grundlegender Unterprogramme für lineare Algebra bereitstellen, die von vielen Maschinenlernalgorithmen wie etwa Matrix- und Vektoroperationen durchgeführt werden.
  • Das Maschinenlern-Framework 1404 kann Eingabedaten, die von der Maschinenlernanwendung 1402 empfangen werden, verarbeiten und die geeignete Eingabe für einen Rechen-Framework 1406 generieren. Das Rechen-Framework 1406 kann die zugrundeliegenden Anweisungen, die für den GPGPU-Treiber 1408 bereitgestellt werden, abstrahieren, um zu ermöglichen, dass das Maschinenlern-Framework 1404 die Hardwarebeschleunigung über die GPGPU-Hardware 1410 vorteilhaft nutzt, ohne dass das Maschinenlern-Framework 1404 die Architektur der GPGPU-Hardware 1410 sehr gut kennen muss. Zusätzlich kann das Rechen-Framework 1406 eine Hardwarebeschleunigung für das Maschinenlern-Framework 1404 über verschiedene Arten und Generationen der GPGPU-Hardware 1410 ermöglichen.
  • Maschinenlernen - Neuronale Netzimplementierungen
  • Die Rechenarchitektur, die durch hier beschriebene Ausführungsformen bereitgestellt wird, kann dafür ausgelegt sein, die Arten von Parallelverarbeitung durchzuführen, welche zum Trainieren und Einsetzen neuronaler Netze für das Maschinenlernen besonders geeignet sind. Ein neuronales Netz kann allgemein als Netz von Funktionen kategorisiert sein, die eine Graphenbeziehung aufweisen. Wie in der Technik bekannt, gibt es verschiedene Arten von neuronalen Netzimplementierungen, die beim Maschinenlernen verwendet werden. Eine beispielhafte Art von neuronalen Netzen ist das vorwärtsgerichtete Netz, wie vorstehend beschrieben.
  • Eine zweite beispielhafte Art von neuronalen Netzen ist das faltende neuronale Netz (Convolutional Neural Network, CNN). Ein CNN ist ein spezialisiertes vorwärtsgerichtetes neuronales Netz zum Verarbeiten von Daten, die eine bekannte, rasterartige Topologie aufweisen, wie etwa Bilddaten. Dementsprechend werden CNNs gemeinhin zum Berechnen von Computervisions- und Bilderkennungsanwendungen verwendet; sie können jedoch auch für andere Arten von Mustererkennung wie etwa Sprach- und Sprachenverarbeitung verwendet werden. Die Knoten in der CNN-Eingabeschicht sind in einen Satz von „Filtern“ organisiert (Merkmalsdetektoren, die durch die rezeptiven Felder, welche in der Retina zu finden sind, inspiriert sind), und die Ausgabe jedes Satzes von Filtern wird an Knoten in nachfolgenden Schichten des Netzes ausgebreitet. Die Berechnungen für ein CNN beinhalten das Anwenden der mathematischen Faltungsoperation auf jedes Filter, um die Ausgabe dieses Filters zu produzieren. Faltung ist eine spezielle Art einer mathematischen Operation, die von zwei Funktionen durchgeführt wird, um eine dritte Funktion zu erzeugen, welche eine modifizierte Version einer der zwei ursprünglichen Funktionen ist. In der Terminologie des Faltungsnetzes kann die erste Funktion für die Faltung als Eingabe bezeichnet sein, während die zweite Funktion als Faltungskernel bezeichnet sein kann. Die Ausgabe kann als Merkmalskarte bezeichnet sein. Beispielsweise kann die Eingabe in eine Faltungsschicht eine mehrdimensionale Anordnung von Daten sein, welche die verschiedenen Farbkomponenten eines Eingabebildes definiert. Bei dem Faltungskernel kann es sich um eine mehrdimensionale Anordnung von Parametern handeln, wobei die Parameter durch den Trainingsprozess für das neuronales Netz angepasst werden.
  • Rekurrente neuronale Netze (Recurrent Neural Networks, RNNs) sind eine Familie von vorwärtsgerichteten neuronalen Netzen, die Rückkopplungsverbindungen zwischen Schichten beinhalten. RNNs ermöglichen das Modellieren sequenzieller Daten durch gemeinsame Nutzung von Parameterdaten über verschiedene Abschnitte des neuronalen Netzes. Die Architektur für ein RNN beinhaltet Zyklen. Die Zyklen repräsentieren den Einfluss einen derzeitigen Wertes einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt, da wenigstens ein Teil der Ausgabedaten von dem RNN als Rückkopplung zum Verarbeiten nachfolgender Eingaben in einer Sequenz verwendet wird. Dieses Merkmal macht RNNs besonders nützlich für die Sprachenverarbeitung aufgrund der variablen Natur, in der Sprachendaten zusammengesetzt sein können.
  • Die nachstehend beschriebenen Figuren präsentieren beispielhafte vorwärtsgerichtete, CNN- und RNN-Netze und beschreiben außerdem einen allgemeinen Prozess zum jeweiligen Trainieren und Einsetzen jeder dieser Arten von neuronalen Netzen. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend sind, da jede hier beschriebene Ausführungsform und die dargestellten Konzepte generell auf tiefe neuronale Netze und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die vorstehend beschriebenen beispielhaften neuronalen Netze können verwendet werden, um tiefes Lernen (Deep Learning) durchzuführen. Tiefes Lernen ist Maschinenlernen unter Verwendung tiefer neuronaler Netze. Bei den tiefen neuronalen Netzen, die zum tiefen Lernen verwendet werden, handelt es sich um künstliche neuronale Netze, welche aus mehreren verdeckten Schichten zusammengesetzt sind, im Gegensatz zu flachen neuronalen Netzen, die nur eine einzige verdeckte Schicht enthalten. Tiefere neuronale Netze sind allgemein rechenintensiver, was das Trainieren angeht. Allerdings ermöglichen die zusätzlichen verdeckten Schichten des Netzes eine mehrstufige Mustererkennung, was zu einem reduzierten Ausgabefehler gegenüber flachen Maschinenlerntechniken führt.
  • Tiefe neuronale Netze, die zum tiefen Lernen verwendet werden, beinhalten typischerweise ein Frontend-Netz, um eine Merkmalserkennung durchzuführen, gekoppelt mit einem Backend-Netz, das ein mathematisches Modell repräsentiert, welches Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der Merkmalsrepräsentation, die für das Modell bereitgestellt wird, durchführen kann. Tiefes Lernen ermöglicht ein Durchführen des Maschinenlernens, ohne dass eine händische technische Bearbeitung der Merkmale für das Modell durchgeführt werden muss. Stattdessen können tiefe neuronale Netze Merkmale basierend auf der statistischen Struktur oder Korrelation in den Eingabedaten erlernen. Die erlernten Merkmale können für ein mathematisches Modell bereitgestellt werden, das detektierte Merkmale auf eine Ausgabe abbilden kann. Das mathematische Modell, welches durch das Netz verwendet wird, ist im Allgemeinen für die spezifische Aufgabe, die ausgeführt werden soll, spezialisiert, und unterschiedliche Modelle werden verwendet, um unterschiedliche Aufgaben auszuführen.
  • Sobald das neuronale Netz strukturiert ist, kann ein Lernmodell auf das Netz angewendet werden, um das Netz dafür zu trainieren, spezifische Aufgaben auszuführen. Das Lernmodell beschreibt, wie die Gewichtungen innerhalb des Modells angepasst werden sollen, um den Ausgabefehler des Netzes zu reduzieren. Die rückwärtige Ausbreitung von Fehlern ist ein übliches Verfahren, das verwendet wird, um neuronale Netze zu trainieren. Ein Eingabevektor wird dem Netz zur Verarbeitung präsentiert. Die Ausgabe des Netzes wird mit der gewünschten Ausgabe unter Verwendung einer Verlustfunktion verglichen, und ein Fehlerwert wird für jedes der Neuronen in der Ausgabeschicht berechnet. Die Fehlerwerte werden dann rückwärtig ausgebreitet, bis jedes Neuron einen zugehörigen Fehlerwert aufweist, der ungefähr seinen Beitrag zur ursprünglichen Ausgabe repräsentiert. Das Netz kann dann unter Verwendung eines Algorithmus wie etwa dem Algorithmus des stochastischen Gradientenverfahrens aus diesen Fehlern lernen, um die Gewichtungen des neuronalen Netzes zu aktualisieren.
  • 15A-15B veranschaulichen ein beispielhaftes faltendes neuronales Netz. 15A veranschaulicht verschiedene Schichten innerhalb eines CNNs. Wie in 15A gezeigt, kann ein beispielhaftes CNN, das verwendet wird, um eine Bildverarbeitung zu modellieren, eine Eingabe 1502 empfangen, welche die roten, grünen und blauen (RGB) Komponenten eines Eingabebilds beschreibt. Die Eingabe 1502 kann durch mehrere Faltungsschichten (z. B. die erste Faltungsschicht 1504, die zweite Faltungsschicht 1506) verarbeitet werden. Die Ausgabe aus den mehreren Faltungsschichten kann optional durch einen Satz von vollständig verbundenen Schichten 1508 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht weisen vollständige Verbindungen zu allen Aktivierungen in der vorhergehenden Schicht auf, wie vorstehend für ein vorwärtsgerichtetes Netz beschrieben wird. Die Ausgabe aus den vollständig verbundenen Schichten 1508 kann verwendet werden, um ein Ausgabeergebnis aus dem Netz zu generieren. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 1508 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen nutzen vollständig verbundene Schichten 1508. Beispielsweise kann in einigen Implementierungen die zweite Faltungsschicht 1506 die Ausgabe für das CNN generieren.
  • Die Faltungsschichten sind spärlich verbunden, was von der traditionellen Konfiguration neuronaler Netze, die in den vollständig verbundenen Schichten 1508 zu finden ist, abweicht. Die Schichten traditioneller neuronaler Netze sind vollständig verbunden, so dass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Allerdings sind die Faltungsschichten spärlich verbunden, da die Ausgabe der Faltung eines Feldes (anstelle des jeweiligen Zustandswertes von jedem der Knoten in dem Feld) wie dargestellt in die Knoten der nachfolgenden Schicht eingegeben wird. Die Kernel, die mit Faltungsschichten verknüpft sind, führen Faltungsoperationen aus, deren Ausgabe an die nächste Schicht gesendet wird. Die Dimensionalitätsreduktion, die innerhalb der Faltungsschichten durchgeführt wird, ist ein Aspekt, der es ermöglicht, das CNN zum Verarbeiten großer Bilder zu skalieren.
  • 15B veranschaulicht beispielhafte Rechenstufen innerhalb einer Faltungsschicht eines CNN. Die Eingabe in eine Faltungsschicht 1512 eines CNN kann in drei Stufen einer Faltungsschicht 1514 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 1516, eine Detektorstufe 1518 und eine Pooling-Stufe 1520 beinhalten. Die Faltungsschicht 1514 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzes kann Merkmalskartendaten ausgeben oder Eingaben für eine vollständig verbundene Schicht bereitstellen, beispielsweise um einen Klassifizierungswert für die Eingabe in das CNN zu generieren.
  • Die Faltungsstufe 1516 führt mehrere Faltungen parallel aus, um ein Satz von linearen Aktivierungen zu erzeugen. Die Faltungsstufe 1516 kann eine affine Transformation beinhalten, bei der es sich um eine beliebige Transformation handelt, die als lineare Transformation plus Translation spezifiziert sein kann. Affine Transformationen beinhalten Drehungen, Umsetzungen, Skalierung und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit spezifischen Regionen in der Eingabe verbunden sind, welche als die lokale Region, die mit dem Neuron verknüpft ist, bestimmt werden kann. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichtungen der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe aus der Faltungsstufe 1516 definiert einen Satz linearer Aktivierungen, die durch nachfolgende Stufen der Faltungsschicht 1514 verarbeitet werden.
  • Die linearen Aktivierungen können durch eine Detektorstufe 1518 verarbeitet werden. In der Detektorstufe 1518 wird jede lineare Aktivierung durch eine nichtlineare Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des gesamten Netzes, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Es können mehrere Arten von nichtlinearen Aktivierungsfunktionen verwendet werden. Eine spezielle Art ist die gleichgerichtete lineare Einheit (ReLU), die eine als f(x) = max(0, x) definierte Aktivierungsfunktion verwendet, so dass die Aktivierung bei 0 begrenzt ist.
  • Die Pooling-Stufe 1520 verwendet eine Pooling-Funktion, welche die Ausgabe der zweiten Faltungsschicht 1506 durch eine zusammenfassende Statistik der benachbarten Ausgaben ersetzt. Die Pooling-Funktion kann verwendet werden, um eine Translationsinvarianz in das neuronale Netz einzuführen, so dass kleine Translationen in Bezug auf die Eingabe die (zu Pools) zusammengefassten Ausgaben nicht ändern. Invarianz in Bezug auf lokale Translation kann in Szenarien nützlich sein, in denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger ist als der genaue Ort des Merkmals. Verschiedene Arten von Pooling-Funktionen können während der Pooling-Stufe 1520 verwendet werden, einschließlich Max-Pooling, Mittelwert-Pooling und 12-Norm-Pooling. Zusätzlich enthalten einige CNN-Implementierungen keine Pooling-Stufe. Stattdessen substituieren solche Implementierungen eine zusätzliche Faltungsstufe, die eine vergrößerte Schrittweite in Relation zu früheren Faltungsstufen aufweist.
  • Die Ausgabe aus der Faltungsschicht 1514 kann dann durch die nächste Schicht 1522 verarbeitet werden. Die nächste Schicht 1522 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 1508 sein. Beispielsweise kann die erste Faltungsschicht 1504 von 15A Ausgaben an die zweite Faltungsschicht 1606 übermitteln, während die zweite Faltungsschicht Ausgaben an eine erste Schicht der vollständig verbundenen Schichten 1508 übermitteln kann.
  • 16 veranschaulicht ein beispielhaftes rekurrentes neuronales Netz. In einem rekurrenten neuronalen Netz (Recurrent Neural Network, RNN) beeinflusst der vorhergehende Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNNs können auf verschiedene Arten und Weisen unter Verwendung diverser Funktionen aufgebaut sein. Die Verwendung von RNNs dreht sich allgemein um die Verwendung mathematischer Modelle, um die Zukunft basierend auf einer früheren Eingabefolge vorherzusagen. Beispielsweise kann ein RNN verwendet werden, um eine statistische Sprachenmodellierung durchzuführen, um ein anstehendes Wort bei einer gegebenen früheren Wortfolge vorherzusagen. Das veranschaulichte RNN 1600 kann so beschrieben werden, dass es Folgendes aufweist: eine Eingabeschicht 1602, die einen Eingabevektor empfängt, verdeckte Schichten 1604, um eine rekurrente Funktion zu implementieren, einen Rückkopplungsmechanismus 1605, um ein „Gedächtnis“ früherer Zustände zu ermöglichen, und eine Ausgabeschicht 1606, um ein Ergebnis auszugeben. Das RNN 1600 arbeitet basierend auf Zeitstufen. Der Zustand des RNN an einer gegebenen Zeitstufe wird basierend auf der früheren Zeitstufe über den Rückkopplungsmechanismus 1605 beeinflusst. Für eine gegebene Zeitstufe ist der Zustand der verdeckten Schichten 1604 durch den früheren Zustand und die Eingabe an einer aktuellen Zeitstufe definiert. Eine anfängliche Eingabe (x1) an einer ersten Zeitstufe kann durch die verdeckte Schicht 1604 verarbeitet werden. Eine zweite Eingabe (x2) kann durch die verdeckte Schicht 1604 unter Verwendung von Zustandsinformationen, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden, verarbeitet werden. Ein gegebener Zustand kann als st = f(Uxt + Wst-1) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion f ist allgemein eine Nichtlinearität, wie etwa die Hyperbeltangens-Funktion (Tanh) oder eine Variante der Gleichrichter-Funktion f(x) = max(0, x). Allerdings kann die spezifische mathematische Funktion, die in den verdeckten Schichten 1604 verwendet wird, in Abhängigkeit von den Einzelheiten der spezifischen Implementierung des RNN 1600 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzen können Variationen dieser Netze ermöglicht werden. Ein Beispiel einer RNN-Variante ist das RNN mit langem Kurzzeitgedächtnis (Long Short-Term Memory, LSTM). LSTM-RNNs sind zum Lernen von Langzeitabhängigkeiten fähig, die zum Verarbeiten längerer Sprachensequenzen notwendig sein können. Eine Variante des CNN ist ein faltendes tiefes Glaubensnetz, welches eine Struktur ähnlich einem CNN aufweist und auf eine Weise ähnlich einem tiefen Glaubensnetz trainiert wird. Ein tiefes Glaubensnetz (Deep Belief Network, DBN) ist ein generatives neuronales Netz, das aus mehreren Schichten von stochastischen (Zufalls-) Variablen besteht. DBNs können schichtweise unter Verwendung von gierigem nicht überwachtem Lernen trainiert werden. Die erlernten Gewichtungen des DBN können dann verwendet werden, um vortrainierte neuronale Netze durch Bestimmen eines optimalen anfänglichen Satzes von Gewichtungen für das neuronale Netz bereitzustellen.
  • 17 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzes. Sobald ein gegebenes Netz für eine Aufgabe strukturiert worden ist, wird das neuronale Netz unter Verwendung eines Trainingsdatensatzes 1702 trainiert. Verschiedene Trainings-Frameworks sind entwickelt worden, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Beispielsweise kann das Maschinenlern-Framework 1404 von 14 als Trainings-Framework 1704 konfiguriert sein. Das Trainings-Framework 1704 kann in ein untrainiertes neuronales Netz 1706 einhaken und ermöglichen, dass das untrainierte neuronale Netz unter Verwendung der hier beschriebenen Parallelverarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netz 1708 zu generieren. Um den Trainingsprozess zu starten, können die anfänglichen Gewichtungen zufällig oder durch Vortrainieren unter Verwendung eines tiefen Glaubensnetzes gewählt werden. Der Trainingszyklus wird dann entweder in einer überwachten oder einer nicht überwachten Art ausgeführt.
  • Überwachtes Lernen ist ein Lernverfahren, bei dem das Training als eine vermittelte Operation ausgeführt wird, etwa wenn der Trainingsdatensatz 1702 eine Eingabe enthält, die mit der gewünschten Ausgabe für die Eingabe gepaart ist, oder wenn der Trainingsdatensatz eine Eingabe enthält, die eine bekannte Ausgabe aufweist und die Ausgabe des neuronalen Netzes manuell eingestuft wird. Das Netz verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einer Menge erwarteter oder gewünschter Ausgaben. Fehler werden dann rückwärts durch das System ausgebreitet. Das Trainings-Framework 1704 ermöglicht Anpassungen, um die Gewichtungen, die das untrainierte neuronale Netz 1706 steuern, anzupassen. Das Trainings-Framework 1704 kann Tools bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz 1706 zu einem Modell konvergiert, das zum Generieren korrekter Antworten basierend auf bekannten Eingabedaten geeignet ist. Der Trainingsprozess findet wiederholt statt, wenn die Gewichtungen des Netzes angepasst werden, um die Ausgabe, die durch das neuronale Netz generiert wird, zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine statistisch gewünschte Genauigkeit erreicht, die mit einem trainierten neuronalen Netz 1708 verknüpft ist. Das trainierte neuronale Netz 1708 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zum Generieren eines Inferenzergebnisses 1714 basierend auf einer Eingabe neuer Daten 1712 zu implementieren.
  • Nicht überwachtes Lernen ist ein Lernverfahren, bei dem das Netz versucht, sich selbst unter Verwendung nicht gekennzeichneter Daten zu trainieren. Somit wird der Trainingsdatensatz 1702 für nicht überwachtes Lernen Eingabedaten ohne irgendwelche verknüpften Ausgabedaten beinhalten. Das untrainierte neuronale Netz 1706 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingabe erlernen und bestimmen, wie individuelle Eingaben zu dem gesamten Satz von Daten in Beziehung stehen. Nicht überwachtes Trainieren kann verwendet werden, um eine selbstorganisierende Karte zu generieren, welche eine Art von trainiertem neuronalen Netz 1708 ist, das zum Durchführen von Operationen fähig ist, die zum Reduzieren der Dimensionalität von Daten nützlich sind. Nicht überwachtes Trainieren kann außerdem verwendet werden, um eine Anomaliedetektion durchzuführen, was die Identifizierung von Datenpunkten in einem Eingabedatensatz, die von den normalen Mustern der Daten abweichen, ermöglicht.
  • Variationen von überwachtem und nicht überwachtem Trainieren können ebenfalls eingesetzt werden. Halbüberwachtes Lernen ist eine Technik, bei der der Trainingsdatensatz 1802 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten derselben Verteilung enthält. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der Eingabedaten kontinuierlich verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht, dass sich das trainierte neuronale Netz 1708 an die neuen Daten 1712 anpasst, ohne das Wissen zu vergessen, das dem Netz während des anfänglichen Trainierens beigebracht wurde.
  • Überwacht oder nicht überwacht kann der Trainingsprozess für besonders tiefe neuronale Netze für einen einzelnen Rechenknoten zu rechenintensiv sein. Anstatt einen einzelnen Rechenknoten zu verwenden, kann ein verteiltes Netz von Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 18 ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten verwendet, um ein überwachtes oder nicht überwachtes Trainieren eines neuronalen Netzes durchzuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Host-Prozessoren und einen oder mehrere Universal-Verarbeitungsknoten enthalten. Wie dargestellt, kann verteiltes Lernen unter Verwendung von Modellparallelität 1802, Datenparallelität 1804 oder einer Kombination von Modell- und Datenparallelität 1804 durchgeführt werden.
  • Bei der Modellparallelität 1802 können unterschiedliche Rechenknoten in einem verteilten System Trainingsberechnungen für unterschiedliche Teile eines einzelnen Netzes durchführen. Beispielsweise kann jede Schicht eines neuronalen Netzes durch einen anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen der Modellparallelität zählt unter anderem die Fähigkeit, auf besonders große Modelle skaliert zu werden. Das Aufteilen der Berechnungen, die mit unterschiedlichen Schichten des neuronalen Netzes verknüpft sind, ermöglicht das Trainieren von sehr großen neuronalen Netzen, in denen die Gewichtungen aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann Modellparallelität insbesondere beim Durchführen von nicht überwachtem Trainieren großer neuronaler Netze nützlich sein.
  • Bei der Datenparallelität 1804, verfügen die die unterschiedlichen Knoten des verteilten Netzes über eine vollständige Instanz des Modells, und jeder Knoten empfängt einen anderen Abschnitt der Daten. Die Ergebnisse von den unterschiedlichen Knoten werden dann kombiniert. Auch wenn unterschiedliche Ansätze für eine Datenparallelität möglich sind, erfordern die datenparallelen Trainingsansätze allesamt eine Technik zum Kombinieren von Ergebnissen und Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielhafte Ansätze zum Kombinieren von Daten beinhalten eine Parametermittelwertbildung und eine aktualisierungsbasierte Datenparallelität. Die Parametermittelwertbildung trainiert jeden Knoten anhand einer Teilmenge der Trainingsdaten und stellt die globalen Parameter (z. B. Gewichtungen, Abweichungen) auf den Mittelwert der Parameter aus jedem Knoten ein. Die Parametermittelwertbildung verwendet einen zentralen Parameterserver, der die Parameterdaten hält. Die aktualisierungsbasierte Datenparallelität ist ähnlich der Mittelwertbildung, außer
  • dass anstelle des Übertragens von Parametern von den Knoten an den ParameterServer die Aktualisierungen für das Modell übertragen werden. Zusätzlich kann die aktualisierungsbasierte Datenparallelität auf dezentrale Weise durchgeführt werden, wobei die Aktualisierungen komprimiert und zwischen Knoten übertragen werden.
  • Eine kombinierte Modell- und Datenparallelität 1806 kann beispielsweise in einem verteilten System implementiert sein, in dem jeder Rechenknoten mehrere GPUs enthält. Jeder Knoten kann über eine vollständige Instanz des Modells verfügen, wobei separate GPUs innerhalb jedes Knotens verwendet werden, um unterschiedliche Teile des Modells zu trainieren.
  • Verteiltes Trainieren weist gegenüber dem Trainieren auf einer einzelnen Maschine einen erhöhten Overhead auf. Allerdings können die hier beschriebenen Parallelprozessoren und GPGPUs jeweils verschiedene Techniken implementieren, um den Overhead des verteilten Trainierens zu reduzieren, was Techniken zum Ermöglichen eines GPU-zu-GPU-Datentransfers mit hoher Bandbreite und eine beschleunigte entfernte Datensynchronisation einschließt.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinenlernen kann angewendet werden, um eine Vielzahl von technologischen Problemen zu lösen, die, ohne jedoch hierauf beschränkt zu sein, Computervision, autonomes Fahren und Navigation, Spracherkennung und Sprachenverarbeitung beinhalten. Computervision ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen gewesen. Anwendungen von Computervision reichen von der Reproduktion menschlicher Sehfähigkeit, wie etwa Gesichtserkennung, bis zur Erstellung neuer Kategorien von Sehfähigkeiten. Beispielsweise können Computervisionsanwendungen dafür ausgelegt sein, Schallwellen aus den Vibrationen, die in Objekte induziert werden, welche in einem Video sichtbar sind, zu erkennen. Parallelprozessorbeschleunigtes Maschinenlernen macht es möglich, dass Computervisionsanwendungen unter Verwendung eines signifikant größeren Trainingsdatensatzes als bislang machbar trainiert werden, und ermöglicht, dass inferenzierende Systeme unter Verwendung von Niedrigenergie-Parallelprozessoren eingesetzt werden.
  • Parallelprozessorbeschleunigtes Maschinenlernen umfasst Anwendungen zum autonomen Fahren, die Spur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung beinhalten. Techniken für ein beschleunigtes Maschinenlernen können verwendet werden, um Fahrmodelle basierend auf Sätzen von Daten zu trainieren, welche die geeigneten Antworten für spezifische Trainingseingaben definieren. Die hier beschriebenen Parallelprozessoren können ein schnelles Trainieren der zunehmend komplexen neuronalen Netze, welche für Lösungen zum autonomen Fahren verwendet werden, ermöglichen, und sie ermöglichen den Einsatz von inferenzierenden Niedrigenergie-Prozessoren in einer mobilen Plattform, die sich für eine Integration in autonome Fahrzeuge eignet.
  • Parallelprozessorbeschleunigte tiefe neuronale Netze haben Maschinenlernansätze für eine automatische Spracherkennung (Automatic Speech Recognition, ASR) ermöglicht. ASR beinhaltet die Erstellung einer Funktion, welche die wahrscheinlichste linguistische Sequenz bei einer gegebenen akustischen Eingabesequenz berechnet. Beschleunigtes Maschinenlernen unter Verwendung tiefer neuronaler Netze hat die Ersetzung der „Hidden Markov“ Modelle (HMMs) und der Gaußschen Mischmodelle (GMMs), die früher für ASR verwendet wurden, ermöglicht.
  • Parallelprozessorbeschleunigtes Maschinenlernen kann außerdem verwendet werden, um die Verarbeitung natürlicher Sprachen zu beschleunigen. Prozeduren für ein automatisches Lernen können statistische Inferenzalgorithmen verwenden, um Modelle zu produzieren, die gegen fehlerhafte oder unbekannte Eingaben robust sind. Beispielhafte Anwendungen für einen Prozessor zur Verarbeitung natürlicher Sprachen beinhalten eine automatische Maschinenübersetzung zwischen menschlichen Sprachen.
  • Parallelverarbeitungsplattformen, die für das Maschinenlernen verwendet werden, können in Trainingsplattformen und Einsatzplattformen unterteilt werden. Trainingsplattformen sind allgemein hochparallel und beinhalten Optimierungen, um das Multi-GPU-Einzelknoten-Trainieren und Mehrknoten-Multi-GPU-Training zu beschleunigen, während eingesetzte Maschinenlernplattformen (z. B. inferenzierende Plattformen) im Allgemeinen Niedrigenergie-Parallelprozessoren aufweisen, die zum Gebrauch in Produkten wie etwa Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • GPGPU mit Matrix-Beschleunigungslogik
  • 19 ist ein Blockschaltbild eines Datenverarbeitungssystems 1900 gemäß einer Ausführungsform. Das Datenverarbeitungssystem 1900 ist ein heterogenes Verarbeitungssystem mit einem Prozessor 1902, einem vereinheitlichten Speicher 1910 und einer GPGPU 1920, die eine Beschleunigungslogik für das maschinelle Lernen beinhaltet. Bei dem Prozessor 1902 und der GPGPU 1920 kann es sich um einen beliebigen der hier beschriebenen Prozessoren und GPGPU-/Parallelprozessoren handeln. Der Prozessor 1902 kann Anweisungen für einen Compiler 1915 ausführen, der im Systemspeicher 1912 gespeichert ist. Der Compiler 1915 führt Anweisungen auf dem Prozessor 1902 aus, um Quellcode 1914A in den kompilierten Code 1914B zu kompilieren. Der kompilierte Code 1914B kann Anweisungen beinhalten, die von dem Prozessor 1902 ausgeführt werden können, und/oder Anweisungen, die von der GPGPU 1920 ausgeführt werden können. Während der Kompilierung kann der Compiler 1915 Operationen zum Einfügen von Metadaten durchführen, was Hinweise auf den Grad der Datenparallelität im kompilierten Code 1914B einschließt, und/oder Hinweise zum Datenstandort, der mit Threads verknüpft ist, die basierend auf dem kompilierten Code 1914B versendet werden sollen. Der Compiler 1915 kann die Informationen beinhalten, welche notwendig sind, um solche Operationen durchzuführen, oder die Operationen können mit Unterstützung einer Laufzeitbibliothek 1916 durchgeführt werden. Die Laufzeitbibliothek 1916 kann auch den Compiler 1915 bei der Kompilierung des Quellcodes 1914A unterstützen und kann außerdem Anweisungen beinhalten, die zur Laufzeit mit dem kompilierten Code 1914B verbunden sind, um die Ausführung der kompilierten Anweisungen auf der GPGPU 1920 zu ermöglichen.
  • Der vereinheitlichte Speicher 1910 stellt einen vereinheitlichten Adressraum dar, auf den durch den Prozessor 1902 und die GPGPU 1920 zugegriffen werden kann. Der vereinheitlichte Speicher kann den Systemspeicher 1912 sowie den GPGPU-Speicher 1918 beinhalten. Der GPGPU-Speicher 1918 ist ein Speicher innerhalb eines Adressraums der GPGPU 1920 und kann Teile oder die Gesamtheit des Systemspeichers 1912 beinhalten. In einer Ausführungsform kann der GPGPU-Speicher 1918 auch wenigstens einen Teil eines beliebigen Speichers beinhalten, der speziell für die ausschließliche Verwendung durch die GPGPU 1920 vorgesehen ist. In einer Ausführungsform kann der kompilierte Code 1914B, der im Systemspeicher 1912 gespeichert ist, für den Zugriff durch die GPGPU 1920 in den GPGPU-Speicher 1918 abgebildet werden.
  • Die GPGPU 1920 beinhaltet mehrere Rechenblöcke 1924A-1924N, die eine oder mehrere der hier beschriebenen verschiedenen Recheneinheiten oder Ausführungselementen beinhalten können. In einer Ausführungsform beinhaltet die GPGPU 1920 zusätzlich einen Matrixbeschleuniger 1923, welcher eine oder mehrere Recheneinheiten mit speziellen Funktionen umfassen kann, die dafür konzipiert sind, einen Teilsatz von Matrixoperationen (z. B. Skalarprodukt, Multiplizieren/Addieren etc.) zu beschleunigen. Die GPGPU 1920 kann auch einen Satz von Ressourcen umfassen, die von den Rechenblöcken 1924A-1924N und dem Matrixbeschleuniger 1923 gemeinsam genutzt werden können, was, ohne jedoch hierauf eingeschränkt zu sein, eine Satz von Registern 1925, ein Energie- und Leistungsmodul 1926 und einen Cache 1927 einschließt. In einer Ausführungsform beinhalten die Register 1925 direkt oder indirekt zugängliche Register, wobei die indirekt zugänglichen Register für die Verwendung durch den Matrixbeschleuniger 1923 optimiert sind. Das Energie- und Leistungsmodul 1926 kann dafür ausgelegt sein, die Leistungsbereitstellung und die Taktfrequenzen für die Rechenblöcke 1924A-1924N anzupassen, um Gatterruhezustand-Komponenten innerhalb der Rechenblöcke 1924A-1924N mit Energie zu versorgen. In verschiedenen Ausführungsformen kann der Cache 1927 einen Anweisungscache und/oder einen Datencache einer tieferliegenden Ebene beinhalten.
  • Die GPGPU 1920 kann zusätzlich einen L3-Datencache 1930 beinhalten, der verwendet werden kann, um Daten zwischenzuspeichern, auf die von dem vereinheitlichten Speicher 1910 durch den Matrixbeschleuniger 1923 und/oder die Rechenelemente innerhalb der Rechenblöcke 1924A-1924N zugegriffen wird. In einer Ausführungsform beinhaltet der L3-Datencache 1930 den gemeinsam genutzten lokalen Speicher 1932, der von den Rechenelementen in den Rechenblöcken 1524A-1524N und dem Matrixbeschleuniger 1923 gemeinsam genutzt werden kann.
  • In einer Ausführungsform beinhaltet die GPGPU 1920 Logik zur Handhabung von Anweisungen, wie etwa eine Abruf- und Decodiereinheit 1921 und eine Zeitplanungssteuerung 1922. Die Abruf- und Decodiereinheit 1921 beinhaltet eine Abrufeinheit und eine Decodiereinheit, um Anweisungen zur Ausführung durch einen oder mehrere der Rechenblöcke 1924A-1924N oder den Matrixbeschleuniger 1923 abzurufen und zu decodieren. Die Anweisungen können für die entsprechende Funktionseinheit in dem Rechenblock 1924A-1924N oder dem Matrixbeschleuniger über die Zeitplanungssteuerung 1922 zeitlich geplant werden. In einer Ausführungsform handelt es sich bei der Zeitplanungssteuerung 1922 um eine ASIC, die dafür konfiguriert werden kann, fortgeschrittene Zeitplanungsoperationen durchzuführen. In einer Ausführungsform ist die Zeitplanungssteuerung 1922 eine Mikrosteuerung oder ein Kern mit niedriger Energie pro Anweisung, der in der Lage ist, Zeitplanerbefehle auszuführen, die von einem Firmware-Modul geladen werden.
  • In einer Ausführungsform können einige der von den Rechenblöcken 1924A-1924N durchzuführenden Funktionen direkt geplant oder an den Matrixbeschleuniger 1923 ausgelagert werden. In verschiedenen Ausführungsformen beinhaltet der Matrixbeschleuniger 1923 eine Verarbeitungselementlogik, die dafür ausgelegt ist, Matrixrechenoperationen effizient durchzuführen, etwa Multiplizier- und Addieroperationen und Skalarprodukt-Operationen, die von 3D-Grafik- oder Rechen-Shader-Programmen verwendet werden. In einer Ausführungsform kann der Matrixbeschleuniger 1923 dafür ausgelegt sein, Operationen zu beschleunigen, die von Maschinenlern-Frameworks verwendet werden. In einer Ausführungsform ist der Matrixbeschleuniger 1923 eine anwendungsspezifische integrierte Schaltung, die explizit dafür ausgelegt ist, einen spezifischen Satz von parallelen Matrixmultiplikations- und/oder Additionsoperationen durchzuführen. In einer Ausführungsform handelt es sich bei dem Matrixbeschleuniger 1923 um eine feldprogrammierbare Gatteranordnung (Field Programmable Gate Array, FPGA), die eine feste Funktionslogik bereitstellt, welche zwischen den Arbeitslasten aktualisiert werden kann. Der Satz von Matrixoperationen, die von dem Matrixbeschleuniger 1923 durchgeführt werden können, kann hinsichtlich der Operationen, welche von den Rechenblöcken 1924A-1924N durchgeführt werden können, eingeschränkt sein. Allerdings ist der Matrixbeschleuniger 1923 unter Umständen in der Lage, diese Operationen mit einem signifikant höheren Durchsatz in Bezug auf die Rechenblöcke 1924A-1924N durchzuführen.
  • Beispielhafte GEMM-Operationen
  • Grafik-, Vektor- und Parallelprozessoren beinhalten im Allgemeinen eine oder mehrere Anweisungen, die allgemeine Matrixmultiplikationsoperationen (GEneral Matrix Multiply, GEMM) beschleunigen. Eine Matrixmultiplikation kann für eine MxK-Matrix und eine KxN-Matrix durchgeführt werden, um eine MxN-Matrix zu generieren. Eine große Matrixmultiplikation kann durchgeführt werden, indem die großen Matrizen in Blöcke unterteilt werden, bei denen es sich um rechteckige Teile der großen Matrizen handelt. Die Blöcke können dann in eine Verarbeitungsressource abgerufen und verarbeitet werden. In einer Ausführungsform kann eine Multithread-Verarbeitungsressource, wie etwa eine Ausführungseinheit, ein Grafikkern oder eine Recheneinheit wie hier beschrieben, einen Hardware-Thread beauftragen, jeden Satz von Blöcken zu verarbeiten, um Ausgaben zu generieren, die in eine Ausgabematrix gespeichert werden sollen. Jeder Thread kann die Matrizen entlang der K-Dimension durchlaufen und die Produktausgabe akkumulieren. Basierend auf der Verfügbarkeit von Registern in der Verarbeitungsressource können mehrere Blöcke in einem einzelnen Thread verarbeitet werden.
  • 20 veranschaulicht eine allgemeine Matrixmultiplikationsoperation an Quell- und Zielmatrizen. Veranschaulicht wird eine GEMM-Operation mit einfacher Genauigkeit (z. B. SGEMM), in der eine MxK-Matrix (A-Matrix 2002) mit einer KxN-Matrix (B-Matrix 2004) multipliziert wird, um eine MxN-Ausgabematrix (C-Matrix 2006) zu generieren. Die veranschaulichten Matrizen können Blöcke größerer Matrizen sein. Die Größe eines Blocks kann von der SIMD-Breite der Maschine (z. B. simdWidth x simdWidth) abhängen. Beispielsweise können bei einem SIMD8-Verarbeitungselement A, B und C 8x8-Blöcke von Matrixelementen sein. In einer Ausführungsform ist die A-Matrix 2002 in einem gemeinsam genutzten Speicher des Verarbeitungselements gespeichert, während die B-Matrix 2004 in einem L3-Cache gespeichert ist und die C-Matrix 2006 in Registern innerhalb der allgemeinen Registerdatei der Verarbeitungsressource gespeichert ist, wenngleich andere Ausführungsformen unterschiedlich ausgelegt sein können. Beispielhafte Register (z. B rxx) und Kanäle (z. B. 0-7) für Elemente der Matrizen werden veranschaulicht. Während des Betriebs können Matrixelemente aus den angegebenen Quellen abgerufen und in den veranschaulichten Registers und Kanälen für die Elemente der Matrizen gespeichert werden. In einer Ausführungsform handhabt die madv-Anweisung eine dünne Besetzung an den <src2>-Daten (A-Matrix), ohne irgendeine dünne Besetzung zu nutzen, die in den <src1>-Daten (B-Matrix) vorliegt. In einer solchen Ausführungsform wird <src2> (z. B. Matrix A) für dünn besetzte Eingaben verwendet.
  • In einer Ausführungsform kann die SGEMM-Operation über Anweisungen mit dem in Tabelle 1 gezeigten Format implementiert sein. Tabelle 1 - Grafikprozessor-Anweisungsformat
    <pred> <opcode> <cmod> <dst> <src0> <src1> <src2>
  • Das Anweisungsformat von Tabelle 1 ist eine Version der in 7 gezeigten Anweisungsformate 710, 730. Für das Anweisungsformat von Tabelle 1 definiert <opcode> die durchzuführende Operation, wobei <dst> der Operand ist, der das von der Operation produzierte Ergebnis speichert, und <src0>, <src1> und <src2> drei Quelloperanden sind. Zwei Modifizierer (<pred>, <cmod>) können optional verwendet werden; <pred> ist das Prädikat (predicate), welches ein Flag-Register (f0.0) als Bitmaske verwendet, um bestimmte Kanäle abzudecken, während das Schreiben von <dst> und <cmod> im Allgemeinen von einer cmp-Anweisung (compare, vergleichen) verwendet wird, um, basierend auf dem Vergleichsergebnis, das von Quelloperanden produziert wird, eine Bitmaske im Flag-Register zu generieren. Beispielsweise setzt eine Anweisung cmp (ne)f0. 0 ein Bit im Flag-Register (f0. 0), falls die jeweiligen Kanäle in <src0> und <src1> nicht gleich sind.
  • Eine Anweisungssequenz für einen Teil von SGEMM-Operationen wird in Tabelle 2 gezeigt. Tabelle 2 - SGEMM-Operationssequenz für k=0
    Zeile Opcode DST SRC0 SRC1 SRC2
    00 mad r34.0<1>:f r34.0<1,0>:f r10.0<1,0>:f r76.0<0>:f
    01 mad r35.0<1>:f r35.0<1,0>:f r10.0<1,0>:f r76.1<0>:f
    02 mad r36.0<1>:f r36.0<1,0>:f r10.0<1,0>:f r76.2<0>:f
    03 mad r37.0<1>:f r37.0<1,0>:f r10.0<1,0>:f r76.3<0>:f
    04 mad r38.0<1>:f r38.0<1,0>:f r10.0<1,0>:f r76.4<0>:f
    ... ...
    07 mad r41.0<1>:f r41.0<1,0>:f r10.0<1,0>:f r76.7<0>:f
  • Tabelle 2 zeigt eine beispielhafte Anweisungssequenz zum Durchführen von Operationen an den Matrizen von 20, wobei k=0 ist. Eine ähnliche Sequenz wird für k=1 bis 7 wiederholt. Eine höhere Schleife lädt den nächsten Satz von Elementen aus der A-Matrix und B-Matrix und akkumuliert ferner in derselben C-Matrix, die in der allgemeinen Registerdatei gespeichert ist. Der veranschaulichte mad-Opcode implementiert die Operation <dst> = <src0> + <src1> * <src2>. Jeder Operand setzt sich aus einer Registeradresse, einer Regionierungsoption und Datentypen zusammen. Die erste Anweisung (Zeile 00) führt eine Multiplikation des SIMD-weiten Registers r10 mit einem rundgesendeten SIMD-Kanal des Registers r76.0 durch. Das Ergebnis wird zu dem SIMD-weiten Register r34 hinzuaddiert. Für <dst>, z. B. r34.0<1>:f, ist r34 die Registeradresse (regnum), .0 ist der Versatz (subregnum) innerhalb des Registers in Einheiten des Datentyps, <1> ist die Regionierungsoption, welche die gepackte Schrittweite für Schreibvorgänge angibt und :f gibt den Datentyp Gleitkomma (Float) an. Für <src0> oder <src1>, z. B. r10.0<1,0>:f, ist r10 die Registeradresse (regnum), .0 ist der Versatz (subregnum) innerhalb des Registers in Einheiten des Datentyps, <1,0> ist die Regionierungsoption, welche die gepackte Schrittweite für Lesevorgänge angibt, und : f gibt den Datentyp an. Für <src2>, z. B. r76.0<0>:f, ist r76 die Registeradresse (regnum), .0 ist der Versatz (subregnum) innerhalb des Registers in Einheiten des Datentyps, <0> ist die Regionierungsoption, welche das Rundsenden eines einzelnen SIMD-Kanals für Lesevorgänge angibt, und :f gibt den Datentyp Gleitkomma (Float) an. Die Anweisungen in den Zeilen 01-07 führen ähnliche Operationen durch, wobei unterschiedliche SIMD-Kanäle von r76 durchlaufen und Ergebnisse in aufeinanderfolgenden Registern (z. B, r77, r78 etc.) akkumuliert werden.
  • Multiply AddVector-Anweisung
  • Eine Analyse der Anweisungssequenz von Tabelle 2 zeigt, dass, über die acht mad-Anwendungen, die für SGEMM-Operationen verwendet werden, die Registeradresse für Operand <src1> und <src2> identisch ist, während sich Operand <src0> und <dst> sequenziell erhöht. Außerdem sind <src0> und <dst> in jeder besonderen mad-Anweisung identisch, so dass eine Akkumulation in demselben Register erfolgt. Die Ergebnisse dieser Analyse können genutzt werden, um zu ermöglichen, dass eine Grafikverarbeitungsressource eine Hardwareimplementierte MultiplyAddVector (madv)-Anweisung mit diesem Format unterstützt: <pred> madv.rcount <dst> <src0> <src1> <src2>.
  • 21A-21C veranschaulichen eine Anweisung und verknüpfte Hardwarelogik zum Ermöglichen einer Multiplizieren-Addieren-Vektoroperation mit Null-Auslassung (Zero-Skipping) für dünn besetzte Eingaben. 21A veranschaulicht ein Format für eine madv-Anweisung 2100 (Multiplizieren/Addieren/Vektor). 21B veranschaulicht Hardwarelogik 2110, um ein Decodieren der madv-Anweisung 2100 (Multiplizieren/Addieren/Vektor) zu ermöglichen. 21C veranschaulicht Ausführungslogik 2120, die dafür ausgelegt ist, ein Decodieren und die Ausführung der hier beschriebenen madv-Anweisung 2100 (Multiplizieren/Addieren/Vektor) zu ermöglichen.
  • Wie in 21A gezeigt, bietet eine Ausführungsform Hardwareunterstützung für eine Multiplizieren/Addieren/Vektor-Anweisung (madv-Anweisung 2100), die eine Sequenz von Multiplizieren-Addieren-Anweisungen mit automatischer Nullauslassung (Zero-Skipping) für einen oder mehrere Eingabevektoren durchführt. Das Format für die madv-Anweisung 2100 beinhaltet ein Prädikat (pred 2102), den Anweisungs-Opcode mit einer angehängten Wiederholungszählung 2104 (madv.rcount), einen Zieloperanden (dst 2106) und mehrere Quelloperanden (src0 2107, src1 2108, src2 2109). In einer Ausführungsform wird der Prädikatwert basierend auf dem Flag-Register bestimmt, wobei die Bits der Prädikatmaske eine Vorhersage auf eine Anordnung einzelner mad-Anweisungen anwenden soll und nicht auf eine Anordnung von Kanälen. Dementsprechend kann die Prädikatmaske verwendet werden, um die Generierung spezifischer Anweisungen in dem Satz von Anweisungen zu aktivieren oder deaktivieren, welcher durch die madv-Anweisung 2100 repräsentiert wird.
  • In einer Ausführungsform ist die madv-Anweisung 2100 als eine Hardware-Makroanweisung implementiert, die während des Decodierens in mehrere zusätzliche Anweisungen erweitert wird. In einer solchen Ausführungsform gibt der Wert der Wiederholungszählung 2104 die Anzahl von Anweisungen an, in die erweitert werden soll, sobald diese in der Ausführungsressource vorliegen. Beispielsweise kann die Anweisung madv. 8, die in der nachstehenden Tabelle 3 gezeigt wird, in einer Ausführungsressource in die in Tabelle 2 gezeigte SGEMM-Anweisungssequenz erweitert werden. Tabelle 3 - Beispielhafte MultiplyAddVector-Anweisung
    madv. 8 r34.0<1>:f r34.0<1,0>:f r10.0<1,0>:f r76.0<1>:f
  • Für die Anweisung in der obigen Tabelle 3 lautet die Wiederholungszählung 2104 acht. Die gelieferten Operanden repräsentieren die Anfangsoperanden für die erste Anweisung in dem Satz von erweiterten Anweisungen. Die Operanden für die nachfolgenden Anweisungen werden während der Erweiterung generiert. Die Operandenerweiterung nutzt einen Block von aufeinanderfolgenden Registern für <dst> 2106 und <src0> 2107 und aufeinanderfolgende Unterregister für <src2> 2109, wobei die Anzahl aufeinanderfolgender Register/Unterregister basierend auf dem Wert der Wiederholungszählung 2104 bestimmt wird. Basierend auf dem Wert des Flag-Registers kann die Erweiterung für spezifische Anweisungen in dem Satz von Anweisungen umgangen werden, beispielsweise in dem Fall, dass ein Zero-Skipping für dünn besetzte Eingaben durchgeführt wird.
  • Wie in 21B gezeigt, wird die Anweisungserweiterung in einer Ausführungsform während des Decodierens der madv-Anweisung durchgeführt, wenngleich in anderen Ausführungsformen andere Implementierungstechniken verwendet werden können, wie etwa über eine direkte Ausführung der Anweisung durch die Ausführungsstufe der Anweisungsausführungspipeline. In einer Ausführungsform kann die Anweisungsdecodierlogik 2110 in einer Verarbeitungsressource, zusätzlich zu herkömmlicher Anweisungsdecodierlogik, eine Zähler-/Zustandsmaschine 2111, einen Prioritätscodierer 2112, einen Anweisungsgenerator 2113 und einen Operandengenerator 2114 beinhalten. Die Zähler-/Zustandsmaschine 2111 speichert Zählerwerte und den Decodierstatus zur Verwendung während der Erweiterung einer madv-Anweisung. Der Prioritätscodierer 2112 wird zum Abtasten des Prädikats verwendet, um das erste aktivierte Bit zu bestimmen, welches die erste zu generierende mad-Anweisung angibt.
  • Die vorgeschlagene madv-Anweisung kann in der Ausführungseinheit durch Hinzufügen einer Zähler-/Zustandsmaschine in der Decodierstufe einer ALU-Pipe und Generieren einer Sequenz von mad-Anweisungen implementiert werden. Ein Prioritätscodierer 2112 scannt die Prädikatmaske, um das erste gesetzte Bit zu finden. mad-Anweisungen werden durch den Anweisungsgenerator 2113 produziert, falls das entsprechende Bit für diese Anweisung im Prädikat-Bitfeld gesetzt ist. Der Operandengenerator 2114 generiert dann die entsprechenden Operandenwerte basierend auf den anfänglichen Operandenregister- und Unterregisterwerten und den Bitpositionen, die in der Prädikatmaske gesetzt sind. Die Ausführung der madv-Anweisung kann wie angegeben in dem Pseudocode der nachstehenden Tabelle 4 erfolgen.
    Figure DE102020130865A1_0001
  • Der Operandengenerator 2114 kann regnum- und subregnum-Werte für die Operanden in ähnlicher Weise generieren wie im Pseudocode von Tabelle 4 gezeigt wird.
  • Wie in 21C gezeigt, kann die Ausführungslogik 2120 in einer Multithread-Verarbeitungsressource dafür ausgelegt sein, eine madv-Anweisung wie hier beschrieben zu erweitern und auszuführen. Die Ausführungslogik 2120 kann in einer Multithread-Verarbeitungsressource, wie etwa einer Ausführungseinheit, einer Recheneinheit oder einem Streaming-Multiprozessor wie hier beschrieben zu finden sein. In einer Ausführungsform kann ein Satz von Anweisungswarteschlangen 2122A-2122N N Sätze von Anweisungen speichern, die zur Ausführung durch N Threads der Ausführungslogik 2120 anstehen. Jeder Thread verfügt über eine zugehörige Vordecodierstufe 2124A-2124N, welche die Ausführung für den Thread aussetzt, bis Abhängigkeiten für die aktuelle Anweisung geklärt sind. Ein Thread wird als bereit markiert, wenn keine Abhängigkeiten für die aktuelle Anweisung verbleiben. Nach Klärung kann ein Thread am Arbitrierungsprozess teilnehmen, der einen Thread zum Einstellen in die Ausführungspipeline einer der ALUs auswählt.
  • Die jeweiligen Arbiter 2126A-2126M für jede ALU können einen oder mehrere bereite Threads auswählen, basierend auf der Verfügbarkeit von Ausführungsressourcen in einer ALU. Die Anweisungen für die ausgewählten Threads werden dann in die Ausführungspipeline der ausgewählten ALU eingestellt. Die Ausführungspipeline-Stufen für die veranschaulichten ALUs beinhalten Decodierstufen 2128A-2128M, Registerlesestufen 2130A-2130M, Ausführungsstufen 2132A-2132M und Rückschreibestufen (Write-Back, WB) 2134A-2134M. In einer Ausführungsform kann eine einzelne madv-Anweisung innerhalb einer Decodierstufe 2128A-2128M der ALU, welche die Anweisung empfängt, in mehrere mad-Anweisungen erweitert werden.
  • In einer Ausführungsform ist die Anzahl von ALUs in der Ausführungslogik 2120 kleiner als die Anzahl von Threads, die von der Ausführungslogik 2120 ausgeführt werden können. In einer Ausführungsform können mehrere Anweisungen an eine einzelne ALU ausgegeben werden. In einer Ausführungsform kann nur eine Teilmenge von verfügbaren ALUs für eine madv-Anweisungserweiterung ausgelegt sein und solche Anweisungen werden von diesen spezifischen ALUs ausgeführt. Die Gesamtanzahl von Takten, welche die Ausführungslogik 2120 verbraucht, um eine madv-Anweisung durchzuführen, hängt von der Anzahl von Takten pro mad-Anweisung, der Wiederholungszählung und der Anzahl von übersprungenen Anweisungen ab. In einer Ausführungsform kann eine ALU der Ausführungslogik eine mad-Anweisung pro Takt ausführen. In einer solchen Ausführungsform würde eine madv.8-Anweisung acht Takte zur Ausführung benötigen, minus ein Takt pro übersprungene Anweisung, wenn dünn besetzte Eingabewerte verarbeitet werden.
  • 22 veranschaulicht eine Anweisungserweiterung und Auslassung für dünn besetzte Eingaben gemäß einer Ausführungsform. In einer Ausführungsform wird eine Vergleichsanweisung 2201 verwendet, um Registerdaten zu vergleichen, die als die <src2>-Eingabe mit Null verwendet werden sollen, um eine Prädikatmaske zu generieren, die für die madv-Anweisung 2202 verwendet werden soll. Es ist zu beachten, dass, in einer Ausführungsform, eine Erweiterung der madv-Anweisung aufeinanderfolgende Register für die Operanden <src0> und <dst> nutzt. Falls, während der Kompilierung eines Shader-Programms, das die madv-Anweisung nutzt, nicht genug ausreichende aufeinanderfolgende Register verfügbar sind, kann der Shader-Compiler mehrere Anweisungen 2203 mit geteilten Wiederholungszählungen ausgeben. Beispielsweise zwei Anweisungen mit einer Wiederholungszählung von vier anstelle einer Anweisung mit einer Wiederholungszählung von acht, wobei unterschiedliche Registerstartpunkte für die Operanden <src0> und <dst> verwendet werden. Wenn mehrere Anweisungen verwendet werden sollen, können die Anweisungen als eine atomare Operation ausgeführt werden, um die Wiederverwendung der Register <src1> und <src2> zu ermöglichen. Sind beispielsweise <src2> 2109, die Anweisung 2202 oder die Anweisungen 2203 gegeben, kann ein Satz von mad-Anweisungen 2204 generiert werden. Die Anweisungsgenerierung kann für dünn besetzt Elemente in <src2> 2109 umgangen werden, so dass nicht nur die Ausführung für eine mad-Anweisung mit einem dünn besetzten <src2>-Element umgangen wird, sondern auch die Generierung der entsprechenden Anweisung umgangen wird, wodurch sich die Anweisungsabruf- und Decodierbandbreite reduziert, die durch dünn besetzte Matrix-Arbeitslasten verbraucht wird.
  • In einigen Fällen kann die SIMD-Größe einer madv-Anweisung über der Registergröße liegen, so dass das Ergebnis in mehrere Register geschrieben wird. In solchen Fällen, während des Erweiterns der madv-Makroanweisung, werden <dst>und <src0> einzelner mad-Anweisungen um mehrere Register erhöht. Lautet die Anweisung beispielsweise SIMD = 32, Datentyp = 4 Byte und Registerbreite = 64 Byte, dann werden <dst> und <src0> um (SIMD * Datentyp/Registerbreite) = 2 Register erhöht. Auch wenn Operationen hier allgemein als SIMD-Operationen beschrieben werden, können die hier beschriebenen Techniken bzw. Verfahren auch für andere Parallelverarbeitungsarchitekturen wie etwa SIMT-basierte Architekturen angepasst werden.
  • Es ist zu beachten, dass bei Grafikprozessor-Architekturen, die dedizierte Akkumulatorregister (accX-Register) beinhalten, eine madv-Anweisung wie hier beschrieben explizit oder implizit Akkumulatorregister für die Operanden <src0> und <dst> nutzen können. Die Akkumulatorregister können größere Register und/oder Register mit höherer Genauigkeit sein, die verwendet werden, mehrere Gleitkommaoperationen zu akkumulieren. Die Verwendung von Akkumulatorregistern kann dazu führen, dass ein Ergebnis mit höherer Genauigkeit generiert wird, je nach Genauigkeit der Eingabe- oder Ausgabedatentypen. In Fällen, in denen die Anzahl von Akkumulatoren für eine Architektur begrenzt ist, können die Ergebnisse einer oder mehrerer madv-Anweisungen in Akkumulatoren gespeichert werden, während andere in Universalregistern gespeichert werden können.
  • 23 veranschaulicht ein Verfahren 2300 zum Ermöglichen der Ausführung einer Multiplizieren/Addieren/Vektor-Anweisung gemäß einer Ausführungsform. Das Verfahren 2300 kann von der Logik einer Rechen- oder Grafikprozessor-Pipeline eines hier beschriebenen Grafikprozessors oder Parallelprozessors durchgeführt werden. Beispielsweise kann das Verfahren 2300 von der Ausführungslogik 2120 von 21C unter Verwendung der Hardwarelogik 2110 von 21B durchgeführt werden. Das Verfahren 2300 kann verwendet werden, um die Ausführung einer Hardware-Makroanweisung zu ermöglichen, wie etwa der madv-Anweisung 2100 von 21A und/oder wie hier beschrieben.
  • In einer Ausführungsform beinhaltet das Verfahren 2300 das Durchführen, über Hardwarelogik des Grafik- oder Parallelprozessors, einer Operation zum Abrufen einer Hardware-Makroanweisung (Block 2301). Die Hardware-Makroanweisung verfügt über eine Prädikatmaske, eine Wiederholungszählung und einen Satz von Anfangsoperanden (<dst>, <src0>, <src1>, <src2>). Die Hardware-Makroanweisung ist dafür ausgelegt, eine oder mehrere Multiplizier-/Addieroperationen an Eingabedaten durchzuführen, die mit einem Satz von Matrizen verknüpft sind. Das Verfahren 2300 beinhaltet zusätzlich das Durchführen von Operationen zum Decodieren der Hardware-Makroanweisung (Block 2302). In einer Ausführungsform kann die abgerufene Hardware-Makroanweisung in einer Anweisungswarteschlange gespeichert werden, bis die Logik einer Vordecodierstufe der Anweisungsausführungspipeline (z. B. Vordecodierstufe 2124A-2124N) bestimmt, dass Abhängigkeiten, wie etwa verknüpfte Lade- oder Vergleichsanweisungen erfüllt sind. Sobald die Abhängigkeiten erfüllt sind, kann die Anweisung automatisch zur Decodierung durch die Decodierlogik einer hier beschriebenen Verarbeitungsressource übergeben werden.
  • Die Decodieroperationen können wenigstens teilweise durchgeführt werden, um einen Satz von Hardwareanweisungen zu bestimmen, die zur Ausführung generiert werden sollen, oder einen solchen Satz beinhalten. Beispielsweise kann eine mad-Anweisung für jedes aktivierte Bit in der Prädikatmaske generiert werden. Die Prädikatmaske kann basierend auf Eingaben generiert werden, die in Unterregistern des <src2>-Operanden gespeichert sind, was in 22 gezeigt wird. Beispielsweise kann eine Vergleichsanweisung verwendet werden, um Bits in einem Flag-Register zu setzen, indem die als <src2>-Eingabe zu verwendenden Daten mit Null verglichen werden. Das Flag-Register kann dann als Prädikatmaske verwendet werden. Die Prädikatmaske und die Wiederholungszählung können dann verwendet werden, um den Satz von Hardwareanweisungen zur Ausführung zu generieren (Block 2303). Anweisungen können von einem Anweisungsgenerator 2113 wie in 21B generiert werden. Die maximale Anzahl von zu generierenden Anweisungen kann auf Basis der Wiederholungszählung bestimmt werden. Das Generieren spezifischer Hardwareanweisungen wird umgangen, wenn dies durch ein verknüpftes Bit in der Prädikatmaske deaktiviert ist.
  • Die spezifischen Operanden, die von den generierten Anweisungen in dem Satz von Anweisungen verwendet werden sollen, können basierend auf der Prädikatmaske und dem Satz von Anfangsoperanden bestimmt werden (Block 2304). Operanden für die Anweisungen können durch einen Operandengenerator 2114 wie in 21B generiert werden. Aufeinanderfolgende zusammenhängende Register werden für <dst>- und <src0>-Operanden verwendet, wobei aufeinanderfolgende Unterregister für <src2>-Operanden verwendet werden. Operanden werden nicht für umgangene Anweisungen generiert. Die Anweisungsausführungspipeline des Grafik- oder Parallelprozessors kann dann den Satz von Hardwareanweisungen atomar ausführen (Block 2305). Atomare Ausführung gibt an, dass eine oder mehrere Operationen durchgeführt werden, während der Satz von Anweisungen atomar durchgeführt wird, so dass die Anweisungen in dem Satz von Anweisungen als einzelne Anweisung betrachtet werden. Die spezifische Anzahl von Taktzyklen, die durch die Ausführung der Hardware-Makroanweisung verbraucht wird, kann variieren, basierend auf der Zykluszahl zum Ausführen einer einzelnen Multiplizier-AddierOperation, der Wiederholungszählung, die mit der Anweisung verknüpft ist, und der Anzahl von Anweisungen oder Operationen, die aufgrund von dünn besetzten Eingabedaten umgangen werden. Die Anweisungsausführungspipeline des Grafik- oder Parallelprozessors kann dann die Hardware-Makroanweisung bei Abschluss jeder Anweisung in dem Satz von Hardwareanweisungen rückordnen (Block 2306).
  • Es ist zu beachten, dass je nach dünner Besetzung der Eingabe für eine madv-Anweisung die Anzahl von Ausführungszyklen variieren kann. Somit kann die Latenz für die Anweisung unter Umständen nicht zum Kompilierzeitpunkt bestimmt werden, um die Zeitplanung der nächsten abhängigen Anweisung zu ermöglichen. Dementsprechend werden die mehreren Anweisungen oder Operationen, die von einer madv-Anweisung durchgeführt werden, von dem Compiler und der Zeitplanungshardware als eine einzelne atomare Anweisung betrachtet. Somit werden, für einen Satz von aufeinanderfolgenden abhängigen madv-Anweisungen, die Anweisungen reihenfolgegetreu ausgeführt, so dass eine erste madv-Anweisung abgeschlossen wird, bevor eine nachfolgende abhängige Anweisung in die Ausführungspipeline eintritt.
  • Zusätzliche beispielhafte Rechenvorrichtung
  • 24 ist ein Blockschaltbild einer Rechenvorrichtung 2400 mit einem Grafikprozessor 2404 gemäß einer Ausführungsform. Die Rechenvorrichtung 2400 kann eine Rechenvorrichtung wie etwa das Datenverarbeitungssystem 100 von 1 sein und kann die in 14 gezeigten Komponenten beinhalten. Die Rechenvorrichtung 2400 kann auch eine Kommunikationsvorrichtung wie etwa eine Set-Top-Box (z. B. Internet-basierte Set-Top-Boxen für Kabelfernsehen etc.), eine auf dem globalen Positionsbestimmungssystem (GPS) basierende Vorrichtung etc. sein oder darin enthalten sein. Die Rechenvorrichtung 2400 kann auch eine mobile Rechenvorrichtung wie etwa ein Mobiltelefon, Smartphone, persönlicher Assistent (PDA), Tablet-Computer, Laptop-Computer, E-Reader, Smart-TV, eine TV-Plattform, eine am Körper tragbare Vorrichtung (z. B. Brillen, Uhren, Armbänder, Smartcards, Schmuck, Kleidungsstücke etc.), ein Medienwiedergabegerät etc. sein oder darin enthalten sein. Beispielsweise beinhaltet, in einer Ausführungsform, die Rechenvorrichtung 2400 eine mobile Rechenvorrichtung, welche eine integrierte Schaltung (Integrated Circuit, „IC“) wie etwa ein Ein-Chip-System (System on a Chip „SoC“ oder „SOC“) einsetzt, die verschiedene Hardware- und/oder Softwarekomponenten der Rechenvorrichtung 2400 auf einem einzelnen Chip integriert.
  • Die Rechenvorrichtung 2400 beinhaltet einen Grafikprozessor 2404. Der Grafikprozessor 2404 steht für einen beliebigen hier beschriebenen Grafikprozessor. Der Grafikprozessor beinhaltet eine oder mehrere Grafik-Engines, Grafikprozessorkerne und andere Grafikausführungsressourcen wie hier beschrieben. Derartige Grafikausführungsressourcen können in Formen präsentiert werden, die, ohne hierauf beschränkt zu sein, Ausführungseinheiten, Shader-Engines, Fragmentprozessoren, Vertex-Prozessoren, Streaming-Multiprozessoren, Grafikprozessor-Cluster oder irgendeine Sammlung von Rechenressourcen beinhalten, welche für die Verarbeitung von Grafikressourcen oder Bildressourcen oder das Durchführen von Universal-Rechenoperationen in einem heterogenen Prozessor geeignet sind.
  • In einer Ausführungsform beinhaltet der Grafikprozessor 2404 einen Cache 2414, bei dem es sich um einen einzelnen Cache handeln kann oder der in mehrere Segmente von Cache-Speicher unterteilt sein kann, was, ohne jedoch hierauf beschränkt zu sein, eine beliebige Anzahl von L1-, L2-, L3- oder L4-Caches, Render-Caches, Tiefencaches, Abtastercaches und/oder Shader-Einheit-Caches einschließt. In einigen Ausführungsformen beinhaltet der Grafikprozessor 2404 eine GPGPU-Engine 2444, die gemeinsam genutzten lokalen Speicher (SLM 2434) beinhaltet, ebenso wie eine Registerdatei 2424, welche Register zur Verwendung durch die GPGPU-Engine 2444 beinhaltet. Die Registerdatei 2424 kann Universalregister, Architekturregister, Konfigurationsregister und andere Arten von Registern beinhalten. Eine Universalregisterdatei (General-purpose Register File, GRF) und/oder eine Architekturregisterdatei (Architectural Register File, ARF) können auch in den Verarbeitungsressourcen in einem oder mehreren Blöcken von Recheneinheiten (z. B. Rechenblock 2450, Rechenblock 2455) innerhalb der GPGPU-Engine 2444 vorliegen. Die veranschaulichten Komponenten können auch verwendet werden, um die Techniken bzw. Verfahren der verschiedenen hier beschriebenen Ausführungsformen bereitzustellen, was einschließt, das Decodieren und die Ausführung einer hier beschriebenen Multiplizieren/Addieren/Vektor (madv)-Anweisung zu ermöglichen. In einer Ausführungsform wird die Ausführung der madv-Anweisung über eine hardwarebasierte Decodier-/Erweiterungslogik 2442 ermöglicht, die eine madv-Anweisung in mehrere Multiplizieren/Addieren (mad)-Anweisungen erweitert, wenngleich andere Ausführungsformen unterschiedliche Implementierungstechniken verwenden können.
  • Wie veranschaulicht, kann, in einer Ausführungsform und zusätzlich zu dem Grafikprozessor 2404, die Rechenvorrichtung 2400 ferner eine beliebige Anzahl und Art von Hardwarekomponenten und/oder Softwarekomponenten beinhalten, was, ohne jedoch hierauf beschränkt zu sein, einen Anwendungsprozessor 2406, Speicher 2408 und Eingabe/Ausgabe (E/A)-Quellen 2410 einschließt. Der Anwendungsprozessor 2406 kann mit einer Hardware-Grafik-Pipeline interagieren, was unter Bezugnahme auf 3 veranschaulicht wird, um die Funktionalität der Grafik-Pipeline gemeinsam zu nutzen. Verarbeitete Daten werden in einem Puffer in der Hardware-Grafik-Pipeline gespeichert, und Zustandsinformationen werden im Speicher 2408 gespeichert. Die resultierenden Daten können zur Ausgabe über eine Anzeigevorrichtung wie etwa der Anzeigevorrichtung 318 von 3A an eine Anzeigesteuerung übertragen werden. Die Anzeigevorrichtung kann verschiedenartig ausgeführt sein, beispielsweise als Kathodenstrahlröhre (Cathode Ray Tube, CRT), Dünnfilmtransistor (Thin Film Transistor, TFT), Flüssigkristallanzeige (Liquid Crystal Display, LCD), Anordnung von organischen Leuchtdioden (Organic Light Emitting Diodes, OLEDs) etc., und kann dafür ausgelegt sein, Informationen für einen Benutzer über eine grafische Benutzerschnittstelle anzuzeigen.
  • Der Anwendungsprozessor 2406 kann einen oder mehrere Prozessoren beinhalten, wie etwa den/die Prozessor(en) 102 von 1 und kann die zentrale Verarbeitungseinheit (Central Processing Unit, CPU) sein, welche wenigstens teilweise verwendet wird, um ein Betriebssystem (Operating System, OS) 2402 für die Rechenvorrichtung 2400 auszuführen. Das OS 2402 kann als Schnittstelle zwischen Hardware und/oder physischen Ressourcen der Rechenvorrichtung 2400 und einem oder mehreren Benutzern dienen. Das OS 2402 kann Treiberlogik für verschiedene Hardwarevorrichtungen in der Rechenvorrichtung 2400 beinhalten, was Grafiktreiberlogik 2422 wie etwa den Benutzermodus-Grafiktreiber 1026 und/oder den Kernelmodus-Grafiktreiber 1029 von 10 einschließt.
  • Es ist vorgesehen, dass in einigen Ausführungsformen der Grafikprozessor 2404 als Teil des Anwendungsprozessors 2406 vorliegen kann (beispielsweise als Teil des physischen CPU-Pakets), in welchem Fall wenigstens ein Teil des Speichers 2408 von dem Anwendungsprozessor 2406 und dem Grafikprozessor 2404 gemeinsam genutzt werden kann, wenngleich wenigstens ein Teil des Speichers 2408 ausschließlich für den Grafikprozessor 2404 vorgesehen sein kann oder der Grafikprozessor 2404 einen getrennten Datenspeicher aufweisen kann. Der Speicher 2408 kann eine vorab zugeteilte Region eines Puffers (z. B. eines Rahmenpuffers) umfassen; allerdings sollten Durchschnittsfachleute erkennen, dass die Ausführungsformen nicht hierauf beschränkt sind und dass ein beliebiger Speicher, der für die tieferliegende Grafik-Pipeline zugänglich ist, verwendet werden kann. Der Speicher 2408 kann verschiedene Formen von Direktzugriffsspeicher (Random-Access Memory, RAM) beinhalten (z. B. SDRAM, SRAM etc.), was eine Anwendung umfasst, die den Grafikprozessor 2404 nutzt, um einen Desktop oder eine 3D-Grafik-Szene zu rendern. Ein Speichersteuerungsknoten, wie etwa die Speichersteuerung 116 von 1, kann auf Daten in dem Speicher 2408 zugreifen und diese an den Grafikprozessor 2404 zur Grafik-Pipeline-Verarbeitung weiterleiten. Der Speicher 2408 kann für andere Komponenten in der Rechenvorrichtung 2400 zur Verfügung gestellt werden. Beispielsweise können beliebige Daten (z. B. Eingangsgrafikdaten), die von verschiedenen E/A-Quellen 2410 der Rechenvorrichtung 2400 empfangen werden, temporär in eine Warteschlange des Speichers 2408 eingestellt werden, bevor sie durch die ein oder mehreren Prozessoren (z. B. den Anwendungsprozessor 2406) in der Implementierung eines Softwareprogramms oder einer Anwendung verarbeitet werden. In ähnlicher Weise werden Daten, für die ein Softwareprogramm bestimmt, dass sie von der Rechenvorrichtung 2400 über eine der Rechensystemschnittstellen an eine externe Entität gesendet werden sollen oder in ein internes Datenspeicherelement gespeichert werden sollen, oft temporär in eine Warteschlange des Speichers 2408 eingereiht, bevor sie übertragen oder gespeichert werden.
  • Die E/A-Quellen können Vorrichtungen wie etwa Berührungsschirme, Berührungstafeln, Touchpads, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbinder, Netzvorrichtungen oder dergleichen beinhalten und können über einen Plattformsteuerungsknoten 130 gemäß Verweis in 1 angeschlossen werden. Zusätzlich können die E/A-Quellen 2410 eine oder mehrere E/A-Vorrichtungen beinhalten, die zum Übertragen von Daten an die und/oder von der Rechenvorrichtung 2400 (z. B. einem Netzadapter); oder für einen großvolumigen nichtflüchtigen Datenspeicher in der Rechenvorrichtung 2400 (z. B. ein Festplattenlaufwerk) implementiert sind. Benutzereingabevorrichtungen mit alphanumerischen und anderen Tasten können verwendet werden, um Informationen und Befehlsauswahlen an den Grafikprozessor 2404 zu übermitteln. Eine andere Art von Benutzereingabevorrichtung ist eine Cursorsteuerung, wie etwa eine Maus, ein Trackball, ein Berührungsschirm, ein Berührungsfeld oder Cursor-Richtungstasten zum Übermitteln von Richtungsinformationen und Befehlsauswahlen an die GPU und zum Steuern von Cursorbewegungen auf der Anzeigevorrichtung. Kamera- und Mikrofonanordnungen der Rechenvorrichtung 2400 können eingesetzt werden, um Gesten zu beobachten, Audio und Video aufzuzeichnen und optische und akustische Befehle zu empfangen und zu übertragen.
  • E/A-Quellen 2410, die als Netzschnittstellen ausgelegt sind, können einen Zugang zu einem Netz, beispielsweise ein LAN, ein Weiterverkehrsnetz (Wide Area Network, WAN), ein Stadtnetz (Metropolitan Area Network, MAN), ein persönliches Netz (Personal Area Network, PAN), Bluetooth, ein Cloud-Netz, ein Zellular- oder Mobilnetz (z. B. der dritten Generation (3G), der vierten Generation (4G) etc.), ein Intranet, das Internet etc. bereitstellen. Die Netzschnittstelle(n) kann/können beispielsweise eine drahtlose Netzschnittstelle mit einer oder mehrere Antennen beinhalten. Die ein oder mehreren Netzschnittstellen können zudem beispielsweise eine drahtgebundene Netzschnittstelle für die Kommunikation mit entfernten Vorrichtungen über ein Netzwerkkabel beinhalten, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein paralleles Kabel sein kann.
  • Die ein oder mehreren Netzschnittstellen können den Zugang zu einem LAN ermöglichen, beispielsweise indem sie dem IEEE 802. 1 1b-Standard entsprechen, und/oder die drahtlose Netzschnittstelle kann den Zugang zu einem persönlichen Netz (Personal Area Network) bereitstellen, beispielsweise indem sie dem Bluetooth-Standard entspricht. Andere drahtlose Netzschnittstellen und/oder Protokolle, einschließlich vorheriger und nachfolgender Versionen der Normen bzw. Standards, können ebenfalls unterstützt werden. Zusätzlich zu oder anstelle der Kommunikation über die Drahtlos-LAN-Standards können die ein oder mehreren Netzschnittstellen 480 eine drahtlose Kommunikation beispielsweise unter Verwendung von TDMA-Protokollen (Time Division Multiple Access, Zeitmultiplex-Vielfachzugriff), GSM-Protokollen (Global System for Mobile Communications, Globales System für Mobilkommunikation), CDMA-Protokollen (Code Division Multiple Access, Codemultiplex-Vielfachzugriff) und/oder anderen Arten von drahtlosen Kommunikationsprotokollen bereitstellen.
  • Es versteht sich, dass ein weniger oder mehr ausgestattetes System als das vorstehend beschriebene Beispiel für bestimmte Implementierungen bevorzugt werden kann. Daher kann die Konfiguration der Rechenvorrichtung 2400 von Implementierung zu Implementierung variieren, abhängig von zahlreichen Faktoren wie etwa Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Umständen. Beispiele beinhalten (ohne Einschränkung): ein mobiles Endgerät, einen persönlichen digitalen Assistenten, eine mobile Rechenvorrichtung, ein Smartphone, ein Mobiltelefon, einen Handapparat, einen unidirektionalen Pager, einen bidirektionalen Pager, eine Nachrichtenübertragungsvorrichtung, einen Computer, einen Personalcomputer (PC), einen Desktop-Computer, einen Laptop-Computer, einen Notebook-Computer, einen Handheld-Computer, einen Tablet-Computer, einen Server, eine Server-Anordnung oder eine Server-Farm, einen Web-Server, einen Netzserver, einen Internet-Server, eine Arbeitsstation, einen Minicomputer, einen Mainframe-Computer, einen Supercomputer, ein Netzgerät, ein Web-Gerät, ein verteiltes Computersystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Unterhaltungselektronik, programmierbare Unterhaltungselektronik, Spielvorrichtungen, Fernseher, digitale Fernseher, eine Set-Top-Box, einen drahtlosen Zugangspunkt, eine Basisstation, eine Teilnehmerstation, eine Mobilteilnehmerzentrale, eine Funknetzsteuerung, einen Router, einen Netzknoten, ein Gateway, eine Brücke, einen Switch, eine Maschine oder Kombinationen davon.
  • Ausführungsformen können, einzeln oder in Kombination, implementiert sein als: ein oder mehrere Mikrochips oder integrierte Schaltungen, die unter Verwendung einer Hauptplatine, einer fest verdrahteten Logik, einer Software, die von einer Speichervorrichtung gespeichert wird und durch einen Mikroprozessor ausgeführt wird, einer Firmware, einer anwendungsspezifischen integrierten Schaltung (Application-Specific Integrated Circuit, ASIC) und/oder einer feldprogrammierbaren Gatteranordnung (Field-Programmable Gate Array, FPGA) miteinander verbunden sind. Der Begriff „Logik“ kann in beispielhafter Weise Software oder Hardware und/oder Kombinationen von Software und Hardware beinhalten.
  • Ausführungsformen können beispielsweise als ein Computerprogrammprodukt bereitgestellt sein, das ein oder mehrere maschinenlesbare Medien beinhalten kann, auf denen maschinenausführbare Anweisungen gespeichert sind, die, wenn sie von einer oder mehreren Maschinen wie etwa einem Computer, einem Netz von Computern oder anderen elektronischen Vorrichtungen ausgeführt werden, bewirken können, dass die ein oder mehreren Maschinen Operationen gemäß hier beschriebenen Ausführungen ausführen. Ein maschinenlesbares Medium kann, ohne darauf beschränkt zu sein, Floppy-Disketten, optische Platten, CD-ROMs (Compact Disc-Read Only Memories) und magnetoptische Platten, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Speicher oder andere Arten von nicht-transitorischen maschinenlesbaren Medien beinhalten, die sich zum Speichern von maschinenausführbaren Anweisungen eignen.
  • Außerdem können Ausführungsformen als ein Computerprogramm, wobei das Programm von einem entfernten Computer (z. B. einem Server) an einen anfordernden Computer (z. B. einen Client) in Form von einem oder mehreren Datensignalen, die in einer Trägerwelle oder einem weiteren Ausbreitungsmedium ausgeführt und/oder durch eine Trägerwelle moduliert sind, übertragen wird, über eine Kommunikationsverbindung (z. B. ein Modem und/oder eine Netzverbindung) heruntergeladen werden.
  • Verweise hierin auf „genau eine Ausführungsform“ oder „eine Ausführungsform“ bedeuten, dass ein besonderes Merkmal, eine Struktur oder eine Eigenschaft, die in Verbindung mit der Ausführungsform beschrieben wird, in wenigstens einer Ausführungsform der Erfindung enthalten sein kann. Die Vorkommnisse des Ausdrucks „in einer Ausführungsform“ an verschiedenen Stellen der Spezifikation beziehen sich nicht notwendigerweise alle auf dieselbe Ausführungsform. Die Prozesse, welche in den nachfolgenden Figuren dargestellt sind, können von Verarbeitungslogik durchgeführt werden, die Hardware (z. B. Schaltungen, dedizierte Logik etc.), Software (wie etwa Anweisungen auf einem nicht-transitorischen maschinenlesbaren Datenspeichermedium) oder eine Kombination von Hardware und Software umfasst. Nachstehend wird im Einzelnen auf verschiedene Ausführungsformen Bezug genommen, von denen Beispiele in den beigefügten Zeichnungen veranschaulicht werden. In der nachstehenden ausführlichen Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um ein gründlicheres Verständnis der vorliegenden Erfindung zu vermitteln. Es wird jedoch Durchschnittsfachleuten auf diesem Gebiet klar sein, dass die vorliegende Erfindung ohne diese spezifischen Einzelheiten in die Praxis umgesetzt werden kann. In anderen Fällen sind bekannte Verfahren, Prozeduren, Komponenten, Schaltungen und Netze nicht ausführlich beschrieben worden, um Aspekte der Ausführungsformen nicht unnötig zu verdecken.
  • Es versteht sich außerdem, dass, auch wenn Begriffe wie „erste/r/s“, „zweite/r/s“ etc. hierin verwendet werden, um verschiedene Elemente zu beschreiben, diese Elemente durch diese Begriffe nicht eingeschränkt werden sollen. Die Begriffe dienen lediglich dazu, diese Elemente voneinander abzuheben. Beispielsweise könnte ein erster Kontakt als zweiter Kontakt bezeichnet und, in ähnlicher Weise, könnte ein zweiter Kontakt als erster Kontakt bezeichnet werden, ohne vom Schutzbereich der vorliegenden Erfindung abzuweichen. Der erste Kontakt und der zweite Kontakt sind beides Kontakte, aber es handelt sich hierbei nicht um denselben Kontakt.
  • Die hier verwendete Terminologie hat lediglich den Zweck, bestimmte Ausführungsformen zu beschreiben, sie ist jedoch nicht einschränkend im Hinblick auf alle Ausführungsformen gedacht. Soweit sie in der Beschreibung der Erfindung und in den beigefügten Ansprüchen verwendet werden, sollen die Einzahlformen „ein/einer/eines“, „einen/eine/eines“ und „der/die/das“ auch die Mehrzahlformen einschließen, es sei denn, der Kontext verweist klar darauf, dass dies nicht der Fall ist. Es versteht sich außerdem, dass sich der Begriff „und/oder“, wie er hier verwendet wird, auf jegliche und alle möglichen Kombinationen eines oder mehrerer der zugehörigen aufgelisteten Elemente bezieht und diese umfasst. Ferner versteht sich, dass die Begriffe „umfasst“, „umfassend“, „weist auf‟ und/oder „aufweisend“, wenn sie in dieser Patentschrift verwendet werden, das Vorhandensein von genannten Merkmalen, Ganzzahlen, Schritten, Operationen, Elementen und/oder Komponenten spezifizieren, aber nicht das Vorhandensein oder das Hinzufügen von einem oder mehreren anderen Merkmalen, Ganzzahlen, Schritten, Operationen, Elementen, Komponenten und/oder Gruppen derselben ausschließen.
  • Wie hier verwendet, kann der Begriff „wenn, falls“ (if) so ausgelegt werden, dass er je nach Kontext „wenn“ (when) oder „bei“ (upon) oder „in Reaktion auf das Bestimmen“ oder „in Reaktion auf das Detektieren“ bedeutet. In ähnlicher Weise kann der Ausdruck „falls bestimmt wird“ oder „falls [ein angegebener Zustand oder ein angegebenes Ereignis] detektiert wird“ so ausgelegt werden, dass sie je nach Kontext „bei Bestimmen“ oder „in Reaktion auf das Bestimmen“ oder „bei Detektieren [des angegebenen Zustands oder Ereignisses]“ oder „in Reaktion auf das Detektieren [des angegebenen Zustands oder Ereignisses]“ bedeutet.
  • Hier beschriebene Ausführungsformen stellen eine Anweisung und verknüpfte Logik bereit, um Vektor-Multiplikation-Addition-Anweisungen mit automatischer Null-Auslassung (Zero-Skipping) für dünn besetzte Eingaben zu ermöglichen. Die nachfolgenden Absätze und/oder Beispiele beziehen sich auf spezifische Ausführungsformen oder Beispiele davon. Besonderheiten in den Beispielen können an beliebiger Stelle in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der unterschiedlichen Ausführungsformen oder Beispiele können auf verschiedene Weise mit einigen Merkmalen kombiniert werden, die enthalten sind, und anderen, die ausgeschlossen sind, um verschiedensten Anwendungen gerecht zu werden. Beispiele können einen Erfindungsgegenstand umfassen, wie etwa ein Verfahren, Mittel zum Durchführen von Handlungen des Verfahrens, wenigstens ein maschinenlesbares Medium mit Anweisungen, die, wenn sie von einer Maschine durchgeführt werden, die Maschine veranlassen, Handlungen 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 Funktion sein.
  • Eine Ausführungsform sieht einen Universal-Grafikprozessor vor, der Logik zum Ausführen eines Verfahrens umfasst, umfassend das Abrufen einer Hardware-Makroanweisung mit einer Prädikatmaske, einer Wiederholungszählung und eines Satzes von Anfangsoperanden, wobei die Anfangsoperanden einen Zieloperanden und mehrere Quelloperanden (z. B., <src0>, <src1>, <src2>) beinhalten. Die Wiederholungszählung soll eine maximale Anzahl von Hardwareanweisungen angeben, die für den Satz von Hardwareanweisungen generiert werden soll. Die Prädikatmaske gibt an, welche Anweisungen in dem Satz von Anweisungen generiert oder umgangen werden sollen. Die Prädikatmaske kann über einen Vergleich zwischen Null und jedem Element, das mit einem Quelleingangsoperanden verknüpft ist (z. B., <src2>), generiert werden. Die Hardware-Makroanweisung ist dafür ausgelegt, eine oder mehrere Multiplizier- und Addieroperationen an Eingabedaten durchzuführen, die mit einem Satz von Matrizen verknüpft sind.
  • Das Verfahren beinhaltet zusätzlich das Decodieren der Hardware-Makroanweisung über eine Anweisungsdecodierlogik. Das Decodieren der Hardware-Makroanweisung beinhaltet das Bestimmen eines Satzes von Hardwareanweisungen, die zur Ausführung generiert werden sollen, und das Generieren von Anweisungen in dem Satz von Anweisungen. Die Anzahl von Anweisungen und die spezifischen zu generierenden Anweisungen können basierend auf der Wiederholungszählung und der Prädikatmaske bestimmt werden. Hardwareanweisungen werden für jede angegebene Iteration für die Wiederholungszählung generiert, es sei denn, die Prädikatmaske gibt an, dass die Generierung für eine spezifische Anweisungsiteration übersprungen werden soll. Das Verfahren beinhaltet zusätzlich das Generieren von Operanden, die von den generierten Anweisungen verwendet werden sollen. Die generierten Operanden können nachfolgende und aufeinanderfolgende Register oder Unterregister in einem Block von Registern oder Unterregistern spezifizieren, wobei die Schrittweite der Register und Unterregister basierend auf der SIMD-Größe der Anweisung und der Größe der Register bestimmt wird. Das Verfahren beinhaltet ferner das atomare Ausführen des Satzes von Anweisungen und ein Rückordnen der Hardware-Makroanweisung, wenn die Ausführung jeder der Anweisungen in dem Satz von Anweisungen abgeschlossen ist. In einer Ausführungsform beinhaltet der Satz von Hardwareanweisungen eine oder mehrere Hardwareanweisungen, und jede der ein oder mehreren Hardwareanweisungen soll die Verarbeitungsressource veranlassen, eine Multiplizier- und Addieroperation in einem einzelnen Zyklus durchzuführen. Jede der ein oder mehreren Hardwareanweisungen führt die Multiplizier- und Addieroperation an mehreren Datenelementen in dem einzelnen Zyklus durch.
  • Zusätzliche Ausführungsformen stellen die Grafikverarbeitungslogik zum Durchführen des vorstehend angegebenen Verfahrens bereit. Zusätzliche Ausführungsformen beinhalten außerdem ein Datenverarbeitungssystem mit der vorstehend angegebenen Grafikverarbeitungslogik. Die vorstehend beschriebenen Techniken bzw. Verfahren können in jede der hier beschriebenen Grafik- oder Parallelprozessor-Architekturen integriert werden oder daran angepasst werden. 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 erfahrenen Praktiker nach dem Studium der Zeichnungen, der Beschreibung und der nachfolgenden Ansprüche weitere Modifikationen offenkundig sein werden.

Claims (17)

  1. Grafikprozessor, beinhaltend: einen Anweisungsabrufer zum Abrufen einer Hardware-Makroanweisung mit einer Prädikatmaske, einer Wiederholungszählung und einem Satz von Anfangsoperanden, wobei die Hardware-Makroanweisung eine oder mehrere Multiplizier- und Addieroperationen an Eingaben durchführen soll, die mit einem Satz von Matrizen verknüpft sind; einen Anweisungsdecoder zum Decodieren der Hardware-Makroanweisung und Generieren eines Satzes von Hardwareanweisungen, um eine oder mehrere Multiplizier- und Addieroperationen durchzuführen, wobei der Satz von Hardwareanweisungen basierend auf der Prädikatmaske und der Wiederholungszählung generiert wird; und eine Verarbeitungsressource zum Ausführen des Satzes von Hardwareanweisungen, wobei die Hardware-Makroanweisung bei Abschluss des Satzes von Hardwareanweisungen rückgeordnet wird.
  2. Grafikprozessor nach Anspruch 1, wobei der Satz von Anfangsoperanden einen Zieloperanden und mehrere Quelloperanden beinhaltet.
  3. Grafikprozessor nach Anspruch 1 oder 2, wobei der Satz von Hardwareanweisungen eine oder mehrere Hardwareanweisungen beinhaltet und jede der ein oder mehreren Hardwareanweisungen die Verarbeitungsressource veranlassen soll, eine Multiplizier- und Addieroperation in einem einzelnen Zyklus durchzuführen.
  4. Grafikprozessor nach Anspruch 3, wobei jede der ein oder mehreren Hardwareanweisungen die Multiplizier- und Addieroperation an mehreren Datenelementen in dem einzelnen Zyklus durchführen soll.
  5. Grafikprozessor nach einem der Ansprüche 1-4, wobei die Wiederholungszählung eine maximale Anzahl von Hardwareanweisungen angeben soll, die für den Satz von Hardwareanweisungen generiert werden soll.
  6. Grafikprozessor nach Anspruch 5, wobei, um den Satz von Hardwareanweisungen zu generieren, der Anweisungsdecoder: eine erste Hardwareanweisung für ein aktives Bit in der Prädikatmaske generieren soll; und die Generierung einer zweiten Hardwareanweisung für ein inaktives Bit in der Prädikatmaske umgehen soll.
  7. Grafikprozessor nach Anspruch 6, wobei, um den Satz von Hardwareanweisungen zu generieren, der Anweisungsdecoder zusätzlich: einen ersten Satz von Operanden für die erste Hardwareanweisung generieren soll und der erste Satz von Operanden ein Zielregister und mehrere Quellregister zur Verwendung durch die erste Hardwareanweisung angeben soll, wobei der erste Satz von Operanden basierend auf dem Satz von Anfangsoperanden und einem Operandenversatz generiert wird.
  8. Grafikprozessor nach einem der Ansprüche 1-7, wobei die Prädikatmaske ein aktives Bit für jedes Nicht-Null-Element beinhaltet, das mit einem Quelloperanden verknüpft ist.
  9. Verfahren zum Ausführen einer Anweisung auf einem Grafikprozessor, wobei das Verfahren beinhaltet: Abrufen einer Hardware-Makroanweisung mit einer Prädikatmaske, einer Wiederholungszählung und einem Satz von Anfangsoperanden, wobei die Hardware-Makroanweisung eine oder mehrere Multiplizier- und Addieroperationen an Eingaben durchführen soll, die mit einem Satz von Matrizen verknüpft sind; Decodieren der Hardware-Makroanweisung in eine decodierte Hardware-Makroanweisung; Generieren eines Satzes von Hardwareanweisungen basierend auf der decodierten Hardware-Makroanweisung, wobei der Satz von Hardwareanweisungen eine oder mehrere Multiplizier- und Addieroperationen durchführen soll und der Satz von Hardwareanweisungen basierend auf der Prädikatmaske und der Wiederholungszählung generiert wird; Ausführen des Satzes von Hardwareanweisungen über eine Verarbeitungsressource eines Grafikprozessors; und Rückordnen der Hardware-Makroanweisung bei Abschluss des Satzes von Hardwareanweisungen.
  10. Verfahren nach Anspruch 9, wobei der Satz von Anfangsoperanden einen Zieloperanden und mehrere Quelloperanden beinhaltet.
  11. Verfahren nach Anspruch 9 oder 10, wobei der Satz von Hardwareanweisungen eine oder mehrere Hardwareanweisungen beinhaltet und jede der ein oder mehreren Hardwareanweisungen die Verarbeitungsressource veranlassen soll, eine Multiplizier- und Addieroperation in einem einzelnen Zyklus durchzuführen.
  12. Verfahren nach Anspruch 11, wobei jede der ein oder mehreren Hardwareanweisungen die Multiplizier- und Addieroperation an mehreren Datenelementen in dem einzelnen Zyklus durchführen soll.
  13. Verfahren nach einem der Ansprüche 9-12, wobei die Wiederholungszählung eine maximale Anzahl von Hardwareanweisungen angibt, die für den Satz von Hardwareanweisungen generiert werden soll.
  14. Verfahren nach Anspruch 13, wobei das Generieren des Satzes von Hardwareanweisungen beinhaltet: Generieren einer ersten Hardwareanweisung für ein aktives Bit in der Prädikatmaske; und Umgehen der Generierung einer zweiten Hardwareanweisung für ein inaktives Bit in der Prädikatmaske.
  15. Verfahren nach Anspruch 14, wobei das Generieren des Satzes von Hardwareanweisungen zusätzlich beinhaltet: Generieren eines ersten Satzes von Operanden für die erste Hardwareanweisung, wobei der erste Satz von Operanden ein Zielregister und mehrere Quellregister zur Verwendung durch die erste Hardwareanweisung angeben soll, wobei der erste Satz von Operanden basierend auf dem Satz von Anfangsoperanden und einem Operandenversatz generiert wird.
  16. Verfahren nach einem der Ansprüche 9-15, wobei die Prädikatmaske ein aktives Bit für jedes Nicht-Null-Element beinhaltet, das mit einem Quelloperanden verknüpft ist.
  17. Datenverarbeitungssystem, das Mittel zum Durchführen eines Verfahrens nach einem der Ansprüche 9-16 beinhaltet.
DE102020130865.5A 2019-12-23 2020-11-23 Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping Pending DE102020130865A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/724,831 US11314515B2 (en) 2019-12-23 2019-12-23 Instructions and logic for vector multiply add with zero skipping
US16/724,831 2019-12-23

Publications (1)

Publication Number Publication Date
DE102020130865A1 true DE102020130865A1 (de) 2021-06-24

Family

ID=76206049

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020130865.5A Pending DE102020130865A1 (de) 2019-12-23 2020-11-23 Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping

Country Status (5)

Country Link
US (2) US11314515B2 (de)
JP (1) JP2021099783A (de)
KR (1) KR20210081228A (de)
CN (1) CN113094096A (de)
DE (1) DE102020130865A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11314515B2 (en) 2019-12-23 2022-04-26 Intel Corporation Instructions and logic for vector multiply add with zero skipping

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11481214B2 (en) * 2020-07-14 2022-10-25 Alibaba Group Holding Limited Sparse matrix calculations untilizing ightly tightly coupled memory and gather/scatter engine
US20220413803A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Systolic array having support for output sparsity
US20220413924A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Using sparsity metadata to reduce systolic array power consumption

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9329870B2 (en) * 2013-02-13 2016-05-03 International Business Machines Corporation Extensible execution unit interface architecture with multiple decode logic and multiple execution units
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
US9928076B2 (en) * 2014-09-26 2018-03-27 Intel Corporation Method and apparatus for unstructured control flow for SIMD execution engine
US9983884B2 (en) * 2014-09-26 2018-05-29 Intel Corporation Method and apparatus for SIMD structured branching
US9766892B2 (en) * 2014-12-23 2017-09-19 Intel Corporation Method and apparatus for efficient execution of nested branches on a graphics processor unit
US10346944B2 (en) 2017-04-09 2019-07-09 Intel Corporation Machine learning sparse computation mechanism
GB2580316B (en) * 2018-12-27 2021-02-24 Graphcore Ltd Instruction cache in a multi-threaded processor
US11314515B2 (en) 2019-12-23 2022-04-26 Intel Corporation Instructions and logic for vector multiply add with zero skipping

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11314515B2 (en) 2019-12-23 2022-04-26 Intel Corporation Instructions and logic for vector multiply add with zero skipping
US11669329B2 (en) 2019-12-23 2023-06-06 Intel Corporation Instructions and logic for vector multiply add with zero skipping

Also Published As

Publication number Publication date
KR20210081228A (ko) 2021-07-01
US20220326953A1 (en) 2022-10-13
CN113094096A (zh) 2021-07-09
US11669329B2 (en) 2023-06-06
JP2021099783A (ja) 2021-07-01
US20210191724A1 (en) 2021-06-24
US11314515B2 (en) 2022-04-26

Similar Documents

Publication Publication Date Title
DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE112020001258T5 (de) Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
DE102020120372A1 (de) Programmierbare wandlungshardware
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE102018119225A1 (de) System und Verfahren für einen optimierten Winograd-Faltungsbeschleuniger
DE102021118059A1 (de) VORRICHTUNG UND VERFAHREN ZUR EFFIZIENTEN GRAFIKVERARBEITUNG EINSCHLIEßLICH STRAHLVERFOLGUNG
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102019101118A1 (de) Anweisung und Logik für systolisches Skalarprodukt mit Akkumulation
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
DE102020108476A1 (de) Mechanismus zum Ausführen nichtlinearer Funktionen in einem Beschleuniger des maschinellen Lernens
DE102020130184A1 (de) Optimierungsmechanismus mit spärlich besetzten matrizen
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE102020132871A1 (de) Verbessern von hierarchischer tiefenpuffer-cullingeffizienz durch maskenakkumulation
DE112020000848T5 (de) Skalarkernintegration
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit