DE102008059371B4 - Funktionseinheit für verschmolzenes Multiplizieren und Addieren - Google Patents

Funktionseinheit für verschmolzenes Multiplizieren und Addieren Download PDF

Info

Publication number
DE102008059371B4
DE102008059371B4 DE102008059371A DE102008059371A DE102008059371B4 DE 102008059371 B4 DE102008059371 B4 DE 102008059371B4 DE 102008059371 A DE102008059371 A DE 102008059371A DE 102008059371 A DE102008059371 A DE 102008059371A DE 102008059371 B4 DE102008059371 B4 DE 102008059371B4
Authority
DE
Germany
Prior art keywords
precision
double
operand
dfma
graphics processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102008059371A
Other languages
English (en)
Other versions
DE102008059371B9 (de
DE102008059371A1 (de
Inventor
Stuart F. Oberman
Ming Y. Siu
David C. Tannenbaum
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of DE102008059371A1 publication Critical patent/DE102008059371A1/de
Application granted granted Critical
Publication of DE102008059371B4 publication Critical patent/DE102008059371B4/de
Publication of DE102008059371B9 publication Critical patent/DE102008059371B9/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • 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/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Abstract

Zusätzlich zu den zum Rendern verwendeten Single-Precision-Funktionseinheiten wird einem Grafikprozessor eine Funktionseinheit hinzugefügt, die eine direkte Unterstützung für Double-Precision-Arithmetik ermöglicht. Die Double-Precision-Funktionseinheit kann eine Anzahl verschiedener Operationen, einschließlich des verschmolzenen Multiplizierens und Addierens, an Double-Precision-Eingaben unter Verwendung von Datenpfaden und/oder Logikschaltkreisen, die mindestens eine Double-Precision-Breite aufweisen, auszuführen. Die Double-Precision- und Single-Precision-Funktionseinheiten können durch einen Schaltkreis zur Ausgabe gemeinsam genutzter Instruktionen gesteuert werden, und die Anzahl der Kopien der Double-Precision-Funktionseinheit, die in einem Kern enthalten sind, kann kleiner sein als die Anzahl der Kopien der Single-Precision-Funktionseinheiten, wodurch die Auswirkung des Hinzufügens von Double-Precision-Unterstützung auf die Chipfläche verringert wird.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Die vorliegende Erfindung betrifft allgemein Grafikprozessoren und insbesondere eine Double-Precision-Funktionseinheit für verschmolzenes Multiplizieren und Addieren für einen Grafikprozessor.
  • Grafikprozessoren werden üblicherweise in Computersystemen zum Beschleunigen des Renderns von Bildern aus zweidimensionalen oder dreidimensionalen Geometriedaten eingesetzt. Solche Prozessoren sind in der Regel mit einem hohen Grad an Parallelität und hohem Durchsatz konstruiert, wodurch es möglich ist, Tausende geometrische Grundformen (Primitives) parallel zu verarbeiten, um komplexe, realistische animierte Bilder in Echtzeit zu rendern. Grafikprozessoren der Spitzenklasse besitzen eine höhere Rechenleistung als typische zentrale Verarbeitungseinheiten (CPUs).
  • Seit kurzem gibt es Interesse an dem Benutzen der Mächtigkeit (leveraging the power) von Grafikprozessoren zum Beschleunigen der verschiedenen Berechnungen, die nichts mit dem Rendern von Bildern zu tun haben. Ein ”Allzweck”-Grafikprozessor kann zum Durchführen von Berechnungen auf den Gebieten der Wissenschaft, der Finanzen, des Unternehmertums und auf anderen Gebieten verwendet werden.
  • Eine Schwierigkeit beim Adaptieren von Grafikprozessoren für Allzweckberechnungen ist, dass Grafikprozessoren gewöhnlich für eine relativ niedrige numerische Präzision ausgelegt sind. Hochwertige Bilder können unter Verwendung von 32-Bit-(”Single-Precision-”) oder sogar 16-Bit-(”Half-Precision-”)Gleitkommawerten gerendert werden, und die Funktionseinheiten und internen Pipelines sind dafür konfiguriert, diese Datenbreiten zu unterstützen. Im Gegensatz dazu erfordern viele Allzweckberechnungen eine höhere numerische Präzision, zum Beispiel 64 Bit (”Double-Prescision”).
  • John D. OWENS, David LUEBKE [et. al]: ”A Survey of General-Purpose Computation an Graphics Hardware”, in: Eurographics 2005, State of the Art Reports, August 2005, pp. 21–51, offenbart Graphikhardware, welche eine Präzision von 32 Bit hat und offenbart ferner, dass eine 64 Bit Double-Precision-Arithmetik bestenfalls an einem fernen Horizont erscheint.
  • DE 11 2006 003 473 T5 offenbart eine Parallel-Array-Architektur für einen Graphikprozessor, wobei ein Array verschiedene Prozessierungscluster umfasst, wobei ein Prozessierungscluster eine Anzahl von Kernen aufweisen kann.
  • SCHWARZ, SCHMOOKLER, TRONG: ”FPU Implementations with Denormalized Numbers”, 2005, IEEE Trans. Computers, offenbart FPU-Implementationen mit denormalisierten Zahlen, wobei eine fusionierte Multiplikation-Addition-Operation erwähnt wird.
  • HE, LI, SUN: ”Multiply-Add Fused Float Point Unit with On-fly Denormalized Number Processing”, 2005, IEEE, offenbart eine fusionierte Multiplikation-Addition-Fließkommaeinheit (multiply-add fused float point unit), wobei das Schlüsselmerkmal einer Prozessierung einer denormalisierten Zahl ist, die denormalisierte Zahl wie eine normalisierte Zahl zu behandeln.
  • Um eine höhere Präzision zu unterstützen, verwenden einige Grafikprozessoren Software-Techniken zum Ausführen von Double-Precision-Berechnungen unter Verwendung einer Abfolge von Maschineninstruktionen und 32-Bit- oder 16-Bit-Funktionseinheiten. Diese Vorgehensweise verlangsamt den Durchsatz. Zum Beispiel mögen möglicherweise hundert oder mehr Maschineninstruktionen erforderlich sein, um eine einzelne 64-Bit-Multiplikationsoperation zu vollenden. Solche langen Sequenzen können den Double-Precision-Durchsatz des Grafikprozessors beträchtlich verringern. In einem repräsentativen Fall wird geschätzt, dass der Grafikprozessor Double-Precision-Berechnungen mit etwa einem Fünftel des Durchsatzes vollenden würde, der mit einem Dualkern-CPU-Chip der Spitzenklasse möglich wäre. (Im Vergleich dazu kann derselbe Grafikprozessor Single-Precision-Berechnungen mit etwa dem 15- bis 20-fachen des Durchsatzes der Dualkern-CPU vollenden.) Weil auf Software basierende Lösungen um so vieles langsamer sind, werden vorhandene Grafikprozessoren kaum für Double-Precision-Berechnungen eingesetzt.
  • Eine andere Lösung besteht darin, einfach alle Arithmetikschaltkreise des Grafikprozessors breit genug zu machen, um Double-Precision-Operanden zu handhaben. Dies würde den Durchsatz des Grafikprozessors für Double-Precision-Operationen so weit erhöhen, dass er dem Einzelgeschwindigkeitsdurchsatz entspricht. Jedoch haben Grafikprozessoren in der Regel Dutzende Kopien jedes Arithmetikschaltkreises, um Paralleloperationen zu unterstützen, und das Vergrößern eines jeden solchen Schaltkreises würde die Chipfläche, die Kosten und den Stromverbrauch beträchtlich vergrößern.
  • Eine weitere Lösung, die in der gemeinsamen, gleichzeitig anhängigen US-Patentanmeldung Nr. 11/359,353, eingereicht am 21. Februar 2006, beschrieben ist, besteht in dem Benutzen der Mächtigkeit von Single-Precision-Arithmetikschaltkreisen zum Durchführen von Double-Precisions-Operationen. Bei diesem Lösungsansatz wird spezielle Hardware, die in einer Single-Precision-Funktionseinheit enthalten ist, verwendet, um eine Double-Precision-Operation iterativen Durchführen. Dieser Lösungsansatz ist beträchtlich schneller als auf Software basierende Lösungen (der Durchsatz mag möglicherweise zum Beispiel um den Faktor 4 im Vergleich zum Single-Precision-Durchsatz verringert werden, anstatt um einen Faktor von etwa 100), aber dadurch kann der Chipaufbau erheblich komplizierter werden. Außerdem kann die gemeinsame Nutzung derselben Funktionseinheit durch Single-Precision- und Double-Precision-Operationen dazu führen, dass diese Einheit zu einem Engpass in der Pipeline wird, wenn zu viele Instruktionen dieselbe Funktionseinheit verlangen.
  • Kurzdarstellung der Erfindung
  • Ausführungsformen der vorliegenden Erfindung unterstützen direkt eine Double-Precision-Arithmetik in einem Grafikprozessor. Zusätzlich zu den Single-Precision-Funktionseinheiten, die zum Rendern verwendet werden, wird eine Mehrzweck-Double-Precision-Funktionseinheit bereitgestellt. Die Double-Precision-Funktionseinheit kann eine Anzahl unterschiedlicher Operationen, einschließlich eines verschmolzenen Multiplizierens und Addierens, an Double-Precision-Eingaben unter Verwendung von Datenpfaden und/oder logischen Schaltkreisen, die mindestens eine Double-Precision-Breite aufweisen, ausführen. Die Double-Precision- und Single-Precision-Funktionseinheiten können durch einen Schaltkreis zur Ausgabe gemeinsam genutzter Instruktionen gesteuert werden, und die Anzahl von Kopien der Double-Precision-Funktionseinheit, die in einem Kern enthalten sind, kann weniger sein als die Anzahl von Kopien der Single-Precision-Funktionseinheiten, wodurch die Auswirkung des Hinzufügens von Support für Double-Precision auf der Chipfläche verringert wird.
  • Gemäß einem Aspekt der vorliegenden Erfindung hat ein Grafikprozessor eine Renderpipeline, die dafür eingerichtet ist, Bilddaten zu erzeugen. Die Renderpipeline, die an Single-Precision-Operanden arbeitet, enthält einen Verarbeitungskern, der zum Ausführen einer Anzahl gleichzeitiger Befehlsfolgen eingerichtet ist. Der Verarbeitungskern enthält eine Mehrzweck-Double-Precision-Funktionseinheit, die dafür eingerichtet ist, auswählbar eine aus einer Anzahl von Double-Precision-Operationen auf einem Satz Double-Precision-Eingabeoperanden auszuführen. Die Mehrzweck-Double-Precision-Funktionseinheit enthält mindestens einen arithmetischen Logikschaltkreis, und alle arithmetischen Logikschaltkreise der Double-Precision-Funktionseinheit sind ausreichend breit, um mit Double-Precision zu arbeiten. In einigen Ausführungsformen ist die Double-Precision-Funktionseinheit so eingerichtet, dass jede der Double-Precision-Operationen in derselben Anzahl von Taktzyklen vollendet wird, und die Einheit mag auch so ausgeführt sein, dass eine Zeit (zum Beispiel die Anzahl von Taktzyklen), die zum Vollenden einer der Double-Precision-Operationen benötigt wird, nicht durch eine Unterlauf- oder Überlaufbedingung beeinflusst wird.
  • Es können verschiedene Operationen und Kombinationen von Double-Precision-Operationen unterstützt werden. In einer Ausführungsform enthalten die Double-Precision-Operationen eine Additionsoperation, die zwei Double-Precision-Operanden addiert; eine Multiplikationsoperation, die zwei Double-Precision-Operanden multipliziert; und eine verschmolzene Multiplizier-Addier-Operation, die ein Produkt eines ersten Double-Precision-Operanden und eines zweiten Double-Precision-Operanden berechnet und dann einen dritten Double-Precision-Operanden zu dem Produkt addiert. Zu weiteren Double-Precision-Operationen, die unterstützt werden können, gehören eine Double-Precision-Vergleichs(DSET)-Operation, die einen Vergleichstest an einem ersten Operanden und einem zweiten Operanden ausführt und ein Boolesches Ergebnis erzeugt, das anzeigt, ob der Vergleichstest bestanden wurde; eine Double-Precision-Maximum(DMAX)-Operation, die einen größeren von zwei Double-Precision-Eingabeoperanden herausgibt; oder eine Double-Precision-Minimum(DMIN)-Operation, die einen kleineren von zwei Double-Precision-Eingabeoperanden herausgibt. Außerdem können auch Formatumwandlungsoperationen unterstützt werden, die einen Operanden aus einem Double-Precision-Format in ein Nicht-Double-Precision-Format (oder umgekehrt) umwandeln.
  • Gemäß einem anderen Aspekt der vorliegenden Erfindung enthält ein Grafikprozessor eine Renderpipeline, die dafür geeignet ist, Bilddaten zu erzeugen. Die Renderpipeline enthält einen Verarbeitungskern, der zum Ausführen mehrerer gleichzeitiger Befehlsfolgen (threads) geeignet ist. Der Verarbeitungskern enthält eine Single-Precision-Funktionseinheit, die dafür eingerichtet ist, eine arithmetische Operation an einem oder mehreren Single-Precision-Operanden auszuführen, und eine Double-Precision-Funktionseinheit für verschmolzenes Multiplizieren und Addieren (DFMA), die dafür geeignet ist, eine verschmolzene Multiplizier-Addier-Operation an einem Satz Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis auszugeben. Die DFMA-Funktionseinheit enthält vorteilhafterweise eine DFMA-Pipeline, die Datenpfade aufweist, die breit genug zum Durchführen der verschmolzenen Multiplizier-Addier-Operation in einem einzelnen Durchgang durch die DFMA-Pipeline hindurch sind. Zum Beispiel mag die DFMA-Funktionseinheit einen Multiplizierer, der dafür eingerichtet ist, ein Produkt aus zwei Double-Precision-Mantissen in einer einzelnen Iteration zu berechnen, und einen Addierer, der dafür eingerichtet ist, eine Summe aus zwei Double-Precision-Mantissen in einer einzelnen Iteration zu berechnen, enthalten.
  • Die DFMA-Funktionseinheit kann auch dafür konfiguriert sein, andere Operationen auszuführen. Zum Beispiel ist die DFMA in einigen Ausführungsformen dafür konfiguriert, eine Multiplikationsoperation an einem Paar Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis auszugeben. In einigen Ausführungsformen werden die Multiplikationsoperation und die verschmolzene Multiplizier-Addier-Operation jeweils in derselben Anzahl von Taktzyklen vollendet. Gleichermaßen kann die DFMA-Funktionseinheit dafür konfiguriert sein, eine Additionsoperation an einem Paar Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis auszugeben. In einer Ausführungsform werden die Additionsoperation und die verschmolzene Multiplizier-Addier-Operation jeweils in derselben Anzahl von Taktzyklen vollendet.
  • In einigen Ausführungsformen enthält der Verarbeitungskern eine Anzahl (P) von Kopien der ersten Funktionseinheit, die dafür eingerichtet sind, parallel zu arbeiten, und eine Anzahl (N) von Kopien der DFMA-Funktionseinheit, wobei die Anzahl P größer als die Anzahl N ist. In einer Ausführungsform ist die Anzahl N eins.
  • Der Verarbeitungskern mag einen Eingabeverwaltungsschaltkreis enthalten, der dafür eingerichtet ist, P Sätze Double-Precision-Eingabeoperanden für die DFMA-Funktionseinheit zu erfassen und unterschiedliche der P Sätze Double-Precision-Operanden an die DFMA-Funktionseinheit in unterschiedlichen (zum Beispiel aufeinanderfolgenden) Taktzyklen auszugeben. Der Eingabeverwaltungsschaltkreis mag auch dafür eingerichtet sein, P Sätze Single-Precision-Eingabeoperanden für die erste Funktionseinheit zu erfassen und parallel einen anderen der P Sätze Single-Precision-Operanden an jede der P Kopien der ersten Funktionseinheit auszugeben.
  • Die folgende detaillierte Beschreibung ermöglicht zusammen mit den begleitenden Zeichnungen ein besseres Verständnis der Art und der Vorteile der vorliegenden Erfindung.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockschaubild eines konventionellen Computersystems;
  • 2 ist ein Blockschaubild einer Renderpipeline, die in einer konventionellen Grafikverarbeitungseinheit implementiert werden kann;
  • 3 ist ein Blockschaubild eines Ausführungskerns gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 listet Double-Precision-Arithmetik, Vergleichsoperationen und Formatumwandlungsoperationen auf, die durch eine Double-Precision-Funktionseinheit gemäß einer Ausführungsform der vorliegenden Erfindung ausgeführt werden können;
  • 5 ist ein vereinfachtes Blockschaubild einer Double-Precision-Funktionseinheit gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6 ist ein Blockschaubild eines Operandenvorbereitungsblocks für die Double-Precision-Funktionseinheit von 5;
  • 7 ist ein Blockschaubild eines Exponentenpfades für die Double-Precision-Funktionseinheit von 5;
  • 8 ist ein Blockschaubild eines Mantissenpfades für die Double-Precision-Funktionseinheit von 5;
  • 9 ist ein Blockschaubild eines Vorzeichenpfades für die Double-Precision-Funktionseinheit von 5;
  • 10 ist ein Blockschaubild einer Ausgabesektion für die Double-Precision-Funktionseinheit von 5;
  • 11 ist ein Blockschaubild eines Ausführungskerns gemäß einer Ausführungsform der vorliegenden Erfindung; und
  • 12 ist ein Blockschaubild, das eine Operandensequenzierung für eine Double-Precision-Funktionseinheit gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • Ausführungsformen der vorliegenden Erfindung stellen Grafikprozessoren bereit, die dedizierte Double-Precision(zum Beispiel 64-Bit)-Funktionseinheiten enthalten. In einer Ausführungsform ist eine Double-Precision-Funktionseinheit in der Lage, Additions-, Multiplikations- und verschmolzene Multiplizier-Addier-Operationen (fused-multiply add operations) sowie Double-Precision-Vergleiche und Formatumwandlungen zu und aus Double-Precision-Formaten auszuführen.
  • I. Systemüberblick
  • A. Computersystemüberblick
  • 1 ist ein Blockschaubild eines konventionellen Computersystems 100. Das Computersystem 100 enthält eine zentrale Verarbeitungseinheit (CPU) 102 und ein Systemmemory 104, die über einen Buspfad kommunizieren, der eine Memorybridge 105 enthält. Die Memorybridge 105, die zum Beispiel ein herkömmlicher Northbridgechip sein mag, ist über einen Bus oder einen anderen Kommunikationspfad 106 (zum Beispiel einen HyperTransport-Link) mit einer E/A(Eingang/Ausgang)-Bridge 107 verbunden. Die E/A-Brücke 107, die zum Beispiel ein herkömmlicher Southbridgechip sein mag, empfängt Benutzereingaben von einem oder mehreren Benutzereingabegeräten 108 (zum Beispiel Tastatur, Maus) und leitet die Eingaben über den Bus 106 und die Memorybridge 105 zur CPU 102 weiter. Eine visuelle Ausgabe erfolgt auf einem pixelbasierten Anzeigegerät 110 (zum Beispiel auf einem herkömmlichen Kathodenstrahlröhren- oder LCD-Monitor), der unter der Steuerung eines Grafik-Teilsystems 112 arbeitet, das über einen Bus oder einen anderen Kommunikationspfad 113, zum Beispiel einen PCI Express (PCI-E)- oder Accelerated Graphics Port(AGP)-Link mit der Memorybridge 105 verbunden ist. Eine Systemfestplatte 114 ist ebenfalls mit der E/A-Bridge 107 verbunden. Ein Schalter 116 ermöglicht Verbindungen zwischen der E/A-Bridge 107 und anderen Komponenten, wie zum Beispiel einem Netzwerkadapter 118 und verschiedenen Zusatzkarten 120, 121. Andere Komponenten (die nicht explizit gezeigt sind), darunter USB- oder andere Portanschlüsse, CD-Laufwerke, DVD-Laufwerke und dergleichen, mögen ebenfalls mit der E/A-Bridge 107 verbunden sein. Busverbindungen zwischen den verschiedenen Komponenten mögen unter Verwendung von Busprotokollen wie zum Beispiel PCI (Peripheral Component Interconnect), PCI-E, AGP, HyperTransport oder sonstigen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokollen implementiert werden, und Verbindungen zwischen verschiedenen Geräten mögen verschiedene Protokolle verwenden, die dem Fachmann bekannt sind.
  • Das Grafikverarbeitungs-Teilsystem 112 enthält eine Grafikverarbeitungseinheit (GPU) 122 und ein Grafikmemory 124, die zum Beispiel unter Verwendung eines oder mehrerer IC-Bauelemente implementiert werden mögen, wie zum Beispiel programmierbaren Prozessoren, anwendungsspezifischen integrierten Schaltkreisen (ASICs) und Speicherbausteinen. Die GPU 122 mag zum Durchführen verschiedener Aufgaben konfiguriert sein, die mit dem Erzeugen von Pixeldaten aus Grafikdaten zu tun haben, die durch die CPU 102 und/oder das Systemmemory 104 über die Memorybridge 105 und den Bus 113 bereitgestellt werden, die mit dem Grafikspeicher 124 interagieren, um Pixeldaten und dergleichen zu speichern und zu aktualisieren. Zum Beispiel mag die GPU 122 Pixeldaten aus 2-D- oder 3-D-Szenendaten erzeugen, die durch verschiedene Programme bereitgestellt werden, die durch eine CPU 102 ausgeführt werden. Die GPU 122 mag auch Pixeldaten, die über eine Memorybridge 105 empfangen werden, in dem Grafikspeicher 124 mit oder ohne Weiterverarbeitung speichern. Die GPU 122 enthält auch ein Auslesemodul, das dafür konfiguriert ist, Pixeldaten aus dem Grafikspeicher 124 in das Anzeigegerät 110 einzuspeisen.
  • Die GPU 122 ist auch konfigurierbar, Allzweckberechnungen für Datenverarbeitungsaufgaben auszuführen, darunter Aufgaben im Zusammenhang mit Grafikanwendungen (zum Beispiel die physische Modellierung für ein Videospiel oder dergleichen) sowie Aufgaben, die nichts mit Grafikanwendungen zu tun haben. Für Allzweckberechnungen liest die GPU 122 vorteilhafterweise Eingabedaten aus dem Systemmemory 104 oder dem Grafikmemory 124, führt ein oder mehrere Programme zum Verarbeiten der Daten aus und schreibt Ausgabedaten zurück in das Systemmemory 104 oder Grafikmemory 124. Die GPU 122 enthält zusätzlich zu anderen Single-Precision-Funktionseinheiten, die während Renderoperationen verwendet werden, vorteilhafterweise noch eine oder mehrere Double-Precision-Einheiten für verschmolzenes Multiplizieren und Addieren (in 1 nicht gezeigt) zur Verwendung bei Allzweckberechnungen.
  • Die CPU 102 fungiert als der Hauptprozessor des Systems 100 und steuert und koordiniert Operationen anderer Systemkomponenten. Insbesondere, gibt die CPU 102 Befehle aus, die die Funktion der GPU 122 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Stream aus Befehlen für die GPU 122 in einen Befehlpuffer, der sich in dem Systemmemory 104, im Grafikmemory 124 oder an einem anderen Speicherort befinden mag, auf den sowohl die CPU 102 als auch die GPU 122 zugreifen können. Die GPU 122 liest den Befehlsstream aus dem Befehlpuffer und führt Befehle asynchron zur Operation der CPU 102 aus. Zu den Befehlen mögen herkömmliche Renderbefehle zum Erzeugen von Bildern sowie Allzweckberechnungsbefehle gehören, die es Anwendungen, die in einer CPU 102 ausgeführt werden, ermöglichen, die Rechenmächtigkeit der GPU 122 für eine Datenverarbeitung zu nutzen, die keinen Bezug zur Bilderzeugung haben mögen.
  • Es versteht sich, dass das im vorliegenden Text gezeigte System nur der Veranschaulichung dient und dass Varianten und Modifizierungen möglich sind. Die Bustopologie, einschließlich der Anzahl und Anordnung von Bridges, mag nach Wunsch verändert werden. Zum Beispiel ist das Systemmemory 104 in einigen Ausführungsformen mit der CPU 102 direkt anstatt über eine Bridge verbunden, und andere Geräte kommunizieren mit dem Systemmemory 104 über die Memorybridge 105 und die CPU 102. In anderen alternativen Topologien ist das Grafik-Teilsystem 112 mit der E/A-Bridge 107 anstatt mit der Memorybridge 105 verbunden. In anderen Ausführungsformen könnten die E/A-Bridge 107 und die Memorybridge 105 in einen einzelnen Chip integriert sein. Die im vorliegenden Text konkret gezeigten Komponenten sind optional. Zum Beispiel könnte eine beliebige Anzahl von Zusatzkarten (add-in cards) oder Peripheriegeräten unterstützt werden. In einigen Ausführungsformen entfällt der Schalter (switch) 116, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 sind direkt an die E/A-Bridge 107 angeschlossen.
  • Die Verbindung der GPU 122 mit dem Rest des Systems 100 mag ebenfalls verändert werden. In einigen Ausführungsformen ist das Grafiksystem 112 als eine Zusatzkarte implementiert, die in einen Erweiterungsschlitz des Systems 100 eingesteckt werden kann. In anderen Ausführungsformen ist eine GPU auf einem einzelnen Chip mit einer Busbridge, wie zum Beispiel einer Memorybridge 105 oder einer E/A-Bridge 107, integriert. In anderen Ausführungsformen mögen einige oder alle Elemente der GPU 122 mit der CPU 102 integriert sein.
  • Eine GPU mag mit einer beliebigen Menge an lokalen Grafikmemories ausgestattet sein, einschließlich ohne lokales Memory, und mag lokales Memory und Systemmemory in beliebiger Kombination verwenden. Zum Beispiel gibt es in einer Ausführungsform einer vereinheitlichten Memoryarchitektur (UMA) keinen dedizierten Grafikmemorybaustein, und die GPU verwendet ausschließlich oder fast ausschließlich Systemmemory. In UMA-Ausführungsformen mag die GPU in einen Busbridgechip integriert sein oder kann als ein diskreter Chip mit einem Hochgeschwindigkeitsbus (zum Beispiel PCI-E) ausgeführt sein, der die GPU mit dem Bridgechip und dem Systemmemory verbindet.
  • Es versteht sich außerdem, dass eine beliebige Anzahl von GPUs in ein System eingebunden werden mag, zum Beispiel indem man mehrere GPUs auf einer einzelnen Grafikkarte anordnet oder indem man mehrere Grafikkarten mit dem Bus 113 verbindet. Mehrere GPUs mögen parallel betrieben werden, um Bilder für dasselbe Anzeigegerät oder für verschiedene Anzeigegeräte zu erzeugen, oder es kann eine einzelne GPU betrieben werden, um Bilder zu erzeugen, während eine andere GPU Allzweckberechnungen, einschließlich Double-Precision-Berechnungen, ausführt, wie unten beschrieben ist.
  • Außerdem mögen GPUs, die Aspekte der vorliegenden Erfindung verkörpern, in eine Vielzahl verschiedener Geräte inkorporiert werden, darunter Allzweck-Computersysteme, Videospielekonsolen und andere Spezialanwendungs-Computersysteme, DVD-Player, handgehaltene Geräte, wie zum Beispiel Mobiltelefone oder persönliche digitale Assistenten, und so weiter.
  • B. Renderpipeline-Überblick
  • 2 ist ein Blockschaubild einer Renderpipeline 200, die in der konventionellen GPU 122 von 1 gemäß einer Ausführungsform der vorliegenden Erfindung implementiert werden kann. In dieser Ausführungsform ist die Renderpipeline 200 unter Verwendung einer Architektur implementiert, in der beliebige anwendbare Grafik-bezogene Programme (zum Beispiel Vertexshader,
    Geometrieshader und/oder Pixelshader) und Allzweckberechnungsprogramme unter Verwendung derselben Parallelverarbeitungs-Hardware ausgeführt werden, die im vorliegenden Text als ein ”nebenläufiges Kern-Array (multithreaded core array)” 202 bezeichnet wird.
  • Zusätzlich zu dem nebenläufigen Kern-Array 202 enthält die Renderpipeline 200 ein Front-End 204 und einen Datenassemblierer 206, ein Einrichtmodul (setup module) 208, einen Rasterisierer (rasterizer) 210, ein Farbassembliermodul 212 und ein Rasteroperationsmodul (ROP) 214, von denen jedes unter Verwendung herkömmlicher IC-Technologien oder anderer Technologien implementiert sein kann.
  • Für Renderoperationen empfängt das Front-End 204 Zustandsinformationen (STATE), Befehle (CMD) und Geometriedaten (GDATA) zum Beispiel von der CPU 102 von 1. In einigen Ausführungsformen stellt die CPU 102 Geometriedaten nicht direkt bereit, sondern stellt stattdessen Verweise auf Orte im Systemmemory 104 bereit, an denen Geometriedaten gespeichert sind. Der Datenassemblierer 206 ruft die Daten aus dem Systemmemory 104 ab. Für Renderoperationen mögen die Zustandsinformationen, die Befehle und die Geometriedaten von allgemein herkömmlichen Art sein und mögen verwendet werden, um das oder die gewünschten gerenderten Bilder zu definieren, einschließlich Geometrie-, Beleuchtungs-, Schattierungs-, Textur-, Bewegungs- und/oder Kameraparameter für eine Szene.
  • Die Zustandsinformationen und Renderbefehle definieren Verarbeitungsparameters und -aktionen für verschiedene Stufen der Renderpipeline 200. Das Front-End 204 leitet die Zustandsinformationen und Renderbefehle über einen Steuerpfad (nicht explizit gezeigt) zu anderen Komponenten der Renderpipeline 200. Wie dem Fachmann bekannt ist, mögen diese Komponenten auf empfangene Zustandsinformationen in der Weise reagieren, dass sie Werte in verschiedenen Steuerregistern speichern oder aktualisieren, auf die während der Verarbeitung zugegriffen wird, und mögen auf Renderbefehle in der Weise reagieren, dass sie Daten verarbeiten, die in der Pipeline empfangen werden.
  • Das Front-End 204 leitet die Geometriedaten zum Datenassemblierer 206. Der Datenassemblierer 206 formatiert die Geometriedaten und bereitet sie zur Ausgabe an ein Geometriemodul 218 in dem nebenläufigen Kern-Array 202 auf.
  • Das Geometriemodul 218 weist programmierbare Verarbeitungsmaschinen (nicht explizit gezeigt) in dem nebenläufigen Kern-Array 202 an, Vertex- und/oder Geometrieshaderprogramme an den Vertex-Daten auszuführen, wobei die Programme in Reaktion auf die durch das Front-End 204 ausgegebenen Zustandsinformationen ausgewählt werden. Die Vertex- und/oder Geometrieshaderprogramme können durch die Renderanwendung spezifiziert werden, wie dem Fachmann bekannt ist, und es können unterschiedliche Shaderprogramme auf unterschiedliche Vertices und/oder geometrische Grundformen angewendet werden. In einigen Ausführungsformen werden Vertexshaderprogramme und Geometrieshaderprogramme unter Verwendung derselben programmierbaren Verarbeitungskerne in dem nebenläufigen Kern-Array 202 ausgeführt. Somit mag, zu bestimmten Zeiten, ein bestimmter Verarbeitungskern als ein Vertexshader arbeiten, der Vertexprogramminstruktionen empfängt und ausführt, und zu anderen Zeiten mag derselbe Verarbeitungskern als ein Geometrieshader arbeiten, der Geometrieprogramminstruktionen empfängt und ausführt. Die Verarbeitungskerne können nebenläufig (multithreaded) sein, und unterschiedliche Befehlsfolgen, die unterschiedliche Arten von Shaderprogrammen ausführen, mögen in dem nebenläufigen Kern-Array 202 ohne zeitliche Verzögerung nebeneinander ablaufen.
  • Nachdem die Vertex- und/oder Geometrieshaderprogramme ausgeführt wurden, reicht das Geometriemodul 218 die verarbeiteten Geometriedaten (GDATA') an das Einrichtmodul 208 weiter. Das Einrichtmodul 208, das von allgemein herkömmlicher Bauart sein mag, erzeugt Randgleichungen aus den Clipraum-(clip space) oder Schirmraumkoordinaten (screen space) jeder geometrischen Grundform. Die Randgleichungen sind vorteilhaft dafür verwendbar zu bestimmen, ob sich ein Punkt im Schirmraum innerhalb oder außerhalb der geometrischen Grundform befindet.
  • Das Einrichtmodul 208 speist jede geometrische Grundform (PRIM) in den Rasterisierer 210 ein. Der Rasterisierer 210, der von allgemein herkömmlicher Bauart sein mag, bestimmt zum Beispiel unter Verwendung herkömmlicher Abtastumwandlungsalgorithmen (scan-conversion algorithms), welche Pixel (wenn irgendwelche) durch die geometrische Grundform erfasst werden. Im Sinne des vorliegenden Textes meint ein ”Pixel” (oder ”Fragment”) allgemein eine Region im 2-D-Schirmraum, für die ein einzelner Farbwert zu bestimmen ist. Die Anzahl und Anordnung von Pixeln kann ein konfigurierbarer Parameter der Renderpipeline 200 sein und mag oder mag nicht mit der Schirmauflösung eines bestimmten Anzeigegerätes korreliert werden.
  • Nach dem Bestimmen, welche Pixel durch einen geometrische Grundform erfasst werden, stellt der Rasterisierer 210 die geometrische Grundform (PRIM) zusammen mit einer Liste der Schirmkoordinaten (X, Y) der Pixel, die durch die geometrische Grundform erfasst werden, einem Farbassembliermodul 212 bereit. Das Farbassembliermodul 212 weist den geometrischen Grundformen und Erfassungsinformationen, die aus dem Rasterisierer 210 empfangen wurden, Attribute (zum Beispiel Farbkomponenten, Texturkoordinaten, Oberflächennormalen) der Vertices der geometrischen Grundform zu und erzeugt Ebenengleichungen (oder andere geeignete Gleichungen), die einige oder alle Attribute als eine Funktion der Position im Schirmkoordinatenraum definieren.
  • Diese Attributgleichungen sind vorteilhaft in einem Pixelshaderprogramm verwendbar, um einen Wert für das Attribut an jeder Stelle innerhalb der geometrischen Grundform zu berechnen. Es können herkömmliche Techniken zum Erzeugen der Gleichungen verwendet werden. Zum Beispiel erzeugt in einer Ausführungsform das Farbassembliermodul 212 Koeffizienten A, B, und C für eine Ebenengleichung der Form U = Ax + By + C für jedes Attribut U.
  • Das Farbassembliermodul 212 stellt die Attributgleichungen (EQS, die zum Beispiel die Ebenengleichungskoeffizienten A, B und C enthalten mögen) für jede geometrische Grundform (primitive), die mindestens eine Samplingposition eines Pixels erfasst, und eine Liste der Schirmkoordinaten (X, Y) der erfassten Pixel einem Pixelmodul 224 in dem nebenläufigen Kern-Array (multithreaded core array) 202 bereit. Das Pixelmodul 224 weist programmierbare Verarbeitungsmaschinen (nicht explizit gezeigt) in dem nebenläufigen Kern-Array 202 an, ein oder mehrere Pixelshaderprogramme an jedem Pixel, das durch die geometrische Grundform erfasst wurde, auszuführen, wobei das oder die Programme in Reaktion auf die durch das Front-End 204 bereitgestellten Zustandsinformationen ausgewählt werden. Wie bei den Vertexshaderprogrammen und Geometrieshaderprogrammen können Renderanwendungen das Pixelshaderprogramm spezifizieren, das für jeden bestimmten Satz Pixel zu verwenden ist.
  • Pixelshaderprogramme werden in dem nebenläufigen Kern-Array 202 vorteilhafterweise unter Verwendung derselben programmierbaren Verarbeitungsmaschinen ausgeführt, die auch die Vertex- und/oder Geometrieshaderprogramme ausführen. Somit mag zu bestimmten Zeiten eine bestimmte Verarbeitungsmaschine als ein Vertexshader arbeiten, der Vertexprogramminstruktionen empfängt und ausführt; und zu anderen Zeiten mag dieselbe Verarbeitungsmaschine als ein Geometrieshader arbeiten, der Geometrieprogramminstruktionen empfängt und ausführt; und zu anderen Zeiten mag dieselbe Verarbeitungsmaschine als ein Pixelshader arbeiten, der Pixelshaderprogramminstruktionen empfängt und ausführt.
  • Sobald die Verarbeitung für ein Pixel oder eine Pixelgruppe vollendet ist, speist das Pixelmodul 224 die verarbeiteten Pixel (PDATA) in das ROP 214 ein. Das ROP 214, das von allgemein herkömmlicher Bauart sein mag, integriert die aus dem Pixelmodul 224 empfangenen Pixelwerte mit Pixeln des Bildes, das gerade in dem Framepuffer 226 aufgebaut wird, der zum Beispiel in dem Grafikmemory 124 angeordnet sein mag. In einigen Ausführungsformen kann das ROP 214 Pixel maskieren oder neue Pixel mit Pixeln vermischen, die zuvor in das gerenderte Bild geschrieben wurden. Es können auch Tiefenpuffer, Alphapuffer und Schablonenpuffer (stencil buffer) verwendet werden, um den Anteil (sofern zutreffend) jedes ankommenden Pixels an dem gerenderten Bild zu bestimmen. Pixeldaten PDATA', die der jeweiligen Kombination jedes ankommenden Pixelwertes und irgendeines zuvor gespeicherten Pixelwertes entsprechen, werden in den Framepuffer 226 zurück geschrieben. Sobald das Bild vollständig ist, kann der Framepuffer 226 an ein Anzeigegerät ausgelesen und/oder weiterverarbeitet werden.
  • Für Allzweckberechnungen kann das nebenläufige Kern-Array durch das Pixelmodul 224 (oder durch das Geometriemodul 218) gesteuert werden. Front-End 204 empfängt Zustandsinformationen (STATE) und Verarbeitungsbefehle (CMD) zum Beispiel von der CPU 102 von 1 und stellt die Zustandsinformationen und Befehle über einen Steuerpfad (nicht explizit gezeigt) einer Arbeitsverteilungseinheit zu, die zum Beispiel in das Farbassembliermodul 212 oder das Pixelmodul 224 inkorporiert sein kann. Die Arbeitsverteilungseinheit verteilt Verarbeitungsaufgaben unter den Verarbeitungskernen, die das nebenläufige Kern-Array 202 ausmachen. Es mögen verschiedene Arbeitsverteilungsalgorithmen verwendet werden.
  • Jede Verarbeitungsaufgabe enthält vorteilhafterweise das Ausführen einer Anzahl von Verarbeitungsbefehlsfolgen, wobei jede Befehlsfolge dasselbe Programm ausführt. Das Programm enthält vorteilhafterweise Instruktionen zum Lesen von Eingabedaten aus einem ”globalen Memory” (zum Beispiel dem Systemmemory 104, dem Grafikmemory 124 oder irgendeinem anderen Memory, auf das sowohl die GPU 122 als auch die CPU 102 zugreifen können), zum Ausführen verschiedener Operationen, einschließlich mindestens einiger Double-Precision-Operationen an den Eingabedaten, um Ausgabedaten zu erzeugen, und zum Schreiben der Ausgabedaten in das globalen Memory. Spezifische Verarbeitungsaufgaben sind für die vorliegende Erfindung nicht von ausschlaggebender Bedeutung.
  • Es versteht sich, dass die im vorliegenden Text beschriebene Renderpipeline nur der Veranschaulichung dient und dass Varianten und Modifikationen möglich sind. Die Pipeline mag Einheiten enthalten, die sich von den gezeigten unterscheiden, und die Abfolge der Verarbeitungsereignisse mag im Vergleich zu der, die im vorliegenden Text beschrieben ist, abweichen. Des Weiteren mögen mehrere Instanzen einiger oder aller Module, die im vorliegenden Text beschrieben sind, parallel ablaufen. In einer solchen Ausführungsform enthält das nebenläufige Kern-Array 202 zwei oder mehr Geometriemodule 218 und eine gleiche Anzahl von Pixelmodulen 224, die parallel arbeiten. Jedes Geometriemodul und Pixelmodul steuern gemeinsam eine andere Teilmenge der Verarbeitungsmaschinen in dem nebenläufigen Kern-Array 202.
  • C. Kernüberblick
  • Das nebenläufige Kern-Array 202 enthält vorteilhafterweise einen oder mehrere Verarbeitungskerne, die für eine parallele Ausführung einer großen Anzahl von Verarbeitungsbefehlsfolgen (processing threads) geeignet sind, wobei sich der Begriff ”Befehlsfolge” auf eine Instanz eines bestimmten Programms bezieht, die auf einem bestimmten Satz von Eingabedaten ausführt. Zum Beispiel kann eine Befehlsfolge eine Instanz eines Vertexshaderprogramms, das auf den Attributen eines einzelnen Vertex ausführt, ein Pixelshaderprogramm, das auf einer bestimmten geometrische Grundform und auf einem bestimmtem Pixel ausführt, oder eine Instanz eines Allzweckberechnungsprogramms sein.
  • 3 ist ein Blockschaubild eines Ausführungskerns 300 gemäß einer Ausführungsform der vorliegenden Erfindung. Der Ausführungskern 300, der zum Beispiel in dem oben beschriebenen nebenläufigen Kern-Array 202 implementiert sein mag, ist dafür konfiguriert, beliebige Sequenzen von Instruktionen zum Durchführen verschiedener Berechnungen auszuführen. In einigen Ausführungsformen kann derselbe Ausführungskern 300 zum Ausführen von Shaderprogrammen in allen Phasen des Grafik-Renderns verwendet werden, einschließlich Vertexshader-, Geometrieshader- und/oder Pixelshaderprogramme sowie Allzweckberechnungsprogramme.
  • Der Ausführungskern 300 enthält eine Hol- und Versandeinheit (fetch and dispatch unit) 302, eine Zuteilungseinheit (issue unit) 304, eine Double-Precision-Einheit für verschmolzenes Multiplizieren und Addieren (DFMA) 320, eine Anzahl (N) anderer Funktionseinheiten (FU) 322 und eine Registerdatei 324. Jede Funktionseinheit 320, 322 ist zum Durchführen spezifizierter Operationen konfiguriert. In einer Ausführungsform implementiert die DFMA-Einheit 320 vorteilhafterweise zusätzlich zu den anderen Double-Precision-Operationen eine Double-Precision-Operation für verschmolzenes Multiplizieren und Addieren, wie unten beschrieben ist. Es versteht sich, dass eine beliebige Anzahl von DFMA-Einheiten 320 in einem Kern 300 enthalten sein kann.
  • Die anderen Funktionseinheiten 322 mögen von allgemein herkömmlicher Bauart sein und mögen eine Vielzahl verschiedener Operationen unterstützen, wie zum Beispiel Single-Precision Addition, Multiplikation, bitweise Logikoperationen, Vergleichsoperationen, Formatumwandlungsoperationen, Texturfilterung, Memoryzugriff (zum Beispiel Last- und Speicheroperationen), Approximierung von Transzendentalfunktionen, Interpolation und so weiter. Die Funktionseinheiten 320, 322 mögen in einer Pipeline angeordnet sein, wodurch eine neue Instruktion zugeteilt werden kann, bevor eine vorherige Instruktion zu Ende geführt wurde, wie dem Fachmann bekannt ist. Es mag eine beliebige Kombination von Funktionseinheiten bereitgestellt werden.
  • Während des Betriebes des Ausführungskerns 300 erhält die Hol- und Versandeinheit 302 Instruktionen aus einem Instruktionsspeicher (nicht gezeigt), decodiert sie und versendet sie als Operationscodes mit zugehörigen Operandenverweisen oder Operandendaten an die Zuteilungseinheit 304. Für jede Instruktion erlangt die Zuteilungseinheit 304 alle referenzierten Operanden zum Beispiel aus der Registerdatei 324. Wenn alle Operanden für eine Instruktion bereit sind, so teilt die Zuteilungseinheit 304 die Instruktion durch Senden des Operationscodes und der Operanden an die DFMA-Einheit 320 oder eine andere Funktionseinheit 322 zu. Die Zuteilungseinheit 304 verwendet vorteilhafterweise den Operationscode zum Auswählen der richtigen Funktionseinheit zum Ausführen einer bestimmten Instruktion. Die Hol- und Versandeinheit 302 und die Zuteilungseinheit 304 mögen unter Verwendung herkömmlicher Mikroprozessorarchitekturen und -techniken implementiert werden, und auf eine detaillierte Beschreibung wird verzichtet, weil sie für das Verstehen der vorliegenden Erfindung nicht ausschlaggebend ist.
  • Die DFMA-Einheit 320 und andere Funktionseinheiten 322 empfangen die Operationscodes und zugehörigen Operanden und führen die spezifizierte Operation an den Operanden aus. Ergebnisdaten werden in der Form von Ergebniswerten bereitgestellt, die über einen Datenübertragungspfad 326 an die Registerdatei 324 (oder einen anderen Bestimmungsort) weitergeleitet werden. Die Registerdatei 324 enthält in einigen Ausführungsformen eine lokale Registerdatei mit Sektionen, die bestimmten Befehlsfolgen zugewiesen sind, sowie eine globale Registerdatei, die die gemeinsame Nutzung von Daten durch Befehlsfolgen gestattet. Die Registerdatei 324 kann verwendet werden, um Eingabedaten, Zwischenergebnisse und dergleichen während der Programmausführung zu speichern. Eine spezifische Implementierung der Registerdatei 324 ist für die vorliegende Erfindung nicht von ausschlaggebender Bedeutung.
  • In einer Ausführungsform ist der Kern 300 nebenläufig und kann bis zu einer maximalen Anzahl (zum Beispiel 384, 768) von Befehlsfolgen gleichzeitig ausführen, zum Beispiel durch Beibehalten aktueller Zustandsinformationen, die jeder Befehlsfolge zugeordnet sind. Der Kern 300 ist vorteilhafterweise dafür ausgelegt, rasch von einer Befehlsfolge zu einer anderen umzuschalten, so dass zum Beispiel eine Programminstruktion aus einer Vertexbefehlsfolge in einem Taktzyklus zugeteilt werden könnte, gefolgt von einer Programminstruktion aus einer anderen Vertexbefehlsfolge oder aus einer anderen Art von Befehlsfolge, wie zum Beispiel einer Geometriebefehlsfolge oder einer Pixelbefehlsfolge und so weiter.
  • Es versteht sich, dass der Ausführungskern von 3 nur der Veranschaulichung dient und dass Varianten und Modifikationen möglich sind. Eine beliebige Anzahl von Kernen mag in einem Prozessor enthalten sein, und eine beliebige Anzahl von Funktionseinheiten mag in einem Kern enthalten sein. Die Hol- und Versandeinheit 302 und die Zuteilungseinheit 304 mögen jede gewünschte Mikroarchitektur implementieren, einschließlich skalarer, superskalarer oder Vektorarchitekturen mit Zuteilung von Instruktion innerhalb oder außerhalb der Reihenfolge; spekulativer Ausführungsmodi; Single-Instruction, Multiple-Data(SIMD)-Instruktionszuteilung; und so weiter, je nach Wunsch. In einigen Architekturen mag die Zuteilungseinheit ein langes Instruktionswort (long instruction word) empfangen und/oder zuteilen, das Operationscodes und Operanden für mehrere Funktionseinheiten oder mehrere Operationscodes und/oder Operanden für eine einzelne Funktionseinheit enthält. In einigen Architekturen mag der Ausführungskern mehrere Instanzen jeder Funktionseinheit enthalten, die parallel arbeiten können, zum Beispiel für die Ausführung von SIMD-Instruktionen. Der Ausführungskern mag auch eine Abfolge von in einer Pipeline angeordneten Funktionseinheiten enthalten, in denen Ergebnisse aus Funktionseinheiten in einer bestimmten Stufe an Funktionseinheiten in späteren Stufen weitergeleitet werden, anstatt direkt zu einer Registerdatei. Die Funktionseinheiten in einer solchen Konfiguration können durch ein einzelnes langes Instruktionswort oder durch separate Instruktionen gesteuert werden.
  • Außerdem erkennt der Durchschnittsfachmann, der in den Genuss der vorliegenden Lehren kommt, dass die DFMA-Einheit 320 als eine Funktionseinheit in jedem beliebigen Mikroprozessor implementiert werden kann, der nicht auf Grafikprozessoren oder eine bestimmte Prozessor- oder Ausführungskernarchitektur beschränkt ist. Zum Beispiel könnte die DFMA-Einheit 320 in einer Allzweck-Parallelverarbeitungseinheit oder einer CPU implementiert werden.
  • C. Überblick über die DFMA-Einheit
  • Gemäß einer Ausführungsform der vorliegenden Erfindung enthält der Ausführungskern 300 eine DFMA-Einheit 320, die drei Klassen von Operationen ausführt: Double-Precision-Arithmetik, Vergleichsoperationen und Formatumwandlungen zwischen Double-Precisions- und anderen Formaten.
  • Die DFMA-Einheit 320 handhabt vorteilhafterweise Eingaben und Ausgaben im Double-Precision-Gleitkommaformat und, für Umwandlungsoperationen, in anderen Gleitkomma- und Festkommaformaten. Operanden für unterschiedliche Operationen können in unterschiedlichen Formaten vorliegen. Vor dem Beschreiben einer Ausführungsform der DFMA-Einheit 320 werden repräsentative Formate definiert.
  • ”Fp32” meint im Sinne der vorliegenden Textes das Single-Precision-Gleitkommaformat des Standards IEEE 754, wobei eine normale Gleitkommazahl durch ein Vorzeichen-Bit, acht Exponenten-Bits und 23 Signifikanden-Bits dargestellt wird. Der Exponent wird aufwärts um 127 geblased, so dass Exponenten im Bereich von 2–126 bis 2127 unter Verwendung von Integerzahlen von 1 bis 254 dargestellt werden. Für ”normale” Zahlen werden die 23 Signifikanden-Bits als der Bruchteil einer 24-Bit-Mantisse mit einer impliziten 1 als dem Integerteil interpretiert. (Der Begriff ”Signifikand” wird im vorliegenden Text verwendet, wenn die führende 1 implizit ist, während ”Mantisse” verwendet wird, um zu bezeichnen, dass, sofern zutreffend, die führende 1 explizit gemacht wurde.)
  • ”Fp64” meint im Sinne des vorliegenden Textes das Double-Precision-Gleitkommaformat des Standards IEEE 754, wobei eine normale Gleitkommazahl durch ein Vorzeichen-Bit, 11 Exponenten-Bits und 52 Signifikanden-Bits dargestellt wird. Der Exponent wird aufwärts um 1023 geblased, so dass Exponenten im Bereich von 2–1022 bis 21023 unter Verwendung von Integerzahlen von 1 bis 2046 dargestellt werden. Für ”normale” Zahlen werden die 52 Signifikanden-Bits als der Bruchteil einer 53-Bit-Mantisse mit einer impliziten 1 als dem Integerteil interpretiert.
  • ”Fp16” meint im Sinne des vorliegenden Textes ein ”Half-Precision”-Gleitkommaformat, das üblicherweise für Grafik verwendet wird, wobei eine normale Gleitkommazahl durch ein Vorzeichen-Bit, 5 Exponenten-Bits und 10 Signifikanden-Bits dargestellt wird. Der Exponent wird aufwärts um 15 geblased, so dass Exponenten im Bereich von 2–14 bis 215 unter Verwendung von Integerzahlen von 1 bis 30 dargestellt werden. Für ”normale” Zahlen werden die 10 Signifikanden-Bits als der Bruchteil einer 11-Bit-Mantisse mit einer impliziten 1 als dem Integerteil interpretiert.
  • Im fp16-, fp32- und fp64-Format werden Zahlen, die durchweg Nullen in den Exponenten-Bits aufweisen, als denormalisierte Zahlen (oder ”Denorms”) bezeichnet und werden so interpretiert, dass sie keine implizite führende 1 in der Mantisse aufweisen. Solche Zahlen mögen zum Beispiel einen Unterlauf in einer Berechnung darstellen. Die (positive oder negative) Zahl mit durchweg Einsen in den Exponenten-Bits und Nullen in den Signifikanden-Bits werden als (positive oder negative) INF bezeichnet. Diese Zahl mag zum Beispiel einen Überlauf in einer Berechnung darstellen. Zahlen mit durchweg Einsen in den Exponenten-Bits und einer Zahl ungleich null in den Signifikanden-Bits werden als Keine-Zahl (Not a Number, NaN) bezeichnet und mögen zum Beispiel verwendet werden, um einen Wert darzustellen, der undefiniert ist. Null wird auch als eine spezifische Zahl betrachtet und wird dadurch dargestellt, dass alle Exponenten- und Signifikanden-Bits auf null gesetzt werden. Null kann jedes von beiden Vorzeichen haben. Somit sind positive und negative Nullen erlaubt.
  • Festkommaformate werden im vorliegenden Text durch ein vorangestelltes ”s” oder ”u”, das anzeigt, ob das Format ein Vorzeichen hat oder nicht, und eine Zahl, die die Gesamtzahl von Bits bezeichnet, spezifiziert (zum Beispiel 16, 32, 64). Das heißt, s32 meint ein 32-Bit-Format mit Vorzeichen, u64 ein 64-Bit-Format ohne Vorzeichen, und so weiter. Für die Formate mit Vorzeichen wird vorteilhafterweise eine Zweierkomplement-Darstellung verwendet. In allen Formaten, die im vorliegenden Text verwendet werden, befindet sich das höchstwertige Bit (most significant bit, MSB) auf der linken Seite des Bit-Feldes und das geringstwertige Bit (least significant bit, LSB) auf der rechten Seite.
  • Es versteht sich, dass diese Formate im vorliegenden Text nur zu Veranschaulichungszwecken definiert und besprochen werden und dass eine DFMA-Einheit jede beliebige Kombination dieser Formate oder anderer Formate unterstützen könnte, ohne dass der Geltungsbereich der vorliegenden Erfindung verlassen wird. Insbesondere versteht es sich, dass ”Single-Precision” und ”Double-Precision” sich auf jeweils zwei unterschiedliche Gleitkommaformate beziehen können, die nicht auf die derzeit definierten Standards beschränkt sind. Ein Double-Precision-Format (zum Beispiel fp64) meint jedes Format, das eine größere Anzahl von Bits als ein verwandtes Single-Precision-Format (zum Beispiel fp32) verwendet, um eine größere Bandbreite von Gleitkommazahlen darzustellen und/oder um Gleitkommawerte mit einem höheren Präzisionsgrad darzustellen. Gleichermaßen kann ”Half-Precision” allgemein ein Format meinen, das weniger Bits als ein zugeordnetes Single-Precision-Format verwendet, um eine kleinere Bandbreite von Gleitkommazahlen darzustellen und/oder um Gleitkommazahlen mit einem geringeren Präzisionsgrad darzustellen.
  • Es wird nun eine Ausführungsform der DFMA-Einheit 320 gemäß der vorliegenden Erfindung beschrieben. 4 ist eine Tabelle 400, die Double-Precision-Arithmetik, Vergleichsoperationen und Formatumwandlungsoperationen auflistet, die durch diese Ausführungsform der DFMA-Einheit 320 ausgeführt werden können.
  • Sektion 402 listet arithmetische Operationen auf. Addition (DADD) addiert zwei fp64-Eingaben A und C und gibt die fp64-Summe A + C zurück. Multiplikation (DMUL) multipliziert zwei fp64-Eingaben A und B und gibt das fp64-Produkt A·B zurück. Vverschmolzenes Multiplizieren und Addieren (DFMA) empfängt drei fp64-Eingaben A, B und C und berechnet A·B + C. Die Operation ist insofern ”verschmolzenen”, als das Produkt A·B nicht gerundet wird, bevor es zu C addiert wird. Das Verwenden des genauen Wertes A·B verbessert die Genauigkeit und erfüllt den künftigen Standard IEEE 754R für Gleitkommaarithmetik.
  • Sektion 404 listet Vergleichsoperationen auf. Eine Maximaloperation (DMAX) gibt den größeren der fp64-Operanden A und B zurück, und eine Minimaloperation (DMIN) gibt den kleineren der beiden zurück. Die Binärtestoperation (DSET) führt einen aus einer Anzahl von Binärbeziehungstests an Double-Precision-Operanden A und B aus und gibt einen Booleschen Wert zurück, der anzeigt, ob der Test bestanden wurde. In dieser Ausführungsform gehören zu den Binärbeziehungen, die getestet werden können, größer als (A > B), kleiner als (A < B), gleich (A = B) und ungeordnet (A ? B, was wahr ist, wenn entweder A oder B NaN ist), sowie Negationen (zum Beispiel A # B) und verschiedenen Kombinationstests (wie zum Beispiel A ≥ B, A <> B, A ?= B und so weiter).
  • Sektion 406 listet Formatumwandlungen und Rundungsoperationen auf. In dieser Ausführungsform kann die DFMA-Einheit 320 Zahlen im fp64-Format in Zahlen in anderen 64-Bit- oder 32-Bit-Formaten umwandeln und umgekehrt. Die D2F-Operation wandelt Operand A aus fp64 in fp32 um; F2D wandelt Operand A aus fp32 in fp64 um. Die D2I-Operation wandelt Operand A aus fp64 in irgendeines der Formate s64, u64, s32 und u32 um. Es versteht sich, dass eigenständige Operationscodes zum Identifizieren des Zielformats verwendet werden mögen. Die I2D-Operation wandelt den Integeroperanden C aus irgendeinem der Formate s64, u64, s32 und u32 in das fp64-Format um. Auch hier versteht es sich, dass eigenständige Operationscodes zum Identifizieren des Quellenformats verwendet werden mögen. In dieser Ausführungsform werden alle Umwandlungen in das oder aus dem Double-Precision-Format durch die DFMA-Einheit 320 unteqrstützt. Andere Funktionseinheiten mögen andere Formatumwandlungen durchführen (zum Beispiel zwischen fp32 und fp16, zwischen fp32 und Integerformaten usw.).
  • Die D2D-Operation wird verwendet, um Rundungsoperationen, wie zum Beispiel die IEEE-Rundungsmodi, auf einen fp64-Operanden anzuwenden. Diese Operationen runden den fp64-Operanden auf einen Integerwert, der im fp64-Format dargestellt wird. In einer Ausführungsform gehören zu den unterstützten D2D-Operationen Trunkation (Rundung in Richtung null), Aufrundung (Rundung in Richtung +INF), Abrundung (Rundung in Richtung –INF) und Nächstes (Auf- oder Abrundung bis zur nächsten Integerzahl).
  • In dieser Ausführungsform bietet die DFMA-Einheit 320 keine direkte Hardware-Unterstützung für fortgeschrittenere mathematische Funktionen, wie zum Beispiel Division, Rest oder Quadratwurzel. Jedoch kann die DFMA-Einheit 320 zum Beschleunigen der auf Software basierenden Implementierungen dieser Operationen verwendet werden. Zum Beispiel schätzt ein gängiger Divisionsansatz einen Quotienten q = a/b und verwendet dann t = q·b – a, um die Schätzung zu testen. Wenn t null ist, so wurde der Quotient q korrekt bestimmt. Wenn nicht, so wird die Größe von t verwendet, um den geschätzten Quotienten q zu modifizieren, und der Test wird wiederholt, bis t null wird. Das Testergebnis t für jede Iteration kann mittels einer einzelnen DFMA-Operation exakt berechnet werden (wobei A = q, B = b, C = –a). Gleichermaßen besteht für Quadratwurzeln eine gängige Vorgehensweise darin, r = a1/2 zu schätzen und dann t = r·r – a zu berechnen, um die Schätzung zu testen und r zu modifizieren, wenn t nicht null ist. Auch hier kann das Testergebnis t für jede Iteration mittels einer einzelnen DFMA-Operation exakt berechnet werden (wobei A = B = r, C = –a).
  • Sektionen II und III beschreiben eine DFMA-Einheit 320, die alle Operationen ausführen kann, die in 4 gezeigt sind. Sektion II beschreibt eine Schaltkreisstruktur für die DFMA-Einheit 320, und Sektion III beschreibt, wie diese Schaltkreisstruktur zum Ausführen der Operationen verwendet werden kann, die in 4 aufgelistet sind. Es versteht sich, dass die im vorliegenden Text beschriebene DFMA-Einheit 320 nur der Veranschaulichung dient und dass andere oder unterschiedliche Kombinationen von Funktionen unter Verwendung geeigneter Kombinationen von Schaltkreisblöcken unterstützt werden könnten.
  • II. Struktur der DFMA-Einheit
  • 5 ist ein vereinfachtes Blockschaubild einer DFMA-Einheit 320 gemäß einer Ausführungsform der vorliegenden Erfindung, die alle Operationen unterstützt, die in 4 gezeigt sind. In dieser Ausführungsform implementiert die DFMA-Einheit 320 eine mehrstufige Pipeline, die für alle Operationen verwendet wird. In jedem Prozessorzyklus kann die DFMA-Einheit 320 drei neue Operanden (A0, B0, C0) über Operandeneingabepfade 502, 504, 506 und einen Operationscode, der die Operation anzeigt, die über den Operationscodepfad 508 auszuführen ist, empfangen (zum Beispiel von der Zuteilungseinheit 304 von 3). In dieser Ausführungsform mag die Operation eine beliebige in 4 gezeigte Operation sein. Zusätzlich zu der Operation zeigt der Operationscode vorteilhafterweise das Eingabeformat für die Operanden und auch das Ausgabeformat an, das für das Ergebnis zu verwenden ist und das das gleiche sein mag oder nicht sein mag wie das Eingabeformat. Es ist zu beachten, dass einer in 4 gezeigten Operation mehrere Operationscodes zugeordnet sein mögen. Zum Beispiel mag es einen Operationscode für D2I mit einer s64-Ausgabe und einen anderen Operationscode für D2I mit einer s32-Ausgabe usw. geben.
  • Die DFMA-Einheit 320 verarbeitet jede Operation durch alle ihre Pipeline-Stufen und erzeugt einen Ergebniswert (OUT) von 64-Bit (oder 32-Bit bei bestimmten Formatumwandlungsoperationen) auf dem Signalpfad 510 und einen entsprechenden Zustandscode (COND) auf dem Signalpfad 512. Diese Signale mögen abhängig von der Architektur zum Beispiel zu der Registerdatei 324, wie in 3 gezeigt, zu der Zuteilungseinheit 304 oder zu anderen Elementen eines Prozessorkerns übermittelt werden. In einer Ausführungsform entspricht eine Pipeline-Stufe einem Prozessorzyklus. In anderen Ausführungsformen mag eine Stufe mehrere Prozessorzyklen aufweisen. Außerdem arbeiten verschiedene Pfade innerhalb der Pipeline vorteilhafterweise parallel.
  • Sektion II.A gibt einen Überblick über die DFMA-Pipeline, und Sektionen II.B–I beschreiben die Schaltkreisblöcke jeder Sektion im Detail.
  • A. DFMA-Pipeline
  • Ein erstes Verständnis der Pipeline kann man gewinnen, wenn man sich ansieht, wie die Schaltkreisblöcke während einen DFMA-Operation verwendet werden. Der Operandenvorbereitungsblock 514 führt eine Operandenformatierung (für Operanden, die nicht bereits im fp64-Format vorliegen) und eine Sonderzahldetektion aus. Der Operandenvorbereitungsblock 514 extrahiert auch die Mantissen (Am, Bm, Cm), die Exponenten (Ae, Be, Ce) und die Vorzeichen-Bit (As, Bs, Cs) aus eingegebenen fp64-Operanden. In einer Ausführungsform gibt es keine unerlaubten Operandenkombinationen. Alle Operanden, die in einer bestimmten Operation nicht verwendet werden, mögen einfach ignoriert werden.
  • Der Mantissenpfad 516 berechnet das Produkt der Mantissen Am und Bm. Parallel dazu verwendet der Exponentenpfad 518 die Exponenten Ae und Be zum Bestimmen der relativen Ausrichtung zwischen dem Produkt A·B und dem Operanden C und übermittelt eine ausgerichtete Mantisse für den Operanden C (C_align) an den Mantissenpfad 516. Der Mantissenpfad 516 addiert C_align zu dem Produkt Am·Bm und normalisiert dann das Ergebnis. Auf der Basis der Normalisierung übermittelt der Mantissenpfad 516 ein Ausrichtungssignal (ALIGN_NORM) zurück zu dem Exponentenpfad 518, der das Signal ALIGN_NORM zusammen mit den Exponenten Ae, Be und Ce zum Bestimmen eines Exponenten für das Endergebnis verwendet.
  • Der Vorzeichenpfad 520 empfängt die Vorzeichen-Bits As, Bs und Cs von dem Operandenvorbereitungsblock 514 und bestimmt das Vorzeichen des Ergebnisses. Der Mantissenpfad 516 detektiert Fälle, wo das Ergebnis null ist, und signalisiert das Null-Ergebnis (R_ZERO) an den Vorzeichenpfad 520.
  • Die Ausgabesektion 522 empfängt eine Ergebnismantisse Rm von dem Mantissenpfad 516, einen Ergebnisexponenten Re von dem Exponentenpfad 518 und ein Ergebnisvorzeichen Rs von dem Vorzeichenpfad 520. Die Ausgabesektion 522 empfängt außerdem Sonderzahlsignale (SPC) aus dem Operandenvorbereitungsblock 514. Auf der Basis dieser Informationen formatiert die Ausgabesektion 522 das Endergebnis (OUT) für die Übermittlung an den Ausgabepfad 510 und erzeugt einen Zustandscode (COND) auf dem Ausgabepfad 512. Der Zustandscode, der vorteilhafterweise weniger Bits als das Ergebnis enthält, transportiert allgemeine Informationen über die Art des Ergebnisses. Zum Beispiel mag der Zustandscode Bits enthalten, die anzeigen, ob das Ergebnis positiv, negativ, null, NaN, INF, Denorm und so weiter ist. Wie dem Fachmann bekannt ist, können – wenn ein Zustandscode mit einem Ergebnis versehen ist – anschließende Nutzer dieses Ergebnisses mitunter den Zustandscode anstelle des Ergebnisses selbst in ihrer Verarbeitung verwenden. In einigen Ausführungsformen mag der Zustandscode verwendet werden, um das Eintreten einer Ausnahme (exception) oder eines anderen Ereignisses während der Ausführung der Operation anzuzeigen. In anderen Ausführungsformen mag der Zustandscode gänzlich weggelassen werden.
  • Es versteht sich, dass – während Namen wie zum Beispiel ”Mantissenpfad” und ”Exponentenpfad” Funktionen nahelegen mögen, die während bestimmter Operationen (zum Beispiel DFMA) durch die verschiedenen Schaltkreisblöcke jedes Pfades ausgeführt werden – Schaltkreisblöcke entlang eines jeden der internen Datenpfade für eine Vielzahl verschiedener Verwendungen in einer operationsabhängigen Weise genutzt (leveraged) werden mögen. Beispiele sind unten beschrieben.
  • Zusätzlich zu den Datenpfaden bietet die DFMA-Einheit 320 auch einen Steuerpfad, der in 5 durch einen Steuerblock 530 dargestellt ist. Der Steuerblock 530 empfängt den Operationscode und erzeugt verschiedene operationscodeabhängige Steuersignale, die im vorliegenden Text allgemein als ”OPCTL” bezeichnet werden und die zu jedem Schaltkreisblock synchron mit der Datenübertragung durch die Pipeline übermittelt werden können. (Das Einkoppeln von OPCTL-Signalen in die verschiedenen Schaltkreisblöcke ist in 5 nicht gezeigt.) Wie unten beschrieben ist, können OPCTL-Signale verwendet werden, um die Funktion verschiedener Schaltkreisblöcke der DFMA-Einheit 3220 in Reaktion auf den Operationscode zu aktivieren, zu deaktivieren und auf sonstige Weise zu steuern, so dass unterschiedliche Operationen unter Verwendung derselben Pipeline-Elemente ausgeführt werden können. Die verschiedenen im vorliegenden Text angesprochenen OPCTL-Signale können den Operationscode selbst oder ein anderes Signal enthalten, das aus dem Operationscode abgeleitet wurde, zum Beispiel durch eine kombinatorische Logik, die in dem Steuerblock 530 implementiert ist. In einigen Ausführungsformen mag der Steuerblock 530 unter Verwendung mehrerer Schaltkreisblöcke in verschiedenen Pipeline-Stufen implementiert werden. Es versteht sich, dass die OPCTL-Signale, die während einer bestimmten Operation unterschiedlichen Blöcke bereitgestellt werden, dasselbe Signal oder unterschiedliche Signale sein mögen. Vor dem Hintergrund der vorliegenden Offenbarung ist der Durchschnittsfachmann in der Lage, geeignete OPCTL-Signale zu erzeugen.
  • Es ist anzumerken, dass die Schaltkreisblöcke für eine bestimmte Stufe unterschiedlich lange Verarbeitungszeiten erfordern mögen und dass die Zeit, die auf einer bestimmten Stufe benötigt wird, von einer Operation zur anderen variieren mag. Dementsprechend mag die DFMA-Einheit 320 auch verschiedene Zeitsteuerungs- und Synchronisationsschaltkreise (in 5 nicht gezeigt) enthalten, um die Übermittlung von Daten auf unterschiedlichen Pfaden von einer Pipeline-Stufe zur nächsten zu steuern. Es mögen beliebige zweckmäßige Zeitsteuerungsschaltungen verwendet werden (zum Beispiel Latches, Übertragungsgatter usw.).
  • A. Vorbereitung von Operanden
  • 6 ist ein Blockschaubild eines Operandenvorbereitungsblocks 514 gemäß einer Ausführungsform der vorliegenden Erfindung. Der Operandenvorbereitungsblock 514 empfängt die Eingabeoperanden A, B und C und übermittelt die Mantissenabschnitte (Am, Bm, Cm) an den Mantissenpfad 516, die Exponentenabschnitte (Ae, Be, Ce) an den Exponentenpfad 518 und die Vorzeichen-Bits (As, Bs, Cs) an den Vorzeichenpfad 520.
  • Die Operanden A, B und C werden an jeweiligen NaN-Detektionsblöcken 612, 614, 616 und jeweiligen Absolutwert-/Negationsblöcken 618, 620, 622 empfangen. Jeder NaN-Detektionsblock 612, 614, 616 bestimmt, ob der empfangene Operand NaN ist (alles Einsen in den Exponenten-Bits und eine Zahl ungleich null in den Signifikanden-Bits), und erzeugt ein entsprechendes Steuersignal.
  • Die Absolutwert-/Negationsblöcke 618, 620, 622 sind verwendbar, um das Vorzeichen-Bit der Operanden in Reaktion auf OPCTL-Signale (nicht explizit gezeigt) umzukehren. Zum Beispiel mag irgendeine der in 4 aufgelisteten Operationen spezifizieren, dass das Negativ eines Operanden oder absoluten Wertes eines Operanden zu verwenden ist. Die Blöcke 618, 620, 622 können das Vorzeichen-Bit invertieren, um einen Operanden zu negieren oder das Vorzeichen-Bit in den nicht-negativen Zustand zu zwingen (null für IEEE 754-Formate). Wenn ein Eingabeoperand NaN ist, so deaktiviert der entsprechende Absolutwert-/Negationsblock 618, 620, 622 auch die NaN (zum Beispiel durch Setzen des führenden Bits des Signifikanden auf 1), wobei das Vorzeichen-Bit beibehalten wird. Die Absolutwert-/Negationsblöcke 618, 620, 622 stellen ihre jeweiligen Ausgaben den Operandenauswahlmultiplexer 632, 634, 636 bereit.
  • Für eine Double-Precision-Arithmetik können die Operanden A, B und C, die durch die Absolutwert-/Negationsblöcke 618 erzeugt werden, direkt verwendet werden. Für Vergleichsoperationen vergleicht ein A/B-Vergleichsschaltkreis 624 Operanden A und B. In einer Ausführungsform negiert der Absolutwert-/Negationsschaltkreis 620 den Operanden B, und der A/B-Vergleichsschaltkreis 624 berechnet die Summe aus A und –B, als wenn sie Festkommazahlen wären. Wenn das Ergebnis positiv ist, dann ist A größer als B; wenn das Ergebnis negativ ist, so ist A kleiner als B; wenn das Ergebnis null ist, so ist A gleich B. Der A/B-Vergleichsschaltkreis 624 mag auch NaN-Informationen aus den NaN-Detektionsschaltkreisen 612 und 614 empfangen (diese Pfade sind in 6 nicht explizit gezeigt). Wenn entweder A oder B (oder beide) NaN sind, dann sind A und B ”ungeordnet”. Die Ergebnisinformationen werden in die Steuerlogik 630 eingespeist. Die Steuerlogik 630 stellt die Ergebnisinformationen als ein Signal R_TEST an die Ausgabesektion 522 bereit und stellt außerdem den Operandenauswahlmultiplexer 632, 634, 636 Steuersignale bereit.
  • Für Formatumwandlungsoperanden mag es sein, dass die Eingabe nicht im fp64-Format ist. Während F2D-Operationen ist ein fp32-Extraktionsschaltkreis 626 aktiv. Der fp32-Extraktionsschaltkreis 626 empfängt den Operanden A und führt alle Tests für nicht-normale fp32-Eingaben durch. Der fp32-Extraktionsschaltkreis 626 weitet auch das Signifikandenfeld des empfangenen Operanden von 23 Bits auf 52 Bits aus (zum Beispiel durch Hinzufügen angehängter Nullen). Der fp32-Extraktionsschaltkreis 626 weitet den 8-Bit-fp32-Exponenten auf 11 Bits aus und erhöht den Exponenten-Bias von 127 auf 1023 (zum Beispiel durch Addieren von 896 zu dem fp32-Exponenten).
  • Während I2D-Operationen ist ein Ohne-Vorzeichen/Mit-Vorzeichen (U/S)-Extraktionsschaltkreis 628 aktiv. Der U/S-Extraktionsschaltkreis 628 empfängt einen Festkommaoperanden C in irgendeinem der Formate u32, s32, u64 oder s64 und bereitet ihn für die Umwandlung in fp64 vor. Der U/S-Extraktionsschaltkreis 628 wandelt den Festkommaoperanden aus einer Einserkomplementform (oder einer Zweierkomplementform) in eine Vorzeichen-Größenordnungsform (sign-magnitude form) um und setzt Nullen davor oder dahinter, um den Operanden in dem Signifikandenfeld auszurichten. Der U/S-Extraktionsschaltkreis 628 stellt seine Ausgabe dem Operandenauswahlmultiplexer 636 und auch dem Exponentenpfad 518 als ein I2D-Eingabesignal bereit.
  • Die Operandenauswahlmultiplexer 632, 634, 636 reagieren auf Signale aus der Steuerlogik 630, Operanden A, B und C auszuwählen. Der Operandenauswahlmultiplexer 632 wählt zwischen Operand A aus dem Absolutwert-/Negationsschaltkreis 618 und den Konstantwerten 0,0 und 1,0 (im fp64-Format ausgedrückt). Für DMUL- und DFMA-Operationen wird der Operand A ausgewählt. Für DMIN(DMAX)-Operationen wird der Operand A ausgewählt, wenn A < B (A > B); anderenfalls wird 1,0 ausgewählt. Für DADD- und I2D-Operationen wird 0,0 ausgewählt.
  • Der Operandenauswahlmultiplexer 634 wählt zwischen dem Operanden B aus dem Absolutwert-/Negationsschaltkreis 620 und den Konstantwerten 0,0 und 1,0 (ausgedrückt im fp64-Format). Für DMUL- und DFMA-Operationen wird der Operand B ausgewählt. Für DMIN(DMAX)-Operationen wird der Operand B ausgewählt, wenn B < A(B > A); anderenfalls wird 1,0 ausgewählt. Für DADD- und I2D-Operationen wird 0,0 ausgewählt.
  • Der Operandenauswahlmultiplexer 636 wählt zwischen dem Operanden C aus dem Absolutwert-/Negationsschaltkreis 622, einem extrahierten fp32-Wert aus dem fp32-Extraktionsschaltkreis 626, einem extrahierten Integerwert ohne Vorzeichen oder mit Vorzeichen aus dem U/S-Extraktionsschaltkreis 628 und einem Konstantwert 0,0 (im fp64-Format ausgedrückt). Für DADD- und DFMA-Operationen wird der Operand C ausgewählt. Für DMUL- und Vergleichsoperationen wird die Konstante 0,0 ausgewählt. Für F2D-Operationen wird der extrahierte fp32-Wert aus dem fp32-Extraktionsschaltkreis 626 ausgewählt, und für I2D-Operationen wird der extrahierte u/s-Wert aus dem U/S-Extraktionsschaltkreis 628 ausgewählt.
  • Die durch die Auswahlmultiplexer 632, 634, 636 ausgewählten Operanden A, B und C werden in die Sonderzahldetektionsschaltkreise 638, 640, 642 eingespeist. Für fp64-Operanden detektieren die Sonderzahldetektionsschaltkreise 638, 640, 642 alle Sonderzahlzustände, einschließlich Denorms, NaN, INF und null. Für F2D-Operationen empfängt der Sonderzahldetektionsschaltkreis 642 die fp32-Sonderzahl-Informationen aus dem fp32-Extraktionsschaltkreis 626 über einen Pfad 644. Jeder Sonderzahldetektionsschaltkreis 638, 640, 642 erzeugt ein Sonderzahlsignal (SPC), das anzeigt, ob der Operand eine Sonderzahl ist, und wenn ja, welchen Typs. Sonderzahlsignale SPC werden in die Ausgabesektion 522 im Signalpfad 524 eingespeist, wie in 5 gezeigt. Es mag eine Sonderzahldetektionslogik von allgemein herkömmlicher Bauart verwendet werden. In einer alternativen Ausführungsform wird die NaN-Detektion (die durch die Schaltkreise 612, 614 und 616 ausgeführt wird) nicht in den Schaltkreisen 638, 640, 642 wiederholt; vielmehr empfängt jeder Sonderzahldetektionsschaltkreis 638, 640, 642 ein NaN-Signal aus dem entsprechenden einen der NaN-Detektionsschaltkreise 612, 614 und 616 und verwendet dieses Signal zum Bestimmen, ob der Operanden NaN ist.
  • Unabhängig davon, ob irgendwelche Sonderzahlen detektiert werden, trennen die Sonderzahldetektionsschaltkreise 638, 640 und 642 die Operanden in Mantisse-, Exponenten- und Vorzeichen-Bits. Der Sonderzahldetektionsschaltkreis 638 stellt den Mantissenabschnitt des Operanden A (Am) dem Mantissenpfad 516 (5), den Exponentenabschnitt des Operanden A (Ae) dem Exponentenpfad 518 und das Vorzeichen-Bit (As) dem Vorzeichenpfad 520 bereit. Der Sonderzahldetektionsschaltkreis 640 stellt den Mantissenabschnitt des Operanden B (Bm) dem Mantissenpfad 516, den Exponentenabschnitt des Operanden B (Be) dem Exponentenpfad 518 und das Vorzeichen-Bit (Bs) dem Vorzeichenpfad 520 bereit. Der Sonderzahldetektionsschaltkreis 642 stellt den Mantissenabschnitt (Cm) und den Exponentenabschnitt (Ce) des Operanden C dem Exponentenpfad 518 und das Vorzeichen-Bit (Cs) dem Vorzeichenpfad 520 bereit. In einigen Ausführungsformen hängen die Sonderzahldetektionsschaltkreise 638, 640, 642 führende Einsen an die Mantissen Am, Bm, Cm an (außer wenn die Zahl eine Denorm ist).
  • B. Exponentenpfad
  • 7 ist ein Blockschaubild des Exponentenpfades 518 gemäß einer Ausführungsform der vorliegenden Erfindung.
  • Ein Exponentenberechnungsschaltkreis 702 empfängt Exponenten-Bits Ae, Be und Ce vom Operandenvorbereitungsblock 514 (5) und berechnet einen Blockexponenten für das DFMA-Ergebnis A·B + C. Es mögen herkömmliche Exponentenberechnungsschaltkreise verwendet werden. In einer Ausführungsform addiert, wenn alle Operanden normale Zahlen sind, der Exponentenberechnungsschaltkreis Ae und Be und subtrahiert den fp64-Exponenten-Bias (1023), um einen Exponenten für das Produkt A·B zu bestimmen, und wählt dann den größeren des Produktexponenten und des Exponenten Ce als den Blockexponenten (BLE) für das DFMA-Ergebnis. Dieser Blockexponent BLE wird einem nachgeschalteten Endexponentenberechnungsschaltkreis 704 bereitgestellt. Wenn ein oder mehrere Operanden nicht-normal sind (wie durch die Sonderzahlsignale SPC angezeigt), so mag eine geeignete Logik werden verwendet, um den Blockexponenten BLE zu bestimmen. In anderen Ausführungsformen wird die Exponentenbestimmung für Operationen, an denen Sonderzahlen beteiligt sind, in der Ausgabesektion 522 gehandhabt, wie unten beschrieben ist.
  • Außerdem bestimmt der Exponentenberechnungsblock 702 einen Betrag, um den die Mantisse des Operanden C effektiv nach links oder rechts zu verschieben ist, um Cm auf das Produkt Am·Bm auszurichten. Dieser Betrag wird einem Verschiebungsschaltkreis (shift circuit) 706 als ein Steuersignal Sh_C bereitgestellt. Dieses Steuersignal berücksichtigt vorteilhafterweise ein zusätzliches Auffüllen von Cm, so dass immer eine effektive Links- oder Rechtsverschiebung durch ein Rechtsverschieben von Cm erreicht werden kann.
  • Die Mantisse Cm wird einem Negationsschaltkreis 708 bereitgestellt, der Cm bedingt negiert (zum Beispiel unter Verwendung einer inserkomplementnegation), wenn sich ein relatives Minus-Vorzeichen zwischen C und dem Produkt A·B befindet. Das relative Minus-Vorzeichen wird im Vorzeichenpfad 520 detektiert, wie unten beschrieben ist, und das Vorzeichensteuersignal SignCTL zeigt an, ob ein relatives Minus-Vorzeichen vorhanden ist. Die Ausgabe aus dem Negationsschaltkreis 708 (entweder Cm oder ~Cm) wird dem Verschiebungsschaltkreis 706 bereitgestellt.
  • In einer Ausführungsform ist der Verschiebungsschaltkreis 706 ein 217-Bit-Barrelshifter, der die 54-Bit-Mantisse Cm um bis zu 157 Bit nach rechts verschieben kann. Das Signal Sh_C bestimmt den Betrag, um den Cm nach rechts verschoben wird. Die Mantisse Cm tritt vorteilhafterweise in den Shifter mit einer Ausrichtung ein, die es ermöglicht, Cm so weit wie nötig nach rechts zu verschieben. Die 217-Bit-Größe wird gewählt, um genug Raum zu gewähren, damit die 53-Bit-Mantisse Cm (zuzüglich eines Schutzbits (guard bit) und eines Rundungsbits (round bit)) vollständig links oder vollständig rechts des 106-Bit-Produkts A·B (zuzüglich eines Schutzbits und eines Rundungsbits für das Produkt) ausgerichtet werden kann, das 55 Bits rechts des MSB des 217-Bit-Feldes ausgerichtet wird. Alle Bits, die nach rechts aus dem Barrelshifter heraus verschoben werden, können verworfen werden. In anderen Ausführungsformen wird ein Markierungsbit (flag bit) verwendet, um zu verfolgen, ob alle Bits, die nach rechts aus dem Barrelshifter heraus verschoben werden, ”1” sind, und diese Information kann in Rundungsoperationen verwendet werden, die unten beschrieben sind.
  • In einer alternativen Ausführungsform können herkömmliche Swap-Multiplexer verwendet werden, um den größeren Operanden zwischen dem Produkt Am·Bm und Cm auszuwählen und dann den kleineren Operanden nach rechts zu verschieben.
  • Für D2D-Operationen wird die Mantisse Cm auch einem D2D-Logikschaltkreis 710 bereitgestellt. Der D2D-Logikschaltkreis 710 empfängt die Mantisse Cm, den Exponenten Ce und das Vorzeichen Cs und wendet Regeln für die Rundung von Integerzahlen an. In einer Ausführungsform bestimmt der D2D-Logikschaltkreis 710 den Ort des Binärpunktes auf der Basis des Exponenten Ce und wendet dann die ausgewählte Rundungsregel auf der Basis eines OPCTL-Signals (nicht explizit gezeigt) an. Es mag eine herkömmliche Logik zum Implementieren von Rundungsmodi verwendet werden, und jede Kombination von Rundungsmodi – einschließlich aber nicht beschränkt auf die Modi ”Trunkation”, ”Aufrundung”, ”Abrundung” und ”Nächstes” – mag unterstützt werden.
  • Der Auswahlmultiplexer 712 empfängt die verschobene Mantisse C_Shift, die Ausgabe aus dem D2D-Logikschaltkreis und die I2D-Eingabe aus dem U/S-Extraktionsschaltkreis 628 (6) und wählt eine dieser Eingaben, auf der Basis eines OPCTL-Signals, als eine ausgerichtete Mantisse C_align zum Einspeisen in den Mantissenpfad 516. Für Double-Precision-Arithmetik und Vergleichsoperationen wird der Operand C_Shift ausgewählt. Für Formatumwandlungen D2D oder I2D wird die entsprechende alternative Eingabe ausgewählt.
  • Die Unterlauflogik 713 ist dafür konfiguriert, mögliche Unterlaufsituationen in fp64- und fp32-Ergebnissen zu detektieren. Für andere Operationen als D2F-Operationen bestimmt die Unterlauflogik 713, ob der 11-Bit-fp64-Blockexponent BLE null oder nahe genug an null ist, dass ein denormalisiertes Ergebnis möglich ist. Auf der Basis des Blockexponenten bestimmt die Unterlauflogik 713 eine maximale Anzahl von Bits, um die die Mantisse nach links verschoben werden kann, bevor der Exponent null erreicht. Diese Zahl wird als ein 8-Bit-Unterlaufsignal U_fp64 dem Mantissenpfad 516 bereitgestellt (siehe 8). Für D2F-Operationen wird der Exponent als ein 8-Bit-fp32-Exponent behandelt, und die Unterlauflogik 713 bestimmt die maximal zulässige Linksverschiebung. Diese Zahl wird als ein 8-Bit-Unterlaufsignal U_fp32 dem Mantissenpfad 516 bereitgestellt.
  • Der Exponentenpfad 518 enthält auch einen Endexponentenberechnungslogikschaltkreis 704. Der Blockexponent BLE wird einem Subtraktionsschaltkreis 720 bereitgestellt. Außerdem wird dem Subtraktionsschaltkreis 720 ein Blockverschiebungs(BL_Sh)-Signal von dem Mantissenpfad 516 bereitgestellt. Wie unten beschrieben ist, spiegelt das Signal BL_Sh den Effekt der Stornierung von MSBs wider, wenn das Produkt Am·Bm zu dem Operanden C_align addiert wird. Der Subtraktionsschaltkreis 720 subtrahiert BL_Sh von BLE, um eine Differenz EDIF zu bestimmen. Der Unterlauf-/Überlaufschaltkreis 722 detektiert einen Unterlauf oder Überlauf in dem Subtraktionsergebnis EDIF. Der Plus-1-Schaltkreis 724 addiert 1 zu dem Ergebnis EDIF, und auf der Basis des Unterlauf-/Überlaufzustandes wählt der Multiplexer 720 zwischen dem EDIF- und dem EDIF+1-Signal als dem Ergebnisexponenten Re. Das Ergebnis Re und das Unterlauf-/Überlaufsignal (U/O) werden der Ausgabesektion 522 bereitgestellt.
  • C. Mantissenpfad
  • 8 ist ein Blockschaubild des Mantissenpfades 516 gemäß einer Ausführungsform der vorliegenden Erfindung. Der Mantissenpfad 516 führt Produkt- und Summenoperationen an Mantissen der Operanden A, B und C aus.
  • Ein 53×53-Multiplizierer 802 empfängt Mantissen Am und Bm aus dem Operandenvorbereitungsblock 514 (oben beschrieben) und berechnet ein 106-Bit-Produkt Am·Bm. Das Produkt wird einem 168-Bit-Addierer 804 bereitgestellt, der auch die ausgerichtete (aligned) Mantisse C_align empfängt. Die angehängten Bits des 217-Bit-Feldes, das durch den Barrelshifter 706 verwendet wird, können verworfen werden, oder Markierungsbits, die anzeigen, ob die angehängten Bits ungleich null waren oder durchweg Einsen waren, können beibehalten werden. Der Addierer 804 erzeugt Summenausgaben und ~Summenausgaben (Zweierkomplement der Summe). Der Multiplexer 806 wählt zwischen Summe und ~Summe auf der Basis des MSB (Vorzeichen-Bits) der Summe. Die ausgewählte Summe (S) wird einem Nulldetektionsschaltkreis 814 und einem Linksverschiebungsschaltkreis 816 bereitgestellt. Der Nulldetektionsschaltkreis 814 bestimmt, ob die ausgewählte Summe S null ist, und stellt ein entsprechendes R_ZERO-Signal dem Vorzeichenpfad 520 bereit.
  • Der Mantissenpfad 516 normalisiert auch die Summe S. Es wird unter Verwendung der LZD-Schaltkreise 808, 810 eine Führungsnulldetektion (LZD) sowohl an Summe als auch an ~Summe parallel ausgeführt. Jeder LZD-Schaltkreis 808, 810 erzeugt ein LZD-Signal (Z1, Z2), das die Zahl der führenden Nullen in seiner Eingabe anzeigt. Ein LZD-Multiplexer 812 wählt das relevante LZD-Signal (Z1 oder Z2) auf der Basis des MSB (Vorzeichen-Bits) der Summe aus. Z2 wird ausgewählt, wenn durch den Multiplexer 806 ”Summe” ausgewählt wird, und Z1 wird ausgewählt, wenn durch den Multiplexer 806 ”~Summe” ausgewählt wird. Das ausgewählte LZD-Signal wird als Blockverschiebungssignal BL_Sh dem Exponentenpfad 518 bereitgestellt, wo es dafür verwendet wird, den Ergebnisexponenten zu justieren, wie oben beschrieben.
  • Eine Normalisierungslogik 818 wählt einen Linksverschiebungsbetrag Lshift aus, der eine Normalisierungsverschiebung für die Summe S bestimmt. Für Normal-Zahl Ergebnisse ist der Linksverschiebungsbetrag vorteilhafterweise groß genug, um die führende 1 aus dem Mantissenfeld herauszuschieben, so dass ein 52-Bit-Signifikand (zuzüglich Schutz- und Rundungsbit) übrig bleibt. Jedoch ist das Ergebnis in einigen Fällen ein Unterlauf, der als ein fp64- oder fp32-Denorm ausgedrückt werden sollte. In einer Ausführungsform wählt die Normalisierungslogik 818 – für andere Operationen als D2F – die Ausgabe BL_Sh aus dem LZD-Multiplexer 812, wenn nicht BL_Sh größer als das Unterlaufsignal U_fp64 ist, in welchem Falle die Normalisierungslogik 818 U_fp64 als den Linksverschiebungsbetrag wählt. Für D2F-Operationen verwendet die Normalisierungslogik 818 das fp32-Unterlaufsignal U_fp32, um den Linksverschiebungsbetrag Lshift zu begrenzen.
  • Der Linksverschiebungsschaltkreis 816 verschiebt die Summe S um den Betrag Lshift nach links. Das Ergebnis Sn wird der Rundungslogik 820, einem Plus-1-Addierer 822 und einem Mantissenauswahlmultiplexer 824 bereitgestellt. Die Rundungslogik 820 implementiert vorteilhafterweise die vier Rundungsmodi (Nächstes, Abrundung, Aufrundung und Trunkation), die für eine Arithmetik nach IEEE-Standard definiert sind, wobei unterschiedliche Modi möglicherweise unterschiedliche Ergebnisse auswählen. Das OPCTL-Signal oder ein anderes Steuersignal (nicht gezeigt) mögen verwendet werden, um einen der Rundungsmodi zu spezifizieren. Auf der Basis des Rundungsmodus und der normalisierten Summe Sn bestimmt die Rundungslogik 820, ob das Ergebnis Sn oder Sn + 1, das durch den Plus-1-Addierer 822 berechnet wurde, auszuwählen ist. Der Auswahlmultiplexer 824 reagiert auf ein Steuersignal aus der Rundungslogik 820 mit der Auswahl des geeigneten Ergebnisses (Sn oder Sn + 1).
  • Das durch den Multiplexer 824 ausgewählte Ergebnis wird an einen Formatierungsblock 826 weitergeleitet. Für Operationen, die eine Gleitkommaausgabe haben, stellt der Block 826 die Mantisse Rm der Ausgabesektion 522 bereit. Die Summe S ist vorteilhafterweise mindestens 64 Bits breit (um Integeroperationen zu unterstützen), und die außerhalb liegenden Bits mögen ebenfalls durch den Formatierungsblock 826 entfernt werden. Für D2I-Operationen (die Integerausgaben haben), trennt der Formatierungsblock 826 das Ergebnis in ein 52-Bit-int_L-Feld, das die LSBs enthält, und ein 11-Bit-int_M-Feld, das die MSBs enthält. Rm, intL und int_M werden der Ausgabesektion 522 übergeben.
  • D. Vorzeichenpfad
  • 9 ist ein Blockschaubild des Vorzeichenpfades 520 gemäß einer Ausführungsform der vorliegenden Erfindung. Der Vorzeichenpfad 520 empfängt die Vorzeichen der Operanden As, Bs und Cs aus dem Operandenvorbereitungsblock 514 (5). Der Vorzeichenpfad 520 empfängt auch das Nullergebnissignal R_Zero von dem Mantissenpfad 516 und ein OPCTL-Signal, das den Typ der laufenden Operation anzeigt, sowie die Sonderzahlsignale SPC aus dem Operandenvorbereitungsblock 514. Auf der Basis dieser Informationen bestimmt der Vorzeichenpfad 520 das Vorzeichen des Ergebnisses und erzeugt ein Vorzeichen-Bit Rs.
  • Genauer gesagt, enthält der Vorzeichenpfad 520 einen Produkt/Summe-Schaltkreis 902 und einen Endvorzeichen-Schaltkreis 904. Der Produkt/Summe-Schaltkreis 902 empfängt die Vorzeichen-Bits As, Bs und Cs der Operanden A, B und C aus dem Operandenvorbereitungsblock 514. Der Produkt/Summe-Schaltkreis 902 bestimmt das Vorzeichen (Sp) des Produkts A·B unter Verwendung der Vorzeichen-Bits As und Bs und herkömmlicher Vorzeichenlogikregeln und vergleicht dann das Vorzeichen des Produkts mit dem Vorzeichen-Bit Cs, um zu bestimmen, ob das Produkt und der Operand C das gleiche Vorzeichen oder entgegengesetzte Vorzeichen haben. Auf der Basis dieser Bestimmung aktiviert (assert) oder deaktiviert (deassert) der Produkt/Summe-Schaltkreis 904 das Signal SignCTL, das an den Endvorzeichen-Schaltkreis 904 und an den Negationsblock 708 im Exponentenpfad 518 (7) übergeben wird. Wenn des Weiteren das Produkt und der Operand C das gleiche Vorzeichen haben, so hat das Endergebnis ebenfalls dieses Vorzeichen. Wenn das Produkt und der Operand C entgegengesetzte Vorzeichen haben, dann hängt das Ergebnis davon ab, was von beiden größer ist.
  • Der Endvorzeichen-Schaltkreis 904 empfängt alle Informationen, die zum Bestimmen des Endvorzeichens benötigt werden. Genauer gesagt, empfängt der Endvorzeichen-Schaltkreis 904 Vorzeicheninformationen, einschließlich des Vorzeichens Sp des Produkts und des Signals SignCTL aus dem Produkt/Summe-Schaltkreis 902, sowie die Vorzeichen-Bits As, Bs und Cs. Der Endvorzeichen-Schaltkreis 904 empfängt außerdem das Nulldetektionssignal R_ZERO von dem Mantissenpfad 516 und das Sonderzahlsignal SPC aus dem Operandenvorbereitungsblock 514. Der Endvorzeichen-Schaltkreis 904 empfängt außerdem das MSB der Summe von dem Addierer 804 auf dem Mantissenpfad 516, das anzeigt, ob die Summe positiv oder negativ war.
  • Auf der Basis dieser Informationen kann der Endvorzeichen-Schaltkreis 904 herkömmliche Vorzeichenlogik benutzen, um ein Vorzeichen-Bit Rs für das Ergebnis zu bestimmen. Wenn zum Beispiel – bei DFMA-Operationen – die Vorzeichen-Bits Sp und Cs gleich sind, so hat das Ergebnis ebenfalls dieses Vorzeichen. Wenn Sp und Cs entgegengesetzte Vorzeichen sind, dann berechnet der Addierer 804 im Mantissenpfad 516 (Am·Bm)-C_align. Wenn Am·Bm größer als C_align ist, dann berechnet der Addierer 804 eine positive Ergebnis-Summe, und es ist das Produktvorzeichen Sp zu wählen; wenn Am·Bm kleiner als C_align ist, dann berechnet der Addierer 804 eine negative Ergebnis-Summe, und es ist das Vorzeichen Cs zu wählen. Das MSB der Summen-Ausgabe aus dem Addierer 804 zeigt das Vorzeichen des Ergebnisses an und kann zum Treiben (drive) der Auswahl verwendet werden. Wenn die Ergebnis-Summe null ist, so wird das Signal R_ZERO aktiviert, und der Endvorzeichen-Schaltkreis 904 mag nach Bedarf das eine oder das andere Vorzeichen wählen (null kann im fp64-Format entweder positiv oder negativ sein). Für andere Operationen mag der Endvorzeichen-Schaltkreis 904 das Vorzeichen des einen oder des anderen Operanden als das Endvorzeichen durchlassen.
  • E. Ausgabesektion
  • 10 ist ein Blockschaubild der Ausgabesektion 522 für die DFMA-Einheit 320 gemäß einer Ausführungsform der vorliegenden Erfindung.
  • Die Ausgabemultiplexersteuerlogik 1002 empfängt das Unterlauf-/Überlauf(U/O)-Signal von dem Exponentenpfad 518 (7), das R_Test- und das SPC-Signal aus dem Operandenvorbereitungsblock 514 (6) und ein OPCTL-Signal, das den Typ der laufenden Operation anzeigt. Auf der Basis dieser Informationen erzeugt die Ausgabemultiplexersteuerlogik 1002 Auswahlsteuersignale für einen Signifikandenauswahlmultiplexer 1004 und einen Exponentenauswahlmultiplexer 1006. Die Ausgabemultiplexersteuerlogik 1002 erzeugt außerdem Zustandscodesignale COND, die zum Beispiel Überlauf oder Unterlauf, NaN oder andere Zustände anzeigen mögen. In einigen Ausführungsformen wird der Zustandscode auch verwendet, um das Boolesches Ergebnis während DSET-Operationen zu signalisieren.
  • Der Signifikandenauswahlmultiplexer 1004 empfängt den Ergebnissignifikanden Rm von dem Mantissenpfad 516 und bis zu 52 Bits einer Integerausgabe (die während D2I-Operationen verwendet werden) sowie eine Anzahl von Sonderwerten. Zu den Sonderwerten gehören in einer Ausführungsform: ein 52-Bit-Feld aus Einsen (das verwendet wird, um die maximale 64 Bit große Integerzahl für D2I-Operationen auszudrücken); ein 52-Bit-Feld aus Nullen (das verwendet wird, wenn 0,0 oder 1,0 das Ergebnis ist); ein 52-Bit-Feld 0×0_0000_8000_0000 (das verwendet wird, um die kleinste 32 Bit große Integerzahl für D2I-Operationen auszudrücken); ein 52-Bit-Feld mit führender 1 (das verwendet wird, um eine intern erzeugte ruhende NaN darzustellen); ein max_int32-Wert, zum Beispiel 0×7fff_ffff_ffff_ffff (der verwendet wird, um die maximale 32 Bit große Integerzahl für D2I-Operationen auszudrücken); ein ruhender (quieted) NaN-Wert (der verwendet wird, um einen Eingabeoperanden, der NaN ist, aus dem Operandenvorbereitungsblock 514 durchzulassen); und ein min_denorm-Wert, zum Beispiel 1 in der letzten Bit-Position (der für Unterlaufsituationen verwendet wird). Je nach der Operation und danach, ob einer der Operanden oder das Ergebnis eine Sonderzahl ist, mag irgendeine der Eingaben ausgewählt werden.
  • Der Exponentenauswahlmultiplexer 1006 empfängt den Ergebnisexponenten Re von dem Exponentenpfad 518 und bis zu 11 Integerbits (die MSBs für Ausgaben im Integerformat) sowie eine Anzahl von Sonderwerten. Zu den Sonderwerten gehören in einer Ausführungsform: 0×3ff (der Exponent für 1,0 in fp64); 0×000 (der Exponent für Denorms und 0,0), 0×7fe (der maximale fp64-Exponent für normale Zahlen) und 0×7ff (für fp64-NaN- oder INF-Ergebnisse). Je nach der Operation und danach ob irgendwelche Operanden oder das Ergebnis eine Sonderzahl sind, mag irgendeine der Eingaben ausgewählt werden.
  • Der Verkettungsblock (concatenation block) 1008 empfängt das Vorzeichen-Bit Rs, die Signifikanden-Bits, die durch den Multiplexer 1004 ausgewählt wurden, und die Exponenten-Bits, die durch den Multiplexer 1006 ausgewählt wurden. Der Verkettungsblock 1008 formatiert das Ergebnis (zum Beispiel in der Reihenfolge Vorzeichen, Exponent, Signifikand gemäß dem IEEE 754-Standard) und gibt das 64-Bit-Ausgabesignal OUT aus.
  • F. Operandenumgehungs- oder -durchgangspfade
  • Die DFMA-Einheit 320 stellt in einigen Ausführungsformen Umgehungs- oder Durchgangspfade bereit, die es Operanden ermöglichen, verschiedene Schaltkreisblöcke unmodifiziert zu passieren. Zum Beispiel multipliziert während einigen Operationen der Multiplizierer 802 eine Eingabe (zum Beispiel Am) mit 1,0, wodurch die Eingabe Am praktisch durchgeleitet wird. Anstatt Am mit 1,0 zu multiplizieren, könnte ein Umgehungspfad für die Eingabe Am um den Multiplizierer 802 herum bereitgestellt werden. Der Umgehungspfad verbraucht vorteilhafterweise die gleiche Anzahl von Taktzyklen wie der Multiplizierer 802, so dass Am zur richtigen Zeit am Eingang des Addierers 804 eintrifft. Der Multiplizierer 802 kann aber in einen inaktiven oder leistungsgeminderten Zustand versetzt werden, wenn er umgangen wird, wodurch ein verringerter Stromverbrauch mit einer geringfügigen Vergrößerung der Schaltkreisfläche erkauft wird. Gleichermaßen wird während einigen Operationen der Addierer 804 verwendet, um null zu einer Eingabe (zum Beispiel C_align) zu addieren, wodurch die Eingabe C_align praktisch durchgeleitet wird. Anstatt null zu C_align zu addieren, könnte ein Umgehungspfad für die Eingabe C_align um den Addierer 804 herum bereitgestellt werden, insbesondere für Operationen, wo vorher bekannt ist, welche der Summe- und ~Summe-Ausgaben des Addierers 804 durch den Multiplexer 806 ausgewählt werden soll. Die Eingabe C_align kann auf dem Umgehungsweg auf den richtigen der Summe- und ~Summe-Pfade geleitet werden. Auch hier verbraucht der Umgehungspfad vorteilhafterweise die gleiche Anzahl von Taktzyklen wie der Addierer 804, so dass der zeitliche Ablauf unbeeinflusst bleibt; aber der Stromverbrauch kann verringert werden, weil der Addierer 804 für Operationen, die ihn umgehen, in einen inaktiven oder leistungsgeminderten Zustand versetzt werden kann.
  • Somit mögen sich die Funktionsbeschreibungen in Sektion III (unten) auf verschiedene Operanden beziehen, die auf einer Umgehung zu einem bestimmten Schaltkreisblock geleitet werden oder zu einem bestimmten Schaltkreisblock durchgelassen werden. Es versteht sich, dass dies bewerkstelligt werden kann, indem entweder alle beteiligten Schaltkreisblöcke so gesteuert werden, dass sie eine Operation ausführen, die sich nicht auf den Operanden auswirkt (zum Beispiel Addieren einer Null oder Multiplizieren mit 1,0), so dass das Eingangssignal in den Block als das Ausgangssignal durchgelassen wird, oder indem ein Umgehungspfad verwendet wird. Des Weiteren ist es, wenn man einem Umgehungs- oder Durchgangspfad um einige Schaltkreisblöcke herum folgt, nicht unbedingt erforderlich, dem Umgehungspfad auch bei anschließenden Schaltkreisblöcken zu folgen. Außerdem mag ein Wert, der in einem Schaltkreisblock modifiziert wird, einer Umgehung um einen anschließenden Schaltkreisblock herum folgen. Wenn ein bestimmter Schaltkreisblock während einer Operation umgangen wird, so mag dieser Schaltkreisblock in einen inaktiven Zustand versetzt werden, um den Stromverbrauch zu senken, oder man kann ihn normal arbeiten lassen, wobei seine Ausgabe ignoriert wird, zum Beispiel durch die Verwendung von Auswahlmultiplexern oder anderer Schaltkreiselemente.
  • Es versteht sich, dass die im vorliegenden Text beschriebene DFMA-Einheit nur der Veranschaulichung dient und dass Varianten und Modifikationen möglich sind. Viele der im vorliegenden Text beschriebenen Schaltkreisblöcke besitzen herkömmliche Funktionen und mögen unter Verwendung von dem Fachmann bekannten Techniken implementiert werden. Dementsprechend wurde auf detaillierte Beschreibungen dieser Blöcke verzichtet. Die Unterteilung von Arbeitsschaltungen in Blöcke mag modifiziert werden, und Blöcke mögen kombiniert oder variiert werden. Außerdem mag auch die Anzahl von Pipeline-Stufen und die Zuweisung bestimmter Schaltkreisblöcke oder Operationen zu bestimmten Pipeline-Stufen modifiziert oder variiert werden. Die Auswahl und Anordnung von Schaltkreisblöcken für eine bestimmte Implementierung richtet sich nach dem Satz Operationen, der unterstützt werden soll, und dem Fachmann ist klar, dass nicht alle der im vorliegenden Text beschriebenen Blöcke für jede mögliche Kombination von Operationen benötigt werden.
  • III. Operationen der DFMA-Einheit
  • Die DFMA-Einheit 320 nutzt vorteilhafterweise die Mächtigkeit (leverages) der oben beschriebenen Schaltkreisblöcke, um alle in 4 aufgelisteten Operationen flächeneffizient zu unterstützen. Demgemäß hängt die Funktion der DFMA-Einheit 320 in mindestens einigen Aspekten davon ab, welche Operation ausgeführt wird. Die folgenden Sektionen beschreiben die Verwendung der DFMA-Einheit 320 zum Durchführen einer jeden der in 4 aufgelisteten Operationen.
  • Es ist zu beachten, dass Gleitkommaausnahmen (floating point exception) (einschließlich beispielsweise Überlauf- oder Unterlaufzustände) innerhalb der DFMA-Einheit 320 gehandhabt werden, ohne zusätzliche Verarbeitungszyklen zu erfordern. Zum Beispiel werden Operationen, wo ein Eingabeoperand NaN oder eine andere Sonderzahl ist, im Operandenvorbereitungsblock 514 von 5 detektiert, und eine geeignete Sonderzahlausgabe wird in der Ausgabesektion 522 ausgewählt. Wenn NaN, ein Unterlauf, ein Überlauf oder eine andere Sonderzahl im Verlauf der Operation auftritt, wird der Zustand detektiert, und eine geeignete Sonderzahlausgabe wird in der Ausgabesektion 522 ausgewählt.
  • A. Verschmolzenes Multiplizieren und Addieren (DFMA)
  • Für DFMA-Operationen empfängt die DFMA-Einheit 320 Operanden A0, B0 und C0 im fp64-Format und einen Operationscode, der anzeigt, dass eine DFMA-Operation ausgeführt werden soll. Die NaN-Schaltkreise 612, 614, 616 bestimmen, ob einer der ausgewählten Operanden NaN ist. Die Absolutwert-/Negationsschaltkreise 618, 620, 622 negieren das Vorzeichen-Bit (oder nicht), so wie es für jeden Operanden geeignet ist. Die Operandenauswahlmultiplexer 632, 634 und 636 wählen die jeweiligen Ausgaben der Absolutwert-/Negationsschaltkreise 618, 620, 622 aus und stellen diese Ausgaben den Sonderzahldetektionsschaltkreisen 638, 640, 642 bereit. Die Sonderzahldetektionsschaltkreise 638, 640 und 642 bestimmen, ob jeder Operand eine Sonderzahl ist, und erzeugen geeignete Sonderzahl-SPC-Signale auf Pfad 524. Die Sonderzahldetektionsschaltkreise 638, 640 und 642 stellen Mantissen Am, Bm und Cm (mit einer angehängten führenden 1 für normale Zahlen und einer führenden Null für Denorms) dem Mantissenpfad 516, Exponenten Ae, Be und Ce dem Exponentenpfad 518 und Vorzeichen-Bits As, Bs und Cs dem Vorzeichenpfad 520 bereit.
  • A/B-Vergleichsschaltkreis 624, fp32-Extraktionsschaltkreis 626 und U/S-Ganzzahlextraktionsschaltkreis 628 werden für DFMA-Operationen nicht verwendet, und diese Schaltkreise mögen gewünschtenfalls in einen inaktiven oder leistungsgeminderten Zustand versetzt werden.
  • In dem Vorzeichenpfad 520 bestimmt der Produkt/Summe-Schaltkreis 902 anhand der Vorzeichen-Bits As und Bs, ob das Produkt A·B positiv oder negativ ist, und vergleicht das Vorzeichen des Produkts Sp mit dem Vorzeichen-Bit Cs. Wenn das Produkt und Cs entgegengesetzte Vorzeichen haben, so wird das Signal SignCTL aktiviert (asserted), um entgegengesetzte Vorzeichen anzuzeigen. Wenn das Produkt und Cs das gleiche Vorzeichen haben, so wird das Signal SignCTL deaktiviert (deasserted).
  • In dem Exponentenpfad 518 (7) empfängt der Exponentenberechnungsblock 702 Exponenten Ae, Be und Ce. Der Exponentenberechnungsblock 702 addiert die Exponenten Ae und Be, um einen Blockexponenten für das Produkt A·B zu bestimmen, und wählt dann den größeren des Produktblockexponenten und des Exponenten Ce als den Ergebnisblockexponenten BLE. Der Exponentenberechnungsblock 702 subtrahiert auch den kleineren des Produktblockexponenten und des Exponenten Ce von dem größeren der beiden und erzeugt ein entsprechendes Verschiebungssteuersignal Sh_C. Die Unterlauflogik 713 detektiert, ob der Blockexponent BLE einem Unterlauf oder einem potenziellen Unterlauf entspricht, und erzeugt das Unterlaufsignal U_fp64. (Das U_fp32-Signal wird während DFMA-Operationen nicht verwendet.)
  • Der Negationsblock 708 empfängt die Mantisse Cm aus dem Operandenvorbereitungsblock 514 und das Signal SignCTL von dem Vorzeichenpfad 520. Wenn das Signal SignCTL aktiviert wird, so invertiert der Negationsblock 708 die Mantisse Cm, um das relative Minus-Vorzeichen zu berücksichtigen, und speist die invertierte Cm in den Verschiebungsschaltkreis 706 ein. Anderenfalls speist der Negationsblock 708 die Cm ohne Modifizierung in den Verschiebungsschaltkreis 706 ein.
  • Der Verschiebungsschaltkreis 706 verschiebt die durch den Negationsblock 708 ausgegebene Mantisse Cm um einen Betrag nach rechts, der dem Verschiebungssteuersignal Sh_C entspricht, und stellt die verschobene Mantisse C_Shift dem Auswahlmultiplexer 712 bereit. Der Auswahlmultiplexer 712 wählt die verschobene Mantisse C_Shift aus und speist die verschobene Mantisse als Operand C_align in den Mantissenpfad 516 ein.
  • In dem Mantissenpfad 516 (8) berechnet der Multiplizierer 802 das 106-Bit-Produkt Am·Bm und speist das Produkt in den 168-Bit-Addierer 804 ein. Der Multiplizierer 802 kann parallel zu dem Exponentenberechnungsblock 702 arbeiten.
  • Der Addierer 804 empfängt den Operanden C_align aus dem Auswahlmultiplexer 712 des Exponentenpfades 518 und addiert die Eingaben Am·Bm und C_align, um Summe und ~Summe zu bestimmen. Auf der Basis des MSB der Summe wählt der Multiplexer 806 eine der Ausgaben als die Endsumme aus. ”Summe” wird ausgewählt, wenn sie positiv ist (MSB null), während ”Summe” ausgewählt wird, wenn die Summe negativ ist (MSB eins). Die LZD-Schaltkreise 808 und 810 bestimmen die Anzahl der führenden Nullen in ~Summe bzw. Summe. Der Multiplexer 812 wählt eine der LZD-Ausgaben als die Anzahl der führenden Nullen und stellt das Führungsnullensignal BLSh dem Exponentenpfad 518 und der Normalisierungslogik 818 bereit.
  • Die durch den Multiplexer 806 ausgewählte Endsumme S wird ebenfalls dem Nulldetektionsschaltkreis 814 bereitgestellt. Wenn die Endsumme null ist, so drückt (asserts) der Nulldetektionsschaltkreis 814 das Signal R_ZERO auf den Vorzeichenpfad 520 auf; anderenfalls wird das Signal R_ZERO nicht aufgedrückt.
  • Die Normalisierungslogik 818 wählt das Führungsnullensignal als das Normalisierungssignal Lshift, sofern nicht das U_fp64-Signal einen Unterlauf anzeigt, wobei in diesem Fall die Mantisse nur bis zu dem Punkt verschoben wird, der einem Exponenten von 1 entspricht, so dass das Ergebnis in nicht-normalisierter Form ausgedrückt wird. Der Verschiebungsschaltkreis 816 verschiebt die ausgewählte Summe S in Reaktion auf das Signal Lshift nach links, um eine normalisierte Summe Sn zu erzeugen. Der Plus-1-Addierer 822 addiert 1 zu der normalisierten Summe Sn. Die Rundungslogik 820 verwendet den Rundungsmodus (der durch ein OPCTL-Signal spezifiziert wird) und die LSBs der normalisierten Summe Sn (auf dem Pfad 821), um zu bestimmen, ob die normalisierte Summe aufzurunden ist. Wenn ja, so steuert die Rundungslogik 820 den Auswahlmultiplexer 824, die Ausgabe Sn + 1 aus dem Addierer 822 zu wählen. Anderenfalls wählt der Auswahlmultiplexer 824 die normalisierte Summe Sn. Der Auswahlmultiplexer 824 stellt das ausgewählte Ergebnis Rm der Ausgabesektion 522 bereit. In einigen Ausführungsformen lässt der Auswahlmultiplexer 824 das führende Bit (1 für normale Zahlen) von der Ergebnismantisse fallen.
  • Parallel zu den Rundungsoperationen berechnet der Exponentenpfad 518 (7) den Ergebnisexponenten Re. Genauer gesagt, empfängt der Subtraktionsblock 720 den Blockexponenten BLE von dem Exponentenberechnungsblock 702 und das Blockverschiebungssignal BLSh von dem Mantissenpfad 516. Der Subtraktionsblock 720 subtrahiert seine zwei Eingaben und stellt das Ergebnis EDIF der Unterlauf-/Überlauflogik 722, dem Plus-1-Addierer 724 und dem Auswahlmultiplexer 726 bereit. Die Unterlauf-/Überlauflogik 722 verwendet die MSBs des Ergebnisses, um zu bestimmen, ob ein Unterlauf oder Überlauf eingetreten ist, und erzeugt U/O-Signale, die das Vorhandensein oder das Fehlen eines Unterlaufs oder Überlaufs widerspiegeln. Auf der Basis der U/O-Signale wählt der Auswahlmultiplexer 726 zwischen dem Subtraktionsergebnis EDIF und der Ausgabe des Plus-1-Addierers 724. Der ausgewählte Wert wird, zusammen mit den U/O-Signalen, als ein Ergebnisexponent Re in die Ausgabesektion 522 eingespeist.
  • Parallel zu den Rundungsoperationen bestimmt der Endvorzeichen-Schaltkreis 904 in dem Vorzeichenpfad 520 (9) das Endvorzeichen Rs auf der Basis des Vorzeichens, das durch den Produkt/Summe-Schaltkreis 902 bestimmt wurde, des Signals R_ZERO und des MSB der Summe, die von dem Mantissenpfad 516 empfangen wurden, und der Sonderzahl-SPC-Signale, die aus dem Operandenvorbereitungsblock 514 empfangen wurden.
  • Die Ausgabesektion 522 (10) empfängt die Ergebnismantisse Rm von dem Mantissenpfad 516, den Ergebnisexponenten Re von dem Exponentenpfad 518 und das Ergebnisvorzeichen Rs von dem Vorzeichenpfad 520 sowie die Sonderzahl-SPC-Signale von dem Operandenvorbereitungsblock 514 und die U/O-Signale von dem Exponentenpfad 518. Auf der Basis der SPC- und U/O-Signale erzeugt die Ausgabemultiplexersteuerlogik 1002 ein Steuersignal für den Signifikandenmultiplexer 1004 und ein Steuersignal für den Exponentenmultiplexer 1006. Die Ausgabemultiplexersteuerlogik 1002 erzeugt außerdem verschiedene Zustandscodes COND, die zum Beispiel anzeigen, ob das Ergebnis ein Überlauf, ein Unterlauf oder NaN ist.
  • Der Signifikandenmultiplexer 1004 wählt den Signifikanden Rm für normale Zahlen und Denorms. Für Unterlaufsituationen wird je nach dem Rundungsmodus entweder null oder der min_denorm-Signifikand ausgewählt. Für Überlaufsituationen (INF) wird der Signifikand 0×0_0000_0000_0000 ausgewählt. Wenn irgendein Eingabeoperand ein NaN ist, so wird der ruhende (quieted) NaN-Signifikand ausgewählt. Wenn ein NaN während der Operation erzeugt wurde, so wird die interne (ruhende) NaN-Mantisse 0×8_0000_0000 ausgewählt.
  • Der Exponentenmultiplexer 1006 wählt den Ergebnisexponenten Re für normale Zahlen. Für Denorms und Unterlaufsituationen wird der Exponent 0×000 ausgewählt. Für INF oder NaN wird der maximale Exponent 0×7ff ausgewählt.
  • Der Verkettungsblock 1008 empfängt den ausgewählten Signifikanden und Exponenten und die Vorzeichen Rs und erzeugt das endgültige fp64-Ergebnis OUT. Zustandscodes können wie gewünscht eingestellt werden.
  • Es ist zu beachten, dass die DFMA-Einheit 320 alle DFMA-Operationen in der gleichen Anzahl von Zyklen vollendet, unabhängig von Überlauf- oder Unterlaufsituationen. Die DFMA-Einheit 320 implementiert auch das erwartete, als Standard vorgegebene Überlauf-/Unterlaufverhalten für Gleitkommaarithmetik gemäß dem IEEE 754-Standard: Ein geeignetes Ergebnis OUT wird ausgegeben, und eine Statusmarkierung (in dem Zustandscode COND) wird gesetzt, um den Überlauf-/Unterlaufzustand anzuzeigen. In einigen Ausführungsformen mögen vom Benutzer definierte Traps implementiert werden, um diese Zustände zu handhaben. Der Zustandscode COND kann verwendet werden, um zu bestimmen, ob ein Trap stattfinden sollte.
  • B. Multiplikation
  • Die Multiplikation (DMUL) kann identisch zu der oben beschriebenen DFMA-Operation implementiert werden, wobei der Operand C auf null gesetzt ist. Die DFMA-Einheit 320 berechnet dann A·B + 0,0. In einer Ausführungsform kann der Auswahlmultiplexer 636 (6) dafür verwendet werden, den Eingabeoperanden C durch den fp64-Nullwert zu ersetzen, wenn der Operationscode eine DMUL-Operation anzeigt.
  • C. Addition
  • Die Addition (DADD) kann identisch zu der oben beschriebenen DFMA-Operation implementiert werden, wobei der Operand B auf 1,0 gesetzt ist. Die DFMA-Einheit 320 berechnet dann A·1,0 + C. In einer Ausführungsform kann der Auswahlmultiplexer 634 (6) dafür verwendet werden, den Eingabeoperanden B durch den fp64 1,0-Wert zu ersetzen, wenn der Operationscode eine DADD-Operation anzeigt.
  • D. DMAX und DMIN
  • Für DMAX- oder DMIN-Operationen empfängt der Operandenvorbereitungsblock 514 (6) Operanden A und B. Die NaN-Schaltkreise 612 und 614 bestimmen, ob einer oder beide der ausgewählte Operanden NaN sind. Die Absolutwert-/Negationsschaltkreise 618, 620 negieren (oder negieren nicht) die Vorzeichen-Bits soweit erforderlich.
  • Der A/B-Vergleichsschaltkreis 624 empfängt Operanden A und B aus den Absolutwert-/Negationsschaltkreisen 618, 620 und führt den Vergleich zum Beispiel dadurch aus, dass B von A subtrahiert wird, als ob die Operanden Integerzahlen wären. Auf der Basis der Subtraktion erzeugt der A/B-Vergleichsschaltkreis 624 COMP-Signale, die anzeigen, ob A größer als, kleiner als oder gleich B ist. Die COMP-Signale werden in die Steuerlogik 630 eingespeist, die entsprechende R_Test-Signale erzeugt und außerdem Auswahlsignale für die Auswahlmultiplexer 632, 634 und 636 erzeugt.
  • Genauer gesagt, wählt – für DMAX-Operationen – der Operand-A-Multiplexer 632 den Operanden A, wenn A größer als B ist, und den Operanden 1,0, wenn A kleiner als B ist, während der Operand-B-Multiplexer 634 den Operanden B wählt, wenn B größer als A ist, und den Operanden 1,0 wählt, wenn B kleiner als A ist. Für DMIN-Operationen wählt der Operand-A-Multiplexer 632 den Operanden A, wenn A kleiner als B ist, und den Operanden 1,0, wenn A größer als B ist, während der Operand-B-Multiplexer 634 den Operanden B wählt, wenn B kleiner als A ist, und den Operanden 1,0 wählt, wenn B größer als A ist. Sowohl für DMAX als auch für DMIN kann der Sonderfall A = B in der Weise gehandhabt werden, dass man den Multiplexer 632 so steuert, dass er den Operanden A wählt, während der Multiplexer 634 den Operanden 1,0 wählt, oder dass man den Multiplexer 632 so steuert, dass er den Operanden 1,0 wählt, während der Multiplexer 634 den Operanden B wählt. In jedem Fall wird der Operand-C-Multiplexer 636 vorteilhafterweise so betrieben, dass er den Operanden 0,0 wählt.
  • Die Sonderzahldetektionsschaltkreise 638, 640 und 642 bestimmen, ob die Operanden Sonderzahlen sind, und erzeugen entsprechende Sonderzahl-SPC-Signale auf dem Pfad 524. Die Sonderzahldetektionsschaltkreise 638, 640 und 642 stellen Mantissen Am, Bm und Cm (mit führender angehängter 1 für normale Zahlen und führender Null für Denorms) dem Mantissenpfad 516, Exponenten Ae, Be und Ce dem Exponentenpfad 518 und Vorzeichen-Bits As, Bs und Cs dem Vorzeichenpfad 520 bereit.
  • Der fp32-Extraktionsschaltkreis 626 und der Ohne-Vorzeichen-/Mit-Vorzeichen-Integerzahl-Extraktionsschaltkreis 628 werden für DMAX- oder DMIN-Operationen nicht verwendet, und diese Schaltkreise können gewünschtenfalls in einen inaktiven oder leistungsgeminderten Zustand versetzt werden.
  • Der Mantissenpfad 516, der Exponentenpfad 518 und der Vorzeichenpfad 520 funktionieren so, wie oben für DFMA-Operationen beschrieben. Für DMAX-Operationen berechnen der Mantissenpfad 516, der Exponentenpfad 518 und der Vorzeichenpfad 520 max(A, B)·1,0 + 0,0. Für DMIN-Operationen berechnen der Mantissenpfad 516, der Exponentenpfad 518 und der Vorzeichenpfad 520 min(A, B)·1,0 + 0,0. Somit entsprechen – für normale Zahlen – Rm, Re und Rs der Mantisse, dem Exponenten und dem Vorzeichen des gewünschten Ergebnisses.
  • Die Ausgabesektion 522 (10) handhabt Sonderzahlen. Insbesondere sind die Ergebnisse von DMAX- und DMIN-Operationen für NaN-Operanden undefiniert, und das Ergebnis mag auf einen NaN-Wert eingestellt werden. Die Ausgabemultiplexersteuerlogik 1002 verwendet die Sonderzahl-SPC-Signale, um zu bestimmen, ob das Ergebnis NaN sollte. Wenn ja, so wählt der Signifikandenmultiplexer 1004 die ruhende NaN-Eingabe, während der Exponentenmultiplexer 0×7ff wählt. Anderenfalls werden die Ergebnisse Rm und Re ausgewählt. Zustandscodes können nach Wunsch eingestellt werden.
  • In einer alternativen Ausführungsform können einige oder alle Komponenten des Mantissenpfades 516, des Exponentenpfades 518 und des Vorzeichenpfad 520 umgangen werden, und umgangene Komponenten können in einen leistungsgeminderten Zustand versetzt werden. Der Umgehungspfad mag verschiedene Verzögerungsschaltkreise (Signalspeicher usw.) enthalten, so dass der Pfad die gleiche Anzahl von Pipeline-Stufen beansprucht wie der längste des Mantissenpfades 516, des Exponentenpfades 518 und des Vorzeichenpfades 520. Dies gewährleistet, dass alle Operationen in der DFMA-Einheit 320 die gleiche Anzahl von Zyklen zum Vollenden erfordern, wodurch die Instruktionszuteilungslogik vereinfacht wird.
  • E. DSET
  • Wie DMAX und DMIN verwenden DSET-Operationen den A/B-Vergleichsschaltkreis 624 in dem Operandenvorbereitungsblock 514 (6). Im Gegensatz zu DMAX und DMIN erzeugt DSET keinen der Eingabeoperanden, sondern erzeugt statt dessen einen Booleschen Wert, der anzeigt, ob die getestete Bedingung erfüllt ist.
  • Für DSET-Operationen empfängt der Operandenvorbereitungsblock 514 (6) Operanden A und B. Die NaN-Schaltkreise 612 und 614 bestimmen, ob einer oder beide der ausgewählte Operanden NaN sind. Die Absolutwert-/Negationsschaltkreise 618, 620 negieren soweit erforderlich das Vorzeichen-Bit.
  • Der A/B-Vergleichsschaltkreis 624 empfängt Operanden A und B aus den Absolutwert-/Negationsschaltkreisen 618, 620 und führt den Vergleich aus, indem zum Beispiel B von A subtrahiert wird, als ob die Operanden Integerzahlen wären, und berücksichtigt ihre jeweiligen Vorzeichen-Bits. Auf der Basis der Subtraktion erzeugt der A/B-Vergleichsschaltkreis 624 COMP-Signale, die anzeigen, ob A größer als, kleiner als oder gleich B ist. Die COMP-Signale werden der Steuerlogik 630 bereitgestellt, die entsprechende R_Test-Signale erzeugt und außerdem Auswahlsignale für den A-Multiplexer 632, den B-Multiplexer 634 und den C-Multiplexer 636 erzeugt. Da das Ergebnis einer DSET-Operation Boolescher Art ist, wählen in einer Ausführungsform alle drei Multiplexer 632, 634 und 636 den Null-Operanden. In einer anderen Ausführungsform wählen die Multiplexer 632 und 634 die Operanden A und B, und die Sonderzahldetektionsschaltkreise 638 und 640 bestimmen, ob die Operanden Sonderzahlen sind, und erzeugen geeignete Sonderzahl-SPC-Signale auf dem Pfad 524.
  • Der fp32-Extraktionsschaltkreis 626 und der Ohne-Vorzeichen-/Mit-Vorzeichen-Integerzahl-Extraktionsschaltkreis 628 werden für DSET-Operationen nicht verwendet, und diese Schaltkreise mögen gewünschtenfalls in einen inaktiven oder leistungsgeminderten Zustand versetzt werden.
  • Der Mantissenpfad 516, der Exponentenpfad 518 und der Vorzeichenpfad 520 arbeiten so, wie oben für DFMA-Operationen beschrieben, oder können teilweise oder vollständig umgangen werden. Alle umgangenen Komponenten können in einen leistungsgeminderten Zustand versetzt werden. Wie oben angesprochen, mag der Umgehungspfad verschiedene Verzögerungsschaltkreise (Latches usw.) enthalten, so dass der Pfad die gleiche Anzahl von Pipeline-Stufen beansprucht wie der längste des Mantissenpfades 516, des Exponentenpfades 518 und des Vorzeichenpfades 520. Dies gewährleistet, dass alle Operationen in der DFMA-Einheit 320 die gleiche Anzahl von Zyklen zum Vollenden erfordern, wodurch die Instruktionszuteilungslogik vereinfacht wird.
  • Die Ausgabesektion 522 (10) handhabt Sonderzahlen. Insbesondere sind – nach dem IEEE 754-Standard – A und B ungeordnet, wenn A oder B (oder beide) NaN sind. Die Ausgabemultiplexersteuerlogik 1002 empfängt die R_Test-Signale, die anzeigen, ob A größer als, kleiner als oder gleich B ist; die Sonderzahl-SPC-Signale, die anzeigen, ob A oder B NaN ist; und ein OPCTL-Signal, das die konkrete Testoperation anzeigt, die benötigt wird. Die Ausgabemultiplexersteuerlogik 1002 verwendet die R_Test- und SPC-Signale, um zu bestimmen, ob der geforderte Test bestanden wurde. In einer Ausführungsform wird das Ergebnis einer DSET-Operation als ein Zustandscode bereitgestellt, und das Ergebnis OUT wird ignoriert. In diesem Fall stellt die Ausgabemultiplexersteuerlogik 1002 den Zustandscode COND ein, um das Ergebnis anzuzeigen, und mag beliebig einen Signifikanden und Exponenten für die Ausgabe OUT wählen. In einer anderen Ausführungsform mag die Ausgabe OUT so eingestellt werden, dass das Testergebnis widergespiegelt wird, wobei in diesem Fall die Ausgabemultiplexersteuerlogik 1002 den Signifikandenmultiplexer 1004 und den Exponentenmultiplexer 1006 so betreibt, dass ein 64-Bit-Wert ausgewählt wird, der einem logischen TRUE entspricht, wenn der Test bestanden wird, oder dass ein 64-Bit-Wert ausgewählt wird, der einem logischen FALSE entspricht, wenn der Test nicht bestanden wird.
  • F. Formatumwandlungen
  • In einigen Ausführungsformen unterstützt die DFMA-Einheit 320 auch Formatumwandlungsoperationen in Double-Precision-Formate und aus Double-Precision-Formaten. Es werden nun Beispiele beschrieben.
  • 1. fr32 zu fr64 (F2D)
  • Für F2D-Operationen wird ein fp32-Eingabeoperand A in eine entsprechende fp64-Zahl umgewandelt. Sonderzahleingaben werden entsprechend gehandhabt; zum Beispiel werden fp32-INF oder -NaN in fp64-INF oder -NaN umgewandelt. Alle fp32-Denorms können in fp64-Normalzahlen umgewandelt werden.
  • Der Operandenvorbereitungsblock 514 (6) empfängt den fp32-Operanden A. Der Absolutwert-/Negationsschaltkreis 618 lässt den Operanden A ohne Modifizierung zum fp32-Extraktionsblock 626 passieren. Der fp32-Extraktionsblock 626 führt die anfängliche Aufwärtskonvertierung des Operanden A in das fp64-Format durch. Genauer gesagt, extrahiert der fp32-Extraktionsblock 626 den 8-Bit-Exponenten und addiert 1023 – 127 = 896, um einen 11-Bit-Exponenten mit dem korrekten Bias für das fp64-Format zu erzeugen. Die 23-Bit-Mantisse wird mit angehängten Nullen (trailling zeroes) aufgefüllt. Der fp32-Extraktionsblock 626 bestimmt auch, ob der Operand A eine fp32-Sonderzahl ist (zum Beispiel INF, NaN, Null oder Denorm), und stellt diese Informationen über den Pfad 644 dem Sonderzahldetektionsschaltkreis 642 bereit. Der fp32-Extraktionsblock 626 kann den Operanden auch negieren oder Absolutwert auf den Operanden anwenden.
  • Der Operand-C-Multiplexer 636 wählt den aufwärtskonvertierten Operanden, der durch den fp32-Extraktionsblock 626 bereitgestellt wurde, und der Operand-A-Multiplexer 632 und der Operand-B-Multiplexer 634 wählen die Null-Operanden. Der Sonderzahldetektionsschaltkreis 642 stellt der Mantisse eine führende 1 voran, sofern nicht der Operand eine fp32-Denorm ist. Der Sonderzahldetektionsschaltkreis 642 verwendet auch die Sonderzahlinformationen, die durch den fp32-Extraktionsblock 626 bereitgestellt wurden, als seine Sonderzahl-SPC-Signale, außer dass fp32-Denorms als normale Zahlen identifiziert werden (da in fp64 alle fp32-Denorms als normale Zahlen ausgedrückt werden können).
  • Der Mantissenpfad 516 und der Exponentenpfad 518 werden so betrieben, wie es oben für DFMA-Operationen beschrieben wurde, um 0,0·0,0 + C im fp64-Format zu berechnen. Die Normalisierungselemente in dem Mantissenpfad 516 und dem Exponentenpfad 518 normalisieren den aufwärtskonvertierten fp64-Operanden. In einer alternativen Ausführungsform, wie in 8 dargestellt, kann die ausgerichtete Mantisse C_align von dem Exponentenpfad 518 um den Addierer 804 in dem Mantissenpfad 516 herum zu dem Summen-Eingang des Multiplexers 806 geführt werden, und der Multiplizierer 802 und der Addierer 804 können in einen leistungsgeminderten Zustand versetzt werden. Der Vorzeichenpfad 520 lässt vorteilhafterweise das Vorzeichen-Bit Cs passieren.
  • In der Ausgabesektion 522 (10) wird das normalisierte fp64-Ergebnis (Rm, Rs, Re) ausgewählt, wenn nicht Sonderzahl-SPC-Signale anzeigen, dass der Eingabeoperand fp32-INF, -NaN oder -Null war. Wenn der Eingabeoperand fp32-INF war, so betreibt die Ausgabemultiplexersteuerlogik 1002 den Signifikandenmultiplexer 1004 so, dass der fp64-INF-Signifikand gewählt wird (0×0_0000_0000_0000), und betreibt den Exponentenmultiplexer 1006 so, dass der fp64-INF-Exponent gewählt wird (0×7ff). Wenn der Eingabeoperand fp32-NaN war, so betreibt die Ausgabemultiplexersteuerlogik 1002 den Signifikandenmultiplexer 1004 so, dass der ruhende fp64-NaN-Signifikand gewählt wird, und betreibt den Exponentenmultiplexer 1006 so, dass der fp64-NaN-Exponent gewählt wird (0×7ff). Wenn der Eingabeoperand fp32-Null war, so betreibt die Ausgabemultiplexersteuerlogik 1002 den Signifikandenmultiplexer 1004 so, dass der fp64-Null-Signifikand gewählt wird (0×0_0000_0000_0000), und betreibt den Exponentenmultiplexer 1006 so, dass der fp64-Null-Exponent gewählt wird (0×000). Zustandscodes können nach Wunsch eingestellt werden.
  • 2. Ganze Zahl zu fp64 (I2D)
  • Für I2D-Operationen wird eine Integerzahl (u64-, s64-, u32- oder s32-Format) in das fp64-Format umgewandelt. Der Operandenvorbereitungsblock 514 (6) empfängt den 64-Bit-Integerzahloperanden C. Für 32-Bit-Integerzahl-Formate können 32 führende Nullen vorangestellt werden. Der Absolutwert-/Negationsschaltkreis 622 lässt den Operanden C ohne Modifizierung zum U/S-Extraktionsblock 628 durch. Der U/S-Extraktionsblock 628 führt die anfängliche Aufwärtskonvertierung des Operanden C in das fp64-Format durch. Genauer gesagt, bestimmt der Extraktionsblock 628 die Position der führenden 1 in dem Operanden C (zum Beispiel unter Verwendung eines Prioritätscodierers). Ein 11-Bit-Exponent wird durch Initialisieren eines Exponentenfeldes auf 1086 (was 263 entspricht) bestimmt. Für 32-Bit-Eingabeformate wird die führende 1 fallengelassen, und die Mantisse wird mit angehängten Nullen aufgefüllt, um einen 52-Bit-Signifikanden erzeugen. Für 64-Bit-Eingabeformate wird die Mantisse erforderlichenfalls auf 53 Bit trunkiert, und die führende 1 wird fallengelassen. Ein Schutzbit und ein Rundungsbit mögen gewünschtenfalls behalten werden.
  • Der U/S-Extraktionsblock 628 bestimmt auch, ob der Eingabeoperand null ist, und erzeugt ein entsprechendes Steuersignal für den Sonderzahldetektionsschaltkreis 642. Andere Sonderzahlen (Denorms, INF und NaN) kommen während I2D-Operationen nicht vor und brauchen nicht detektiert zu werden.
  • Der Operand-C-Multiplexer 636 wählt den aufwärtskonvertierten Operanden aus, der durch den U/S-Extraktionsblock 628 ausgegeben wurde, und der Operand-A-Multiplexer 632 und der Operand-B-Multiplexer 634 wählen jeweils den Null-Operanden. Der Sonderzahldetektionsschaltkreis 642 verwendet die durch den U/S-Extraktionsblock 628 ausgegebenen Null-Informationen zum Erzeugen eines Sonderzahl-SPC-Signals, das anzeigt, ob der Eingabeoperand null ist.
  • Der Mantissenpfad 516 und der Exponentenpfad 518 werden so betrieben, wie es oben für DFMA-Operationen beschrieben wurde, um 0,0·0,0 + C zu berechnen. Die Normalisierungselemente in dem Mantissenpfad 516 und dem Exponentenpfad 518 normalisieren den aufwärtskonvertierten fp64-Operanden. In einer alternativen Ausführungsform kann die ausgerichtete Mantisse C_align von dem Exponentenpfad 518 um den Addierer 804 in dem Mantissenpfad 516 herum in den Summen-Eingang des Multiplexers 806 geführt werden, und der Multiplizierer 802 und der Addierer 804 können in einen leistungsgeminderten Zustand versetzt werden. Der Vorzeichenpfad 520 lässt vorteilhafterweise das Vorzeichen-Bit Cs passieren.
  • In der Ausgabesektion 522 (5) wird das normalisierte fp64-Ergebnis (Rm, Rs, Re) ausgewählt, sofern nicht die Sonderzahl-SPC-Signale anzeigen, dass der Eingabeoperand eine Integer-Null war. Wenn der Eingabeoperand eine Integer-Null war, so betreibt die Ausgabemultiplexersteuerlogik 1002 den Signifikandenmultiplexer 1004 so, dass der fp64-Null-Signifikand gewählt wird (0×0_0000_0000_0000), und den Exponentenmultiplexer 1006 so, dass der fp64-Null-Exponent gewählt wird (0×000). Zustandscodes können nach Wunsch eingestellt werden.
  • 3. fp64 zu fp32 (D2F)
  • Da fp64 einen größeren Bereich von Gleitkommawerten abdeckt als fp32, erfordert das Umwandeln von fp64 in fp32 (D2F) die Detektion von Überlaufsituationen und Unterlaufsituationen in dem fp32-Wert.
  • Für D2F-Operationen wird der Operand C in den Operandenvorbereitungsblock 514 (6) eingespeist. Der Absolutwert-/Negationsschaltkreis 622 führt nach Wunsch eine Absolutwert- oder Operandennegation durch und leitet den Operanden C zu dem Operand-C-Multiplexer 636, der den Operanden C wählt, um ihn dem Sonderzahldetektionsschaltkreis 642 bereitzustellen. Der Sonderzahldetektionsschaltkreis 642 detektiert fp64-Denorm, -Null, -INF oder -NaN und stellt entsprechende SPC-Signale der Ausgabesektion 522 bereit. Die Auswahlmultiplexer 632 und 634 wählen die 0,0-Operanden.
  • In dem Exponentenpfad 518 (7) biast der Exponentenberechnungsblock 702 den fp64-Exponenten um 897 nach unten, um einen entsprechenden fp32-Exponenten zu bestimmen. Wenn der fp32-Exponent unterläuft, so erzeugt der Exponentenberechnungsblock 702 ein Signal Sh_C, das die Mantisse von C nach rechts verschiebt, um den Unterlauf zu beseitigen (wenn eine Verschiebung von mehr als 217 Bits benötigt wird, so wird die Mantisse von C null). Der Verschiebungsschaltkreis 706 verschiebt die Mantisse von C entsprechend dem Signal Sh_C nach rechts. Das Ergebnis wird durch den Multiplexer 712 ausgewählt und als ausgerichtete Mantisse C_align dem Mantissenpfad 516 bereitgestellt. Die Unterlauflogik 713 detektiert einen fp32-Unterlauf und erzeugt das U_fp32-Signal.
  • In dem Mantissenpfad 516 (8) berechnet der Multiplizierer 802 das Produkt 0,0·0,0 (oder wird umgangen). Das Produkt (null) wird durch den Addierer 804 zu der Mantisse C_align addiert. Das Summen-Ergebnis wird durch den Multiplexer 806 ausgewählt (da die Eingabe in der Vorzeichen/Größenordnung-Form vorliegt). Ein Null-Ergebnis wird durch den Schaltkreis 814 detektiert. Ungleich-null-Ergebnisse werden normalisiert, wie oben im Kontext der DFMA-Operationen beschrieben. Die Rundungslogik 820 kann verwendet werden, um zu bestimmen, ob aufgerundet werden soll. Es ist zu beachten, dass der Plus-1-Addierer 822 zu der 24. Bit-Position (anstatt zu der 53.) Eins addieren müsste, da das Ergebnis eine 23-Bit-fp32-Mantisse sein soll.
  • Die Ausgabesektion 522 (5) assembliert das Ergebnis. Der 23-Bit-fp32-Signifikand wird dem 52-Bit-Feld Rm bereitgestellt. Die Ausgabemultiplexersteuerlogik 1002 steuert den Signifikandenmultiplexer 1004 so, dass Rm ausgewählt wird; es sei denn, das Ergebnis ist keine fp32-Normalzahl. Für fp32-Null oder -INF wird die Null-Mantisse 0×0_0000_0000_0000 ausgewählt; für fp32-NaN wird eine ruhende fp32-NaN-Mantisse ausgewählt. Für fp32-Denorms kann Rm verwendet werden.
  • Der 8-Bit-fp32-Exponent wird einem 11-Bit-Exponentenfeld bereitgestellt. Die Ausgabemultiplexersteuerlogik 1002 steuert den Exponentenmultiplexer 1004 so, dass Re ausgewählt wird; es sei denn, das Ergebnis ist keine fp32-Normalzahl. Für fp32-Denorms oder -Null wird der Null-Exponent 0×000 ausgewählt. Für fp32-INF oder -NaN wird der maximale fp32-Exponent 0×7ff ausgewählt.
  • Der Verkettungsblock 1008 packt Rm und Re in 31 Bits des 64-Bit-Ausgabefeldes und hängt das Vorzeichen-Bit Rs an. Die 3 MSBs in dem 11-Bit-Exponenten werden fallengelassen, wie auch die 29 LSBs in dem 52-Bit-Signifikanden. Das fp32-Ergebnis mag ausgerichtet werden, zum Beispiel nach Wunsch in den MSBs oder LSBs des 64-Bit-Feldes. Zustandscodes können nach Wunsch eingestellt werden.
  • 4. fp64 zu ganzer Zahl (D2I)
  • Für D2I-Operationen werden Überlaufsituationen und Unterlaufsituationen detektiert. Überlaufsituationen werden auf den maximalen Integerwert eingestellt, und Unterlaufsituationen werden auf null eingestellt.
  • Der umzuwandelnde Operand wird als Operand C im fp64-Format bereitgestellt. Der Absolutwert-/Negationsschaltkreis 622 führt nach Wunsch eine Absolutwert- oder Operandennegation durch und leitet den Operanden C zum Operand-C-Multiplexer 636 weiter, der den Operanden C auswählt, um ihn dem Sonderzahldetektionsschaltkreis 642 bereitzustellen. Der Sonderzahldetektionsschaltkreis 642 detektiert fp64-Denorm, -Null, -INF oder -NaN und stellt der Ausgabesektion 522 ein entsprechendes SPC-Signale bereit. Die Auswahlmultiplexer 632 und 634 wählen die 0,0-Operanden aus.
  • In dem Exponentenpfad 518 (7) verwendet der Exponentenberechnungsblock 702 den Exponenten Ce, um den Betrag zu bestimmen, um den Cm zu verschieben ist, um den Binärpunkt an der Integerzahlposition auszurichten, und erzeugt ein entsprechendes Signal Sh_C. In einer Ausführungsform entfernt der Exponentenberechnungsblock 702 den Exponenten-Bias und berücksichtigt die Breite des Signifikanden, das zu verwendende Integerzahlformat und wie die Ergebnisse für 32-Bit-Formate in einem 64-Bit-Feld darzustellen sind (zum Beispiel unter Verwendung der 32 MSBs oder 32 LSBs). Der Exponent Ce wird auch verwendet, um zu bestimmen, ob das Ergebnis in dem Ziel-Integerzahlformat überläuft oder unterläuft. Wenn ja, so wird vorteilhafterweise ein entsprechendes Überlauf- oder Unterlaufsignal (nicht explizit gezeigt) an die Ausgabemultiplexersteuerlogik 1002 in der Ausgabesektion 522 (10) gesendet.
  • Der Verschiebungsschaltkreis 706 verschiebt Cm um den Betrag C_Shift, und das Signal C_Shift wird als das Signal C_align durch den Multiplexer 712 ausgewählt.
  • In dem Mantissenpfad 516 (8) stellt der Multiplizierer 802 dem Addierer 804 ein 0,0-Ergebnis bereit. Der Addierer 804 addiert 0,0 zu C_align und wählt ”Summe” oder ”Summe”, je nachdem, ob C positiv oder negativ ist. Der Shifter 816 verschiebt vorteilhafterweise nicht das Ergebnis. Der Integerzahlformatblock 826 trennt das Ergebnis in ein 11-Bit-MSB-Feld int_M und ein 53-Bit-LSB-Feld int_L.
  • In der Ausgabesektion 522 (10) steuert die Ausgabemultiplexersteuerlogik 1002 den Signifikandenmultiplexer 1004 und den Exponentenmultiplexer 1006 so, dass die Ergebnisse int_L bzw. int_M auszuwählen, außer im Fall eines Überlaufs, Unterlaufs oder eines Sonderzahloperanden. Für Überlaufsituationen wird die maximale Integerzahl im Ausgabeformat (u32, s32, u64 oder s64) ausgewählt. Für Unterlaufsituationen wird null ausgewählt. Zustandscodes mögen wie gewünscht eingestellt werden.
  • IV. Weitere Ausführungsformen
  • Obgleich die Erfindung anhand konkreter Ausführungsformen beschrieben wurde, leuchtet dem Fachmann ein, dass zahlreiche Modifikationen möglich sind. Zum Beispiel mag eine DFMA-Einheit dafür implementiert sein, mehr, weniger oder andere Funktionen in Kombination zu unterstützen und Operanden und Ergebnisse in jedem beliebigen Format oder Kombinationen von Formaten zu unterstützen.
  • Die verschiedenen Umgehungspfade und Durchgänge, die im vorliegenden Text beschrieben sind, mögen ebenfalls variiert werden. Allgemein mag, wo ein Umgehungspfad um einen Schaltkreisblock herum beschrieben ist, dieser Pfad durch eine beliebige Identitätsoperation (d. h. eine Operation ohne Auswirkung auf ihren Operanden, wie zum Beispiel Addieren von null) in diesem Block ersetzt werden. Ein Schaltkreisblock, der während einer bestimmten Operation umgangen wird, mag in einen Leerlaufzustand (zum Beispiel einen leistungsgeminderten Zustand) versetzt werden oder kann normal betrieben werden, wobei sein Ergebnis durch nachgeschaltete Blöcke ignoriert wird, zum Beispiel durch den Betrieb von Auswahlmultiplexern oder anderer Schaltkreise.
  • Die DFMA-Pipeline kann in eine beliebige Zahl von Stufen unterteilt werden, und die Kombination von Komponenten auf jeder Stufe mag nach Wunsch variiert werden. Die Funktionalität, die im vorliegenden Text bestimmten Schaltkreisblöcken zugeschrieben ist, mag auch über Pipeline-Stufen hinweg aufgeteilt werden. Zum Beispiel könnte ein Multipliziererbaum mehrere Stufen in Anspruch nehmen. Die Funktionalität verschiedener Blöcke mag ebenfalls modifiziert werden. In einigen Ausführungsformen mögen zum Beispiel verschiedene Addiererschaltkreise oder Multipliziererschaltkreise verwendet werden.
  • Des Weiteren wurde die DFMA-Einheit anhand von Schaltkreisblöcken beschrieben, um das Verständnis zu erleichtern. Dem Fachmann leuchtet ein, dass die Blöcke unter Verwendung einer Vielzahl verschiedener Schaltkreiskomponenten und Layouts implementiert werden mögen und dass im vorliegenden Text beschriebene Blöcke nicht auf einen bestimmten Satz Komponenten oder eine bestimmte physische Layouts beschränkt sind. Die Blöcke mögen nach Wunsch physisch kombiniert oder getrennt werden.
  • Ein Prozessor mag eine oder mehrere DFMA-Einheiten in einem Ausführungskern enthalten. Wenn zum Beispiel superskalare Instruktionszuteilung (d. h. die Zuteilung (issuing) von mehr als einer Instruktion je Zyklus) oder SIMD-Instruktionszuteilung gewünscht wird, so mögen mehrere DFMA-Einheiten implementiert werden, und verschiedene DFMA-Einheiten mögen verschiedene Kombinationen von Funktionen unterstützen. Ein Prozessor mag auch mehrere Ausführungskerne enthalten, und jeder Kern mag seine eigene(n) DFMA-Einheit(en) haben.
  • In einigen Ausführungsformen, wo der Ausführungskern SIMD-Instruktionszuteilung unterstützt, mag eine einzelne DFMA-Einheit in Kombination mit geeigneter Eingabesequenzierungs- und Ausgabeerfassungslogik verwendet werden, damit mehrere Datensätze sequenziell in einer einzelnen DFMA-Pipeline verarbeitet werden können.
  • 11 ist ein Blockschaubild eines Ausführungskerns 1100, der eine DFMA-Funktionseinheit 1102 gemäß einer Ausführungsform der vorliegenden Erfindung enthält. Die DFMA-Einheit 1102 kann der oben beschriebenen DFMA-Einheit 320 ähneln oder mit ihr identisch sein. Der Kern 1100 teilt SIMD-Instruktionen zu, was heißt, dass dieselbe Instruktion mit P verschiedenen Sätzen aus Single-Precision-Operanden parallel einem Satz P Single-Precision-SIMD-Einheiten 1104 zugeteilt werden kann. Jede SIMD-Einheit 1104 empfängt denselben Operationscode und einen unterschiedlichen Satz Operanden. Die P SIMD-Einheiten 1104 arbeiten parallel, um P Ergebnisse zu erzeugen. Der DFMA-Einheit 1102 werden P-Weg-SIMD-Instruktionen als eine Serie von P Single-Instruction, Single-Data(SISD)-Instruktionen zugeteilt.
  • Ein Eingabeverwalter 1106 (der Teil einer Instruktionszuteilungseinheit sein kann) erfasst Operanden für SIMD-Instruktionen und, wenn alle P Sätze von Operanden für die SIMD-Instruktion gesammelt wurden, übermitteln die Operanden und die betreffenden Operationscodes entweder den P SIMD-Einheiten 1104 oder der DFMA-Einheit 1102. Ein Ausgabekollektor 1108 sammelt die Ergebnisse aus den SIMD-Einheiten 1104 oder der DFMA-Einheit 1102 und liefert die Ergebnisse über den Ergebnisbus 1110 einer Registerdatei (nicht explizit in 11 gezeigt). In einigen Ausführungsformen stellt der Ergebnisbus 1110 auch einen Umgehungspfad zu dem Eingabeverwalter 1106 bereit, so dass Ergebnisse zu dem Eingabeverwalter 1106 geliefert werden können zur Verwendung mit einer anschließenden Instruktion parallel zu der Einspeisung in die Registerdatei. Um das Erscheinungsbild eines SIMD-Verhaltens unter Verwendung einer einzelnen DFMA-Einheit 1102 bereitzustellen, kann der Eingabeverwalter 1106 vorteilhafterweise die Zuteilung von Instruktionen an die DFMA-Einheit 1102 serialisieren, zum Beispiel durch Zuteilen desselben Operationscodes mit einem anderen Satz Operanden in jedem von P aufeinanderfolgenden Taktzyklen.
  • 12 ist ein Blockschaubild, das eine serialisierte Instruktionszuteilung für die DFMA-Einheit 1102 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Eine Eingabeoperandenkollektoreinheit 1202, die in dem Eingabeverwalter 1106 von 11 enthalten sein mag, enthält zwei Kollektoren 1204, 1206. Jeder Kollektor 1204, 1206 ist eine Anordnung von 32-Bit-Registern, die genügend Platz für P Triplets aus Single-Precision-Operanden A, B und C bereitstellt. Anders ausgedrückt: Jeder Kollektor 1204, 1206 kann alle Operanden für eine einzelne SIMD-Instruktion speichern. Die Eingabeoperandenkollektoreinheit 1202 erhält Operanden zum Beispiel aus der Registerdatei 324 von 3 und/oder von dem Ergebnisbus 1110 von 11. Es mögen Tags oder andere herkömmliche Techniken verwendet werden, um zu bestimmen, welche Operanden für eine bestimmte Instruktion zu sammeln sind. Es werden genug Kollektoren 1206 bereitgestellt, um es zu ermöglichen, dass Operanden für eine bestimmte Instruktion einige Taktzyklen vor dem Zeitpunkt erfasst werden können, an dem diese Instruktion zugeteilt werden soll.
  • Für Single-Precision-Instruktionen wird ein Kollektor (zum Beispiel der Kollektor 1204) mit allen Operanden geladen, die benötigt werden, damit die P SIMD-Einheiten 1104 eine einzelne Instruktion ausführen. Wenn die Instruktion den P SIMD-Einheiten 1104 zugeteilt wird, so wird der gesamte Kollektor 1204 vorteilhafterweise parallel gelesen, wobei an jede der SIMD-Einheiten 1104 ein anderes Triplet aus A-, B- C-Operanden übermittelt wird.
  • Für Instruktionen an die DFMA-Einheit 1102 sind die Operanden vom Double-Precision-Typ (zum Beispiel 64 Bits). Jeder Operand mag unter Verwendung entsprechender Register in beiden Kollektoren 1204, 1206 gespeichert werden. Zum Beispiel mag das Register 1208 im Kollektor 1204 die 32 MSBs (zum Beispiel das Vorzeichen-Bit, 11 Exponenten-Bits und die 20 MSBs des Signifikanden) einer einzelnen Instanz des Operanden A speichern, während das Register 1210 im Kollektor 1206 die 32 LSBs (zum Beispiel die verbleibenden 32 Bits des Signifikanden) desselben Operanden speichert. Alle Operandentriplets A, B, C, die für eine P-Weg-Double-Precision-SIMD-Instruktion benötigt werden, können somit unter Verwendung von zwei Single-Precision-Kollektoren 1204, 1206 gesammelt werden.
  • Der Kern 1100 hat nur eine einzige DFMA-Einheit 1102, und die P Operandensätze werden vorteilhafterweise sequenziell unter Verwendung von Ausgabemultiplexern 1212, 1214 übermittelt, die beide durch einen Zähler 1216 gesteuert werden. Die Multiplexer 1212 und 1214 wählen die MSBs und LSBs eines Operandentriplets aus jeweiligen Kollektoren 1204 und 1206 in Reaktion auf den Zähler 1216 aus. Zum Beispiel kann, in den gezeigten Datenpfaden, der Multiplexer 1212 die 32 MSBs des Operanden A aus dem Register 1208 im Kollektor 1204 wählen, während der Multiplexer 1214 die 32 LSBs desselben Operanden A aus dem Register 1210 im Kollektor 1206 wählt. Die 64 Bits werden auf einem Pfad mit Double-Precision-Breite in die DFMA-Einheit 1102 eingespeist. Gleichermaßen können die Operanden B (aus den Registern 1220 und 1222) und C (aus den Registern 1224 und 1226) unter Verwendung entsprechender Multiplexer (nicht explizit gezeigt), die durch denselben Zähler 1216 gesteuert werden, an die DFMA-Einheit 1102 übermittelt werden. Im nächsten Taktzyklus können die Operanden A, B und C aus dem nächsten Satz Register in den Kollektoren 1204 und 1206 an die DFMA-Einheit 1102 übermittelt werden, und so weiter, bis alle P Sätze Operanden übermittelt wurden.
  • Die Multiplexer 1212 und 1214 stellen, zusammen mit den Kollektoren 1204 und 1206, das äußere Erscheinungsbild der SIMD-Ausführung für die DFMA-Einheit 1102 bereit, wenn auch mit verringertem Durchsatz. Somit kann ein Programmiermodell für den Kern 1100 davon ausgehen, dass eine P-Weg-SIMD-Ausführung für alle Instruktionen, einschließlich Double-Precision-Instruktionen, verfügbar ist.
  • Es versteht sich, dass die im vorliegenden Text beschriebene Operandenerfassungs- und -sequenzierungslogik nur der Veranschaulichung dient und dass Varianten und Modifikationen möglich sind. In einem SIMD-befähigten Kern mag eine beliebige Zahl von DFMA-Einheiten vorhanden sein, und Instruktionen mögen an eine beliebige Zahl von DFMA-Einheiten parallel zugeteilt werden. In einigen Ausführungsformen skaliert der Durchsatz für Double-Precision-Operationen im Vergleich zu Single-Precision-Operationen mit der Anzahl von DFMA-Einheiten. Wenn zum Beispiel P SIMD-Einheiten und N DFMA-Einheiten vorhanden sind, so ist der Double-Precision-Durchsatz N/P des Single-Precision-Durchsatzes. In einigen Ausführungsformen ist N optimalerweise gleich P. In anderen Ausführungsformen mögen andere Faktoren – zum Beispiel die Breite der internen Datenpfade zwischen der Registerdatei und den Funktionseinheiten – den Double-Precision-Durchsatz auf weniger als den Single-Precision-Durchsatz beschränken, ungeachtet der Anzahl der vorhandenen DFMA-Einheiten. In diesem Fall ist N optimalerweise nicht größer, als die anderen einschränkenden Faktoren es gestatten.
  • Es ist ebenfalls zu beachten, dass die DFMA-Einheit, da sie von den Single-Precision-Funktionseinheiten getrennt ist, heruntergefahren werden kann, wenn sie nicht verwendet wird; zum Beispiel wenn der Grafikprozessor oder Kern ausschließlich für Renderprozesse oder anderen Berechnungen verwendet wird, die keine Double-Precision erfordern. Des Weiteren kann die DFMA-Einheit aus dem Design des integrierten Schaltkreises weggelassen werden, ohne die Funktion anderer Schaltkreiskomponenten zu beeinträchtigen. Dies vereinfacht das Design von Produktfamilien, bei denen verschiedene Chips verschiedene Stufen der Unterstützung für Double-Precision-Operationen bieten. Zum Beispiel könnte eine GPU-Familie eine High-End GPU mit vielen Kernen, von denen jeder mindestens eine DFMA-Einheit enthält, und eine Low-End GPU ohne auf Hardware basierende Double-Precision-Unterstützung und ohne DFMA-Einheiten enthalten.
  • Obgleich die Erfindung anhand eines Grafikprozessors beschrieben wurde, ist dem Fachmann des Weiteren klar, dass Aspekte der vorliegenden Erfindung auch in anderen Prozessoren, wie zum Beispiel mathematischen Koprozessoren, Vektorprozessoren oder Allzweckprozessoren, genutzt werden mögen.
  • Daher, obgleich die Erfindung mit Bezug auf konkrete Ausführungsformen beschrieben wurde, versteht es sich, dass sich die Erfindung auch auf sämtliche Modifikationen und Äquivalente innerhalb des Geltungsbereichs der folgenden Ansprüche erstrecken soll.

Claims (23)

  1. Grafikprozessor, der aufweist: eine Renderpipeline, die dafür eingerichtet ist, Bilddaten zu erzeugen, wobei die Renderpipeline einen Verarbeitungskern enthält, der eingerichtet ist, eine Mehrzahl gleichzeitiger Befehlsfolgen auszuführen, wobei der Verarbeitungskern eine Single-Precision-Funktionseinheit enthält, die an Single-Precision-Operanden operiert, wobei der Verarbeitungskern des Weiteren eine Mehrzweck-Double-Precision-Funktionseinheit enthält, die dafür eingerichtet ist, auswählbar eine aus einer Mehrzahl von Double-Precision-Operationen an einem Satz Double-Precision-Eingabeoperanden auszuführen, wobei die Mehrzweck-Double-Precision-Funktionseinheit mindestens einen arithmetischen Logikschaltkreis enthält, wobei alle arithmetischen Logikschaltkreise der Double-Precision-Funktionseinheit ausreichend breit sind, um mit Double-Precision zu arbeiten, wobei der Grafikprozessor ferner eine Zuteilungseinheit enthält, wobei die Zuteilungseinheit eine Instruktion durch Senden des Operationscodes und der Operanden an die Mehrzweck-Double-Precision-Funktionseinheit oder an die Single-Precision-Funktionseinheit zuteilt.
  2. Grafikprozessor gemäß Anspruch 1, wobei die Double-Precision-Funktionseinheit des Weiteren so eingerichtet ist, dass jede der Mehrzahl von Double-Precision-Operationen in einer gleichen Zahl von Taktzyklen vollendet ist.
  3. Grafikprozessor gemäß Anspruch 2, wobei die Double-Precision-Funktionseinheit des Weiteren so eingerichtet ist, dass jede der Mehrzahl von Double-Precision-Operationen in einer gleichen Zahl von Taktzyklen vollendet wird, unabhängig davon, ob ein Überlauf- oder Unterlaufzustand eintritt.
  4. Grafikprozessor gemäß Anspruch 3, wobei die Double-Precision-Funktionseinheit des Weiteren dafür eingerichtet ist, ein Überlauf- oder Unterlaufergebnis, das einem Gleitkommaarithmetikstandard erfüllt, in dem Fall zu erzeugen, dass ein Überlauf- oder Unterlaufzustand eintritt, und eine Ausgabestatusmarkierung zu setzen, um anzuzeigen, ob der Überlauf- oder Unterlaufzustand eingetreten ist.
  5. Grafikprozessor gemäß Anspruch 1, wobei die Double-Precision-Funktionseinheit des Weiteren so eingerichtet ist, dass eine Zeit, die zum Vollenden einer der Mehrzahl von Double-Precision-Operationen erforderlich ist, nicht durch eine Floating Point Exception beeinflusst wird.
  6. Grafikprozessor gemäß Anspruch 1, wobei die Mehrzahl von Double-Precision-Operationen enthält: eine Additionsoperation, die zwei Double-Precision-Operanden addiert; eine Multiplikationsoperation, die zwei Double-Precision-Operanden multipliziert; und eine Operation des verschmolzenen Multiplizierens und Addierens, die ein Produkt eines ersten Double-Precision-Operanden und eines zweiten Double-Precision-Operanden berechnet und dann einen dritten Double-Precision-Operanden zu dem Produkt addiert.
  7. Grafikprozessor gemäß Anspruch 6, wobei die Mehrzahl von Double-Precision-Operationen des Weiteren eine Double-Precision-Vergleichs(DSET)-Operation enthält, die einen Vergleichstest an einem ersten Operanden und einem zweiten Operanden ausführt und ein Boolesches Ergebnis erzeugt, das anzeigt, ob der Vergleichstest bestanden ist.
  8. Grafikprozessor gemäß Anspruch 6, wobei die Mehrzahl von Double-Precision-Operationen des Weiteren enthält: eine Double-Precision-Maximum(DMAX)-Operation, die einen größeren von zwei Double-Precision-Eingabeoperanden zurückgibt; und eine Double-Precision-Minimum(DMIN)-Operation, die einen kleineren von zwei Double-Precision-Eingabeoperanden zurückgibt.
  9. Grafikprozessor gemäß Anspruch 6, wobei die Mehrzahl von Double-Precision-Operationen des Weiteren mindestens eine Formatumwandlungsoperation enthält, die einen Operanden aus einem Double-Precision-Format in ein Nicht-Double-Precision-Format umwandelt.
  10. Grafikprozessor gemäß Anspruch 6, wobei die Mehrzahl von Double-Precision-Operationen des Weiteren mindestens eine Formatumwandlungsoperation enthält, die einen Operanden aus einem Nicht-Double-Precision-Format in ein Double-Precision-Format umwandelt.
  11. Grafikprozessor gemäß einem der Ansprüche 1 bis 10,: wobei die Double-Precision-Funktionseinheit als eine Double-Precision-Funktionseinheit für verschmolzenes Multiplizieren und Addieren (DFMA) ausgebildet ist und dafür eingerichtet ist, eine Operation des verschmolzenen Multiplizierens und Addierens an einem Satz Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis bereitzustellen, wobei die DFMA-Funktionseinheit eine DFMA-Pipeline enthält, die Datenpfade aufweist, um die Operation des verschmolzenen Multiplizierens und Addierens in einem einzelnen Durchgang durch die DFMA-Pipeline durchzuführen.
  12. Grafikprozessor gemäß Anspruch 11, wobei die DFMA-Funktionseinheit enthält: einen Multiplizierer, der dafür eingerichtet ist, ein Produkt aus zwei Double-Precision-Mantissen in einer einzelnen Iteration zu berechnen; und einen Addierer, der dafür eingerichtet ist, eine Summe aus zwei Double-Precision-Mantissen in einer einzelnen Iteration zu berechnen.
  13. Grafikprozessor gemäß Anspruch 11, wobei die DFMA-Funktionseinheit des Weiteren dafür konfiguriert ist, eine Multiplikationsoperation an einem Paar Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis bereitzustellen.
  14. Grafikprozessor gemäß Anspruch 13, wobei die Multiplikationsoperation und die Operation des verschmolzenen Multiplizierens und Addierens jeweils in einer gleichen Anzahl von Taktzyklen vollendet werden.
  15. Grafikprozessor gemäß Anspruch 11, wobei die DFMA-Funktionseinheit des Weiteren dafür konfiguriert ist, eine Additionsoperation an einem Paar Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis bereitzustellen.
  16. Grafikprozessor gemäß Anspruch 15, wobei die Additionsoperation und die Operation des verschmolzenen Multiplizierens und Addierens jeweils in einer gleichen Anzahl von Taktzyklen vollendet werden.
  17. Grafikprozessor gemäß Anspruch 16, wobei: die DFMA-Funktionseinheit des Weiteren dafür konfiguriert ist, eine Multiplikationsoperation an einem Paar Double-Precision-Eingabeoperanden auszuführen und ein Double-Precision-Ergebnis bereitzustellen; und die Operation des verschmolzenen Multiplizierens und Addierens, die Additionsoperation und die Multiplikationsoperation jeweils in einer gleichen Anzahl von Taktzyklen vollendet werden, unabhängig davon, ob ein Überlauf- oder Unterlaufzustand eintritt.
  18. Grafikprozessor gemäß Anspruch 17, wobei die DFMA-Funktionseinheit des Weiteren dafür konfiguriert ist, ein Überlauf- oder Unterlaufergebnis, das einem Gleitkommaarithmetikstandard erfüllt, in dem Fall zu erzeugen, dass ein Überlauf- oder Unterlaufzustand eintritt, und eine Ausgabestatusmarkierung zu setzen, um anzuzeigen, ob der Überlauf- oder Unterlaufzustand eingetreten ist.
  19. Grafikprozessor gemäß Anspruch 11, wobei der Verarbeitungskern eine Anzahl (P) von Kopien der ersten Funktionseinheit, die dafür eingerichtet sind, parallel zu arbeiten, und eine Anzahl (N) von Kopien der DFMA-Funktionseinheit enthält.
  20. Grafikprozessor gemäß Anspruch 19, wobei die Anzahl P größer als die Anzahl N ist.
  21. Grafikprozessor gemäß Anspruch 20, wobei die Anzahl N eins ist.
  22. Grafikprozessor gemäß Anspruch 21, wobei der Verarbeitungskern des Weiteren einen Eingabeverwaltungsschaltkreis enthält, der dafür eingerichtet ist, P Sätze Double-Precision-Eingabeoperanden für die DFMA-Funktionseinheit zu sammeln und verschiedene der P Sätze Double-Precision-Operanden in verschiedenen Taktzyklen an die DFMA-Funktionseinheit zu übermitteln.
  23. Grafikprozessor gemäß Anspruch 22, wobei der Eingabeverwaltungsschaltkreis des Weiteren dafür eingerichtet ist, P Sätze Single-Precision-Eingabeoperanden für die erste Funktionseinheit zu sammeln und parallel dazu einen anderen der P Sätze Single-Precision-Operanden an jede der P Kopien der ersten Funktionseinheit zu übermitteln.
DE102008059371A 2007-12-07 2008-11-28 Funktionseinheit für verschmolzenes Multiplizieren und Addieren Active DE102008059371B9 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/952,858 2007-12-07
US11/952,858 US8106914B2 (en) 2007-12-07 2007-12-07 Fused multiply-add functional unit

Publications (3)

Publication Number Publication Date
DE102008059371A1 DE102008059371A1 (de) 2009-06-25
DE102008059371B4 true DE102008059371B4 (de) 2012-03-08
DE102008059371B9 DE102008059371B9 (de) 2012-06-06

Family

ID=40230776

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102008059371A Active DE102008059371B9 (de) 2007-12-07 2008-11-28 Funktionseinheit für verschmolzenes Multiplizieren und Addieren

Country Status (7)

Country Link
US (1) US8106914B2 (de)
JP (2) JP2009140491A (de)
KR (1) KR101009095B1 (de)
CN (1) CN101452571B (de)
DE (1) DE102008059371B9 (de)
GB (1) GB2455401B (de)
TW (1) TWI402766B (de)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190669B1 (en) 2004-10-20 2012-05-29 Nvidia Corporation Multipurpose arithmetic functional unit
US8037119B1 (en) 2006-02-21 2011-10-11 Nvidia Corporation Multipurpose functional unit with single-precision and double-precision operations
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US8477143B2 (en) 2008-03-04 2013-07-02 Apple Inc. Buffers for display acceleration
US8289333B2 (en) 2008-03-04 2012-10-16 Apple Inc. Multi-context graphics processing
US8633936B2 (en) 2008-04-21 2014-01-21 Qualcomm Incorporated Programmable streaming processor with mixed precision instruction execution
US8239441B2 (en) * 2008-05-15 2012-08-07 Oracle America, Inc. Leading zero estimation modification for unfused rounding catastrophic cancellation
US8495121B2 (en) * 2008-11-20 2013-07-23 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US20100125621A1 (en) * 2008-11-20 2010-05-20 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
KR101511273B1 (ko) * 2008-12-29 2015-04-10 삼성전자주식회사 멀티 코어 프로세서를 이용한 3차원 그래픽 렌더링 방법 및시스템
US8803897B2 (en) * 2009-09-03 2014-08-12 Advanced Micro Devices, Inc. Internal, processing-unit memory for general-purpose use
US8990282B2 (en) * 2009-09-21 2015-03-24 Arm Limited Apparatus and method for performing fused multiply add floating point operation
US8745111B2 (en) 2010-11-16 2014-06-03 Apple Inc. Methods and apparatuses for converting floating point representations
KR101735677B1 (ko) 2010-11-17 2017-05-16 삼성전자주식회사 부동 소수점의 복합 연산장치 및 그 연산방법
US8752064B2 (en) * 2010-12-14 2014-06-10 Advanced Micro Devices, Inc. Optimizing communication of system call requests
US8965945B2 (en) * 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
DE102011108754A1 (de) * 2011-07-28 2013-01-31 Khs Gmbh Inspektionseinheit
CN102750663A (zh) * 2011-08-26 2012-10-24 新奥特(北京)视频技术有限公司 一种基于gpu的地理信息数据处理的方法、设备和系统
US9792087B2 (en) 2012-04-20 2017-10-17 Futurewei Technologies, Inc. System and method for a floating-point format for digital signal processors
US9110713B2 (en) 2012-08-30 2015-08-18 Qualcomm Incorporated Microarchitecture for floating point fused multiply-add with exponent scaling
US9152382B2 (en) 2012-10-31 2015-10-06 Intel Corporation Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values
US9665973B2 (en) * 2012-11-20 2017-05-30 Intel Corporation Depth buffering
US9019284B2 (en) 2012-12-20 2015-04-28 Nvidia Corporation Input output connector for accessing graphics fixed function units in a software-defined pipeline and a method of operating a pipeline
US9123128B2 (en) * 2012-12-21 2015-09-01 Nvidia Corporation Graphics processing unit employing a standard processing unit and a method of constructing a graphics processing unit
US9317251B2 (en) 2012-12-31 2016-04-19 Nvidia Corporation Efficient correction of normalizer shift amount errors in fused multiply add operations
GB2511314A (en) 2013-02-27 2014-09-03 Ibm Fast fused-multiply-add pipeline
US9389871B2 (en) 2013-03-15 2016-07-12 Intel Corporation Combined floating point multiplier adder with intermediate rounding logic
US9465578B2 (en) * 2013-12-13 2016-10-11 Nvidia Corporation Logic circuitry configurable to perform 32-bit or dual 16-bit floating-point operations
US10297001B2 (en) * 2014-12-26 2019-05-21 Intel Corporation Reduced power implementation of computer instructions
KR102276910B1 (ko) 2015-01-06 2021-07-13 삼성전자주식회사 테셀레이션 장치 및 방법
US11847427B2 (en) 2015-04-04 2023-12-19 Texas Instruments Incorporated Load store circuit with dedicated single or dual bit shift circuit and opcodes for low power accelerator processor
US9817791B2 (en) * 2015-04-04 2017-11-14 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word
US9952865B2 (en) 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US10152310B2 (en) * 2015-05-27 2018-12-11 Nvidia Corporation Fusing a sequence of operations through subdividing
US10503474B2 (en) 2015-12-31 2019-12-10 Texas Instruments Incorporated Methods and instructions for 32-bit arithmetic support using 16-bit multiply and 32-bit addition
US10387988B2 (en) * 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10282169B2 (en) 2016-04-06 2019-05-07 Apple Inc. Floating-point multiply-add with down-conversion
US10157059B2 (en) * 2016-09-29 2018-12-18 Intel Corporation Instruction and logic for early underflow detection and rounder bypass
US10401412B2 (en) 2016-12-16 2019-09-03 Texas Instruments Incorporated Line fault signature analysis
US10275391B2 (en) 2017-01-23 2019-04-30 International Business Machines Corporation Combining of several execution units to compute a single wide scalar result
GB2560766B (en) * 2017-03-24 2019-04-03 Imagination Tech Ltd Floating point to fixed point conversion
US10417734B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10489877B2 (en) 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
CN108595369B (zh) * 2018-04-28 2020-08-25 天津芯海创科技有限公司 算式并行计算装置及方法
US10635439B2 (en) * 2018-06-13 2020-04-28 Samsung Electronics Co., Ltd. Efficient interface and transport mechanism for binding bindless shader programs to run-time specified graphics pipeline configurations and objects
CN108958705B (zh) * 2018-06-26 2021-11-12 飞腾信息技术有限公司 一种支持混合数据类型的浮点融合乘加器及其应用方法
US11093579B2 (en) * 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11455766B2 (en) * 2018-09-18 2022-09-27 Advanced Micro Devices, Inc. Variable precision computing system
JP7115211B2 (ja) * 2018-10-18 2022-08-09 富士通株式会社 演算処理装置および演算処理装置の制御方法
JP7408671B2 (ja) 2019-03-15 2024-01-05 インテル コーポレイション シストリックアレイに対するブロックスパース演算のためのアーキテクチャ
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US20220179787A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for improving cache efficiency and utilization
US10990389B2 (en) * 2019-04-29 2021-04-27 Micron Technology, Inc. Bit string operations using a computing tile
US11016765B2 (en) * 2019-04-29 2021-05-25 Micron Technology, Inc. Bit string operations using a computing tile
US11907713B2 (en) * 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
CN111610955B (zh) * 2020-06-28 2022-06-03 中国人民解放军国防科技大学 一种数据饱和加打包处理部件、芯片及设备

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5241638A (en) * 1985-08-12 1993-08-31 Ceridian Corporation Dual cache memory
JPS6297060A (ja) 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US4893268A (en) 1988-04-15 1990-01-09 Motorola, Inc. Circuit and method for accumulating partial products of a single, double or mixed precision multiplication
US4972362A (en) * 1988-06-17 1990-11-20 Bipolar Integrated Technology, Inc. Method and apparatus for implementing binary multiplication using booth type multiplication
US5287511A (en) * 1988-07-11 1994-02-15 Star Semiconductor Corporation Architectures and methods for dividing processing tasks into tasks for a programmable real time signal processor and tasks for a decision making microprocessor interfacing therewith
US4969118A (en) 1989-01-13 1990-11-06 International Business Machines Corporation Floating point unit for calculating A=XY+Z having simultaneous multiply and add
JPH0378083A (ja) * 1989-08-21 1991-04-03 Hitachi Ltd 倍精度演算方式及び積和演算装置
JPH03100723A (ja) * 1989-09-13 1991-04-25 Fujitsu Ltd 精度変換命令の処理方式
US5241636A (en) 1990-02-14 1993-08-31 Intel Corporation Method for parallel instruction execution in a computer
US5068816A (en) 1990-02-16 1991-11-26 Noetzel Andrew S Interplating memory function evaluation
DE69129569T2 (de) * 1990-09-05 1999-02-04 Philips Electronics Nv Maschine mit sehr langem Befehlswort für leistungsfähige Durchführung von Programmen mit bedingten Verzweigungen
JPH0612229A (ja) 1992-06-10 1994-01-21 Nec Corp 乗累算回路
EP0576262B1 (de) 1992-06-25 2000-08-23 Canon Kabushiki Kaisha Gerät zum Multiplizieren von Ganzzahlen mit vielen Ziffern
JPH0659862A (ja) * 1992-08-05 1994-03-04 Fujitsu Ltd 乗算器
US5581778A (en) * 1992-08-05 1996-12-03 David Sarnoff Researach Center Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock
EP0622727A1 (de) 1993-04-29 1994-11-02 International Business Machines Corporation System für die Optimierung der Argumentreduzierung
EP0645699A1 (de) * 1993-09-29 1995-03-29 International Business Machines Corporation Instruktionsfolge zur Hochgeschwindigkeits-Multiplizierung-Addierung in einem Pipeline-Gleitkommaprozessor
US5487022A (en) * 1994-03-08 1996-01-23 Texas Instruments Incorporated Normalization method for floating point numbers
US5673407A (en) * 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
US5553015A (en) 1994-04-15 1996-09-03 International Business Machines Corporation Efficient floating point overflow and underflow detection system
US5734874A (en) 1994-04-29 1998-03-31 Sun Microsystems, Inc. Central processing unit with integrated graphics functions
JP3493064B2 (ja) 1994-09-14 2004-02-03 株式会社東芝 バレルシフタ
US5548545A (en) * 1995-01-19 1996-08-20 Exponential Technology, Inc. Floating point exception prediction for compound operations and variable precision using an intermediate exponent bus
US5701405A (en) 1995-06-21 1997-12-23 Apple Computer, Inc. Method and apparatus for directly evaluating a parameter interpolation function used in rendering images in a graphics system that uses screen partitioning
US5778247A (en) 1996-03-06 1998-07-07 Sun Microsystems, Inc. Multi-pipeline microprocessor with data precision mode indicator
JP3790307B2 (ja) 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US6490607B1 (en) 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
US6061781A (en) * 1998-07-01 2000-05-09 Ip First Llc Concurrent execution of divide microinstructions in floating point unit and overflow detection microinstructions in integer unit for integer divide
JP2000081966A (ja) * 1998-07-09 2000-03-21 Matsushita Electric Ind Co Ltd 演算装置
JP3600026B2 (ja) 1998-08-12 2004-12-08 株式会社東芝 浮動小数点演算器
US6317133B1 (en) 1998-09-18 2001-11-13 Ati Technologies, Inc. Graphics processor with variable performance characteristics
US6480872B1 (en) 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
JP2000293494A (ja) * 1999-04-09 2000-10-20 Fuji Xerox Co Ltd 並列計算装置および並列計算方法
JP2001236206A (ja) * 1999-10-01 2001-08-31 Hitachi Ltd データのロード方法及びその記憶方法、データワードのロード方法及びその記憶方法、並びに、浮動小数点数の比較方法
US6198488B1 (en) * 1999-12-06 2001-03-06 Nvidia Transform, lighting and rasterization system embodied on a single semiconductor platform
US6807620B1 (en) * 2000-02-11 2004-10-19 Sony Computer Entertainment Inc. Game system with graphics processor
US6557022B1 (en) 2000-02-26 2003-04-29 Qualcomm, Incorporated Digital signal processor with coupled multiply-accumulate units
US6912557B1 (en) 2000-06-09 2005-06-28 Cirrus Logic, Inc. Math coprocessor
JP2002008060A (ja) * 2000-06-23 2002-01-11 Hitachi Ltd データ処理方法、記録媒体及びデータ処理装置
US6976043B2 (en) 2001-07-30 2005-12-13 Ati Technologies Inc. Technique for approximating functions based on lagrange polynomials
JP3845009B2 (ja) 2001-12-28 2006-11-15 富士通株式会社 積和演算装置、及び積和演算方法
JP2003223316A (ja) 2002-01-31 2003-08-08 Matsushita Electric Ind Co Ltd 演算処理装置
US7971030B2 (en) * 2002-08-07 2011-06-28 Mmagix Technology Limited Method for using multiple processing resources which share multiple co-processor resources
US8549501B2 (en) * 2004-06-07 2013-10-01 International Business Machines Corporation Framework for generating mixed-mode operations in loop-level simdization
US7437538B1 (en) * 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7640285B1 (en) 2004-10-20 2009-12-29 Nvidia Corporation Multipurpose arithmetic functional unit
JP4891252B2 (ja) * 2004-11-10 2012-03-07 エヌヴィディア コーポレイション 汎用乗算加算機能ユニット
KR20060044124A (ko) * 2004-11-11 2006-05-16 삼성전자주식회사 3차원 그래픽 가속을 위한 그래픽 시스템 및 메모리 장치
JP4571903B2 (ja) * 2005-12-02 2010-10-27 富士通株式会社 演算処理装置,情報処理装置,及び演算処理方法
US7728841B1 (en) 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US7747842B1 (en) * 2005-12-19 2010-06-29 Nvidia Corporation Configurable output buffer ganging for a parallel processor
US7484076B1 (en) * 2006-09-18 2009-01-27 Nvidia Corporation Executing an SIMD instruction requiring P operations on an execution unit that performs Q operations at a time (Q<P)
US7617384B1 (en) * 2006-11-06 2009-11-10 Nvidia Corporation Structured programming control flow using a disable mask in a SIMD architecture
JP4954799B2 (ja) 2007-06-05 2012-06-20 日本発條株式会社 衝撃吸収装置
US8775777B2 (en) * 2007-08-15 2014-07-08 Nvidia Corporation Techniques for sourcing immediate values from a VLIW
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit

Also Published As

Publication number Publication date
DE102008059371B9 (de) 2012-06-06
JP2009140491A (ja) 2009-06-25
KR101009095B1 (ko) 2011-01-18
TWI402766B (zh) 2013-07-21
GB2455401B (en) 2010-05-05
CN101452571A (zh) 2009-06-10
GB0821495D0 (en) 2008-12-31
US20090150654A1 (en) 2009-06-11
TW200937341A (en) 2009-09-01
US8106914B2 (en) 2012-01-31
DE102008059371A1 (de) 2009-06-25
JP2012084142A (ja) 2012-04-26
GB2455401A (en) 2009-06-10
CN101452571B (zh) 2012-04-25
KR20090060207A (ko) 2009-06-11

Similar Documents

Publication Publication Date Title
DE102008059371B4 (de) Funktionseinheit für verschmolzenes Multiplizieren und Addieren
DE19540102C2 (de) Verfahren und Gleitkomma-Recheneinheit mit einer Logik für eine Vierfach-Präzisions-Arithmetik
DE102018119225A1 (de) System und Verfahren für einen optimierten Winograd-Faltungsbeschleuniger
DE102018110607A1 (de) Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
DE102013111605A1 (de) Reduzierung des Leistungsverbrauchs in einer fusionierten Multiplizier-Addier-(FMA)-Einheit in Reaktion auf Eingangsdatenwerte
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE112006003875T5 (de) Gleitkommaaddition für unterschiedliche Gleitkommaformate
DE112011103213T5 (de) Durchführen einer Multiplizier-Multiplizier-Akkumulier-Instruktion
DE102009030525A1 (de) Effizientes Paralleles Behandeln von Gleitkomma-Ausnahmen in einem Prozessor
DE112018005527T5 (de) Automatisches aufwecken von leistungsdomänen fürgrafikkonfigurationsanforderungen
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112017001845T5 (de) Strahltraversierung mit reduzierter Genauigkeit mit Wiederverwendung von Ebenen
DE102020108476A1 (de) Mechanismus zum Ausführen nichtlinearer Funktionen in einem Beschleuniger des maschinellen Lernens
DE102014002510A1 (de) Präzise Ausnahmesignalisierung für Mehrfachdatenarchitektur
DE102019117545A1 (de) Reduzierung von registerbankkonflikten für ausführungseinheiten eines multithread-prozessors
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102020105902A1 (de) Hardware-indexzuordnungsmechanismus
DE102020107828A1 (de) Komprimierung für spärliche datenstrukturen unter verwendung von modus-suchannäherung
DE102020108411A1 (de) Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit
DE112017004550T5 (de) Auf minimum/maximum und bitweiser und/oder basierter grober schablonentest
DE102019123443A1 (de) Mechanismus zum gemeinsamen Benutzen von Registern
DE102019124705A1 (de) Multiphasenarchitektur für Mehrraten-Pixelschattierung
DE102019120922A1 (de) Vorrichtung und verfahren für multifrequenz-vertex-shadinghintergrund
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final

Effective date: 20120609

R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE