DE102021121732A1 - Vektorprozessorarchitekturen - Google Patents

Vektorprozessorarchitekturen Download PDF

Info

Publication number
DE102021121732A1
DE102021121732A1 DE102021121732.6A DE102021121732A DE102021121732A1 DE 102021121732 A1 DE102021121732 A1 DE 102021121732A1 DE 102021121732 A DE102021121732 A DE 102021121732A DE 102021121732 A1 DE102021121732 A1 DE 102021121732A1
Authority
DE
Germany
Prior art keywords
vector
vector processing
operations
vectors
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102021121732.6A
Other languages
English (en)
Inventor
Martin Langhammer
Eriko Nurvitadhi
Gregg Baeckler
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102021121732A1 publication Critical patent/DE102021121732A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • G06F30/347Physical level, e.g. placement or routing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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
    • 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/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Abstract

Die vorliegende Offenbarung betrifft eine IC-Einrichtung, die eine Vielzahl von Vektorregistern, die zum Speichern einer Vielzahl von Vektoren konfigurierbar ist, und Schalterschalttechnik, die kommunikativ mit der Vielzahl von Vektorregistern gekoppelt ist, beinhaltet. Die Schalterschalttechnik ist dazu konfigurierbar, einen Teil der Vielzahl von Vektoren zu routen. Zudem beinhaltet die IC-Einrichtung eine Vielzahl von Vektorverarbeitungseinheiten, die kommunikativ mit der Schalterschalttechnik gekoppelt ist. Die Vielzahl von Vektorverarbeitungseinheiten ist konfigurierbar, um den Teil der Vielzahl von Vektoren zu empfangen, eine oder mehrere Operationen durchzuführen, die den Teil der Vielzahl von Vektoreingaben beinhalten, und eine zweite Vielzahl von Vektoren auszugeben, die durch das Durchführen der einen oder der mehreren Operationen erzeugt werden.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung beansprucht die Priorität der US-Anmeldung Nr. 63/072,095 , eingereicht am 28. August 2020, mit dem Titel „Vector Processor Architectures“ (Vektorprozessorarchitekturen), die durch Bezugnahme in ihrer Gesamtheit für alle Zwecke aufgenommen wird.
  • HINTERGRUND
  • Diese Offenbarung betrifft allgemein integrierte Schaltungen (integrated circuits, ICs), wie etwa frei programmierbare Gate-Arrays (FPGAs), die Schalttechnik zum Implementieren einer Vektorprozessorarchitektur beinhalten. Insbesondere betrifft die vorliegende Offenbarung Verarbeitungsschalttechnik, die die Vektorprozessorarchitektur auf einer IC-Einrichtung implementieren kann, sowie Anwendungen, die unter Verwendung der Verarbeitungsschalttechnik durchgeführt werden können.
  • Dieser Abschnitt soll dem Leser verschiedene Aspekte der Technik vorstellen, die mit verschiedenen Aspekten der vorliegenden Offenbarung verwandt sein können, die im Folgenden beschrieben und/oder beansprucht sind. Es wird angenommen, dass diese Erörterung dabei hilfreich ist, den Leser mit Hintergrundinformationen zu versorgen, um ein besseres Verständnis der verschiedenen Aspekte der vorliegenden Offenbarung zu erleichtern. Dementsprechend kann verstanden werden, dass diese Aussagen in dieser Hinsicht, und nicht als Zugeständnisse des Stands der Technik zu lesen sind.
  • IC-Einrichtungen können für eine Vielfalt von Zwecken oder Anwendungen genutzt werden, wie etwa digitale Signalverarbeitung und maschinelles Lernen. Tatsächlich setzen sich Maschinenlern- und KI-Anwendungen immer mehr durch. IC-Einrichtungen, wie etwa programmierbare Logikeinrichtungen, können genutzt werden, um diese Funktionen durchzuführen, zum Beispiel unter Verwendung spezieller Schalttechnik (z.B. Verarbeitungsblöcke). Zum Beispiel können IC-Einrichtungen eine spezielle Schalttechnik für Zwecke der künstlichen Intelligenz (KI) und/oder des maschinellen Lernens nutzen.
  • Figurenliste
  • Verschiedene Aspekte dieser Offenbarung können beim Lesen der folgenden ausführlichen Beschreibung und unter Bezugnahme auf die Zeichnungen besser verstanden werden, in denen gilt:
    • 1 ist ein Blockdiagramm eines Systems, das arithmetische Operationen unter Verwendung eines Vektorverarbeitungssystems implementieren kann, gemäß einer Ausführungsform;
    • 2 ist ein Blockdiagramm einer veranschaulichenden Schalttechnik, die in der IC-Einrichtung aus 1 enthalten sein kann, gemäß einer Ausführungsform;
    • 3 ist ein Blockdiagramm eines Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 4 ist ein Blockdiagramm eines weiteren Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 5 ist ein Blockdiagramm einer ersten Vektorverarbeitungseinheit gemäß einer Ausführungsform;
    • 6 ist ein Blockdiagramm einer zweiten Vektorverarbeitungseinheit gemäß einer Ausführungsform;
    • 7 ist ein Blockdiagramm einer dritten Vektorverarbeitungseinheit gemäß einer Ausführungsform;
    • 8 ist ein Blockdiagramm einer vierten Vektorverarbeitungseinheit gemäß einer Ausführungsform;
    • 9 ist ein Blockdiagramm einer fünften Vektorverarbeitungseinheit gemäß einer Ausführungsform;
    • 10 ist ein Blockdiagramm einer sechsten Vektorverarbeitungseinheit gemäß einer Ausführungsform;
    • 11 ist ein Blockdiagramm einer Vektorverarbeitungseinheit, die zum Durchführen einer Reduktionsoperation verwendet wird, gemäß einer Ausführungsform;
    • 12 veranschaulicht eine Batch-Normalisierungsfunktion und eine Softmax-Operation gemäß einer Ausführungsform;
    • 13 ist ein Blockdiagramm eines Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 14 ist ein Blockdiagramm eines weiteren Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 15 ist ein Blockdiagramm einer Schalttechnik, die genutzt werden kann, um eine Horner-Regel-Pipeline durchzuführen, gemäß einer Ausführungsform;
    • 16 ist ein Blockdiagramm eines weiteren Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 17 ist ein Blockdiagramm eines weiteren Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 18 veranschaulicht, wie Division und inverse Quadratwurzel unter Verwendung von Funktionseinheiten durchgeführt werden können, die in einem Vektorverarbeitungssystem enthalten sind, gemäß einer Ausführungsform;
    • 19 veranschaulicht Schalttechnik, die in einer Funktionseinheit eines Vektorverarbeitungssystems enthalten sein kann, sowie Operationen, die die Schalttechnik durchführen kann, gemäß einer Ausführungsform;
    • 20 ist ein Blockdiagramm einer Kette von Funktionseinheiten eines Vektorverarbeitungssystems, das zum Durchführen einer Reduktionsoperation verwendet wird, gemäß einer Ausführungsform;
    • 21 ist ein Blockdiagramm einer ersten Registerdateiorganisation gemäß einer Ausführungsform;
    • 22 ist ein Blockdiagramm einer zweiten Registerdateiorganisation gemäß einer Ausführungsform;
    • 23 ist ein Blockdiagramm einer dritten Registerdateiorganisation gemäß einer Ausführungsform;
    • 24 veranschaulicht das Verwenden von Lanes (Kanälen) zum Skalieren der Leistung der Vektorberechnungseinheiten von Vektorverarbeitungssystemen gemäß einer Ausführungsform;
    • 25 veranschaulicht Lanes, die jeweils vollständig kaskadierte Sätze von Funktionseinheiten beinhalten, die zum Durchführen einer GELU-Operation genutzt werden, gemäß einer Ausführungsform;
    • 26 veranschaulicht eine andere Implementierung der GELU-Funktion, bei der Lanes jeweils Teile einer einzelnen GELU-Operation durchführen, um eine Ausgabe zu erzeugen, gemäß einer Ausführungsform;
    • 27 ist ein Blockdiagramm einer weiteren Lane, die verwendet werden kann, um eine GELU-Operation durchzuführen, gemäß einer Ausführungsform;
    • 28 veranschaulicht eine erste Art des Stapelns von Vektorregistern gemäß einer Ausführungsform;
    • 29 veranschaulicht eine zweite Art des Stapelns von Vektorregistern gemäß einer Ausführungsform;
    • 30 veranschaulicht, wie Schalttechnik innerhalb einer Vektorverarbeitungseinheit gesteuert werden kann, gemäß einer Ausführungsform;
    • 31 veranschaulicht, wie Schalttechnik innerhalb einer Vektorverarbeitungseinheit gesteuert werden kann, gemäß einer Ausführungsform;
    • 32 veranschaulicht, wie Schalttechnik innerhalb einer Vektorverarbeitungseinheit gesteuert werden kann, gemäß einer Ausführungsform;
    • 33A veranschaulicht die Zeitsteuerung der Ausführung von zwei Anweisungen, wenn keine Verkettung eingesetzt wird, gemäß einer Ausführungsform;
    • 33B veranschaulicht die Zeitsteuerung der Ausführung von zwei Anweisungen, wenn Verkettung eingesetzt wird, gemäß einer Ausführungsform;
    • 34 ist ein Blockdiagramm einer Architektur, die Verkettung ermöglichen kann, gemäß einer Ausführungsform;
    • 35 veranschaulicht Verkettung über eine Registerdatei gemäß einer Ausführungsform;
    • 36 veranschaulicht eine verkettete Akkumulationsoperation gemäß einer Ausführungsform;
    • 37 zeigt eine Architekturunterstützung zur Verkettung gemäß einer Ausführungsform;
    • 38A veranschaulicht die Zeitsteuerung der Ausführung von zwei Anweisungen, wenn kein Tailgating eingesetzt wird, gemäß einer Ausführungsform;
    • 38B veranschaulicht die Zeitsteuerung der Ausführung von zwei Anweisungen, wenn kein Tailgating eingesetzt wird, gemäß einer Ausführungsform;
    • 39 veranschaulicht einen Architekturansatz zum Tailgating, bei dem Steuerlogik einen Index zuletzt gelesener Elemente beibehält, gemäß einer Ausführungsform;
    • 40 veranschaulicht ein Flag-Register gemäß einer Ausführungsform;
    • 41 veranschaulicht eine bedingte Vektor-unmittelbare Anweisung gemäß einer Ausführungsform;
    • 42 veranschaulicht eine bedingte Flag-Anweisung gemäß einer Ausführungsform;
    • 43 veranschaulicht eine bedingte Vektorskalar-Anweisung gemäß einer Ausführungsform;
    • 44 veranschaulicht eine bedingte Vektor-Vektor-Anweisung gemäß einer Ausführungsform;
    • 45 veranschaulicht ein Codebeispiel einer bedingten Ausführung gemäß einer Ausführungsform;
    • 46 veranschaulicht, wie ein Flag verwendet werden kann, wenn eine bedingte Ausführung durchgeführt wird, gemäß einer Ausführungsform;
    • 47 veranschaulicht ein Beispiel dafür, wann Flags durch eine Lane oder ein Vektorverarbeitungssystem erzeugt werden, gemäß einer Ausführungsform;
    • 48 veranschaulicht die Verwendung von Flags beim Durchführen einer bedingten Ausführung gemäß einer Ausführungsform;
    • 49 veranschaulicht ein weiteres Beispiel der Verwendung von Flags beim Durchführen einer bedingten Ausführung gemäß einer Ausführungsform;
    • 50 veranschaulicht eine Durchführung einer Tensoroperation gemäß einer Ausführungsform;
    • 51 ist ein Blockdiagramm eines Vektorverarbeitungssystems, das Tensoreinheiten beinhaltet, gemäß einer Ausführungsform;
    • 52A ist ein Blockdiagramm von Tensoreinheiten über vier Vektorberechnungseinheiten eines Vektorverarbeitungssystems, die verbunden sind, gemäß einer Ausführungsform;
    • 52B ist ein Blockdiagramm von Paaren von Vektorberechnungseinheiten, die miteinander verbunden sind, gemäß einer Ausführungsform;
    • 53 veranschaulicht Breiten-Stitching (width stitching) von Speicherbänken gemäß einer Ausführungsform;
    • 54 veranschaulicht Tiefen-Stitching (depth stitching) von Speicherbänken gemäß einer Ausführungsform;
    • 55 veranschaulicht 32-Bit-Wörter, die Werte mit mehreren unterschiedlichen Datenformaten beinhalten, gemäß einer Ausführungsform;
    • 56 ist ein Flussdiagramm eines Prozesses zum Erzeugen eines Programmdesigns, das auf der IC-Einrichtung aus 1 implementiert werden kann, gemäß einer Ausführungsform;
    • 57 veranschaulicht Gruppierungen von Vektorregistern gemäß einer Ausführungsform;
    • 58 veranschaulicht Wörter, die markiert wurden, um ein Format von in den Wörtern enthaltenen Daten anzugeben, gemäß einer Ausführungsform;
    • 59 veranschaulicht das Angeben von Datenformaten unter Verwendung von Additionsfeldern innerhalb von Befehlswörtern gemäß einer Ausführungsform;
    • 60 ist ein Blockdiagramm von drei Gruppen von Registern gemäß einer Ausführungsform;
    • 61 ist ein Blockdiagramm einer Schalttechnik, die zum Durchführen von Umwandlung (casting) verwendet werden kann, gemäß einer Ausführungsform;
    • 62 veranschaulicht Schalttechnik, die in einer Lane eines Vektorverarbeitungssystems enthalten sein kann, gemäß einer Ausführungsform;
    • 63 veranschaulicht unabhängige Steuerung von Schreibsteuersignalen für Speicherblöcke gemäß einer Ausführungsform;
    • 64 veranschaulicht Schalttechnik, die genutzt werden kann, um reguläre Schreibmuster und diagonale Schreibmuster zu implementieren, gemäß einer Ausführungsform;
    • 65 veranschaulicht ein reguläres Schreibmuster gemäß einer Ausführungsform;
    • 66 veranschaulicht ein diagonales Schreibmuster gemäß einer Ausführungsform;
    • 67 veranschaulicht Vektordaten, die mit Tags versehen wurden, um mehr Datentypen anzuzeigen, die in den Vektordaten enthalten sind, gemäß einer Ausführungsform;
    • 68 veranschaulicht Routing von vier Datenquellen zu einer Vektorregisterdatei gemäß einer Ausführungsform;
    • 69 ist ein Blockdiagramm einer Baumstruktur gemäß einer Ausführungsform;
    • 70A ist ein Blockdiagramm einer ersten Ringstruktur gemäß einer Ausführungsform;
    • 70B ist ein Blockdiagramm einer zweiten Ringstruktur gemäß einer Ausführungsform;
    • 71 ist ein Blockdiagramm einer dritten Ringstruktur gemäß einer Ausführungsform;
    • 72 veranschaulicht Latenzen, die mit verschiedenen Arten von Schalttechnik verbunden sind, die in einer Lane enthalten sein können, gemäß einer Ausführungsform;
    • 73 ist ein Blockdiagramm von acht Lanes und Kombinationsschalttechnik, die genutzt werden kann, um die Ausgänge der acht Lanes zu kombinieren, gemäß einer Ausführungsform;
    • 74 ist ein Blockdiagramm zu Implementierungen von Lanes eines Vektorverarbeitungssystems gemäß einer Ausführungsform;
    • 75A ist ein Blockdiagramm einer Lane, die in einer Vektorverarbeitungseinheit enthalten sein kann, gemäß einer Ausführungsform;
    • 75B ist ein Blockdiagramm einer Lane, die Hardware beinhaltet, die für eine intrinsische Operation spezifisch ist, gemäß einer Ausführungsform;
    • 76 ist ein Flussdiagramm eines Prozesses zum Kompilieren von Quellcode gemäß einer Ausführungsform;
    • 77 ist ein Blockdiagramm eines Vektorverarbeitungssystems gemäß einer Ausführungsform; und
    • 78 ist ein Blockdiagramm eines Datenverarbeitungssystems, das die IC-Einrichtung aus 1 beinhaltet, gemäß einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG SPEZIFISCHER AUSFÜHRUNGSFORMEN
  • Eine oder mehrere spezifische Ausführungsformen werden im Folgenden beschrieben. Um eine kompakte Beschreibung dieser Ausführungsformen bereitzustellen, sind nicht alle Merkmale einer tatsächlichen Implementierung in der Beschreibung beschrieben. Es sollte verstanden werden, dass bei der Entwicklung einer beliebigen derartigen tatsächlichen Implementierung, wie bei einem beliebigen Technik- oder Gestaltungsprojekt, zahlreiche implementierungsspezifische Entscheidungen getroffen werden müssen, um die speziellen Ziele der Entwickler zu erreichen, wie etwa eine Einhaltung von systembezogenen und geschäftsbezogenen Einschränkungen, die von einer Implementierung zu einer anderen variieren können. Darüber hinaus sollte verstanden werden, dass ein solcher Entwicklungsaufwand komplex und zeitaufwendig sein könnte, aber nichtsdestotrotz für einen Durchschnittsfachmann, der diese Offenbarung nutzt, ein routinemäßiges Gestaltungs-, Fertigungs- und Herstellungsunterfangen darstellen würde.
  • Wenn Elemente verschiedener Ausführungsformen der vorliegenden Offenbarung eingeführt werden, sollen die Artikel „ein/e“ und „der/die/das“ bedeuten, dass eines oder mehrere der Elemente vorhanden sind. Die Ausdrücke „umfassend“, „einschließlich“ bzw. „beinhaltend“ und „aufweisend“ sollen inklusiv sein und bedeuten, dass es zusätzliche Elemente außer den aufgelisteten geben kann. Außerdem versteht es sich, dass Bezugnahmen auf „eine Ausführungsform“ der vorliegenden Offenbarung nicht als die Existenz zusätzlicher Ausführungsformen, die die genannten Merkmale ebenfalls einbinden, ausschließend interpretiert werden soll. Des Weiteren soll der Ausdruck A „basierend auf“ B bedeuten, dass A zumindest teilweise auf B basiert, darüber hinaus soll der Begriff „or“, sofern nicht ausdrücklich anders angegeben, inklusiv (z.B. logisches OR) und nicht exklusiv (z.B. logisches XOR) sein. Mit anderen Worten soll der Ausdruck A „oder“ B A, B oder sowohl A als auch B bedeuten.
  • Diese Offenbarung beschreibt Vektorverarbeitungssysteme, die in Anwendungen künstlicher Intelligenz und/oder des maschinellem Lernens genutzt werden können. Beispielsweise können die hier beschriebenen Vektorverarbeitungssysteme genutzt werden, um Operationen durchzuführen, die Vektoren und Skalare involvieren, wie etwa Multiplikations-, Additions-, Subtraktions- und Divisionsoperationen, die einen oder mehrere Vektoren und/oder Skalare involvieren. Wie hier auch beschrieben, können Vektorverarbeitungssysteme Vektorverarbeitungseinheiten beinhalten, die diese Operationen durchführen können.
  • Insbesondere bespricht diese Offenbarung Vektorverarbeitungssysteme (z.B. Vektorprozessoren), die auf IC-Einrichtungen implementiert werden können, einschließlich programmierbarer Logikeinrichtungen, wie etwa frei programmierbaren Gate-Arrays (FPGAs). Wie hier besprochen, können die Vektorverarbeitungssysteme harte Logik und weiche Logik eines FPGA zum Durchführen einer Vektorverarbeitung nutzen. Wie hier verwendet, verweist „harte Logik“ allgemein auf Teile einer IC-Einrichtung (z.B. einer programmierbaren Logikeinrichtung), die nicht durch einen Endbenutzer programmierbar sind, während die Teile der IC-Einrichtung, die durch den Endbenutzer programmierbar sind, als „weiche Logik“ betrachtet werden. Harte Logikelemente in einem FPGA können zum Beispiel Arithmetikeinheiten (z.B. DSP- (Digital Signal Processing, digitale Signalverarbeitung) Blöcke) beinhalten, die in einem FPGA enthalten sind und durch den Endbenutzer unveränderbar sind. Vektorverarbeitungseinheiten, die Operationen durchführen (z.B. Vektorrechenoperationen), können als harte Logik auf einem FPGA implementiert sein, das in der Lage ist, die spezifischen Operationen mit einer relativ höheren Effizienz durchzuführen (z.B. im Vergleich zum Durchführen der Operationen unter Verwendung weicher Logik). Zu verarbeitende Werte, wie Vektoren oder Skalare, können aus einem Speicher, der in dem FPGA enthalten ist, gelesen und in diesem gespeichert werden. Das heißt, eine IC-Einrichtung kann einen Speicher beinhalten, der ein „hartes“ Merkmal ist, was bedeutet, dass der Speicher auf der IC-Einrichtung enthalten ist (z.B. wenn sie einem Endbenutzer bereitgestellt wird). Wie auch unten besprochen, kann Routing zwischen den Vektorverarbeitungseinheiten und dem Speicher unter Verwendung einer Kombination von harter Logik und weicher Logik implementiert werden. Dementsprechend nutzen die unten beschriebenen Techniken die Flexibilität von Weichlogik- und harten Merkmalen (z.B. Hartlogik- und Speicherblöcke) von FPGAs, um anpassbare und effiziente Vektorverarbeitungsarchitekturfähigkeiten bereitzustellen.
  • Vor diesem Hintergrund veranschaulicht 1 ein Blockdiagramm eines Systems 10, das arithmetische Operationen unter Verwendung eines Vektorverarbeitungssystems (VPS, vector processing system) 26 implementieren kann. Ein Entwickler möchte möglicherweise Funktionalität, wie etwa die hochpräzisen arithmetischen Operationen dieser Offenbarung, auf einer IC-Einrichtung 12 (wie etwa einem FPGA oder einer anwendungsspezifischen integrierten Schaltung (ASIC)) implementieren. In manchen Fällen kann der Entwickler ein zu implementierendes Programm hoher Ebene (high-level) spezifizieren, wie etwa ein OpenCL-Programm, was dem Entwickler ermöglichen kann, Programmieranweisungen effizienter und leichter bereitzustellen, um einen Satz programmierbarer Logikzellen für die IC-Einrichtung 12 ohne spezifische Kenntnis von Hardwarebeschreibungssprachen niedriger Ebene (low-level) (z. B. Verilog oder VHDL) zu konfigurieren. Weil OpenCL zum Beispiel anderen Programmiersprachen hoher Ebene, wie etwa C++, ganz ähnlich ist, können Entwickler programmierbarer Logik, die mit solchen Programmiersprachen vertraut sind, eine flachere Lernkurve als Entwickler aufweisen, die ihnen nicht vertraute Hardwarebeschreibungssprachen niedriger Ebene lernen, um neue Funktionalitäten in der IC-Einrichtung 12 zu implementieren.
  • Entwickler können ihre High-Level-Designs unter Verwendung von Design-Software 14, wie etwa einer Version von Intel-Quartus ® von INTEL CORPORATION, implementieren. Die Designsoftware 14 kann einen Compiler 16 verwenden, um das Programm hoher Ebene in eine Beschreibung niedrigerer Ebene umzuwandeln. Der Compiler 16 kann einem Host 18 und der IC-Einrichtung 12 maschinenlesbare Anweisungen, die das Programm hoher Ebene repräsentieren, bereitstellen. Der Host 18 kann ein Host-Programm 22 empfangen, das durch die Kernel-Programme 20 implementiert werden kann. Um das Host-Programm 22 zu implementieren, kann der Host 18 Anweisungen vom Host-Programm 22 über einen Kommunikationslink 24, wobei es sich beispielsweise um Direktspeicherzugriff- (DMA-, direct memory access) Kommunikationen oder Peripheral-Component-Interconnect-Express- (PCIe-) Kommunikationen handeln kann, an die IC-Einrichtung 12 kommunizieren. In einigen Ausführungsformen können die Kernprogramme 20 und der Host 18 eine Konfiguration eines oder mehrerer Vektorverarbeitungssysteme 26 auf der IC-Einrichtung 12 ermöglichen. Das Vektorverarbeitungssystem 26 kann Schalttechnik (z.B. Vektorverarbeitungseinheiten) beinhalten, um zum Beispiel Operationen zum Durchführen einer Vektor-Vektor- oder Vektor-Skalar-Multiplikation für KI-oder Nicht-KI-Datenverarbeitung zu implementieren. Die IC-Einrichtung 12 kann viele (z.B. zehn, hundert) der Vektorverarbeitungssysteme 26 beinhalten. Außerdem können die Vektorverarbeitungssysteme 26 kommunikativ so miteinander gekoppelt sein, dass Daten, die von einem Vektorverarbeitungssystem ausgegeben werden, anderen Vektorverarbeitungssystemen bereitgestellt werden können.
  • Obwohl die vorstehende Erörterung die Anwendung eines Programms hoher Ebene beschreibt, kann der Entwickler in einigen Ausführungsformen die Designsoftware 14 verwenden, um ein Programm niedriger Ebene, wie etwa die vorstehend beschriebenen Hardwarebeschreibungssprachen niedriger Ebene, zu erzeugen und/oder zu spezifizieren. In manchen Ausführungsformen kann das System 10 ferner ohne ein separates Host-Programm 22 implementiert werden. In einigen Ausführungsformen können die vorliegend beschriebenen Techniken darüber hinaus in Schalttechnik als nicht programmierbares Schaltungsdesign implementiert werden. Somit sollen hierin beschriebene Ausführungsformen veranschaulichend und nicht beschränkend sein.
  • In einer ausführlicheren Betrachtung der IC-Einrichtung 12 veranschaulicht nun 2 ein Beispiel der IC-Einrichtung 12 als programmierbare Logikeinrichtung, wie etwa ein frei programmierbares Gate-Array (FPGA). Ferner sollte verstanden werden, dass die IC-Einrichtung 12 ein beliebiger anderer geeigneter Typ von IC-Einrichtung sein kann (z.B. eine anwendungsspezifische integrierte Schaltung und/oder ein anwendungsspezifisches Standardprodukt). Wie gezeigt, kann die IC-Einrichtung 12 eine Eingabe/Ausgabe-Schalttechnik 42 zum Wegführen von Signalen von der Einrichtung und zum Empfangen von Signalen von anderen Einrichtungen über Eingabe/Ausgabe-Pins 44 aufweisen. Zwischenverbindungsressourcen 46, wie etwa globale und lokale vertikale und horizontale leitfähige Leitungen und Busse, können zum Routen von Signalen auf der IC-Einrichtung 12 verwendet werden. Zusätzlich können die Zwischenverbindungsressourcen 46 feste Interconnects (leitfähige Leitungen) und programmierbare Interconnects (z.B. programmierbare Verbindungen zwischen jeweiligen festen Interconnects) beinhalten. Die programmierbare Logik 48 kann kombinatorische und sequenzielle Logikschalttechnik beinhalten. Beispielsweise kann die programmierbare Logik 48 Nachschlagetabellen, Register und Multiplexer beinhalten. In verschiedenen Ausführungsformen kann die programmierbare Logik 48 dazu ausgelegt sein, eine benutzerdefinierte Logikfunktion durchzuführen. Die mit Zwischenverbindungsressourcen assoziierten programmierbaren Interconnects können als ein Teil der programmierbaren Logik 48 angesehen werden.
  • Programmierbare Logikeinrichtungen, wie etwa die IC-Einrichtung 12, können programmierbare Elemente 50 innerhalb der programmierbaren Logik 48 enthalten. Beispielsweise, wie oben besprochen, kann ein Entwickler (z.B. ein Kunde) die programmierbare Logik 48 programmieren (z.B. konfigurieren), um eine oder mehrere gewünschte Funktionen durchzuführen. Beispielshalber können manche programmierbaren Logikeinrichtungen durch Konfigurieren ihrer programmierbaren Elemente 50 unter Verwendung von Maskenprogrammieranordnungen programmiert werden, was während der Halbleiterherstellung durchgeführt wird. Andere programmierbare Logikeinrichtungen werden konfiguriert, nachdem Halbleiterherstellungsvorgänge abgeschlossen wurden, wie etwa durch Verwenden elektrischer Programmierung oder Laser-Programmierung zum Programmieren ihrer programmierbaren Elemente 50. Im Allgemeinen können programmierbare Elemente 50 auf einer beliebigen geeigneten programmierbaren Technologie basieren, wie etwa Fuses, Antifuses, elektrisch programmierbarer Nur-Lese-Speicher-Technologie, Direktzugriffsspeicherzellen, maskenprogrammierten Elementen und so weiter.
  • Viele programmierbaren Logikeinrichtungen sind elektrisch programmiert. Mit elektrischen Programmieranordnungen können die programmierbaren Elemente 50 aus einer oder mehreren Speicherzellen gebildet werden. Während der Programmierung werden beispielsweise Konfigurationsdaten unter Verwendung von Pins 44 und der Eingabe/Ausgabe-Schalttechnik 42 in die Speicherzellen geladen. In einer Ausführungsform können die Speicherzellen als Direktzugriffsspeicher- (RAM-) Zellen implementiert werden. Die vorliegend beschriebene Verwendung von Speicherzellen auf der Basis der RAM-Technologie soll nur ein Beispiel sein. Da diese RAM-Zellen während der Programmierung mit Konfigurationsdaten geladen werden, werden sie ferner manchmal als Konfiguration-RAM-Zellen (CRAM) bezeichnet. Diese Speicherzellen können jeweils ein entsprechendes statisches Steuerausgangssignal bereitstellen, das den Zustand einer assoziierten Logikkomponente in der programmierbaren Logik 48 steuert. In einigen Ausführungsformen können beispielsweise die Ausgangssignale an den Gates von Metalloxidhalbleiter-(MOS-) Transistoren innerhalb der programmierbaren Logik 48 angelegt werden.
  • Vektorverarbeitungssysteme
  • Um nun mit den Zeichnungen fortzufahren, veranschaulicht 3 ein Vektorverarbeitungssystem 26A, das auf der IC-Einrichtung 12 implementiert werden kann. Das Vektorverarbeitungssystem 26A kann kommunikativ mit Eingabe/Ausgabe-Schalttechnik 42 der IC-Einrichtung 12 gekoppelt sein und Daten über die Eingabe/Ausgabe-Schalttechnik senden und empfangen. Das Vektorverarbeitungssystem 26A beinhaltet Vektorregister 60 (z.B. Vektorregister 60A, 60B,..., 60N), ein oder mehrere Skalarregister 62, Kreuzschienenschalter 64 (z.B. Kreuzschienenschalter 64A, 64B), Vektorverarbeitungseinheiten 66 (z.B. Vektorverarbeitungseinheiten 66A,..., 66N) und Speicher 68.
  • Die Vektorregister 60 können Daten speichern, wie etwa Vektoren. Jedes Vektorregister 60 kann mehrere Kopien derselben Vektordaten enthalten. Zum Beispiel kann das Vektorregister 60A drei Kopien eines Vektors enthalten. In einigen Fällen können Werte in Kopien eines Vektors dasselbe Format teilen, wohingegen in anderen Fällen die Werte mehrere Formate aufweisen können. Werte von Vektoren können zum Beispiel als Gleitkommawerte mit einfacher Genauigkeit (z.B. FP32), wie durch den IEEE-Standard 754 bereitgestellt, bfloat16-Werte, INT8-Werte, als Werte in anderen numerischen Formaten oder eine Kombination aus diesen gespeichert werden. Mit anderen Worten können unterschiedliche Genauigkeiten für unterschiedliche Vektoren genutzt werden und unterschiedliche Genauigkeiten können für unterschiedliche Kopien desselben Vektors genutzt werden. Die Vektorregister 60 können mehrere Leseports aufweisen, wodurch ein gleichzeitiger Zugriff auf mehr als eine Kopie eines bestimmten Vektors ermöglicht wird. Zusätzlich kann das Vektorverarbeitungssystem 26A eine beliebige geeignete Anzahl von Vektorregistern 60 beinhalten. Wie unten ausführlicher besprochen, können die Vektorregister 60 (z.B. Vektorregister 60A, 60B, ..., 60N) unter Verwendung eines oder mehrerer unterteilter Speicherblöcke implementiert werden. Dementsprechend kann ein einzelnes Vektorregister physisch in mehrere Vektorregister unterteilt sein (z.B. eines oder mehrere der Vektorregister 60A, 60B, ..., 60N).
  • Die Skalarregister 62 können Datenregister sein, die zum Speichern von Skalaren genutzt werden. Ähnlich den Vektorregistern 60 können die Skalarregister 62 Werte, die in Skalaren enthalten sind, in einer Vielzahl von Formaten speichern, wie etwa, ohne jedoch hierauf eingeschränkt zu sein, FP32-, bfloat16- und INT8-Formate. Zusätzlich kann das Vektorverarbeitungssystem 26A eine beliebige geeignete Anzahl von Skalarregistern 62 beinhalten.
  • Die Kreuzschienenschalter 64 (z.B. Kreuzschienenschalter 64A, 64B) sind kommunikativ mit den Vektorregistern 60, Skalarregistern 62, Vektorverarbeitungseinheiten 66 und dem Speicher 68 gekoppelt. Die Kreuzschienenschalter 64A, 64B routen (leiten) Daten in dem Vektorverarbeitungssystem 26A. Beispielsweise routet der Kreuzschienenschalter 64A Daten, die in den Vektorregistern 60 und Skalarregistern 62 gespeichert werden sollen. Der Kreuzschienenschalter 64B kann Daten (z.B. Vektoren oder Skalare) von den Vektorregistern 60 und Skalarregistern 62 empfangen und die Daten zu bestimmten Vektorverarbeitungseinheiten 66 routen.
  • Die Vektorverarbeitungseinheiten 66 (z.B. die Vektorverarbeitungseinheiten 66A, 66N) können Funktionseinheiten (z.B. Funktionsblöcke, DSP- (Digital Signal Processing) Blöcke oder Schalttechnik innerhalb von DSP-Blöcken, die spezielle Funktionen, wie etwa Addition oder Multiplikation, durchführen) beinhalten, die Daten empfangen und Operationen an den Daten durchführen, zum Beispiel gemäß Anweisungen zum Durchführen der Operationen. Daten von den Vektorregistern 60 und/oder Skalarregistern 62 können zum Beispiel über den Kreuzschienenschalter 64B zu einer bestimmten Vektorverarbeitungseinheit 66 (z.B. der Vektorverarbeitungseinheit 66A) geleitet werden, und die Vektorverarbeitungseinheit 66A kann eine bestimmte Operation an den empfangenen Daten durchführen. Beispielsweise können die Vektorverarbeitungseinheiten 66 Multipliziererschalttechnik 70, die verschiedene Formen der Multiplikation (z.B. Vektor-Vektor-Multiplikation, Vektor-Skalar-Multiplikation) durchführen kann, und Additionsschalttechnik 72 beinhalten, die verschiedene Formen der Addition und Subtraktion (z.B. Vektor-Vektor-Addition/Subtraktion, Vektor-Skalar-Addition/Subtraktion) durchführen kann. Die Vektorverarbeitungseinheiten 66 können Daten (z.B. Werte, die durch Durchführen von Operationen an empfangenen Daten bestimmt werden) ausgeben, die dem Kreuzschienenschalter 64A bereitgestellt werden können, um in den Vektorregistern 60 und/oder Skalarregistern 62 gespeichert zu werden. Das Vektorverarbeitungssystem 26 A kann eine beliebige geeignete Anzahl von Vektorverarbeitungseinheiten 66 beinhalten.
  • Des Weiteren können die Vektorverarbeitungseinheiten 66 einen oder mehrere Kreuzschienenschalter 74 (z.B. Kreuzschienenschalter 74A, 74B) beinhalten, die Daten innerhalb der Vektorverarbeitungseinheiten 66 leiten können. Zum Beispiel kann der Kreuzschienenschalter 74A empfangene Daten zu einer Schalttechnik innerhalb der Vektorverarbeitungseinheiten 66 leiten (z.B. Multipliziererschalttechnik 70, Addierschalttechnik 72). Der Kreuzschienenschalter 74B kann Daten leiten, die durch die Vektorverarbeitungseinheiten 66 ausgegeben werden sollen. Die Kreuzschienenschalter 74 können auch genutzt werden, um Ganzzahl- (z.B. Festkomma-) und Gleitkommadaten innerhalb der Vektorverarbeitungseinheiten 66 abzuschneiden und zu aggregieren. Zum Beispiel kann der Kreuzschienenschalter 74A eine FP32-Eingabe auf einen bfloat16-Wert abschneiden. Die Vektorverarbeitungseinheiten 66 können eine Operation durchführen, die den bfloat16-Wert involviert, und der Kreuzschienenschalter 74B kann empfangene Daten (z.B. ein Produkt, eine Summe oder eine Differenz, die durch Durchführen der Operation erzeugt werden, die den bfloat16-Wert und einen anderen Wert involviert) aggregieren, um einen FP32-Wert auszugeben.
  • Das Vektorverarbeitungssystem 26A beinhaltet auch den Speicher 68, bei dem es sich um einen Speicher handelt, der in der IC-Einrichtung 12 enthalten ist oder auf den diese zugreifen kann. Beispielsweise kann der Speicher 68 einen Speicher, der in der IC-Einrichtung 12 enthalten ist (z.B. Cachespeicher), oder einen Speicher, der sich außerhalb der IC-Einrichtung 12 befindet, beinhalten. Der Speicher 68 kann ein Befehlsregister 75 beinhalten, das den Kreuzschienenschaltern 64A, 64B ermöglicht, Daten innerhalb des Vektorverarbeitungssystems 26A zu leiten. Zum Beispiel kann das Befehlsregister 75 genutzt werden (z.B. durch die Kreuzschienenschalter 64A, 64B oder Steuerschalttechnik, die in der IC-Einrichtung 12 enthalten ist), um empfangene Befehle zu interpretieren, so dass eine bestimmte (z.B. angeforderte) Operation durchgeführt werden kann. Dementsprechend ermöglicht das Vektorverarbeitungssystem 26A eine parametrisierbare Anzahl von Leseports mit parametrisierbaren Befehlsoperanden.
  • Unter Berücksichtigung der Erörterung des Vektorverarbeitungssystems 26A ist nun 4 ein Blockdiagramm eines Vektorverarbeitungssystems 26B, das eine beispielhafte Implementierung einer Vektorprozessor-Mikroarchitektur für eine programmierbare Logikeinrichtung, wie etwa ein FPGA, darstellt. Das Vektorverarbeitungssystem 26 B beinhaltet ein Frontend-Teilsystem 76, das Anweisungen abruft, decodiert und an eine oder mehrere Funktionseinheiten ausgibt, die Operationen durchführen, die Vektoren oder Skalare involvieren. Wie veranschaulicht, beinhaltet das Frontend-Teilsystem 76 zum Beispiel eine Abrufeinheit 77, die Anweisungen abruft, die als Teil einer Befehlssatzarchitektur (ISA) enthalten sein können, die in dem Vektorverarbeitungssystem 26B oder einer beliebigen anderen Ausführungsform eines hier besprochenen Vektorverarbeitungssystems implementiert ist. Das Frontend-Teilsystem 76 beinhaltet auch eine Decodiereinheit 78, die Befehle decodiert, und die Decodiereinheit 78 (oder eine Ausführungseinheit) kann die decodierten Befehle einer Funktionseinheit zur Durchführung bereitstellen. Wie nachstehend besprochen, können die Anweisungen zum Beispiel an Funktionseinheiten 79 gesendet und von diesen durchgeführt werden, die in Vektorberechnungseinheiten 80 des Vektorverarbeitungssystems 26B enthalten sind.
  • Die Vektorberechnungseinheiten 80 führen Vektorverarbeitungsoperationen durch. Jede Vektorberechnungseinheit 80 kann eine Vektorregisterdatei 81 und eine oder mehrere Lanes 82 (z.B. Lanes 82A, 82B) beinhalten. Die Vektorregisterdatei 81 enthält Werte (z.B. Vektoren), die in Operationen genutzt werden können, die durch die Vektorberechnungseinheiten 80 durchgeführt werden. Die Vektorregisterdatei 81 aus 4 kann unter Verwendung von Speicher (z.B. Vektorregister 60 aus 3) implementiert werden, der in der IC-Einrichtung 12 enthalten sein kann oder kommunikativ mit der IC-Einrichtung 12 gekoppelt ist. Die Steuerlogik 83 der Lanes 82 kann durchzuführende Anweisungen empfangen und bewirken, dass die Operationen durchgeführt werden. Zum Beispiel kann die Steuerlogik 83 einen Befehl empfangen, der einen oder mehrere Werte (z.B. in Form einer oder mehrerer Adressen in der Vektorregisterdatei 81), die durchzuführende(n) Operation(en) und einen Ort zum Speichern eines Ergebnisses der Operation beinhaltet.
  • Jede Lane 82 beinhaltet Vektorverarbeitungseinheiten 66, die jeweils eine oder mehrere der Funktionseinheiten 79 beinhalten. Die Funktionseinheiten 79 können Multipliziererschalttechnik (z.B. Multipliziererschalttechnik 70), Addierschalttechnik (z.B. Addierschalttechnik 72) oder andere Schalttechnik beinhalten, die zum Durchführen von Berechnungen genutzt werden, die einen oder mehrere Vektoren involvieren. Zum Beispiel können die Funktionseinheiten 79 die Multipliziererschalttechnik 70, die Addierschalttechnik 72 und andere Schalttechnik beinhalten, die Operationen durchführt, die einen oder mehrere Vektoren involvieren. Die Funktionseinheiten 79 können unter Verwendung von Weichlogik, Hartlogik (z.B. einem oder mehreren DPS-Blöcken) oder einer Kombination aus diesen implementiert werden, um eine breite Vielfalt von Operationen oder anpassbaren Funktionen durchzuführen, von denen einige nachstehend besprochen werden.
  • Die Vektorverarbeitungseinheiten 66 können auch Interconnect-Schalttechnik 84 beinhalten, die genutzt wird, um eine Lane-Verbindung 85 zwischen den Vektorverarbeitungseinheiten 66 herzustellen. Auf diese Weise können Daten von einer Lane 82A zu einer anderen Lane 82B gesendet werden, wodurch eine bessere Anpassung zum Durchführen von Operationen ermöglicht wird. Zum Beispiel kann ein Teil eines Prozesses durch eine Lane 82A durchgeführt werden und ein Zwischenwert kann an eine andere Lane 82B geliefert werden, und die Funktionseinheiten 79 der anderen Lane 82B können den Zwischenwert als Eingabe in einer anderen Operation nutzen, die zu einem endgültigen Wert führt, der durch die andere Lane 82B ausgegeben wird. Des Weiteren können Daten unter Nutzung einer Einheitsverbindung 86 zwischen Vektorberechnungseinheiten 80 geteilt werden. Dementsprechend können durch Nutzen der Interconnect-Schalttechnik 84 und der Einheitsverbindung 86 mehrere Verarbeitungspfade verfügbar sein, um die gleiche Operation durchzuführen. Somit kann das Nutzen der Flexibilität der mehreren Verarbeitungspfade ermöglichen, dass Latenz reduziert wird. Die Interconnect-Schalttechnik 84 kann unter Verwendung von Kreuzschienenschaltern 74A, 74B implementiert werden.
  • Jede der Lanes 82, die in einer jeweiligen Vektorberechnungseinheit 80 enthalten sind, ist kommunikativ mit der Vektorregisterdatei 81 gekoppelt, die Vektoroperanden an die Lanes 82 liefert. Somit nimmt jede der Lanes 82 ein oder mehrere Elemente von jedem Vektoroperanden an, führt Berechnungen unter Verwendung der Eingabeelemente durch und schreibt eine resultierende Ausgabe in die Vektorregisterdatei 81 zurück. Wie nachstehend ausführlicher besprochen, kann die Anzahl an Lanes 82, die in den Vektorberechnungseinheiten 80 enthalten sind, angepasst werden (z.B. basierend auf den gewünschten Vektorverarbeitungsfähigkeiten des Endbenutzers). Die Lanes 82 können unterschiedliche Anzahlen der Vektorverarbeitungseinheiten 66 beinhalten, die jeweils unterschiedliche Anzahlen von Funktionseinheiten 79 beinhalten können.
  • Das Vektorverarbeitungssystem 26B beinhaltet eine Skalareinheit 87, die Skalaroperationen durchführt. Das heißt, die Skalareinheit 87 kann genutzt werden, um Anweisungen auszuführen, die Skalare involvieren, darunter Operationen, die einen Skalar und einen oder mehrere Vektoren involvieren. Die Skalareinheit 87 kann unter Verwendung eines Teils der IC-Einrichtung 12 (z.B. Hartlogik oder Weichlogik einer programmierbaren Logikeinrichtung) implementiert werden. In anderen Ausführungsformen kann die Skalareinheit 87 in einer Einrichtung enthalten sein, die von der IC-Einrichtung 12 getrennt, aber kommunikativ mit dieser gekoppelt ist. Zum Beispiel kann Schalttechnik eines Prozessors genutzt werden, um die Skalareinheit 87 zu implementieren, während die IC-Einrichtung 12 Vektoroperationen unter Nutzung der Vektorberechnungseinheiten 80 durchführen kann.
  • Das Vektorverarbeitungssystem 26B beinhaltet zudem eine Vektorspeichereinheit 88, bei der es sich um Speicher handelt, der die Datenbewegungen zwischen externem Speicher (z.B. auf der IC-Einrichtung 12 enthaltener Speicher, der nicht in dem Vektorverarbeitungssystem 26B enthalten ist) und den Vektorregisterdateien 81 der IC-Einrichtung 12 handhaben kann.
  • Vektorspeicheranweisungen können beispielsweise bewirken, dass Daten aus dem externen Speicher in eine Registerdatei (z.B. die Registerdatei 81) geladen werden sowie Daten aus der Registerdatei 81 in den externen Speicher speichern. Verschiedene Arten von Laden und Speichern sind verfügbar, wie etwa sequentielle Zugriffe auf zusammenhängende Speicherblöcke sowie Schritt-, Sammel- und Streuzugriffe.
  • Des Weiteren beinhaltet das Vektorverarbeitungssystem 26B eine Eingabe/Ausgabe-(E/A-) Einheit 89, die genutzt werden kann, um das Vektorverarbeitungssystem 26B kommunikativ mit anderer Schalttechnik zu koppeln sowie eine direkte Kommunikation innerhalb des Vektorverarbeitungssystems 26B zu ermöglichen. Zum Beispiel kann die E/A-Einheit 89 direkt mit den Vektorberechnungseinheiten 80 kommunizieren und bewirken, dass Daten gelesen und direkt in externe Eingänge und Ausgänge geschrieben werden.
  • Unter Berücksichtigung der vorstehenden Erörterung des Vektorverarbeitungssystems 26B wird nun eine beispielhafte Implementierung des Vektorverarbeitungssystems 26B erörtert. Bei diesem Beispiel kann das Vektorverarbeitungssystem 26B oder Teile davon auf der IC-Einrichtung 12 implementiert sein und die IC-Einrichtung 12 kann eine programmierbare Logikeinrichtung, wie etwa ein FPGA, sein. Bei einem solchen Beispiel kann ein harter On-Chip-Speicher der IC-Einrichtung 12 genutzt werden, um die Vektorregisterdateien 81 zu implementieren. On-Chip-Speicher können auch genutzt werden, um eine Registerdatei, die durch die Skalareinheit 87 genutzt wird, sowie einen Befehlsspeicher, der in dem Frontend-System 76 enthalten ist, zu implementieren.
  • DSP-Blöcke, die als Hartlogikblöcke auf der IC-Einrichtung 12 enthalten sind, können als arithmetische Einheiten, wie etwa die Funktionseinheiten 79 der Vektorverarbeitungseinheiten 66, genutzt werden. DSP-Blöcke der IC-Einrichtung 12 können auch in der Skalareinheit 87 enthalten sein und Operationen durchführen, die Skalare involvieren.
  • Externe Speichereinrichtungen, die für die IC-Einrichtung 12 zugänglich sind, können ebenfalls genutzt werden, um einen Teil des Vektorverarbeitungssystems 26B zu implementieren. Zum Beispiel kann ein chipexterner Speicher, wie etwa ein oder mehrere HBM- (high-bandwidth memory, Speicher mit hoher Bandbreite) Dies, genutzt werden, die kommunikativ mit der IC-Einrichtung 12 gekoppelt sind, und die Vektorspeichereinheit 88 des Vektorverarbeitungssystems 26B kann die Schnittstellen zu solchen Speichern implementieren. In anderen Ausführungsformen können andere Formen von Speicher allein oder in Kombination mit HBM-Speicher verwendet werden.
  • Des Weiteren kann, wie vorstehend angemerkt, in einigen Ausführungsformen Verarbeitungsschalttechnik genutzt werden, die in einer anderen IC-Einrichtung als der IC-Einrichtung 12 enthalten ist. Beispielsweise kann die Skalareinheit 87 unter Verwendung einer Zentralverarbeitungseinheit (CPU) oder einer anderen Art von IC-Einrichtung implementiert werden, und eine solche IC-Einrichtung kann eine andere Art von Einrichtung als die IC-Einrichtung 12 sein. In Fällen, in denen die IC-Einrichtung 12 ein FPGA ist, kann die Skalareinheit 87 zum Beispiel unter Verwendung von Schalttechnik eines Prozessors (z.B. einer Hardwarekomponente des Prozessors oder als Anweisungen oder Software, die durch den Prozessor ausgeführt werden) implementiert werden, der kommunikativ mit dem FPGA gekoppelt ist.
  • Die E/A-Einheit 89 kann unter Verwendung einer E/A-Schalttechnik implementiert werden, die auf der IC-Einrichtung 12 enthalten ist, wie etwa, ohne jedoch hierauf eingeschränkt zu sein, Ethernet-Schalttechnik, PCIe-Schalttechnik, Compute-Express-Link- (CXL-) Schalttechnik, Sendeempfänger-Schalttechnik und andere Formen von E/A-Schalttechnik. In dem Fall, in dem das Vektorverarbeitungssystem 26B unter Verwendung von mehr als einer IC-Einrichtung (z.B. zwei IC-Einrichtungen, die auf einem einzigen Substrat angeordnet sind) implementiert wird, kann die E/A-Einheit 89 genutzt werden, um Einrichtungen kommunikativ miteinander zu koppeln. Zum Beispiel kann PCIe-Schalttechnik oder CXL-Schalttechnik genutzt werden, um die IC-Einrichtung 12 und eine andere IC-Einrichtung, die genutzt wird, um die Skalareinheit 87 bereitzustellen, kommunikativ zu koppeln. Bei einem solchen Beispiel kann die IC-Einrichtung 12 eine programmierbare Logikeinrichtung, wie etwa ein FPGA, sein und kann die andere IC-Einrichtung ein anderer Typ von IC-Einrichtung, wie etwa ein Prozessor (z.B. eine CPU), sein.
  • Bevor fortgefahren wird, die Vektorverarbeitungseinheiten 66 aus 3 und 4 ausführlicher zu diskutieren, sollte angemerkt werden, dass das Vektorverarbeitungssystem 26B eine beliebige gewünschte Anzahl der in 4 veranschaulichten Elemente beinhalten kann. Obwohl zum Beispiel eine einzige Skalareinheit 87 und eine einzige Vektorspeichereinheit 88 gezeigt sind, können in anderen Ausführungsformen mehr als eine Skalareinheit 87 und eine Vektorspeichereinheit 88 enthalten sein. Des Weiteren können eine oder mehr als zwei Vektorberechnungseinheiten 80 in dem Vektorverarbeitungssystem 26B enthalten sein, von denen jede eine beliebige geeignete Anzahl von Lanes 82 und Funktionseinheiten 79 beinhalten kann.
  • Vektorverarbeitungseinheiten, Funktionseinheiten, Reduktionsoperationen und Sonderfunktionen
  • Unter Berücksichtigung der Erörterung von 3 werden mehrere Ausführungsformen der Vektorverarbeitungseinheiten 66 und Operationen, die durch die Vektorverarbeitungseinheiten 66 durchgeführt werden, erörtert. Bevor jedoch mit der Erörterung der Ausführungsformen der Vektorverarbeitungseinheiten 66 fortgefahren wird, sollte angemerkt werden, dass jede der Ausführungsformen, die nachstehend unter Bezugnahme auf 5-11 besprochen werden, die Kreuzschienenschalter 74 (z.B. Kreuzschienenschalter 74A, 74B) beinhalten können, unabhängig davon, ob einer der Kreuzschienenschalter 74 (z.B. Kreuzschienenschalter 74A, 74B) veranschaulicht ist. Dies soll jedoch nicht einschränkend sein und es versteht sich, dass die Vektorverarbeitungseinheiten 66 mehr oder weniger (z.B. drei oder mehr, einen oder keinen) der Kreuzschienenschalter 74 aufweisen können. Des Weiteren ist auch anzumerken, dass die nachstehend beschriebenen Vektorverarbeitungseinheiten 66 als Skalarverarbeitungseinheiten (z.B. in der Skalareinheit 87) genutzt werden können, die Operationen an Skalaren durchführen, und dass Register, die in solchen Skalarverarbeitungseinheiten enthalten sind, Skalare anstelle von Vektoren speichern können.
  • 5 ist ein Blockdiagramm einer Vektorverarbeitungseinheit 66B, die Operationen an FP32-Werten (z.B. bis zu drei FP32-Werten) durchführen und einen FP32-Wert ausgeben kann. Die Vektorverarbeitungseinheit 66B beinhaltet ein Register 90, das zum Speichern eines Vektors verwendet werden kann. Die Vektorverarbeitungseinheit 66B beinhaltet zudem einen Multiplexer 92, der einen Wert auswählen kann, der an die Multipliziererschalttechnik 70 geliefert werden soll. Zum Beispiel kann der Multiplexer 92 auswählen, ob ein aktuell empfangener Wert (oder Werte) oder ein Wert (oder Werte), der in dem Register 90 gespeichert ist, zum Multiplizieren (z.B. mit einem anderen Wert oder anderen Werten, die durch die Vektorverarbeitungseinheit 66B empfangen werden), bereitgestellt werden soll. Auf diese Weise kann die Vektorverarbeitungseinheit 66B (und jede hier besprochene Ausführungsform der Vektorverarbeitungseinheit 66) eine Tensorunterstützung bereitstellen (z.B. als ein Tensorprozessor oder eine Tensorverarbeitungseinheit (TPU) fungieren). Zum Beispiel kann ein in dem Register 90 gespeicherter Vektor mit Daten multipliziert werden, die in die Vektorverarbeitungseinheit 66B gestreamt werden. Der Vektor in dem Register 90 kann immer wieder für jede andere Eingabe genutzt werden, wodurch ermöglicht wird, dass der in dem Register 90 gespeicherte Vektor mit mehreren anderen Werten (z.B. Vektoren oder Skalaren) multipliziert wird. Das Register 90 kann auch zum Speichern von Skalaren genutzt werden. Des Weiteren ist anzumerken, dass die Vektorverarbeitungseinheit 66 B als eine Skalarfunktionseinheit genutzt werden kann, die Operationen durchführt, die einen oder mehrere Skalare involvieren.
  • Die Vektorverarbeitungseinheit 66B kann eine Vielzahl von Operationen durchführen. Diese Operationen sind nachstehend in Tabelle 1 beschrieben. Eingaben, die „Vs“ (source vector, Quellvektor) beinhalten, geben einen Vektor an, der in den Vektorregistern 60 gespeichert ist (z.B. ein Register oder eine Registeradresse für einen bestimmten Vektor), Eingaben, die „Ss“ (source scalar, Quellskalar) beinhalten, geben einen Skalar an, der in den Skalarregistern 62 gespeichert ist (z.B. ein Register oder eine Registeradresse für einen bestimmten Skalar) und Ausgaben, die „Vd“ (destination vector, Zielvektor) oder „Sd“ (destination scalar, Zielskalar) beinhalten, geben an, wo eine Ausgabe gespeichert werden sollte (z.B. ein bestimmtes Register oder eine bestimmte Adresse innerhalb der Vektorregister 60 oder des Skalarregisters 62). Eine Eingabe, die eine Zahl (z.B. Vs1, Vs2, Vs3) beinhaltet, wird verwendet, um eine Anzahl von Eingaben anzugeben, die an einer bestimmten Operation beteiligt sind. Beispielsweise würde eine Operation, die „Vs1“ und „Vs2“ beinhaltet, zwei Eingaben aufweisen. Es ist anzumerken, dass die in der nachstehenden Tabelle enthaltenen Eingaben ein Vektor oder Skalar sein können, der in dem Register 90 gespeichert ist. Tabelle 1
    Operation Operationsbeschreibung Eingaben Ausgabe
    WFP32MUL Vektor-Vektor-Multiplikation mit FP32 Werten Vs1, Vs2 Vd
    VSFP32MUL Vektor-Skalar-Multiplikation mit FP32 Werten Ss1, Vs2 Vd
    WFP32MULADD Vektor-Vektor-Multiplikation und - Addition mit FP32-Werten Vs1, Vs2, Vs3 Vd
    VSFP32MULADD Vektor-Skalar-Multiplikation und - Addition mit FP32-Werten Ss1, Vs2, Vs3 Vd
    VVFP32ADD Vektor-Vektor-Addition mit FP32-Werten Vs1, Vs2 Vd
    VSFP32ADD Vektor-Skalar-Addition mit FP32-Werten Ss1, Vs2 Vd
    WFP32SUB Vektor-Vektor-Subtraktion mit FP32-Werten Ss1, Vs2 Vd
    VSFP32ADD Vektor-Skalar-Addition mit FP32-Werten Ss1, Vs2 oder Vs2, Ss1 Vd
    VSFP32SUB Vektor-Skalar-Subtraktion mit FP32-Werten Ss1, Vs2 oder Vs2, Ss1 Vd
  • 6 veranschaulicht eine Vektorverarbeitungseinheit 66C, die zwei FP32-Eingaben empfängt und eine FP32-Ausgabe erzeugt. Die Vektorverarbeitungseinheit 66C beinhaltet ein Register 100, das Summen speichern kann, die durch die Addierschalttechnik 72 erzeugt werden, und der Vektorverarbeitungseinheit 66C ermöglichen kann, als Akkumulator zu fungieren. Wenn zum Beispiel die Vektorverarbeitungseinheit 66C Produkte bestimmt, können diese zu einem Vektor hinzuaddiert werden, der in dem Register 100 gespeichert ist. Dementsprechend kann die Vektorverarbeitungseinheit 66C als Akkumulator arbeiten, wobei das Ergebnis der Akkumulation im Register 100 gespeichert wird. Zusätzlich zu den in Tabelle 1 angegebenen Operationen, die zwei Eingaben involvieren, kann die Vektorverarbeitungseinheit 66C zudem die nachstehend in Tabelle 2 beschriebenen Operationen durchführen. Tabelle 2
    Operation Operationsbeschreibung Eingaben Ausgabe
    VVFP32MULACC Vektor-Vektor-Multiplikation und -Akkumulation Vs1, Vs2 n/a
    VSFP32MULACC Vektor-Skalar-Multiplikation und -Akkumulation Ss1, Vs2 n/a
    VWFP32 („Vektorschreibvorgang“) bewirkt, dass im Register 100 gespeicherter Wert ausgegeben wird n/a Vd
  • Durch Verwenden von Vektorverarbeitungseinheiten 66, die Akkumulatorfunktionalität bereitstellen (z.B. Vektorverarbeitungseinheiten 66C, 66F), kann eine Verkettung (auch als „Weiterleiten“ (forwarding) bekannt) vermieden werden. Stattdessen wird Akkumulation durchgeführt, und wenn ein Wert von einem Register, das in Verbindung mit Akkumulation verwendet wird (z.B. Register 100), angefordert wird (z.B. als Eingabe oder zur Speicherung an einem anderen Ort), kann die Vektorverarbeitungseinheit 66 eine Anfrage für den Wert empfangen (z.B. eine Anfrage zum Durchführen einer VWFP32-Operation) und den Wert in Reaktion auf eine solche Anfrage bereitstellen.
  • 7 veranschaulicht nun eine Vektorverarbeitungseinheit 66D, die genutzt werden kann, um Operationen durchzuführen, die bfloat16-Werte involvieren. In einigen Ausführungsformen können die bfloat16-Werte durch Kreuzschienenschalter 74A erzeugt werden, die andere Werte (z.B. FP32-Werte) abschneiden. Die Vektorverarbeitungseinheit 66D kann 6 bfloat16-Eingaben (96 Gesamtbits) empfangen und 2 FP32-Werte (64 Gesamtbits) ausgeben. Operationen, die durch die Vektorverarbeitungseinheit 66D durchgeführt werden, sind in Tabelle 3 angegeben. Insbesondere kann die Vektorverarbeitungseinheit 66D zwei der Operationen aus Tabelle 3 parallel durchführen. Zum Beispiel kann die Vektorverarbeitungseinheit 66D zwei VVPF16MULADD-Operationen, zwei VSFP16MULADD-Operationen oder eine VVPF16N1ULADD-Operation und eine VSFP16MULADD-Operation parallel durchführen. Tabelle 3
    Operation Operationsbeschreibung Eingaben Ausgabe
    WFP16MULADD Vektor-Vektor-Multiplikation und - Addition mit bfloat16-Werten Vs1, Vs2, Vs3 Vd
    VSFP16MULADD Vektor-Skalar-Multiplikation und - Addition mit bfloat16-Werten Ss1, Vs2, Vs3 Vd
  • 8 veranschaulicht eine Vektorverarbeitungseinheit 66E, die genutzt werden kann, um Operationen durchzuführen, die bfloat16-Werte beinhalten. In einigen Ausführungsformen können die bfloat16-Werte durch Kreuzschienenschalter 74A erzeugt werden, die andere Werte (z.B. FP32-Werte) abschneiden. Die Vektorverarbeitungseinheit 66E kann bis zu 96 Eingabebits an Daten empfangen und bis zu 72 Ausgabebits an Daten ausgeben. Operationen, die durch die Vektorverarbeitungseinheit 66E durchgeführt werden, sind in Tabelle 4 angegeben. Die Vektorverarbeitungseinheit 66E kann drei Operationen parallel durchführen. Genauer gesagt, kann die Vektorverarbeitungseinheit 66E eine beliebige Kombination aus drei in Tabelle 4 angegebenen Operationen (z.B. drei verschiedene Iterationen einer Operation, zwei Iterationen einer ersten Operation und eine Iteration einer zweiten Operation oder eine Iteration dreier verschiedener Operationen) parallel durchführen. Des Weiteren kann die Größe der Ausgabe der Vektorverarbeitungseinheit 66E in Abhängigkeit von der/den Operation(en), die die Vektorverarbeitungseinheit 66E durchführt, und der Anzahl von Eingaben, die die Verarbeitungseinheit 66E empfängt, von zweiunddreißig bis zweiundsiebzig Bits reichen. Wenn zum Beispiel Additions-oder Subtraktionsoperationen durchgeführt werden, kann die Ausgabe relativ weniger Bits beinhalten als eine Ausgabe, die erzeugt werden kann, wenn Multiplikationsoperationen durchgeführt werden. Wenn als ein anderes Beispiel relativ weniger Eingaben (z.B. zwei) empfangen werden, kann die Ausgabe im Vergleich zu einer Ausgabe, die basierend auf mehr Eingaben erzeugt wird, kleiner sein. Tabelle 4
    Operation Operationsbeschreibung Eingaben Ausgabe
    VVFP16MUL Vektor-Vektor-Multiplikation mit bfloat16-Werten Vs1, Vs2 Vd
    VSFP16MUL Vektor-Skalar-Multiplikation mit bfloat16-Werten Ss1, Vs2 Vd
    V(V/S)FP16(ADD/SUB) Vektor-Vektor-Addition, Vektor-Vektor-Subtraktion, Vektor-Skalar-Addition oder Vektor-Skalar-Subtraktion mit bfloat16-Werten (Vs1/Ss1), Vs2, Vd
  • 9 veranschaulicht eine Vektorverarbeitungseinheit 66F, die genutzt werden kann, um Operationen durchzuführen, die bfloat16-Werte beinhalten. In einigen Ausführungsformen können die bfloat16-Werte durch Kreuzschienenschalter 74A erzeugt werden, die andere Werte (z.B. FP32-Werte) abschneiden. Die Vektorverarbeitungseinheit 66F kann bis zu 96 Eingabebits an Daten empfangen und bis zu 72 Ausgabebits an Daten ausgeben. Die Vektorverarbeitungseinheit 66F kann Akkumulationsoperationen unter Verwendung des Registers 100 auf eine Weise durchführen, die grundsätzlich den Operationen der vorstehend besprochenen Vektorverarbeitungseinheit 66C ähnelt. Mit anderen Worten ist die Vektorverarbeitungseinheit 66F eine Ausführungsform der Vektorverarbeitungseinheit 66, die eine Akkumulation mit bfloat16-Werten ermöglicht. Diese Operationen sind in der nachfolgenden Tabelle 5 angegeben.
  • Zudem ist anzumerken, dass die Vektorverarbeitungseinheit 66F, ähnlich der Vektorverarbeitungseinheit 66E, drei Operationen parallel durchführen kann. Das heißt, die Vektorverarbeitungseinheit 66F kann eine beliebige Kombination aus drei in Tabelle 5 angegebenen Operationen (z.B. drei verschiedene Iterationen einer Operation, zwei Iterationen einer ersten Operation und eine Iteration einer zweiten Operation oder eine Iteration dreier verschiedener Operationen) parallel durchführen. Ähnlich der Vektorverarbeitungseinheit 66E kann die Größe der Ausgabe der Vektorverarbeitungseinheit 66F in Abhängigkeit von der/den Operation(en), die die Vektorverarbeitungseinheit 66F durchführt, und der Anzahl von Eingaben, die die Verarbeitungseinheit 66F empfängt, von zweiunddreißig bis zweiundsiebzig Bits reichen. Wenn beispielsweise Additions- oder Subtraktionsoperationen durchgeführt werden, kann die Ausgabe relativ weniger Bits beinhalten als eine Ausgabe, die erzeugt werden kann, wenn Multiplikationsoperationen durchgeführt werden. Als ein anderes Beispiel kann, wenn relativ weniger Eingaben (z.B. zwei) empfangen werden, die Ausgabe im Vergleich zu einer Ausgabe, die aus mehr Eingaben erzeugt wird, kleiner sein. Tabelle 5
    Operation Operationsbeschreibung Eingaben Ausgabe
    VVFP16MULACC Vektor-Vektor-Multiplikation und - Akkumulation Vs1, Vs2 n/a
    VSFP16MULACC Vektor-Skalar-Multiplikation und - Akkumulation Ss1, Vs2 n/a
    VWFP16 bewirkt, dass ein oder mehrere Werte, die in einem oder mehreren Registern 100 gespeichert sind, ausgegeben werden. n/a Vd
  • 10 veranschaulicht eine Vektorverarbeitungseinheit 66G, die Multiplikations-und Additionsoperationen durchführen kann, die Festkommawerte, wie etwa INT8-Werte, involvieren.
  • Wie veranschaulicht, kann die Vektorverarbeitungseinheit 66G bis zu 64 Bits an Eingangsdaten empfangen und bis zu 64 Bits an Daten ausgeben. Genauer gesagt beinhaltet die Vektorverarbeitungseinheit 66G acht Multiplizierer (z.B. acht der Multipliziererschalttechnik 70), die eine Eingabe (z.B. externe Eingabe) und eine registrierte Eingabe (z.B. einen Wert aus dem Register 90) empfangen können. Somit können die Register 90 genutzt werden, um einen Operanden der Multiplikationsoperationen, die jeder der Multiplizierer durchführen wird, vorab zu laden. Die externe Eingabe kann zum Streamen der anderen Operanden, die die Multipliziererschalttechnik 70 mit den registrierten Eingaben multiplizieren wird, verwendet werden. Die Ausgaben, die durch die Multipliziererschalttechnik 70 erzeugt werden, können reduziert werden (z.B. über den Addierer 102) oder zu dem Kreuzschienenschalter 74B weitergeleitet werden, der die Ausgabe (z.B. eine 32-64-Bit-Ausgabe) der Vektorverarbeitungseinheit 66G steuert. Mit anderen Worten kann der Addierer 102 einige oder alle der Ausgaben der Multipliziererschalttechnik 70 empfangen und die empfangenen Ausgaben addieren. Darüber hinaus können die Ausgänge der Multipliziererschalttechnik 70 den Addierer 102 umgehen und dem Kreuzschienenschalter 74B bereitgestellt werden. Die Vektorverarbeitungseinheit 66G kann zudem die in Tabelle 6 angegebenen Operationen durchführen. Tabelle 6
    Operation Operationsbeschreibung Eingaben Ausgabe
    VVINT8DOT Vektor-Vektor-Punktprodukt Vs1, Vs2 Sd
    V(V/S)INT8MUL Vektor-Vektor- oder Vektor-Skalar-Multiplikation Ss1, Vs2 Vd
  • Wenn Punktproduktoperationen durchgeführt werden, kann die Vektorverarbeitungseinheit 66G Vektoren vorab in die Register 90 laden, und diese Vektoren zusammen mit externen Eingaben können durch die Multipliziererschalttechnik 70 empfangen und multipliziert werden, um eine Skalarausgabe zu erzeugen. Es ist zudem anzumerken, dass die Vektorverarbeitungseinheit 66G bis zu acht Operationen parallel durchführen kann. Zum Beispiel kann jedes Element der Multipliziererschalttechnik 70 gleichzeitig arbeiten, um ein Produkt zu bestimmen, das zwei unterschiedliche Eingaben involviert.
  • 11 beinhaltet Vektorverarbeitungseinheiten 66H, die zum Durchführen von Reduktionsoperationen genutzt werden. Die Reduktionsoperationen können beispielsweise das Bestimmen und Ausgeben eines Minimalwerts eines Vektors oder eines Maximalwerts eines Vektors beinhalten, wobei in beiden Fällen der Vektor ein Eingabevektor oder ein Ausgabevektor sein kann, der durch Durchführen einer Operation (z.B. Vektor-Vektor-Multiplikation, -Addition oder -Subtraktion oder Vektor-Skalar-Multiplikation, -Addition oder -Subtraktion) erzeugt wird. Zusätzlich können die Reduktionsoperationen Summieren der in einem Vektor enthaltenen Werte beinhalten. Die Vektorverarbeitungseinheiten 66H aus 11 können eine beliebige Ausführungsform der vorliegend behandelten Vektorverarbeitungseinheit 66 sein (z.B. eine Vektorverarbeitungseinheit 66, die eine Multipliziererschalttechnik 70, eine Addierschalttechnik 72 und ein Register 100 beinhaltet).
  • Um eine Reduktionsoperation durchzuführen, können die Vektorverarbeitungseinheiten 66H und das Vektorverarbeitungssystem 26A einen Zähler implementieren, der die Anzahl von Taktzyklen angibt, bevor Daten ausgegeben werden sollten. Falls es beispielsweise sechzehn Vektorverarbeitungseinheiten 66H gibt, die miteinander verkettet sind, kann ein Zähler von sechzehn Taktzyklen implementiert werden, so dass das Vektorverarbeitungssystem 26A nicht versucht, die letztendliche Ausgabe zu nutzen, bis sechzehn Taktzyklen aufgetreten sind. Reduktionsoperationen können auch unter Verwendung von Vektorverarbeitungseinheiten 66H durchgeführt werden, die in einem Tensorbetriebsmodus arbeiten. Beispielsweise kann ein Vektor oder Skalar aus einem Register 90 mit mehreren unterschiedlichen Eingabevektoren (oder Skalaren) multipliziert werden. Eine Reduktionsoperation kann an jedem Produkt durchgeführt werden, das durch Multiplizieren einer Eingabe (z.B. eines Vektors oder Skalars) mit einem Vektor oder Skalar, der in dem Register 90 gespeichert ist, erzeugt wird.
  • Unter Berücksichtigung des Vorstehenden können bestimmte KI- und Maschinenlernprozesse zeitintensiv sein und große Mengen an Verarbeitungsleistung beanspruchen. Beispielsweise kann Trainingshardware, die genutzt wird, um maschinelles Lernen oder KI durchzuführen, mehrere Wochen benötigen und viele Operationen involvieren, um Daten zurückzuleiten. Zudem kann das Nutzen einer festen Architektur insofern einschränkend sein, als sie möglicherweise nicht flexibel genug ist, um zu ermöglichen, dass neue Algorithmen implementiert werden oder Arbeitslasten ausgeführt werden. In manchen Fällen können bestimmte Operationen (z.B. Funktionen) Engpässe werden, die zu den verlängerten Zeiträumen beitragen, die nötig sein können, um ein Rechensystem zu trainieren, das für KI- oder Maschinenlernanwendungen verwendet wird. Zwei Beispiele für solche Funktionen sind in 12 angegeben. Insbesondere ist Operation 120 eine Batch-Normalisierungsoperation und Operation 122 eine Softmax-Operation. Sowohl die Operation 120 als auch die Operation 122 beinhalten viele Einzeloperationen. Zum Beispiel würde das Durchführen der Operation 122 an einem Vektor mit 64 Werten 192 Operationen (64 Operationen zum Berechnen von ex (wobei x jeder in dem Vektor enthaltene Wert ist), 64 Operationen zum Summieren jedes berechneten Werts und 64 Operationen zum Dividieren jedes berechneten Werts durch die berechnete Summe verwenden, wofür typischerweise 192 Taktzyklen benötigt würden, die durchgeführt werden müssen.
  • Angesichts dessen werden mehrere Ausführungsformen des Vektorverarbeitungssystems 26 besprochen, die die Menge an Zeit reduzieren können, die zum Trainieren von Systemen verwendet wird, die für KI- und Maschinenlernanwendungen verwendet werden. Jede der nachstehend besprochenen Ausführungsformen des Vektorverarbeitungssystems 26 kann eine beliebige der vorstehend besprochenen Komponenten des Vektorverarbeitungssystems 26A beinhalten. Zusätzlich kann jede der Ausführungsformen des Vektorverarbeitungssystems 26 und die nachstehend besprochenen Komponenten davon beliebige der vorstehend mit Bezug auf das Vektorverarbeitungssystem 26A und jede Ausführungsform der Vektorverarbeitungseinheiten 66 besprochenen Operationen durchführen.
  • 13 veranschaulicht ein Vektorverarbeitungssystem 26C, das dem Vektorverarbeitungssystem 26A grundsätzlich ähnlich ist, mit der Ausnahme, dass das Vektorverarbeitungssystem 26C zusätzliche Schalttechnik, wie etwa Schieberegister 140, Multiplexer 142, eine Funktionseinheit 144A und Multiplexer 146, beinhaltet. Wie beschrieben, können Funktionseinheiten (z.B. Funktionseinheit 144A) Operationen an Werten durchführen, die in den Vektorregistern 60 gespeichert sind, was die Zeit, die zum Durchführen dieser Operationen aufgewendet würde, im Vergleich zur Verwendung nur der Vektorverarbeitungseinheiten 66 reduzieren kann. Zum Beispiel können die Funktionseinheiten 144 Operationen gleichzeitig mit den Vektorverarbeitungseinheiten 66 durchführen, wodurch die Anzahl von Operationen, die durch die Vektorverarbeitungseinheiten 66 durchgeführt werden, sowie die Anzahl von Eingaben, die die Kreuzschienenschalter 64 A, 64 B leiten würden, im Vergleich zu anderen Vektorverarbeitungssystemen, die keine Funktionseinheiten 144 beinhalten (z.B. das Vektorverarbeitungssystem 26A), reduziert werden.
  • Das Schieberegister 140 jeder „Lane“ (z.B. Spalte eines Multiplexers 146, Vektorregister 60, Multiplexer 142 und Schieberegister 140) kann mit Werten aus dem Vektorregister bzw. den Vektorregistern dieser Lane 60 geladen werden. Zum Beispiel kann das Schieberegister 140 genutzt werden, um einen Vektor aus den Vektorregistern 60 zu speichern, an dem eine Operation durchgeführt wird (z.B. durch die Funktionseinheit 144A). Die Multiplexer 142 können genutzt werden, um den Datenfluss über die Schieberegister 140 und zu der Funktionseinheit 144A zu steuern.
  • Die Funktionseinheit 144A kann ein Funktionsblock sein, der genutzt wird, um eine von mehreren unterschiedlichen Operationen durchzuführen. Zum Beispiel können die Operationen, zu deren Durchführung die Funktionseinheit 144A genutzt werden kann, ohne jedoch hierauf eingeschränkt zu sein, Exponenten- (z.B. ex) Berechnungen, logarithmische Berechnungen (z.B. log(x), ln(x)), Divisionsoperationen, Quadratwurzeloperationen, inverse Quadratwurzeloperationen beinhalten. Die Funktionseinheit 144A kann Register 148 beinhalten, die als ein Puffer (z.B. FIFO- (First-In-First-Out-) Puffer) genutzt werden, um Werte (z.B. Vektoren) zu speichern, die von den Vektorregistern 60 empfangen werden. Die Multiplexer 146 empfangen Ausgaben der Funktionseinheit 144A und stellen die Ausgaben den Vektorregistern 60 zur Speicherung bereit.
  • In einem Fall, in dem die Schieberegister 140 mit Daten von XLanes von Daten geladen werden können, eine Taktverschiebung von X Taktzyklen vorgenommen werden kann (z.B. unter Verwendung eines Zählers, der die Anzahl an Lanes berücksichtigt) und die Funktionseinheit 144A für YLanes genutzt wird (z.B. sind YLanes pro Funktionseinheit 144A vorhanden), werden grundsätzlich X + Y + 2 Taktzyklen benötigt, um die Daten aus den Vektorregistern 60 an die Funktionseinheit 144A bereitzustellen, wobei die Funktionseinheit 144A eine Operation an jeder Eingabe durchführt und die Ausgaben der Funktionseinheit 144A in die Vektorregister 60 zurückschreibt. Des Weiteren kann die in 13 bereitgestellte Struktur parallelisiert sein. Zum Beispiel könnte eine Funktionseinheit 144A für jeweils 4, 8, 16, 32, 64 oder eine beliebige andere geeignete Anzahl an Lanes genutzt werden.
  • 14 veranschaulicht ein Vektorverarbeitungssystem 26D, das mehrere Funktionseinheiten 144 (z.B. Funktionseinheiten 144A, 144B, 144C) beinhaltet, die unterschiedliche Funktionen durchführen können. Die Funktionseinheit 144A kann zum Beispiel Exponentialoperationen durchführen, die Funktionseinheit 144B kann logarithmische Operationen durchführen und die Funktionseinheit 144C kann Divisionsoperationen durchführen. Die Anzahl an Lanes, für die jede der Funktionseinheiten 144A, 144B, 144C genutzt wird, kann gleich sein oder sich unterscheiden. Zum Beispiel kann es alle n Lanes eine von jeder der Funktionseinheiten 144A, 144B, 144C geben. Als weiteres Beispiel kann es alle sechzehn Lanes eine Funktionseinheit 144A, alle zweiunddreißig Lanes eine Funktionseinheit 144B und alle vierundsechzig Lanes eine Funktionseinheit 144C geben. In diesem letzten Beispiel kann die Größe der Schieberegister 140 kleiner sein, wenn weniger Lanes vorhanden sind, die mit einer Funktionseinheit 144 assoziiert sind. Des Weiteren kann jede der Funktionseinheiten 144 unterschiedliche Pipelinetiefen (z.B. in Abhängigkeit von einer speziellen durchzuführenden Funktion oder einer gewünschten Implementierung eines Benutzers, die zum Durchführen der Funktion genutzt wird) aufweisen.
  • 15 veranschaulicht Schalttechnik 170, die in einer Funktionseinheit enthalten sein kann, um eine Horner-Regel-Pipeline durchzuführen, die über mehrere Funktionen hinweg gemeinsam genutzt wird. Durch die Reduktionsschalttechnik 172 (die unter Verwendung der Funktionseinheiten 144 implementiert werden kann) können eine exakte Zerlegung und eine Grobzerlegung durchgeführt werden. Eine Koeffizientenauswahlschalttechnik 174 kann Koeffizienten aus Eingabedaten auswählen und es kann eine abschließende Operation zur Kombination durchgeführt werden.
  • 16 veranschaulicht ein Vektorverarbeitungssystem 26E, das grundsätzlich dem Vektorverarbeitungssystem 26D ähnelt, mit der Ausnahme, dass das Vektorverarbeitungssystem 26E eine Funktionseinheit 144D, einen Kreuzschienenschalter 190 und ein Skalarregister 62 beinhaltet. Die Funktionseinheit 144D kann Addierschalttechnik und ein Register beinhalten, und die Funktionseinheit 144D kann als Akkumulator fungieren. Ein Wert aus der Funktionseinheit 144D kann dem Skalarregister 62 (z.B. über den Kreuzschienenschalter 190) bereitgestellt werden. Das Skalarregister 62 ist kommunikativ mit dem Kreuzschienenschalter 64B gekoppelt, und Daten aus dem Skalarregister 62 können den Vektorverarbeitungseinheiten 66 bereitgestellt und von diesen genutzt werden (z.B. als „Ss1“). Das Verwenden des Vektorverarbeitungssystems 26E kann große Zeitreduzierungen zum Durchführen bestimmter Operationen, wie etwa der in 12 gezeigten Operation 122, bieten. Beispielsweise können in dem obigen Beispiel, in dem die Operation 122 durchgeführt wird, die Werte der Summe der Exponentenoperationen unter Verwendung der Funktionseinheit 144D bestimmt werden. Wenn jede der Exponentenoperationen durchgeführt wurde, wird die Summe der Exponentenoperationen (z.B. der Wert des Nenners der Operation 122) berechnet (z.B. anstatt die Exponentenoperationen durchführen und dann jedes Ergebnis der Exponentenoperationen summieren zu müssen). Dieser Wert kann dann über den Kreuzschienenschalter 64B an die Vektorverarbeitungseinheiten 66 geliefert werden und als ein Skalar in einer Vektor-Skalar-Operation (z.B. Multiplikationsoperation) an jedem der Ergebnisse der Exponentenoperationen genutzt werden. Des Weiteren kann die Funktionseinheit 144D Akkumulationsoperationen zur gleichen Zeit durchführen, zu der Daten von den Funktionseinheiten 144A, 144B, 144C zur Speicherung zurück an die Vektorregister 60 geliefert werden.
  • Funktionseinheiten 144 können zudem für jede Lane vorgesehen sein. Wie beispielsweise in 17 gezeigt, beinhaltet ein Vektorverarbeitungssystem 26F Funktionseinheiten 144E, die in jeder Lane enthalten sind. Der Kreuzschienenschalter 64B aus 17 kann zusätzliche Routing-Schalttechnik (z.B. Multiplexer) beinhalten, um die durch die Funktionseinheiten 144E ausgegebenen Daten zu leiten. Als nicht einschränkende Beispiele können die Funktionseinheiten 144E Divisionsoperationen und inverse Quadratwurzeloperationen durchführen.
  • 18 veranschaulicht die Funktionsweise der Funktionseinheiten 144E. Operation 200 veranschaulicht zum Beispiel, wie eine Divisionsoperation durchgeführt werden kann, und Operation 202 veranschaulicht, wie eine inverse Quadratwurzeloperation durchgeführt werden kann. Die „magische Zahl“ ist eine erste Invers-Quadratwurzel-Konstante, die eine Schätzung einer Start-Iteration sein kann, die für eine inverse Gleitkomma-Quadratwurzel-Bestimmung verwendet wird. Die Operationen 200, 202 können an Daten verschiedener Formate, wie etwa unter anderem FP32 und bfloat16, durchgeführt werden.
  • 19 veranschaulicht Schalttechnik 210, die in einer Funktionseinheit 144 enthalten sein kann, sowie Operationen 212, die die Schalttechnik 210 durchführen kann. Die Operationen beinhalten eine Vektor-Vektor-Multiplikation und -Addition („WFP16MULA“), die bfloat16-Werte beinhaltet, eine Vektor-Skalar-Multiplikation und -Addition („VSFP16MULA“), die bfloat16-Werte beinhaltet, und eine Horner-Regel-Anweisung, die genutzt werden kann, um Polynome zu erweitern (z.B. unter Verwendung zweier Skalare).
  • Die Funktionseinheiten 144 können auch für Reduktionsoperationen genutzt werden. 20 veranschaulicht zum Beispiel eine Kette 230 aus Funktionseinheiten 144, die in einem Vektorverarbeitungssystem 26 enthalten sein können und zum Durchführen von Reduktionsoperationen (z.B. unter Verwendung eines rekursiven Datenflusses) genutzt werden können. Insbesondere kann die Kette 230 aus Funktionseinheiten 144 dynamisch logarithmische Reduktionen durchführen. Zum Beispiel kann die Kette 230 aus Funktionseinheiten 144 eine 256-Element-Reduktion in ungefähr fünfzehn Taktzyklen durchführen. Im Rahmen der Operation 122 kann die Kette 230 aus Funktionseinheiten 144 die Werte (z.B. 64 Werte) aus den Exponentenoperationen in etwa zehn Taktzyklen summieren. Zu den Reduktionsoperationen, die die Kette 230 aus Funktionseinheiten 144 durchführen kann, zählen, ohne jedoch hierauf eingeschränkt zu sein, Summieren und Reduzieren (z.B. Berechnen einer Summe und Durchführen einer Reduktion an der Summe), ein Max-Reduzieren (Bestimmen eines Maximalwerts) und ein Min-Reduzieren (Bestimmen eines Minimalwerts).
  • Es ist anzumerken, dass die Teile der verschiedenen Ausführungsformen des Vektorverarbeitungssystems 26 ineinander enthalten sein können. Zum Beispiel können die Vektorverarbeitungssysteme 26C, 26D, 26E so modifiziert werden, dass sie Funktionseinheiten 144 in jeder Lane (z.B. wie in 17 gezeigt) beinhalten. Mit anderen Worten können die Funktionseinheiten 144 in Vektorverarbeitungseinheiten 66 innerhalb von Lanes 82 in den Vektorverarbeitungssystemen 26 enthalten sein.
  • Registerdateien und Vektorverarbeitungseinheit-Lanes
  • Unter Rückbezug auf 4 werden nun Registerdateien und Vektorverarbeitungseinheit-Lanes (z.B. Lanes 82A, 82B) besprochen. Die vorliegend besprochenen Registerdateien können die Vektorregisterdateien 81 (die den Vektorregistern 60 aus 3 entsprechen können) sowie Skalarregisterdateien (z.B. Registerdateien, die für das Skalarregister 62 aus 3 verwendet werden) beinhalten. Wie vorstehend angemerkt, sind die Vektorregisterdateien 81 zum Beispiel kommunikativ mit einer oder mehreren Lanes 82 einer Vektorberechnungseinheit 80 gekoppelt, und Vektoroperanden können den Vektorverarbeitungseinheiten 66 und Funktionseinheiten 79 der Lanes 82 zugeführt werden. Die Lanes 82 nehmen Elemente des Operanden an, führen Berechnungen an den Elementen durch und geben einen resultierenden Wert aus. Der resultierende Wert kann der Vektorregisterdatei 81 bereitgestellt und in dieser gespeichert werden.
  • Angesichts dessen können die Operationen des Vektorverarbeitungssystems 26B in Pipelines gestellt werden, um die Leistungsfähigkeit des Vektorverarbeitungssystems 26B zu verbessern. Mit anderen Worten können, wie nachstehend besprochen, verschiedene Ausführungsformen von Teilen des Vektorverarbeitungssystems 26B einschließlich der Vektorregisterdatei 81 und der Lanes 82 genutzt werden, um dem Vektorverarbeitungssystem 26B und der IC-Einrichtung 12 zu ermöglichen, Berechnungen effizienter durchzuführen, die Vektoren involvieren. Mit anderen Worten kann die IC-Einrichtung 12 angepasst werden, um Vektoroperationen effizienter oder effektiver durchzuführen (z.B. im Vergleich zu oder relativ zu anderen Ausführungsformen). Beispielsweise können in manchen Fällen verschiedene Ansätze getroffen werden, um „Chime“ zu minimieren oder zu reduzieren, wobei es sich um die Anzahl von Taktzyklen handelt, die benötigt wird, um einen Vektorbefehl auszuführen, während gleichzeitig die „Totzeit“ niedrig gehalten wird. Wie hier verwendet, bezieht sich „Totzeit“ auf die Zeit, die benötigt wird, um eine Lane 82 zu leeren, wenn die Lane eine Vektoranweisung beendet und bevor sie in der Lage ist, den nächsten Vektorbefehl auszuführen, der durch die Vektorverarbeitungseinheit 66 durchzuführen ist, die in dieser Lane 82 enthalten ist. In einigen Fällen kann Kommunikation über Lanes 82 innerhalb einer Vektorberechnungseinheit 80 hinweg sowie Kommunikation zwischen Vektorberechnungseinheiten 80 genutzt werden.
  • Um nun auf die Vektorregisterdatei 81 zu kommen, wird die Vektorregisterdatei 81 genutzt, um Vektordaten für eine gegebene Vektorberechnungseinheit 80 beizubehalten. Die Vektorregisterdatei 81 kann Operanden an die Lanes 82 der Vektorberechnungseinheit 80 liefern und die Ausgaben der Lanes 82 speichern. Wie vorstehend angemerkt, kann die Vektorregisterdatei 81 unter Verwendung von On-Chip-Speicher implementiert werden, der in der IC-Einrichtung 12 enthalten ist, wie etwa statischem RAM (SRAM). Unter Berücksichtigung dessen werden im Folgenden einige Gestaltungsoptionen der Vektorregisterdatei besprochen. Zuvor werden jedoch mehrere Parameter des Speichers beschrieben, die zum Implementieren des Vektordateiregisters 81 genutzt werden können. Jeder dieser Parameter kann von einem Programmentwickler beim Entwurf eines Vektorverarbeitungssystems berücksichtigt werden.
  • Da ist zunächst Tiefe, was sich auf die Anzahl von Wörtern bezieht, die in einer bestimmten Registerdatei gespeichert werden können. Mit anderen Worten kann die Tiefe die Datenmenge repräsentieren, die ein bestimmtes Register speichern kann. Ein zweiter Parameter ist Breite, was sich auf die Anzahl von Bits in jedem Wort bezieht. Das heißt, die Breite kann die Größe der Datenelemente repräsentieren, die gespeichert werden. Der dritte Parameter ist die Anzahl der Lese- und Schreibports.
  • Um mit den Zeichnungen fortzufahren, ist 21 ein Blockdiagramm einer ersten Registerdateiorganisation 250A. Wie veranschaulicht, weist ein Speicherblock 252A, der eine Registerdatei (z.B. Vektorregisterdatei 81) speichert, zwei Leseports 254A und einen einzigen Schreibport 256A auf, die mit einer Lane 82C verbunden sind. Die Registerdatei enthält zusammenhängende Vektorelemente. Die Vektorverarbeitungseinheit 66 der Lane 82C kann Operationen unter Verwendung einer oder zweier Eingaben durchführen, die von den Leseports 254A empfangen werden, um eine einzige Ausgabe zu erzeugen. Die Ausgabe kann über den Schreibport 256A im Speicherblock 252A gespeichert werden.
  • 22 ist ein Blockdiagramm einer zweiten Registerdateiorganisation 250B, in der eine Registerdatei skaliert wurde, um mit zwei Lanes 82D, 82E zu arbeiten. Insbesondere ist die Registerdatei in zwei Bänke (z.B. Speicherblöcke 252B, 252C) organisiert. Jeder der Speicherblöcke 252B, 252C weist zwei Leseports 254B und einen einzigen Schreibport 256B auf, die mit einer Lane 82 (z.B. einer der Lanes 82D, 82E) verbunden sind. Vektorelemente sind verschachtelt, so dass jede Speicherbank unabhängige Vektorelementgruppen enthält. Zum Beispiel können ungerade Elemente in dem Speicherblock 252B gespeichert und aus diesem gelesen werden und durch die Lane 82D bearbeitet werden, und Ausgaben aus der Lane 82D können dem Speicherblock 252B zur Speicherung bereitgestellt werden. Gerade Elemente können im Speicherblock 252C gespeichert und aus diesem gelesen werden und durch die Lane 82E bearbeitet werden, und Ausgaben aus der Lane 82E können dem Speicherblock 252C zur Speicherung bereitgestellt werden. Das Verwenden der zweiten Registerdateiorganisation 250B kann ermöglichen, dass Ergebnisse im Vergleich zu der ersten Registerdateiorganisation 250A schneller bestimmt werden, da mehrere Lanes 82 verwendet werden, um Operationen an Eingaben durchzuführen. Jedoch belegt die zweite Registerdateiorganisation 250B relativ zu der ersten Registerdateiorganisation 250A näherungsweise die doppelte Fläche auf der IC-Einrichtung 12.
  • 23 ist ein Blockdiagramm einer dritten Registerdateiorganisation 250C, in der ebenfalls zwei Lanes 82 (z.B. Lanes 82F, 82G) verwendet werden, aber die Registerdatei als eine einzige breite Registerdateispeicherbank (z.B. Speicherblock 252D) implementiert ist. Jedes Wort in der Speicherbank 252D enthält zwei Vektorelemente. Dementsprechend kann jeder Leseport 254C zwei Elemente in einem einzigen Lesevorgang liefern, und die Elemente werden den zwei Lanes 82F, 82G (z.B. über die Entkettungsschalttechnik 258) bereitgestellt. Ebenso werden Ergebnisse aus den beiden Lanes verkettet (z.B. über die Verkettungsschalttechnik 260), um ein vollständiges Wort zu bilden, das in die Registerdatei geschrieben werden soll, die in der Speicherbank 252D gespeichert ist.
  • Die vorliegend offenbarten Methoden ermöglichen, dass Registerdateiorganisationen 250 auf eine Weise verwendet werden, die Speicherressourcen, die in der IC-Einrichtung 12 enthalten sein können, effizient nutzt. In einer Ausführungsform, in der die IC-Einrichtung 12 eine programmierbare Logikeinrichtung wie etwa ein FPGA ist, können zum Beispiel Registerdateiorganisationen 250 Speicher verwenden, der konfigurierbar ist, um 1000 20-Bit-Register (z.B. eine M20K-Registerdatei) oder 512 40-Bit-Register zu unterstützen. Somit können die Tiefe (z.B. die Anzahl von Registern) und die Breite (Größe jedes Registers) konfigurierbar sein, um verschiedene Datentypen (z.B. basierend auf der Wortgröße) flexibel zu unterstützen. Um beispielsweise FP32-Werte zu speichern, kann ein einzelner Speicherblock mit Registern, die vierzig Bits breit sind, bis zu 512 Werte speichern. Alternativ können zwei Speicherblöcke mit Registern, die zwanzig Bit breit sind, parallel genutzt werden, um FP32-Werte zu unterstützen. Des Weiteren kann eine einzige Pipeline-Stufe verwendet werden, um betriebene Lesevorgänge durchzuführen. Falls zum Beispiel eine Vektorregisterdatei mehrere Speicherblöcke verwendet und Daten (z.B. über Weichlogik des FPGA) zu mehreren Lanes 82 geleitet werden sollen, kann Pipelining die Implementierungsfrequenz verbessern. Beispielsweise können mehrere Pipeline-Stufen genutzt werden, um Operanden zu lesen und Ausgaben der Lanes 82 zurückzuschreiben. Es ist zudem anzumerken, dass mehrere Speicherblöcke genutzt werden können, um tiefere Registerdateien zu implementieren. Um zum Beispiel mehr als 512 Vektorregister zu unterstützen, können mehrere Speicherblöcke der IC-Einrichtung 12 genutzt werden. Die Verwendung einer tieferen Vektorregisterdatei ermöglicht es, eine längere Pipeline und einen längeren Chime zu unterstützen, da die Vektorregisterdatei verwendet werden kann, um lange Vektoren als eine Sequenz von Operationen an mehreren Vektorteilmengen auszuführen. Von daher kann die Pipeline-Anstiegszeit amortisiert werden, wodurch die Gesamteffizienz der IC-Einrichtung 12 verbessert wird.
  • Des Weiteren können Vektorregisterdateien mit gemischter Genauigkeit beinhalten. Das heißt, es können Daten mit unterschiedlichen Breiten (z.B. Anzahl an Bits) in einer Vektorregisterdatei enthalten sein. Zum Beispiel kann eine einzelne Registerdatei verschiedene Genauigkeiten von Festkommawerten, Gleitkommawerten oder eine Kombination aus diesen beinhalten. Als weiteres Beispiel kann eine einzelne Registerdatei FP32-Werte oder INT8-Werte beinhalten, die beide 32-Bit-Vektorelemente sein können (z.B. wenn vier INT8-Werte verwendet werden).
  • Anweisungen geben die an einem bestimmten Vektorelement durchzuführende Operation und die für eine solche Operation verwendete Genauigkeit vor. Beispielsweise können basierend auf Anweisungen und Elementbreite verschiedene Mengen an Elementen in einem einzigen Zyklus gelesen werden. Zum Beispiel kann ein 32-Bit breiter Leseport einen einzelnen FP32-Wert, zwei bfloat16-Werte oder vier INT8-Werte in einem einzigen Zyklus lesen.
  • Darüber hinaus können die Speicherblöcke, die für die Vektorregisterdateien genutzt werden, basierend auf Zielgenauigkeiten eingestellt werden. Falls der Endbenutzer beispielsweise Anwendungen unter Verwendung von INT8-Genauigkeit anvisieren möchte, kann der Endbenutzer wählen, fünf INT8-Werte auf einen einzelnen Leseport eines Datenblocks zu packen, der 40-Bit-Register beinhaltet, anstatt einem anderen Typ von Speicherblock, der, wenn er verwendet würde, ungenutzte Bits aufweisen würde. Als weiteres Beispiel, das FP32-Werte involviert, können fünf FP32-Werte (die insgesamt 160 Bits aufweisen) in vier 40-Bit-Registern gespeichert werden, im Gegensatz zu der Verwendung eines 40-Bit-Registers, um einen einzelnen FP32-Wert zu speichern, was dazu führen würde, dass acht Bits des Registers, das für den einzelnen FP32-Wert verwendet wird, ungenutzt wären.
  • Des Weiteren können In-Line-Umwandlungsoperationen durchgeführt werden, wenn Vektorregisterdateilese-und -schreib-Operationen durchgeführt werden. Das heißt, die IC-Einrichtung 12 kann Präzisionsumwandlungen durchführen, wenn Daten gelesen oder geschrieben werden. In einer Ausführungsform kann das Umwandeln durch Logik, die auf der IC-Einrichtung 12 enthalten ist (z.B. Weichlogik eines FPGA), oder durch Speicher selbst (z.B. On-Chip-Speicher, der in der IC-Einrichtung 12 enthalten ist, oder Speicher, der kommunikativ mit der IC-Einrichtung 12 gekoppelt ist) durchgeführt werden. Dementsprechend können Werte mit einer Genauigkeit aus einer Vektorregisterdatei gelesen und in eine andere Genauigkeit umgewandelt werden, und die Werte der anderen Genauigkeit können genutzt werden, wenn Operationen durchgeführt werden (z.B. in den Lanes 82). Der oder die resultierenden Werte können wieder in die ursprüngliche Genauigkeit umgewandelt und mit der ursprünglichen Genauigkeit in der Vektorregisterdatei gespeichert werden.
  • Um mit den Zeichnungen fortzufahren, veranschaulicht 24 das Nutzen von Lanes 82, um die Leistungsfähigkeit der Vektorberechnungseinheiten 80 zu skalieren. Insbesondere beinhaltet 24 eine einzelne Lane 82H, die Operationen an Eingaben (z.B. Werten, die von einer Vektorregisterdatei 81 empfangen werden) durchführen kann, sowie zwei Lanes 821, 82J, die ebenfalls genutzt werden können, um Operationen an Eingaben durchzuführen. Da Elemente eines Vektors unabhängig sind, können die Elemente partitioniert und einer oder mehreren Lanes 82 zugewiesen werden. Die Leistungsfähigkeit kann zum Beispiel durch Instanziieren mehrerer Lanes skaliert werden, und unabhängige Vektorelemente können gleichzeitig durch die Lanes 82 berechnet werden. Somit kann ein einzelner Vektorbefehl viele Operationen aufrufen und die Anzahl von Lanes 82 nutzen, die in der Vektorverarbeitungseinheit 66 verfügbar sind. Die Partitionierung von Vektorelementen in Lanes kann durch Verschachteln (interleaving) von Vektorelementen erfolgen, so dass diese als unabhängige Elementgruppen gespeichert und bearbeitet werden können.
  • Vor diesem Hintergrund veranschaulicht 24 insbesondere zwei potentielle Implementierungen zum Durchführen eines einzelnen Vektorbefehls (vmul), der zwei Vektoren (Vs1, Vs2) liest und einen Schreibausgabevektor (Vd) produziert. In einer Ausführungsform wird eine einzige Lane 82H verwendet, um den Befehl auszuführen. In einer solchen Ausführungsform ist jedes Vektorelement der Lane 82H zugeordnet, und die Vektorregisterdatei behält ebenfalls alle Vektorelemente bei. In einer anderen Ausführungsform, die ebenfalls in 24 veranschaulicht ist, werden zwei Lanes 821, 82J verwendet, um den Befehl durchzuführen. Insbesondere werden der Lane 821 gerade Vektorelemente und der Lane 82J ungerade Elemente zugewiesen. Diese ungeraden und geraden Gruppen sind absolut unabhängig und können durch die zwei Lanes parallel bearbeitet werden (und in separaten Vektorregisterdateien gehalten werden, wie vorstehend besprochen).
  • Vor dem Hintergrund der Erörterung von 24 und unter kurzem Rückbezug auf 4 sind die Lanes 82 hochgradig anpassbar, um zu ermöglichen, dass Operationen unter Verwendung einer speziellen Konfiguration durchgeführt werden. Beispielsweise können die Funktionseinheiten 79 zusammengesetzt sein, um andere Operationen (z.B. komplexere Operationen als Multiplikation und Addition) durchzuführen, wodurch die Effizienz verbessert wird, da eine einzige Registerdatei, die in eine Lane 82 gelesen wird, in mehreren abhängigen Operationen verwendet werden kann, die innerhalb mehrerer Funktionseinheiten 79 innerhalb einer Lane 82 auftreten. Wenn jedoch weniger Funktionseinheiten 79 in einer Lane enthalten sind, können, wie nachstehend erörtert wird, solche komplexen Operationen immer noch durchgeführt werden, indem mehrere Vektorbefehle (z.B. mehrere Abruf-, Decodier-und Vektorregisterdatei-Leseoperationen) durchgeführt werden.
  • Darüber hinaus sind die Anzahl von Funktionseinheiten 79 und Verbindungen über die Funktionseinheiten 79 hinweg (z.B. über die Interconnect-Schalttechnik 84) in Abhängigkeit von Zielvektorprozessorinstanzen anpassbar. Zum Beispiel kann eine Lane 82 eine einzige Funktionseinheit 79 oder viele Funktionseinheiten 79 (z.B. fünf Funktionseinheiten 79, zehn Funktionseinheiten 79, Dutzende von Funktionseinheiten 79 oder über einhundert Funktionseinheiten 79) beinhalten. Des Weiteren ermöglichen Interconnects, dass mehr Daten zwischen den Funktionseinheiten 79 einer Lane 82 bewegt werden. Die Art von Interconnect, die auf einem Vektorverarbeitungssystem 26 instanziiert ist, das auf der IC-Einrichtung 12 implementiert ist (oder teilweise auf der IC-Einrichtung 12 implementiert ist), kann nach Wunsch durch einen Endbenutzer oder Entwickler angepasst werden. Beispielsweise können kaskadierende Funktionseinheiten 79 mit fester Reihenfolge zu einer konfigurierbaren Kreuzschiene oder einer anderen Routing-Schalttechnik vorhanden sein, die dynamisch über die Reihenfolge von Operationen entscheiden können, die an den Funktionseinheiten 79 durchzuführen sind.
  • Die Steuerlogik 83 ist programmierbar und kann die Interaktion und Operationen der Funktionseinheiten 79 basierend auf der ausgeführten Anweisung verwalten. Die Steuerung kann als ISA-Architekturzustände dargestellt werden und dynamisch durch Anweisungen angesteuert werden, wodurch ermöglicht wird, dass flexibel angepasste Operationen über Software auf den Lanes 82 der Vektorverarbeitungssysteme 26 aufgerufen werden.
  • Des Weiteren ermöglichen die Lane-Verbindungen 85 Verbindungen über die Lanes 82 hinweg. Die Lanes 82 können interagieren und koordinierte Verarbeitung durchführen, wie etwa für eine vorstehend besprochene Reduktionsoperation oder nachstehend besprochene grobe Tensoroperationen. Für solche Fälle können Lane-Verbindungen 85 zwischen den Lanes 82 eingerichtet werden. Die Verbindung könnte zum Bewegen von Daten über Lanes 82 (zum Beispiel zum Übertragen von Zwischenergebnissen, die durch eine Lane 82 erzeugt werden, zu einer benachbarten Lane 82) oder für In-Line-Berechnung (z.B. Akkumulation) vorgesehen sein. Da unterschiedliche Instanzen von Vektorverarbeitungssystemen 26 für unterschiedliche Benutzerziele angepasst werden können (z.B. optimiert für unterschiedliche Anwendungsdomänen), könnte die Auswahl, welche Verbindungen oder ob überhaupt Lane-Verbindungen 85 verwendet werden sollen, durch den Benutzer der IC-Einrichtung 12 getroffen werden.
  • Es sind viele Anpassungs- und Gestaltungsoptionen möglich, wenn eine Implementierung eines zu verwendenden Vektorverarbeitungssystems 26 ausgewählt wird, wie etwa Typ und Anzahl von Funktionseinheiten 79, welcher Interconnect zu verwenden ist und welche dynamische Programmierbarkeit unterstützt werden soll. Eine Vektorverarbeitungssysteminstanz würde die Anpassungs- und Gestaltungsoptionen auf das vom Benutzer gewünschte Ziel zuschneiden. Falls es zum Beispiel einen spezifischen Zielanwendungsbereich gibt, dann kann der Typ von Funktionseinheiten 79 für gewöhnlich verwendete Operationen in diesem Bereich optimiert werden. Falls das Ziel ist, minimale FPGA-Fläche/Ressource zu verwenden, kann eine Instanz ein einfaches Design ohne Lane-Verbindungen und nur eine funktionale Einheit wählen. Falls das Ziel allgemeiner ist und viele Operationen abdecken muss, könnte vielleicher eine softwareprogrammierbare Lane gewünscht sein, so dass eine einzelne Vektorprozessorinstanz einen breiten Anwendungsbereich bedienen kann. Zur weiteren Erörterung der Anpassung werden nun 25-27 erläutert. Konkret zeigen 25-27 jeweils eine oder mehrere Lanes 82, die zum Ausführen einer Gauß-Fehlerbegrenzungseinheit-(GELU-) Operation verwendet werden, die gemäß der nachstehend angegebenen Gleichung 1 durchgeführt werden kann: GELU ( x ) = c 1 × x × ( 1 + tanh ( c 2 × x × ( 1 + c 3 × x × x ) ) )
    Figure DE102021121732A1_0001
    wobei c1, c2 und c3 Konstanten sind. Insbesondere veranschaulicht 25 Lanes 82K, 82L, die jeweils vollständig kaskadierte Sätze von Funktionseinheiten 79 beinhalten. Mit anderen Worten wird eine Eingabe (z.B. x) durch eine erste Funktionseinheit 79 empfangen, die eine Operation (z.B. Multiplikation) durchführt, die DIE Eingabe involviert, um ein Zwischenergebnis zu erzeugen, das einer nachfolgenden Funktionseinheit 79 zur weiteren Verarbeitung bereitgestellt wird. Eine solche Kette von Operationen wird fortgesetzt, bis eine letzte Funktionseinheit 79 in einer Lane 82 eine Ausgabe erzeugt (z.B. GELU(x)). In dem in 25 angegebenen Beispiel kann ein einzelner Registerdateilesevorgang der Eingabe pro Lane 82 vorgenommen werden und führen die Funktionseinheiten 79 die GELU-Operation in einem einzigen Durchlauf durch die Lane 82 durch. Mit zwei verfügbaren Lanes 82K, 82L kann die veranschaulichte Implementierung zwei GELU-Ergebnisse pro Zyklus erzeugen.
  • 26 veranschaulicht eine weitere Implementierung der GELU-Funktion, bei der die Lanes 82M, 82N jeweils Teile einer einzigen GELU-Operation durchführen, um eine Ausgabe (z.B. GELU(x)) zu erzeugen. Insbesondere können die Lanes 82M, 82N Daten über Lane-Verbindungen miteinander teilen, wie vorstehend besprochen, so dass eine Lane 82 eine Eingabe von einer anderen Lane empfangen und eine oder mehrere Operationen (über Funktionseinheiten 79) durchführen kann. Somit ist die GELU-Operation in verschiedene Teile unterteilt, die über die Lanes 82M, 82N durchgeführt werden. In diesem Fall kann eine Eingabe durch beide Lanes 82M, 82N einmal gelesen werden und die Lanes 82M, 82N können ein GELU-Ergebnis pro Zyklus produzieren. Dementsprechend können mehrere Lanes 82 genutzt werden, um einen Prozess (z.B. eine GELU-Operation) durchzuführen, der zu einer einzigen Ausgabe führt.
  • 27 veranschaulicht eine Lane 82O, die mit einer minimalen Anzahl von Funktionseinheiten 79 (z.B. eine Funktionseinheit 79, die zur Multiplikation verwendet wird, eine Funktionseinheit 79, die zur Addition verwendet wird, und eine Funktionseinheit, die für Hyperbeltangensoperationen (d.h. tanh) verwendet wird) verwendet wird, um eine GELU-Operation durchzuführen. Mit anderen Worten beinhaltet die Lane 82O eine Funktionseinheit 79 für jeden Operationstyp, der verwendet wird, um eine GELU-Operation durchzuführen.
  • Steuerschalttechnik (z.B. die Steuerlogik 83) kann die Operation zeitlich sequenzieren, um die GELU-Operation abzuschließen. Beispielsweise kann bei der Durchführung jedes Teils der GELU-Operation eine Ausgabe erzeugt und über die Steuerschalttechnik umgeleitet werden, so dass eine anschließende Operation durch die Funktionseinheit 79 durchgeführt werden kann, die in der Lage ist, diese Operation durchzuführen. Somit würde die GELU-Operation zur Ausführung mehr als einen Zyklus verwenden. Wie jedoch durch Vergleichen von 27 mit sowohl 25 als auch 26 erkennbar ist, ist die Lane 82O im Vergleich zu den Lanes 82K, 82L, 82M, 82N einfacher (z.B. beinhaltet weniger Funktionseinheiten 79).
  • Bevor mit anderen Merkmalen fortgefahren wird, die durch die Lanes 82 unterstützt werden, sollte angemerkt werden, dass die GELU-Operation als ein Beispiel für eine Operation bereitgestellt wird, die die Vektorverarbeitungssysteme 26 durchführen können. Beispiele für andere Operationen, die das Vektorverarbeitungssystem 26 durchführen kann (z.B. unter Verwendung von Vektorverarbeitungseinheiten 66 der Lanes 82), sind die rektifizierte lineare Aktivierungsfunktion (RELU), eine Hyperbeltangensoperation (Tanh), Sigmoidfunktionen, Aktivierungsfunktionen, die Exponential-Linear-Unit-(ELU-) Funktion sowie Maxout-Funktionen. Dementsprechend kann Logik der IC-Einrichtung 12 (z.B. Hartlogik, wie etwa ein oder mehrere DSP-Blöcke) genutzt werden, um eine Vielfalt von Operationen und Funktionen zu unterstützen.
  • Die Lanes 82 können auch In-Lane-Operationen unterstützen, die Daten unterschiedlicher Breiten beinhalten. Wie vorstehend angemerkt, unterstützt das Vektorverarbeitungssystem 26 beispielsweise mehrere Datentypen, darunter, ohne jedoch hierauf eingeschränkt zu sein, INT8, FP32, bfloat16. Die Lanes 82 können auch ein Paket von Elementen bearbeiten, die als kleiner Vektor betrachtet werden können. Als ein Beispiel könnte eine Lane, die 32-Bit-Datenoperanden unterstützt, einen FP32-Element- oder einen 4-Element-Int8-Vektor berechnen. Ein anderes Beispiel ist eine Lane 82 mit einem 80-Bit-Leseport, in dem 10 INT8-Werte gelesen und als Operanden in einer Schalttechnik verwendet werden können, die zum Implementieren wenigstens eines Teils eines Vektorverarbeitungssystems 26 genutzt wird. Zum Beispiel kann ein FPGA Logik (z.B. Weichlogik, Hartlogik oder eine Kombination aus diesen) beinhalten, die einen Tensorblock implementiert, der Punktprodukte unter Verwendung der zehn INT8-Werte als Eingaben bestimmen kann. Zum Beispiel kann jeder der zehn INT8-Werte mit einem anderen Wert (z.B. einem in den Tensorblock vorab geladenen Wert) multipliziert werden, um zehn verschiedene Werte (z.B. als Teil des Bestimmens eines Punktprodukts) zu erzeugen.
  • In vielen Fällen kann es so viele Lanes 82 geben, wie Vektorelemente vorhanden sind. Dies kann ermöglichen, dass die IC-Einrichtung 12 die mit den Vektorelementen verbundenen Operationen (z.B. Vektor-oder Skalaroperationen) schneller durchführt (z.B. im Gegensatz zum Verwenden einer Lane zum Durchführen von Elementen für mehrere Vektorelemente). Beispielsweise können in einigen Fällen weniger Lanes 82 als Vektorelemente vorhanden sein. Dies kann basierend auf der speicherbasierten Registerdatei (die z.B. die Vektorregister 60 beinhalten kann) als virtuelle Lanes implementiert werden. In einem Fall mit vierundsechzig Registern aus 256 Vektorelementen (z.B. 32-Bit-Werten) und zweiunddreißig Lanes 82 kann zum Beispiel jedes Vektorregister 60 auf acht Orte verteilt gestapelt werden (da 256 dividiert durch zweiunddreißig acht ist). Wie in 28 und 29 veranschaulicht, können die Vektorregister 60 auf unterschiedliche Weise gestapelt werden. In 28 und 29 repräsentiert zum Beispiel jedes Kästchen ein Vektorelement, wobei es sich bei jeder Spalte aus Vektorelementen um Vektorelemente einer jeweiligen Lane 82 handelt und jedes Schattierungs- oder Schraffurmuster ein Register (z.B. für eine jeweilige Spalte) repräsentiert. Auf diese Weise können mehrere Kopien von Daten vorhanden, die in parallelen Speichern gespeichert sind, wodurch ermöglicht wird, dass bei beliebigem jeweiligem Taktzyklus auf die Daten von mehreren Orten (z.B. Lanes 82) aus zugegriffen werden kann. Somit können Operationen, bei denen Daten aus mehreren Registern gelesen werden (z.B. Vektor-Vektor-Multiplikation, die beinhaltet, dass Vektorelemente aus mehreren Registern gelesen werden), in einem einzigen Taktzyklus durchgeführt werden.
  • Des Weiteren sollte, bevor mit der Steuerung von DSP-Blöcken fortgefahren wird, angemerkt werden, dass das Vektorverarbeitungssystem 26 eine reihenfolgeveränderte (Out-of-Order-) Verarbeitung durchführen kann. Reihenfolgeveränderte Verarbeitung ist eine Computerarchitekturtechnik, die ermöglicht, dass Befehle außerhalb der Programmreihenfolge ausgeführt werden. Zum Beispiel kann eine reihenfolgeveränderte Verarbeitung verwendet werden, wenn Befehle mit variierendem Latenzniveau ausgeführt werden. Zum Beispiel kann eine Speicherladeoperation, die nicht aus einem Cache liest, viele Zyklen benötigen, um Daten aus dem chipexternen Speicher zu lesen. Liegt nach diesem Ladebefehl ein unabhängiger Addierbefehl vor, so kann dieser erst ausgeführt werden, wenn das Laden abgeschlossen ist. Eine reihenfolgeveränderte Ausführung ermöglicht, dass der Addierbefehl bereits ausgeführt wird, während der Ladebefehl bedient wird. Dementsprechend kann das Vektorverarbeitungssystem 26 eine reihenfolgetreue Verarbeitung sowie eine reihenfolgeveränderte Verarbeitung durchführen.
  • Wie vorstehend besprochen, können die Vektorverarbeitungseinheiten 66 unter Verwendung von Hartlogik implementiert werden, die auf der IC-Einrichtung 12, wie etwa in DSP-Blöcken der IC-Einrichtung 12, enthalten ist. Um den DSP-Blöcken zu ermöglichen, unterschiedliche Anweisungen durchzuführen, sind die DSP-Blöcke (und somit die Vektorverarbeitungseinheiten 66) dynamisch konfigurierbar, um den DSP-Blöcken zu ermöglichen, Anweisungen auszuführen. Mit anderen Worten ist jeder DSP-Block der IC-Einrichtung 12 dynamisch konfigurierbar, um in einem Modus für einen gegebenen Befehl zu arbeiten, der durch den DSP-Block ausgeführt wird. Vor diesem Hintergrund werden im Folgenden drei Beispiele zum Steuern eines DSP-Blocks mit Bezug auf 30-32 besprochen.
  • 30 veranschaulicht eine Vektorverarbeitungseinheit 66I, die den vorstehend besprochenen Vektorverarbeitungseinheiten 66B, 66C etwas ähnlich ist. Insbesondere beinhaltet die Vektorverarbeitungseinheit 661 im Vergleich zu der Vektorverarbeitungseinheit 66C einen Multiplexer 260, der zwei Eingaben empfangen kann: eine Eingabe von Schalttechnik außerhalb der Vektorverarbeitungseinheit 661 (z.B. einen Wert aus einem Vektorregister 60) und eine zweite Eingabe aus dem Register 100, die zur Akkumulation verwendet werden können. In diesem Beispiel empfängt die Vektorverarbeitungseinheit 661 Steuersignale („ctrl“) über eine externe Eingabe. Mit anderen Worten kann ein DSP-Block (der z.B. verwendet wird, um die Vektorverarbeitungseinheit 661 zu implementieren) Steuersignale von Steuerschalttechnik empfangen, die in der IC-Einrichtung 12 enthalten ist. In diesem Fall kann Weichlogik der IC-Einrichtung 12 die Steuerung direkt durch diese Eingaben ansteuern. Wie gezeigt, können die Signale ein Schreibfreigabesignal („Reg_we“), das ermöglicht, dass Daten in das Register 90 geschrieben werden, ein Registerauswahlsignal („Reg_sel“), das ermöglicht, dass der Multiplexer 92 eine bestimmte Eingabe zur Ausgabe wählt, ein Akkumulationsauswahlsignal („Acc_sel“), das ermöglicht, dass eine bestimmte Eingabe in den Multiplexer 260 als Ausgabe ausgewählt wird, und ein Akkumulationsschreibsignal (Acc we), das ermöglicht, dass Daten in das Register 100 geschrieben werden. Auf diese Weise können Daten selektiv geschrieben und für Operationen verwendet werden, die durch die Vektorverarbeitungseinheit 661 durchzuführen sind.
  • Eine andere Möglichkeit zum Steuern der Vektorverarbeitungseinheit 66I besteht darin, den bestehenden Satz von Steuereingaben zu verwenden, aber einige der Eingaben gemeinsam zu nutzen, um Steuersignale einzubringen, die dann in der Vektorverarbeitungseinheit 661 registriert werden. Dies ist in 31 dargestellt. Mit anderen Worten kann die Vektorverarbeitungseinheit 661 (oder der DSP-Block, der zum Implementieren der Vektorverarbeitungseinheit 661 verwendet wird) ein Steuerregister („creg“) beinhalten, das Steuersignale empfängt und bewirkt, dass Schalttechnik in der Vektorverarbeitungseinheit 661 entsprechend gesteuert wird. Jede nachfolgende Operation würde dem durch die registrierte Steuerung konfigurierten Modus folgen. In diesem Fall könnten Vektorbefehle zuerst dieses Steuerregister setzen, woraufhin die Vektorverarbeitungseinheit 661 auf Grundlage des konfigurierten Modus Operationen an den Vektorelementen durchführen kann.
  • Wie vorstehend besprochen, können die Vektorverarbeitungseinheiten 66 eine Sequenz von Operationen im Zeitverlauf durchführen. Dabei kann in verschiedenen Zyklen zwischen verschiedenen Modi umgeschaltet werden. Unter Bezugnahme auf 32 kann in einem solchen Fall eine Sequenziereinheit (angegeben durch „Ucode fsm“) in der Vektorverarbeitungseinheit 661 programmierbar sein, wie etwa durch Mikrocodes, um zu bewirken, dass die Vektorverarbeitungseinheit 661 Betriebsmodi umschaltet, um eine Sequenz von Operationen durchzuführen. Eine solche Form der Steuerung kann zum Durchführen der vorstehend beschriebenen GELU-Funktion nützlich sein. Das Nutzen der Sequenziereinheit kann auch die Menge an Weichlogik reduzieren, die genutzt wird, um komplexe Steuersequenzen außerhalb der Vektorverarbeitungseinheiten 66 zu implementieren.
  • Handhabung von Gefahren
  • Wie bei anderen Architekturen können während des Betriebs des Vektorverarbeitungssystems 26 verschiedene Arten von Gefahren auftreten. Zu solchen Gefahren zählen Lese-nach-Schreib-, Schreib-nach-Lese- und Schreib-nach-Schreib-Gefahren.
  • Eine Lese-nach-Schreib-Gefahr tritt auf, wenn ein Befehl einen Eingabeoperanden beansprucht, der durch einen älteren Befehl erzeugt wird. Um den Eingabeoperanden zu lesen, muss der Befehl sicherstellen, dass er den neuesten Wert liest, wie er durch den älteren Befehl produziert wird. Falls der ältere Befehl das Ergebnis jedoch noch nicht zurückgeschrieben hat, dann kann eine Gefahrenauflösung durchgeführt werden (z.B. Anhalten, bis der ältere Befehl das Ergebnis schreibt, oder Weiterleiten des Ergebnisses unter Verwendung von Umgehungspfaden), um zu verhindern, dass eine Lese-nach-Schreib-Gefahr auftritt.
  • Eine Schreib-nach-Lese-Gefahr besteht darin, dass ein Befehl in ein Register schreibt, aus dem ein älterer Befehl liest. Falls beide Befehle gleichzeitig ausgeführt werden, stellt das Vektorverarbeitungssystem 26 sicher, dass der ältere Befehl den Eingabeoperanden gelesen hat, den er verwendet, bevor der Schreibvorgang durchgeführt wird, um zu verhindern, dass eine Schreib-nach-Lese-Gefahr auftritt.
  • Eine Schreib-nach-Schreib-Gefahr ähnelt einer Schreib-nach-Lese-Gefahr, jedoch gilt diese für einen Befehl, der in ein Register schreibt, das auch das Schreibziel eines älteren Befehls ist. Falls beide Befehle gleichzeitig ausgeführt werden, stellt das Vektorverarbeitungssystem 26 sicher, dass die korrekte Schreibreihenfolge eingehalten wird, wodurch verhindert wird, dass eine Schreib-nach-Schreib-Gefahr auftritt. Tatsächlich kann, wie nachstehend besprochen, das Vektorverarbeitungssystem 26 Lese-nach-Schreib-, Schreib-nach-Lese- und Schreib-nach-Schreib-Gefahren auflösen.
  • Es können verschiedene Methoden verwendet werden, um Gefahren aufzulösen. Eine Möglichkeit, Gefahren aufzulösen, besteht darin, zu warten, bis keine Gefahr mehr besteht. Zum Beispiel kann die IC-Einrichtung 12 anhalten und vor dem Lesen aus einem Register warten, bis ein älterer Befehl, der ein Ergebnis in dieses Register erzeugt hat, sein Ergebnis in das Register geschrieben hat. Als weiteres Beispiel kann die IC-Einrichtung 12 Umgehungs- oder Weiterleitungspfade implementieren, um zu ermöglichen, dass ein Berechnungsergebnis direkt durch die Verbrauchereinheit (z.B. einen DSP-Block) gelesen wird, ohne darauf warten zu müssen, dass das Ergebnis in die Registerdatei zurückgeschrieben wird. Vor dem Hintergrund dieses letzteren Beispiels kann das Vektorverarbeitungssystem 26 Verkettung nutzen, wobei es sich um eine Art von Weiterleitung handelt, bei der ein durch einen älteren Befehl erzeugtes Ergebnis, das von einem jüngeren Befehl benötigt wird, direkt durch Verkettungspfade über die Vektorverarbeitungseinheiten 66 abgenommen wird.
  • Um dabei zu helfen, Verkettung zu erläutern und wie das Vektorverarbeitungssystem Verkettung durchführen kann, wird nun ein Beispiel betrachtet. Bei dem Beispiel handelt es sich um folgende Anweisungen: I 0 : Vadd V 1 , V 2 , V 3
    Figure DE102021121732A1_0002
    I 1 : Vadd V 5 , V 1 , V 4
    Figure DE102021121732A1_0003
    wobei I0 eine erste Anweisung ist, I1 eine zweite Anweisung ist, Vadd eine Vektoradditionsoperation ist, die einen Vektor ausgibt (z.B. V1 oder Vs), und V1, V2, V3, V4 und V5 Vektoren sind. Somit ist V1 die Summe aus V2 und V3, und V5 ist die Summe aus V1 und V4.
  • Entsprechend ist I1 von I0 abhängig, da I1 die Ausgabe von I0 (d.h. V1) als Eingabe verwendet. Dies kann zu einer Lese-nach-Schreib-Gefahr führen.
  • 33A illustriert die Implikation einer solchen Datenabhängigkeit ohne Verkettung. Tatsächlich wird, wie in 33A gezeigt, die zweite Operation I1 erst ausgeführt, wenn die erste Operation I1 abgeschlossen wurde (und die Ausgabe geschrieben wird). 33B veranschaulicht, wie die Operationen I0 und I1 in kürzerer Zeit durchgeführt werden können, wenn Verkettung verwendet wird. Insbesondere kann eine Vektorverarbeitungseinheit 66, die I1 durchführt, beginnen, Teile der Ausgabe (d.h. V1) einer anderen Vektorverarbeitungseinheit 66 zu empfangen, wenn die Ausgabe erzeugt wird. Dies ermöglicht eine parallele Ausführung von I0 und I1 und reduziert die Gesamtausführungszeit der Befehle.
  • 34 stellt eine beispielhafte Architektur für Verkettung dar. Wie veranschaulicht, wird I0 durch die Vektorverarbeitungseinheit 66J ausgeführt und I1 wird durch die Vektorverarbeitungseinheit 66K ausgeführt. Sowohl die Vektorverarbeitungseinheit 66J als auch die Vektorverarbeitungseinheit 66K empfangen Operanden von einer Registerdatei 252D und schreiben Ergebnisse zurück in die Registerdatei 252D. Zusätzlich wird ein Verkettungspfad zwischen der Ausgabe der Vektorverarbeitungseinheit 66J und der Eingabe der Vektorverarbeitungseinheit 66K implementiert. Somit kann die Vektorverarbeitungseinheit 66K beginnen, einen Teil der Ausgabe der Vektorverarbeitungseinheit 66J zu nutzen, ohne dass das Ergebnis in die Registerdatei 252D geschrieben wird. Des Weiteren kann das Vektorverarbeitungssystem 26 mit vollständig verketteter Unterstützung über Vektorverarbeitungseinheiten 66 und Lanes 82 hinweg angepasst werden, indem Lane- und Einheitsverbindungen (wie vorstehend beschrieben) vollständig implementiert werden. Tatsächlich kann Verkettung unter Verwendung von Weichlogik auf der IC-Einrichtung 12 implementiert werden. Wie nachstehend besprochen, gibt es mehrere andere Arten, auf die Verkettung implementiert werden kann.
  • Zunächst wird, wie in 35 veranschaulicht, über eine Registerdatei 252E (z.B. eine M20K-Registerdatei) verkettet. Insbesondere wird ein M20K-Modus verwendet, der ermöglicht, dass Schreibwerte zu Leseports umgeleitet werden, wodurch ermöglicht wird, dass Registerdateien, die in M20K-Registern implementiert sind, eine Schnittstelle mit anderen Vektorverarbeitungseinheiten 66 und Lanes 82 bilden. Steuerlogik, die in dem Vektorverarbeitungssystem 26 enthalten sein kann, kann bestimmen, dass Daten, die in die Registerdatei 252E zurückgeschrieben werden, mit einer anderen Vektorverarbeitungseinheit 66 (z.B. Vektorverarbeitungseinheit 66K) verkettet werden sollten, die Daten liest, und die M20K-interne Umgehung wird verwendet, um der Vektorverarbeitungseinheit 66K zu ermöglichen, Daten, die durch die Vektorverarbeitungseinheit 66J ausgegeben werden, schneller zu empfangen.
  • Gemäß 36 ist eine andere Form der Verkettung eine verkettete Akkumulationsoperation. Bei dieser Operation werden Operanden, die über Vektorverarbeitungseinheiten 66 weitergeleitet werden, akkumuliert. Somit werden Daten nicht nur weitergeleitet, sondern die Daten werden auch bearbeitet (d.h. akkumuliert), bevor sie einer anderen Vektorverarbeitungseinheit 66 bereitgestellt werden.
  • Eine weitere Architekturunterstützung für Verkettung ist in 37 dargestellt. Hier beinhaltet eine Vektorberechnungseinheit 80 (die wenigstens teilweise unter Verwendung eines DSP-Blocks implementiert sein kann) Gefahrenerkennungsschalttechnik 262, die Gefahrenzustände pro Vektorelement erkennt, so dass Vektorelemente, die in die Registerdatei 252E zurückgeschrieben wurden, durch einen nachfolgenden abhängigen Befehl ausgelesen werden können, selbst wenn noch verbleibende Vektorelemente vorhanden sind, die noch nicht berechnet wurden. Mit anderen Worten, wenn ein erster Befehl noch nicht beendet ist, kann ein anderer Befehl, der von dem ersten Befehl abhängt, unter Verwendung von Vektorelementen der Ausgabe initiiert werden, die mit der Durchführung des ersten Befehls erzeugt werden, während die Vektorelemente erzeugt werden. Um eine solche Gefahrenerkennung pro Element zu ermöglichen, liefert die Vektorberechnungseinheit 80 Aktualisierungen an die Gefahrenerkennungslogik 262, die verfolgt, welche Elemente bisher festgelegt wurden (z.B. über einen Index zuletzt geschriebener Elemente „LWEI“ (Last Written Element Index) 264). Die Gefahrenerkennungslogik 262 verwendet dann den LWEI 264 zusätzlich zu Registerdateilese- und -schreibindizes, um zu bestimmen, ob ein Gefahrenzustand vorliegt.
  • In Fortführung des obigen Beispiels, das I0 und I1 beinhaltet, erkennt die Gefahrenerkennungsschalttechnik 262 eine Gefahr, da der I1-Registerleseindex (d.h. V1) mit dem I0-egisterschreibindex übereinstimmt. Unter Verwendung des LWEI 264 kann die Gefahrenerkennungsschalttechnik 262, während I0 ausgeführt wird, ferner inspizieren, welche Elemente von V1 (z.B. Teile von V1) berechnet und in die Registerdatei 252E zurückgeschrieben wurden und daher gelesen werden können. Somit kann eine Vektorverarbeitungseinheit 66 beginnen, I1 auszuführen, sobald das erste Element von V1 zurück in die Registerdatei 252E geschrieben wurde. Dementsprechend kann die Ausführung von I1 erfolgen, bevor die Ausführung von I0 abgeschlossen ist, und die IC-Einrichtung wartet möglicherweise nicht darauf, dass die Ausführung von I0 abgeschlossen ist, bevor die Ausführung von I1 beginnt.
  • Ein anderes Beispiel dafür, wie das Vektorverarbeitungssystem 26 Gefahren behandeln kann, wird Tailgating genannt. Insbesondere ist Tailgating eine Optimierung, die verwendet werden kann, um Schreib-nach-Lese-Gefahren zu handhaben, die auftreten können, wenn ein neuerer Befehl in ein Zielregister schreiben darf, das immer noch durch einen älteren Befehl gelesen wird. Tailgating wird mit Bezug auf 38A, 38B und 39 behandelt, die unter Bezugnahme auf ein anderes Beispiel erörtert werden, das die folgenden Anweisungen beinhaltet: I 0 : Vadd V 1 , V 2 , V 3
    Figure DE102021121732A1_0004
    I 1 : Vadd V 2 , V 4 , V 5
    Figure DE102021121732A1_0005
    wobei I0 eine erste Anweisung ist, I1 eine zweite Anweisung ist, Vadd eine Vektoradditionsoperation ist, die einen Vektor ausgibt (z.B. V1 oder V2), und V1, V2, V3, V4 und V5 Vektoren sind. Somit ist V1 die Summe aus V2 und V3, und V2 ist die Summe aus V4 und V5. Da ein Wert für V2 in eine Registeradresse für V2 geschrieben werden kann, während ein Anfangswert von V2 aus dem Register gelesen wird (z.B. während der Ausführung von I0, kann eine Schreib-nach-Lese-Gefahr auftreten. Tatsächlich kann, wie in 38A gezeigt, wenn kein Tailgating eingesetzt wird, eine Vektorverarbeitungseinheit 66, die I1 ausführt, erst in ein Register schreiben, das V2 speichert, wenn eine andere Vektorverarbeitungseinheit 66 das Lesen des Werts für V2 aus diesem Register beendet hat. Wie in 38B gezeigt, können jedoch, wenn Tailgating genutzt wird, Werte, die durch die Vektorverarbeitungseinheit erzeugt werden, die I1 ausführt, in das Register für V2 geschrieben werden, während die Vektorverarbeitungseinheit, die I0 ausführt, immer noch alte (z.B. ursprüngliche) Werte aus dem Register für V2 liest.
  • 39 veranschaulicht einen beispielhaften Architekturansatz für Tailgating, bei dem die Steuerlogik (z.B. die Gefahrenerkennungsschalttechnik 262) einen LREI 266 (Last-Read Element Index, Index zuletzt gelesener Elemente) 266 und den LWEI 264 von Anweisungen verfolgt. Dementsprechend ist das Vektorverarbeitungssystem 26 in der Lage, zu verfolgen, welche Elemente während der Ausführung eines älteren Befehls aus einem Register gelesen wurden, und neue Werte können durch einen neueren Befehl in das Register geschrieben werden.
  • In 39 kann I1 sobald die Vektorverarbeitungseinheit 66J, die I0 ausführt, V2[0] gelesen hat, dann einen neuen Wert für V2[0] in die Registerdatei 252E schreiben.
  • Das Vektorverarbeitungssystem 26 kann auch Operanden handhaben, die für mehrere Operationen gelesen und verwendet werden können. Zum Beispiel wird bei einer Skalar-Vektor-Operation, bei der mehrere Elemente eines Vektors mit einem Skalarwert multipliziert werden, der Skalarwert für einen relativ langen Zeitraum mit mehreren Vektorelementen verwendet (z.B. im Gegensatz zu einem Wert, der einmal mit einem anderen Element verwendet wird). Als weiteres Beispiel kann für eine Tensoroperation (die unten ausführlicher besprochen wird) ein Gesamtvektoroperand mit mehreren Vektoren in einer Berechnung (z.B. Matrix-Vektor-Multiplikation) verwendet werden. Für diese Szenarien kann ein separater Puffer (z.B. ein Ping-Pong-Puffer, ein Vorladepuffer, ein Puffer innerhalb einer Vektorverarbeitungseinheit 66) verwendet werden, um den Operanden zu halten, während der Operand verwendet wird (z.B. für längere Dauer). Nachdem der Operand aus der Registerdatei in diesen Puffer gelesen wurde, ist der Operand für Tailgating gesichert und der Registerdateiraum für diesen Operanden kann durch einen Wert beschrieben werden, der durch Ausführen eines neueren Befehls erzeugt wird.
  • Bedingte Durchführung
  • Das Vektorverarbeitungssystem 26 unterstützt auch eine bedingte Ausführung an gemischtem Vektor- und Skalarcode (z.B. Vektor-Skalar-Multiplikation) sowie an Vektorcode (z.B. Vektor-Vektor-Addition oder -Multiplikation). Mit anderen Worten kann, wie nachstehend besprochen, das Vektorverarbeitungssystem 26 bedingte Anweisungen ausführen. Für den bedingten gemischten Skalar-Vektor-Code kann die IC-Einrichtung 12 auf die Skalareinheit 87 angewiesen sein (die eine oder mehrere Skalarverarbeitungseinheiten beinhalten kann, die auf der IC-Einrichtung 12, einer anderen IC-Einrichtung, die kommunikativ mit der IC-Einrichtung 12 gekoppelt ist, oder beiden implementiert sind). Das Verwenden skalarer bedingter Anweisungen ermöglicht beliebige bedingte Skalarcodestrukturen (z.B. eine Für-Schleife, eine Während-Schleife usw.), die Vektorcode auslösen. Dementsprechend konzentriert sich die nachfolgende Diskussion weitgehend auf eine bedingte Ausführung mit Vektoren. In diesem Fall werden Bedingungen auf Elemente der Vektoren angewandt und gemäß der Bedingung werden dann bestimmte Aktionen durchgeführt. Um dies zu erleichtern, beinhaltet die Vektor-ISA ein Flag oder Maskenregister zu jedem Element in einem Vektorregister, um solche Bedingungen zu beschreiben. Folglich beinhaltet die ISA auch Vektorbefehle, die die Flag-Register und Maskenregister manipulieren sowie bedingte Berechnungen basierend auf dem Inhalt in diesen Registern durchführen können.
  • Vor diesem Hintergrund ist eine ISA, die eine bedingte Ausführung unterstützt, in 40 veranschaulicht. Insbesondere beinhaltet 40 eine Flag-Registerdatei 270, und die Architekturzustände zur bedingten Ausführung sind Flag-Register (FRs) 272 (z.B. jede Zeile von Zellen der Flag-Registerdatei 270), die in 40 gezeigt sind. Jedes Flag-Register 272 weist einen Wert (z.B. einen Ein-Bit-Wert) pro Vektorregisterelement auf. Dieser Wert beschreibt die auf das entsprechende Vektorelement anzuwendende Bedingung. Es gibt mehrere Arten von bedingten Vektorbefehlen in der ISA. Insbesondere gibt es Befehle, die Flags manipulieren und produzieren, und es gibt Befehle, die basierend auf Flags bedingt arbeiten. Vier Beispiele für Befehle, die das Flag-Register manipulieren, werden im Folgenden mit Bezug auf 41-44 beschrieben.
  • Unter Bezugnahme auf 41 akzeptiert ein Vektor-unmittelbar bedingter Befehl eine Vektorregistereingabe (z.B. von einem Register der Vektorregisterdatei 81) und einen unmittelbaren Wert. Für jedes Element in dem Eingabevektorregister führt das Vektorverarbeitungssystem 26 eine bedingte Prüfung des Vektorelements gegen den unmittelbaren Wert durch und setzt oder löscht das Flag-Register. In 41 ist der bedingte Befehl eine Größer-als-Null-Überprüfung (greater than zero check, „vecgtz“), in welchem Fall ein auf eins gesetztes Flag einem Vektorelement entspricht, das größer als der unmittelbare Wert von null ist.
  • Ein anderes Beispiel ist ein bedingter Flag-Befehl, bei dem zwei Werte aus Flag-Registern 272 der Flag-Registerdatei 270 als Eingaben akzeptiert werden und ein neues Flag an ein Ausgabe-Flag-Register (z.B. frd) ausgegeben wird. Für jedes Bit in den Eingaben aus der Flag-Registerdatei 270 führt der Befehl eine Boolesche Operation durch und produziert das resultierende Bit in einer Flag-Registerausgabe. In 42 ist ein „Flagand“ -Befehl veranschaulicht, in dem eine AND-Operation an zwei Eingabe-Flag-Registern durchgeführt wird.
  • Drittens akzeptiert ein bedingter Vektor-Skalar-Befehl eine Vektorregistereingabe (z.B. von einer Vektorregisterdatei 81) und eine Skalarregistereingabe (z.B. von dem Skalarregister 62). Für jedes Element in dem Eingabevektorregister führt das Vektorverarbeitungssystem 26 eine bedingte Prüfung des Vektorelements gegen den Wert aus dem Skalarregister 62 durch und setzt oder löscht das Flag-Register 272. In 43 wird bestimmt, ob ein Element in dem Eingabevektorregister (z.B. Vektorregisterdatei 81) größer als der Wert des Skalarregisters 62 ist, und basierend auf dem Vergleich wird ein Ergebnis (z.B. in ein Vektorregister 272 von frd) geschrieben.
  • Gemäß 44 ist ein anderes Beispiel für einen bedingten Befehl, den das Vektorverarbeitungssystem 26 durchführen kann, ein bedingter Vektor-Vektor-Befehl, bei dem zwei Eingabevektorregisterwerte als Eingaben akzeptiert werden. Für jedes Paar von Eingabevektorelementen führt das Vektorverarbeitungssystem 26 eine bedingte Prüfung durch und setzt oder löscht das entsprechende Ausgabe-Flag-Registerbit. Das Beispiel in 44 zeigt eine „vecgt“-Operation, bei der das Vektorverarbeitungssystem 26 bestimmt, ob Elemente in dem Vektorregister vrs1 größer als Elemente in dem Vektorregister vrs2 sind. Zudem ist anzumerken, dass die Vektor-Operation für bedingte Vektor-Skalar-Befehle verwendet werden kann, wie etwa den im vorhergehenden Absatz besprochenen bedingten Befehl.
  • Sobald Flags produziert werden, können viele Arten von Vektorbefehlen das Flag nutzen, um bedingt Vektoroperationen durchzuführen. Vektorberechnungsbefehle (z.B. Befehle zur Addition, Multiplikation oder anderen Operationen) sowie Speicherbefehle (z.B. Befehle zum Laden oder Speichern von Daten) können ein Flag als Eingabe beinhalten und bewirken, dass die entsprechende Operation nur an Vektorelementen mit einem zugehörigen Flag-Wert von 1 durchgeführt wird. Mit anderen Worten können bedingte Befehle durchgeführt werden und das Vektorverarbeitungssystem 26 kann die bedingten Befehle durchführen, indem geprüft wird, ob ein Wert eines Flag-Registers 272, der einem bestimmten Wert (z.B. einem Vektorregisterwert) entspricht, einen Wert aufweist, der angibt, dass ein Flag vorhanden ist. Auf diese Weise kann das Vektorverarbeitungssystem 26 Prädikation oder ein prädikationsähnliches Schema nutzen, um zu prüfen, ob ein Präzedens für eine bedingte Operation vorhanden ist (z.B. basierend auf einem Wert in einem Flag-Register), bevor ein Befehl ausgeführt wird.
  • Um mit den Zeichnungen fortzufahren, veranschaulicht 45 ein Codebeispiel einer bedingten Ausführung. Insbesondere beinhaltet 45 Code 280, der eine Schleife ist, die elementweise Multiplikation von zwei Arrays V2 und V3 durchführt, und das Array V4 ausgibt. Somit wiederholt sich die Schleife für jedes Element in dem Array und multipliziert Elemente von V2 und V3, um ein Element von V4 zu erzeugen. Ferner ist die Multiplikation bedingt. Insbesondere gibt es ein weiteres Eingabearray V1, wobei jedes Element die Bedingung für die Multiplikation enthält. Sofern das Element in V1 nicht null ist, führt das Vektorverarbeitungssystem 26 bei jeder Schleifeniteration eine Multiplikation des entsprechenden V2- und V3-Elements durch. Umgekehrt wird, falls das entsprechende Element von V1 null ist, keine Multiplikation durchgeführt, die entsprechende Elemente von V2 und V3 involviert.
  • 45 beinhaltet zudem eine Implementierung 282, die angibt, wie der Code 280 als Vektorprogramm geschrieben werden kann. Da die Schleife eine bekannte Anzahl von zweiunddreißig Iterationen aufweist, kann der Vektorcode vollständig als Operationen an Vektoren mit einer Länge von zweiunddreißig Bits ausgerollt werden. Ein erster Befehl (z.B. Ld_imm) setzt eine solche Vektorlänge. Danach wird der V1-Vektor geladen, der die Elemente für die bedingte Prüfung beinhaltet. Dann werden Flags durch Überprüfen jedes Elements von V1 erzeugt, wobei ein Flag gesetzt wird, falls das Element ungleich null ist. Die resultierenden Flag-Bits werden in das Flag-Register F0 geschrieben. Die nachfolgenden Befehle führen bedingte Ladevorgänge der Vektoren V2 und V3 durch, die nur Elemente mit entsprechenden gesetzten Flag-Bits (z.B. auf einen Wert von eins) bringen. Dann wird eine bedingte Vektormultiplikationsoperation an den Elementen der V2- und V3-Vektorregister durchgeführt, die entsprechende Flag-Register aufweisen, die angeben, dass ein Flag vorhanden ist, und das Ergebnis wird in das Ausgabevektorregister V4 geschrieben. Die Elemente des Vektors V4 mit einem entsprechenden vorhandenen Flag können dann in einem externen Speicher gespeichert werden.
  • Die Mikroarchitektur zum Unterstützen bedingter Ausführung beinhaltet Flag-Register, Flag-Erzeugung, Anwenden von Flags auf bedingte Vektorausführung und Bewegen von Flags.
  • Jedes der Vorgenannten wird nachstehend ausführlicher besprochen, beginnend mit dem Implementieren von Flag-Registern.
  • Flags können in ihrer eigenen Registerdateistruktur (z.B. Flag-Registerdatei 270) oder als eingebettete Bits innerhalb der Vektorregisterdatei (z.B. Vektorregisterdatei 81) implementiert werden. Falls sie als separate Registerdatei strukturiert ist, dann kann es sich bei den Flag-Registerdateien 270 um kleinere Strukturen als die Vektorregisterdateien 81 handeln. Zusätzlich können die Flag-Registerdateien 270 ausreichend Ports bereitstellen, um durch Vektorverarbeitungseinheiten 66 unter Verwendung der Flag-Registerdateien 270 lesbar und beschreibbar zu sein. Andererseits würde die Registerdateistruktur, falls sie hinsichtlich ihrer Architektur innerhalb der Vektorregisterdatei 81 eingebettete Bits sind, vergleichsweise mehr Bits nutzen, da sowohl Flag-Bits als auch Vektordaten in der Vektorregisterdatei 270 gehalten würden. Die Flag-Bits können jedoch zusammen mit Vektordaten in der Vektorregisterdatei 81 gelesen werden. Daher kann das Speichern von Flag-Bits in der Vektorregisterdatei 81 wünschenswert sein, falls die Vektorverarbeitungseinheiten 66, die bewirken, dass die Flags erzeugt werden, auch größtenteils mit der Vektorregisterdatei 81 interagieren (z.B. falls Flags für eine Lane 82 erzeugt werden, anstelle einer separaten Flag-Recheneinheit, wie als Nächstes beschrieben). Weil Vektorregisterdateien 81 auf M20K-Hard-On-Chip-Speichereinheiten implementiert werden können, die in der IC-Einrichtung 12 enthalten sind und spezifische Portbreiten (z.B. 20-Bit oder 40-Bit) aufweisen, nutzen Vektordaten möglicherweise nicht die gesamte volle Breite der Ports, und ungenutzte Bits könnten für Flags verwendet werden. Wenn zum Beispiel M20K mit einer Breite von 40 Bits als Vektorregisterdatei 81 für ein 32-Bit-Vektorelement verwendet wird, gibt es 8 Bits, die ungenutzt sind und für Flag-Bits verwendbar sein könnten. Gleichermaßen könnte es für 16-Bit-Elemente zwei 16-Bit-Elemente an Daten mit vier 2-Bit-Flags geben, die in die 40-Bit-Breite passen können.
  • Zusätzlich gibt es auch mehrere Optionen, wo Flag-Berechnung durchgeführt wird. Wie nachstehend besprochen, kann eine separate Einheit genutzt werden, um Flag-Berechnungen durchzuführen, oder Flag-Berechnungen können über Lanes 82 (und die Schalttechnik (z.B. Vektorverarbeitungseinheiten 66)) durchgeführt werden, die auch Vektordatenberechnungen durchführen.
  • Das Vektorverarbeitungssystem kann eine oder mehrere Vektor-Flag-Recheneinheiten (VFCUs, vector flag compute units) beinhalten, die Flag-Berechnungen durchführen und von den Vektorverarbeitungseinheiten 66 und Speichereinheiten (z.B. Speicher 68, Vektorregisterdatei 81 (die die Vektorregister 60 beinhalten können), Speicherblöcke 252) getrennt sind. Zum Beispiel kann in einem Fall eine VCFU genutzt werden, wenn die Flag-Registerdatei 270 als eigene Struktur implementiert ist. Mit anderen Worten kann die VFCU die Flag-Registerdatei 270 sowie Verarbeitungsschalttechnik (implementiert in Weichlogik oder Hartlogik) beinhalten, die verwendet wird, um Flag-Berechnungen durchzuführen. Die VFCU ist kommunikativ mit anderen Einheiten gekoppelt, die Flags nutzen, wie etwa Vektorberechnungseinheiten 80, die Vektorverarbeitungseinheiten 66 beinhalten. Da eine bedingte Vektorausführung in den Vektorberechnungseinheiten 80 stattfinden würde, können Flags von der VFCU zu den Vektorberechnungseinheiten 80 (und Vektorverarbeitungseinheiten 66) für jeden bedingten Befehl gesendet werden.
  • Als weiteres Beispiel kann eine allgemeine Vektorberechnungseinheits-Lane (z.B. die Lane 82) so angelegt sein, dass sie zusätzlich zur Vektorberechnung auch eine Flag-Berechnung unterstützt. Eine solche Implementierung kann geeigneter sein, wenn die Flag-Registerdatei 270 in die Vektorregisterdatei 81 eingebettet ist. In diesem Fall können die Funktionseinheiten 79 Vektorberechnungen und Flag-Berechnungen durchführen. Auf diese Weise würde es, wenn bedingte Befehle durchgeführt werden, relativ weniger Flag-Bewegung geben, weil sich Flags bereits in derselben Registerdateistruktur wie die Vektordaten befinden und bereits mit den Lanes 82 verbunden sind. In einer Ausführungsform kann jede Lane 82 Flag-Berechnung unterstützen. In einer anderen Ausführungsform kann ein erster Teil der Lanes 82 Flag-Berechnung unterstützen, während ein anderer Teil der Lanes 82 kommunikativ mit einer VCFU gekoppelt sein kann, die Flag-Berechnungen für diese Lanes 82 durchführt.
  • Wie vorstehend besprochen, können Flags verwendet werden, wenn eine bedingte Ausführung an Vektorelementen durch die Vektorberechnungseinheiten 80 und Speichereinheiten (z.B. Speicher, der die Vektorregisterdatei 81 beinhaltet) durchgeführt wird. Zur Vektorberechnung kann das Flag verwendet werden, um das Schreibfreigabesignal zu steuern, so dass das Ergebnis, das durch eine Lane 82 produziert wird, nicht fest an die Registerdatei übergeben wird, wenn das Flag ein bestimmter Wert (z.B. null) ist. 46 veranschaulicht dieses Szenario. Wie veranschaulicht, führt die Lane 82 immer noch die Vektorberechnung durch, aber das Ergebnis wird nicht zurückgeschrieben, weil der Flag-Wert null ist.
  • 47 veranschaulicht ein Beispiel für ein Flag, das durch eine Lane 82 erzeugt wird. In diesem Beispiel liest ein bedingter Vektor-Vektor-Befehl zwei Vektorelement-Operandeneingaben in die Lane 82 und die Lane 82 führt einen Größer-als-Vergleich zwischen zwei Operanden (z.B. Vs1 und Vs2) durch und erzeugt ein Flag, wenn Vs1 größer als Vs2 ist.
  • Wie vorstehend besprochen, können die Vektorverarbeitungseinheiten 66 Vektorberechnungen durchführen, bevor ein entsprechendes Flag überprüft wird, um zu sehen, ob eine Ausgabe geschrieben werden sollte. Das Vektorverarbeitungssystem kann jedoch auch einen effizienteren Ansatz für bedingte Vektorberechnung nutzen (z.B. wenn es relativ wenige Flags gibt), um das Durchführen von Berechnungen zu vermeiden, für die keine Ausgabe gespeichert werden wird. Dieser Ansatz kann als „Dichtezeit“ (density time) bezeichnet werden. 48 veranschaulicht eine beispielhafte Implementierung einer Dichtezeit, in der mehrere Vektorelemente (z.B. Elemente [0] bis [4]) verarbeitet werden, aber nur Elemente [1] und [3] mit bestätigten Flags geplant und auf der Lane 82 berechnet werden.
  • Um Dichtezeit zu implementieren, kann das Vektorverarbeitungssystem 26 eine Lane 82 deaktivieren, wenn ein Flag-Register einen Nicht-Flag-Wert (z.B. null) aufweist. Zum Beispiel kann ein Ansteuerleitungsfreigabesignal gesendet werden, wenn es ein Flag (z.B. ein Flag-Register mit einem Wert von eins) gibt, so dass, wenn eine Lane 82 Vektorelemente mit einem entsprechenden Null-Flag (d.h. Vektorelement ohne ein entsprechendes Flag) liest, die Lane 82 einfach deaktiviert werden kann. Umgekehrt kann, wenn ein Flag vorhanden ist, die Lane 82 aktiviert werden (oder aktiv bleiben) und Vektorberechnungen durchführen. Das Implementieren von Dichtezeit auf diese Weise kann Lane-Aktivitäten und Leistung reduzieren, die durch das Vektorverarbeitungssystem 26 beansprucht wird.
  • Die Dichtezeit kann auch durch vorheriges Abtasten von Flags und Ausgeben von nur Elementen mit bestätigten Flags implementiert werden. Beispielsweise kann das Vektorverarbeitungssystem 26 mehrere Flags im Voraus lesen, die Flags abtasten und nur Vektorelemente mit bestätigten Flags ausgeben. Eine solche Implementierung kann die Anzahl von Rechenzyklen reduzieren, wodurch die Laufzeit verbessert wird. Beispielsweise ist in einer Ausführungsform die separate Flag-Registerdatei 270 organisiert, um Flags nachfolgender Vektorelemente zusammenzupacken, so dass sie durch die Lanes 82 (z.B. durch die Steuerlogik 83) lesbar sind. Darüber hinaus kann es einen individuellen Leseport pro Lane 82 geben (z.B. eine Bankregisterdatei, wobei jede Bank Daten an eine Lane 82 liefert), so dass jede Lane 82 unabhängig von anderen Lanes 82 eine Berechnung überspringen kann. Bei diesem Beispiel können die Lanes 82 nicht synchron miteinander sein, da einige Lanes 82 Elemente mit mehr bestätigten Flags als andere verarbeiten können. Von daher kann die Steuerlogik (z.B. die Steuerlogik 83 oder eine andere Steuerlogik, die zum Steuern der Vektorverarbeitungseinheiten 66 verwendet wird) den Fortschritt jeder Lane 82 beaufsichtigen und die Lanes 82 am Ende jedes Vektorbefehls synchronisieren, bevor der nächste Befehl gesendet wird. Des Weiteren ist es, wie vorstehend besprochen, auch möglich, mit dem Ausführen des nächsten Befehls zu beginnen, ohne vollständig darauf zu warten, dass alle Lanes 82 den aktuellen Befehl abschließen.
  • Als weiteres Beispiel für Dichtezeit kann das Vektorverarbeitungssystem 26 einen Block von Elementen mit entsprechenden Null-Flags (d.h. Elementen, die keine entsprechenden Flags aufweisen) überspringen. Mit anderen Worten kann das Vektorverarbeitungssystem 26 nur eine Gruppe von Vektorelementen mit Null-Flags überspringen, während ein Befehl an den Vektorelementen durchgeführt wird, die Flags aufweisen. Als ein Beispiel veranschaulicht 49 Lanes 82F, 82G, die sich eine einzelne Registerdateibank (z.B. wie in 23 gezeigt) teilen können. Die Lane 82F kann Berechnungen für gerade Vektorelemente durchführen, während die Lane 82G Berechnungen für ungerade Vektorelemente durchführen kann. Die Lanes 82F, 82G können sich einen Leseport teilen, wie etwa beim Einlesen von vier INT8-Werten zusammen von einem 32-Bit-Leseport der einzelnen physischen Registerdateibank. In diesem Fall können, falls die vier Flags, die mit den vier INT8-Elementen assoziiert sind, null sind, die Vektorelemente möglicherweise nicht gelesen werden, und die entsprechenden Vektorberechnungen können vollständig übersprungen werden. Umgekehrt, wenn ein Flag für ein oder mehrere Vektorelemente vorhanden ist, können die Vektorelemente gelesen werden und die entsprechenden Vektorberechnungen können durchgeführt werden.
  • Dichtezeit kann auch bei Nutzung virtueller Lanes implementiert werden. Wie vorstehend beschrieben, ist es zum Beispiel möglich, falls die Anzahl an Lanes 82 kleiner als die Anzahl an gelesenen Elementen pro Zyklus ist, die Lanes 82 durch Verarbeiten der Gruppe von gelesenen Vektorelementen in mehrere Zyklen zu virtualisieren. Um Dichtezeit zu implementieren, wenn virtuelle Lanes verwendet werden, ermöglicht die größere Anzahl von Elementen, die pro Zyklus gelesen werden, dass Flags vorab abgetastet werden (wie vorstehend besprochen), und jede virtuelle Lane empfängt gegebenenfalls nur jene Elemente mit bestätigten Flags. Mit anderen Worten empfangen die virtuellen Lanes Vektorelemente möglicherweise nur dann, wenn die durch einen bedingten Befehl festgelegte Bedingung vorliegt.
  • Bevor fortgefahren wird, Tensoroperationen zu diskutieren, die unter Verwendung des Vektorverarbeitungssystems 26 verfügbar sind, sollte angemerkt werden, dass Flags auch unter Verwendung der Skalareinheit 87 manipuliert werden können. Insbesondere beinhaltet ISA für die Skalareinheit 87 die Fähigkeit, Bits zu manipulieren. Um dies zu erleichtern, können Flag-Verschiebebefehle verwendet werden, um Daten von einem Flag-Register (z.B. Flag-Register 272) zu einem Skalarregister (z.B. Skalarregister 62) zu verschieben. Von dort kann das Vektorverarbeitungssystem 26 Skalarbefehle verwenden, um Flag-Manipulationen durchzuführen, und die Ergebnisse können zurück in das Flag-Register 272 verschoben werden. Alternativ kann das Flag-Register 272 auch in der Skalareinheit 87 (oder in einer Skalarregisterdatei) implementiert sein und die ISA für die Skalareinheit 87 kann ermöglichen, dass Skalar-Flag-Rechenanweisungen durchgeführt werden. In einem solchen Beispiel können Skalarbefehle, anstatt Daten zwischen Flag-Registern 272 und Skalarregistern 62 zu verschieben, direkt Werte von Flag-Registern als Eingangsoperanden akzeptieren, jegliche notwendigen Flag-Berechnungen durchführen und die Ergebnisse in die Flag-Register 272 der Flag-Registerdatei 270 zurückschreiben. Des Weiteren sind die vorstehend besprochenen bedingten Operationen Beispiele für bedingte Operationen, die das Vektorverarbeitungssystem 26 durchführen kann, und das Vektorverarbeitungssystem 26 ist nicht auf das Durchführen der bedingten Operationen allein basierend auf den oben beschriebenen Bedingungen beschränkt. Zum Beispiel kann die Vektorverarbeitung eine bedingte Ausführung durchführen, die eine beliebige geeignete Bedingung involviert (z.B. größer als, kleiner als, größer als oder gleich, kleiner als oder gleich, gleich, oder boolesche Bedingungen (z.B. AND, OR, XOR).
  • Tensoroperationen
  • Wie oben erwähnt, kann das Vektorverarbeitungssystem 26 Tensoroperationen unterstützen, die zwei Operanden involvieren, bei denen ein Operand (z.B. ein Operand, der in Register 90 einer Vektorverarbeitungseinheit 66 gespeichert ist) verwendet wird, um mehrere Operationen durchzuführen. Tensoroperationen können beliebige Vektoroperationen, die vorliegend besprochen werden, sowie Matrix-Tensoroperationen, wie etwa allgemeine Matrixmultiplikations- (GEMM-, general matrix multiplication) Operationen und allgemeine Matrix-Vektor-Multiplikation (GEMV, general matrix-vector multiplication), beinhalten. Um Tensoroperationen durchzuführen, können Tensorblöcke unter Verwendung von Hartlogik der IC-Einrichtung 12 (z.B. auf DSP-Blöcken, die in der IC-Einrichtung 12 enthalten sind) implementiert werden. Wie nachstehend ausführlicher besprochen, sind Tensorblöcke zusammensetzbar, um verschiedene Matrixoperationen durchzuführen, und die Tensorblöcke können in das Vektorverarbeitungssystem 26 integriert sein.
  • Bevorjedoch eine Hardware-Implementierung besprochen wird, wird die ISA, die einen Tensorbefehlstyp beinhaltet, besprochen. Insbesondere veranschaulicht 50 einen Tensorbefehl (z.B. GEMV, GEMM), der zwei Eingangsmatrizen (z.B. ts1, die in der Vektorregisterdatei 81A gespeichert ist, und ts2, die in der Vektorregisterdatei 81B gespeichert ist) bearbeitet und eine Ausgabematrix (z.B. matrix td) produziert. Genauer gesagt können, wie veranschaulicht, die Matrizen in einem zusammenhängenden Satz von Vektorregistern der Vektorregisterdateien 81 (die auch als Matrixregister bezeichnet werden können) gespeichert sein. Der Befehl (z.B. ein GEMM- oder GEMV-Befehl) spezifiziert die Basisvektorregister (z.B. vrts1, Vrts2, vrtd) für die zwei Eingaben und eine Ausgabematrix zusammen mit m-, n- und k-Matrixdimensionen, die den Registerbereich angeben, aus dem die Matrizen gespeichert werden. In manchen Fällen übersteigt die maximale Anzahl an Matrixspalten möglicherweise nicht die maximale Breite des Vektorregisters (vlmax).
  • Wie veranschaulicht, kann der Befehl verwendet werden, um verschiedene Tensoroperationen, wie etwa Matrix-Matrix-Multiplikation und Matrix-Vektor-Multiplikation, zu beschreiben. Außerdem werden Tensoroperationen, die eine Skalareingabe involvieren, ebenfalls unterstützt. Wenn zum Beispiel eine Skalierungsoperation an einer Matrix durchgeführt wird (z.B. wenn KI-Operationen durchgeführt werden), kann ein Befehl eine Matrix und einen Skalar spezifizieren, die multipliziert werden sollen. Des Weiteren ist anzumerken, dass, auch wenn Tensorbefehle auch als Sequenz von Vektorbefehlen implementiert werden könnten, dies mehr Befehls-Overheads (z.B. eine höhere Befehlsanzahl, die zu Abruf-/Decodier-Overheads führen kann) verursachen kann. Darüber hinaus ist ein Befehl auf Tensorebene besser für Grob-Hardware-Tensor-Rechenmikroarchitekturen zugänglich, die Matrizen bearbeiten und effizienter sind als die Rechenmikroarchitektur, die feinere Vektoren bearbeitet.
  • Um nun, unter Bezugnahme auf 51, Unterstützung für Tensoroperationen bereitzustellen, kann jede Vektorberechnungseinheit 80 Tensorblöcke beinhalten, die auf der IC-Einrichtung 12 enthalten sind (z.B. KI-Tensorblock auf dem Intel® -Stratix® 10 NX-FPGA). Wie veranschaulicht, können beispielsweise die Vektorberechnungseinheiten 80 des Vektorverarbeitungssystems 26 (z.B. Vektorverarbeitungssystem 26G) Vektorregisterdateien 81, die Vektorregister beinhalten, Tensoreinheiten 290, die Tensorblöcke 292 beinhalten, die Tensoroperationen durchführen, und Steuerschalttechnik 294 (z.B. einen mikrocodierten Controller) beinhalten. Im Betrieb können die Tensoreinheiten 290 Daten aus den Vektorregisterdateien 81 (z.B. Vektorelemente oder Daten für eine Spalte oder Zeile einer Matrix, die an einer Multiplikationsoperation beteiligt sein sollen) vorab in Register oder Puffer (z.B. Register 296) laden. Des Weiteren können die Tensorblöcke 79 Register oder Puffer (z.B. Vorlade-/Ping-Pong-Puffer) beinhalten, die auch zum Speichern vorab geladener Daten verwendet werden. Somit können die Register oder Puffer 296 in den Tensorblöcken 292 enthalten sein. Die Tensorblöcke 292 können Daten (z.B. Operanden) einstreamen und Operationen (z.B. Multiplikation oder Addition) an den Operanden durchführen, die die Operanden und einen vorab geladenen Wert involvieren. Mit anderen Worten kann ein Operand aus einem Register gelesen und in mehreren aufeinanderfolgenden Operationen verwendet werden, wohingegen sich der andere Operand, der an jeder der Operationen beteiligt ist, zwischen den Operationen ändert. Während die Tensorblöcke 292 der Tensoreinheiten 290 Daten erzeugen und ausgeben, können die ausgegebenen Daten in eine Vektorregisterdatei geschrieben werden, wie vorstehend besprochen.
  • Als Beispiel dafür, wie die Vektorberechnungseinheiten 80 eine Tensoroperation durchführen können, liefert die Vektorregisterdatei 81 eine Eingabematrixzeile in einem Bereitschaftszyklus. Ein Tensorbefehl löst spezifische Sequenzen von Vektorregisterlesevorgängen aus, um Eingabematrixzeilen in geeigneter Weise vorab zu laden und der oder den Tensoreinheit(en) 290 zuzuführen. Gleichermaßen werden erzeugte Ausgaben sequenziert, um in die Registerdatei 81 zurückgeschrieben zu werden. Eine solche Sequenzierung wird durch die Steuerschalttechnik 294 ermöglicht, die ein mikrocodierter Controller sein kann, der die Steuerungen der Vektorregisterdatei 81 und der Tensoreinheiten 290 ansteuert. Die Steuerschalttechnik 294 ist programmierbar, um unterschiedliche Tensorberechnungsmodi zu ermöglichen. Die Modi können über ein Steuerregister in dem Befehlssatz freigelegt werden, um zu ermöglichen, dass der Tensorberechnungsmodus dynamisch durch Befehle ausgewählt wird. Unter Verwendung einer einzigen Tensoreinheit 290 einer Vektorberechnungseinheit 80 ist es möglich, eine beliebige Matrixberechnung in kleinere Blöcke, die in die Registerdatei 81 passen, und Tensorblöcke 292 durchzuführen, wodurch ermöglicht wird, dass der Tensorbefehl ausgeführt wird. Somit können die Vektorberechnungseinheiten 80 unabhängig arbeiten, um unabhängige Matrixoperationen durchzuführen. Die Vektorberechnungseinheiten 80 können auch parallel arbeiten, um unabhängige Matrixoperationen durchzuführen.
  • Des Weiteren wird die Interaktion zwischen Einheiten über Einheitsverbindungen 86 unterstützt, wodurch ermöglicht wird, dass die Tensoreinheiten 290 skalierbar sind, um Operationen unter Verwendung mehrerer Tensoreinheiten 290 durchzuführen. Das heißt, die Einheitsverbindung 86 kann auch verwendet werden, um benachbarte Vektorberechnungseinheiten 80 zu verbinden, um Operationen, die größere Matrizen involvieren, effizienter durchzuführen. Die Einheitsverbindung 86 ist konfigurierbar. Somit ist es möglich, den Grad der Tensorparallelität entsprechend zu skalieren. Beispiele für eine Skalierung sind in 52A und 52B gezeigt. In 52A sind Tensoreinheiten über vier Vektorberechnungseinheiten 80 verbunden, um beispielsweise die Berechnungen für eine große GEMM-Operation durchzuführen. In 52B sind zwei Paare von Tensoreinheiten in zwei Paaren von Vektorberechnungseinheiten 80 verbunden, was eine parallele unabhängige Verarbeitung von zwei Operationen (z.B. GEMM-Operationen) ermöglicht.
  • Software-gesteuerte Architektur
  • Wie vorstehend besprochen, können die Vektorverarbeitungssysteme 26 der vorliegenden Offenbarung auf der IC-Einrichtung 12 implementiert werden, die eine programmierbare Logikeinrichtung, wie etwa ein FPGA, sein kann. Angesichts dessen adressiert dieser Abschnitt verschiedene Überlegungen, die berücksichtigt werden können, und mehrere Methoden, die verwendet werden können, wenn Vektorverarbeitungssysteme 26 (oder Teile davon) auf FPGAs entworfen werden. Des Weiteren erörtert dieser Abschnitt auch, wie Designsoftware Entwürfe für verschiedene Teile der Vektorverarbeitungssysteme 26 (z.B. Vektorberechnungseinheiten 80 oder Teile davon, wie etwa die Lanes 82), erzeugen kann. Somit werden zunächst verschiedene Arten von Implementierungen von Vektorregisterdateien (z.B. Vektorregisterdateien 81) besprochen.
  • Vektorregisterdateien 81 können auf einer Vielzahl von Speichertechnologien implementiert werden, die auf der IC-Einrichtung 12 (z.B. als Speicherbänke 252) enthalten sein können. Zum Beispiel ist in M20K-Speicherbänken standardmäßig ein Array aus 512 Speicherwörtern vorhanden, wobei jedes Wort zweiunddreißig Bits beinhaltet. Zudem weist eine M20K-Speicherbank eine konfigurierbare Latenz von zwei oder drei Taktzyklen auf, wobei der Drei-Zyklen-Modus eine höhere Betriebsgeschwindigkeit bietet. Ein anderer Typ von Speicherbank ist eine Speicherlogikarray-Platine (MLAB, Memory Logic Array Board), die auf der IC-Einrichtung 12 ergiebiger sein kann. MLABs stellen ein Array aus zweiunddreißig Speicherwörtern bereit, wobei jedes Wort zwanzig Bits aufweist. Sie weist eine konfigurierbare Latenz von einem oder zwei Taktzyklen auf. Es ist auch möglich, Speicher aus Logikzellen der IC-Einrichtung 12 direkt zu bilden, was für relativ kleine Speicher, wie etwa ein ein Bit breites Flag, das angibt, ob ein Vektorelement in eine nachfolgende Berechnung aufzunehmen ist oder nicht (z.B. wenn bedingte Anweisungen durchgeführt werden), geeignet sein kann.
  • Speicherelemente (z.B. Speicherbänke 252) können für verschiedene Zwecke frei kombiniert werden. Speicherelemente erhöhen zum Beispiel die Wortbreite ohne Auswirkung auf Geschwindigkeit oder Latenz, wenn „Breiten-Stitching“ verwendet wird, was in 53 veranschaulicht ist. Beim Breiten-Stitching werden die Speicherbänke 252 durch einen gemeinsamen Controller gesteuert und teilen die Adressierung. Dementsprechend können die Speicherbänke 252 verkettete Daten empfangen und verkettete Daten ausgeben. Ein anderes Beispiel für das Kombinieren von Speicherelementen wird „Tiefen-Stitching“ genannt, das in 54 veranschaulicht ist. Beim Tiefen-Stitching können Speicherelemente, wie etwa die Speicherbänke 252, mit Decodierern (z.B. Decodierer 300) und Multiplexern (z.B. Multiplexer 302) kombiniert werden, um die Speichertiefe zu erhöhen. Es sollte angemerkt werden, dass Tiefen-Stitching an einer beliebigen Anzahl von Komponenten durchgeführt werden kann, mit einer geeigneten Anpassung des schreibseitigen Decodierers 300 und des leseseitigen Multiplexers 302. Des Weiteren kann zum Kompensieren einer zusätzlichen Verzögerung, die aufgrund des Durchführens von Multiplexen hinzugefügt werden kann, eine weitere Registerlatenzstufe hinzugefügt werden.
  • Tiefen- und Breiten-Stitching können frei kombiniert werden, um FPGA-Speicherkomponenten beliebiger geeigneter Größe aufzubauen. Aufgrund von Quantisierung kann Schwund auftreten. Beispielsweise weist eine MLAB zwanzig Bits pro Speicherwort auf. Falls nur sechzehn Bits gewünscht sind, können die verbleibenden vier einfach verworfen werden. Auch wenn die in 53 bzw. 54 veranschaulichten Beispiele für Breiten-Stitching und Tiefen-Stitching zwei Speicherbänke 252 beinhalten, sollte ferner angemerkt werden, dass Tiefen-Stitching und Breiten-Stitching für eine beliebige geeignete Anzahl von Speicherbänken 252 genutzt werden können.
  • Die Verwendung programmierbarer Logikbausteine wie FPGAs kann auch die Verwendung vieler unterschiedlicher Datenformate ermöglichen. Für eine beliebige gegebene Anwendung kann das Vektorprozessorsystem 26 erwarten, dass Elemente in mehreren Zahlenformaten (z.B. bfloat16, Gleitkomma mit einfacher Genauigkeit (auch als FP32 bekannt), int8, Blockgleitkomma (BFP) oder anderen Datenformaten, einschließlich nicht standardisierter Datenformate) sowie Vektoren unterschiedlicher Längen bearbeitet werden. Wenn die Vektorverarbeitungssysteme 26 auf FPGAs implementiert werden, kann die Registerdateispeicherung direkt auf die Software zugeschnitten werden, die ausgeführt wird. Mit anderen Worten können Registerdateien 81 in Speicherblöcken 252 gespeichert sein, die speziell auf Anwendungen oder Algorithmen zugeschnitten sind, die durch die IC-Einrichtung 12 ausgeführt werden.
  • Den verschiedenen Zahlenformaten ist jeweils eine Speicherbreite in Bit zugeordnet. Zahlen, die zusammen bei einer Berechnung verwendet werden, können frei zu einem beliebigen Speicherwort ausreichender Größe kombiniert werden. Wie zum Beispiel in 55 veranschaulicht, umfassen Wörter 304 (z.B. Wörter 304A-304D) zweiunddreißig Bits und können Werte verschiedener Datenformate beinhalten. Beispielsweise beinhaltet Wort 304A vier int8-Werte, Wort 304B beinhaltet zwei int8-Werte und einen bfloat16-Wert, Wort 304C beinhaltet einen FP32-Wert und Wort 304D beinhaltet drei Gleitkommawerte, die jeweils neun Bits beinhalten. Da nur siebenundzwanzig Bits des Worts 304D zum Speichern von Werten verwendet werden, können fünf Bits (repräsentiert durch das Kästchen 306) möglicherweise nicht genutzt werden.
  • Als weiteres Beispiel verwendet Software, die eine Multiplikation eines bfloat16-Werts mit einem FP32-Wert ausführt, sechzehn Speicherbits für den bfloat16-Wert und zweiunddreißig Speicherbits für den FP32-Wert. Auch wenn zwei Werte vorliegen, können beide Werte in einer einzigen Leseoperation gelesen werden. Zum Beispiel kann ein FPGA, das zum Durchführen der Multiplikation des bfloat16-Werts und des FP32-Werts genutzt wird, angepasst werden, um ein natives 48-Bit-Speicherformat aufzuweisen, indem an zwei M20K-Speichern Breiten-Stitching durchgeführt wird, um 64 Bit breite Wörter zu erzeugen. Somit können die Daten in einer einzigen Lesetransaktion anstelle von zwei wiederhergestellt werden, wodurch Zugriffszeit eingespart wird.
  • Dementsprechend kann die Registerspeicherung speziell für eine bestimmte Anwendung oder einen bestimmten Algorithmus, die/der durch ein FPGA auszuführen ist, zugeschnitten sein. Vor diesem Hintergrund wird nun die Kompilierung (z.B. über den Compiler 16) mit Bezug auf 56 besprochen. Insbesondere ist 56 ein Flussdiagramm eines Prozesses 310 zum Erzeugen eines Programmdesigns (z.B. eines Vektorverarbeitungssystems 26), das auf der IC-Einrichtung 12 implementiert werden kann. Der Prozess 310 kann durch den Compiler 16 oder den Compiler 16 in Verbindung mit der Designsoftware 14 durchgeführt werden. Während Operationen des Prozesses 310 unten allgemein als durch den Compiler 16 durchgeführt beschrieben werden, können diese Operationen dementsprechend durch den Compiler 16 und die Designsoftware 14 (sowie Verarbeitungsschalttechnik, die diesen Compiler 16 und die Designsoftware 14 ausführt) durchgeführt werden. Der Prozess 310 beinhaltet allgemein Empfangen von Quellcode (Prozessblock 312), Kompilieren des Quellcodes (Prozessblock 314) und Bereitstellen eines Bitstroms an eine IC-Einrichtung (z.B. IC-Einrichtung 12) zum Programmieren (Prozessblock 316).
  • Bei Prozessblock 312 kann der Compiler 16 Quellcode empfangen. Der Quellcode kann ein von einem Entwickler erstelltes Programm höherer Ebene sein. Der Quellcode kann Code für einen Algorithmus oder eine Funktion beinhalten, der/die durch die IC-Einrichtung 12 durchzuführen ist.
  • Bei Prozessblock 314 kompiliert der Compiler 16 den empfangenen Code. Um den Quellcode zu kompilieren, kann der Compiler 16 mehrere Operationen durchführen (z.B. Operationen, die durch Teilprozessblöcke 314-326 angegeben sind). Beispielsweise kann der Compiler 16 bei Teilprozessblock 318 einen ersten Durchlauf (z.B. eine erste Runde von Berechnungen) an dem empfangenen Quellcode durchführen, um eine anfängliche Implementierung (oder einen Teil davon) zu erzeugen, um zu ermöglichen, dass die IC-Einrichtung 12 gemäß dem Quellcode programmiert wird. Während des ersten Durchlaufs kann der Compiler 16 zum Beispiel bestimmen, wie Speicherbänke angeordnet werden sollten, um die Anforderungen des empfangenen Codes zu erfüllen. In einer Ausführungsform kann der Compiler 16 den ersten Durchlauf durchführen, der unter der Annahme arbeitet, dass alle Zahlenformate, die durch die IC-Einrichtung 12 unterstützt werden, zur Nutzung verfügbar sind.
  • Die Kompilierung eines anfänglichen Entwurfs einer Hardware-Implementierung des Quellcodes kann beispielsweise durch Reduzieren der Anzahl möglicher Datenformate, die eine nachfolgende Version des Entwurfs unterstützt, verfeinert werden. Dies kann ermöglichen, dass Registerdateien (z.B. Vektorregisterdateien 81) effizienter implementiert werden, da die Registerdateien dazu ausgelegt werden können, zu ermöglichen, dass spezifische Datenformate verwendet werden. Vor diesem Hintergrund kann der Compiler 16 bei Teilprozessblock 320 Datenformate bestimmen, die durch den Quellcode angegeben werden. Zum Beispiel kann der Quellcode verschiedene Operationen (z.B. Leseoperationen, Schreiboperationen, arithmetische Operationen) angeben, die ein oder mehrere spezifische Datenformate involvieren. Zusätzlich kann der Compiler 16 bei Teilprozessblock 322 eine Benutzereingabe (z.B. basierend auf einer empfangenen Aufforderung oder einer grafischen Benutzeroption, die bereitgestellt wird, während der Entwickler die Designsoftware 14 verwendet) empfangen, die ein oder mehrere Datenformate, die unterstützt werden sollten, ein oder mehrere Datenformate, die nicht unterstützt werden sollten, oder beides angibt. Bei Teilprozessblock 324 wählt der Compiler 16 basierend auf der mit dem Teilprozessblock 320 verbundenen Bestimmung und der bei Teilprozessblock 322 getroffenen Auswahl aus, welche Datenformate in der Hardware-Implementierung verfügbar sein sollten, die der Compiler 16 erzeugen wird. Während beispielsweise der erste Durchlauf (z.B. Teilprozessblock 318) durchgeführt werden kann, der unter der Annahme arbeitet, dass alle Datenformate verfügbar sind, kann der Compiler 16 ein oder mehrere Datenformate beseitigen, wenn nachfolgende Durchläufe durchgeführt werden (z.B. um zu ermöglichen, dass Registerdateien besser auf die Spezifikationen des Quellcodes zugeschnitten werden). Es ist anzumerken, dass in einigen Ausführungsformen der Teilprozessblock 322 möglicherweise nicht durchgeführt wird. In solchen Ausführungsformen kann der Compiler bei Teilprozessblock 324 basierend auf der bei Teilprozessblock 320 vorgenommenen Bestimmung auswählen, welche Datenformate verfügbar sein sollten. In jedem Fall kann der Compiler 16 auch Aufwandskalkulationsmethoden verwenden, wenn der Teilprozessblock 324 durchgeführt wird, um zu bestimmen, welches bzw. welche Datenformat(e) ausgewählt werden sollte/sollten.
  • Manche Zahlenformate sind zum Beispiel effektiv Obermengen anderer. Beispielsweise eignet sich aufgrund der Natur des bfloat16-Datenformats, das dem FP32-Datenformat ähnelt, aber eine reduzierte Genauigkeit aufweist, ein FP32-Wert als Ersatz zum Implementieren einer bfloat16-Berechnung. Das Ausführen einer Berechnung, die für bfloat16 bestimmt ist, unter Verwendung von FP32-Zahlen wird ein ähnliches Ergebnis liefern. In anderen Fällen können unterschiedliche Formate weniger kompatibel sein. Zum Beispiel sind int8- und 8-Bit-Minigleitwert- (FP8-) Berechnungen, auch wenn sie Zahlen der gleichen Bitgröße bearbeiten, möglicherweise nicht grundsätzlich austauschbar, ohne die Ergebnisse wesentlich zu ändern.
  • Falls die Bestimmung bei Teilprozessblock 320 angeben würde, dass primär FP32-Werte zusammen mit vereinzelter Verwendung von bfloat16-Werten verwendet werden würden, kann der Compiler 16 dementsprechend die bfloat16-Berechnungen auf FP32-Berechnungen „anheben“. Dies kann die numerischen Ergebnisse der Berechnung leicht ändern, kann aber auch den FPGA-Vektorprozessordatenpfad einheitlich als Format mit einfacher Genauigkeit anlegen, wodurch die Anzahl von Datenformaten reduziert wird, die der Compiler 16 berücksichtigen sollte, wenn der zweite Durchlauf bei Teilprozessblock 324 durchgeführt wird. Es ist jedoch anzumerken, dass Zahlen nicht notwendigerweise auf ein größeres Format angehoben werden müssen, damit diese grundsätzliche Methode anwendbar ist. Das heißt, es ist möglich, mehrere Zahlen kleineren Formats anzuordnen, um sich dem Verhalten eines größeren Formats anzunähern. Um sich beispielsweise dem Verhalten eines FP32-Werts anzunähern, können zwei blfloat16-Werte zugewiesen werden, um als der grobe und feine Teil des Bereichs zu fungieren.
  • Dementsprechend kann eine Aufwandskalkulationsfunktion oder ein Aufwandskalkulationsalgorithmus, die/den der Compiler 16 beim Durchführen des Teilprozessblocks 324 verwenden kann, zugeschnitten werden, um mehrere Überlegungen zu treffen. Die Aufwandskalkulationsfunktion kann zum Beispiel die Toleranz des Endbenutzers für Rechenfehler berücksichtigen (die z.B. von sehr locker bis zu einer strengen Notwendigkeit reichen kann, Berechnungen unter Verwendung eines bestimmten Datentyps durchführen zu lassen). Wenn ein stärkerer Wunsch besteht, einen speziellen Datentyp zu verwenden (z.B. weil der Endbenutzer genauere Ergebnisse wünscht), kann es weniger wahrscheinlich sein, dass der Compiler 16 ein Datenformat auf die oben besprochene Weise anhebt. Ein anderes Beispiel für eine Überlegung, die der Compiler 16 vornehmen kann, ist der Wunsch, Rechenzeit zu reduzieren (z.B. kann eine Vektorberechnungseinheit 80 mehr int8-Formatberechnungen gleichzeitig ausführen als Berechnungen, die größere Datentypen involvieren (z.B. Gleitkommawerte (FP16-Werte) oder bfloat16-Werte, die beide kleiner als FP32-Werte sind). Eine Reduzierung der Genauigkeit würde zu weniger Arbeitszyklen führen, wodurch ermöglicht wird, dass die IC-Einrichtung 12 schneller Ergebnisse produziert. Als weiteres Beispiel für eine Überlegung, die der Compiler 16 vornehmen kann, kann der Compiler 16 den Aufwand der Speicherung im Arbeitsspeicher berücksichtigen. Zum Beispiel könnte das Umschalten von einem Zahlenformat mit 32 Bits zu einem Zahlenformat mit 16 Bits die genutzte Speichermenge um die Hälfte reduzieren. Des Weiteren ist anzumerken, dass der Compiler 16 mit einer benutzerdefinierten Aufwandsfunktion arbeiten kann, die Wägeoptionen ergreift, um ein höher bewertetes Ergebnis über den Suchraum zu erzeugen. Zum Beispiel kann eine Standardaufwandsfunktion basierend auf Benutzereingaben modifiziert werden, die vorgenommen werden, um die Präferenzen des Entwicklers anzugeben.
  • Fortfahrend mit der Erörterung des Prozesses 310 kann der Compiler 16 bei Teilprozessblock 326 einen zweiten Durchlauf durchführen, bei dem der Quellcode unter Verwendung des oder der bei Teilprozessblock 324 ausgewählten Datenformate neu implementiert wird. Mit anderen Worten kann der Compiler 316 einen anfänglichen Entwurf für eine Hardware-Implementierung (z.B. des Vektorverarbeitungssystems 26 oder eines Teils davon, wie etwa Speicherblöcke, die zum Speichern von Registerdateien verwendet werden) modifizieren, um einen nachfolgenden Entwurf zu erzeugen, der das oder die Datenformate unterstützt, die im Teilprozessblock 324 ausgewählt wurden. Zusätzlich ist anzumerken, dass, auch wenn der Teilprozessblock 326 als einen zweiten Durchgang umfassend beschrieben ist, der Teilprozessblock 326 in anderen Ausführungsformen mehrere Durchgänge umfassen kann.
  • Bei Prozessblock 316 kann der Compiler 16 einen Entwurf für eine Hardwareimplementierung des Quellcodes (z.B. in einer Programmiersprache niedriger Ebene) abschließen und einen Bitstrom an die IC-Einrichtung 12 liefern, um zu bewirken, dass der Entwurf auf der IC-Einrichtung 12 implementiert wird.
  • Vor dem Hintergrund der Erörterung des Prozesses 310 werden nun andere Überlegungen und Optimierungen im Zusammenhang mit Kompilieren (z.B. Registerdateien betreffend) erörtert. Zunächst wird die Gruppierung von Registern besprochen. Falls der Compiler 16 erkennt, dass häufig gleichzeitig auf zwei oder mehr Variablen zugegriffen wird, können die zwei oder mehr Variablen umgeordnet werden, so dass sie zusammen im Hauptspeicher oder sogar in der Vektorregisterdatei 81 selbst vorliegen. Gegeben sei zum Beispiel, in Zusammenschau mit 57, die Situation, bei der das Programm einen Vektor C = A * B (wobei c[0] = a[0]*b[0], c[1] = a[1]*b[1] usw.) berechnen möchte. In 57 weist eine erste Gruppierung 330A ein Layout der Registerdatei für zwei Vektoren A und B mit N Wörtern Länge auf. Gruppierung 330B, die unter Verwendung von Breiten-Stitching implementiert werden kann, ist eine andere Anordnung der Vektorelemente der ersten Gruppierung 330A, die zu einer breiteren Registerdatei kombiniert sind, wobei die entsprechenden Elemente zusammen gespeichert sind. Durch das gemeinsame Speichern der Elemente stehen diese Elemente nun zum Lesen in einem einzigen Taktzyklus für die Komponenten der Vektoren A und B zur Verfügung, im Vergleich zu den zwei Taktzyklen, die beim Verwenden der ersten Gruppierung 330A benötigt würden. Allerdings müssen, wenn die Gruppierung 330B genutzt wird, die Werte des Registers, das A[0] und B[0] enthält, möglicherweise zusammen geschrieben werden.
  • Der Compiler 16 kann solche Überlegungen berücksichtigen, wenn ein Kompilieren durchgeführt wird, um potenziell eine erhöhte Effizienz zu ermöglichen. Zum Beispiel kann der Compiler 16 modifizieren, wie Variablen im Primärspeicher gespeichert werden, um mit der gruppierten Speicherung (z.B. Gruppierung 330B) in einer Registerdatei übereinzustimmen und weitere Effizienz zu gewinnen. Die Breite der Elemente kann der Breite eines physischen RAM-Speicherelements entsprechen (z.B. wenn der RAM Breiten-Stitching aufweist). Ist dies der Fall, wird eine einfache Änderung zum Trennen der gemeinsamen Schreibsteuerungen angezeigt. Dementsprechend kann, anstatt immer in beide Hälften des RAM mit Breiten-Stitching zu schreiben, der „Schreib-in-Register“-Teil des Opcodes als ein Bitfeld ausgedrückt werden, das angibt, gemeinsam oder einzeln in den oberen und den unteren Teil zu schreiben.
  • Es wird nun besprochen, wie der Compiler 16 das Vorhandensein von Variablen in mehreren Zahlenformaten in der Registerdatei handhaben kann. Wie in 58 gezeigt, können Wörter 304 markiert werden (z.B. unter Verwendung von Tags 332), die den Typ (d.h. das Format) oder die Typen von Daten angeben, die in einem gegebenen Wort 304 enthalten sind. Typen können entweder statisch berechnet werden, einschließlich aller möglichen Gruppierungen, die durch den Compiler 16 unterstützt werden, oder dynamisch durch den Compiler 16 den Formaten zugewiesen werden, die in dem oder den Programmen verwendet werden, mit denen die IC-Einrichtung 12 arbeiten soll. Durch das dynamische Zuweisen von Datentypen tritt wahrscheinlicher (im Vergleich zu statischer Berechnung) eine kleinere Teilmenge potenzieller Gruppierungen auf. Die Tags 332 können an jedes Wort 304 in einer Registerdatei angehängt werden, beispielsweise durch leichtes Erhöhen der Speicherbreite des Speichers, der zum Speichern der Wörter 304 verwendet wird.
  • Alternativ kann das Datenformat als zusätzliche Felder innerhalb des Befehlsworts (z.B. Opcode) einer Verarbeitungsschalttechnik angezeigt werden, was allgemein durch 59 veranschaulicht ist. Als weitere Alternative kann der Typ eines Registers einbezogen werden, durch den ein Register ausgewählt wird. Unter Bezugnahme auf 60 können zum Beispiel Register einer ersten Gruppe 336A von Registern int8-Werte speichern, Register einer zweiten Gruppe 336B von Registern können neun Bit-Gleitkommawerte speichern und Register einer dritten Gruppe 336C von Registern können FP32-Werte speichern. Zudem ist anzumerken, dass in einigen Implementierungen, wie etwa jenen, die unter Verwendung eines einzigen Formats arbeiten, möglicherweise keine Nachverfolgung von Zahlenformaten erfolgt.
  • Dementsprechend kann der Compiler 16 beim Kompilieren (z.B. Durchführen des Prozessblocks 314 des Prozesses 310) Unterstützung für Software und zugehörige FPGA-Vektorhardware-Erzeugung für alle Datenformate implementieren und dann ein bestimmtes Datenformat oder bestimmte Datenformate auswählen. Unter kurzem Rückbezug auf 56 kann der Compiler 16 ein bestimmtes Datenformat oder bestimmte Datenformate auswählen, indem Formate gemäß Anfrage durch eine Benutzereingabe (z.B. eine Eingabe, die bei einem Teilprozessblock 322 empfangen wird) eliminiert werden, verbleibende Datenformate zur Inspektion (z.B. bei Teilprozessblock 324) implementiert werden, Aufwand (z.B. basierend auf der Menge an zu verwendender Weichlogik) bestimmt wird und das Datenformat mit dem geringsten Aufwand zur Verwendung ausgewählt wird (z.B. während der Teilprozessblock 326 durchgeführt wird).
  • Falls ferner ein neuer Befehlsstrom für eine bestehende FPGA-Vektorprozessorarchitektur kompiliert wird, kann der Compiler 16 dem bestehenden Zahlenformat folgen. Falls in der neuen Software irgendwelche Zahlenformate verwendet werden, die nicht in der bestehenden Hardware vorhanden sind, kann der Compiler 16 in der Lage sein, eines oder mehrere der neuen Zahlenformate zu eliminieren, und zwar durch Umwandeln eines „teureren“ (d.h. aufwendigeren) Formats, das in Hardware vorhanden ist, Implementieren einer angeforderten Operation höherer Ebene durch Softwareemulation unter Verwendung einer komplexeren Sequenz verfügbarer Aussagen, um eine einzelne nicht verfügbare zu ersetzen (z.B. eine nicht verfügbare int16-Multiplikationsoperation aus vier int8-Multiplikationen und -Additionen zusammenzusetzen), Tolerieren potentieller zusätzlicher Fehler in dem Berechnungsergebnis (z.B. Verwenden eines FP16-Ergebnisses, um eine FP32-Berechnung zu implementieren), oder eine Kombination davon. Wie vorstehend besprochen, kann jede dieser Überlegungen durch den Compiler 16 berücksichtigt werden (z.B. über einen Aufwandskalkulationsalgorithmus).
  • Falls ein angefordertes Softwareelement (z.B. Quellcode, der durch einen Entwickler bereitgestellt wird) hauptsächlich in einem einzigen Zahlenformat arbeitet, kann es vorteilhaft sein, Hardware zu erzeugen, um Zahlen aus seltener verwendeten Formaten automatisch in das häufiger verwendete Format umzuwandeln. Das dynamische Ändern des Typs eines Datenelements kann als „Casting“ (Umwandeln) bezeichnet werden. Gemäß 61 kann als Beispiel dafür, wie Umwandeln durchgeführt werden kann, das Gleitkommaformat mit einfacher Genauigkeit (d.h. FP32) verwendet werden, um Zahlen in mehreren kleineren Formaten (z.B. int8, int16, bfloat16) darzustellen. Entsprechend wandelt Umwandlungsschalttechnik 340 (z.B. Umwandlungsschalttechnik 340A, 340B, 340C) Daten anderer Formate (z.B. int8, int16, bfloat16) dynamisch um und wandelt die Daten in ein anderes Format (z.B. FP32) um. Falls der Compiler 16 bestimmt, dass es vorteilhaft ist, eine Formatumwandlungsschalttechnik (z.B. Umwandlungsschalttechnik 340) einzuführen, kann die Umwandlungsschalttechnik 340 der Vektorregisterdatei 81 vorgelagert sein, wodurch ermöglicht wird, dass Elemente schnell in ein anderes Format umgewandelt werden, bevor sie für eine anschließende Berechnung gespeichert werden.
  • Wie vorstehend besprochen, kann es mehrere Kopien von Daten geben (z.B. mehrere Kopien von Vektorregistern 60, wie in 3 gezeigt). Vor diesem Hintergrund können gemäß 62 mehrere Speicherblöcke 252 genutzt werden, um zu ermöglichen, dass gleichzeitige Datenlesevorgänge durchgeführt werden. Wenn zum Beispiel ein DSP-Block 334 (der als Vektorverarbeitungseinheit 66 eingesetzt werden kann) zwei Register miteinander multiplizieren soll, können, falls ein Duplikat der Vektorregisterdatei 81 hergestellt wird, so dass jeder Speicherblock 252 eine Kopie der Vektorregisterdatei 81 beinhaltet, Vektorelemente, die bei der Multiplikation verwendet werden sollen, dem DSP-Block 334 in einer einzigen Leseoperation bereitgestellt werden. Die Leseadressen der beiden Speicherblöcke 252 sind unabhängig, während die Schreibsteuerungen identisch sind. Diese in 62 veranschaulichte Methode kann erweitert werden, um zu ermöglichen, dass eine beliebige geeignete Anzahl von Leseports einer Registerdatei (z.B. Vektorregisterdatei 81) bereitgestellt wird, indem einfach eine weitere Kopie der Registerdatei hinzugefügt wird.
  • Vor dem Hintegrund von 62 kann gemäß 63 Schalttechnik hinzugefügt werden, um zu ermöglichen, dass Schreibsteuerungen in die Speicherblöcke 252 unabhängig durchgeführt werden. Wie beispielsweise in 63 veranschaulicht, kann der Multiplexer 346A steuern, welche Daten in den Speicherblock 252G geschrieben werden, während der Multiplexer 346B steuern kann, welche Daten in den Speicherblock 2521 geschrieben werden. In einem FPGA ist der Hardwareaufwand zum Hinzufügen von Multiplexern relativ gering. Zum Beispiel kann ein 4:1-Multiplexer unter Verwendung einer einzigen arithmetisch-logischen Einheit (ALU) implementiert werden, die in einem FPGA enthalten ist, während kleinere Multiplexer (z.B. ein 2:1-Multiplexer) unter Verwendung einer Hälfte einer ALU implementiert werden können.
  • Wie vorstehend angemerkt, können die Vektorverarbeitungseinheiten 66 zum Durchführen von Operationen Eingaben von zwei Registern empfangen, eine Funktion (z.B. Multiplikation, Addition) an den Eingaben ausführen und das Ergebnis zurück in ein Register schreiben, das eines der zwei Eingaberegister sein könnte. Neue Werte kommen über den Pfad „Abruf“ aus dem externen Speicher herein und fertige Berechnungsergebnisse werden unten entlang des Pfades „Speicherung“ ausgegeben. Das Verhältnis zwischen diesen Operationen ist algorithmusspezifisch (z.B. spezifisch für einen bestimmten Algorithmus, der durch den Quellcode codiert wird) und kann durch den Compiler 16 analysiert werden, um zu bestimmen, ob unabhängige Schreiboperationen aktiviert werden sollen, und, falls ja, den Grad, in dem unabhängige Schreiboperationen aktiviert werden (z.B. unabhängige Schreiboperationen für alle Speicherblöcke 252, einen Teil der Speicherblöcke 252 oder keinen der Speicherblöcke 252).
  • Gegeben sei zum Beispiel ein Programm mit dem folgenden Zugriffsmuster, das für mehrere Anwendungen, wie etwa KI-Anwendungen, verwendet werden könnte:
    1. 1. Abrufen von Gewichtungswerten aus dem Speicher, Speichern in ein oder mehrere Register W;
    2. 2. Wiederholung:
      • 2A. Abrufen von Probenwerten aus dem Speicher, Speichern in ein oder mehrere temporäre Register S;
      • 2B. Multiplizieren der entsprechenden Elemente von S und W, Speichern der Ergebnisse in ein oder mehrere Register M;
      • 2C. Summieren der Werte von MRegister(n);
      • 2D. Speichern der Summe, so dass sie in der nächsten Berechnungsstufe zur Verfügung steht;
  • Bei diesem Beispiel kann es unzweckmäßig sein, dass ein in ein Register zu schreibender Wert entweder aus dem externen Speicher oder dem berechneten Ergebnis stammt. Falls modifiziert, um einen zweiten Schreibpfad hinzuzufügen, wie in 63 gezeigt, würde das Vektorverarbeitungssystem 26 die Fähigkeit aufweisen, gleichzeitig das berechnete Ergebnis M zu schreiben und die nächste Probe S abzurufen. Dieses gleiche Prinzip kann auf beliebige kommutative Operationen angewendet werden, wie etwa Multiplikations-, Additions- oder Boolesche Operationen (z.B. AND-, OR-, XOR-Operationen). Somit kann das Bereitstellen der Fähigkeit, unabhängige Schreiboperationen durchzuführen, effektiv die Anzahl verfügbarer Register verdoppeln (z.B. im Vergleich zum Verfolgen des in 62 gezeigten Ansatzes).
  • Des Weiteren können in Fällen, in denen Speicherbänke 252 unabhängig voneinander beschrieben werden können, unterschiedliche Schreibmuster genutzt werden. Wie zum Beispiel in 64 gezeigt, kann die Adressierungslogik 348 (z.B. Adressierungslogik 348A, 348B) in Verbindung mit Multiplexern 350 (z.B. Multiplexern 350A, 350B) genutzt werden, um unterschiedliche Zugriffsmuster zu erzeugen. Insbesondere können die Multiplexer 350 ein Adresssignal, ein Signal von der Adressierungslogik 348 und ein Steuersignal (z.B. zum Auswählen regulärer oder diagonaler Schreibmuster) empfangen. Die regulären und diagonalen Schreibmuster sind in 65 bzw. 66 dargestellt. In 65 und 66 werden der Vektor X, der Vektor Y und der Vektor Z in Datenregister geschrieben. Wie in 65 gezeigt, werden die Elemente jedes Vektors bei Verfolgen eines regulären Schreibmusters in dasselbe Register geschrieben. 66 zeigt ein diagonales Schreibmuster, das implementiert werden kann, indem eine Adressierung unter Verwendung eines Signals durchgeführt wird, das von der Adressierungslogik 348 bereitgestellt wird.
  • Es ist anzumerken, dass die in 65 und 66 veranschaulichten Muster zwei Beispiele für viele Muster sind, die genutzt werden können. Zum Beispiel können andere Muster, die Manipulieren der Speicheradresse auf einer pro-Lane-Basis involvieren, erreicht werden, indem die Adressierungslogik 348 und Multiplexer 350 genutzt werden. Muster, die ein Austauschen von Elementen involvieren (z.B. horizontale Austäusche anstelle von vertikalen Austäuschen, die in 65 und 66 gezeigt sind), sind ebenfalls erreichbar.
  • In vielen Fällen kann die Länge von Vektoren, die bearbeitet werden, ein Vielfaches der Anzahl von Lanes 82 sein, die bereitgestellt werden, so dass eine Berechnung über alle Lanes hinweg erfolgt (z.B. um dem Vektorverarbeitungssystem 26 zu ermöglichen, effizienter zu arbeiten). Dies ist jedoch für bestimmte Anwendungen möglicherweise nicht praktikabel.
  • Dementsprechend können in solchen Fällen Hardware, die in dem Vektorverarbeitungssystem 26 enthalten ist (z.B. verwendete Speicherblöcke, Lanes 82) und der Compiler 16 kleinere Vektortypen repräsentieren. Eine Methode hierzu ist in 67 veranschaulicht, die Vektordaten (z.B. Vektor A und Vektor B) und andere Daten (z.B. Metadaten oder Tags 354) beinhaltet, die einen oder mehrere Datentypen angeben. Jedes Tag 354 kann in einer Speichereinheit gespeichert werden, die keiner speziellen Lane 82 direkt zugeordnet ist, und kan verwendet werden, um Typinformationen bezüglich eines gesamten Lane-übergreifenden Worts zu tragen. Wie bei einzelnen Lane-Zahlenformaten könnten diese Informationen auch in dem Opcode enthalten sein, wobei unterschiedliche Lanes basierend auf dem Vollvektortyp auswählen, die Daten unterschiedlich zu handhaben. Zum Beispiel kann ein Tag 354 das Hinzufügen der Elemente in der Vektor-A-Position und das Multiplizieren der Elemente im Vektor B implizieren. In jedem Fall kann, wenn ein Entwurf (z.B. wie durch Quellcode angegeben, der von einem Entwickler bereitgestellt wird) das Verwenden von Vektoren mit Längen erfordert, deren Anzahl geringer als die Anzahl der verwendeten Lanes 82 ist, der Compiler 16 die Rechenbandbreite wiederherstellen, indem Operationen, die die Vektoren beinhalten, gleichzeitig durchgeführt werden, da das sequenzielle Durchführen der Operationen inaktive Lanes 82 hinterlassen kann.
  • Der Compiler 16 kann bestimmen, ob ein Bit (z.B. Flag oder Tag) verwendet werden sollte, um eine Eigenschaft eines Datenformats anzugeben. Falls zum Beispiel ein Algorithmus, der auf der IC-Einrichtung 12 durchzuführen ist (z.B. wie durch Quellcode angegeben, der durch einen Entwickler erzeugt wird), häufig Muster verwendet, die eine Auswahl einer Teilmenge der Vektorelemente involvieren, kann es zweckmäßig sein, ein Bit hinzuzufügen, das eine solche Eigenschaft angibt. Tatsächlich können, wie oben angemerkt, die Natur der FPGA-Speicher und die Verwendung von Breiten-Stitching die Möglichkeit schaffen, ein zusätzliches Bit zu einem gespeicherten Wort ohne eine entsprechende Zunahme des Hardwareaufwands hinzuzufügen. Ein anderes Beispiel dafür, wann ein zusätzliches Bit mit einem Wort verwendet werden kann, ist das Durchführen einer rektifizierten Linearaktivierungs- (RELU-) Operation, die alle nichtnegativen Zahlen beibehält, insbesondere wenn die Wörter ein Datenformat aufweisen, das kein Vorzeichenbit beinhaltet.
  • Nachdem verschiedene Speicherüberlegungen erörtert wurden, die der Compiler 16 vornehmen kann, werden nun Lane-Verbindungsmuster erörtert und wie der Compiler 16 auswählen kann, welche Muster in einer Hardware-Implementierung eines Vektorverarbeitungssystems 26 verwendet werden. Zum Beispiel können viele Anwendungen Schritte beinhalten, in denen Ergebnisse über Lanes 82 des Vektorverarbeitungssystems 26 hinweg aggregiert werden. Ein Beispiel aus KI-Anwendungen kann Summieren aller einzelnen Lane-Ergebnisse (z.B. Durchführen einer additiven Reduktion oder Akkumulation) und dann Auswählen des Maximalwerts über die Lanes hinweg beinhalten. Ein anderes Beispiel ist das Kombinieren von Elementen mit einer bitweisen Operation (z.B. XOR zum Berechnen einer Summierung in einem Galois-Feld) oder das selektive Kombinieren von Elementen (z.B. Durchführen einer bedingten Operation zum Bestimmen einer Summe, falls ein entsprechendes Flag vorhanden ist).
  • Eine Bestimmung, die der Compiler 16 vornehmen kann, wenn der Compiler Quellcode kompiliert, bestimmt, welche Datenquellen für die Vektorregisterdatei 81 für eine Lane 82 verfügbar sind. Auch wenn es keine spezielle Obergrenze für die Anzahl an Quellen gibt, wird umso mehr Routing-Schalttechnik (z.B. Drähte, Multiplexer) genutzt, je mehr Datenquellen einer Vektorregisterdatei 81 (oder Skalarregisterdatei) zur Verfügung stehen. Dementsprechend kann der Compiler 16 eine Aufwandskalkulationsfunktion oder einen Aufwandskalkulationsalgorithmus nutzen, der eine Schalttechnik berücksichtigt (z.B. durch Zuweisen eines Aufwands), die in verschiedenen potentiellen Implementierungen vorhanden wäre, sowie Geschwindigkeitsbetrachtungen (z.B. ob das Vektorverarbeitungssystem 26 in der Lage sein wird, Operationen schneller in einer Hardware-Implementierung im Vergleich zu einer anderen Implementierung durchzuführen). In einer Ausführungsform wird eine Vektorregisterdatei 81 mit einer einzigen Datenquelle als mit dem geringsten Aufwand verbunden betrachtet, und der Aufwand zum Verwenden von zwei oder drei Eingaben kann als niedrig betrachtet werden (z.B. gleich oder geringfügig größer als der Aufwand, der mit dem Verwenden einer einzigen Datenquelle verbunden ist). Hinzufügen einer vierten Eingabe kann bewirken, dass mehr Schaltungsfläche zum Routen verwendet wird, während Verarbeitungsgeschwindigkeiten beibehalten werden, die auftreten, wenn eine, zwei oder drei Datenquellen verwendet werden. Des Weiteren ist anzumerken, dass mehr als vier Datenquellen verfügbare Vektorregisterdateien 81 sein können. Beispielsweise kann in einer Ausführungsform eine Vektorregisterdatei 81 kommunikativ mit n Datenquellen gekoppelt sein, wobei n eine ganze Zahl zwischen einschließlich eins und sechsunddreißig ist.
  • 68 veranschaulicht Routing von vier Datenquellen zu der Vektorregisterdatei 81. Insbesondere kann ein 4:1-Multiplexer 456 vier Eingaben empfangen und schreibt selektiv eine der Eingaben in die Vektorregisterdatei 81. In diesem Beispiel beinhalten die vier Eingaben Daten von zwei Lanes 82 neben der Lane 82, die die Vektorregisterdatei 81 nutzt, abgerufene Daten (angegeben durch „Abruf“) und ein Berechnungsergebnis (z.B. eine Ausgabe einer Vektorverarbeitungseinheit 66, die in der Lane 82 enthalten ist). Dementsprechend können in diesem Beispiel Daten abgerufen werden, Berechnungsergebnisse können gespeichert werden und die Vektorregisterdatei 81 steht zwei anderen Datenquellen zur Verfügung (z.B. zwei Lanes 82, die an die Lane 82 angrenzen, die Vektorregisterdatei 81 nutzt). Bei anderen Ausführungsformen könnten die zusätzlichen Eingabequellen von einer oder mehreren Lanes 82, einer Skalarquelle (z.B. einem Skalarregister 62), einer sekundären Abrufquelle oder einer Konstanten stammen.
  • Der Compiler 16 kann in vielen Fällen Konnektivität zu anderen Lanes 81 bereitstellen. Eine potentielle Ausnahme hiervon kann sein, wenn eine Berechnung völlig unabhängig ist. In einer möglichen Implementierung kann der Compiler 16 ein Ringmuster implementieren, bei dem jede Lane 82 kommunikativ mit einer vorhergehenden Lane 82 gekoppelt ist und eine Eingabe von dieser empfängt und die letzte Lane 82 kommunikativ mit der ersten Lane 82 gekoppelt ist. Dementsprechend können, bei gegebener Zeit, angeforderte Daten rund um den Ring zu einem beliebigen Ziel gelangen. Ringstrukturen und Modifikationen, die an Ringstrukturen vorgenommen werden können, werden im Folgenden ausführlicher beschrieben.
  • In jedem Fall kann der Compiler 16 den Fluss von Datenelementen untersuchen, der in einem Programm (z.B. Quellcode, der durch einen Entwickler bereitgestellt wird) angefordert wird. Der Compiler 16 kann das Programm auch in einen mathematisch äquivalenten Ausdruck umstrukturieren, der die verschiedenen assoziativen und kommunitiven Beziehungen zwischen Elementen nutzt, die beim Ausführen des Programms verwendet werden. Zusätzlich kann der Compiler 16 eine Ringstruktur als eine Basisstruktur vorgeben, die zu verwenden ist, wenn eine Hardware-Implementierung für ein Programm bestimmt wird, und eine andere Lane-Struktur berücksichtigen, um zu bestimmen, welche Anordnung von Lanes (und Zwischenverbindungen zwischen Lanes) in der Hardware-Implementierung verwendet werden sollten. Anstatt zum Beispiel ein Vollringmuster zu bilden, kann der Compiler 16 zwei Halbringe verwenden und einen zusätzlichen Schreibpfad (mit Multiplexschalttechnik) hinzufügen, um die Ringergebnisse zu kombinieren.
  • Als weiteres Beispiel kann ein Programm dazu auffordern, dass ein Vektor abgerufen wird, eine oder acht Permutationen auf die Elemente des Vektors angewendet werden, und der permutierter Vektor in ein Vektorregister zurückgeschrieben wird. Für ein solches Programm kann der Compiler 16 bestimmen, die Anzahl an Schreibquellen (z.B. von vier auf acht) zu erhöhen, so dass ein Element so schnell wie möglich zu dem gewünschten Permutationsziel verschoben wird. Der Compiler 16 kann eine potenzielle Zunahme der Latenz bestimmen, die durch Verwenden von acht Schreibquellen (relativ zu dem Verwenden von vier Schreibquellen) verursacht wird, und die Anzahl von Datenquellen bestimmen, für die die Vektorregisterdatei 81 verfügbar wäre.
  • Als weiteres Beispiel kann der Compiler 16 bestimmen, dass eine andere Struktur als eine Schleife verwendet werden sollte. Beispielsweise können die Vektorberechnungseinheiten 66 über eine oder mehrere Lanes 82 hinweg verknüpft werden, um eine Baumstruktur, wie etwa die Baumstruktur 358 aus 69, zu bilden. Die Baumstruktur 358 kann in einem Programm verwendet werden, das einen Vektor aus dem Speicher abruft, die Elemente der Vektoren summiert und das Ergebnis zu einer vorherigen Summe addiert. In einem solchen Fall können die DSP-Blöcke 334A Summen von Vektorelementen bestimmen, können die DSP-Blöcke 334B Zwischenaddition unter Beteiligung von Summen durchführen, die durch die DSP-Blöcke 334A bestimmt werden, kann der DSP-Block 334C die durch die DSP-Blöcke 334B erzeugten Summen addieren und kann der DSP-Block 334D die durch den DSP-Block 334C erzeugte Summe zu einer zuvor bestimmten Summe addieren.
  • Des Weiteren kann der Compiler 16 bestimmen, dass eine Berechnung nicht durch eine Vektorverarbeitungseinheit 66 durchgeführt werden sollte. Zum Beispiel kann die Baumstruktur 358 außerhalb der Lanes 82 implementiert sein und Summierungen an Ausgaben von Lanes durchführen. In einem solchen Fall können die Additionsoperationen, die die Baumstruktur 358 durchführt, im Vergleich zum Durchführen ähnlicher Summierungen unter Verwendung von Vektorverarbeitungseinheiten 66 in Lanes 82 schneller abgeschlossen werden.
  • Beim Bestimmen des Layouts von Lanes 82 kann der Compiler 16 Variablen berücksichtigen, wie etwa unter anderem die Verfügbarkeit von Speicher, Rechenressourcen von DSP-Blöcken 334, die in der IC-Einrichtung 12 enthalten sind, und Latenz. Wie vorstehend angemerkt, kann der Compiler 16 Ringstrukturen erzeugen. Unterschiedliche Layouts für eine 16 Lanes umfassende Ringstruktur 360 (z.B. Ringstrukturen 360A, 360B) sind in 70A und 70B veranschaulicht. Wie veranschaulicht, sind die Leitungen 362A, 362B der Ringstruktur 360A länger als die Leitungen 360C, 360D der Ringstruktur 360B, die Ringstruktur 360A wird eine höhere Latenz als die Ringstruktur 360B aufweisen. Dementsprechend kann der Compiler 16 entscheiden, die Ringstruktur 360B anstelle der Ringstruktur 360A zu verwenden, wenn eine 16 Lanes umfassende Ringstruktur erzeugt wird.
  • In Fällen, in denen das Kommunikationsmuster zwischen den Lanes 82 komplizierter ist oder das Vektorprozessorsystem 26 ausgabeseitige Kombinationslogik beinhaltet, kann der Compiler 16 ein Layout für die Lanes 82 bestimmen, um zusätzliche Nachbarn aufzunehmen. Ein Beispiel für ein solches Layout ist in 71 dargestellt. Insbesondere beinhaltet 71 ein Layout 364 mit einem Ring, der die Lanes 0-15 verbindet, zwei Teilringen, die die Lanes 0-7 und die Lanes 8-15 verbinden, und einem ausgabeseitigen Addierer, der Ergebnisse der Lanes 7 und 15 sammelt. Dementsprechend ist dem Compiler 16 die ausgewählte Konnektivität zwischen den Lanes 82 und der ausgabeseitigen Logik, falls vorhanden, bekannt. Des Weiteren kann der Compiler 16, nachdem er eine Lane ausgewählt hat und ein logisches Konnektivitätsmuster für ein Programm (z.B. Quellcode, der durch einen Entwickler erzeugt wird) ausgegeben hat, eine simulierte Annealing-Suche ausführen, um den physischen Abstand zwischen Elementen zu minimieren und diese Platzierungslösung (die z.B. in einem Vektorverarbeitungssystem 26 zu verwenden ist, das auf der IC-Einrichtung 12 implementiert werden soll) aufzuzeichnen.
  • Der Compiler 16 kann auch Latenzen annehmen, die mit Schalttechnik assoziiert sind, die in einer Lane 82 enthalten ist oder dieser zugeordnet ist. Wenn zum Beispiel unter Bezugnahme auf 72 ein Befehl zum Hinzufügen von Werten, die aus Registern in den Speicherblöcken 252 gespeichert sind, durchgeführt wird und das Ergebnis zurück in einen der Speicherblöcke 252 geschrieben wird, kann dies neun Taktzyklen in Anspruch nehmen: drei Taktzyklen für die Werte, die aus den Speicherblöcken 252 gelesen und durch diese weitergeleitet werden sollen, vier Taktzyklen zur Addition, die in dem DSP-Block 334 stattfinden und durch diese weitergeleitet werden soll, einen Taktzyklus zur Weiterleitung der Ausgabe des Ergebnisses an den Multiplexer 366, und einen Taktzyklus, um das Ergebnis in einen der Speicherblöcke 252 zu schreiben. Da dementsprechend unterschiedliche Operationen durchgeführt werden, wenn der Befehl ausgeführt wird, können verschiedene Schaltungen für mehrere Taktzyklen inaktiv sein. Um die Dauer der Inaktivität zu verringern, kann der Compiler 16 zum Beispiel mehrere Befehle injizieren, so dass Register der Speicherblöcke 252 für einen Befehl gelesen werden, während der DSP-Block 334 zuvor gelesene Werte bearbeitet, die mit einem anderen Befehl verbunden sind.
  • Wenn jedoch mehrere Befehle ausgeführt werden sollen, können, wie vorstehend besprochen, Gefahren (z.B. Lese-nach-Schreib-, Schreib-nach-Lese- und Schreib-nach-Schreib-Risiken) auftreten. Der Compiler 16 kann das Vorhandensein von Gefahren bestimmen, wenn Quellcode kompiliert wird, und bewirken, dass die Gefahren aufgelöst werden. Zum Beispiel kann der Compiler 16 einen Entwurf erzeugen, der einen Pipeline-Stopp ausführt, Anweisungen umordnen, so dass Vektorelemente, die nicht mit der Gefahr verbunden sind, während der Zeit, in der eine Gefahr besteht, bearbeitet werden können, oder eine Kombination beider Methoden. Zum Beispiel kann der Compiler 16 durchzuführende Operationen identifizieren, die einen Teil der Zeit füllen, in der eine Gefährdung vorhanden ist, und für den Rest der Zeit verzögern (z.B. bis die Bedingung, die die Gefährdung verursacht, nicht mehr vorhanden ist). Des Weiteren kann, wie vorstehend angemerkt, die Steuerlogik (z.B. die Steuerlogik 83) genutzt werden, um Verzögerungen zum Handhaben von Gefahren einzuführen.
  • Der Compiler 16 kann auch die Zeitsteuerung von Lane-internen Operationen berücksichtigen, um die Menge an Schalttechnik in dem Vektorverarbeitungssystem 26, die inaktiv ist, zu reduzieren, wodurch Hardware-Implementierungen mit reduzierten Latenzen bereitgestellt werden. Unter Bezugnahme auf 73 können acht Lanes 82 Ergebnisse (z.B. Produkte, Summen oder andere Werte, die durch Vektorverarbeitungseinheiten 66 bestimmt werden) durch Kombinationsschalttechnik 368 (z.B. Addierschalttechnik oder eine Boolesche Logikschaltungsanordnung) ausgeben, um eine endgültige Ausgabe zu erzeugen. Während die Ausgaben der Lanes 82 durch die Kombinationsschalttechnik 368 geleitet werden, können die Lanes 82 sofort mit der nächsten Operation fortfahren. Zum Beispiel könnten die Lanes 82 in jedem Taktzyklus ein Array von acht Multiplikationsergebnissen produzieren. Dementsprechend können die Lanes 82 konstant Anweisungen ausführen.
  • Falls Lanes 82 als weiteres Beispiel in einer Ringstruktur angeordnet sind (z.B. wie in 70B gezeigt), stellt eine Reduktionsoperation eine relativ größere Planungsschwierigkeit als das oben mit Bezug auf 73 besprochene Beispiel dar. Während zum Beispiel jede Lane 82 ihre Vektorelemente zur gleichen Zeit für die Reduktion liefert, dauert es einige Zeit, bis das Ergebnis von einer ersten Lane 82 durch Registerdateien und DSP-Blöcke 334 hindurch durch die Kette die letzte Lane erreicht, auf der das volle Ergebnis verfügbar ist. Sobald jedoch eine Lane 82 ein Ergebnis liefert, befindet sich dieses Ergebnis in der Pipeline und die Lane 82 ist frei, irgendeine andere Aktivität durchzuführen (z.B. eine Operation, die mit einer anderen Anweisung assoziiert ist).
  • Aufbauend auf diesem Beispiel kann die Zeitsteuerung der Ausführung eines Befehls über die Lanes 82 hinweg gestaffelt sein, so dass die Lanes 82 Daten mit relativ kurzen inaktiven Zeiträumen verarbeiten. Wie nachstehend in Tabelle 7 gezeigt, können drei Lanes (Lane 0, Lane 1, Lane 2) beginnen, Operationen (z.B. als Teil des Ausführens einer Anweisung) zu versetzten Zeiten (z.B. zehn Taktzyklen voneinander entfernt) durchzuführen. Zwar gibt es eine gewisse inaktive Zeit (z.B. in den Lanes 1 und 2), sobald jedoch eine Lane den Betrieb aufgenommen hat, gibt es möglicherweise keine inaktive Zeit mehr. Tabelle 7
    Zeit Lane 0 Lane 1 Lane 2
    0 Abruf r[1] Speich[16]
    1 Abruf r[2] Speich[17]
    2 Abruf r[3] Speich[18]
    3 Abruf r[4] Speich[19]
    4 Abruf r[5] Speich[20]
    5 Abruf r[6] Speich[21]
    6 Abruf r[7] Speich[22]
    7 Abruf r[8] Speich[23]
    8 Abruf r[9] Speich[24]
    9 Abruf r[10] Speich[25]
    10 Abruf r[11] Speich[26] Abruf r[1] Speich[16]
    11 Abruf r[12] Speich[27] Abruf r[2] Speich[17]
    12 Abruf r[13] Speich[28] Abruf r[3] Speich[18]
    13 Abruf r[14] Speich[29] Abruf r[4] Speich[19]
    14 Abruf r[15] Speich[30] Abruf r[5] Speich[20]
    15 Abruf r[16] Speich[31] Abruf r[6] Speich[21]
    16 Abruf r[17] Speich[48] Abruf r[7] Speich[22]
    17 Abruf r[18] Speich[49] Abruf r[8] Speich[23]
    18 Abruf r[19] Speich[50] Abruf r[9] Speich[24]
    19 Abruf r[20] Speich[51] Abruf r[10] Speich[25]
    20 Abruf r[21] Speich[52] Abruf r[11] Speich[26] Abruf r[1] Speich[16]
    21 Abruf r[22] Speich[53] Abruf r[12] Speich[27] Abruf r[2] Speich[17]
    22 Abruf r[23] Speich[54] Abruf r[13] Speich[28] Abruf r[3] Speich[18]
    23 Abruf r[24] Speich[55] Abruf r[14] Speich[29] Abruf r[4] Speich[19]
    24 Abruf r[25] Speich[56] Abruf r[15] Speich[30] Abruf r[5] Speich[20]
  • Ähnlich zeigt Tabelle 8 Aktivität im Rahmen von Reduktionsoperationen auf den Lanes 0, 1 und 2. Insbesondere beendet Lane 0 eine Reihe von Gleitkomma-Multiplikationsoperationen, schreibt die Ergebnisse zurück, führt zwei Reduktionsoperationen und dann eine Reihe von Gleitkomma-Additionsoperationen durch. Manche Aktivitäten sind gleichzeitig und verwenden unterschiedliche Teile des Datenpfads. Zum Beispiel startet Lane 0 zur Zeit 0 (in Tabelle 7 gezeigt) eine Gleitkommaaddition der Register [16] und [48], schreibt letztendlich in Register [90] und schreibt ein Reduktionsergebnis in Register [80]. Der zugehörige Schreibvorgang des Registers [90] erfolgt mehrere Zyklen später zum Zeitpunkt 85, wenn die Addition abgeschlossen ist. Die nächste Lane, d.h. Lane 1, ist immer noch dabei, die vorherige Multiplikation abzuschließen, wenn Lane 0 die erste Reduktion startet (z.B. zum Zeitpunkt 71). Wenn Lane 1 beginnt, eine Reduktion zur Zeit 81 durchzuführen, sind die partiellen Reduktionsergebnisse von Lane 0 sofort verfügbar, weil die Ergebnisse zur Zeit 79 in das Register [80] geschrieben wurden. Tabelle 8
    Zeit Lane 0 Lane 1 Lane 2
    62 fmul rd[74] ra[15] rb[31] wr[68] fmul rd[64] ra[5] rb[21] wr[54] fadd [50] ra[11] rb[27] wr[44]
    63 fmul rd[75] ra[16] rb[32] wr[69] fmul rd[65] ra[6] rb[22] wr[55] fadd [51] ra[12] rb[28] wr[45]
    64 wr[70] fmul rd[66] ra[7] rb[23] wr[60] fadd [52] ra[13] rb[29] wr[46]
    65 wr[71] fmul rd[67] ra[8] rb[24] wr[61] fadd [53] ra[14] rb[30] wr[47]
    66 wr[72] fmul rd[68] ra[9] rb[25] wr[62] fadd [54] ra[15] rb[31] wr[48]
    67 wr[73] fmul rd[69] ra[10] rb[26] wr[63] fadd [55] ra[16] rb[32] wr[49]
    68 wr[74] fmul rd[70] ra[11] rb[27] wr[64] fmul rd[60] ra[1] rb[17] wr[50]
    69 wr[75] fmul rd[71] ra[12] rb[28] wr[65] fmul rd[61] ra[2] rb[18] wr[51]
    70 fmul rd[72] ra[13] rb[29] wr[66] fmul rd[62] ra[3] rb[19] wr[52]
    71 rd[80] ra[1] fmul rd[73] ra[14] rb[30] wr[67] fmul rd[63] ra[4] rb[20] wr[53]
    72 fmul rd[74] ra[15] rb[31] wr[68] fmul rd[64] ra[5] rb[21] wr[54]
    73 fmul rd[75] ra[16] rb[32] wr[69] fmul rd[65] ra[6] rb[22] wr[55]
    74 wr[70] fmul rd[66] ra[7] rb[23] wr[60]
    75 rd[81] ra[2] wr[71] fmul rd[67] ra[8] rb[24] wr[61]
    76 wr[72] fmul rd[68] ra[9] rb[25] wr[62]
    77 wr[73] fmul rd[69] ra[10] rb[26] wr[63]
    78 wr[74] fmul rd[70] ra[11] rb[27] wr[64]
    79 fadd rd[90] ra[40] rb [17] wr[80] wr[75] fmul rd[71] ra[12] rb[28] wr[65]
    80 fadd rd[91] ra[41] rb [18] fmul rd[72] ra[13] rb[29] wr[66]
    81 fadd rd[90] ra[42] rb [19] rd[80] ra[1] fmul rd[73] ra[14] rb[30] wr[67]
    82 fadd rd[90] ra[43] rb [20] fmul rd[74] ra[15] rb[31] wr[68]
    83 fadd rd[90] ra[44] rb [21] wr[81] fmul rd[75] ra[16] rb[32] wr[69]
    84 fadd rd[90] ra[45] rb [22] wr[70]
    85 fadd rd[96] ra[46] rb [23] wr[90] rd[81] ra[2] wr[71]
    86 fadd rd[97] ra[47] rb [24] wr[91] wr[72]
    87 fadd rd[98] ra[48] rb [25] wr[92] wr[73]
  • Vor dem Hintergrund der vorstehenden Diskussion bezüglich des Compilers 16 kehrt die Diskussion nun zu dem Compiler 16 mit erzeugten angepassten Vektorprozessorsystemen 26 zurück. Zum Beispiel kann der Compiler 16 eine Hardwarebeschreibung für ein Programm erzeugen (z.B. Quellcode, der durch einen Entwickler bereitgestellt wird), der ein Vektorverarbeitungssystem 26 (oder Teile davon) beinhaltet, das der IC-Einrichtung 12 bereitgestellt werden kann, um zu bewirken, dass die IC-Einrichtung 12 das Vektorverarbeitungssystem 26 physisch implementiert, wie (z.B. in einer Programmiersprache niedriger Ebene) durch den Compiler 16 beschrieben.
  • Angesichts der Flexibilität von FPGAs gibt es viele potenzielle Gestaltungen von Vektorverarbeitungssystemen 26, die in der Lage sein können, Operationen durchzuführen, die in einem Programm beschrieben sind, das durch einen Entwickler geschrieben wird. Der Compiler 16 kann aus einem Menü von Prozessorzielen auswählen (wobei es sich nicht unbedingt um denselben Prozessor handelt, der auch den Compiler 16 ausführt). Wenn ein Vektorprozessor (z.B. Vektorverarbeitungssystem 26) auf einem FPGA implementiert wird, kann das Ziel bekannt sein (z.B. Kompilieren eines neuen Programms für einen existierenden Weichprozessor) oder offen zur Definition für ein neues Programm oder einen Satz von Programmen.
  • Die Gestaltung von Vektorprozessorsystemen 26 kann entweder durch den Benutzer vorgegeben werden (z.B. basierend auf einem gewünschtem Kompromiss zwischen Schalttechnikaufwand und Fähigkeiten) oder durch einen oder mehrere Faktoren, die durch den Compiler 16 ausgewählt werden. In letzterem Fall stellt der Benutzer das gewünschte Programm (z.B. Quellcode) bereit und der Compiler 16 erzeugt Vektorprozessoren (z.B. mehrere Gestaltungen von Vektorverarbeitungssystemen 26) mit einer Vielzahl von Rechenelementen. Jeder Entwurf hätte einen bekannten Schaltungsaufwand. Des Weiteren kann der Benutzer auch Informationen (z.B. über die Designsoftware 14) bezüglich beliebiger Anforderungen bereitstellen, die der Benutzer erfüllen möchte (z.B. eine minimale Verarbeitungsgeschwindigkeit, eine maximale physische Fläche der IC-Einrichtung 12, die das Vektorverarbeitungssystem 26 einnehmen kann, wenn es auf der IC-Einrichtung 12 implementiert ist). Der Benutzer kann auch Anleitung basierend auf Empfindlichkeit gegenüber Schaltkreisfläche versus Leistungsfähigkeit bereitstellen. Nach dem Simulieren der verfügbaren Optionen gibt der Compiler 16 eine Implementierung des Vektorverarbeitungssystems 26 (oder einen Teil davon, wie etwa Lanes 82), die der Erfüllung der Benutzeranfrage am nächsten sind, und einen Anweisungscode, der das Programm für den Zielrechenknoten implementiert, aus.
  • Der Compiler 16 kann ermöglichen, dass Hardware für intrinsische Operationen (z.B. unter Verwendung von Weichlogik) auf einem FPGA implementiert wird. Allgemein gesprochen ist eine intrinsische Operation komplexer als routinemäßigere Operationen, wie etwa Additions-, Multiplikations- und Vergleichsoperationen. Unter Verwendung der Designsoftware 14 kann ein Benutzer (z.B. Entwickler) zu einem Weichverarbeitungselement mit einer spezifischen intrinsischen Fähigkeit hinzufügen. Ein Programm (z.B. Quellcode) kann erfordern, dass die intrinsische Operation durchgeführt wird, und der Compiler 16 kann das Weichverarbeitungselement in einer Gestaltung einer Hardware-Implementierung zum Durchführen des Programms nutzen. Genauer gesagt kann der Compiler 16 eine ausführliche Kenntnis der Zielhardware beibehalten, die zum Implementieren der intrinsischen Operation verwendet wird. Zusätzlich kann der Compiler 16 behalten, welche Fähigkeiten nativ verfügbar sind und welche Implementieren über eine längere Sequenz einfacher Operationen erfordern. Beispielsweise kann der Compiler 16 eine eingebaute Datenbank intrinsischer Optionen nutzen (z.B. eingebaut in die Designsoftware 14). Der Compiler 16 kann zudem bestimmen, welche intrinsischen Operationen nicht verwendet werden oder nicht häufig genug verwendet werden, um eine Aufwandsfunktion zu erfüllen, und entsprechende Hardware-Implementierungen für solche intrinsischen Operationen sind möglicherweise nicht in der Gestaltung enthalten, die durch den Compiler 16 erzeugt wird.
  • Als ein Beispiel kann eine intrinsische Funktion sin(x) sein, das mit unterschiedlichen Zahlenformaten arbeitet. Wenn der Compiler 16 das Softwareprogramm (z.B. Quellcode) liest, kann der Compiler 16 die Aufrufe zu der sin(x)-Operation tabellieren. Falls der Compiler 16 bestimmt (z.B. basierend auf einer Aufwandsfunktion), dass eine relativ kleine Anzahl von Aufrufen an die sin(x)-Operation vorliegt, kann der Compiler 16 wählen, eine äquivalente mehrstufige Software-Operation zu verwenden, um Schalttechnik zum Durchführen der sin(x)-Operation bereitzustellen. Falls der Compiler 16 jedoch bestimmt, dass Hardware, die speziell zum Durchführen der sin(x)-Funktion zugeschnitten ist, nützlich wäre (z.B. basierend auf der Aufwandsfunktion), kann der Compiler 16 auf die in der Datenbank gespeicherte Schaltungsimplementierung verweisen und die Schaltungsimplementierung in dem Verilog-RTL einer oder mehrerer Lanes 82 des Vektorverarbeitungssystems 26 installieren, die auf der IC-Einrichtung 12 implementiert werden sollen. Selbst wenn der Quellcode anfordert, dass spezifische Hardware genutzt werden soll (z.B. um eine intrinsische Operation durchzuführen), kann der Compiler 16 dementsprechend bestimmen (z.B. unter Verwendung von Aufwandskalkulation), ob die Hardware in das Design einer oder mehrerer Lanes 82 aufgenommen werden soll oder andere Schalttechnik (z.B. DSP-Blöcke 334) verwendet werden soll, um die Operation durchzuführen. Wie zum Beispiel in 74 gezeigt, beinhaltet eine erste Implementierung 370A einer Lane 82 keine Hardware, die für eine intrinsische Operation (z.B. sin(x)) spezifisch ist, wohingegen eine zweite Implementierung der Lane 82 eine Sinusschalttechnik 372 beinhaltet, die zum Durchführen intrinsischer sin(x)-Operationen verwendet werden kann. Die zweite Implementierung 370B beinhaltet zudem einen Multiplexer 374, der verwendet wird, um auszuwählen, ob die Ausgabe der Lane 82 ein durch den DSP-Block 334 erzeugter Wert oder ein durch die Sinusschalttechnik 372 erzeugter Wert sein wird.
  • Zusätzlich kann der Compiler 16 auch Lane-Datenpfade optimieren. Insbesondere kann es mehrere Möglichkeiten geben, die Verbindung von Elementen innerhalb einer Lane 82 anzuordnen. Zum Beispiel kann es funktional wichtig sein, dass eine Lane 82 einen Wert von der benachbarten Lane 82 sammeln kann, aber es kann mehrere Eintrittspunkte geben, die ausreichend sind. Zum Beispiel ist in 75A eine Lane-Verbindung 85A zwischen der Lane 82P und einer anderen Lane mit einem 4:1-Multiplexer 346A gekoppelt. Daten, die von einer anderen Lane 82 empfangen werden, können in eine Registerdatei eingehen, die auf einem oder mehreren Speicherblöcken 252 geführt wird, und die Daten stehen grundsätzlich über die Speicherblöcke 252 zur Verwendung durch den DSP-Block 334 zur Verfügung. In 75B koppelt die Lane-Verbindung 85B der Lane 82Q eine andere Lane 82 kommunikativ mit einem 2:1-Multiplexer 376, der in der Lane 82Q enthalten ist, was es dem DSP-Block 334 ermöglichen kann, Daten von der anderen Lane 82 schneller (relativ zu Lane 82P) zu empfangen. Nachdem der DSP-Block 334 einen Wert von einer anderen Lane 82 über den Multiplexer 376 empfangen hat, kann der Wert in einer Berechnung verwendet werden oder, falls gewünscht, mit Eins multipliziert und zu einer Registerdatei zurückgegeben werden, die auf einem der Speicherblöcke 252 geführt wird, wodurch der Wert allgemein für zukünftige Verwendung verfügbar gemacht wird. Nachdem er zum Beispiel mit Eins multipliziert wurde, kann der Wert an einen 3:1-Multiplexer 378 geliefert werden, der den Wert an die Speicherblöcke 252 liefern kann.
  • Der Compiler 16 kann in Abhängigkeit von dem ausgeführten Programm bestimmen, welche der Lanes 82P, 82Q überlegen ist. Das heißt, während entweder das Muster (z.B. die Lane 82P und die Lane 82Q) ausreicht, um viele Programme zu implementieren, werden die Lane 82P oder die Lane 82Q eine überlegene Ausführungszeit für ein gegebenes Programm aufweisen. Der Compiler 16 kann die unterschiedlichen Optionen zum Einrichten eines Datenflusses zwischen den Lanes 82 simulieren und eine auswählen, die Aufwandsfunktionen oder durch einen Benutzer bereitgestellte Einschränkungen für einen beliebigen Kompromiss zwischen Schaltungsgröße und Leistungsfähigkeit am besten erfüllt.
  • Unter Berücksichtigung des Vorstehenden wird nun behandelt, wie der Compiler 16 beim Kompilieren Lane-Elemente (z.B. Multiplexer, Routing-Schalttechnik, DSP-Blöcke, Speicherblöcke) auswählen kann. In vielen Fällen können Lane-Elemente miteinander identisch sein, was bedeutet, dass eine Lane 82 entworfen wurde, wobei die Gestaltung der Lane für andere Lanes 82 verwendet werden kann. Durch das Durchführen von Kompilieren auf diese Weise kann der Compiler 16 Quellcode effizienter kompilieren und Anweisungen für Hardware-Implementierungen des Vektorverarbeitungssystems 26 erzeugen.
  • 76 ist ein Flussdiagramm eines Prozesses 380 zum Kompilieren von Quellcode. Insbesondere beschreibt der Prozess 380, wie der Compiler 16 (alleine oder in Verbindung mit der Designsoftware 14) Lanes entwerfen und platzieren kann, wenn eine Gestaltung zum Implementieren von Hardware auf der IC-Einrichtung 12 bestimmt wird, um ein Programm oder einen Algorithmus auszuführen, das/der Quellcode beschreibt. Des Weiteren ist anzumerken, dass der Compiler 16 den Prozess 380 (oder Teile davon) durchführen kann, wenn er den vorstehend besprochenen Prozess 310 durchführt.
  • Bei Prozessblock 382 bestimmt der Compiler 16 eine Konfiguration für eine einzelne Lane 82 und erzeugt eine Hardwarebeschreibung niedriger Ebene (z.B. in Verilog) der Lane 82. Wie vorstehend besprochen, kann der Compiler 16, wenn er eine Konfiguration für eine Lane 82 bestimmt, mögliche Gestaltungen basierend auf einem Aufwandskalkulationsprogramm und benutzerangegebenen Einschränkungen evaluieren. Der Compiler 16 kann auch bestimmen, ob Hardware, die für eine intrinsische Funktion spezifisch ist, in der Lane 82 enthalten sein soll.
  • Bei Prozessblock 384 erzeugt der Compiler 16 Kompilationseinschränkungen für eine Region auf der IC-Einrichtung 12, die groß genug ist, um die Lane 82 zu beinhalten. Falls die Größe nicht vollständig bekannt ist, nutzt der Compiler 16 die Designsoftware 14, um eine Analyse der durch die Hardwarebeschreibung niedriger Ebene beschriebenen Schalttechnik durchzuführen. Zudem kann der Compiler 16 die Größe der Region basierend auf der Analyse erhöhen oder verringern.
  • Bei Prozessblock 386 bestimmt der Compiler 16 eine Platzierung für die Lane 82 sowie Routing-Schalttechnik für die Lane 82. Der Compiler 16 kann den Prozessblock 386 unter Verwendung der Designsoftware 14 durchführen.
  • Bei Prozessblock 388 erzeugt der Compiler 16 eine Hardwarebeschreibung niedriger Ebene für ein Array von Lanes 82 (z.B. basierend auf der bei Prozessblock 382 erzeugten Hardwarebeschreibung). Das Array von Lanes 82 kann auch eine Beschreibung beinhalten, wie die Lanes 82 des Arrays miteinander verbunden sind.
  • Bei Prozessblock 390 erzeugt der Compiler 16 Ortsbeschränkungen für das Array von Lanes 82 basierend auf der Platzierung und dem Routing, die bei Prozessblock 386 bestimmt wurden. Insbesondere kann der Compiler 16 die ausführliche Platzierung, die für die einzelne Lane erhalten wird, wiederverwenden, wodurch die Verarbeitungszeit, die mit dem Rückableiten dieser Informationen verbunden ist, an jedem Ort gespeichert wird.
  • Bei Prozessblock 392 bestimmt der Compiler 16 Platzierungs- und Routing-Informationen für eine vollständige Implementierung des Arrays von Lanes. Mit anderen Worten kann der Compiler 16 bestimmen, wo jede Lane 82 in dem Array von Lanes platziert werden sollte, sowie die Routing-Informationen für das Array von Lanes 82. Zum Beispiel kann der Compiler 16, der auch Routing-Informationen für andere Teile der IC-Einrichtung 12 bestimmen kann (z.B. bezüglich Platzierung eines Network-on-Chip (NoC)), bestimmen, dass einer oder mehreren Lanes 82 mehr Routing-Schalttechnik bereitgestellt werden sollte, um einen größeren Zugang zu einem NoC bereitzustellen (z.B. um der Lane 82 zu ermöglichen, schneller auf Daten zuzugreifen). Der Compiler 16 kann den Prozessblock 392 unter Verwendung der Designsoftware 14 durchführen.
  • Bei Prozessblock 394 kann der Compiler 16 maschinenlesbare Anweisungen (z.B. einen Bitstrom) erzeugen und die maschinenlesbaren Anweisungen an die IC-Einrichtung 12 liefern, um zu bewirken, dass die Hardware-Implementierungen, die durch den Compiler 16 bestimmt werden, auf der IC-Einrichtung 12 implementiert werden. Mit anderen Worten kann eine Hardwarebeschreibung des Arrays von Lanes 82 an die IC-Einrichtung 12 geliefert werden, um zu bewirken, dass das Array von Lanes 82 auf der IC-Einrichtung 12 implementiert wird.
  • Unterstützung für externe E/As
  • IC-Einrichtungen, einschließlich programmierbarer Logikeinrichtungen (z.B. FPGAs), bieten E/A-Schalttechnik an, die ermöglicht, dass die IC-Einrichtungen mit anderen Einrichtungen kommunizieren, mit denen die IC-Einrichtungen kommunikativ gekoppelt sind. Zum Beispiel kann die IC-Einrichtung 12 mit reichhaltigen Optionen, wie etwa Ethernet-E/A-Schalttechnik, PCIe-E/A-Schalttechnik, Coherent-Link-to-Host- (CXL-) E/A-Schalttechnik, Sendeempfänger- und andere E/A-Schalttechnik (z.B. Hochfrequenzschalttechnik und Optikschalttechnik), beinhalten. Diese E/As können integriert sein (z.B. als E/As auf der IC-Einrichtung 12, als In-Package-Chiplets, die mit der IC-Einrichtung verbunden sind (z.B. über eine 2,5D-Siliciumbrücke). Zudem kann bei FPGAs die feine räumliche FPGA-Rekonfigurierbarkeit in sehr optimaler Weise mit E/As interagieren, um Aktionen in jedem Zyklus für jedes Bit zu optimieren. Dementsprechend kann die IC-Einrichtung 12 eine präzise Steuerung auf Bitebene und Zyklusebene bereitstellen (z.B. im Gegensatz zu einer CPU, die auf Befehlsebene arbeiten würde).
  • 77 ist ein Blockdiagramm des Vektorverarbeitungssystems 26B, das Datenpfade 396 (z.B. Datenpfade 396A, 396B, 396C) beinhaltet, die durch das Vektorverarbeitungssystem 26B genutzt werden können. Insbesondere bietet das hier beschriebene Vektorprozessorsystem 26B neuartige Unterstützungen für optimierte Interaktion und Verarbeitung von E/A, die eine verbesserte E/A-Leistungsfähigkeit (z.B. niedrige Latenz, hohe Bandbreitennutzung) ermöglichen können. Zum Beispiel kann die ISA, die mit den Vektorverarbeitungssystemen 26 assoziiert ist, Zustände für E/As, E/A-Register (z.B. um die Zustände von E/As zu speichern) und einen Satz von Anweisungen, die mit diesen Zuständen arbeiten können, unterstützen. Diese Anweisungen ermöglichen effiziente E/A-Interaktionen und Operationen, wie unter anderem direktes Berechnen aus E/A-Registern, Verschieben zwischen E/A-Registern und anderen Architekturzuständen (z.B. Vektorregistern) und Aktivieren eines Threads basierend auf E/A-Ereignissen (z.B. für Threads, die darauf warten, dass die Eingabe mit der Ausführung beginnt). Ein Beispiel für eine Anwendung, bei der solche Merkmale vorteilhaft sein können, sind KI-Anwendungen. Eingabevektoren, die über Ethernet-Eingangsports empfangen werden, können beispielsweise einen Programmthread aufwecken, der Berechnungen an den Eingabevektoren durchführt. Die Eingabevektoren können einer oder mehreren Vektorregisterdateien 81 (durch den Datenpfad 396B angegeben) bereitgestellt werden und eine oder mehrere Lanes 82 können Berechnungen an den Eingabevektoren durchführen (z.B. unter Verwendung von Vektorverarbeitungseinheiten 66). Nach der Berechnung können Ergebnisse direkt in einen E/A-Puffer geschrieben werden, um über Ethernet, das durch den Datenpfad 396 C angegeben wird, ausgesendet zu werden. Somit reduzieren die Aufweck- und Direkt-E/A-Datenverschiebungen eine „Buchhaltung“ und einen Datenverschiebungs-Overhead, wodurch die Latenz verbessert wird.
  • Vorliegend beschriebene Vektorverarbeitungssysteme 26, wie etwa das Vektorverarbeitungssystem 26B, können direkte Pfade von E/As zu und von Registerdateien und Funktionseinheiten verwenden. Zum Beispiel kann die E/A-Einheit 89 eine E/A-Registerdatei pflegen und die vorstehend erwähnten Verschiebungsbefehle unterstützen, um empfangene oder ausgegebene Werte zu und von Vektorregisterdateien 81 und Skalarregisterdateien (die Skalarregister 62 beinhalten) zu verschieben. Die E/A-Einheit kann auch das Speichern von Daten in der E/A-Registerdatei umgehen und direkt in die Vektorregisterdatei 81 schreiben. Die Architektur für die E/A-Einheit 89 kann auch Datenpfade (z.B. Datenpfad 396A) zu anderen Einheiten (z.B. das Frontend-Teilsystem 76) beinhalten, um die vorstehend angegebenen Aufweckereignisse zu ermöglichen. Des Weiteren ermöglichen die direkten Rückschreibpfade von den Vektorberechnungseinheiten 80 und/oder der Vektorspeichereinheit 88 zu E/A, dass das Vektorverarbeitungssystem 26 effizienter Daten aus dem Vektorverarbeitungssystem sendet (z.B. über Ethernet).
  • Des Weiteren bieten die Vektorverarbeitungssysteme 26 Unterstützung für In-Line-Operationen, während sich E/A-Daten durch die Vektorprozessorsysteme 26 bewegen. Eine solche In-Line-Operation kann die Latenz reduzieren und eine effizientere Nutzung verfügbarer E/A-Bandbreite ermöglichen (z.B. durch Reduzieren fragmentierter Daten durch In-Line-Packoperationen). Um zum Beispiel einen In-Line-Betrieb zu ermöglichen, unterstützt die ISA Anweisungen für In-Line-E/A-Berechnungen, wie etwa In-Line-Komprimierungs-, Codierungs-, Decodierungs-, Umwandlungs-, Pack-, Entpack- und Misch- oder Rotationsoperationen mit Eingabe- und Ausgabedaten. Die Hardware des Vektorverarbeitungssystems 26 kann Rechenlogik in der E/A-Einheit 89 beinhalten, um die In-Line-Operationen durchzuführen. Des Weiteren können angepasste In-Line-Operationen implementiert werden, insbesondere in einer Ausführungsform, in der das Vektorverarbeitungssystem 26 auf einer programmierbaren Logikeinrichtung, wie etwa einem FPGA, implementiert ist. Dementsprechend können Daten bearbeitet werden, während die Daten von einem Teil des Vektorverarbeitungssystems 26 zu einem anderen (z.B. zu oder von der E/A-Einheit 89) verschoben werden. Ein Beispielszenario, bei dem eine In-Line-Berechnung nützlich sein kann, sind verteilte KI-Operationen über mehrere Knoten, die auf einer All-Reduktionsberechnung beruhen, die große Kommunikationsaufkommen über mehrere Knoten nutzen kann. In diesem Fall kann eine In-Line-Komprimierung vor dem Senden von Ausgabedaten und nach dem Empfangen von Eingabedaten durchgeführt werden, um die Menge an Daten, die verschoben wird, zu reduzieren.
  • Dementsprechend ermöglichen die vorliegend offenbarten Methoden, dass eine Vektorverarbeitung an IC-Einrichtungen (z.B. programmierbare Logikeinrichtungen) auf eine Weise durchgeführt wird, die ermöglicht, dass die IC-Einrichtungen schneller trainiert werden, um Maschinenlern- und KI-Anwendungen durchzuführen. Durch Einbeziehen von Lanes 82 in Vektorverarbeitungseinheiten 66, die Berechnungen an empfangenen Daten durchführen, wird zum Beispiel die Menge an Operationen, die ein Vektorverarbeitungssystem 26 gleichzeitig durchführen kann, erhöht.
  • Unter Berücksichtigung des Vorstehenden kann die IC-Einrichtung 12 ein Teil eines Datenverarbeitungssystems sein oder kann eine Komponente eines Datenverarbeitungssystems sein, das von der Verwendung der hier besprochenen Methoden profitieren kann. Zum Beispiel kann die IC-Einrichtung 12 eine Komponente eines Datenverarbeitungssystems 400 sein, das in 78 gezeigt ist. Das Datenverarbeitungssystem 400 beinhaltet einen Host-Prozessor 402, einen Speicher und/oder Speicherschalttechnik 404 und eine Netzwerkschnittstelle 406. Das Datenverarbeitungssystem 400 kann mehr oder weniger Komponenten (z. B. eine elektronische Anzeige, Benutzeroberflächenstrukturen, anwendungsspezifische integrierte Schaltungen (ASICs)) beinhalten.
  • Der Host-Prozessor 402 kann einen beliebigen geeigneten Prozessor beinhalten, wie etwa einen INTEL® -XEON ® -Prozessor oder einen Prozessor mit reduziertem Befehlssatz (z.B. einen Computer mit reduziertem Befehlssatz (RISC), einen Advanced-RISC-Machine- (ARM-) Prozessor), der eine Datenverarbeitungsanfrage für das Datenverarbeitungssystem 400 verwalten kann (z.B. um maschinelles Lernen, Videoverarbeitung, Spracherkennung, Bilderkennung, Datenkompression, Bewertung von Datenbanksuchen, Bioinformatik, Netzwerksicherheitsmusteridentifikation, räumliche Navigation oder dergleichen durchzuführen). Die Arbeitsspeicher- und/oder Speicherschalttechnik 404 kann einen Direktzugriffspeicher (RAM), Nur-Lese-Speicher (ROM), eine oder mehrere Festplatten, einen Flash-Speicher oder dergleichen beinhalten. Die Arbeitsspeicher- und/oder Speicherschalttechnik 404 kann als externer Speicher zu der IC-Einrichtung 12 angesehen werden und kann Daten halten, die durch das Datenverarbeitungssystem 400 zu verarbeiten sind, und/oder kann intern zu der IC-Einrichtung 12 sein. In manchen Fällen kann die Arbeitsspeicher- und/oder Speicherschalttechnik 404 auch Konfigurationsprogramme (z.B. Bitstrom) zum Programmieren einer programmierbaren Struktur der IC-Einrichtung 12 speichern. Die Netzwerkschnittstelle 406 kann dem Datenverarbeitungssystem 400 ermöglichen, mit anderen elektronischen Einrichtungen zu kommunizieren. Das Datenverarbeitungssystem 400 kann mehrere unterschiedliche Packages beinhalten oder kann in einem einzigen Package auf einem einzigen Package-Substrat enthalten sein.
  • Bei einem Beispiel kann das Datenverarbeitungssystem 400 Teil eines Datenzentrums sein, das eine Vielfalt verschiedener Anfragen verarbeitet. Beispielsweise kann das Datenverarbeitungssystem 400 eine Datenverarbeitungsanfrage über die Netzwerkschnittstelle 406 empfangen, um Maschinenlernen, Videoverarbeitung, Spracherkennung, Bilderkennung, Datenkompression, Bewertung von Datenbanksuchen, Bioinformatik, Netzwerksicherheitsmusteridentifikation, räumliche Navigation oder eine andere spezialisierte Aufgabe durchzuführen. Der Host-Prozessor 402 kann bewirken, dass eine programmierbare Logikstruktur der IC-Einrichtung 12 mit einem speziellen Beschleuniger programmiert wird, der sich auf die angeforderte Aufgabe bezieht. Beispielsweise kann der Host-Prozessor 402 anweisen, dass Konfigurationsdaten (Bitstrom) auf der Arbeitsspeicher- und/oder Speicherschalttechnik 404 gespeichert oder in einem sektorausgerichteten Speicher der IC-Einrichtung 12 zwischengespeichert werden, um in die programmierbare Logikstruktur der IC-Einrichtung 12 programmiert zu werden. Die Konfigurationsdaten (der Bitstrom) können eine Schaltungskonstruktion für eine spezielle Beschleunigerfunktion repräsentieren, die für die angeforderte Aufgabe relevant ist.
  • Die Prozesse und Einrichtungen dieser Offenbarung können in eine beliebige geeignete Schaltung eingebunden sein. Zum Beispiel können die Prozesse und Einrichtungen in zahlreiche Arten von Einrichtungen integriert sein, wie etwa Mikroprozessoren oder andere integrierte Schaltungen. Beispielhafte integrierte Schaltungen beinhalten programmierbare Arraylogik (PAL), programmierbare Logikarrays (PLAs), frei programmierbare Logikarrays (FPLAs), elektrisch programmierbare Logikeinrichtungen (EPLDs), elektrisch löschbare programmierbare Logikeinrichtungen (EEPLDs), Logikzellenarrays (LCAs), frei programmierbare Gate Arrays (FPGAs), anwendungsspezifische Standardprodukte (ASSPs), anwendungsspezifische integrierte Schaltungen (ASICs) und Mikroprozessoren, um nur einige zu nennen.
  • Des Weiteren ist anzumerken, dass der Begriff „Kreuzschiene“, wie vorstehend verwendet (z.B. wenn die Kreuzschienenschalter 64A, 64B, die Kreuzschienenschalter 74A, 74B, der Kreuzschienenschalter 190 besprochen werden), auf eine andere Routing-Schalttechnik als eine Kreuzschiene verweisen kann, die eine volle Konnektivität zwischen jeder Quelle und jedem Ausgabeziel aufweist. Zum Beispiel kann, wie vorliegend verwendet, eine „Kreuzschiene“ ein Schaltnetzwerk sein oder andere Topologien als eine „vollständig verbundene Kreuzschiene“ nutzen,wie etwa eine geleerte Kreuzschiene, ein Clos-Netzwerk oder eine „unvollständige“ Kreuzschiene (z.B. ein Kreuzschienenschalter, der nicht dazu ausgelegt ist, jede mögliche Eingabe (z.B. jedes Vektorregister) mit jeder möglichen Ausgabe (z.B. einer Lane 82)) zu verbinden.
  • Zusätzlich werden hier beschriebene Datenformate beispielhaft bereitgestellt, wenn spezifische Merkmale der vorliegenden Anmeldung diskutiert werden. Das Vektorverarbeitungssystem 26 kann andere Datenformate als die oben beschriebenen nutzen, wie etwa unter anderem Gleitkommazahlen mit halber Genauigkeit und Gleitkommazahlen mit doppelter Genauigkeit.
  • Wenngleich die in der vorliegenden Offenbarung dargelegten Ausführungsformen möglicherweise verschiedenen Modifikationen und alternativen Formen unterliegen können, sind spezielle Ausführungsformen beispielhaft in den Zeichnungen gezeigt und hier ausführlich beschrieben worden. Es sollte jedoch verstanden werden, dass es nicht beabsichtigt ist, dass die Offenbarung auf die speziellen offenbarten Formen beschränkt ist. Die Offenbarung soll alle Modifikationen, Äquivalente und Alternativen abdecken, die innerhalb des Gedankens und Schutzumfangs der Offenbarung fallen, wie durch die folgenden angehängten Ansprüche definiert.
  • Des Weiteren können die hier beschriebenen Vektorverarbeitungssysteme 26 auf einer Vielzahl von elektronischen Schaltkreisen implementiert werden, wie etwa unter anderem IC-Einrichtungen, programmierbare Logikeinrichtungen, und Grafikverarbeitungseinheiten (GPUs), die eine Vielzahl von Ausführungsmodellen einsetzen können, wie etwa, ohne hierauf beschränkt zu sein, Einzelbefehl-Mehrfach-Threads (SIMT) und Einzelbefehl-Mehrfachdaten (SIMD).
  • Die hier präsentierten und beanspruchten Methoden werden auf materielle Objekte und konkrete Beispiele praktischer Natur bezogen und angewandt, die das vorliegende technische Gebiet nachweisbar verbessern und daher nicht abstrahiert, ungreifbar oder rein theoretisch sind. Falls am Ende dieser Beschreibung angehängte Ansprüche ein oder mehrere Elemente enthalten, die als „Mittel zum [Durchführen] [einer Funktion]...“ oder „Schritt zum [Durchführen] [einer Funktion]...“ bezeichnet sind, ist es ferner beabsichtigt, dass solche Elemente gemäß 35 U.S.C. 112(f) zu interpretieren sind. Jedoch ist es für beliebige Ansprüche, die auf eine andere Weise bezeichnete Elemente enthalten, beabsichtigt, dass solche Elemente nicht gemäß 35 U.S.C. 112(f) interpretiert werden.
  • Beispielhafte Ausführungsformen der Offenbarung
  • Die folgenden nummerierten Klauseln definieren bestimmte Ausführungsbeispiele der vorliegenden Offenbarung.
  • KLAUSEL 1.
  • IC-Einrichtung, die Folgendes umfasst:
    • eine Vielzahl von Vektorregistern, die konfigurierbar sind, um eine Vielzahl von Vektoren zu speichern;
    • Schalterschalttechnik, die kommunikativ mit der Vielzahl von Vektorregistern gekoppelt ist, wobei die Schalterschalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen; und
    • mehrere Vektorverarbeitungseinheiten, die kommunikativ mit der Schalterschalttechnik gekoppelt und konfigurierbar sind zum:
      • Empfangen des Teils der Vielzahl von Vektoren;
      • Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoreingaben beinhalten; und
      • Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  • KLAUSEL 2.
  • IC-Einrichtung nach Klausel 1, wobei die Schalterschalttechnik einen Kreuzschienenschalter umfasst.
  • KLAUSEL 3.
  • IC-Einrichtung nach Klausel 1, wobei die eine oder die mehreren Operationen eine Multiplikationsoperation, eine Additionsoperation oder eine Subtraktionsoperation umfassen.
  • KLAUSEL 4.
  • IC-Einrichtung nach Klausel 1, wobei die IC-Einrichtung eine programmierbare Logikeinrichtung umfasst.
  • KLAUSEL 5.
  • IC-Einrichtung nach Klausel 4, wobei die Vielzahl von Vektorverarbeitungseinheiten in Hartlogik der programmierbaren Logikeinrichtung implementiert ist.
  • KLAUSEL 6.
  • IC-Einrichtung nach Klausel 4, wobei die programmierbare Logikeinrichtung ein frei programmierbares Gate-Array (FPGA) umfasst.
  • KLAUSEL 7.
  • IC-Einrichtung nach Klausel 1, ferner umfassend einen DSP- (digital signal processing, digitale Signalverarbeitung) Block, wobei eine Vektorverarbeitungseinheit der Vielzahl von Vektorverarbeitungseinheiten unter Verwendung des DSP-Blocks implementiert ist.
  • KLAUSEL 8.
  • IC-Einrichtung nach Klausel 1, wobei eine erste Vektorverarbeitungseinheit der Vielzahl von Vektorverarbeitungseinheiten Folgendes umfasst:
    • ein Register, das konfigurierbar ist, um einen ersten Wert zu speichern;
    • einen Multiplexer, der konfigurierbar ist zum selektiven Ausgeben des ersten Werts aus dem Register oder eines zweiten Werts, der durch die erste Vektorverarbeitungseinheit empfangen wird; und
    • einen Multiplizierer, der konfigurierbar ist zum:
      • Empfangen des ersten Werts oder des zweiten Werts von dem Multiplexer;
      • Empfangen eines dritten Werts, und
      • Multiplizieren des von dem Multiplexer empfangenen Werts und des dritten Werts, um ein erstes Produkt zu erzeugen.
  • KLAUSEL 9.
  • IC-Einrichtung nach Klausel 8, wobei die erste Vektorverarbeitungseinheit eine zweite Schalterschalttechnik umfasst, die zu Folgendem konfigurierbar ist:
    • Empfangen des ersten Werts, des zweiten Werts und des dritten Werts;
    • Routen des ersten Werts zu dem Register;
    • Routen des zweiten Werts an den Multiplexer; und
    • Routen des dritten Werts an den Multiplizierer.
  • KLAUSEL 10.
  • IC-Einrichtung nach Klausel 8, wobei die erste Vektorverarbeitungseinheit einen Addierer umfasst, der zu Folgendem konfigurierbar ist:
    • Empfangen des ersten Produkts und eines vierten Werts, der durch die erste Vektorverarbeitungseinheit empfangen wird; und
    • Addieren des ersten Produkts und des vierten Werts, um eine erste Summe zu erzeugen.
  • KLAUSEL 11.
  • IC-Einrichtung nach Klausel 8, wobei die erste Vektorverarbeitungseinheit Folgendes umfasst:
    • ein zweites Register, das zum Speichern des ersten Produkts konfigurierbar ist; und
    • einen Addierer, der zu Folgendem konfigurierbar ist:
      • Empfangen des ersten Produkts aus dem zweiten Register;
      • Empfangen eines zweiten Produkts von dem Multiplizierer;
      • Addieren des ersten Produkts und des zweiten Produkts, um eine erste Summe zu erzeugen; und
      • Bereitstellen der ersten Summe an das zweite Register zur Speicherung.
  • KLAUSEL 12.
  • Vektorverarbeitungssystem, das Folgendes umfasst:
    • eine Vielzahl von Vektorregistern, die konfigurierbar sind, um eine Vielzahl von Vektoren zu speichern;
    • eine Schalterschalttechnik, die kommunikativ mit der Vielzahl von Registern gekoppelt ist, wobei die Schalterschalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen; und
    • eine Vielzahl von Vektorverarbeitungseinheiten, die kommunikativ mit der Schalterschalttechnik gekoppelt und zu Folgendem konfigurierbar ist:
      • Empfangen des Teils der Vielzahl von Vektoren;
      • Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoreingaben beinhalten; und
      • Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  • KLAUSEL 13.
  • Vektorverarbeitungssystem nach Klausel 12, wobei das Vektorverarbeitungssystem vollständig innerhalb einer einzigen IC-Einrichtung implementiert ist.
  • KLAUSEL 14.
  • Vektorverarbeitungssystem nach Klausel 13, wobei die IC-Einrichtung eine programmierbare Logikeinrichtung umfasst.
  • KLAUSEL 15.
  • Vektorverarbeitungssystem nach Klausel 14, wobei die programmierbare Logikeinrichtung ein frei programmierbares Gate-Array (FPGA) umfasst.
  • KLAUSEL 16.
  • Vektorverarbeitungssystem nach Klausel 12, wobei das Vektorverarbeitungssystem unter Verwendung von zwei IC-Einrichtungen implementiert ist, die auf einem einzigen Substrat angeordnet sind.
  • KLAUSEL 17.
  • Vektorverarbeitungssystem nach Klausel 16, wobei die zwei IC-Einrichtungen einen Prozessor und eine programmierbare Logikeinrichtung umfassen.
  • KLAUSEL 18.
  • Vektorverarbeitungssystem nach Klausel 17, wobei die programmierbare Logikeinrichtung ein frei programmierbares Gate-Array (FPGA) umfasst.
  • KLAUSEL 19.
  • Vektorverarbeitungssystem nach Klausel 12, wobei:
    • die Vielzahl von Vektorverarbeitungseinheiten eine erste Vektorverarbeitungseinheit umfasst, die eine erste Interconnect-Schalttechnik beinhaltet; und
    • die Vielzahl von Vektorverarbeitungseinheiten eine zweite Vektorverarbeitungseinheit umfassen, die eine zweite Interconnect-Schalttechnik beinhaltet.
  • KLAUSEL 20.
  • Vektorverarbeitungssystem nach Klausel 19, wobei die erste Vektorverarbeitungseinheit und die zweite Vektorverarbeitungseinheit über die erste Interconnect-Schalttechnik und die zweite Interconnect-Schalttechnik kommunikativ miteinander gekoppelt sind.
  • KLAUSEL 21.
  • Vektorverarbeitungssystem nach Klausel 20, wobei die zweite Vektorverarbeitungseinheit zu Folgendem konfigurierbar ist:
    • Empfangen einer Ausgabe von der ersten Vektorverarbeitungseinheit; und
    • Durchführen einer Operation, die die Ausgabe und einen Wert aus dem Teil der Vielzahl von Vektoren beinhaltet.
  • KLAUSEL 22.
  • Vektorverarbeitungssystem nach Klausel 21, wobei die Operation Addition oder Multiplikation umfasst.
  • KLAUSEL 23.
  • Vektorverarbeitungssystem nach Klausel 12, umfassend eine oder mehrere Skalarverarbeitungseinheiten, die konfigurierbar sind, um eine oder mehrere Operationen durchzuführen, die einen Skalar oder einen Teil des Skalars als Eingabe beinhalten.
  • KLAUSEL 24.
  • Vektorverarbeitungssystem nach Klausel 23, umfassend einen oder mehrere Skalarregister, die kommunikativ mit der einen oder den mehreren Skalarverarbeitungseinheiten gekoppelt sind und zum Speichern des Skalars konfigurierbar sind.
  • KLAUSEL 25.
  • Vektorverarbeitungssystem nach Klausel 24, wobei:
    • die eine oder die mehreren Skalarverarbeitungseinheiten auf einer ersten IC-Einrichtung implementiert sind; und
    • die Vielzahl von Vektorverarbeitungseinheiten auf einer zweiten IC-Einrichtung implementiert ist.
  • KLAUSEL 26.
  • Vektorverarbeitungssystem nach Klausel 25, wobei die erste IC-Einrichtung ein anderer Typ von IC-Einrichtung als die zweite IC-Einrichtung ist.
  • KLAUSEL 27.
  • Vektorverarbeitungssystem nach Klausel 26, wobei die erste IC-Einrichtung einen Prozessor umfasst und die zweite IC-Einrichtung eine programmierbare Logikeinrichtung umfasst.
  • KLAUSEL 28.
  • Vektorverarbeitungssystem nach Klausel 27, wobei die Vielzahl von Vektorverarbeitungseinheiten unter Verwendung eines oder mehrerer digitaler Signalverarbeitungs (DSP-) Blöcke der programmierbaren Logikeinrichtung implementiert sind.
  • KLAUSEL 29.
  • Vektorverarbeitungssystem nach Klausel 24, wobei die eine oder die mehreren Skalarverarbeitungseinheiten und die Vielzahl von Vektorverarbeitungseinheiten auf einer einzigen IC-Einrichtung implementiert sind.
  • KLAUSEL 30.
  • Vektorverarbeitungssystem nach Klausel 12, umfassend eine zweite Schalterschalttechnik, die zu Folgendem konfigurierbar ist:
    • Empfangen einer oder mehrerer Ausgaben von der Vielzahl von Vektorverarbeitungseinheiten; und
    • Routen jeder der einen oder der mehreren Ausgaben zu einem entsprechenden Vektorregister der Vielzahl von Vektorregistern.
  • KLAUSEL 31.
  • Vektorverarbeitungssystem nach Klausel 12, wobei die Vielzahl von Vektorregistern konfigurierbar ist, um mehrere Instanzen der Vielzahl von Vektoren zu speichern.
  • KLAUSEL 32.
  • Programmierbare Logikeinrichtung, umfassend:
    • eine Vielzahl von Vektorregistern, die konfigurierbar sind, um eine Vielzahl von Vektoren zu speichern;
    • eine Schalterschalttechnik, die kommunikativ mit der Vielzahl von Registern gekoppelt ist, wobei die Schalterschalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen; und
    • eine Vielzahl von Vektorverarbeitungseinheiten, die auf einem oder mehreren digitalen Signalverarbeitungs- (DSP-) Blöcken der programmierbaren Logikeinrichtung implementiert sind, wobei die Vielzahl von Vektorverarbeitungseinheiten kommunikativ mit der Schalterschalttechnik gekoppelt und zu Folgendem konfigurierbar ist:
      • Empfangen des Teils der Vielzahl von Vektoren;
      • Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoreingaben beinhalten; und
      • Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  • KLAUSEL 33.
  • Programmierbare Logikeinrichtung nach Klausel 32, umfassend eine oder mehrere Speicherbänke, die die Vielzahl von Vektoren speichern.
  • KLAUSEL 34.
  • Programmierbare Logikeinrichtung nach Klausel 33, umfassend Steuerschalttechnik, die zu Folgendem konfigurierbar ist:
    • Empfangen einer Anweisung zum Durchführen einer Operation, die den Teil der Vielzahl von Vektoren beinhaltet;
    • Veranlassen, dass der Teil der Vielzahl von Vektoren von der Vielzahl von Vektorregistern zu einer ersten Vektorverarbeitungseinheit der Vielzahl von Vektorverarbeitungseinheiten geroutet wird; und
    • Veranlassen, dass eine Ausgabe der ersten Vektorverarbeitungseinheit in die Vielzahl von Vektorregistern geschrieben wird.
  • KLAUSEL 35.
  • Programmierbare Logikeinrichtung nach Klausel 34, wobei die Operation eine Vektor-Vektor-Multiplikationsoperation umfasst.
  • KLAUSEL 36.
  • Programmierbare Logikeinrichtung nach Klausel 34, wobei die Operation eine Vektoradditionsoperation umfasst.
  • KLAUSEL 37.
  • Programmierbare Logikeinrichtung nach Klausel 34, wobei die Operation eine bedingte Operation ist.
  • KLAUSEL 38.
  • Programmierbare Logikeinrichtung nach Klausel 37, wobei die bedingte Operation eine Größer-als-, Kleiner-als- oder Gleich-Operation umfasst.
  • KLAUSEL 39.
  • Programmierbare Logikeinrichtung nach Klausel 34, umfassend eine Vielzahl von Flag-Registern, wobei die programmierbare Logikeinrichtung konfigurierbar ist, um zu bestimmen, ob eine Bedingung der bedingten Operation vorliegt, und in Reaktion auf das Bestimmen, dass die Bedingung vorliegt, ein Flag in der Vielzahl von Flag-Registern zu erzeugen.
  • KLAUSEL 40.
  • Programmierbare Logikeinrichtung nach Klausel 39, wobei die programmierbare Logikeinrichtung konfigurierbar ist zum Durchführen der Operation, Bestimmen, ob ein Flag, das der Operation entspricht, in der Vielzahl von Flag-Registern vorhanden ist, und Unterlassen des Schreibens eines Ergebnisses der Operation, das in die Vielzahl von Vektorregistern geschrieben werden soll, wenn das Flag, das der Operation entspricht, vorhanden ist.
  • KLAUSEL 41.
  • Programmierbare Logikeinrichtung nach Klausel 39, wobei die programmierbare Logikeinrichtung konfigurierbar ist, um zu bestimmen, ob das Flag vorhanden ist, bevor die Operation durchgeführt wird.
  • KLAUSEL 42.
  • Programmierbare Logikeinrichtung nach Klausel 33, wobei:
    • die Vielzahl von Vektorverarbeitungseinheiten eine erste Vektorverarbeitungseinheit und eine zweite Vektorverarbeitungseinheit umfasst;
    • die programmierbare Logikeinrichtung konfigurierbar ist zum Durchführen einer ersten Operation unter Verwendung der ersten Vektorverarbeitungseinheit; und
    • die programmierbare Logikeinrichtung konfigurierbar ist, um eine zweite Operation unter Verwendung der zweiten Vektorverarbeitungseinheit durchzuführen.
  • KLAUSEL 43.
  • Programmierbare Logikeinrichtung nach Klausel 42, wobei die zweite Operation von der ersten Operation abhängt.
  • KLAUSEL 44.
  • Programmierbare Logikeinrichtung nach Klausel 43, wobei die zweite Operation einen Vektor beinhaltet, der durch Ausführen der ersten Operation bestimmt wird.
  • KLAUSEL 45.
  • Programmierbare Logikeinrichtung nach Klausel 44, wobei die zweite Vektorverarbeitungseinheit dazu konfigurierbar ist, mit dem Durchführen der zweiten Operation zu beginnen, bevor die erste Vektorverarbeitungseinheit die erste Operation beendet.
  • KLAUSEL 46.
  • Programmierbare Logikeinrichtung nach Klausel 45, wobei die zweite Vektorverarbeitungseinheit unter Verwendung von Verkettung dazu konfigurierbar ist, mit dem Durchführen der zweiten Operation zu beginnen, bevor die erste Vektorverarbeitungseinheit die erste Operation beendet.
  • KLAUSEL 47.
  • Programmierbare Logikeinrichtung nach Klausel 33, wobei die programmierbare Logikeinrichtung Gefahrenerkennungsschalttechnik umfasst, die dazu konfigurierbar ist, zu bestimmen, ob ein Gefahrenzustand vorliegt.
  • KLAUSEL 48.
  • Programmierbare Logikeinrichtung nach Klausel 47, wobei die Gefahrenerkennungsschalttechnik dazu konfigurierbar ist, Lese-nach-Schreib-Gefahren, Schreib-nach-Lese-Gefahren und Schreib-nach-Schreib-Gefahren zu erkennen.
  • KLAUSEL 49.
  • Programmierbare Logikeinrichtung nach Klausel 48, wobei die Gefahrenerkennungsschalttechnik dazu konfigurierbar ist, eine Gefahr unter Verwendung von Verkettung aufzulösen.
  • KLAUSEL 50.
  • Programmierbare Logikeinrichtung nach Klausel 48, wobei die Gefahrenerkennungsschalttechnik dazu konfigurierbar ist, eine Gefahr unter Verwendung von Tailgating aufzulösen.
  • KLAUSEL 51.
  • Programmierbare Logikeinrichtung nach Klausel 32, umfassend eine oder mehrere Tensoreinheiten, die konfigurierbar sind, um Matrix-Matrix-Multiplikation, Matrix-Vektor-Multiplikation oder beides durchzuführen.
  • KLAUSEL 52.
  • Programmierbare Logikeinrichtung nach Klausel 51, wobei die eine oder die mehreren Tensoreinheiten Tensorblöcke umfassen, wobei jeder Tensorblock konfigurierbar ist, um einen ersten Wert zu speichern und sukzessive Multiplikationsoperationen durchzuführen, die den ersten Wert und die Vielzahl anderer Werte beinhalten.
  • KLAUSEL 53.
  • Programmierbare Logikeinrichtung nach Klausel 51, wobei die eine oder die mehreren Tensoreinheiten Folgendes umfassen:
    • eine erste Tensoreinheit, die konfigurierbar ist zum Durchführen eines ersten Teils mehrerer Operationen, die mit einem Befehl verbunden sind; und
    • eine zweite Tensoreinheit, die zum Durchführen eines zweiten Teils der Vielzahl von Operationen konfigurierbar ist.
  • KLAUSEL 54.
  • Programmierbare Logikeinrichtung nach Klausel 53, wobei die eine oder die mehreren Tensoreinheiten Folgendes umfassen:
    • eine dritte Tensoreinheit, die konfigurierbar ist zum Durchführen eines ersten Teils einer zweiten Vielzahl von Operationen, die mit einem zweiten Befehl verbunden sind; und
    • eine vierte Tensoreinheit, die zum Durchführen eines zweiten Teils der zweiten Vielzahl von Operationen konfigurierbar ist.
  • KLAUSEL 55.
  • Programmierbare Logikeinrichtung nach Klausel 53, wobei die eine oder die mehreren Tensoreinheiten Folgendes umfassen:
    • eine dritte Tensoreinheit, die zum Durchführen eines dritten Teils der Vielzahl von Operationen konfigurierbar ist; und
    • eine vierte Tensoreinheit, die zum Durchführen eines vierten Teils der Vielzahl von Operationen konfigurierbar ist.
  • KLAUSEL 56.
  • Compiler, der zu Folgendem konfigurierbar ist:
    • Empfangen von Quellcode für ein Programm, das durch eine programmierbare Logikeinrichtung durchzuführen ist;
    • Kompilieren des Quellcodes, wobei Kompilieren des Quellcodes Bestimmen einer Gestaltung für ein Vektorverarbeitungssystem umfasst, das auf der programmierbaren Logikeinrichtung implementiert werden soll; und
    • Bereitstellen eines Bitstroms für die Gestaltung des Vektorverarbeitungssystems an die programmierbare Logikeinrichtung, um zu bewirken, dass das Vektorverarbeitungssystem auf der programmierbaren Logikeinrichtung implementiert wird.
  • KLAUSEL 57.
  • Compiler nach Klausel 56, wobei das Bestimmen der Gestaltung für das Vektorverarbeitungssystem Bestimmen einer Platzierung einer Vielzahl von Lanes des Vektorverarbeitungssystems auf der programmierbaren Logikeinrichtung umfasst.
  • KLAUSEL 58.
  • Compiler nach Klausel 57, wobei jede Lane der Vielzahl von Lanes eine Routing-Schalttechnik, einen oder mehrere Speicherblöcke und mindestens einen digitalen Signalverarbeitungs- (DSP-) Block umfasst.
  • KLAUSEL 59.
  • Compiler nach Klausel 58, wobei:
    • nachdem der Bitstrom an die programmierbare Logikeinrichtung geliefert wurde, der eine oder die mehreren Speicherblöcke konfigurierbar sind zum Speichern einer Vielzahl von Vektoren, die Vektoren eines oder mehrerer Zahlenformate umfassen; und
    • der Compiler konfigurierbar ist zum Bestimmen des einen oder der mehreren Zahlenformate.
  • KLAUSEL 60.
  • Compiler nach Klausel 59, wobei der Compiler konfigurierbar ist zum Bestimmen des einen oder der mehreren Zahlenformate basierend auf einer Benutzereingabe, die einen Teil des einen oder der mehreren Zahlenformate, mindestens ein Zahlenformat, das nicht in dem einen oder den mehreren Zahlenformaten enthalten sein sollte, oder beides angibt.
  • KLAUSEL 61.
  • Compiler nach Klausel 57, wobei der Compiler konfigurierbar ist zum Bestimmen eines Routings für eine oder mehrere Lane-Verbindungen, die eine erste Lane der Vielzahl von Lanes kommunikativ mit mindestens einer anderen Lane der Vielzahl von Lanes koppeln.
  • KLAUSEL 62.
  • Compiler nach Klausel 61, wobei der Compiler konfigurierbar ist zum Bestimmen, ob in der ersten Lane Schalttechnik für eine intrinsische Operation einzubeziehen ist.
  • KLAUSEL 63.
  • Vektorverarbeitungssystem, das wenigstens teilweise auf einer IC-Einrichtung implementiert ist, wobei das Vektorverarbeitungssystem Folgendes umfasst:
    • eine Vielzahl von Lanes , wobei jede Lane der Vielzahl von Lanes Folgendes umfasst:
      • einen oder mehrere Speicherblöcke, die zum Speichern einer Vielzahl von Vektoren konfigurierbar sind;
      • wenigstens einen digitalen Signalverarbeitungs- (DSP-) Block, der kommunikativ mit dem einen oder den mehreren Speicherblöcken gekoppelt ist, wobei der wenigstens eine DSP-Block dazu konfigurierbar ist, wenigstens einen der Vielzahl von Vektoren zu empfangen und eine Berechnung unter Verwendung des wenigstens einen der Vielzahl von Vektoren durchzuführen; und
      • eine erste Routing-Schalttechnik, die dazu konfigurierbar ist, zusätzliche Vektoren zu empfangen und selektiv einen Teil der zusätzlichen Vektoren für den einen oder die mehreren Speicherblöcke zur Speicherung bereitzustellen.
  • KLAUSEL 64.
  • Vektorverarbeitungssystem nach Klausel 63, wobei die IC-Einrichtung eine programmierbare Logikeinrichtung umfasst.
  • KLAUSEL 65.
  • Vektorverarbeitungssystem nach Klausel 64, wobei die programmierbare Logikeinrichtung ein frei programmierbares Gate-Array (FPGA) umfasst.
  • KLAUSEL 66.
  • Vektorverarbeitungssystem nach Klausel 63, wobei die Vielzahl von Lanes eine erste Lane und eine zweite Lane umfasst, wobei die zweite Lane konfigurierbar ist zum Empfangen einer ersten Ausgabe der ersten Lane.
  • KLAUSEL 67.
  • Vektorverarbeitungssystem nach Klausel 66, wobei ein DSP-Block der zweiten Lane konfigurierbar ist zum Durchführen einer zweiten Berechnung unter Verwendung der ersten Ausgabe und eines Vektors, der aus einem Speicherblock der zweiten Lane abgerufen wird.
  • KLAUSEL 68.
  • Vektorverarbeitungssystem nach Klausel 67, wobei die Berechnung Vektor-Vektor-Multiplikation oder Vektor-Vektor-Addition umfasst.
  • KLAUSEL 69.
  • Vektorverarbeitungssystem nach Klausel 67, wobei der DSP-Block konfigurierbar ist, um die dritte Berechnung basierend auf einem Befehl durchzuführen, wobei der Befehl eine durchzuführende Operation und zwei Vektoren angibt.
  • KLAUSEL 70.
  • Vektorverarbeitungssystem nach Klausel 63, umfassend einen Speicher außerhalb der Vielzahl von Lanes, wobei die zweite Lane konfigurierbar ist, um mindestens einen der zwei Vektoren aus dem Speicher abzurufen, bevor die dritte Berechnung durchgeführt wird.
  • KLAUSEL 71.
  • Vektorverarbeitungssystem nach Klausel 63, umfassend eine Skalareinheit, die zum Durchführen einer Skalar-Vektor-Multiplikation konfigurierbar ist.
  • KLAUSEL 72.
  • Vektorverarbeitungssystem nach Klausel 71, Vektorverarbeitungssystem nach Klausel 69, wobei die Skalareinheit zumindest teilweise auf einer zweiten IC-Einrichtung implementiert ist, die kommunikativ mit der IC-Einrichtung gekoppelt ist.
  • KLAUSEL 73.
  • Vektorverarbeitungssystem nach Klausel 72, wobei die IC-Einrichtung ein frei programmierbares Gate-Array ist und die zweite IC-Einrichtung ein Prozessor ist.
  • KLAUSEL 74.
  • Vektorverarbeitungssystem nach Klausel 63, wobei die Vielzahl von Vektoren Vektoren mehrerer Zahlenformate umfasst.
  • KLAUSEL 75.
  • Vektorverarbeitungssystem nach Klausel 63, wobei die Vielzahl von Zahlenformaten Gleitkomma (FP32) mit einfacher Genauigkeit, bfloat16, int8 oder eine Kombination aus diesen umfassen.
  • KLAUSEL 76.
  • Programmierbare Logikeinrichtung, umfassend:
    • einen oder mehrere Speicherblöcke, die zum Speichern einer Vielzahl von Vektoren konfigurierbar sind;
    • Routing-Schalttechnik, die kommunikativ mit dem einen oder den mehreren Speicherblöcken gekoppelt ist, wobei die Routing-Schalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen, der zum Ausführen eines ersten Befehls verwendet werden soll; und
    • eine Vektorberechnungseinheit, die kommunikativ mit der Routing-Schalttechnik gekoppelt ist, wobei die Vektorberechnungseinheit eine oder mehrere Vektorverarbeitungseinheiten umfasst, die konfigurierbar sind zum Ausführen des Befehls durch:
      • Empfangen des Teils der Vielzahl von Vektoren;
      • Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoren beinhalten; und
      • Ausgeben eines oder mehrerer Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt werden.
  • KLAUSEL 77.
  • Programmierbare Logikeinrichtung nach Klausel 76, umfassend eine zweite Vektorberechnungseinheit, die eine oder mehrere Tensoreinheiten beinhaltet, die konfigurierbar sind, um Matrix-Matrix-Multiplikation, Matrix-Vektor-Multiplikation oder beides durchzuführen.
  • KLAUSEL 78.
  • Programmierbare Logikeinrichtung nach Klausel 76, umfassend eine oder mehrere Skalarverarbeitungseinheiten,die zum Durchführen einer Skalaroperation konfigurierbar sind, die einen Skalar oder einen Teil des Skalars als Eingabe beinhaltet.
  • KLAUSEL 79.
  • Programmierbare Logikeinrichtung nach Klausel 78, wobei:
    • die Skalaroperation Skalar-Vektor-Multiplikation umfasst; und
    • der eine oder die mehreren Speicherblöcke ein oder mehrere Skalarregister umfassen, die zum Speichern des Skalars konfigurierbar sind.
  • KLAUSEL 80.
  • IC-Einrichtung, die Folgendes umfasst:
    • eine Vielzahl von Vektorregistern, die konfigurierbar ist, um eine Vielzahl von Vektoren zu speichern; und
    • eine Vielzahl von Vektorverarbeitungseinheiten, die zu Folgendem konfigurierbar sind:
      • Empfangen eines Teils der Vielzahl von Vektoren;
      • Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoreingaben beinhalten; und
      • Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  • KLAUSEL 81.
  • IC-Einrichtung nach Klausel 80, umfassend eine Vielzahl digitaler Signalverarbeitungs- (DSP-) Blöcke, wobei die Vielzahl von DSP-Blöcken wenigstens einen Teil der Vielzahl von Vektorregistern umfasst.
  • KLAUSEL 82.
  • IC-Einrichtung nach Klausel 81, umfassend Schalterschalttechnik, die kommunikativ mit der Vielzahl von Vektorregistern gekoppelt ist, wobei die Schalterschalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektorregistern und einen Teil der Vielzahl von Vektorverarbeitungseinheiten flexibel zu koppeln.
  • KLAUSEL 83.
  • IC-Einrichtung nach Klausel 82, wobei die Vielzahl von Vektorregistern konfigurierbar ist, um eine oder mehrere Matrizen zu speichern.
  • KLAUSEL 84.
  • IC-Einrichtung nach Klausel 83, wobei die Schalterschalttechnik einen Kreuzschienenschalter umfasst und die eine oder die mehreren Operationen eine Multiplikationsoperation, eine Additionsoperation oder eine Subtraktionsoperation umfassen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 63/072095 [0001]

Claims (25)

  1. IC-Einrichtung, die Folgendes umfasst: eine Vielzahl von Vektorregistern, die konfigurierbar sind, um eine Vielzahl von Vektoren zu speichern; Schalterschalttechnik, die kommunikativ mit der Vielzahl von Vektorregistern gekoppelt ist, wobei die Schalterschalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen; und eine Vielzahl von Vektorverarbeitungseinheiten, die kommunikativ mit der Schalterschalttechnik gekoppelt und zu Folgendem konfigurierbar ist: Empfangen des Teils der Vielzahl von Vektoren; Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoren beinhalten; und Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  2. IC-Einrichtung nach Anspruch 1, wobei die Schalterschalttechnik einen Kreuzschienenschalter umfasst.
  3. IC-Einrichtung nach Anspruch 1 oder 2, wobei die eine oder die mehreren Operationen eine Multiplikationsoperation, eine Additionsoperation oder eine Subtraktionsoperation umfassen.
  4. IC-Einrichtung nach einem der Ansprüche 1 bis 3, wobei die IC-Einrichtung eine programmierbare Logikeinrichtung umfasst.
  5. IC-Einrichtung nach Anspruch 4, wobei die Vielzahl von Vektorverarbeitungseinheiten in Hartlogik der programmierbaren Logikeinrichtung implementiert ist.
  6. IC-Einrichtung nach Anspruch 4, wobei die programmierbare Logikeinrichtung ein frei programmierbares Gate-Array (FPGA) umfasst.
  7. IC-Einrichtung nach einem der Ansprüche 1 bis 6, ferner umfassend einen digitalen Signalverarbeitungs- (DSP-) Block, wobei eine Vektorverarbeitungseinheit der Vielzahl von Vektorverarbeitungseinheiten unter Verwendung des DSP-Blocks implementiert ist.
  8. IC-Einrichtung nach einem der Ansprüche 1 bis 7, wobei eine erste Vektorverarbeitungseinheit der Vielzahl von Vektorverarbeitungseinheiten Folgendes umfasst: ein Register, das konfigurierbar ist, um einen ersten Wert zu speichern; einen Multiplexer, der konfigurierbar ist zum selektiven Ausgeben des ersten Werts aus dem Register oder eines zweiten Werts, der durch die erste Vektorverarbeitungseinheit empfangen wird; und einen Multiplizierer, der konfigurierbar ist zum: Empfangen des ersten Werts oder des zweiten Werts von dem Multiplexer als ausgewählten Wert; Empfangen eines dritten Werts, und Multiplizieren des von dem Multiplexer empfangenen ausgewählten Werts und des dritten Werts, um ein erstes Produkt zu erzeugen.
  9. IC-Einrichtung nach Anspruch 8, wobei die erste Vektorverarbeitungseinheit eine zweite Schalterschalttechnik umfasst, die zu Folgendem konfigurierbar ist: Empfangen des ersten Werts, des zweiten Werts und des dritten Werts; Routen des ersten Werts zu dem Register; Routen des zweiten Werts an den Multiplexer; und Routen des dritten Werts an den Multiplizierer.
  10. IC-Einrichtung nach Anspruch 8, wobei die erste Vektorverarbeitungseinheit einen Addierer umfasst, der zu Folgendem konfigurierbar ist: Empfangen des ersten Produkts und eines vierten Werts, der durch die erste Vektorverarbeitungseinheit empfangen wird; und Addieren des ersten Produkts und des vierten Werts, um eine erste Summe zu erzeugen.
  11. IC-Einrichtung nach Anspruch 8, wobei die erste Vektorverarbeitungseinheit Folgendes umfasst: ein zweites Register, das zum Speichern des ersten Produkts konfigurierbar ist; und einen Addierer, der zu Folgendem konfigurierbar ist: Empfangen des ersten Produkts aus dem zweiten Register; Empfangen eines zweiten Produkts von dem Multiplizierer; Addieren des ersten Produkts und des zweiten Produkts, um eine erste Summe zu erzeugen; und Bereitstellen der ersten Summe an das zweite Register zur Speicherung.
  12. Vektorverarbeitungssystem, das Folgendes umfasst: eine Vielzahl von Vektorregistern, die konfigurierbar sind, um eine Vielzahl von Vektoren zu speichern; Schalterschalttechnik, die kommunikativ mit der Vielzahl von Vektorregistern gekoppelt ist, wobei die Schalterschalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen; und eine Vielzahl von Vektorverarbeitungseinheiten, die kommunikativ mit der Schalterschalttechnik gekoppelt und zu Folgendem konfigurierbar ist: Empfangen des Teils der Vielzahl von Vektoren; Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoren beinhalten; und Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  13. Vektorverarbeitungssystem nach Anspruch 12, wobei das Vektorverarbeitungssystem vollständig innerhalb eines einzigen frei programmierbaren Gate-Arrays (FPGA) implementiert ist.
  14. Vektorverarbeitungssystem nach Anspruch 12 oder 13, wobei das Vektorverarbeitungssystem unter Verwendung von zwei IC-Einrichtungen implementiert ist, die auf einem einzigen Substrat angeordnet sind.
  15. Vektorverarbeitungssystem nach Anspruch 14, wobei die zwei IC-Einrichtungen einen Prozessor und eine programmierbare Logikeinrichtung umfassen.
  16. Vektorverarbeitungssystem nach einem der Ansprüche 12 bis 15, wobei: die Vielzahl von Vektorverarbeitungseinheiten eine erste Vektorverarbeitungseinheit umfasst, die eine erste Interconnect-Schalttechnik beinhaltet; und die Vielzahl von Vektorverarbeitungseinheiten eine zweite Vektorverarbeitungseinheit umfasst, die eine zweite Interconnect-Schalttechnik beinhaltet, die erste Vektorverarbeitungseinheit und die zweite Vektorverarbeitungseinheit über die erste Interconnect-Schalttechnik und die zweite Interconnect-Schalttechnik kommunikativ miteinander gekoppelt sind; und die zweite Vektorverarbeitungseinheit zu Folgendemkonfigurierbar ist: Empfangen einer Ausgabe von der ersten Vektorverarbeitungseinheit; und Durchführen einer Operation, die die Ausgabe und einen Wert aus dem Teil der Vielzahl von Vektoren beinhaltet.
  17. Programmierbare Logikeinrichtung, umfassend: einen oder mehrere Speicherblöcke, die zum Speichern einer Vielzahl von Vektoren konfigurierbar sind; Routing-Schalttechnik, die kommunikativ mit dem einen oder den mehreren Speicherblöcken gekoppelt ist, wobei die Routing-Schalttechnik dazu konfigurierbar ist, einen Teil der Vielzahl von Vektoren zu routen, der zum Ausführen eines ersten Befehls verwendet werden soll; und eine Vektorberechnungseinheit, die kommunikativ mit der Routing-Schalttechnik gekoppelt ist, wobei die Vektorberechnungseinheit eine oder mehrere Vektorverarbeitungseinheiten umfasst, die konfigurierbar sind zum Ausführen des Befehls durch: Empfangen des Teils der Vielzahl von Vektoren; Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoren beinhalten; und Ausgeben eines oder mehrerer Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt werden.
  18. Programmierbare Logikeinrichtung nach Anspruch 17, umfassend eine zweite Vektorberechnungseinheit, die eine oder mehrere Tensoreinheiten beinhaltet, diekonfigurierbar sind, um Matrix-Matrix-Multiplikation, Matrix-Vektor-Multiplikation oder beides durchzuführen.
  19. Programmierbare Logikeinrichtung nach Anspruch 17 oder 18, umfassend eine oder mehrere Skalarverarbeitungseinheiten, die zum Durchführen einer Skalaroperation konfigurierbar sind, die einen Skalar oder einen Teil des Skalars als Eingabe beinhaltet.
  20. Programmierbare Logikeinrichtung nach Anspruch 19, wobei: die Skalaroperation Skalar-Vektor-Multiplikation umfasst; und der eine oder die mehreren Speicherblöcke ein oder mehrere Skalarregister umfassen, die zum Speichern des Skalars konfigurierbar sind.
  21. System, umfassend: Mittel zum Speichern einer Vielzahl von Vektoren; Mittel zum konfigurierbaren Routen eines Teils der Vielzahl von Vektoren, der zum Ausführen eines ersten Befehls verwendet werden soll; und Mittel zum Ausführen des ersten Befehls, umfassend: Mittel zum Empfangen des Teils der Vielzahl von Vektoren; Mittel zum Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoren beinhalten; und Mittel zum Ausgeben eines oder mehrerer Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt werden.
  22. System nach Anspruch 21, umfassend Mittel zum Durchführen von Matrix-Matrix-Multiplikation, Matrix-Vektor-Multiplikation oder beidem.
  23. System nach Anspruch 21 oder 22, umfassend Mittel zum Durchführen einer Skalaroperation, die einen Skalar oder einen Teil des Skalars als Eingabe beinhaltet.
  24. Verfahren, umfassend: Speichern einer Vielzahl von Vektoren in Vektorregistern; Konfigurieren einer Routing-Schalter-Schalttechnik, die kommunikativ mit der Vielzahl von Vektorregistern gekoppelt ist, um einen Teil der Vielzahl von Vektoren zu routen; und Verwenden einer Vielzahl von Vektorverarbeitungseinheiten, die kommunikativ mit der Schalterschalttechnik gekoppelt sind, zum: Empfangen des Teils der Vielzahl von Vektoren; Durchführen einer oder mehrerer Operationen, die den Teil der Vielzahl von Vektoren beinhalten; und Ausgeben einer zweiten Vielzahl von Vektoren, die durch Durchführen der einen oder der mehreren Operationen erzeugt wurden.
  25. Verfahren nach Anspruch 24, wobei die eine oder die mehreren Operationen eine Multiplikationsoperation, eine Additionsoperation oder eine Subtraktionsoperation umfassen.
DE102021121732.6A 2020-08-28 2021-08-23 Vektorprozessorarchitekturen Pending DE102021121732A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063072095P 2020-08-28 2020-08-28
US63/072,095 2020-08-28
US17/214,646 2021-03-26
US17/214,646 US20210216318A1 (en) 2020-08-28 2021-03-26 Vector Processor Architectures

Publications (1)

Publication Number Publication Date
DE102021121732A1 true DE102021121732A1 (de) 2022-03-17

Family

ID=76763311

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021121732.6A Pending DE102021121732A1 (de) 2020-08-28 2021-08-23 Vektorprozessorarchitekturen

Country Status (5)

Country Link
US (1) US20210216318A1 (de)
DE (1) DE102021121732A1 (de)
NL (1) NL2028867B1 (de)
TW (1) TW202209157A (de)
WO (1) WO2022046570A1 (de)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US20210216318A1 (en) * 2020-08-28 2021-07-15 Martin Langhammer Vector Processor Architectures
US20220414051A1 (en) * 2021-06-28 2022-12-29 Silicon Laboratories Inc. Apparatus for Array Processor with Program Packets and Associated Methods
US20230050062A1 (en) * 2021-08-02 2023-02-16 Nvidia Corporation Simd data path organization to increase processing throughput in a system on a chip
CN113608786B (zh) * 2021-10-09 2022-02-18 苏州浪潮智能科技有限公司 一种向量读写方法、向量寄存器系统、设备及介质
US20220121593A1 (en) * 2021-12-23 2022-04-21 Intel Corporation Systems And Methods For Processor Circuits
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method
US11966739B2 (en) * 2022-09-09 2024-04-23 Arm Limited Processing of issued instructions

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5187796A (en) * 1988-03-29 1993-02-16 Computer Motion, Inc. Three-dimensional vector co-processor having I, J, and K register files and I, J, and K execution units
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US8861517B2 (en) * 2010-04-20 2014-10-14 Los Alamos National Security, Llc Petaflops router
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
US10762164B2 (en) * 2016-01-20 2020-09-01 Cambricon Technologies Corporation Limited Vector and matrix computing device
US10592466B2 (en) * 2016-05-12 2020-03-17 Wisconsin Alumni Research Foundation Graphic processor unit providing reduced storage costs for similar operands
US11157801B2 (en) * 2017-02-28 2021-10-26 Microsoft Technology Licensing, Llc Neural network processing with the neural network model pinned to on-chip memories of hardware nodes
US10338925B2 (en) * 2017-05-24 2019-07-02 Microsoft Technology Licensing, Llc Tensor register files
US11048509B2 (en) * 2018-06-05 2021-06-29 Qualcomm Incorporated Providing multi-element multi-vector (MEMV) register file access in vector-processor-based devices
US10628162B2 (en) * 2018-06-19 2020-04-21 Qualcomm Incorporated Enabling parallel memory accesses by providing explicit affine instructions in vector-processor-based devices
US11354564B2 (en) * 2019-06-27 2022-06-07 Intel Corporation Tuning of loop orders in blocked dense basic linear algebra subroutines
US20210216318A1 (en) * 2020-08-28 2021-07-15 Martin Langhammer Vector Processor Architectures

Also Published As

Publication number Publication date
NL2028867B1 (en) 2023-06-13
US20210216318A1 (en) 2021-07-15
TW202209157A (zh) 2022-03-01
NL2028867A (en) 2022-04-29
WO2022046570A1 (en) 2022-03-03

Similar Documents

Publication Publication Date Title
DE102021121732A1 (de) Vektorprozessorarchitekturen
Chen et al. DianNao family: energy-efficient hardware accelerators for machine learning
US11386644B2 (en) Image preprocessing for generalized image processing
Kiningham et al. GRIP: A graph neural network accelerator architecture
DE102018006735A1 (de) Prozessoren und Verfahren für konfigurierbares Clock-Gating in einem räumlichen Array
US10846591B2 (en) Configurable and programmable multi-core architecture with a specialized instruction set for embedded application based on neural networks
US20180260711A1 (en) Calculating device and method for a sparsely connected artificial neural network
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
US8086975B2 (en) Power aware asynchronous circuits
DE102020131050A1 (de) Konfigurierbare prozessorelementarrays zum implementieren von konvolutionellen neuronalen netzwerken
CN111937009A (zh) 脉动卷积神经网络
DE102018126650A1 (de) Einrichtung, verfahren und systeme für datenspeicherkonsistenz in einem konfigurierbaren räumlichen beschleuniger
JP2021521516A (ja) 演算を加速するための加速器及びシステム
DE102013111605A1 (de) Reduzierung des Leistungsverbrauchs in einer fusionierten Multiplizier-Addier-(FMA)-Einheit in Reaktion auf Eingangsdatenwerte
DE102018006015A1 (de) Globale und lokale Zeitschrittbestimmungsschemata für neuronale Netzwerke
Gu et al. DLUX: A LUT-based near-bank accelerator for data center deep learning training workloads
Lym et al. Mini-batch serialization: Cnn training with inter-layer data reuse
CN111656339A (zh) 存储器装置及其控制方法
US20190213006A1 (en) Multi-functional execution lane for image processor
Meng et al. How to avoid zero-spacing in fractionally-strided convolution? a hardware-algorithm co-design methodology
US20140258206A1 (en) Method and program structure for machine learning
Clere et al. FPGA based reconfigurable coprocessor for deep convolutional neural network training
Liang et al. TCX: A RISC style tensor computing extension and a programmable tensor processor
Li et al. ANNA: Accelerating Neural Network Accelerator through software-hardware co-design for vertical applications in edge systems
Youssfi et al. A fast middleware for massively parallel and distributed computing