DE102020108411A1 - Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit - Google Patents

Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit Download PDF

Info

Publication number
DE102020108411A1
DE102020108411A1 DE102020108411.0A DE102020108411A DE102020108411A1 DE 102020108411 A1 DE102020108411 A1 DE 102020108411A1 DE 102020108411 A DE102020108411 A DE 102020108411A DE 102020108411 A1 DE102020108411 A1 DE 102020108411A1
Authority
DE
Germany
Prior art keywords
component
graphics
floating point
processor
sub
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
DE102020108411.0A
Other languages
English (en)
Inventor
Subramaniam Maiyuran
Abhishek Rhisheekesan
Shashank Lakshminarayana
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 DE102020108411A1 publication Critical patent/DE102020108411A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/4833Logarithmic number system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4873Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • G06F7/4983Multiplying; Dividing
    • G06F7/4988Multiplying; Dividing by table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

Ein Prozessor zum Ermöglichen der Ausführung einer Gleitkommaoperation mit einfacher Präzision an einem Operanden wird offenbart. Der Prozessor weist eine oder mehrere Ausführungseinheiten auf, die jeweils über mehrere Gleitkommaeinheiten verfügen, um eine oder mehrere Anweisungen zum Durchführen der Gleitkommaoperation mit einfacher Präzision an dem Operanden auszuführen, beinhaltend das Durchführen einer Gleitkommaoperation an einer Exponentkomponente des Operanden; und das Durchführen einer Gleitkommaoperation an einer Mantissenkomponente des Operanden, umfassend das Aufteilen der Mantissenkomponente in eine erste Teilkomponente und eine zweite Teilkomponente, das Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente und das Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente und das Zurückgeben eines Ergebnisses der Gleitkommaoperation.

Description

  • GEBIET DER ERFINDUNG
  • Diese Erfindung betrifft allgemein das Durchführen von Gleitkommaoperationen in einer Prozessor-Ausführungseinheit.
  • HINTERGRUND DER BESCHREIBUNG
  • Algebraische mathematische Gleitkomma (Floating Point, FP)-Operationen mit einfacher Präzision (Single Precision, SP) (z. B. Division, Quadratwurzel, reziproke Quadratwurzel sowie inverse und transzendente mathematische Gleitkommaoperationen wie Sinus/Cosinus, Exponent und Logarithmus) sind Anweisungen, die in mehreren Anwendungen verwendet werden, welche auf Mikroprozessoren und Grafikverarbeitungseinheiten (GPUs) ausgeführt werden.
    Eine GPU verwendet mehrere Anweisungen, um Shader-Code zu verarbeiten, was häufig mathematische Gleitkommaoperationen beinhaltet.
  • Mathematische Gleitkommaoperationen implementieren typischerweise Verfahren wie etwa auf einer Nachschlagetabelle (Lookup Table, LUT) basierende iterative Konvergenz-, wiederherstellende Verschiebe-/Subtraktions-, nicht wiederherstellende subtraktive Verfahren, Array-Quadratwurzelberechner, Pseudo-Division/Multiplikation, CORDIC (COordinate Rotation Digital Computer) und Normalisierung. Allerdings sind diese Lösungen mit längeren Ausführungslatenzen und einer höheren Entwurfskomplexität verbunden und sie belegen eine größere Chip-Nutzfläche.
  • Figurenliste
  • Damit die Art und Weise, wie die vorstehend genannten Merkmale der vorliegenden Erfindung im Einzelnen funktionieren, verstanden werden kann, kann eine genauere Beschreibung der vorstehend zusammengefassten Erfindung anhand der Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es ist jedoch anzumerken, dass die beigefügten Zeichnungen lediglich typische Ausführungsformen dieser Erfindung darstellen und daher nicht im Sinne einer Einschränkung des Schutzumfangs zu verstehen sind, da die Erfindung andere ebenso wirksame Ausführungsformen zulassen kann.
    • 1 ist ein Blockschaltbild eines Verarbeitungssystems gemäß einer Ausführungsform;
    • 2 ist ein Blockschaltbild eines Prozessors gemäß einer Ausführungsform;
    • 3 ist ein Blockschaltbild eines Grafikprozessors gemäß einer Ausführungsform;
    • 4 ist ein Blockschaltbild einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen Ausführungsformen;
    • 5 ist ein Blockschaltbild eines Grafikprozessors, der von einer zusätzlichen Ausführungsform bereitgestellt wird;
    • 6A/6B veranschaulicht Thread-Ausführungslogik mit einer Anordnung von Verarbeitungselementen, die in einigen Ausführungsformen eingesetzt werden;
    • 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/11B ist ein Blockschaltbild, das ein IP-Kernentwicklungssystem gemäß einer Ausführungsform veranschaulicht;
    • 12 ist ein Blockschaltbild, das eine beispielhafte integrierte Schaltung eines Ein-Chip-Systems gemäß einer Ausführungsform veranschaulicht;
    • 13A/13B ist ein Blockschaltbild, das ein zusätzlichen beispielhaften Grafikprozessor veranschaulicht;
    • 14A/14B ist ein Blockschaltbild, das einen zusätzlichen beispielhaften Grafikprozessor einer integrierten Schaltung eines Ein-Chip-Systems gemäß einer Ausführungsform veranschaulicht;
    • 15 veranschaulicht eine Ausführungsform einer Rechenvorrichtung;
    • 16 veranschaulicht eine Ausführungsform eines Gleitkommaformats mit einfacher Genauigkeit;
    • 17 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Durchführen einer erweiterten mathematischen Gleitkommaoperation veranschaulicht;
    • 18 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Durchführen einer erweiterten mathematischen Gleitkommaoperation an einer Mantisse veranschaulicht;
    • 19 veranschaulicht einen Graphen einer anfänglichen Schätzung einer Quadratwurzel;
    • 20 veranschaulicht einen Graphen einer Differenz zwischen einer MSB (Most Significant Bit)-Quadratwurzel und einer anfänglichen Schätzung;
    • 21 veranschaulicht ein vergrößertes lineares Segment des Graphen in 20;
    • 22 veranschaulicht einen Graphen mit Indizes zum Aufsuchen von Tabelleneinträgen; und
    • 23 veranschaulicht einen Graphen einer stückweisen linearen Näherung.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die nachstehende Beschreibung enthält eine Reihe spezifischer Einzelheiten, um ein gründlicheres Verständnis der vorliegenden Erfindung zu vermitteln. Es wird jedoch einem Fachmann auf diesem Gebiet klar sein, dass die vorliegende Erfindung ohne eine oder mehrere dieser spezifischen Einzelheiten ausgeführt werden kann. In anderen Fällen wurden ausreichend bekannte Merkmale nicht beschrieben, um zu vermeiden, dass die vorliegende Erfindung unklar wird.
  • In Ausführungsformen beinhaltet ein Verfahren und eine Vorrichtung zum Ermöglichen der Ausführung einer Gleitkommaoperation mit einfacher Genauigkeit das Teilen einer Mantissenkomponente eines Operanden in eine erste Teilkomponente und eine zweite Teilkomponente, das Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente und das Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente. In weiteren Ausführungsformen wird das Verarbeiten der Mantissenteilkomponenten parallel durchgeführt.
  • Systemüberblick
  • 1 ist ein Blockschaltbild eines Verarbeitungssystems 100 gemäß einer Ausführungsform. In verschiedenen Ausführungsformen weist das System 100 einen oder mehrere Prozessoren 102 und einen oder mehrere Grafikprozessoren 108 auf und kann als Einzelprozessor-Desktopsystem, als Mehrprozessor-Arbeitsstationssystem oder als Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 ausgeführt sein. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in die integrierte Schaltung eines Ein-Chip-Systems (Systemon-a-Chip, SoC) aufgenommen und für den Einsatz in mobilen, handgehaltenen oder eingebetteten Vorrichtungen ausgelegt ist.
  • In einer Ausführungsform kann das System 100 eine serverbasierte Gaming-Plattform, eine Spielekonsole, beispielsweise eine Spiel- und Medienkonsole, eine mobile Gaming-Konsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole beinhalten oder in eine solche integriert sein. In einigen Ausführungsformen ist das System 100 ein Mobiltelefon, ein Smartphone, eine Tablet-Rechenvorrichtung oder eine mobile Internet-Vorrichtung. Das Verarbeitungssystem 100 kann auch eine tragbare Vorrichtung beinhalten, beispielsweise eine tragbare SmartWatch-Vorrichtung, eine intelligente Brillenvorrichtung, eine Vorrichtung für erweiterte Realität (Augmented Reality, AR) oder eine Vorrichtung für virtuelle Realität (Virtual Reality, VR) oder mit einer solchen gekoppelt oder in eine solche integriert sein. In einigen Ausführungsformen ist das Verarbeitungssystem 100 ein Fernsehgerät oder ein Beistellgerät (Set-Top-Box) mit einem oder mehreren Prozessoren 102 und einer grafischen Schnittstelle, die von einem oder mehreren Grafikprozessoren 108 generiert 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- und Benutzersoftware durchführen. In einigen Ausführungsformen ist jeder 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. Mehrere Prozessorkerne 107 können jeweils einen anderen Anweisungssatz 109 verarbeiten, der Anweisungen zum Ermöglichen der Emulation anderer Anweisungssätze beinhalten kann. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen beinhalten, beispielsweise einen digitalen Signalprozessor (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 durch verschiedene Komponenten des Prozessors 102 gemeinsam genutzt. In einigen Ausführungsformen kann der Prozessor 102 auch einen externen Cache (z. B. einen Level-3 (L3)-Cache oder einen (nicht gezeigten) Cache der letzten Ebene (Last Level Cache, LLC)) aufweisen, der von Prozessorkernen 107 unter Verwendung bekannter Cache-Kohärenz-Techniken gemeinsam genutzt werden kann. Eine Registerdatei 106 ist zusätzlich im Prozessor 102 enthalten 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, beispielsweise eine Version des DMI (Direct Media Interface)-Busses sein. 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 ein oder mehreren Prozessoren 102 eine integrierte Speichersteuerung 116 und einen Plattformsteuerungsknoten 130 auf. Die Speichersteuerung 116 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuerungsknoten (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 112 gekoppelt, der mit den ein oder mehreren Grafikprozessoren 108 in Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit 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 darauf 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. Festplattenlaufwerk, Flash-Speicher etc.). Die Datenspeichervorrichtung 124 kann eine Verbindung über eine Datenspeicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, beispielsweise einen PCI (Peripheral Component Interconnect)-Bus (z. B. PCI, PCI Express), herstellen. Die Berührungssensoren 125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. Bei dem drahtlosen Sendeempfänger 126 kann es sich um einen WiFi-Sendeempfänger, einen Bluetooth-Sendeempfänger oder einen Mobilnetz-Sendeempfänger wie etwa einen 3G-, 4G- 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. Personal System 2 (PS/2)) mit dem System. Der Plattformsteuerungsknoten 130 kann auch eine Verbindung zu einem oder mehreren USB (Universal Serial Bus)-Steuerungen 142 herstellen, um Eingabevorrichtungen, beispielsweise 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, beispielsweise den externen Grafikprozessor 112. In einer Ausführungsform können der Plattformsteuerungsknoten 130 und/oder die Speichersteuerung 160 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.
  • 2 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. Diejenigen Elemente von 2 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. 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 eine 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 Inneren 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, beispielsweise 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, beispielsweise 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 lenken. 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, beispielsweise 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 Hochleistungs-Speichermodul 218, beispielsweise einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen verwenden jeder der Prozessorkerne 202A-202N und der Grafikprozessor 208 eingebettete Speichermodule 218 als gemeinsam genutzten Last-Level-Cache.
  • 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. 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.
  • 3 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. 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 weist der Grafikprozessor 300 auch eine Anzeigesteuerung 302 auf, um Anzeigeausgabedaten an eine Anzeigevorrichtung 320 zu lenken. 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 320 kann es sich um eine interne oder externe Anzeigevorrichtung handeln. In einer Ausführungsform ist die Anzeigevorrichtung 320 eine kopfmontierte Anzeigevorrichtung, beispielsweise eine VR (Virtual Reality)-Anzeigevorrichtung oder eine AR (Augmented Reality)-Anzeigevorrichtung. In einigen Ausführungsformen weist der Grafikprozessor 300 eine Video-Codec-Engine 306 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten auf, 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 sowie SMPTE (Society of Motion Picture & Television Engineers) 421M/VC-1 und JPEG (Joint Photographic Experts Group)-Formate wie etwa JPEG und MJPEG (Motion JPEG)-Formate.
  • In einigen Ausführungsformen weist 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 weist die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen auf, beispielsweise das Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (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.
  • 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 in 3 gezeigten GPE 310. 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, der Befehle für die 3D-Pipeline 312 und die Medien-Pipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer beinhalten, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf Daten beinhalten, die im Speicher gespeichert sind, beispielsweise, jedoch nicht beschränkt auf Vertex- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316. Die 3D-Pipeline 312 und die Medien-Pipeline 316 verarbeiten die Befehle und Daten, indem sie Operationen über Logik in den jeweiligen Pipelines durchführen oder einen oder mehrere Ausführungsthreads an eine Grafikkernanordnung 414 versenden.
    In einer Ausführungsform beinhaltet die Grafikkernanordnung 414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 415A, Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, der Universal- und grafikspezifische Ausführungslogik zum Durchführen von Grafik- und Rechenoperationen beinhaltet, ebenso wie Beschleunigungslogik mit fester Funktion für Texturverarbeitung und/oder maschinelles Lernen und künstliche Intelligenz.
  • In verschiedenen Ausführungsformen beinhaltet die 3D-Pipeline 312 Festfunktions- und programmierbare Logik, um ein oder mehrere Shader-Programme, beispielsweise Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme, zu verarbeiten, indem die Anweisungen verarbeitet werden und Ausführungsthreads an die Grafikkernanordnung 414 versendet werden. Die Grafikkernanordnung 414 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) im bzw. in den Grafikkern(en) 415A-414B der Grafikkernanordnung 414 beinhaltet eine Unterstützung verschiedener 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungsthreads ausführen, die mit mehreren Shadern verknüpft sind.
  • In einigen Ausführungsformen beinhaltet die Grafikkernanordnung 414 auch Ausführungslogik zum Durchführen von Medienfunktionen, beispielsweise Video- und/oder Bildverarbeitung. In einer Ausführungsform beinhalten die Ausführungseinheiten zusätzlich Universallogik, die programmierbar ist, um parallele Universal-Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen durchzuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder in Verbindung mit Universallogik im bzw. in den Prozessorkern(en) 107 aus 1 oder Kern 202A-202N wie in 2 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 für die Grafikkernanordnung 414 ausgeführt werden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Threads in 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 aufweist, 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, Sampler- 421, Math- 422 und ITC (Inter-Thread Communication) 423-Logik. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 in der gemeinsam genutzten Funktionslogik 420.
  • Einige gemeinsam genutzte Funktion wird 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.
  • 5 ist en Blockschaltbild von Hardwarelogik eines Grafikprozessorkerns 500 gemäß einigen hier beschriebenen Ausführungsformen. Elemente von 5 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. Der dargestellte Grafikprozessorkern 500 ist, in einigen Ausführungen, in der Grafikkernanordnung 414 von 4 enthalten. Bei dem Grafikprozessorkern 500, der manchmal als Kern-Slice bezeichnet wird, kann es sich um einen oder mehrere Grafikkerne in einem modularen Grafikprozessor handeln. Der Grafikprozessorkern 500 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 Grafikkern 500 kann einen Festfunktionsblock 530 aufweisen, der mit mehreren Unterkernen 501A-501F, auch als Sub-Slices bezeichnet, gekoppelt ist, die modulare Blöcke von Universal- und Festfunktionslogik aufweisen.
  • In einigen Ausführungsformen weist der Festfunktionsblock 530 eine Geometrie/Festfunktions-Pipeline 536 auf, die von allen Teilkernen in dem Grafikprozessor 500 gemeinsam genutzt werden kann, beispielsweise in Grafikprozessorimplementierungen mit geringerer Leistung und/oder geringerem Stromverbrauch. In verschiedenen Ausführungsformen weist die Geometrie/Festfunktions-Pipeline 536 eine 3D-Festfunktions-Pipeline (z. B. eine 3D-Pipeline 312 wie in 3 und 4), eine Video-Frontend-Einheit, einen Thread-Erzeuger und Thread-Versender und einen URB-Manager auf, der vereinheitlichte Rückgabepuffer (Unified Return Buffers, URBs) verwaltet, beispielsweise den vereinheitlichten Rückgabepuffer 418 von 4.
  • In einer Ausführungsform weist der Festfunktionsblock 530 auch eine Grafik-SoC-Schnittstelle 537, eine Grafik-Mikrosteuerung 538 und eine Medien-Pipeline 539 auf. Die Grafik-SoC-Schnittstelle 537 stellt eine Schnittstelle zwischen dem Grafikkern 500 und anderen Prozessorkernen in einer integrierten Schaltung eines Ein-Chip-Systems bereit. Die Grafik-Mikrosteuerung 538 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessors 500 zu verwalten, einschließlich Thread-Versand, Zeitplanung und Vorwegnahme. Die Medien-Pipeline 539 (z. B. die Medien-Pipeline 316 von 3 und 4) weist Logik auf, um eine Decodierung, Codierung, Vorverarbeitung und/oder Nachverarbeitung von Multimediadaten, einschließlich Bild- und Videodaten, zu ermöglichen. Die Medien-Pipeline 539 implementiert Medienoperationen über Anforderungen an die Rechen- oder Abtastlogik in den Teilkernen 501-501F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 537 dem Grafikkern 500, mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten 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 537 kann auch eine Kommunikation mit Festfunktionsvorrichtungen im SoC, beispielsweise Kamera-Bildgebungspipelines, ermöglichen und ermöglicht die Verwendung globaler Speicheratome und/oder implementiert globale Speicheratome, die von dem Grafikkern 500 und CPUs im SoC gemeinsam genutzt werden können. Die SoC-Schnittstelle 537 kann auch Energieverwaltungssteuerungen für den Grafikkern 500 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 500 und anderen Taktdomänen im SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 537 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 539 versendet werden, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie- und Festfunktions-Pipeline (z. B. die Geometrie- und Festfunktions-Pipeline 536, die Geometrie- und Festfunktions-Pipeline 514), wenn Grafikverarbeitungsoperationen durchzuführen sind.
  • Die Grafik-Mikrosteuerung 538 kann dafür ausgelegt sein, verschiedene Zeitplanungs- und Verwaltungsaufgaben für den Grafikkern 500 durchzuführen. In einer Ausführungsform kann die Grafik-Mikrosteuerung 538 eine Grafik- und/oder Rechenarbeitslast-Zeitplanung an den verschiedenen parallelen Grafik-Engines in Ausführungseinheit (Execution Unit, EU)-Anordnungen 502A-502F, 504A-504F in den Unterkemen 501A-501F durchführen. In diesem Zeitplanungsmodell kann Host-Software, die auf einem CPU-Kern eines den Grafikkern 500 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 538 auch Niedrigenergie- oder Ruhezustände für den Grafikkern 500 ermöglichen, indem es dem Grafikkern 500 ermöglicht wird, Register in dem Grafikkern 500 über Niedrigenergie-Zustandswechsel hinweg unabhängig von dem Betriebssystem und/oder der Grafiktreiber-Software auf dem System zu speichern und wiederherzustellen.
  • Der Grafikkern 500 kann mehr oder weniger als die dargestellten Teilkerne 501A-501F, bis zu N modulare Teilkerne, aufweisen. Für jeden Satz von N Teilkernen kann der Grafikkern 500 auch gemeinsam genutzte Funktionslogik 510, gemeinsam genutzten Speicher und/oder Cache-Speicher 512, eine Geometrie/Festfunktions-Pipeline 514 sowie zusätzliche Festfunktionslogik 516 aufweisen, um verschiedene Grafik- und Datenverarbeitungsoperationen zu beschleunigen. Die gemeinsam genutzte Funktionslogik 510 kann Logikeinheiten beinhalten, die mit der gemeinsam genutzten Funktionslogik 420 von 4 verknüpft ist (z. B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik), die von allen N Teilkernen in dem Grafikkern 500 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher 512 kann ein Last-Level-Cache für den Satz von N Teilkernen 501A-501F in dem Grafikkern 500 sein und kann auch als gemeinsam genutzter Speicher dienen, der für mehrere Teilkerne zugänglich ist. Die Geometrie/Festfunktions-Pipeline 514 kann anstelle der Geometrie/Festfunktions-Pipeline 536 in dem Festfunktionsblock 530 enthalten sein und kann dieselbe oder ähnliche Logik aufweisen.
  • In einer Ausführungsform weist der Grafikkern 500 zusätzliche Festfunktionslogik 516 auf, die verschiedene Festfunktions-Beschleunigungslogiken zur Verwendung durch den Grafikkern 500 beinhalten kann. In einer Ausführungsform beinhaltet die zusätzliche Festfunktionslogik 516 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 516, 536 und eine Cull-Pipeline, bei der es sich um eine zusätzliche Geometrie-Pipeline handelt, die in der zusätzlichen Festfunktionslogik 516 enthalten ist. In einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version der vollständigen Geometrie-Pipeline. Die volle 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 516 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 verbrauchen, 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 516 auch Maschinenlern-Beschleunigungslogik aufweisen, beispielsweise eine Festfunktions-Matrixmultiplikationslogik, für Implementierungen, die Optimierungen für Maschinenlemtraining oder Inferenzierung beinhalten.
  • In jedem Grafik-Teilkern 501A-501F 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-Unterkerne 501A-501F beinhalten mehrere EU-Anordnungen 502A-502F, 504A-504F, TD/IC (Thread Dispatch & Inter-Thread Communication)-Logik 503A-503F, einen 3D (z. B. Textur)-Abtaster 505A-505F, einen Medienabtaster 506A-506F, einen Shader-Prozessor 507A-507F und einen gemeinsam genutzten lokalen Speicher (Shared Local Memory, SLM) 508A-508F. Die EU-Anordnungen 502A-502F, 504A-504F 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 503A-503F 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-Sampler 505A-505F kann Textur- oder andere 3D-Grafik-bezogene Daten in den Speicher einlesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem Texturformat, das mit einer gegebenen Textur verknüpft ist, unterschiedlich lesen. Der Medienabtaster 506A-506F kann ähnliche Leseoperationen basierend auf dem mit den Mediendaten verknüpften Typ und Format durchführen. In einer Ausführungsform kann jeder Grafik-Teilkern 501A-501F alternativ einen vereinheitlichten 3D- und Medienabtaster aufweisen. Threads, die auf den Ausführungseinheiten in jedem der Teilkerne 501A-501F ausgeführt werden, können gemeinsam genutzten lokalen Speicher 508A-508F 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.
  • Ausführungseinheiten
  • Die 6A-6B veranschaulichen eine Thread-Ausführungslogik 600, die eine Anordnung von Verarbeitungselementen beinhaltet, welche in einem Grafikprozessorkern gemäß hier beschriebenen Ausführungsformen eingesetzt wird. Elemente von 6A-6B 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. 6A zeigt einen Überblick über eine Thread-Ausführungslogik 600, die eine Variante der Hardwarelogik beinhalten kann, welche mit jedem Teilkern 501A-501F von 5 dargestellt wird. 6B veranschaulicht beispielhafte interne Einzelheiten einer Ausführungseinheit.
  • Wie in 6A veranschaulicht, beinhaltet die Thread-Ausführungslogik 600 in einigen Ausführungsformen einen Shader-Prozessor 602, einen Thread-Dispatcher 604, einen Anweisungscache 606, eine skalierbare Ausführungseinheit-Anordnung mit mehreren Ausführungseinheiten 608A-608N, einen Sampler 610, einen Datencache 612 und einen Datenport 614. In einer Ausführungsform kann die skalierbare Ausführungseinheit-Anordnung dynamisch skalieren, indem ein oder mehrere Ausführungseinheiten (z. B. irgendeine der Ausführungseinheiten 608A, 608B, 608C, 608D bis 608N-1 und 608N) 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 600 eine oder mehrere Verbindungen zu einem Speicher, beispielsweise Systemspeicher oder Cache-Speicher, über eines oder mehrere von einem Anweisungscache 606, einem Datenport 614, einem Sampler 610 und den Ausführungseinheiten 608A-608N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 608A) 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 608A-608N skalierbar, so dass sie eine beliebige Anzahl von einzelnen Ausführungseinheiten beinhaltet.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 608A-608N primär verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 602 kann die verschiedenen Shader-Programme verarbeiten und Ausführungsthreads versenden, die mit den Shader-Programmen über einen Thread-Dispatcher 604 verknüpft sind. In einer Ausführungsform beinhaltet der Thread-Dispatcher eine Logik zum Vermitteln von Thread-Initiierungsanforderungen von den Grafik- und Medien-Pipelines und zum Instanziieren der angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 608A-608N. 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 604 auch Laufzeit-Thread-Spawning-Anforderungen von den ausführenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 608A-608N einen Anweisungssatz, der eine native Unterstützung für viele standardmäßige 3D-Grafik-Shader-Anweisungen beinhaltet, sodass Shader-Programme von Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit minimaler Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), eine Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und eine Universalverarbeitung (z. B. Rechen- und Medien-Shader). Jede der Ausführungseinheiten 608A-608N ist zur Ausführung von SIMD (Single Instruction Multiple Data, eine Anweisung mehrere Daten) mit mehreren Ausgaben in der Lage, und ein Multithread-Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread in jeder Ausführungseinheit beinhaltet eine dedizierte Registerdatei mit hoher Bandbreite und einen zugehörigen unabhängigen Thread-Zustand. Die Ausführung erfolgt mit mehreren Ausgaben pro Takt an Pipelines, die zu Ganzzahl-Gleitkommaoperationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen in der Lage sind. Während auf Daten vom Speicher oder eine der gemeinsam genutzten Funktionen gewartet wird, bewirkt die Abhängigkeitslogik in den Ausführungseinheiten 608A-608N, 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.
  • Jede Ausführungseinheit in den Ausführungseinheiten 608A-608N 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 Ablaufsteuerung 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 608A-608N 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 64-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 609A-609N mit einer Thread-Steuerlogik (607A-607N) 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 609A-609N weist wenigstens zwei Ausführungseinheiten auf. Beispielsweise weist die verschmolzene Ausführungseinheit 609A eine erste EU 608A, eine zweite EU 608B und Thread-Steuerlogik 607A auf, die der ersten 608A und der zweiten EU 608B gemeinsam ist. Die Thread-Steuerlogik 607A steuert Threads, die auf der verschmolzenen Grafikausführungseinheit 609A ausgeführt werden, was es jeder EU in den verschmolzenen Ausführungseinheiten 609A-609N ermöglicht, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungs-Caches (z. B. 606) sind in der Thread-Ausführungslogik 600 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 612) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In einigen Ausführungsformen ist ein Abtaster 610 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen beinhaltet der Abtaster 610 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 600 ü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-Logic etc.) in dem Shader-Prozessor 602 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 602 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 602 Threads über den Thread-Dispatcher 604 an eine Ausführungseinheit (z. B. 608A). In einigen Ausführungsformen verwendet der Shader-Prozessor 602 eine Texturabtastlogik im Sampler 610, 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 614 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 600 bereit, um verarbeitete Daten an einen Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen beinhaltet der Datenport 614 einen oder mehrere Cache-Speicher (z. B. Datencache 612) oder ist damit gekoppelt, um Daten für den Speicherzugriff über den Datenport zwischenzuspeichern.
  • Wie in 6B veranschaulicht, kann eine Grafikausführungseinheit 608 eine Anweisungsabrufeinheit 637, eine GRF-Anordnung (General Register File, Allgemeinregisterdatei) 624, eine ARF-Anordnung (Architectural Register File, Architekturregisterdatei) 626, einen Thread-Arbiter 622, eine Sendeeinheit 630, eine Verzweigungseinheit 632, ein Satz von SIMD-Gleitkommaeinheiten (Floating Point Units, FPUs) 634, und, in einer Ausführungsform, ein Satz von dedizierten Ganzzahl-SIMD-ALUs 635 aufweisen. Die GRF 624 und die ARF 626 beinhalten den Satz von allgemeinen Registerdateien und Architekturregisterdateien, die mit jedem gleichzeitigen Hardware-Thread verknüpft sind, der in der Grafikausführungseinheit 608 aktiv sein kann. In einer Ausführungsform wird der Architekturzustand pro Thread in der ARF 626 gepflegt, während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 624 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in thread-spezifischen Registern in der ARF 626 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 608 eine Architektur auf, bei der es sich um eine Kombination aus simultanem Multithreading (Simultaneous Multi-Threading, SMT) und feinkörnigem verschalteten Multithreading (Interleaved Multi-Threading, IMT) handelt. Die Architektur hat eine modulare Konfiguration, die zur Entwurfszeit basierend auf einer Zielanzahl von gleichzeitigen Threads und einer Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei Ressourcen der Ausführungseinheit über Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads auszuführen.
  • In einer Ausführungsform kann die Grafikausführungseinheit 608 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 622 des Threads der Grafikausführungseinheit 608 kann die Anweisungen zur Ausführung an eines von der Sendeeinheit 630, der Verzweigungseinheit 642 oder den SIMD-FPU(s) 634 versenden. Jeder Ausführungsthread kann auf Universalregister in der GRF 624 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 KByte in der GRF 624, 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 können bis zu sieben Threads gleichzeitig ausgeführt werden, auch wenn die Anzahl von Threads pro Ausführungseinheit ebenfalls je nach Ausführungsform variieren kann. In einer Ausführungsform, in der sieben Threads auf 4 KByte zugreifen können, kann die GRF 624 insgesamt 28 Byte 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 630 ausgeführt werden. In einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 632 versendet, um eine SIMD-Divergenz und letztendliche Konvergenz zu ermöglichen.
  • In einer Ausführungsform weist die Grafikausführungseinheit 608 einen oder mehrere SIMD-Gleitkommaeinheiten (Floating Point Units, FPUs) 634 zum Durchführen von Gleitkommaoperationen auf. In einer Ausführungsform unterstützt bzw. unterstützen die FPU(s) 634 auch Ganzzahlberechnungen. In einer Ausführungsform kann bzw. können die FPU(s) 634 bis zu einer Anzahl M von 32-Bit Gleitkomma- (oder Ganzzahl-)Operationen SIMD-ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen SIMD-ausführen. In einer Ausführungsform stellt wenigstens eine der FPUs eine erweiterte mathematische Funktionalität bereit, um transzendente mathematische Funktionen mit hohem Durchsatz und 64-Bit-Gleitkomma mit doppelter Präzision zu unterstützen. In einigen Ausführungsformen liegen auch 8-Bit-Ganzzahl-SIMD-ALUs 635 vor, die speziell optimiert werden können, um Operationen durchzuführen, die mit Maschinenlernberechnungen verknüpft sind.
  • In einer Ausführungsform können Anordnungen von mehreren Instanzen der Ausführungseinheit 608 in einer Grafik-Unterkern-Gruppierung (z. B. einem Sub-Slice) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Unterkerngruppierung wählen. In einer Ausführungsform kann die Ausführungseinheit 608 Anweisungen über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform wird jeder Thread, der in der Grafikausführungseinheit 608 ausgeführt wird, in einem anderen Kanal ausgeführt.
  • 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 Format 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.
  • 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, beispielsweise Kanalauswahl (z. B. Vorhersage) und Datenkanalreihenfolge (z. B. Swizzle). Für Anweisungen im 128-Bit-Anweisungsformat 710 beschränkt ein Ausführungsgrößenfeld (exec-size) 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen steht das Feld exec-size 716 nicht für die Verwendung im kompakten 64-Bit-Anweisungsformat 730 zur Verfügung.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden auf, was zwei Quelloperanden, src0 720, src1 722, und ein Ziel 718 einschließt. In einigen Ausführungseinheiten unterstützen die Ausführungseinheiten Doppelzielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden aufweisen (z. B., SRC2 724), wobei der Anweisungs-Opcode 712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit der Anweisung weitergegeben wird.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das beispielsweise spezifiziert, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Beispielsweise kann die Anweisung in einem ersten Modus eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und in einem zweiten Modus kann die Anweisung eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfeldes 726, ob die Anweisung eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem unmittelbaren Adressfeld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen sind Anweisungen basierend auf Bitfeldern von Opcode 712 gruppiert, um die Opcode-Decodierung 740 zu vereinfachen. Für einen 8-bit-Opcode gestatten es die Bits 4, 5 und 6 der Ausführungseinheit, den Opcode-Typ zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen beinhaltet eine Bewegungs- und Logik-Opcode-Gruppe 742 Datenbewegungs- und Logikanweisungen (z. B. Bewegen (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und Logikgruppe 742 die fünf höchstwertigen Bits (Most Significant Bits, MSB) gemeinsam, wobei Anweisungen zum Bewegen (mov) in der Form 0000xxxxb vorliegen und Logikanweisungen in der Form 0001xxxxb vorliegen. Eine Flusssteuerungsanweisungsgruppe 744 (z. B. Aufruf, Sprung (jmp)) beinhaltet Anweisungen in der Form 0010xxxxb (z. B. 0x20). Eine sonstige Anweisungsgruppe 746 beinhaltet eine Mischung von Anweisungen, einschließlich Synchronisationsanweisungen (z. B. Warten, Senden) in der Form 0011xxxxb (z. B. 0x30). Eine Parallelmathematik-Anweisungsgruppe 748 beinhaltet komponentenweise arithmetische Anweisungen (z. B. Addieren (add), Multiplizieren (mul)) in der Form 0100xxxxb (z. B. 0x40). Die Parallelmathematik-Anweisungsgruppe 748 führt die arithmetischen Operationen parallel über Datenkanäle durch. Die Vektormathematik-Gruppe 750 beinhaltet arithmetische Anweisungen (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50). Die Vektormathematik führt arithmetische Operationen durch, beispielsweise Skalarprodukt-Berechnungen für Vektoroperanden.
  • 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, beispielsweise 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ührungsform 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 hardware-beschleunigten 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 Sampler 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 Sampler-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 weist die Rasterisiererlogik eine Windower/Maskierer-Einheit zum Durchführen einer Dreiecks- und Linienrasterisierung mit fester Funktion auf. 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 weist die Medien-Pipeline 830 des Grafikprozessors eine Medien-Engine 837 und ein Video-Frontend 834 auf. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipeline-Befehle von dem Befehls-Streamer 803. In einigen Ausführungsformen weist die Medien-Pipeline 830 einen getrennten Befehls-Streamer auf. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 837. In einigen Ausführungsformen weist die Medien-Engine 837 Thread-Spawning-Funktionalität auf, um Threads zum Versenden an die Thread-Ausführungslogik 850 über den Thread-Dispatcher 831 zu spawnen.
  • In einigen Ausführungsformen weist der Grafikprozessor 800 eine Anzeige-Engine 840 auf. 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 weist die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843 auf. 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.
  • 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-Primitiv-Befehl 932 verwendet, um Vertex-Operationen an 3D-Primitiven ü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-Primitiven 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 Grafikprimitiven 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, beispielsweise 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) oder GLSL (OpenGL Shader Language) 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 jegliche Shader-Anweisungen 1012 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Bei der Kompilierung kann es sich um eine Just-in-Time (JIT)-Kompilierung handeln oder die Anwendung kann eine Shader-Vorkompilierung durchführen. In einigen Ausführungsformen werden Shader hoher Ebene während der Kompilierung der 3D-Grafikanwendung 1010 in Shader niedrigerer Ebene kompiliert. In einigen Ausführungsformen werden die Shader-Anweisungen 1012 in einer Zwischenform bereitgestellt, beispielsweise einer Version von Standard Portable Intermediate Representation (SPIR), das von der Vulkan-API verwendet wird.
  • In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 1026 einen Backend-Shader-Compiler 1027, um die Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API im Einsatz ist, werden Shader-Anweisungen 1012 in der GLSL-Hochsprache zur Kompilierung an einen Benutzermodus-Grafiktreiber 1026 weitergegeben. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 Betriebssystem-Kernelmodus-Funktionen 1028, um mit einem Kernelmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu versenden.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentativen Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik in einer integrierten Schaltung wie etwa einem Prozessor repräsentiert und/oder definiert. Beispielsweise kann das maschinenlesbare Medium Befehle beinhalten, die verschiedene Logiken im Prozessor repräsentieren. Beim Auslesen durch eine Maschine können die Befehle die Maschine veranlassen, die Logik zu fertigen, um die hier beschriebenen Techniken bzw. Verfahren durchzuführen. Solche Darstellungen, „IP-Kerne“ genannt, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem physischen, maschinenlesbaren Medium als Hardwaremodell, das die Struktur der integrierten Schaltung beschreibt, gespeichert sein können. Das Hardwaremodell kann an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, welche das Hardwaremodell auf Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann dergestalt gefertigt werden, dass die Schaltung Operationen durchführt, die im Zusammenhang mit den hier beschriebenen Ausführungsformen beschrieben werden.
  • 11A ist ein Blockschaltbild, das ein IP-Kernentwicklungssystem veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung zum Durchführen von Operationen gemäß einer Ausführungsform herzustellen. Das IP-Kementwicklungssystem 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-Kementwurf ü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 weist mehrere Einheiten von Hardwarelogik 1172, 1174 auf, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann wenigstens teilweise in Logikhardware mit konfigurierbarer Logik oder 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 beispielsweise 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. Die Gehäusebaugruppe 1170 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, beispielsweise eine Hauptplatine, einen anderen Chipsatz oder ein Multi-Chipmodul.
  • In einigen Ausführungsformen sind die Logikeinheiten 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die dafür ausgelegt ist, elektrische Signale zwischen der Logik 1172, 1174 zu leiten. Bei der Brücke 1182 kann es sich um eine dichte Zwischenverbindungsstruktur handeln, die eine Route für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Auch wenn zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 veranschaulicht sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Halbleiterplättchen aufweisen. Die ein oder mehreren Halbleiterplättchen können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Halbleiterplättchen enthalten ist. Alternativ können mehrere Halbleiterplättchen oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Halbleiterplättchen und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • Beispielhafte integrierte Schaltung eines Ein-Chip-Systems
  • Die 12-14 veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hier beschriebenen Ausführungsformen gefertigt werden können. Zusätzlich zu dem Veranschaulichten können eine andere Logik und andere Schaltungen enthalten sein, einschließlich zusätzlicher Graphikprozessoren/-kerne, Peripherie-Schnittstellen-Controller oder Universalprozessorkerne.
  • 12 ist ein Blockschaltbild, das eine beispielhafte integrierte Schaltung 1200 eines Ein-Chip-Systems veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. Die beispielhafte integrierte Schaltung 1200 weist einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs) auf, wenigstens einen Grafikprozessor 1210, und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 aufweisen, von denen jeder ein modularer IP-Kern von derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung 1200 weist Peripherie- oder Buslogik einschließlich einer USB-Steuerung 1225, einer UART-Steuerung 1230, einer SPI/SDIO-Steuerung 1235 und einer I2S/I2-Steuerung 1240 auf. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einem oder mehreren von einer HDMI (High-Definition Multimedia Interface)-Steuerung 1250 und einer MIPI (Mobile Industry Processor Interface)-Anzeigeschnittstelle 1255 gekoppelt ist. Eine Datenspeicherung kann durch ein Flash-Speicher-Subsystem 1260 bereitgestellt sein, das einen Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. Die Speicherschnittstelle kann über eine Speichersteuerung 1265 für Zugriffe auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 1270 auf.
  • Die 13A-13B sind Blockschaltbilder, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hier beschriebenen Ausführungsformen veranschaulichen. 13A veranschaulicht einen beispielhaften Grafikprozessor 1310 einer integrierten Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. 13B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 1340 einer integrierten Schaltung eines Ein-Chip-Systems, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. Der Grafikprozessor 1310 von 13A ist ein Beispiel für einen leistungsarmen Grafikprozessorkern. Der Grafikprozessor 1340 aus 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 Primitive und Vertex-Daten. Die ein oder mehreren Fragment-Prozessoren 1315A-1315N verwenden die von dem Vertex-Prozessor 1305 generierten Primitiv- 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 ein 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, weist der Grafikprozessor 1340 die ein oder mehreren MMUs 1320A-1320B, Caches 1325A-1325B und Schaltungszwischenverbindungen 1330A-1330B des Grafikprozessors 1310 von 13A auf. Der Grafikprozessor 1340 weist einen oder mehrere Shader-Kerne 1355A-1355N (z. B., 1355A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N) auf, 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 weist der Grafikprozessor 1340 einen Zwischenkern-Aufgabenmanager 1345 auf, 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.
  • 14A-14B veranschaulicht eine zusätzliche beispielhafte Grafikprozessorlogik gemäß hier beschriebenen Ausführungsformen. 14A veranschaulicht einen Grafikkern 1400, der im Grafikprozessor 1210 aus 12 enthalten sein kann und bei dem es sich um einen vereinheitlichten Shader-Kern 1355A-1355N wie in 13B handeln kann. 14B veranschaulicht eine hochparallele Universal-Grafikverarbeitungseinheit 1430, die für den Einsatz in einem Multi-Chip-Modul geeignet ist.
  • Wie in 14A gezeigt, weist der Grafikkern 1400 einen gemeinsam genutzten Anweisungscache 1402, eine Textureinheit 1418 und einen Cache/gemeinsam genutzten Speicher 1420 auf, die den Ausführungsressourcen in dem Grafikkern 1400 gemeinsam sind. Der Grafikkern 1400 kann mehrere Slices 1401A-1401N oder eine Partition für jeden Kern aufweisen, und ein Grafikprozessor kann mehrere Instanzen des Grafikkerns 1400 aufweisen. Die Slices 1401A-1401N können Unterstützungslogik mit einem lokalen Anweisungscache 1404A-1404N, einen Thread-Planer 1406A-1406N, einen Thread-Dispatcher 1408A-1408N und einen Satz von Registern 1410A aufweisen. Um Logikoperationen durchzuführen, können die Slices 1401A-1401N einen Satz von zusätzlichen Funktionseinheiten (Additional Function Units, AFUs 1412A-1412N), Gleitkommaeinheiten (Floating-Point Units, FPUs 1414A-1414N), arithmetische Logikeinheiten (Arithmetic Logic Units, ALUs 1416-1416N) für Ganzzahlen, Adressberechnungseinheiten (Address Computational Units, ACUs 1413A-1413N), Gleitkommaeinheiten mit doppelter Genauigkeit (Double-Precision Floating-Point Units, DPFPU 1415A-1415N) und Matrixverarbeitungseinheiten (Matrix Processing Units, MPU 1417A-1417N) aufweisen.
  • Einige der Recheneinheiten arbeiten mit einer bestimmten Genauigkeit. Beispielsweise können die FPUs 1414A-1414N Gleitkommaoperationen mit einfacher Genauigkeit (32 Bit) und halber Genauigkeit (16 Bit) durchführen, während die DPFPUs 1415A-1415N Gleitkommaoperationen mit doppelter Genauigkeit (64 Bit) durchführen. Die ALUs 1416A-1416N können Ganzzahloperationen mit variabler Genauigkeit bei 8-Bit-, 16-Bit- und 32-Bit-Genauigkeit durchführen und können für Operationen mit gemischter Genauigkeit ausgelegt sein. Die MPUs 1417A-1417N können auch für Matrixoperationen mit gemischter Genauigkeit ausgelegt sein, was Gleitkommaoperationen mit halber Genauigkeit und 8-Bit-Ganzzahloperationen einschließt. Die MPUs 1417-1417N können diverse Matrixoperationen durchführen, um Anwendungsrahmen für maschinelles Lernen zu beschleunigen, was das Ermöglichen einer Unterstützung für eine beschleunigte allgemeine Matrix-Matrix-Multiplikation (GEneral Matrix to Matrix multiplication, GEMM) einschließt. Die AFUs 1412A-1412N können zusätzliche Logikoperationen durchführen, die nicht von den Gleitkomma- oder Ganzzahleinheiten unterstützt werden, einschließlich trigonometrischer Operationen (z. B. Sinus, Cosinus etc.).
  • Wie in 14B gezeigt, kann eine Universal-Grafikverarbeitungseinheit (General-Purpose Graphics Processing Unit, GPGPU) 1430 dafür ausgelegt sein, hochparallele Rechenoperationen zu ermöglichen, die von einer Anordnung von Grafikverarbeitungseinheiten durchgeführt werden sollen. Zusätzlich kann die GPGPU 1430 direkt mit anderen Instanzen der GPGPU verknüpft sein, um einen Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für besonders tiefe neuronale Netze zu verbessern. Die GPGPU 1430 weist eine Host-Schnittstelle 1432 auf, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In einer Ausführungsform ist die Host-Schnittstelle 1432 eine PCI-Express-Schnittstelle. Allerdings kann es sich bei der Host-Schnittstelle auch um eine anbieterspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur handeln. Die GPGPU 1430 empfängt Befehle von dem Host-Prozessor und verwendet einen globalen Planer 1434, um mit diesen Befehlen verknüpfte Ausführungsthreads an einen Satz von Rechenclustern 1436A-1436H zu verteilen. Die Rechencluster 1436A-1436H teilen sich einen gemeinsamen Cache-Speicher 1438. Der Cache-Speicher 1438 kann als Cache höherer Ebene für Cache-Speicher in den Rechenclustern 1436A-1436H dienen.
  • Die GPGPU 1430 weist Speicher 1434A-1434B auf, der mit den Rechenclustern 1436A-1436H über einen Satz von Speichersteuerungen 1442A-1442B gekoppelt ist. In verschiedenen Ausführungsformen kann der Speicher 1434A-1434B verschiedene Arten von Speichervorrichtungen aufweisen, einschließlich dynamischen Direktzugriffsspeicher (Dynamic Random Access Memory, DRAM) oder Grafik-Direktzugriffsspeicher, beispielsweise synchronen Grafik-Direktzugriffsspeicher (Synchronous Graphics Random Access Memory, SGRAM), einschließlich eines Speichers mit doppelter Datenrate (Graphics Double Data Rate, GDDR).
  • In einer Ausführungsform beinhalten die Rechencluster 1436A-1436H jeweils einen Satz von Grafikkernen, beispielsweise den Grafikkern 1400 aus 14A, die mehrere Arten von Ganzzahl- und Gleitkomma-Logikeinheiten aufweisen können, welche Rechenoperationen in einem Bereich von Genauigkeiten durchführen können, einschließlich der, die für Maschinenlemberechnungen geeignet sind. Beispielsweise und in einer Ausführungsform kann wenigstens ein Teilsatz der Gleitkommaeinheiten in jedem der Rechencluster 1436A-1436H dafür ausgelegt sein, 16-Bit- oder 32-Bit-Gleitkommaoperationen durchzuführen, während ein anderer Teilsatz der Gleitkommaeinheiten dafür ausgelegt sein kann, 64-Bit-Gleitkommaoperationen durchzuführen.
  • Mehrere Instanzen der GPGPU 1430 können dafür ausgelegt sein, als Rechencluster zu arbeiten. Der Kommunikationsmechanismus, der vom Rechencluster zur Synchronisation und zum Datenaustausch verwendet wird, variiert je nach Ausführungsform. In einer Ausführungsform kommunizieren die mehreren Instanzen der GPGPU 1430 über die Host-Schnittstelle 1432. In einer Ausführungsform weist die GPGPU 1430 einen E/A-Hub 1439 auf, der die GPGPU 1430 mit einer GPU-Verbindung 1440 koppelt, die eine Direktverbindung zu anderen Instanzen der GPGPU ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 1440 mit einer dedizierten GPU-zu-GPU-Brücke gekoppelt, die eine Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 1430 ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 1440 mit einer Hochgeschwindigkeits-Zwischenverbindung gekoppelt, um Daten an andere GPGPUs oder Parallelprozessoren zu senden und von diesen zu empfangen. In einer Ausführungsform befinden sich die mehreren Instanzen der GPGPU 1430 in getrennten Datenverarbeitungssystemen und kommunizieren über eine Netzvorrichtung, die über die Host-Schnittstelle 1432 zugänglich ist. In einer Ausführungsform kann die GPU-Verbindung 1440 dafür ausgelegt sein, eine Verbindung mit einem Host-Prozessor zusätzlich oder als Alternative zur Host-Schnittstelle 1432 zu ermöglichen.
  • Während die veranschaulichte Konfiguration der GPGPU 1430 dafür ausgelegt sein kann, neuronale Netze zu trainieren, stellt eine Ausführungsform eine alternative Konfiguration der GPGPU 1430 bereit, die für den Einsatz in einer leistungsstarken oder leistungsarmen Inferenzierungsplattform ausgelegt sein kann. In einer Inferenzierungskonfiguration weist die GPGPU 1430 weniger Rechencluster 1436A-1436H relativ zur Trainingskonfiguration auf. Zusätzlich kann die mit dem Speicher 1434A-1434B verknüpfte Speichertechnologie zwischen Inferenzierungs- und Trainingskonfigurationen differieren, wobei Speichertechnologien höherer Bandbreite für Trainingskonfigurationen vorgesehen sind. In einer Ausführungsform kann die Inferenzierungskonfiguration der GPGPU 1430 inferenzierungsspezifische Anweisungen unterstützen. Beispielsweise kann eine Inferenzierungskonfiguration eine oder mehrere 8-Bit-Ganzzahl-Skalarprodukt-Anweisungen unterstützen, die gemeinhin bei Inferenzierungsvorgängen für eingesetzte neuronale Netzwerke verwendet werden.
  • 15 veranschaulicht eine Rechenvorrichtung 1500, die eine Ausführungseinheit 1510 zum Durchführen von erweiterten mathematischen Gleitkommaoperationen einsetzt. Die Rechenvorrichtung 1500 (z. B. intelligente tragbare Vorrichtungen, VR (Virtual Reality)-Vorrichtungen, kopfmontierte Anzeigen (Head-Mounted Displays, HMDs), mobile Computer, IoT (Internet of Things)-Vorrichtungen, Laptop-Computer, Desktop-Computer, Server-Computer etc.) kann mit dem Verarbeitungssystem 100 von 1 identisch sein, und dementsprechend werden, der Kürze und Übersichtlichkeit halber sowie zum besseren Verständnis, viele der vorstehend angeführten Einzelheiten mit Bezug auf 1-14 nicht weiter erörtert oder nachstehend wiederholt. Wie veranschaulicht wird, in einer Ausführungsform, die Rechenvorrichtung 1500 als Host-Ausführungseinheit 1510 gezeigt.
  • Wie veranschaulicht wird, in einer Ausführungsform, die Ausführungseinheit 1510 von einer Grafikverarbeitungseinheit (Graphics Processing Unit, „GPU“, oder „Grafikprozessor“) 1514 gehostet. In wieder anderen Ausführungsformen kann die Ausführungseinheit 1510 von Firmware einer zentralen Verarbeitungseinheit (Central Processing Unit, „CPU“, oder „Anwendungsprozessor“) 1512 gehostet werden. Der Kürze und Übersichtlichkeit halber sowie zum besseren Verständnis kann im restlichen Teil dieses Dokuments die Ausführungseinheit 1510 als Teil einer GPU 1514 besprochen werden; allerdings sind Ausführungsformen nicht dahingehend beschränkt.
  • Die Rechenvorrichtung 1500 kann eine beliebige Anzahl und eine beliebige Art von Kommunikationsvorrichtungen, beispielsweise große Rechenvorrichtungen wie etwa Server-Computer, Desktop-Computer etc. beinhalten und kann ferner Set-Top-Boxen (z. B. Internet-basierte Kabel-TV-Set-Top-Boxen etc.),
    auf dem globalen Positionsbestimmungssystem (GPS) basierende Vorrichtungen etc. beinhalten. Die Rechenvorrichtung 1500 kann mobile Rechenvorrichtungen beinhalten, die als Kommunikationsvorrichtungen dienen, beispielsweise Mobiltelefone, einschließlich Smartphones, persönliche digitale Assistenten (PDAs), Tablet-Computer, Laptop-Computer, E-Reader, Smart-TVs, TV-Plattformen, tragbare Vorrichtungen (z. B. Brillen, Uhren, Armbänder, Smartcards, Schmuck, Kleidungsstücke etc.), Medienwiedergabegeräte etc. Beispielsweise kann die Rechenvorrichtung 1500 in einer Ausführungsform eine mobile Rechenvorrichtung beinhalten, die eine Computerplattform einsetzt, welche eine integrierte Schaltung (Integrated Circuit, „IC“) wie etwa ein Ein-Chip-System (System on a Chip, „SoC“ oder „SOC“) hostet, die verschiedene Hardware- und/oder Softwarekomponenten der Rechenvorrichtung 1500 auf einem einzelnen Chip integriert.
  • Wie veranschaulicht kann die Rechenvorrichtung 1500 in einer Ausführungsform eine beliebige Anzahl und Art von Hardware- und/oder Softwarekomponenten beinhalten, beispielsweise (ohne Beschränkung) GPU 1514, Grafiktreiber (auch als „GPU-Treiber“, „Grafiktreiberlogik“, „Treiberlogik“, Benutzermodustreiber (User-Mode Driver, UMD), UMD, Benutzermodustreiber-Framework (User-Mode Driver Framework, UMDF), UMDF oder einfach „Treiber“ bezeichnet) 1516, CPU 1512, Speicher 1508, Netzvorrichtungen, Treiber oder dergleichen sowie Eingabe-/Ausgabe (E/A)-Quellen 1504, beispielsweise Berührungsschirme, Berührungstafeln, Berührungsfelder, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbinder etc.
  • Die Rechenvorrichtung 1500 kann ein Betriebssystem (Operating System, OS) 1506 beinhalten, das als Schnittstelle zwischen Hardware- und/oder physischen Ressourcen der Rechenvorrichtung 1500 und einem Benutzer dient. Es ist vorgesehen, dass die CPU 1512 einen oder mehrere Prozessoren aufweisen kann, während die GPU 1514 einen oder mehrere Grafikprozessoren aufweisen kann.
  • Es ist zu beachten, dass Begriffe wie „Knoten“, „Rechenknoten“, „Server“, „Server-Vorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Server-Computer“, „Maschine“, „Host-Maschine“, „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Rechensystem“ und dergleichen im gesamten Dokument austauschbar verwendet werden können. Es ist ferner zu beachten, dass Begriffe wie „Anwendung“, „Softwareanwendung“, „Programm“, „Softwareprogramm“, „Paket“, „Softwarepaket“ und dergleichen im gesamten Dokument austauschbar verwendet werden können. Auch Begriffe wie „Auftrag“, „Eingabe“, „Anforderung“, „Nachricht“ und dergleichen können im gesamten Dokument austauschbar verwendet werden.
  • Es ist vorgesehen, dass, wie ferner unter Bezugnahme auf 1-14 beschrieben wird, einige Prozesse der Grafik-Pipeline wie vorstehend beschrieben in Software implementiert sind, während der Rest in Hardware implementiert ist. Eine Grafik-Pipeline kann in einem Grafik-Coprozessor-Entwurf implementiert sein, wobei die CPU 1512 so konzipiert ist, dass sie mit der GPU 1514 arbeitet, die in der CPU 1512 enthalten oder gemeinsam mit dieser angeordnet sein kann. In einer Ausführungsform kann die GPU 1514 eine beliebige Anzahl und Art von herkömmlicher Software- und Hardwarelogiken einsetzen, um die herkömmlichen Funktionen im Zusammenhang mit dem Grafik-Rendering durchzuführen, sowie neuartige Software- und Hardwarelogik zum Ausführen einer beliebigen Anzahl und Art von Anweisungen.
  • Wie vorstehend erwähnt, kann der Speicher 1508 einen Direktzugriffsspeicher (Random Access Memory, RAM) beinhalten, der eine Anwendungsdatenbank mit Objektinformationen umfasst. Ein Speichersteuerungsknoten kann auf Daten im RAM zugreifen und diese zur Grafik-Pipeline-Verarbeitung an die GPU 1514 weiterleiten. RAM kann RAM mit doppelter Datenrate (DDR RAM), RAM mit erweiterter Datenausgabe (EDO RAM) etc. beinhalten. Die CPU 1512 interagiert mit einer Hardware-Grafik-Pipeline, um eine Grafik-Pipeline-Funktionalität gemeinsam zu nutzen.
  • Verarbeitete Daten werden in einem Puffer in der Hardware-Grafik-Pipeline gespeichert, und Zustandsinformationen werden im Speicher 1508 gespeichert. Das resultierende Bild wird dann an E/A-Quellen 1504 übertragen, beispielsweise eine Anzeigekomponente zum Anzeigen des Bildes. Es ist vorgesehen, dass die Anzeigevorrichtung verschiedenartig ausgeführt sein kann, beispielsweise als Kathodenstrahlröhre (Cathode Ray Tube, CRT), Dünnfilmtransistor (Thin Film Transistor, TFT), Flüssigkristallanzeige (Liquid Crystal Display. LCD), Anordnung von organischen Leuchtdioden (Organic Light Emitting Diodes, OLEDs) etc.,
    um Informationen für einen Benutzer anzuzeigen.
  • Der Speicher 1508 kann eine vorab zugeteilte Region eines Puffers (z. B. eines Rahmenpuffers) umfassen; allerdings sollte ein Durchschnittsfachmann erkennen, dass die Ausführungsformen nicht hierauf beschränkt sind und dass ein beliebiger Speicher, der für die tieferliegende Grafik-Pipeline zugänglich ist, verwendet werden kann. Die Rechenvorrichtung 1500 kann ferner einen Plattformsteuerungsknoten (Platform Controller Hub, PCH) 130, wie er in 1 referenziert wird, als eine oder mehrere E/A-Quellen 1504 etc. aufweisen.
  • Die CPU 1512 kann einen oder mehrere Prozessoren zum Ausführen von Anweisungen aufweisen, um jegliche Softwareroutinen durchzuführen, die das Rechensystem implementiert. Die Anweisungen beinhalten häufig eine Art von Operation, die an Daten durchgeführt wird. Sowohl Daten als auch Anweisungen können in Systemspeicher 1508 und einem beliebigen zugehörigen Cache gespeichert sein. Ein Cache ist typischerweise dafür ausgelegt, kürzere Latenzzeiten aufzuweisen als der Systemspeicher 1508; beispielsweise könnte ein Cache auf denselben ein oder mehreren Siliziumchips integriert sein wie die ein oder mehreren Prozessoren und/oder mit schnelleren statischen RAM (SRAM)-Zellen konstruiert sein, während der Systemspeicher 1508 mit langsameren dynamischen RAM (DRAM)-Zellen konstruiert sein könnte. Indem häufiger verwendete Anweisungen und Daten tendenziell im Cache und nicht im Systemspeicher 1508 gespeichert werden, verbessert sich Gesamtleistungseffizienz der Rechenvorrichtung 1500. Es ist vorgesehen, dass in einigen Ausführungsformen die GPU 1514 als Teil der CPU 1512 vorliegen kann (beispielsweise als Teil des physischen CPU-Pakets), in welchem Fall der Speicher 1508 von der CPU 1512 und der GPU 1514 gemeinsam genutzt oder getrennt gehalten werden kann.
  • Der Systemspeicher 1508 kann für andere Komponenten in der Rechenvorrichtung 1500 zur Verfügung gestellt werden. Beispielsweise werden beliebige Daten (z. B. Eingangsgrafikdaten), die von verschiedenen Schnittstellen zur Rechenvorrichtung 1500 (z. B. Tastatur und Maus, Druckeranschluss, LAN (Local Area Network)-Anschluss, Modemanschluss etc.) empfangen werden oder von einem internen Datenspeicherelement der Rechenvorrichtung 1500 (z. B. einem Festplattenlaufwerk) abgerufen werden, oft temporär in eine Warteschlange des Systemspeichers 1508 eingereiht, bevor sie durch die ein oder mehreren Prozessoren in der Implementierung eines Softwareprogramms verarbeitet werden. In ähnlicher Weise werden Daten, für die ein Softwareprogramm bestimmt, dass sie von der Rechenvorrichtung 1500 über eine der Rechensystemschnittstellen an eine externe Entität gesendet werden sollen oder in ein internes Datenspeicherelement gespeichert werden sollen, oft temporär in eine Warteschlange des Systemspeichers 1508 eingereiht, bevor sie übertragen oder gespeichert werden.
  • Ferner kann beispielsweise ein PCH verwendet werden, um sicherzustellen, dass solche Daten ordnungsgemäß zwischen dem Systemspeicher 1508 und einer geeigneten entsprechenden Rechensystemschnittstelle (und internen Datenspeichervorrichtung, falls das Rechensystem so konzipiert ist) weitergegeben werden, und kann bidirektionale Punkt-zu-Punkt-Verbindungen zwischen sich und den beobachteten E/A-Quellen/Vorrichtungen 1504 aufweisen. In ähnlicher Weise kann ein MCH verwendet werden, um die verschiedenen konkurrierenden Anforderungen von Zugriffen auf den Systemspeicher 1508 zwischen CPU 1512 und GPU 1514, den Schnittstellen und internen Datenspeicherelementen, die in unmittelbarem zeitlichen Bezug zueinander auftreten können, zu verwalten.
  • E/A-Quellen 1504 können eine oder mehrere E/A-Vorrichtungen aufweisen, die zum Übertragen von Daten an die und/oder von der Rechenvorrichtung 1500 (z. B. einem Netzadapter); oder für einen großvolumigen nichtflüchtigen Speicher in der Rechenvorrichtung 1500 (z. B. ein Festplattenlaufwerk) implementiert sind. Eine Benutzereingabevorrichtung, die alphanumerische und andere Tasten beinhaltet, kann verwendet werden, um Informationen und Befehlsauswahlen an die GPU 1514 zu übermitteln. Eine andere Art von Benutzereingabevorrichtung ist eine Cursorsteuerung, beispielsweise eine Maus, ein Trackball, ein Berührungsschirm, ein Berührungsfeld oder Cursor-Richtungstasten zum Übermitteln von Richtungsinformationen und Befehlsauswahlen an die GPU 1514 und zum Steuern von Cursorbewegungen auf der Anzeigevorrichtung. Kamera- und Mikrofonanordnungen der Rechenvorrichtung 1500 können eingesetzt werden, um Gesten zu beobachten, Audio und Video aufzuzeichnen und optische und akustische Befehle zu empfangen und zu übertragen.
  • Die Rechenvorrichtung 1500 kann ferner eine oder mehrere Netzschnittstellen aufweisen, um einen Zugang zu einem Netz, beispielsweise ein LAN, ein Weiterverkehrsnetz (Wide Area Network, WAN), ein Stadtnetz (Metropolitan Area Network, MAN), ein persönliches Netz (Personal Area Network, PAN), Bluetooth, ein Cloud-Netz, ein Mobilnetz (z. B. der dritten Generation (3G), der vierten Generation (4G) etc.), ein Intranet, das Internet etc. bereitzustellen. Die ein oder mehreren Netzschnittstellen können beispielsweise eine drahtlose Netzschnittstelle mit einer Antenne, die eine oder mehrere Antennen repräsentieren kann, aufweisen. Die ein oder mehreren Netzschnittstellen können zudem beispielsweise eine verdrahtete Netzschnittstelle für die Kommunikation mit entfernten Vorrichtungen über ein Netzwerkkabel aufweisen, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein paralleles Kabel sein kann.
  • Die ein oder mehreren Netzschnittstellen können den Zugang zu einem LAN ermöglichen, beispielsweise indem sie dem IEEE 802.11b- und/oder dem IEEE 802.1 Ig-Standard entsprechen, und/oder die drahtlose Netzschnittstelle kann den Zugang zu einem persönlichen Netz (Personal Area Network) bereitstellen, beispielsweise indem sie dem Bluetooth-Standard entspricht. Andere drahtlose Netzschnittstellen und/oder Protokolle, einschließlich vorheriger und nachfolgender Versionen der Normen bzw. Standards, können ebenfalls unterstützt werden. Zusätzlich zu oder anstelle der Kommunikation über die Drahtlos-LAN-Standards können die ein oder mehreren Netzschnittstellen 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.
  • Die ein oder mehrere Netzschnittstellen können eine oder mehrere Kommunikationsschnittstellen beinhalten, beispielsweise ein Modem, eine Netzschnittstellenkarte oder andere bekannte Schnittstellenvorrichtungen, beispielsweise solche, die für das Koppeln mit dem Ethernet, dem Token-Ring oder anderen Arten von physischem drahtgebundenen oder drahtlosen Zubehör zum Zwecke des Bereitstellens einer Kommunikationsverbindung verwendet werden, um zum Beispiel ein LAN oder ein WAN zu unterstützen. Auf diese Weise kann das Computersystem auch mit einer Anzahl von Peripheriegeräten, Clients, Steueroberflächen, Konsolen oder Server über eine herkömmliche Netzinfrastruktur, die zum Beispiel ein Intranet oder das Internet beinhaltet, gekoppelt werden.
  • Es versteht sich, dass ein weniger oder mehr ausgestattetes System als das vorstehend beschriebene Beispiel für bestimmte Implementierungen bevorzugt werden kann. Daher kann die Konfiguration der Rechenvorrichtung 1500 von Implementierung zu Implementierung variieren, abhängig von zahlreichen Faktoren wie etwa Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Umständen. Beispiele der elektronischen Vorrichtung oder des Computersystems 1500 können (ohne Einschränkung) beinhalten: ein mobiles Endgerät, einen persönlichen digitalen Assistenten, eine mobile Rechenvorrichtung, ein Smartphone, ein Mobiltelefon, einen Handapparat, einen unidirektionalen Pager, einen bidirektionalen Pager, eine Nachrichtenübertragungsvorrichtung, einen Computer, einen Personalcomputer (PC), einen Desktop-Computer, einen Laptop-Computer, einen Notebook-Computer, einen Handheld-Computer, einen Tablet-Computer, einen Server, eine Server-Anordnung oder eine Server-Farm, einen Web-Server, einen Netzserver, einen Internet-Server, eine Arbeitsstation, einen Minicomputer, einen Mainframe-Computer, einen Supercomputer, ein Netzgerät, ein Web-Gerät, ein verteiltes Computersystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Unterhaltungselektronik, programmierbare Unterhaltungselektronik, Spielvorrichtungen, Fernseher, digitale Fernseher, eine Set-Top-Box, einen drahtlosen Zugangspunkt, eine Basisstation, eine Teilnehmerstation, eine Mobilteilnehmerzentrale, eine Funknetzsteuerung, einen Router, einen Netzknoten, ein Gateway, eine Brücke, einen Switch, eine Maschine oder Kombinationen davon.
  • Ausführungsformen können, einzeln oder in Kombination, implementiert sein als: ein oder mehrere Mikrochips oder integrierte Schaltungen, die unter Verwendung einer Hauptplatine, einer fest verdrahteten Logik, einer Software, die von einer Speichervorrichtung gespeichert wird und durch einen Mikroprozessor ausgeführt wird, einer Firmware, einer anwendungsspezifischen integrierten Schaltung (Application-Specific Integrated Circuit, ASIC) und/oder einer feldprogrammierbaren Gatteranordnung (Field-Programmable Gate Array, FPGA) miteinander verbunden sind. Der Begriff „Logik“ kann in beispielhafter Weise Software oder Hardware und/oder Kombinationen von Software und Hardware beinhalten.
  • Ausführungsformen können beispielsweise als ein Computerprogrammprodukt bereitgestellt sein, das ein oder mehrere maschinenlesbare Medien beinhalten kann, auf denen maschinenausführbare Anweisungen gespeichert sind, die, wenn sie von einer oder mehreren Maschinen wie etwa einem Computer, einem Netz von Computern oder anderen elektronischen Vorrichtungen ausgeführt werden, bewirken können, dass die ein oder mehreren Maschinen Operationen gemäß hier beschriebenen Ausführungen ausführen. Ein maschinenlesbares Medium kann, ohne darauf beschränkt zu sein, Floppy-Disketten, optische Platten, CD-ROMs (Compact Disc-Read Only Memories) und magnetoptische Platten, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Speicher oder andere Arten von Medien/maschinenlesbaren Medien beinhalten, die sich zum Speichern von maschinenausführbaren Anweisungen eignen.
  • Außerdem können Ausführungsformen als ein Computerprogramm, wobei das Programm von einem entfernten Computer (z. B. einem Server) an einen anfordernden Computer (z. B. einen Client) in Form von einem oder mehreren Datensignalen, die in einer Trägerwelle oder einem weiteren Ausbreitungsmedium ausgeführt und/oder durch eine Trägerwelle moduliert sind, übertragen wird, über eine Kommunikationsverbindung (z. B. ein Modem und/oder eine Netzverbindung) heruntergeladen werden.
  • Gemäß einer Ausführungsform weist die Ausführungseinheit 1510 eine oder mehrere FPUs auf, um erweiterte mathematische Einzelpunkt-Gleitkommaoperationen durchzuführen. Bei den meisten mathematischen Einzelpunkt-Gleitkommaoperationen ist die Implementierung der Operation für den Exponenten relativ trivial. Allerdings ist das Durchführen der Operationen an der Mantisse vergleichsweise schwierig.
  • 16 veranschaulicht eine Ausführungsform eines Gleitkommaformats mit einfacher Genauigkeit. Wie in 16 gezeigt, weist Gleitkomma (Floating Point, FP) mit einfacher Genauigkeit (Single Precision, SP) 32 Bits auf, wobei Bit 31 für eine Vorzeichenkomponente 1605 steht; die Bits 30 bis 23 stehen für eine Exponentkomponente 1610; und die Bits 22 bis 0 stehen für eine Mantissenkomponente 1620. In einer Ausführungsform kann der von diesem Format dargestellte Realwert angegeben werden als: ( 1 ) b 31 × 2 ( b 30 b 29 b 23 ) 2 127 × ( 1, b 22 b 21 b 0 ) 2 ,
    Figure DE102020108411A1_0001
    wobei bn für das Bit an der n-ten Bitposition im SP-FP-Format steht.
  • Beispielsweise ist der Realwert der in 16 gezeigten SP-FP-Zahl (1)0× 2(01111100) 2 -127 × (1,01000000000000000000000)2 = 1 × 2124-127 × (1 + 1 × 2-2) = 2-3 × 1,25 = 0,15625. Gemäß einer Ausführungsform ist eine Optimierung von mathematischen FP-Operationen implementiert. In einer solchen Ausführungsform wird eine Optimierung für die Mantissenkomponente 1620 durchgeführt, nachstehend referenziert durch Y = f(X), wobei X die Eingabemantisse und Y die Ausgabemantisse ist).
  • 17 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses 1700 zum Durchführen einer erweiterten mathematischen Gleitkommaoperation veranschaulicht. Der Prozess 1700 kann von Verarbeitungslogik durchgeführt werden, die Hardware (z. B. Schaltungen, dedizierte Logik, programmierbare Logik etc.), Software (beispielsweise Anweisungen, die auf einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einer Ausführungsform kann der Prozess 1700 von einer oder mehreren Anweisungen durchgeführt werden, die an FPUs 1511 ausgeführt werden. Der Prozess 1700 wird der Kürze halber und zur übersichtlicheren Darstellung in linearen Abfolgen veranschaulicht; allerdings wird davon ausgegangen, dass jede beliebige Anzahl davon parallel, asynchron oder in unterschiedlicher Reihenfolge durchgeführt werden kann. Der Kürze und Übersichtlichkeit halber sowie zum besseren Verständnis werden viele der unter Bezugnahme auf die 1-16 erörterten Einzelheiten hier nicht erörtert oder wiederholt.
  • Um die Beschreibung zu vereinfachen, wird der Prozess 1700 unter Bezugnahme auf eine Implementierung der Quadratwurzel-Operation erörtert. Allerdings werden die restlichen Operationen (z. B. reziproke Quadratwurzel, Division, Inverse, Sinus/Cosinus, Exponent und Logarithmus) nachstehend basierend auf der Quadratwurzel-Implementierung erörtert. Der Prozess 1700 beginnt bei Verarbeitungsblock 1710, wo eine oder mehrere Anweisungen empfangen werden, um eine FP-Operation an einem Operanden durchzuführen. Bei Verarbeitungsblock 1720 wird die FP-Operation an der Exponentkomponente 1610 eines Operanden durchgeführt. Beispielsweise kann die Quadratwurzel des Exponenten dargestellt sein als: e s q = ( e 127 ) / 2,
    Figure DE102020108411A1_0002
    wobei e der 8-Bit-Exponent (Bits 30 bis 23) in der eingegebenen SP-FP-Zahl ist (nachstehend als X bezeichnet).
  • Bei einer Bestimmung, dass (e - 127) geradzahlig ist, beinhaltet die Berechnung von esq: esq = (e - 127)/2. Ergibt die Bestimmung jedoch, dass (e - 127) ungeradzahlig ist, ist esq = (e - 128)/2, und die Eingabemantisse wird mit 2 multipliziert. Bei Darstellung einer eingegebenen SP-FP-Zahl (X) als X = (-1)s × 2(e-127) × 1.m kann das Ergebnis der Quadratwurzeloperation (nachstehend als Y bezeichnet) wie folgt angegeben werden (z. B. unter der Annahme, dass X eine positive SP-FP-Zahl ist): Y = X = ( 1 ) s × 2 ( e 127 ) / 2 × ( 1. m ) = ( 1 ) s × 2 ( e 128 ) / 2 × ( 2 × 1. m ) ,  falls ( e 127 )
    Figure DE102020108411A1_0003
    ungeradzahlig ist
  • Somit kann die Quadratwurzel der Mantisse dargestellt sein als: 1. m s q = ( 1. m ) ,
    Figure DE102020108411A1_0004
    wobei msq der 23-Bit-Mantissenteil (Bits 22 bis 0) der resultierenden Quadratwurzel-SP-FP-Zahl (Y) ist und m der 23-Bit-Mantissenteil (Bits 22 bis 0) der eingegebenen SP-FP-Zahl (X) ist.
    Infolgedessen beinhaltet die Berechnung von msq 1,msq = √(1.m), falls (e - 127) geradzahlig ist, und 1,msq = √(2 × 1.m), falls (e - 127) ungeradzahlig ist (da z. B. die Eingabemantisse mit 2 multipliziert wird, um den resultierenden Exponenten (esq) zu einer nicht-fraktionalen Binärzahl zu machen).
  • Bei Verarbeitungsblock 1730 wird die FP-Operation an der Mantissenkomponente 1620 des Operanden durchgeführt. Um die SP-FP-Quadratwurzel der Mantisse einer eingegebenen SP-FP-Zahl zu erhalten, wird die Eingabemantisse als vorzeichenlose Ganzzahl mit 24 Bits (X) im Bereich [223,224-1] betrachtet; anstelle der Dezimaldarstellung der Mantisse als 1.m (wobei es sich um eine fraktionale 24-Bit-Binärzahl handelt).
  • 18 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses 1800 zum Durchführen einer erweiterten mathematischen Gleitkommaoperation an einer Mantissenkomponente veranschaulicht. Der Prozess 1800 kann von Verarbeitungslogik durchgeführt werden, die Hardware (z. B. Schaltungen, dedizierte Logik, programmierbare Logik etc.), Software (beispielsweise Anweisungen, die auf einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einer Ausführungsform kann der Prozess 1800 von einer oder mehreren Anweisungen durchgeführt werden, die an FPUs 1511 ausgeführt werden. Der Prozess 1800 wird der Kürze halber und zur übersichtlicheren Darstellung in linearen Abfolgen veranschaulicht; allerdings wird davon ausgegangen, dass jede beliebige Anzahl davon parallel, asynchron oder in unterschiedlicher Reihenfolge durchgeführt werden kann. Der Kürze und Übersichtlichkeit halber sowie zum besseren Verständnis werden viele der unter Bezugnahme auf die 1-17 erörterten Einzelheiten hier nicht erörtert oder wiederholt.
  • Der Prozess 1800 beginnt bei Verarbeitungsblock 1810, wo die Mantissenkomponente 1620 in zwei Teilkomponenten aufgeteilt wird. In einer Ausführungsform sind die 24 Bits der SP-FP-Mantisse des erwarteten Ausgabeergebnisses der mathematischen FP-Operation in zwei Komponenten aufgeteilt: eine erste Komponente mit N Bits (z. B. 12 höchstwertige Bits (Most Significant Bits, (MSBs)) (referenziert als Yh); und eine zweite Komponente mit M Bits (z. B. 12 niedrigstwertige Bits (Least Significant Bits, LSBs)) (referenziert als Y1), wobei gilt: N+M=24. Bei Verarbeitungsblock 1820 wird ein Ergebnis der Quadratwurzel-Operation für Yh berechnet. Gemäß einer Ausführungsform wird Yh berechnet, indem die Berechnung in zwei Teile aufgeteilt wird, aufweisend: das Bestimmen einer anfänglichen Schätzung für Yh (oder Yhi); und das Bestimmen einer Differenz zwischen dem tatsächlichen Wert Yh und dem geschätzten Wert Yhi (oder Yhe = Yh - Yhi).
  • Gemäß einer Ausführungsform wird Yhi bestimmt, indem eine lineare Interpolation (LERP) durchgeführt wird (z. B. die gerade Linie zwischen (X0, Y0) und (X1, Y1), wobei gilt: X0 = 223, X1 = 224, Y0 = √X0, Y1 = √X1), wie durch die Linie 1910 in 19 gezeigt wird. Für den Wert X in dem Intervall (X0, X1) ist der Wert Yhi entlang der geraden Linie durch die Steigungsgleichung gegeben: ( Y hi Y 0 ) / ( X X0 ) = ( Y 1 Y 0 ) / ( X 1 X 0 ) ,
    Figure DE102020108411A1_0005
    sodass: Y hi = Y 0 + ( X X0 ) × ( Y 1 Y 0 ) / ( X 1 X 0 ) = 2 24 + ( X 2 24 ) × ( 2 24 2 23 ) / ( 2 24 2 23 )                           = 2 12 + ( X 2 24 ) × ( 2 12 2 11 × 2 ) / 2 23 = ( 2 35 + ( X 2 24 ) × ( 2 12 2 11 × 2 ) ) / 2 23
    Figure DE102020108411A1_0006
  • In einer Ausführungsform kann dieses Ergebnis über eine Subtraktionsoperation, eine Multiplikationsoperation, eine Verschiebeoperation und eine Additionsoperation berechnet werden. In einer anderen Ausführungsform kann das Ergebnis auch über eine Subtraktionsoperation, eine Multiplikations- und Akkumulationsoperation (MAD) und eine Verschiebeoperation berechnet werden. In einigen Ausführungsformen können die zwischenliegenden FP-Multiplikations-/Subtraktions-/Additions-/Verschiebeoperationen eine höhere Genauigkeit hinsichtlich der Mantisse erfordern als SP, um null ULP (Unit of Least Precision)-Fehler in der resultierenden 12-Bit-MSB-Quadratwurzel Yh sicherzustellen.
  • Die Differenz zwischen dem tatsächlichen Wert Yh und dem geschätzten Wert Yhi wird in 20 gezeigt. Wie in 20 gezeigt, kann die grafische Darstellung dieser Differenz Yhe dargestellt werden als die Wertdifferenz zwischen Zeile 1920 und Zeile 1910 in 19 (zur ausführlichen Erläuterung auch in 20 gezeigt). Gemäß einer Ausführungsform kann der Differenzwert Yhe unter Verwendung einer stückweisen linearen Näherung (Piecewise Linear Approximation, PLA) der in 20 gezeigten Kurve 2010 geschätzt werden. 21 veranschaulicht eine vergrößerte Version eines der in 20 gezeigten linearen Segmente, um Einzelheiten des linearen Segments bereitzustellen, das eine Komponente der PLA für die Yhe-Kurve 2010 ist.
  • Gemäß einer Ausführungsform implementiert die PLA von Yhe 61 Zeilensegmente, um einen relativen 0-Bit-ULP-Fehler in der 12-Bit-MSB-Komponente der resultierenden Quadratwurzel (Yh) zu berechnen. In einer solchen Ausführungsform sind die Steigung und der y-Abschnitt jedes der Liniensegmente in einer Nachschlagetabelle (Lookup Table, LUT) gespeichert (z. B. LUT 1513 in 15), die unter Verwendung von MSB-Bits der Eingabe indiziert ist. 21 zeigt eine Ausführungsform solcher Liniensegmente (LSi), deren Steigung (mi) und y-Abschnitt (ci) in der LUT bei Index i gespeichert sind. Unter Verwendung von Eingabemantisse (X), Steigung (mi) und y-Abschnitt (ci) kann Yhe unter Verwendung einer MAD-Operation berechnet werden als: Y he = m i X + c i
    Figure DE102020108411A1_0007
  • Da der Realwert der Steigung (mi) eine sehr kleine Dezimalzahl ist, kann das Ergebnis bei einer Bestimmung, dass die Steigung, die in der Multiplikation in der MAD-Operation verwendet wird, ein SP-FP-Wert ist, eine Verschiebung implementieren. In einer Ausführungsform können die zwischenliegenden FP-MAD-/Verschiebeoperationen eine höhere Genauigkeit hinsichtlich der Mantisse implementieren als SP, um 0 ULP-Fehler in der resultierenden 12-Bit-MSB-Quadratwurzel Yh sicherzustellen. In einer weiteren Ausführungsform können einige Liniensegmente, die bei der PLA verwendet werden, länger sein (z. B. solche, die größere Eingabemantissenbereiche abdecken), während andere kürzer sein können (z. B. solche, die kleinere Eingabemantissenbereiche abdecken).
  • In solchen Ausführungsformen wird die Indizierungslogik vereinfacht, indem 128 äquidistante Eingabemantissenbereiche (z. B. mit entsprechenden Positionen für Steigungen und y-Abschnitte in der LUT) aufgrund einer Komplexität bei der Indizierung von Liniensegmenten variabler Größe herangezogen werden. Darüber hinaus können benachbarte LUT-Positionen mit doppelten Werten von Steigungen und y-Abschnitten belegt sein, um längere Liniensegmente darzustellen, damit jedes lineare Segment in der PLA gleiche Eingabemantissenbereiche darstellt, was die LUT-Indizierungslogik unter Verwendung von 7 MSB-Bits der Eingabemantisse (X) vereinfacht.
  • Der 12-Bit-MSB-Teil (Yh) der resultierenden Quadratwurzel Y kann wie folgt berechnet werden: Y h = Y hi + Y he
    Figure DE102020108411A1_0008
    In einer Ausführungsform wird das resultierende Yh auf 12 Bits gerundet, um eine resultierende 12-Bit-MSB-Quadratwurzel (Yh) mit 0 relativen ULP-Fehlern zu berechnen, da die Zwischenergebnisse Yhi und Yhe Mantissen mit bis zu 25 Bits aufweisen können.
  • Es wird erneut Bezug genommen auf 18; ein Ergebnis der Quadratwurzel-Operation wird für die zweite Komponente berechnet (z. B. den 12-Bit-LSB-Teil der resultierenden Quadratwurzel-SP-FP-Zahl Y(Y1)) bei Verarbeitungsblock 1830. In einer Ausführungsform können die Operationen für Yh und Y1 parallel durchgeführt werden.
  • Für die Quadratwurzel-Ausführung wird die Gleichung, die Y, X, Yh und Y1 verbindet, erweitert auf: Y = Y h + Y l = X
    Figure DE102020108411A1_0009
    Indem die Wurzel auf beiden Seiten gezogen wird, Y 2 = ( Y h + Y l ) 2 = X
    Figure DE102020108411A1_0010
    Y h 2 + Y l 2 + 2Y h Y l = X
    Figure DE102020108411A1_0011
    Es sei Z = X Y h 2 = Y l 2 + 2Y h Y l
    Figure DE102020108411A1_0012
    Hier kann Yl 2 ignoriert werden, falls Yl << Yh ist, was 2YhYl >> Yl 2 impliziert
    Somit gilt: Z ≈ 2YhYl
  • Da Yl gleich 12 LSB-Bits der resultierenden Quadratwurzel Y ist und Yh gleich 12 MSB-Bits von Y ist, und MSB (12-tes MSB-Bit) von Yh immer 1 ist (gemäß SP-FP-Mantissenformat): Y l < Y h / 2 12
    Figure DE102020108411A1_0013
    Y h > 2 12 Y l
    Figure DE102020108411A1_0014
    2Y h Y l > 2 13 Y l 2
    Figure DE102020108411A1_0015
    Y l 2 < 2Y h Y l / 2 13
    Figure DE102020108411A1_0016
    Infolgedessen ist die MSB-Bit-Position von Yl 2 wenigstens 13 Bits niedriger als die MSB-Bit-Position von 2YhYl, da MSB (12-tes MSB-Bit) von Yh immer 1 ist (gemäß SP - FP - Mantissenformat).
    Somit gilt: 2YhYl >> Yl 2
    Somit gilt: Yl << Yh
    Dementsprechend gilt: Z ≈ 2YhYl.
  • Basierend auf der Näherung Z ≈ 2YhYl, Y l = Z/ ( 2Y h ) ( X Y h 2 ) / ( 2 Y h )
    Figure DE102020108411A1_0017
    Dementsprechend ist die Berechnung von Y1 aufgeteilt in das Finden von Yh 2, das Subtrahieren von Yh 2 von der Eingabemantisse X und das Teilen von X-Yh 2 durch 2x4096 und das anschließende Multiplizieren mit 4096/Yh. In einer Ausführungsform wird 4096/Yh über die PLA von 4096/Yh berechnet. Diese Ausführungsform vermeidet die Division durch 2Yh und wandelt die Division in eine Verschiebeoperation um, indem durch 2x4096 geteilt wird, was eine Zweierpotenz ist.
  • In einer Ausführungsform gibt es 1200 mögliche Werte für Yh 2, da es 1200 perfekte Rechtecke zwischen 223 und 224 gibt (z. B. ist [223, 224] der Bereich, der durch Y2 = X dargestellt wird). Um Yh 2 zu berechnen, wird der Bereich von 1200 perfekten Rechtecken in 10 Intervalle aufgeteilt, die ihrerseits jeweils 128 perfekte Rechtecke aufweisen; allerdings wird der erste Bereich 80 gesonderte perfekte Rechtecke aufweisen, da 128x10 = 1280 ist. Infolgedessen ist der Eingabemantissenbereich auch in 10 Intervalle aufgeteilt.
  • In einer weiteren Ausführungsform kann das Eingabemantissenintervall, an dem sich X befindet, unter Verwendung einer LUT erster Ebene (First-Level-LUT) identifiziert werden, die mit dem größten perfekten Rechteck in jedem Intervall von 128 perfekten Rechtecken gespeichert wird. In einer solchen Ausführungsform wird X mit jedem Eintrag in dieser 10 Einträge starken LUT-Tabelle verglichen, um zu bestimmen, ob X ≤ der Eintrag in der LUT ist. Der Vergleich ergibt, dass X größer als ein perfektes Rechteck und kleiner oder gleich dem unmittelbaren nächsten Eintrag in der LUT ist, wobei der Index des nächsten Eintrags (Eintragi) das Intervall darstellt, in dem X liegt. Eintragi kann als ein Index verwendet werden, um die LUT der nächsten Ebene von 128 perfekten Rechtecken zu identifizieren, die zwischen den Einträgen für perfekte Rechtecke in der First-Level-LUT liegen, wobei Eintragi-l < X < Eintrag; ist. In einer Ausführungsform gibt es insgesamt 10 solcher Second-Level-LUTs, jeweils eine für jedes Intervall von 128 perfekten Rechtecken. In einer alternativen Ausführungsform sind 129 Einträge für perfekte Rechtecke in jeder Second-Level--LUT implementiert, was Eintragi-l und Eintrag; beinhaltet. Tabelle 1 veranschaulicht eine Ausführungsform einer LUT. Tabelle 1
    LUT index LUT entries X ≤ LUT entry (comparison result) Input mantissa X (represented as 24bit number
    0 8667136 No
    1 9437184 No
    2 10240000 No
    3 11075584 No
    4 11943936 No
    5 12845056 Yes 12345678 12345678
    6 13778944 Yes
    7 14745600 Yes
    8 15745024 Yes
    9 16777216 Yes
  • Tabelle 1 zeigt die LUT-Indizes und LUT-Einträge (z. B. die größten perfekten Rechtecke in jedem Intervall von 128 perfekten Rechtecken in dem Gesamtbereich von 1280 perfekten Rechtecken, die Yh 2 darstellen). Bei Verwendung eines Musterwertes für die Eingabemantisse X = 12345678 schlägt die Vergleichsprüfung X ≤ 11943936 (4 indizierter Eintrag in der LUT) fehl, wohingegen die Vergleichsprüfung X ≤ 12845056 (5 indizierter Eintrag in der LUT) erfolgreich ist, was in Tabelle 1 gezeigt wird. Wie gezeigt geben die Vergleiche den Index 5 (Eintragi) zurück, was auf die 5. Second-Level-LUT mit 129 perfekten Rechtecken im Bereich von 11943936 bis 12845056 verweist.
  • Um das perfekte Rechteck Yh 2 zu identifizieren, das der Eingabemantisse X am nächsten ist, wird das niedrigste perfekte Rechteck (Yha 2) in jedem Intervall von 129 perfekten Rechtecken gespeichert. Die Differenz zwischen X-Yha 2 (Zha) wird unter Verwendung von Yha 2 aus der Second-Level-LUT bestimmt, identifiziert gemäß X. Nachfolgend wird Zha durch 2x2048 und durch 2x4096 geteilt, unter Verwendung von Verschiebeoperationen, was idxhal und idxhah ergibt. Dies basiert auf der Eigenschaft, dass es 2n Ganzzahlen zwischen den benachbarten perfekten Rechtecken n2 und (n+1)2 gibt. Somit erstreckt sich der Bereich von Yh von 2896 bis 4095, und die nächste Zweierpotenz nahe 2896 ist 2048 und nahe 4095 ist 4096. Der Durchschnitt von idxhae = (idxhal + idxhah)/2, bei dem es sich um den geschätzten Index zum Eintrag Yh 2 in der Second-Level-LUT) handelt, wird dann berechnet. 22 veranschaulicht eine Ausführungsform eines Graphen von idxhae vs idx, bei dem es sich um den tatsächlichen Index zum Eintrag Yh 2 in der Second-Level-LUT handelt).
  • Wie in 22 gezeigt, sind beide Geraden skalierte Versionen voneinander. Basierend auf Geradengleichungen für idxhae als y2=m2x+c2 und für idx als y1=m1x+c1, y2 = y1 + (m2-m1)x + (c2-c1). Beide Gleichungen y2=m2x+c2 und y1=m1x+c1 werden mit ihren jeweiligen Steigungen und y-Abschnitt-Werten in 22 gezeigt. y2 stellt den tatsächlichen Index (idx) zum Eintrag von Yh 2 in der Second-Level-LUT dar und wurde basierend auf dem Skalieren der Gleichung für idxhae (dargestellt durch y1) erhalten. Entsprechend ist Yh 2 berechnet worden. In einer Ausführungsform wird diese Berechnung unter Verwendung von 1 MAD-Operation und 1 Additionsoperation durchgeführt.
  • Sobald Yh 2 berechnet worden ist, kann X - Yh 2 über
    1 Subtraktionsoperation berechnet und durch 1 Verschiebeoperation durch 2x4096 dividiert werden, um ein Zwischenergebnis zu generieren. Das Zwischenergebnis wird anschließend mit 4096/Yh multipliziert. In einer Ausführungsform wird 4096/Yh über eine stückweise lineare Näherung mit 16 linearen Segmenten berechnet, was in 23 gezeigt wird. 23 zeigt ferner die x-Achse, dargestellt durch Eingabemantisse X. Die PLA von 4096/Yh kann unter Verwendung von 1 MAD-Operation berechnet werden. Wie vorstehend erörtert, werden die Zwischenergebnisse (X - Yh 2) / (2x4096) mit 4096/Yh multipliziert, um den 12-Bit-LSB-Teil der resultierenden Quadratwurzel Y
    zu erhalten, angegeben als: Y l = ( X Y h 2 ) / ( 2Y h )
    Figure DE102020108411A1_0018
  • Es wird erneut Bezug genommen auf 17; die Ergebnisse der Gleitkommaberechnung, die für Yh und Yl durchgeführt wird, werden mit den Ergebnissen der Exponentkomponente als Ergebnis (oder Ausgabe) der Gleitkommaoperation, Verarbeitungsblock 1740, kombiniert. Die Ausführungslatenz des vorstehend beschriebenen Prozesses hängt von der Berechnung der Mantisse der Quadratwurzel (Y) ab. Die Berechnung des Exponenten (esq) beinhaltet das Prüfen des LSB-Bits des Eingabeexponenten (e), ungerade oder gerade, entsprechendes Subtrahieren 128 oder 127 (zur Exponentverschiebung durch Verzerrung), 1-Bit-Verschiebeoperation, um durch 2 zu teilen, und ferner Addieren 127 (zur Exponentverschiebung durch Verzerrung), um ihn wieder in das SP-FP-Exponentformat zurückzuversetzen. Die Multiplikations-, Additions-, Subtraktions- und Verschiebeoperationen, die in der Berechnung der von Y (Mantisse von Quadratwurzel) involviert sind, erfordern mehr Ausführungszyklen als der Exponent esq der Quadratwurzel.
  • In einer Ausführungsform sind vier Berechnungen in der Berechnung der Mantisse der Quadratwurzel Y involviert, die parallel durchgeführt werden können, da jede Operation auf der Eingabemantisse X basiert (z. B. sind sie nicht voneinander abhängig). In einer solchen Ausführungsform erfolgt ein Berechnen der anfänglichen Schätzung (Yhi) des 12-Bit-MSB-Teils der resultierenden Quadratwurzel Y, ein Berechnen der Differenz zwischen dem tatsächlichen Wert Yh und dem geschätzten Wert Yhi als Yhe = Yh - Yhi, ein Berechnen von Yh 2 als Teil des Berechnens von Yl und ein Berechnen von 4096/Yh als Teil des Berechnens von Yl.
  • In einer Ausführungsform beinhaltet das Berechnen von Yhi
    1 Subtraktionsoperation, 1 MAD-Operation und 1 Verschiebeoperation. Das Berechnen der Differenz des tatsächlichen Wertes Yh und des geschätzten Wertes Yhi als Yhe = Yh - Yhi implementiert 1 LUT-Nachschlageoperation, um die Steigung und den y-Abschnitt zu erhalten, und 1 MAD-Operation als Teil der PLA und 1 Rundungsoperation, die das Prüfen des LSB-Bits und das Hinzufügen einer 1 zum Rest der Bits beinhaltet, falls das LSB-Bit gleich 1 ist.
  • Das Berechnen von Yh 2 als eine Komponente des Berechnens von Yl (12-Bit-LSB-Teil der resultierenden Quadratwurzel Y) beinhaltet 2 LUT-Nachschlageoperationen, 10 parallele Vergleichsoperationen, 3 parallele Verschiebeoperationen (z. B. Dividieren von X-Yha 2 durch 2x2048, um idxhal zu erhalten, und Dividieren von X-Yha 2 durch 2x4096, um idxhah zu erhalten, und Dividieren, durch 2 bei der Mittelwertbildung für die Indizes idxhal und idxhah, um idxhae) zu erhalten, 1 Additionsoperation (z. B. für die Mittelwertbildung für die Indizes idxhal und idxhah, um idxhae) zu erhalten, 1 Subtraktion (X-Yha 2), 1 MAD-Operation und 1 Additionsoperation (z. B. um den tatsächlichen Index idx für den Eintrag in die Second-Level-LUT, von idxhae, durch Neuskalieren der Gleichung von idxhae) zu erhalten.
  • X - Yh 2 kann durch 1 Subtraktion und 1 Verschiebeoperation für das Dividieren durch 2x4096 berechnet werden. 1 Multiplikationsoperation ist erforderlich, um die Zwischenergebnisse (X - Yh 2) / (2x4096) mit 4096/Yh zu multiplizieren, um Yl zu erhalten. In einer Ausführungsform beinhaltet das Berechnen von 4096/Yh 1 LUT-Nachschlageoperation, um die Steigung und den y-Abschnitt zu erhalten, und 1 MAD-Operation als Teil der PLA. 1 Multiplikationsoperation ist erforderlich, um die Zwischenergebnisse (X - Yh 2) / (2x4096) mit 4096/Yh zu multiplizieren, um Yl zu erhalten.
  • Reziproke Quadratwurzel (RSQ)
  • Die RSQ des Exponenten kann dargestellt werden als: e r s q = ( e 127 ) / 2
    Figure DE102020108411A1_0019
    wobei e der 8-Bit-Exponent (Bits 30 bis 23) in der eingegebenen SP-FP-Zahl X ist.
  • Bei einer Bestimmung, dass (e - 127) geradzahlig ist, beinhaltet die ersq-Berechnung nur ersq = -(e - 127)/2; eine Bestimmung, dass (e - 127) ungeradzahlig ist, ergibt ersq = -(e - 128)/2, und die Eingabemantisse wird mit 2 multipliziert. Ist X als X = (-1)s × 2(e-127) × 1,m dargestellt, kann das Ergebnis von RSQ (Y) wie folgt angegeben werden (unter der Annahme, dass X eine positive SP-FP-Zahl ist): Y = 1 / X = ( 1 ) s × 2 ( e 127 ) / 2 × ( 1 / ( 1. m ) ) = ( 1 ) s × 2 ( e 128 ) / 2 × ( 1 / ( 2 × 1. m ) ) ,  falls ( e 127 )  ungerade ist
    Figure DE102020108411A1_0020
  • Die Berechnung von RSQ der Mantisse ist in 12 MSB-Bits (Yh) und 12 LSB-Bits (Yl) der resultierenden RSQ Y aufgeteilt. Somit sei, für die Eingabe X, RSQ(X) = Y. Y = 1 / X = Y h + Y l
    Figure DE102020108411A1_0021
    1 /X = ( Y h + Y l ) 2 = Y h 2 + Y l 2 + 2Y h Y l
    Figure DE102020108411A1_0022
    Wie vorstehend erörtert, kann Yl 2 ignoriert werden, da Yl<< Yh ist, was zu diesem Ergebnis führt: X = 1 / ( Y h + Y l ) 2 = 1 / ( Y h 2 * ( 1 + Y l /Y h ) 2 ) 1 /Y h 2 * ( 1 2Y l /Y h )
    Figure DE102020108411A1_0023
    da Yl/Yh << 1 ist und bei Anwenden einer Näherung von binomischen Reihen für (1+Yl/Yh)2 gilt: X * Y h 2 = 1 2Y l /Y h
    Figure DE102020108411A1_0024
    2Y l /Y h = 1 X * Y h 2
    Figure DE102020108411A1_0025
    Y l = ( Y h X * Y h 3 ) / 2
    Figure DE102020108411A1_0026
  • Wie vorstehend unter Bezugnahme auf die SP-FP-Quadratwurzel erörtert, können Yh und Yh 3 durch LERP und PLA erhalten werden, ähnlich wie bei der im Vorschlag bereitgestellten Erläuterung. Multiplizieren von Yh 3 durch X und Erhalten von Yl anhand der vorstehenden Formel durch Subtraktion von Yh und Division durch 2 durch Verschieben.
  • Inverse/Reziproke (INV)
  • Die INV des Exponenten kann dargestellt werden als: e i n v = ( e 127 ) ,
    Figure DE102020108411A1_0027
    wobei e der 8-Bit-Exponent (Bits 30 bis 23) in der eingegebenen SP-FP-Zahl X ist.
  • Die Berechnung der INV beginnt wieder mit dem Aufteilen der Mantisse in 12 MSB-Bits (Yh) und 12 LSB-Bits (Yl) der resultierenden INV Y. Somit sei, für die Eingabe X, INV(X) = Y: Y = 1 / X = Y h + Y l
    Figure DE102020108411A1_0028
    Y l = 1 /X Y h = 1 /X * ( 1 X * Y h ) = Y h * ( 1 X * Y h ) ,  durch N a ¨ herung 1/X Y h = Y h X * Y h 2
    Figure DE102020108411A1_0029
  • Yh und Yh 2 können durch LERP und PLA erhalten werden, ähnlich wie bei der vorstehenden Beschreibung zum SP-FP-Quadratwurzel-Vorschlag. Anhand der vorstehenden Formel wird Yh 2 mit X multipliziert und Yl wird durch Subtraktion von Yh berechnet.
  • Sinus/Cosinus (SIN/COS)
  • Der SIN der SP-FP-Eingabe wird durch ein Bereichsreduktionsverfahren berechnet, da SIN eine periodische Funktion ist. Somit wird der SIN der Eingabe in dem Bereich - π/2 bis π/2 berechnet (z. B. liegt das Ergebnis im Bereich -1 bis 1 für den Eingabebereich [-π/2: π/2]) und außerhalb des Bereichs, wenn die Funktion periodisch bleibt. Da die SIN-Ausgabe der bereichsreduzierten Eingabe von -1 bis 1 variieren kann, kann die Exponentkomponente von SIN nach Renormalisierung der Ausgabe berechnet werden: SIN ( 2 ( e 127 ) × 1. m ) = SIN ( RR ( 2 ( e 127 ) × 1. m ) ) ,
    Figure DE102020108411A1_0030
    wobei RR(X) eine Bereichsreduktion auf den Eingabewert X anwendet und diesen auf einen Wert
    zwischen 0 und π/2 reduziert.
  • Bei einer Ausgabe von RR(X) = intRR + frcRR, wobei intRR und frcRR Ganzzahlen und Bruchkomponenten des Ergebnisses bei Bereichsreduktion sind, gilt: intRR = int ( ( 2 ( e 127 ) × 1. m ) / ( π /2 ) ) = int ( 2 ( e 127 ) × 1. m × 2 / π )
    Figure DE102020108411A1_0031
    frcRR = ( 2 ( e 127 ) × 1. m ) ( intRR × π / 2 )
    Figure DE102020108411A1_0032
    SIN ( 2 ( e 127 ) × 1. m ) = SIN ( frcRR )
    Figure DE102020108411A1_0033
  • In einer Ausführungsform kann die Multiplikation durch 2/π und π/2 durch Näherung und Runden von π erzielt werden. Basierend auf unterschiedlichen Werten für intRR kann der resultierende Wert von frcRRi für die SIN-Berechnung anhand folgender Tabelle 2 erhalten werden. Tabelle 2
    intRR mod 4 (2 LSBs von intRR) Bereich Vorzeichen des ausgegebenen SIN frcRRi- Eingabe für SIN(frcRRi)
    00 [0, π/2) 0 frcRR
    01 [π/2, π) 0 π/2 - frcRR
    10 [π,3π/2) 1 frcRR
    11 [3π/2, 2π) 1 π/2 - frcRR
  • Nach Bereichsreduktion der Eingabe kann SIN(frCRRi) unter Verwendung von 1 Ebene der PLA berechnet werden. In einer Ausführungsform implementiert die PLA 16 lineare Segmente mit Eingabebereichen variabler Größe oder 26 gleich große lineare Segmente mit entsprechenden Steigungswerten und y-Abschnitten, die in einer LUT gespeichert sind. Die Berechnung von COS ähnelt der SIN-Berechnung, mit Ausnahme der Reihenfolge verschiedener Reiheneinträge der Spalten „Vorzeichen“ und „frcRRi“ in Tabelle 2.
  • Logarithmus zur Basis-2 (LOG)
  • Basis-2 LOG (Y) der SP-FP-Zahl X kann dargestellt werden als (LOG ist nur für positive SP-FP-Zahlen anwendbar): Y = LOG ( X ) = LOG ( 2 e 127 × 1. m ) = e 127 + LOG ( 1. m ) .
    Figure DE102020108411A1_0034
    wobei e der 8-Bit-Exponent (Bits 30 bis 23) in der eingegebenen SP-FP-Zahl ist m und für die Mantissenbits 22 bis 0 steht, e-127 wird zu dem Ergebnis von LOG(1.m) addiert (angehängt als e-127 ist eine Ganzzahl und LOG (1.m) ist ein Bruch), und der resultierende Wert wird renormalisiert (Verschieben des Ergebnisses zum Ausrichten am SP-FP-Format), um den Exponenten (elog) des resultierenden LOG-Wertes zu erhalten.
  • Gemäß einer Ausführungsform werden drei Operationen beim Berechnen der SP-FP-Mantisse von LOG(X) = Y implementiert (wobei X = 1.m ist). In einer solchen Ausführungsform wird eine anfängliche Schätzung über eine LERP und 2 PLA-Ebenen berechnet, um die Differenz zwischen der anfänglichen Schätzung und Y zu schätzen. Zuerst wird eine LERP für den gesamten Bereich der Eingabemantisse X und den Ausgabemantissenbereich Y durchgeführt (Operation 1), um Yini zu erhalten. Bei einem Fehler in der LERP sei Yerr = Y - Yini. 2 PLA-Ebenen (Levels) sind implementiert, um Yerr zu berechnen.
  • Level-1-PLA nähert sich dem Yerr-Wert, der von der LERP in der vorstehenden Operation 1 stammt. In einer Ausführungsform ist der vollständige Eingabe-/Ausgabemantissenbereich in 64 lineare Segmente als Teil der Level-1-PLA aufgeteilt. Somit ist eine LUT mit 64x2-Einträgen für Steigung und y-Abschnitt für Geradengleichungen der linearen Segmente implementiert. Das Ergebnis der Level-1-PLA kann als Yerr_l1 referenziert sein. Die Level-2 PLA nähert sich dem Yerr_l1err-Wert, der von der vorstehend beschriebenen Level-1-PLA stammt. Jeder der 64 Level-1-PLA-Bereiche ist in 32 lineare Segmente in der Level-2-PLA aufgeteilt. Da es Ähnlichkeiten für Yerr_l1err in jedem der 64 Bereiche in der Level-1-PLA gibt, können dieselben 32 Geradengleichungen in der Level-2-PLA auf jeden der 64 Bereiche in der Level-1-PLA angewendet werden. Dies reduziert die LUT-Größe von 32x64x2 auf 32x2.
  • Exponent - Basis 2 (EXP)
  • Basis-2 EXP (Y) der SP-FP-Zahl X kann dargestellt werden als: Y = EXP ( X ) = 2 ( ( 1 ) ^ s × 2 ^ ( e 127 ) × 1. m ) = 2 int ( ( 1 ) ^ s × 2 ^ ( e 127 ) × 1. m ) + frc ( ( 1 ) ^ s × 2 ^ ( e 127 ) × 1. m ) ,
    Figure DE102020108411A1_0035
    wobei e der 8-Bit-Exponent (Bits 30 bis 23) in der eingegebenen SP-FP-Zahl ist und m für die Mantissenbits 22 bis 0 steht; int(x) steht für den ganzzahligen Teil von x und frc(x) steht für den Bruchteil von x.
  • Bei einer Bestimmung, dass die eingegebene SP-FP-Zahl positiv ist, gilt: Y = 2 int ( 2 ^ ( e 127 ) × 1. m ) + frc ( 2 ^ ( e 127 ) × 1. m ) ,
    Figure DE102020108411A1_0036
    wobei int(2(e-127) × 1.m) der Exponent des resultierenden EXP Y ist und 2frc(2^(e-127)×1.m) die Mantisse des resultierenden EXP Y ist.
  • Bei einer Bestimmung, dass die eingegebene SP-FP-Zahl negativ ist, gilt:   Y = 2 i n t ( 2 ^ ( e 127 ) × 1. m ) f r c ( 2 ^ ( e 127 ) × 1. m )   = 2 int ( 2 ^ ( e 127 ) × 1. m ) × 2 frc ( 2 ^ ( e 127 ) × 1. m ) = 2 i n t ( 2 ^ ( e 127 ) × 1. m 1 ) × 2 1 frc ( 2 ^ ( e 127 ) × 1. m )
    Figure DE102020108411A1_0037
    wobei -int(2(e-127) × 1.m) - 1 der Exponent des resultierenden EXP Y ist und 21-frc(2(e-127)×1.m) die Mantisse des resultierenden EXP Y sein wird.
  • In einer Ausführungsform kann EXP leicht überlaufen oder unterlaufen, und der gültige Bereich für die Eingabe ist [-128, +127]. Somit ist Eingabe X = 1.m * 2e-127, wobei e-127 nur von 0 bis 6 variieren kann, da 1.m aus dem Bereich [1, 2] stammen kann. Für e-127 > 0 versetzt (Linksverschiebung) die frc-Berechnung e-127 MSB-Bits von 1.m in 2int(2^(e-127)×1.m). Effektiv muss nur 2.m berechnet werden, unter der Annahme, dass e-127=0 ist. Für andere Fälle von e-127 (wo e-127 von 1 bis 6 variieren kann) kann das m in 2.m eine kleinere Anzahl von Bits aufweisen als 23 und somit erfordert die resultierende Berechnung eine geringere Genauigkeit.
  • In einer Ausführungsform wird die Mantisse der Eingabe X in 8 MSB-Bits (Xh) und 15 LSB-Bits (Xl) aufgeteilt, um 2.m zu berechnen. In einer solchen Ausführungsform kann der letzte resultierende EXP durch Multiplizieren von 2Xh und 2Xl berechnet werden. Um 2Xl zu berechnen, wird eine LERP über den gesamten Mantissenbereich der Eingabe X durchgeführt, und der relative Fehler ist <2-21.
    Somit erfüllt eine Ebene von LERP die Genauigkeitsanforderungen und bewirkt, dass das Ergebnis von LERP gleich Ylerp ist. Um 2Xh zu berechnen, wird eine PLA implementiert, indem der gesamte Mantissenbereich der Eingabe X in 8 lineare Segmente aufgeteilt wird.
  • Ist das Ergebnis der PLA gleich Yini_Xh, kann die Differenz zwischen den tatsächlichen Werten von 2Xh und Yini_Xh durch Runden von Yini_Xh auf den nächsten dezimalen Binärpunkt berechnet werden; wobei das Ergebnis der Rundung Yini_Xh_rnd sei. Wie vorstehend erörtert, kann der resultierende EXP wie folgt berechnet werden: 2 .m = 2 Xh × 2 Xl = Y ini_Xh_rnd × Y lerp
    Figure DE102020108411A1_0038
  • Gleitkomma-Division (Floating Point Division, FPDIV)
  • Das Ergebnis der FPDIV kann dargestellt werden als: Z = Y/X
    Figure DE102020108411A1_0039
    wobei Y der Dividend und X ein Divisor ist.
  • In einer Ausführungsform kann das Ergebnis durch eine INV-Operation (1/X) und eine MUL-Operation (Y x 1/X) berechnet werden. In einer solchen Ausführungsform ist die Ausführungslatenz identisch mit einer INV-Operation, da die FPDIV-Operation dahingehend optimiert ist, in derselben Anzahl von Zyklen abzuschließen wie INV, da diese Operation in die INV-Operation integriert ist. Gemäß einer Ausführungsform ist die FPDIV-Operation dafür optimiert, in derselben Anzahl von Zyklen abzuschließen wie INV, da die Operation in die INV-Operation integriert ist. Beispielsweise lässt sich leicht erkennen, dass der Exponent-Teil der FPDIV-Operation eine einfache Subtraktionsoperation ist. Falls der Exponent des Dividenden Y gleich ey ist und der des Divisors X gleich ex ist, werden der resultierende Exponent efpdiv = ey - ex und das Ergebnis nach dem Berechnen des Mantissenteils der resultierenden FPDIV renormalisiert. Wobei das Ergebnis der INV wie folgt lautet:
    W = 1/X = Wh + Wl und Wl = Wh - X Wh 2 (z. B. entsprechend der
    resultierende Gleichung der vorstehend gegebenen INV-Operation); dies impliziert: Z = Y/X = Y × ( W h X × W h 2 ) = Y × W h Y × X × W h 2
    Figure DE102020108411A1_0040
  • Während des Schätzens von Wh kann V = Y × X parallel berechnet werden. Während des Berechnens von V × Xh 2 = Y × X × Wh 2 kann Y × Wh parallel berechnet werden. Somit kann die FPDIV in derselben Anzahl von Zyklen berechnet werden wie die INV. Infolgedessen erfordert die offenbarte FPDIV-Berechnung nicht mehrere Durchläufe (wenigstens 2) durch die Pipeline, wie dies bei aktuellen Lösungen erforderlich ist, was die Ausführungslatenz der offenbarten FPDIV im Vergleich zu bestehenden Lösungen deutlich reduziert.
  • Die nachfolgenden Absätze und/oder Beispiele beziehen sich auf weitere Ausführungsformen oder Beispiele. Besonderheiten in den Beispielen können an beliebiger Stelle in einer oder mehreren Ausführungsformen verwendet werden.
    Die verschiedenen Merkmale der unterschiedlichen Ausführungsformen oder Beispiele können auf verschiedene Weise mit einigen Merkmalen kombiniert werden, die enthalten sind, und anderen, die ausgeschlossen sind, um verschiedensten Anwendungen gerecht zu werden. Beispiele können einen Erfindungsgegenstand umfassen, beispielsweise 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 Vorrichtung oder eines Systems zum Ermöglichen einer Hybridkommunikation gemäß hier beschriebenen Ausführungsformen und Beispielen durchzuführen.
  • Einige Ausführungsformen beziehen sich auf Beispiel 1, das einen Prozessor beinhaltet, der eine oder mehrere Ausführungseinheiten umfasst, die jeweils über mehrere Gleitkommaeinheiten verfügen, um eine oder mehrere Anweisungen zum Durchführen einer Gleitkommaoperation mit einfacher Präzision an einem Operanden auszuführen, beinhaltend das Durchführen einer Gleitkommaoperation an einer Exponentkomponente des Operanden, das Durchführen einer Gleitkommaoperation an einer Mantissenkomponente des Operanden, umfassend das Aufteilen der Mantissenkomponente in eine erste Teilkomponente und eine zweite Teilkomponente, das Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente und das Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente und das Zurückgeben eines Ergebnisses der Gleitkommaoperation.
  • Beispiel 2 beinhaltet den Erfindungsgegenstand von Beispiel 1, wobei das Bestimmen des Wertes der ersten Teilkomponente das Bestimmen einer anfänglichen Schätzung für die erste Teilkomponente und das Bestimmen einer Differenz zwischen einem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente umfasst.
  • Beispiel 3 beinhaltet den Erfindungsgegenstand der Beispiele 1 und 2, wobei das Bestimmen der anfänglichen Schätzung das Durchführen einer linearen Interpolation umfasst.
  • Beispiel 4 beinhaltet den Erfindungsgegenstand der Beispiele 1-3, wobei die Differenz zwischen dem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente über eine stückweise lineare Näherung bestimmt wird.
  • Beispiel 5 beinhaltet den Erfindungsgegenstand der Beispiele 1-4, wobei die stückweise lineare Näherung über eine Suche in einer Nachschlagetabelle (Lookup Table, LUT) durchgeführt wird.
  • Beispiel 6 beinhaltet den Erfindungsgegenstand der Beispiele 1-5, wobei das Bestimmen des Ergebnisses der Gleitkommaoperation für die erste und die zweite Teilkomponente parallel durchgeführt wird.
  • Beispiel 7 beinhaltet den Erfindungsgegenstand der Beispiele 1-6, wobei die erste Komponente zwölf höchstwertige Bits (Most Significant Bits, MSBs) der Mantissenkomponente umfasst und die zweite Komponente zwölf niedrigstwertige Bits (Least Significant Bits, LSBs) der Mantissenkomponente umfasst.
  • Einige Ausführungsformen beziehen sich auf Beispiel 8, das wenigstens computerlesbares Medium beinhaltet, auf dem Anweisungen gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, die Prozessoren veranlassen, eine Gleitkommaoperation mit einfacher Präzision an einem Operanden durchzuführen, umfassend das Durchführen einer Gleitkommaoperation an einer Exponentkomponente des Operanden, das Durchführen einer Gleitkommaoperation an einer Mantissenkomponente des Operanden, umfassend das Aufteilen der Mantissenkomponente in eine erste Teilkomponente und eine zweite Teilkomponente, das Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente und das Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente und das Zurückgeben eines Ergebnisses der Gleitkommaoperation.
  • Beispiel 9 beinhaltet den Erfindungsgegenstand von Beispiel 8, wobei das Bestimmen des Wertes der ersten Teilkomponente das Bestimmen einer anfänglichen Schätzung für die erste Teilkomponente und das Bestimmen einer Differenz zwischen einem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente umfasst.
  • Beispiel 10 beinhaltet den Erfindungsgegenstand der Beispiele 8 und 9, wobei das Bestimmen der anfänglichen Schätzung das Durchführen einer linearen Interpolation umfasst.
  • Beispiel 11 beinhaltet den Erfindungsgegenstand der Beispiele 8-10, wobei die Differenz zwischen dem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente über eine stückweise lineare Näherung bestimmt wird.
  • Beispiel 12 beinhaltet den Erfindungsgegenstand der Beispiele 8-11, wobei die stückweise lineare Näherung über eine Suche in einer Nachschlagetabelle (Lookup Table, LUT) durchgeführt wird.
  • Beispiel 13 beinhaltet den Erfindungsgegenstand der Beispiele 8-12, wobei das Bestimmen des Ergebnisses der Gleitkommaoperation für die erste und die zweite Teilkomponente parallel durchgeführt wird.
  • Einige Ausführungsformen beziehen sich auf Beispiel 14, das ein Verfahren zum Ermöglichen der Ausführung eines Gleitkommaoperation mit einfacher Präzision an einem Operanden beinhaltet, umfassend das Durchführen einer Gleitkommaoperation an einer Exponentkomponente des Operanden, das Durchführen einer Gleitkommaoperation an einer Mantissenkomponente des Operanden, umfassend das Aufteilen der Mantissenkomponente in eine erste Teilkomponente und eine zweite Teilkomponente, das Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente und das Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente und das Zurückgeben eines Ergebnisses der Gleitkommaoperation.
  • Beispiel 15 beinhaltet den Erfindungsgegenstand von Beispiel 14, wobei das Bestimmen des Wertes der ersten Teilkomponente das Bestimmen einer anfänglichen Schätzung für die erste Teilkomponente und das Bestimmen einer Differenz zwischen einem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente umfasst.
  • Beispiel 16 beinhaltet den Erfindungsgegenstand der Beispiele 14 und 15, wobei das Bestimmen der anfänglichen Schätzung das Durchführen einer linearen Interpolation umfasst.
  • Beispiel 17 beinhaltet den Erfindungsgegenstand der Beispiele 14-16, wobei die Differenz zwischen dem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente über eine stückweise lineare Näherung bestimmt wird.
  • Beispiel 18 beinhaltet den Erfindungsgegenstand der Beispiele 14-17, wobei die stückweise lineare Näherung über eine Suche in einer Nachschlagetabelle (Lookup Table, LUT) durchgeführt wird.
  • Beispiel 19 beinhaltet den Erfindungsgegenstand der Beispiele 14-18, wobei das Bestimmen des Ergebnisses der Gleitkommaoperation für die erste und die zweite Teilkomponente parallel durchgeführt wird.
  • Beispiel 20 beinhaltet den Erfindungsgegenstand der Beispiele 14-19, wobei die erste Komponente zwölf höchstwertige Bits (Most Significant Bits, MSBs) der Mantissenkomponente umfasst und die zweite Komponente zwölf niedrigstwertige Bits (Least Significant Bits, LSBs) der Mantissenkomponente umfasst.
  • Die Erfindung ist vorstehend unter Bezugnahme auf spezifische Ausführungsformen beschrieben worden. Fachleute auf dem Gebiet werden jedoch verstehen, dass verschiedene Modifikationen und Änderungen hieran vorgenommen werden können, ohne vom allgemeineren Wesen und Schutzbereich der Erfindung abzuweichen, wie sie in den beigefügten Ansprüchen dargelegt sind. Die vorstehende Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten.

Claims (15)

  1. Prozessor, umfassend: eine oder mehrere Ausführungseinheiten, die jeweils über mehrere Gleitkommaeinheiten verfügen, um eine oder mehrere Anweisungen zum Durchführen einer Gleitkommaoperation mit einfacher Genauigkeit an einem Operanden auszuführen, beinhaltend: Durchführen einer Gleitkommaoperation an einer Exponentkomponente des Operanden; Durchführen einer Gleitkommaoperation an einer Mantissenkomponente des Operanden, umfassend: Aufteilen der Mantissenkomponente in eine erste Teilkomponente und eine zweite Teilkomponente; Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente; und Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente; und Zurückgeben eines Ergebnisses der Gleitkommaoperation.
  2. Prozessor nach Anspruch 1, wobei das Bestimmen des Wertes der ersten Teilkomponente das Bestimmen einer anfänglichen Schätzung für die erste Teilkomponente und das Bestimmen einer Differenz zwischen einem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente umfasst.
  3. Prozessor nach Anspruch 2, wobei das Bestimmen der anfänglichen Schätzung das Durchführen einer linearen Interpolation umfasst.
  4. Prozessor nach Anspruch 3, wobei die Differenz zwischen dem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für erste Teilkomponente über eine stückweise lineare Näherung bestimmt wird.
  5. Prozessor nach Anspruch 4, wobei die stückweise lineare Näherung über eine Suche in einer Nachschlagetabelle (Lookup Table, LUT) durchgeführt wird.
  6. Prozessor nach Anspruch 1, wobei das Bestimmen des Ergebnisses der Gleitkommaoperation für die erste und die zweite Teilkomponente parallel durchgeführt wird.
  7. Prozessor nach Anspruch 1, wobei die erste Komponente eine zwölfhöchstwertige-Bits (Most Significant Bits, MSBs)-der-Mantisse-Komponente umfasst und die zweite Komponente eine zwölf-niedrigstwertige-Bits (Least Significant Bits, LSBs)-der-Mantisse-Komponente umfasst.
  8. Verfahren zum Ermöglichen der Ausführung einer Gleitkommaoperation mit einfacher Genauigkeit an einem Operanden, umfassend: Durchführen einer Gleitkommaoperation an einer Exponentkomponente des Operanden; Durchführen einer Gleitkommaoperation an einer Mantissenkomponente des Operanden, umfassend: Aufteilen der Mantissenkomponente in eine erste Teilkomponente und eine zweite Teilkomponente; Bestimmen eines Ergebnisses der Gleitkommaoperation für die erste Teilkomponente; und Bestimmen eines Ergebnisses der Gleitkommaoperation für die zweite Teilkomponente; und Zurückgeben eines Ergebnisses der Gleitkommaoperation.
  9. Verfahren nach Anspruch 8, wobei das Bestimmen des Wertes der ersten Teilkomponente umfasst: Bestimmen einer anfänglichen Schätzung für die erste Teilkomponente; und Bestimmen einer Differenz zwischen einem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für die erste Teilkomponente.
  10. Verfahren nach Anspruch 9, wobei das Bestimmen der anfänglichen Schätzung das Durchführen einer linearen Interpolation umfasst.
  11. Verfahren nach Anspruch 10, wobei die Differenz zwischen dem tatsächlichen Wert der ersten Teilkomponente und der anfänglichen Schätzung für erste Teilkomponente über eine stückweise lineare Näherung bestimmt wird.
  12. Verfahren nach Anspruch 11, wobei die stückweise lineare Näherung über eine Suche in einer Nachschlagetabelle (Lookup Table, LUT) durchgeführt wird.
  13. Verfahren nach Anspruch 8, wobei das Bestimmen des Ergebnisses der Gleitkommaoperation für die erste und die zweite Teilkomponente parallel durchgeführt wird.
  14. Verfahren nach Anspruch 8, wobei die erste Komponente eine zwölfhöchstwertige-Bits (Most Significant Bits, MSBs)-der-Mantisse-Komponente umfasst und die zweite Komponente eine zwölf-niedrigstwertige-Bits (Least Significant Bits, LSBs)-der-Mantisse-Komponente umfasst.
  15. Computerlesbares Medium oder computerlesbare Medien mit Anweisungen, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, die Prozessoren veranlassen, ein Verfahren nach einem der Ansprüche 9-14 durchzuführen.
DE102020108411.0A 2019-04-04 2020-03-26 Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit Pending DE102020108411A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/375,307 2019-04-04
US16/375,307 US11934797B2 (en) 2019-04-04 2019-04-04 Mechanism to perform single precision floating point extended math operations

Publications (1)

Publication Number Publication Date
DE102020108411A1 true DE102020108411A1 (de) 2020-10-08

Family

ID=72518188

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020108411.0A Pending DE102020108411A1 (de) 2019-04-04 2020-03-26 Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit

Country Status (3)

Country Link
US (2) US11934797B2 (de)
CN (1) CN111796795A (de)
DE (1) DE102020108411A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2582145B (en) * 2019-03-11 2021-03-10 Graphcore Ltd Execution Unit for Determining a Result of an Exponential Function in a Processor
CN113129201A (zh) * 2019-12-31 2021-07-16 英特尔公司 用于图形处理命令的压缩的方法和装置
CN117932200A (zh) * 2022-10-13 2024-04-26 华为技术有限公司 一种浮点数平方根计算方法及浮点数计算模块

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6163791A (en) * 1998-02-02 2000-12-19 International Business Machines Corporation High accuracy estimates of elementary functions
US7509363B2 (en) * 2001-07-30 2009-03-24 Ati Technologies Ulc Method and system for approximating sine and cosine functions
US8326904B2 (en) * 2009-01-27 2012-12-04 International Business Machines Corporation Trigonometric summation vector execution unit
US10445064B2 (en) * 2017-02-03 2019-10-15 Intel Corporation Implementing logarithmic and antilogarithmic operations based on piecewise linear approximation
US10725742B2 (en) * 2018-06-05 2020-07-28 Texas Instruments Incorporated Transcendental function evaluation

Also Published As

Publication number Publication date
US20200319851A1 (en) 2020-10-08
US11934797B2 (en) 2024-03-19
CN111796795A (zh) 2020-10-20
US20240241693A1 (en) 2024-07-18

Similar Documents

Publication Publication Date Title
DE102019117514A1 (de) Punktwolkenblickwinkel und skalierbare komprimierung/dekomprimierung
DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE102019117592A1 (de) Videoverarbeitungsmechanismus
DE112017004246T5 (de) Cache- und komprimierungsinteroperabilität in einer grafikprozessorpipeline
DE102019120661A1 (de) Videoverfeinerungsmechanismus
DE102019120554A1 (de) Video-umcodierungsmechanismus mit sechs freiheitsgraden
DE102020129756A1 (de) Verwendung eines efehls einer rchitektur mit einem efehlssatz (isa) zur ektornormalisierung
DE102019119102A1 (de) Spärliche repräsentation für voxel
DE102019119085A1 (de) Punktbasiertes rendern und entfernung von projektionsrauschen
DE112018005527T5 (de) Automatisches aufwecken von leistungsdomänen fürgrafikkonfigurationsanforderungen
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102019101118A1 (de) Anweisung und Logik für systolisches Skalarprodukt mit Akkumulation
DE102019117218A1 (de) Reduziertes Rendern eines Videos mit sechs Freiheitsgraden
DE102019117495A1 (de) System und verfahren zur 3d-blob-klassifizierung und -übertragung
DE112018007634T5 (de) Vorrichtung und verfahren für eine virtualisierte anzeige
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020105902A1 (de) Hardware-indexzuordnungsmechanismus
DE102020108411A1 (de) Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit
DE102020108476A1 (de) Mechanismus zum Ausführen nichtlinearer Funktionen in einem Beschleuniger des maschinellen Lernens
DE112018004431T5 (de) Ressourcenlastausgleich basierend auf gebrauchs- und leistungsgrenzen
DE102019123443A1 (de) Mechanismus zum gemeinsamen Benutzen von Registern
DE102020113400A1 (de) Registerteilungsmechanismus
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE102020129625A1 (de) Seitentabellen-mapping-mechanismus