-
ERKLÄRUNG IM HINBLICK AUF VON DER REGIERUNG GEFÖRDERTE FORSCHUNG UND ENTWICKLUNG
-
Diese Erfindung wurde mit Unterstützung der Regierung unter der Vertragsnummer H98230B-13-D-0124-0132, erteilt vom Department of Defense, gemacht. Die Regierung besitzt bestimmte Rechte an dieser Erfindung.
-
TECHNISCHES GEBIET
-
Die Offenbarung bezieht sich im Allgemeinen auf Elektronik und insbesondere bezieht sich eine Ausführungsform auf eine konfigurierbare netzwerkbasierte Datenflussoperatorschaltung.
-
HINTERGRUND
-
Ein Prozessor oder ein Satz Prozessoren führt Befehle aus einem Befehlssatz aus, z. B. der Befehlssatzarchitektur (ISA, Instruction Set Architecture). Der Befehlssatz ist der Teil der Computerarchitektur, die mit Programmieren in Beziehung steht, und enthält im Allgemeinen die nativen Datentypen, Befehle, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Interrupt- und Ausnahmebehandlung und externen Eingänge und Ausgänge (E/A). Es sei angemerkt, dass der Begriff Befehl sich hier auf einen Makro-Befehl beziehen kann, z. B. einen Befehl, der dem Prozessor zur Ausführung bereitgestellt wird, oder einen Mikro-Befehl, z. B. einen Befehl, der sich daraus ergibt, dass ein Decodierer des Prozessors Makro-Befehle decodiert.
-
Figurenliste
-
Die vorliegende Offenbarung wird beispielhaft und nicht einschränkend in den Figuren der zugehörigen Zeichnungen veranschaulicht, in denen gleiche Bezugsnummern gleiche Elemente bezeichnen und in denen gilt:
- 1 veranschaulicht eine Beschleunigerkachel gemäß Ausführungsformen der Offenbarung.
- 2 veranschaulicht einen mit einem Speicher gekoppelten Hardware-Prozessor gemäß Ausführungsformen der Offenbarung.
- 3 veranschaulicht einen Datenflussgraphen eines Pseudocode-Funktionsaufrufs gemäß Ausführungsformen der Offenbarung.
- 4 veranschaulicht ein dreidimensionales Array von Verarbeitungselementen mit mehreren Netzwerk-Datenflussendpunktschaltungen gemäß Ausführungsformen der Offenbarung.
- 5 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung gemäß Ausführungsformen der Offenbarung.
- 6 veranschaulicht Datenformate für eine Send-Operation und eine Receive-Operation gemäß Ausführungsformen der Offenbarung.
- 7 veranschaulicht ein anderes Datenformat für eine Send-Operation gemäß Ausführungsformen der Offenbarung.
- 8 veranschaulicht das Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung), Datenformate zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine Send- (z. B. Switch -) Operation und eine Receive- (z. B. Pick -) Operation gemäß Ausführungsformen der Offenbarung.
- 9 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine Send-Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung annotiert werden, gemäß Ausführungsformen der Offenbarung.
- 10 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine ausgewählte Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung annotiert werden, gemäß Ausführungsformen der Offenbarung.
- 11 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine Switch-Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung annotiert werden, gemäß Ausführungsformen der Offenbarung.
- 12 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine SwitchAny-Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung annotiert werden, gemäß Ausführungsformen der Offenbarung.
- 13 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine Pick-Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung annotiert werden, gemäß Ausführungsformen der Offenbarung.
- 14 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine PickAny-Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung annotiert werden, gemäß Ausführungsformen der Offenbarung.
- 15 veranschaulicht die Auswahl einer Operation durch eine Netzwerk-Datenflussendpunktschaltung für die Durchführung gemäß Ausführungsformen der Offenbarung.
- 16 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung gemäß Ausführungsformen der Offenbarung.
- 17 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung, die Eingang Null (0) empfängt, während sie eine Pick-Operation durchführt, gemäß Ausführungsformen der Offenbarung.
- 18 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung, die Eingang Eins (1) empfängt, während sie eine Pick-Operation durchführt, gemäß Ausführungsformen der Offenbarung.
- 19 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung, die den ausgewählten Eingang ausgibt, während sie eine Pick-Operation durchführt, gemäß Ausführungsformen der Offenbarung.
- 20 veranschaulicht ein Flussdiagramm gemäß Ausführungsformen der Offenbarung.
- 21A veranschaulicht eine Programmquelle gemäß Ausführungsformen der Offenbarung.
- 21B veranschaulicht einen Datenflussgraphen für die Programmquelle der 21A gemäß Ausführungsformen der Offenbarung.
- 21C veranschaulicht einen Beschleuniger mit mehreren Verarbeitungselementen, der dazu konfiguriert ist, den Datenflussgraphen der 21B auszuführen, gemäß Ausführungsformen der Offenbarung.
- 22 veranschaulicht eine beispielhafte Ausführung eines Datenflussgraphen gemäß Ausführungsformen der Offenbarung.
- 23 veranschaulicht eine Programmquelle gemäß Ausführungsformen der Offenbarung.
- 24 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen umfasst, gemäß Ausführungsformen der Offenbarung.
- 25A veranschaulicht ein konfigurierbares Datenwegenetzwerk gemäß Ausführungsformen der Offenbarung.
- 25B veranschaulicht ein konfigurierbares Flusssteuerwegenetzwerk gemäß Ausführungsformen der Offenbarung.
- 26 veranschaulicht eine Hardware-Prozessorkachel, die einen Beschleuniger umfasst, gemäß Ausführungsformen der Offenbarung.
- 27 veranschaulicht ein Verarbeitungselement gemäß Ausführungsformen der Offenbarung.
- 28 veranschaulicht eine Request Address File- (RAF -) Schaltung gemäß Ausführungsformen der Offenbarung.
- 29 veranschaulicht mehrere Request Address File- (RAF -) Schaltungen, die zwischen mehreren Beschleunigerkacheln und mehreren Cache-Bänken gekoppelt sind, gemäß Ausführungsformen der Offenbarung.
- 30 veranschaulicht einen Fließkomma-Multiplizierer, der in drei Bereiche aufgeteilt ist (den Ergebnisbereich, drei potentielle Übertragsbereiche und den gegatterten Bereich), gemäß Ausführungsformen der Offenbarung.
- 31 veranschaulicht eine Konfiguration eines Beschleunigers im laufenden Prozess mit mehreren Verarbeitungselementen gemäß Ausführungsformen der Offenbarung.
- 32 veranschaulicht eine Momentaufnahme einer Pipeline-Extraktion im laufenden Prozess gemäß Ausführungsformen der Offenbarung.
- 33 veranschaulicht eine Kompilierungs-Toolchain für einen Beschleuniger gemäß Ausführungsformen der Offenbarung.
- 34 veranschaulicht einen Kompilierer für einen Beschleuniger gemäß Ausführungsformen der Offenbarung.
- 35A veranschaulicht sequentiellen Assemblercode gemäß Ausführungsformen der Offenbarung.
- 35B veranschaulicht Datenfluss-Assemblercode für den sequentiellen Assemblercode der 35A gemäß Ausführungsformen der Offenbarung.
- 35C veranschaulicht einen Datenflussgraphen für den Datenfluss-Assemblercode der 35B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung.
- 36A veranschaulicht C-Quellcode gemäß Ausführungsformen der Offenbarung.
- 36B veranschaulicht Datenfluss-Assemblercode für den C-Quellcode der 36A gemäß Ausführungsformen der Offenbarung.
- 36C veranschaulicht einen Datenflussgraphen für den Datenfluss-Assemblercode der 36B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung.
- 37A veranschaulicht C-Quellcode gemäß Ausführungsformen der Offenbarung.
- 37B veranschaulicht Datenfluss-Assemblercode für den C-Quellcode der 37A gemäß Ausführungsformen der Offenbarung.
- 37C veranschaulicht einen Datenflussgraphen für den Datenfluss-Assemblercode der 37B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung.
- 38A veranschaulicht ein Flussdiagramm gemäß Ausführungsformen der Offenbarung.
- 38B veranschaulicht ein Flussdiagramm gemäß Ausführungsformen der Offenbarung.
- 39 veranschaulicht einen Graphen des Durchsatzes gegenüber der Energie pro Operation gemäß Ausführungsformen der Offenbarung.
- 40 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen und einen lokalen Konfigurations-Controller umfasst, gemäß Ausführungsformen der Offenbarung.
- 41A - 41C veranschaulichen einen lokalen Konfigurations-Controller, der ein Datenwegenetzwerk konfiguriert, gemäß Ausführungsformen der Offenbarung.
- 42 veranschaulicht einen Konfigurations-Controller gemäß Ausführungsformen der Offenbarung.
- 43 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen, einen Konfigurations-Cache und einen lokalen Konfigurations-Controller umfasst, gemäß Ausführungsformen der Offenbarung.
- 44 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen und einen Konfigurations- und Ausnahmebehandlungs-Controller mit einer Rekonfigurationsschaltung umfasst, gemäß Ausführungsformen der Offenbarung.
- 45 veranschaulicht eine Rekonfigurationsschaltung gemäß Ausführungsformen der Offenbarung.
- 46 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen und einen Konfigurations- und Ausnahmebehandlungs-Controller mit einer Rekonfigurationsschaltung umfasst, gemäß Ausführungsformen der Offenbarung.
- 47 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen und einen Mezzanin-Ausnahmeaggregator umfasst, der mit einem Ausnahmeaggregator auf Kachelebene gekoppelt ist, gemäß Ausführungsformen der Offenbarung.
- 48 veranschaulicht ein Verarbeitungselement mit einem Ausnahmegenerator gemäß Ausführungsformen der Offenbarung.
- 49 veranschaulicht eine Beschleunigerkachel, die ein Array von Verarbeitungselementen und einen lokalen Extraktions-Controller umfasst, gemäß Ausführungsformen der Offenbarung.
- 50A - 50C veranschaulichen einen lokalen Extraktions-Controller, der ein Datenwegenetzwerk konfiguriert, gemäß Ausführungsformen der Offenbarung.
- 51 veranschaulicht einen Extraktions-Controller gemäß Ausführungsformen der Offenbarung.
- 52 veranschaulicht ein Flussdiagramm gemäß Ausführungsformen der Offenbarung.
- 53 veranschaulicht ein Flussdiagramm gemäß Ausführungsformen der Offenbarung.
- 54A ist ein Blockschaltbild, das ein generisches vektorgerechtes Befehlsformat und dessen Befehls-Templates der Klasse A gemäß Ausführungsformen der Offenbarung veranschaulicht.
- 54B ist ein Blockschaltbild, das das generische vektorgerechte Befehlsformat und dessen Befehls-Templates der Klasse B gemäß Ausführungsformen der Offenbarung veranschaulicht.
- 55A ist ein Blockschaltbild, das Felder für die generischen vektorgerechten Befehlsformate in den 54A und 54B gemäß Ausführungsformen der Offenbarung veranschaulicht.
- 55B ist ein Blockschaltbild, das die Felder des spezifischen vektorgerechten Befehlsformats in der 55A, die ein vollständiges Opcode-Feld darstellen, gemäß einer Ausführungsform der Offenbarung veranschaulicht.
- 55C ist ein Blockschaltbild, das die Felder des spezifischen vektorgerechten Befehlsformats in der 55A, die ein Registerindex-Feld darstellen, gemäß einer Ausführungsform der Offenbarung veranschaulicht.
- 55D ist ein Blockschaltbild, das die Felder des spezifischen vektorgerechten Befehlsformats in der 55A, die das Erweiterungsoperations-Feld 5450 darstellen, gemäß einer Ausführungsform der Offenbarung veranschaulicht.
- 56 ist ein Blockschaltbild einer Registerarchitektur gemäß einer Ausführungsform der Offenbarung.
- 57A ist ein Blockschaltbild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-, Out-of-Order-Ausgabe -/Ausführungs-Pipeline veranschaulicht, gemäß Ausführungsformen der Offenbarung.
- 57B ist ein Blockschaltbild, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-, Out-of-Order-Ausgabe -/Ausführungs-Architekturkern veranschaulicht, der in einem Prozessor enthalten sein soll, gemäß Ausführungsformen der Offenbarung.
- 58A ist ein Blockschaltbild eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zum On-Die-Interconnect-Netzwerk und seinem lokalen Subset des Level-2-(L2 -) Cache, gemäß Ausführungsformen der Offenbarung.
- 58B ist eine erweiterte Ansicht eines Teils des Prozessorkerns aus 58A gemäß Ausfiihrungsformen der Offenbarung.
- 59 ist ein Blockschaltbild eines Prozessors, der mehr als einen Kern, einen integrierten Speicher-Controller und integrierte Grafikelemente aufweisen kann, gemäß Ausführungsformen der Offenbarung.
- 60 ist ein Blockschaltbild eines Systems gemäß einer Ausführungsform der vorliegenden Offenbarung.
- 61 ist ein Blockschaltbild eines genauer spezifizierten beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Offenbarung.
- 62 zeigt ein Blockschaltbild eines zweiten, genauer spezifizierten beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Offenbarung.
- 63 zeigt ein Blockschaltbild eines System-on-a-Chip (SoC) gemäß einer Ausführungsform der vorliegenden Offenbarung.
- 64 ist ein Blockschaltbild, das die Verwendung eines Software-Befehlskonverters zum Konvertieren von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz vergleichend gegenüberstellt, gemäß Ausführungsformen der Offenbarung.
-
AUSFÜHRLICHE BESCHREIBUNG
-
In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt. Allerdings versteht es sich, dass Ausführungsformen der Offenbarung ohne diese spezifischen Details umgesetzt werden können. In anderen Beispielen sind allgemein bekannte Schaltungen, Strukturen und Techniken nicht ausführlich gezeigt worden, um das Verständnis dieser Beschreibung nicht unverständlich zu machen.
-
Bezugnahmen in der Spezifikation auf „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. geben an, dass die beschriebene Ausführungsform ein besonderes Merkmal, Struktur oder Charakteristikum beinhalten kann, jedoch beinhaltet möglicherweise nicht notwendigerweise jede Ausführungsform das besondere Merkmal, Struktur oder Charakteristikum. Außerdem beziehen sich solche Formulierungen nicht notwendigerweise auf die gleiche Ausführungsform. Wenn ein besonderes Merkmal, Struktur oder Charakteristikum in Verbindung mit einer Ausführungsform beschrieben wird, wird des Weiteren geltend gemacht, dass es innerhalb der Kenntnisse eines Fachmanns liegt, ein solches Merkmal, Struktur oder Charakteristikum in Verbindung mit anderen Ausführungsformen zu beeinflussen, egal, ob dies explizit beschrieben wird oder nicht.
-
Ein Prozessor (der z. B. einen oder mehrere Kerne aufweist) kann Befehle ausführen (z. B. einen Befehls-Thread), um mit Daten zu arbeiten, zum Beispiel um Arithmetik, Logik oder andere Funktionen durchzuführen. Zum Beispiel kann Software eine Operation anfordern und ein Hardware-Prozessor (z. B. ein Kern oder Kerne davon) kann die Operation als Reaktion auf die Anforderung durchführen. Ein nicht einschränkendes Beispiel einer Operation ist eine Mischoperation zur Eingabe von mehreren Vektorelementen und Ausgabe eines Vektors mit mehreren gemischten Elementen. In bestimmten Ausführungsformen erfolgen mit der Ausführung eines einzelnen Befehls mehrere Operationen.
-
Eine Exascale-Performance, wie sie z. B. vom Department of Energy definiert wird, kann erfordern, dass die Fließkomma-Performance auf Systemebene 10^18 Fließkomma-Operationen pro Sekunde (ExaFLOPs) oder mehr innerhalb eines gegebenen (z. B. 20 MW) Leistungs-Budgets überschreitet. Hier geht es bei bestimmten Ausführungsformen um ein dreidimensionales Array von Verarbeitungselementen (z. B. einen konfigurierbaren dreidimensionalen Beschleuniger (CSA, Configurable Spatial Accelerator)), der das High Performance Computing (HPC) zum Beispiel eines Prozessors zum Ziel hat. Hier zielen bestimmte Ausführungsformen eines dreidimensionalen Arrays von Verarbeitungselementen (z. B. ein CSA) auf die direkte Ausführung eines Datenflussgraphen ab, um eine rechnerisch dichte, jedoch energieeffiziente dreidimensionale Mikroarchitektur zu gewinnen, die konventionelle Roadmap-Architekturen weit übertrifft. Hier überlagern bestimmte Ausführungsformen (z. B. High-Radix -) Datenflussoperationen auf einem Kommunikationsnetzwerk, z. B. zusätzlich zum Daten-Routing des Kommunikationsnetzwerks zwischen den Verarbeitungselementen, dem Speicher usw., und/oder dem Durchführen von anderen Kommunikationsoperationen (z. B. nicht Daten verarbeitende Operationen) durch das Kommunikationsnetzwerk. Hier geht es bei bestimmten Ausführungsformen um ein Kommunikationsnetzwerk (z. B. ein paketvermittelndes Netzwerk) eines (z. B. gekoppelten) dreidimensionalen Arrays von Verarbeitungselementen (z. B. einem CSA), um bestimmte Datenflussoperationen durchzuführen, z. B. zusätzlich zum Daten-Routing des Kommunikationsnetzwerks zwischen den Verarbeitungselementen, dem Speicher usw., oder dem Durchführen von anderen Kommunikationsoperationen durch das Kommunikationsnetzwerk. Hier geht es bei bestimmten Ausführungsformen um Netzwerk-Datenflussendpunktschaltungen, die (z. B. jede) eine Datenflussoperation oder -operationen durchführen (z. B. einen Abschnitt oder alles), zum Beispiel eine Pick- oder Switch-Datenflussoperation z. B. eines Datenflussgraphen. Hier enthalten bestimmte Ausführungsformen erweiterte Netzwerkendpunkte (z. B. Netzwerk-Datenflussendpunktschaltungen), um die Steuerung für (z. B. mehrere oder ein Subset von) Datenflussoperation(en) zu unterstützen, z. B. unter Nutzung der Netzwerkendpunkte, um eine (z. B. Datenfluss -) Operation durchzuführen, anstelle eines Verarbeitungselements (z. B. Kerns) oder einer Arithmetik-Logik-Einheit (um z. B. arithmetische und logische Operationen durchzuführen), die diese (z. B. Datenfluss -) Operation durchführt. In einer Ausführungsform ist eine Netzwerk-Datenflussendpunktschaltung von einem dreidimensionalen Array (z. B. einem Interconnect oder einer Fabric davon) und/oder Verarbeitungselementen getrennt.
-
Das Nachstehende beinhaltet auch eine Beschreibung der architektonischen Philosophie von Ausführungsformen eines dreidimensionalen Arrays von Verarbeitungselementen (z. B. einem CSA) und bestimmten Merkmalen davon. Wie bei jeder revolutionären Architektur kann die Programmierbarkeit ein Risiko darstellen. Um dieses Problem abzuschwächen, sind Ausführungsformen der CSA-Architektur zusammen mit einer Kompilierungs-Toolchain entworfen worden, die ebenfalls nachstehend erörtert wird.
-
EINLEITUNG
-
Exascale-Berechnungsziele können innerhalb eines offensiven Leistungs-Budgets (z. B. 20 MW) eine enorme Fließkomma-Performance auf Systemebene erfordern (z. B. 1 ExaFLOP). Allerdings ist das gleichzeitige Verbessern der Performance und der Energieeffizienz der Programmausführung mit klassischen Von-Neumann-Architekturen schwierig geworden: Out-of-Order-Scheduling, gleichzeitiges Multi-Threading, komplexe Registerdateien und andere Strukturen stellen die Performance bereit, jedoch auf Kosten hoher Energie. Hier erreichen bestimmte Ausführungsformen gleichzeitig Anforderungen an die Performance und die Energie. Die Leistungs-Performance-Ziele der Exascale-Berechnungen können sowohl hohen Durchsatz als auch geringen Energieverbrauch pro Operation verlangen. Hier stellen bestimmte Ausführungsformen dies dadurch bereit, indem sie für eine große Anzahl von wenig komplexen, energieeffizienten Verarbeitungs- (z. B. Rechen -) Elementen sorgen, die großenteils die Steuerungs-Overheads früherer Prozessor-Bauarten beseitigen. Geleitet von dieser Beobachtung enthalten hier bestimmte Ausführungsformen ein dreidimensionales Array von Verarbeitungselementen, zum Beispiel einen konfigurierbaren dreidimensionalen Beschleuniger (CSA), der z. B. ein Array von Verarbeitungselementen (PEs, Processing Elements) enthält, die durch einen Satz von Lightweight-, Backpressure- (z. B. Kommunikations -) Netzwerken verbunden sind. Ein Beispiel für eine CSA-Kachel wird in 1 gezeigt. Bestimmte Ausführungsformen von Verarbeitungs- (z. B. Berechnungs -) Elementen sind Datenflussoperatoren, z. B. mehrere von einem Datenflussoperator, der nur Eingangsdaten verarbeitet, wenn sowohl (i) die Eingangsdaten beim Datenflussoperator angekommen sind, als auch (ii) Platz zum Speichern der Ausgabedaten vorhanden ist, z. B. findet andernfalls keine Verarbeitung statt. Bestimmte Ausführungsformen (z. B. ein Beschleuniger oder CSA) nutzen keinen getriggerten Befehl.
-
Die 1 veranschaulicht eine Ausführungsform der Beschleunigerkachel 100 eines dreidimensionalen Arrays von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung. Die Beschleunigerkachel 100 kann ein Abschnitt einer größeren Kachel sein. Die Beschleunigerkachel 100 führt einen oder mehrere Datenflussgraphen aus. Ein Datenflussgraph kann sich im Allgemeinen auf eine Beschreibung eines explizit parallelen Programms beziehen, das bei der Kompilierung von sequentiellen Codes entsteht. Hier ermöglichen bestimmte Ausführungsformen (z. B. CSAs), dass Datenflussgraphen direkt auf das CSA-Array konfiguriert werden, statt zum Beispiel in sequentielle Befehlsströme transformiert zu werden. Hier ermöglichen bestimmte Ausführungsformen, dass eine erste (z. B. Art von) Datenflussoperation von einem oder mehreren Verarbeitungselementen (PEs) des dreidimensionalen Arrays durchgeführt wird und dass, zusätzlich oder alternativ, eine zweite (z. B. andere Art von) Datenflussoperation von einer oder mehreren der Netzwerkkommunikationsschaltungen (z. B. Endpunkte) des dreidimensionalen Arrays durchgeführt wird.
-
Die Ableitung eines Datenflussgraphen aus einem sequentiellen Kompilierungsfluss ermöglicht, dass Ausführungsformen eines CSA bekannte Programmiermodelle unterstützen und direkt vorhandenen High Performance Computing (HPC -) Code ausführen (z. B. ohne eine Arbeitstabelle zu verwenden). Die CSA-Verarbeitungselemente (PEs) können energieeffizient sein. In der 1 kann die Speicherschnittstelle 102 mit einem Speicher koppeln (z. B. Speicher 202 in der 2), um zu ermöglichen, dass die Beschleunigerkachel 100 auf Daten für den (z. B. Off-Die -) Speicher zugreift (z. B. lädt und/oder speichert). Die gezeigte Beschleunigerkachel 100 ist ein heterogenes Array, das aus mehreren Arten von PEs besteht, die über ein Interconnect-Netzwerk 104 miteinander gekoppelt sind. Die Beschleunigerkachel 100 kann ein oder mehrere Ganzzahl-Arithmetik-PEs, Fließkomma-Arithmetik-PEs, Kommunikationsschaltungsanordnungen (z. B. Netzwerk-Datenflussendpunktschaltungen) und In-Fabric-Speicher, z. B. als Teil des dreidimensionalen Arrays von Verarbeitungselementen 101, enthalten. Datenflussgraphen (z. B. kompilierte Datenflussgraphen) können zur Ausführung auf der Beschleunigerkachel 100 überlagert werden. In einer Ausführungsform behandelt jedes PE für einen besonderen Datenflussgraphen nur ein oder zwei (z. B. Datenfluss -) Operationen des Graphen. Das Array von PEs kann heterogen sein, z. B. so dass kein PE die vollständige CSA-Datenflussarchitektur unterstützt und/oder ein oder mehrere PEs programmiert (z. B. angepasst) sind, um nur wenige, jedoch hoch effiziente Operationen durchzuführen. Hier erreichen bestimmte Ausführungsformen somit einen Prozessor oder Beschleuniger mit einem Array von Verarbeitungselementen, das im Vergleich zu Roadmap-Architekturen rechnerisch dicht ist und dennoch ungefähr eine Größenordnung der Steigerung der Energieeffizienz und Performance in Bezug auf bereits vorhandene HPC-Angebote erreicht.
-
Hier sorgen bestimmte Ausführungsformen für Performance-Erhöhungen anhand der parallelen Ausführung innerhalb eines (z. B. dichten) dreidimensionalen Arrays von Verarbeitungselementen (z. B. CSA), wobei jedes PE und/oder jede genutzte Netzwerk-Datenflussendpunktschaltung ihre Operationen gleichzeitig durchführen kann, z. B. falls Eingangsdaten verfügbar sind. Die Effizienzerhöhungen können aus der Effizienz jedes PE und/oder jeder Netzwerk-Datenflussendpunktschaltung resultieren, wobei z. B. die Operation (z. B. das Verhalten) jedes PE einmal pro Konfigurations- (z. B. Mapping -) Schritt festgelegt ist und die Ausführung bei lokaler Datenankunft am PE erfolgt, z. B. ohne Berücksichtigung anderer Fabric-Aktivitäten, und/oder wobei die Operation (z. B. das Verhalten) jeder Netzwerk-Datenflussendpunktschaltung variabel (z. B. nicht festgelegt) ist, wenn sie konfiguriert (z. B. abgebildet) wird. In bestimmten Ausführungsformen ist ein PE und/oder eine Netzwerk-Datenflussendpunktschaltung ein Datenflussoperator (z. B. jeweils ein einzelner), zum Beispiel ein Datenflussoperator, der nur Eingangsdaten verarbeitet, wenn sowohl (i) die Eingangsdaten beim Datenflussoperator angekommen sind, als auch (ii) Platz zum Speichern der Ausgabedaten vorhanden ist, z. B. findet andernfalls keine Verarbeitung statt.
-
Hier enthalten bestimmte Ausführungsformen ein dreidimensionales Array von Verarbeitungselementen als einen energieeffizienten und hochperformanten Weg, Nutzeranwendungen zu beschleunigen. In einer Ausführungsform werden Anwendungen auf eine extrem parallele Art und Weise abgebildet. Zum Beispiel können innere Schleifen mehrere Male abgerollt werden, um die Parallelität zu verbessern. Dieser Ansatz kann hohe Performance bereitstellen, z. B. wenn die Auslastung (z. B. die Verwendung) des abgerollten Code hoch ist. Falls es allerdings weniger Code-Wege im abgerollten Schleifenkörper gibt (zum Beispiel ein Ausnahme-Code-Weg, wie der denormalisierte Fließkomma-Modus), dann kann das dreidimensionale Array von Verarbeitungselementen (z. B. seine Fabric-Fläche) verschwendet und der Durchsatz folglich verloren sein.
-
Hier ist eine Ausführungsform zum Reduzieren der Belastung (z. B. auf der Fabric-Fläche) des dreidimensionalen Arrays von Verarbeitungselementen das Zeitmultiplexen (z. B. im Fall von unzureichend genutzten Code-Segmenten). In diesem Modus kann eine einzelne Instanz des weniger genutzten (z. B. kälteren) Code von mehreren Schleifenkörpern gemeinsam genutzt werden, zum Beispiel analog zu einem Funktionsaufruf in einer gemeinsam genutzten Bibliothek. In einer Ausführungsform unterstützen dreidimensionale Arrays (z. B. von Verarbeitungselementen) die direkte Implementierung von Multiplex-Codes. Wenn z. B. allerdings das Multiplexen oder das Demultiplexen in einem dreidimensionalen Array das Auswählen unter vielen und weit entfernten Zielen (z. B. Sharers) einbezieht, kann eine direkte Implementierung unter Verwendung von Datenflussoperatoren (z. B. unter Verwendung der Verarbeitungselemente) in Hinsicht auf Latenzzeit, Durchsatz, Implementierungsfläche und/oder Energie ineffizient sein. Hier beschreiben bestimmte Ausführungsformen Hardware-Mechanismen (z. B. Netzwerkschaltungsanordnungen), die (z. B. High-Radix -) Multiplexen oder Demultiplexen unterstützen. Hier lassen bestimmte Ausführungsformen (z. B. von Netzwerk-Datenflussendpunktschaltungen) die Aggregation von vielen Zielen (z. B. Sharers) mit wenig Hardware-Overhead oder Einfluss auf die Performance zu. Hier ermöglichen bestimmte Ausführungsformen das Kompilieren von sequentiellen Codes (z. B. Legacy) für Parallelarchitekturen in einem dreidimensionalen Array.
-
In einer Ausführungsform werden mehrere Netzwerk-Datenflussendpunktschaltungen als ein einzelner Datenflussoperator kombiniert, wie zum Beispiel mit Bezug auf die 4 nachstehend erörtert wird. Als nicht einschränkende Beispiele werden nachstehend bestimmte (z. B. High- (z. B. 4 - 6 -) Radix -) Datenflussoperatoren aufgelistet.
-
Eine Ausführungsform eines „Pick“-Datenflussoperators ist es, aus mehreren Eingangskanälen Daten (z. B. ein Token) auszuwählen und diese Daten als seine (z. B. einzelne) Ausgabe entsprechend Steuerdaten bereitzustellen. Die Steuerdaten für einen Pick können einen Eingangsselektorwert enthalten. In einer Ausführungsform muss der ausgewählte Eingangskanal seine Daten (z. B. Token) entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder seines Abschnitts einer Datenflussoperation) abzuschließen. In einer Ausführungsform müssen diese nicht ausgewählten Eingangskanäle zusätzlich ihre Daten (z. B. Token) entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder ihres Abschnitts einer Datenflussoperation) abzuschließen.
-
Eine Ausführungsform eines „PickSingleLeg“-Datenflussoperators ist es, Daten (z. B. ein Token) aus mehreren Eingangskanälen auszuwählen und diese Daten an seinem (z. B. einzigen) Ausgang entsprechend Steuerdaten bereitzustellen, jedoch werden in bestimmten Ausführungsformen die nicht ausgewählten Eingangskanäle ignoriert, z. B. müssen diese nicht ausgewählten Eingangskanäle ihre Daten (z. B. Token) nicht entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder ihren Abschnitt einer Datenflussoperation) abzuschließen. Die Steuerdaten für ein PickSingleLeg können einen Eingangsselektorwert enthalten. In einer Ausführungsform muss auch der ausgewählte Eingangskanal seine Daten (z. B. Token) entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder seines Abschnitts einer Datenflussoperation) abzuschließen.
-
Eine Ausführungsform eines „PickAny“-Datenflussoperators ist es, aus mehreren Eingangskanälen das erste (z. B. für die die Operation durchführende Schaltung) verfügbare Datum (z. B. ein Token) auszuwählen und diese Daten als seine (z. B. einzelne) Ausgabe bereitzustellen. In einer Ausführungsform dient PickSingleLeg auch dazu, den Index auszugeben, dessen Daten ausgewählt worden sind (der z. B. angibt, welcher der mehreren Eingangskanäle). In einer Ausführungsform muss der ausgewählte Eingangskanal seine Daten (z. B. Token) entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder seines Abschnitts einer Datenflussoperation) abzuschließen. In bestimmten Ausführungsformen werden die nicht ausgewählten Eingangskanäle (z. B. mit oder ohne Eingangsdaten) ignoriert, z. B. müssen diese nicht ausgewählten Eingangskanäle ihre Daten (z. B. Token) nicht entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder ihres Abschnitts einer Datenflussoperation) abzuschließen. Die Steuerdaten für ein PickAny können einen dem PickAny entsprechenden Wert enthalten, z. B. ohne einen Eingangsselektorwert.
-
Eine Ausführungsform eines „Switch“-Datenflussoperators ist es, Eingangsdaten (z. B. ein einzelnes Eingangsdatum) (z. B. ein Token) zu lenken, um so diese Eingangsdaten für einen oder mehrere (z. B. weniger als alle) Ausgänge entsprechend Steuerdaten bereitzustellen. Die Steuerdaten für einen Switch können einen Ausgangs -/Ausgängeselektorwert oder -werte enthalten. In einer Ausführungsform müssen die Eingangsdaten (z. B. aus einem Eingangskanal) ihre Daten (z. B. Token) entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder ihres Abschnitts einer Datenflussoperation) abzuschließen.
-
Eine Ausführungsform eines „SwitchAny“-Datenflussoperators ist es, Eingangsdaten (z. B. ein einzelnes Eingangsdatum) (z. B. ein Token) zu lenken, um so diese Eingangsdaten für einen oder mehrere (z. B. weniger als alle) Ausgänge, die diese Daten empfangen können, z. B. entsprechend Steuerdaten bereitzustellen. In einer Ausführungsform kann SwitchAny die Eingangsdaten für jeden gekoppelten Ausgangskanal bereitstellen, der Verfügbarkeit (z. B. verfügbaren Speicherplatz) in seinem Eingangspuffer aufweist, z. B. im Netzwerk-Eingangspuffer in der 5. Die Steuerdaten für ein SwitchAny können einen dem SwitchAny entsprechenden Wert enthalten, z. B. ohne einen Ausgangs -/Ausgängeselektorwert oder -werte. In einer Ausführungsform müssen die Eingangsdaten (z. B. aus einem Eingangskanal) ihre Daten (z. B. Token) entfernen (z. B. aussondern) lassen, um zum Beispiel die Durchführung dieser Datenflussoperation (oder ihres Abschnitts einer Datenflussoperation) abzuschließen. In einer Ausführungsform dient SwitchAny auch dazu, den Index (der z. B. angibt, welcher der mehreren Ausgangskanäle) auszugeben, für den es die Eingangsdaten bereitgestellt (z. B. gesendet) hat. SwitchAny kann genutzt werden, um replizierte Sub-Graphen in einem dreidimensionalen Array zu managen, zum Beispiel eine abgerollte Schleife.
-
Hier stellen bestimmte Ausführungsformen somit Performance-Level, die Paradigmenwechsel herbeiführen, und enorme Verbesserungen der Energieeffizienz über eine breite Schicht von bereits vorhandenen Single-Stream- und Parallel-Programmen bereit, und das alles, während sie z. B. bekannte HPC-Programmiermodelle bewahren. Hier können bestimmte Ausführungsformen auf HPC abzielen, so dass die Fließkomma-Energieeffizienz äußerst wichtig ist. Hier liefern bestimmte Ausführungsformen nicht nur überzeugende Verbesserungen der Performance und Energiereduktion, sondern sie liefern diese Steigerungen auch für bereits vorhandene HPC-Programme, die in Mainstream-HPC-Sprachen und für Mainstream-HPC-Frameworks geschrieben sind. Hier stellen bestimmte Ausführungsformen der Architektur (z. B. mit Blick auf die Kompilierung) mehrere Erweiterungen bei der direkten Unterstützung der internen Darstellungen des Steuer-Datenflusses bereit, die von modernen Kompilierern generiert werden. Hier geht es bei bestimmten Ausführungsformen um einen CSA-Datenflusskompilierer, der z. B. C-, C++- und Fortran-Programmiersprachen annehmen kann, um auf eine CSA-Architektur abzuzielen.
-
Die 2 veranschaulicht einen mit einem Speicher 202 gekoppelten (z. B. verbundenen) Hardware-Prozessor 200 gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform sind der Hardware-Prozessor 200 und der Speicher 202 ein Computersystem 201. In bestimmten Ausführungsformen sind einer oder mehrere Beschleuniger ein CSA gemäß dieser Offenbarung. In bestimmten Ausführungsformen sind einer oder mehrere der Kerne in einem Prozessor die Kerne, die hier offenbart werden. Der Hardware-Prozessor 200 (z. B. jeder Kern davon) kann einen Hardware-Decodierer (z. B. Decodiereinheit) und eine Hardware-Ausführungseinheit enthalten. Der Hardware-Prozessor 200 kann Register enthalten. Es sei angemerkt, dass die Figuren hier nicht alle Datenkommunikationskopplungen (z. B. Verbindungen) zeigen können. Ein Durchschnittsfachmann wird verstehen, dass dies dazu dient, bestimmte Details in den Figuren nicht unverständlich zu machen. Es sei angemerkt, dass ein Doppelpfeil in diesen Figuren möglicherweise keine Zwei-Wege-Kommunikation erfordert, zum Beispiel kann er Ein-Weg-Kommunikation angeben (z. B. zu oder aus dieser Komponente oder Einrichtung). Irgendeine oder alle Kombinationen von Kommunikationswegen können hier in bestimmten Ausführungsformen genutzt werden. Der gezeigte Hardware-Prozessor 200 enthält mehrere Kerne (0 bis N, wobei N 1 oder größer sein kann) und Hardware-Beschleuniger (0 bis M, wobei M 1 oder größer sein kann) gemäß Ausführungsformen der Offenbarung. Der Hardware-Prozessor 200 (z. B. der/die Beschleuniger und/oder der/die Kern(e) davon) können mit dem Speicher 202 (z. B. einer Datenspeichereinrichtung) gekoppelt sein. Der Hardware-Decodierer (z. B. des Kerns) kann einen (z. B. einzelnen) Befehl (z. B. einen Makrobefehl) empfangen und den Befehl decodieren, z. B. in Mikrobefehle und/oder Mikrooperationen. Die Hardware-Ausführungseinheit (z. B. des Kerns) kann den decodierten Befehl (z. B. den Makro-Befehl) zum Durchführen von einer Operation oder von Operationen ausführen.
-
Der nachstehende Abschnitt 1 erörtert das Nutzen von Netzwerk-Ressourcen, z. B. von Netzwerk-Kommunikationsschaltungsanordnungen, zum Durchführen von (z. B. Datenfluss -) Operationen. Der nachstehende Abschnitt 2 offenbart Ausführungsformen der CSA-Architektur. Insbesondere werden neuartige Ausführungsformen zur Speicherintegration innerhalb des Datenfluss-Ausführungsmodells offenbart. Der Abschnitt 3 befasst sich eingehend mit den mikroarchitektonischen Details von Ausführungsformen eines CSA. In einer Ausführungsform ist das Hauptziel eines CSA, von Kompilierern produzierte Programme zu unterstützen. Der nachstehende Abschnitt 4 untersucht Ausführungsformen einer CSA-Kompilierungs-Toolchain. Die Vorteile von Ausführungsformen eines CSA werden im Abschnitt 5 mit anderen Architekturen bei der Ausführung von kompilierten Codes verglichen. Schließlich wird im Abschnitt 6 die Performance von Ausführungsformen einer CSA-Mikroarchitektur erörtert, weitere CSA-Details werden im Abschnitt 7 erörtert, und im Abschnitt 8 wird eine Zusammenfassung bereitgestellt.
-
NETZWERK-RESSOURCEN. Z. B. SCHALTUNGSANORDNUNGEN, ZUM DURCHFÜHREN VON (Z. B. DATENFLUSS -) OPERATIONEN
-
In bestimmten Ausführungsformen kommunizieren Verarbeitungselemente (PEs) unter Verwendung dedizierter virtueller Schaltungen, die durch statisches Konfigurieren von (z. B. leitungsvermittelnden) Kommunikationsnetzwerken gebildet werden. Diese virtuellen Schaltungen können flussgesteuert sein und vollständig Backpressure verwenden, z. B. so dass ein PE anhalten wird, falls entweder die Quelle keine Daten hat oder sein Ziel voll ist. Zur Laufzeit können Daten durch die PEs fließen, was den abgebildeten Datenflussgraphen implementiert (z. B. den abgebildeten Algorithmus). Zum Beispiel können Daten aus dem Speicher übertragen werden, über das dreidimensionale Array von Verarbeitungselementen (z. B. seine Fabric-Fläche) und dann zurück hinaus zum Speicher.
-
Solch eine Architektur kann relativ zu herkömmlichen Mehrkernprozessoren bemerkenswerte Performance-Effizienz erreichen: das Berechnen, z. B. in der Form von PEs, kann einfacher und zahlreicher als Kerne sein, und die Kommunikationen können direkt erfolgen, im Gegensatz z. B. zu einer Erweiterung des Speichersystems. Allerdings kann das dreidimensionale Array von Verarbeitungselementen (z. B. seine Fabric-Fläche) auf die Implementierung von vom Kompilierer generierten Ausdrucksbäumen abgestimmt sein, was sich durch wenig Multiplexen oder Demultiplexen auszeichnen kann. Hier erweitern bestimmte Ausführungsformen (z. B. über Netzwerk-Ressourcen, wie zum Beispiel, aber nicht darauf beschränkt, Netzwerk-Datenflussendpunktschaltungen) die Architektur, um das (z. B. High-Radix -) Multiplexen und/oder Demultiplexen zu unterstützen, insbesondere zum Beispiel im Kontext von Funktionsaufrufen.
-
Dreidimensionale Arrays, wie zum Beispiel das dreidimensionale Array 101 von Verarbeitungselementen in der 1, können (z. B. paketvermittelnde) Netzwerke zur Kommunikation verwenden. Hier stellen bestimmte Ausführungsformen Schaltungsanordnungen bereit, um High-Radix-Datenflussoperationen auf diesen Netzwerken zur Kommunikation zu überlagern. Zum Beispiel nutzen bestimmte Ausführungsformen hier das bereits vorhandene Netzwerk zur Kommunikation (z. B. das Interconnect-Netzwerk 104, das mit Bezug auf die 1 beschrieben wird), um Daten-Routing-Fähigkeiten zwischen Verarbeitungselementen und anderen Komponenten des dreidimensionalen Arrays bereitzustellen, erweitern jedoch auch das Netzwerk (z. B. Netzwerkendpunkte), um die Performance und/oder die Steuerung einiger (z. B. weniger als aller) Datenflussoperationen zu unterstützen (z. B. ohne die Verarbeitungselemente zum Durchführen dieser Datenflussoperationen zu nutzen). In einer Ausführungsform werden (z. B. High-Radix -) Datenflussoperationen mit speziellen Hardware-Strukturen (z. B. Netzwerk-Datenflussendpunktschaltungen) innerhalb eines dreidimensionalen Arrays unterstützt, ohne zum Beispiel Verarbeitungsressourcen zu verbrauchen oder die Performance (z. B. der Verarbeitungselemente) zu verschlechtern.
-
In einer Ausführungsform enthält ein leitungsvermittelndes Netzwerk zwischen zwei Punkten (z. B. zwischen einem Erzeuger und einem Verbraucher von Daten) eine dedizierte Kommunikationsleitung zwischen diesen beiden Punkten, wobei zum Beispiel (z. B. physikalische) Switches zwischen den beiden Punkten gesetzt sind, um eine (z. B. exklusive) physikalische Schaltung zwischen den beiden Punkten zu schaffen. In einer Ausführungsform wird ein leitungsvermittelndes Netzwerk zwischen zwei Punkten zu Beginn der Verwendung der Verbindung zwischen den beiden Punkten eingerichtet und durchgehend während der Verwendung der Verbindung aufrechterhalten. In einer anderen Ausführungsform enthält ein paketvermittelndes Netzwerk eine gemeinsam genutzte Kommunikationsleitung (z. B. Kanal) zwischen zwei (oder z. B. mehr) Punkten, wo zum Beispiel Pakete aus unterschiedlichen Verbindungen diese Kommunikationsleitung gemeinsam nutzen (zum Beispiel entsprechend den Daten jedes Pakets geroutet, z. B. im Header eines Pakets, das einen Header und Nutzdaten enthält). Ein Beispiel für ein paketvermittelndes Netzwerk wird nachstehend erörtert, z. B. mit Bezug auf ein Mezzanin-Netzwerk.
-
Die 3 veranschaulicht einen Datenflussgraphen 300 eines Pseudocode-Funktionsaufrufs 301 gemäß Ausführungsformen der Offenbarung. Der Funktionsaufruf 301 dient zum Laden von zwei Eingangsdatenoperanden (angegeben z. B. durch die Zeiger *a bzw. *b) und ihre Multiplikation und dann zur Rückgabe der resultierenden Daten. Diese und andere Funktionen können mehrere Male durchgeführt werden (z. B. in einem Datenflussgraphen). Der Datenflussgraph in der 3 veranschaulicht einen PickAny-Datenflussoperator 302 zum Durchführen der Operation des Auswählens eines Steuerdatums (z. B. eines Index) (zum Beispiel von der Aufrufstelle 302A) und mit dem Copy-Datenflussoperator 304 des Kopierens dieses Steuerdatums (z. B. Index) auf jeden der Folgenden, den ersten Pick-Datenflussoperator 306, den zweiten Pick-Datenflussoperator 306 und den Switch-Datenflussoperator 316. In einer Ausführungsform gibt ein Index (z. B. von PickAny) somit Daten an die gleiche Indexposition ein und aus, z. B. [0, 1 ... M], wobei M eine ganze Zahl ist. Der erste Pick-Datenflussoperator 306 kann dann ein Eingangsdatenelement von mehreren Eingangsdatenelementen 306A entsprechend dem Steuerdatum beziehen und das eine Eingangsdatenelement als (*a) verwenden, um dann den Eingangsdatenwert, der auf *a gespeichert ist, mit dem Lade-Datenflussoperator 310 zu laden. Der zweite Pick-Datenflussoperator 308 kann dann ein Eingangsdatenelement von mehreren Eingangsdatenelementen 308A entsprechend dem Steuerdatum beziehen und das eine Eingangsdatenelement als (*b) verwenden, um dann den Eingangsdatenwert, der auf *b gespeichert ist, mit dem Lade-Datenflussoperator 312 zu laden. Diese beiden Eingangsdatenwerte können dann vom Multiplikations-Datenflussoperator 314 (z. B. als Teil eines Verarbeitungselements) multipliziert werden. Die resultierenden Daten der Multiplikation können dann vom Switch-Datenflussoperator 316 geroutet werden (z. B. zu einem nachgelagerten Verarbeitungselement oder einer anderen Komponente), zum Beispiel zu den Aufrufstellen 316A, zum Beispiel entsprechend dem Steuerdatum (z. B. Index) zum Switch-Datenflussoperator 316.
-
Die 3 ist ein Beispiel für einen Funktionsaufruf, bei dem die Anzahl an Datenflussoperatoren, die zum Managen des Lenkens von Daten (z. B. Tokens) verwendet werden, wichtig sein können, um zum Beispiel die Daten zu und/oder von Aufrufstellen zu lenken. In einem Beispiel können einer oder mehrere der Folgenden, der PickAny-Datenflussoperator 302, der erste Pick-Datenflussoperator 306, der zweite Pick-Datenflussoperator 306 und der Switch-Datenflussoperator 316, genutzt werden, um Daten zu routen (z. B. zu lenken), zum Beispiel wenn es mehrere (z. B. viele) Aufrufstellen gibt. In einer Ausführungsform, bei der es ein (z. B. Haupt -) Ziel der Einführung eines Multiplex- und/oder Demultiplex-Funktionsaufrufs ist, die Implementierungsfläche eines speziellen Datenflussgraphen zu reduzieren, reduzieren hier bestimmte Ausführungsformen (z. B. der Mikroarchitektur) den Flächen-Overhead solcher Multiplex- und/oder Demultiplex-Datenflussgraphen (z. B. Abschnitte davon).
-
Die 4 veranschaulicht ein dreidimensionales Array 401 von Verarbeitungselementen (PEs) mit mehreren Netzwerk-Datenflussendpunktschaltungen (402, 404, 406) gemäß Ausführungsformen der Offenbarung. Das dreidimensionale Array 401 von Verarbeitungselementen kann ein Kommunikations- (z. B. Interconnect -) Netzwerk zwischen Komponenten enthalten, wie zum Beispiel hier erörtert wird. In einer Ausführungsform ist das Kommunikationsnetzwerk eines oder mehrere paketvermittelnde Kommunikationsnetzwerke (z. B. Kanäle davon). In einer Ausführungsform ist das Kommunikationsnetzwerk einer oder mehrere leitungsvermittelnde, statisch konfigurierte Kommunikationskanäle. Zum Beispiel ein Satz von Kanälen, die durch einen Switch miteinander gekoppelt sind (z. B. den Switch 410 in einem ersten Netzwerk und den Switch 411 in einem zweiten Netzwerk). Das erste Netzwerk und das zweite Netzwerk können getrennt oder miteinander gekoppelt sein. Zum Beispiel kann der Switch 410 einen oder mehrere von mehreren (z. B. vier) Datenwegen darin zusammenkoppeln, wie konfiguriert, um z. B. eine Operation entsprechend einem Datenflussgraphen durchzuführen. In einer Ausführungsform ist die Anzahl an Datenwegen irgendeine Vielzahl. Das Verarbeitungselement (z. B. das Verarbeitungselement 408) kann so wie hier offenbart sein, zum Beispiel wie in der 27. Die Beschleunigerkachel 400 enthält eine Speicher -/Cache-Hierarchieschnittstelle 412, z. B. um die Beschleunigerkachel 400 an einen Speicher und/oder Cache anzuschließen. Ein Datenweg kann zu einer anderen Kachel verlaufen oder enden, z. B. an der Kante einer Kachel. Ein Verarbeitungselement kann einen Eingangspuffer (z. B. den Puffer 409) und einen Ausgangspuffer enthalten.
-
Operationen können auf Basis der Verfügbarkeit ihrer Eingänge und dem Status des PE ausgeführt werden. Ein PE kann Operanden von Eingangskanälen erhalten und Ergebnisse an Ausgangskanäle schreiben, obwohl auch der interne Registerzustand verwendet werden kann. Hier enthalten bestimmte Ausführungsformen ein konfigurierbares datenflussgerechtes PE. Die 27 zeigt ein detailliertes Blockschaltbild eines solchen PE: das Ganzzahl-PE. Dieses PE besteht aus mehreren E/A-Puffern, einer ALU (Arithmetik-Logik-Einheit), einem Speicherregister, einigen Befehlsregistern und einem Scheduler. In jedem Zyklus kann der Scheduler einen Befehl zur Ausführung auf Basis der Verfügbarkeit der Eingangs- und Ausgangspuffer und des Status des PE auswählen. Das Resultat der Operation kann dann entweder in einen Ausgangspuffer oder in ein Register (z. B. lokal für das PE) geschrieben werden. Daten, die in einen Ausgangspuffer geschrieben werden, können zur weiteren Verarbeitung zu einem nachgelagerten PE transportiert werden. Diese Art von PE kann äußerst energieeffizient sein, zum Beispiel liest ein PE die Daten aus einem Register, statt Daten aus einer komplexen Multiport-Registerdatei zu lesen. Gleichermaßen können Befehle direkt in einem Register gespeichert werden, statt in einem virtualisierten Befehls-Cache.
-
Die Befehlsregister können während eines speziellen Konfigurationsschritts gesetzt werden. Während dieses Schritts können Zusatz-Steuerleitungen und -zustand zusätzlich zum Inter-PE-Netzwerk verwendet werden, um über die mehreren PEs, die die Fabric umfassen, die Konfiguration zu übertragen. Als Resultat der Parallelität können bestimmte Ausführungsformen solch eines Netzwerks für schnelle Rekonfiguration sorgen, z. B. kann eine Fabric von Kachelgröße in weniger als etwa 10 Mikrosekunden konfiguriert werden.
-
Des Weiteren enthält die gezeigte Beschleunigerkachel 400 das paketvermittelnde Kommunikationsnetzwerk 414, zum Beispiel als Teil eines Mezzanin-Netzwerks, wie z. B. nachstehend beschrieben wird. Hier ermöglichen bestimmte Ausführungsformen (z. B. verteilte) Datenflussoperationen (z. B. Operationen, die Daten nur routen), die auf dem (z. B. innerhalb des) Kommunikationsnetzwerk (und z. B. nicht in dem/den Verarbeitungselement(en)) durchgeführt werden sollen. Als ein Beispiel wird in der 4 eine verteilte Pick-Datenflussoperation eines Datenflussgraphen gezeigt. Insbesondere wird ein verteilter Pick unter Verwendung von drei getrennten Konfigurationen auf drei getrennten (z. B. globalen) Netzwerkendpunkten implementiert (z. B. den Netzwerk-Datenflussendpunktschaltungen (402, 404, 406)). Die Datenflussoperationen können verteilt sein, z. B. mit mehreren Endpunkten, die auf eine koordinierte Art zu konfigurieren sind. Zum Beispiel kann ein Kompilierungswerkzeug die Notwendigkeit der Koordination erkennen. Endpunkte (z. B. Netzwerk-Datenflussendpunktschaltungen) können von mehreren verteilten Operationen gemeinsam genutzt werden, zum Beispiel kann ein Datenflussoperations- (z. B. Pick -) Endpunkt mit mehreren Sends vereinigt werden, die zur Datenflussoperation (z. B. Pick) in Beziehung stehen. Eine verteilte Datenflussoperation (z. B. Pick) kann das gleiche Resultat generieren wie eine nicht verteilte Datenflussoperation (z. B. Pick). In bestimmten Ausführungsformen besteht ein Unterschied zwischen verteilten und nicht verteilten Datenflussoperationen darin, dass verteilte Datenflussoperationen ihre Daten (z. B. Daten, die geroutet werden sollen, die jedoch möglicherweise keine Steuerdaten enthalten) über ein paketvermittelndes Kommunikationsnetzwerk aufweisen, z. B. mit verknüpfter Flusssteuerung und verteilter Koordination. Obwohl unterschiedlich dimensionierte Verarbeitungselemente (PE) gezeigt werden, hat jedes Verarbeitungselement in einer Ausführungsform die gleiche Größe (z. B. Siliciumfläche). In einer Ausführungsform kann auch ein Pufferelement zum Puffern von Daten enthalten sein, z. B. getrennt von einem Verarbeitungselement.
-
Als ein Beispiel: Eine Pick-Datenflussoperation kann mehrere Eingänge aufweisen und einen von ihnen als einen Ausgang lenken (z. B. routen), z. B. wie in der 3. Anstatt ein Verarbeitungselement zu nutzen, um die Pick-Datenflussoperation durchzuführen, kann dies mit einer oder mehreren Netzwerk-Kommunikationsressourcen (z. B. Netzwerk-Datenflussendpunktschaltungen) erreicht werden. Zusätzlich oder alternativ können die Netzwerk-Datenflussendpunktschaltungen Daten zwischen Verarbeitungselementen routen, z. B. damit die Verarbeitungselemente Verarbeitungsoperationen an den Daten durchführen. Hier können Ausführungsformen somit das Kommunikationsnetzwerk nutzen, um Datenflussoperationen durchzuführen (z. B. das Lenken). Zusätzlich oder alternativ können die Netzwerk-Datenflussendpunktschaltungen als ein Mezzanin-Netzwerk auftreten, das nachstehend erörtert wird.
-
In der gezeigten Ausführungsform kann das paketvermittelnde Kommunikationsnetzwerk 414 bestimmte (z. B. Konfigurations -) Kommunikationen handhaben, um zum Beispiel die Verarbeitungselemente und/oder das leitungsvermittelnde Netzwerk (z. B. das Netzwerk 413, das Switches enthalten kann) zu programmieren. In einer Ausführungsform wird ein leitungsvermittelndes Netzwerk konfiguriert (z. B. programmiert), um eine oder mehrere Operationen durchzuführen (z. B. Datenflussoperationen eines Datenflussgraphen).
-
Das paketvermittelnde Kommunikationsnetzwerk 414 enthält mehrere Endpunkte (z. B. die Netzwerk-Datenflussendpunktschaltungen (402, 404, 406)). In einer Ausführungsform enthält jeder Endpunkt einen Adress- oder anderen Indikatorwert, um zu ermöglichen, dass Daten zu und/oder aus diesem Endpunkt geroutet werden, z. B. entsprechend einem Datenpaket (z. B. seinem Header).
-
Zusätzlich oder alternativ dazu, dass es einen oder mehrere der oben Genannten durchführt, kann das paketvermittelnde Kommunikationsnetzwerk 414 Datenflussoperationen durchführen. Die Netzwerk-Datenflussendpunktschaltungen (402, 404, 406) können dazu konfiguriert (z. B. programmiert) werden, eine (z. B. verteilte Pick -) Operation eines Datenflussgraphen durchzuführen. Das Programmieren von Komponenten (z. B. einer Schaltung) wird hier beschrieben. Eine Ausführungsform des Konfigurierens einer Netzwerk-Datenflussendpunktschaltung (z. B. eines Operationskonfigurationsregisters davon) wird mit Bezug auf die 5 erörtert.
-
Als ein Beispiel für eine verteilte Pick-Datenflussoperation können die Netzwerk-Datenflussendpunktschaltungen (402, 404, 406) in der 4 dazu konfiguriert (z. B. programmiert) werden, eine verteilte Pick-Operation eines Datenflussgraphen durchzuführen. Eine Ausführungsform des Konfigurierens einer Netzwerk-Datenflussendpunktschaltung (z. B. eines Operationskonfigurationsregisters davon) wird mit Bezug auf die 5 erörtert. Zusätzlich oder alternativ dazu, dass entfernte Endpunktschaltungen konfiguriert werden, können gemäß dieser Offenbarung auch lokale Endpunktschaltungen konfiguriert werden.
-
Die Netzwerk-Datenflussendpunktschaltung 402 kann dazu konfiguriert werden, Eingangsdaten aus mehreren Quellen (z. B. der Netzwerk-Datenflussendpunktschaltung 404 und der Netzwerk-Datenflussendpunktschaltung 406) zu empfangen und resultierende Daten (z. B. wie in der 3) zum Beispiel entsprechend Steuerdaten auszugeben. Die Netzwerk-Datenflussendpunktschaltung 404 kann dazu konfiguriert werden, Eingangsdaten für die Netzwerk-Datenflussendpunktschaltung 402 bereitzustellen (z. B. zu senden), z. B. bei Empfang der Eingangsdaten aus dem Verarbeitungselement 422. Dies kann in der 4 als Eingang 0 bezeichnet werden. In einer Ausführungsform wird das leitungsvermittelnde Netzwerk dazu konfiguriert (z. B. programmiert), eine dedizierte Kommunikationsleitung zwischen dem Verarbeitungselement 422 und der Netzwerk-Datenflussendpunktschaltung 404 entlang des Weges 424 bereitzustellen. Die Netzwerk-Datenflussendpunktschaltung 406 kann dazu konfiguriert werden, Eingangsdaten für die Netzwerk-Datenflussendpunktschaltung 402 bereitzustellen (z. B. zu senden), z. B. bei Empfang der Eingangsdaten aus dem Verarbeitungselement 420. Dies kann in der 4 als Eingang 1 bezeichnet werden. In einer Ausführungsform wird das leitungsvermittelnde Netzwerk dazu konfiguriert (z. B. programmiert), eine dedizierte Kommunikationsleitung zwischen dem Verarbeitungselement 420 und der Netzwerk-Datenflussendpunktschaltung 406 entlang des Weges 416 bereitzustellen.
-
Wenn die Netzwerk-Datenflussendpunktschaltung 404 Eingangsdaten an die Netzwerk-Datenflussendpunktschaltung 402 übertragen soll (z. B. wenn die Netzwerk-Datenflussendpunktschaltung 402 verfügbaren Speicherplatz für die Daten aufweist und/oder die Netzwerk-Datenflussendpunktschaltung 404 ihre Eingangsdaten aufweist), kann die Netzwerk-Datenflussendpunktschaltung 404 ein Paket generieren (das z. B. die Eingangsdaten und einen Header enthält, um diese Daten über das paketvermittelnde Kommunikationsnetzwerk 414 zur Netzwerk-Datenflussendpunktschaltung 402 zu lenken (z. B. als einen Stopp auf diesem (z. B. Ring -) Netzwerk 414)). Dies wird in der 4 schematisch mit der gestrichelten Linie 426 veranschaulicht. Obwohl das in der 4 gezeigte Beispiel zwei Quellen (z. B. zwei Eingänge) nutzt, können eine einzelne oder irgendeine Vielzahl (z. B. mehr als zwei) von Quellen (z. B. Eingänge) genutzt werden.
-
Wenn die Netzwerk-Datenflussendpunktschaltung 406 Eingangsdaten an die Netzwerk-Datenflussendpunktschaltung 402 übertragen soll (z. B. wenn die Netzwerk-Datenflussendpunktschaltung 402 verfügbaren Speicherplatz für die Daten aufweist und/oder die Netzwerk-Datenflussendpunktschaltung 406 ihre Eingangsdaten aufweist), kann die Netzwerk-Datenflussendpunktschaltung 404 ein Paket generieren (das z. B. die Eingangsdaten und einen Header enthält, um diese Daten über das paketvermittelnden Kommunikationsnetzwerk 414 zur Netzwerk-Datenflussendpunktschaltung 402 zu lenken (z. B. als einen Stopp auf diesem (z. B. Ring -) Netzwerk 414)). Dies wird in der 4 schematisch mit der gestrichelten Linie 418 veranschaulicht. Obwohl ein Maschennetzwerk gezeigt wird, können andere Netzwerktopologien verwendet werden.
-
Die Netzwerk-Datenflussendpunktschaltung 402 kann dann (z. B. bei Empfang des Eingangs 0 aus der Netzwerk-Datenflussendpunktschaltung 404, des Eingangs 1 aus der Netzwerk-Datenflussendpunktschaltung 406 und/oder von Steuerdaten) die programmierte Datenflussoperation durchführen (z. B. eine Pick-Operation in diesem Beispiel). Die Netzwerk-Datenflussendpunktschaltung 402 kann dann die entsprechenden resultierenden Daten aus der Operation ausgeben, z. B. an das Verarbeitungselement 408 in der 4. In einer Ausführungsform wird das leitungsvermittelnde Netzwerk dazu konfiguriert (z. B. programmiert), eine dedizierte Kommunikationsleitung zwischen dem Verarbeitungselement 408 (z. B. einem Puffer davon) und der Netzwerk-Datenflussendpunktschaltung 402 entlang des Weges 428 bereitzustellen. Ein weiteres Beispiel einer verteilten Pick-Operation wird nachstehend mit Bezug auf die 17 - 19 erörtert.
-
In einer Ausführungsform kommen die Steuerdaten zum Durchführen einer Operation (z. B. der Pick-Operation) aus anderen Komponenten des dreidimensionalen Arrays, z. B. einem Verarbeitungselement oder über das Netzwerk. Ein Beispiel dafür wird nachstehend mit Bezug auf die 5 erörtert. Es sei angemerkt, dass der Pick-Operator schematisch im Endpunkt 402 gezeigt wird und möglicherweise keine Multiplexer-Schaltung ist, siehe zum Beispiel die nachstehende Erörterung der Netzwerk-Datenflussendpunktschaltung 500 in der 5.
-
In bestimmten Ausführungsformen kann ein Datenflussgraph aufweisen, dass bestimmte Operationen von einem Verarbeitungselement und bestimmte Operationen von einem Kommunikationsnetzwerk (z. B. einer Netzwerk-Datenflussendpunktschaltung oder -schaltungen) durchgeführt werden.
-
Die 5 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung 500 gemäß Ausführungsformen der Offenbarung. Obwohl mehrere Komponenten in der Netzwerk-Datenflussendpunktschaltung 500 veranschaulicht werden, können eine oder mehrere Instanzen jeder Komponente in einer einzelnen Netzwerk-Datenflussendpunktschaltung genutzt werden. Eine Ausführungsform einer Netzwerk-Datenflussendpunktschaltung kann irgendwelche (z. B. nicht alle) der Komponenten in der 5 enthalten.
-
Die 5 zeigt die Mikroarchitektur einer (z. B. Mezzanin -) Netzwerkschnittstelle, die Ausführungsformen von Hauptdaten- (durchgezogene Linie) und Steuerdaten- (punktierte Linie) Wegen zeigt. Diese Mikroarchitektur stellt einen Konfigurationsspeicher und -Scheduler bereit, um (z. B. High-Radix -) Datenflussoperatoren zu ermöglichen. Hier enthalten bestimmte Ausführungsformen Datenwege zum Scheduler, um Zweigauswahl und -beschreibung zu ermöglichen. Die 5 zeigt eine High-Level-Mikroarchitektur eines Netzwerk- (z. B. Mezzanin -) Endpunkts (z. B. einen Stopp), der ein Element eines Ringnetzwerks für den Kontext sein kann. Um (z. B. High-Radix -) Datenflussoperationen zu unterstützen, soll die Konfiguration des Endpunkts (z. B. der Operationskonfigurationsspeicher 526) Konfigurationen beinhalten, die mehrere Netzwerk-Kanäle (z. B. virtuelle) untersuchen (z. B. im Gegensatz zu einzelnen virtuellen Kanälen in einer Basisimplementierung). Bestimmte Ausführungsformen der Netzwerk-Datenflussendpunktschaltung 500 enthalten Datenwege vom Eingang und zum Ausgang, um die Auswahl (z. B. Pick- und Switch-Operationsarten) zu steuern und/oder um die Wahl zu beschreiben, die vom Scheduler im Fall von PickAny-Datenflussoperatoren oder SwitchAny-Datenflussoperatoren getroffen wird. Flusssteuerungs- und Backpressure-Verhalten können in jedem Kommunikationskanal genutzt werden, z. B. in einem (z. B. paketvermittelnden Kommunikations -) Netzwerk und einem (z. B. leitungsvermittelnden) Netzwerk (z. B. in der Fabric eines dreidimensionalen Arrays von Verarbeitungselementen).
-
Als eine Beschreibung einer Ausführungsform der Mikroarchitektur: Ein Pick-Datenflussoperator kann dazu fungieren, einen Ausgang der resultierenden Daten aus mehreren Eingängen von Eingangsdaten zu picken, z. B. auf Basis der Steuerdaten. Eine Netzwerk-Datenflussendpunktschaltung 500 kann dazu konfiguriert werden, einen von dem/den dreidimensionalen Array-Eingangspuffer(n) 502 der Schaltung 500 (z. B. Daten aus der Fabric, die Steuerdaten sind) als so zu betrachten, dass er unter mehreren Eingangsdatenelementen, die in dem/den Netzwerks-Eingangspuffer(n) 524 der Schaltung 500 gespeichert sind, auswählt, um die resultierenden Daten zum dreidimensionalen Array-Ausgangspuffer 508 der Schaltung 500 zu lenken. Somit können der/die Netzwerk-Eingangspuffer 524 als Eingänge zu einem virtuellen Multiplexer, der dreidimensionale Array-Eingangspuffer 502 als die Multiplexerauswahl und der dreidimensionale Array-Ausgangspuffer 508 als der Multiplexerausgang gedacht sein. In einer Ausführungsform ist der Scheduler 528 dafür sensibilisiert (z. B. wie durch eine Operationskonfiguration im Speicher 526 programmiert), den entsprechenden Netzwerk-Eingangskanal zu untersuchen, wenn ein (z. B. Steuerdaten -) Wert detektiert wird und/oder im dreidimensionalen Array-Eingangspuffer 502 auftaucht. Wenn Daten in diesem Kanal verfügbar sind, werden sie aus dem Netzwerk-Eingangspuffer 524 entfernt und in den dreidimensionalen Array-Ausgangspuffer 508 bewegt. Sowohl die Steuerbits der Eingänge als des Ausgangs können dann aktualisiert werden, um das Übertragen von Daten zu reflektieren. Dies kann dazu führen, dass Steuerfluss-Tokens oder Credits im verknüpften Netzwerk verbreitet werden. In bestimmten Ausführungsformen können alle Eingänge (z. B. Steuer- oder Daten -) lokal oder über das Netzwerk auftauchen.
-
Anfangs scheint es möglicherweise, als behindere die Verwendung von paketvermittelnden Netzwerken zum Implementieren der (z. B. High-Radix-Abstufungs -) Operatoren von Multiplex- und/oder Demultiplex-Codes die Performance. Zum Beispiel wird in einer Ausführungsform ein paketvermittelndes Netzwerk im Allgemeinen gemeinsam genutzt und die Datenflussgraphen des Aufrufers und des Aufgerufenen können weit entfernt voneinander sein. Es sei allerdings daran erinnert, dass in bestimmten Ausführungsformen der Zweck, Multiplexen und/oder Demultiplexen zu unterstützen, ist, die Fläche zu reduzieren, die durch selten genutzte Codewege innerhalb eines Datenflussoperators (z. B. dem dreidimensionalen Array) verbraucht wird. Somit reduzieren bestimmte Ausführungsformen hier die Fläche und vermeiden den Verbrauch von teureren Fabric-Ressourcen, wie zum Beispiel von PEs, ohne z. B. (wesentlich) die Fläche und die Effizienz einzelner PEs beim Unterstützen dieser (z. B. seltenen) Operationen zu beeinflussen.
-
Nun bezugnehmend auf ein weiteres Detail der 5: Die gezeigte Netzwerk-Datenflussendpunktschaltung 500 enthält einen dreidimensionalen Array- (z. B. Fabric -) Eingangspuffer 502, zum Beispiel um Daten (z. B. Steuerdaten) aus einem (z. B. leitungsvermittelnden) Netzwerk einzugeben. Wie oben angegeben ist, können sich mehrere dreidimensionale Array- (z. B. Fabric -) Eingangspuffer in einer Netzwerk-Datenflussendpunktschaltung befinden, obwohl ein einzelner dreidimensionaler Array- (z. B. Fabric -) Eingangspuffer 502 gezeigt wird. In einer Ausführungsform dient der dreidimensionale Array- (z. B. Fabric -) Eingangspuffer 502 zum Empfangen von Daten (z. B. Steuerdaten) aus einem Kommunikationsnetzwerk eines dreidimensionalen Arrays (z. B. eines dreidimensionalen Arrays von Verarbeitungselementen), zum Beispiel aus einem oder mehreren vom Netzwerk 504 und Netzwerk 506. In einer Ausführungsform ist das Netzwerk 504 ein Teil des Netzwerks 413 in der 4.
-
Die gezeigte Netzwerk-Datenflussendpunktschaltung 500 enthält einen dreidimensionalen Array- (z. B. Fabric -) Ausgangspuffer 508, zum Beispiel um Daten (z. B. Steuerdaten) an ein (z. B. leitungsvermittelnden) Netzwerk auszugeben. Wie oben angegeben ist, können sich mehrere dreidimensionale Array- (z. B. Fabric -) Ausgangspuffer in einer Netzwerk-Datenflussendpunktschaltung befinden, obwohl ein einzelner dreidimensionaler Array- (z. B. Fabric -) Ausgangspuffer 508 gezeigt wird. In einer Ausführungsform dient der dreidimensionale Array- (z. B. Fabric -) Ausgangspuffer 508 zum Senden (z. B. Übertragen) von Daten (z. B. Steuerdaten) auf ein Kommunikationsnetzwerk eines dreidimensionalen Arrays (z. B. eines dreidimensionalen Arrays von Verarbeitungselementen), zum Beispiel auf eines oder mehrere vom Netzwerk 510 und Netzwerk 512. In einer Ausführungsform ist das Netzwerk 510 ein Teil des Netzwerks 413 in der 4.
-
Zusätzlich oder alternativ kann die Netzwerk-Datenflussendpunktschaltung 500 mit einem anderen Netzwerk 514 gekoppelt sein, z. B. einem paketvermittelnden Netzwerk. Ein anderes Netzwerk 514, z. B. ein paketvermittelndes Netzwerk, kann verwendet werden, um Daten (z. B. Eingangs- und/oder resultierende) zu Verarbeitungselementen oder anderen Komponenten eines dreidimensionalen Arrays zu übertragen (z. B. zu senden oder zu empfangen) und/oder um ein oder mehrere Eingangsdaten oder resultierende Daten zu übertragen. In einer Ausführungsform ist das Netzwerk 514 ein Teil des paketvermittelnden Kommunikationsnetzwerks 414 in der 4, z. B. ein Zeitmultiplex-Netzwerk.
-
Der Netzwerkpuffer 518 (z. B. ein oder mehrere Register) kann ein Stopp auf einem (z. B. Ring -) Netzwerk 514 sein, um zum Beispiel Daten aus dem Netzwerk 514 zu empfangen.
-
Die gezeigte Netzwerk-Datenflussendpunktschaltung 500 enthält einen Netzwerk-Ausgangspuffer 522, zum Beispiel um Daten (z. B. resultierende Daten) an ein (z. B. paketvermittelndes) Netzwerk auszugeben. Wie oben angegeben ist, können sich mehrere Netzwerk-Ausgangspuffer in einer Netzwerk-Datenflussendpunktschaltung befinden, obwohl ein einzelner Netzwerk-Ausgangspuffer 522 gezeigt wird. In einer Ausführungsform dient der Netzwerk-Ausgangspuffer 522 zum Senden (z. B. Übertragen) von Daten (z. B. resultierenden Daten) auf ein Kommunikationsnetzwerk eines dreidimensionalen Arrays (z. B. eines dreidimensionalen Arrays von Verarbeitungselementen), zum Beispiel auf das Netzwerk 514. In einer Ausführungsform ist das Netzwerk 514 ein Teil des paketvermittelnden Netzwerks 414 in der 4. In bestimmten Ausführungsformen dient der Netzwerk-Ausgangspuffer 522 zum Ausgeben von Daten (z. B. aus dem dreidimensionalen Array-Eingangspuffer 502) zum (z. B. paketvermittelnden) Netzwerk 514, die zum Beispiel zu anderen Komponenten (z. B. (einer) anderen Netzwerk-Datenflussendpunktschaltung(en)) geroutet (z. B. gelenkt) werden sollen.
-
Die gezeigte Netzwerk-Datenflussendpunktschaltung 500 enthält einen Netzwerk-Eingangspuffer 522, um zum Beispiel Daten (z. B. eingegebene Daten) aus einem (z. B. paketvermittelnden) Netzwerk einzugeben. Wie oben angegeben ist, können sich mehrere Netzwerk-Eingangspuffer in einer Netzwerk-Datenflussendpunktschaltung befinden, obwohl ein einzelner Netzwerk-Eingangspuffer 524 gezeigt wird. In einer Ausführungsform dient der Netzwerk-Eingangspuffer 524 zum Empfangen (z. B. Übertragen) von Daten (z. B. Eingangsdaten) aus einem Kommunikationsnetzwerk eines dreidimensionalen Arrays (z. B. eines dreidimensionalen Arrays von Verarbeitungselementen), zum Beispiel aus dem Netzwerk 514. In einer Ausführungsform ist das Netzwerk 514 ein Teil des paketvermittelnden Netzwerks 414 in der 4. In bestimmten Ausführungsformen dient der Netzwerk-Eingangspuffer 524 zum Eingeben von Daten (z. B. aus dem dreidimensionalen Array-Eingangspuffer 502) aus dem (z. B. paketvermittelnden) Netzwerk 514, die zum Beispiel aus anderen Komponenten (z. B. (einer) anderen Netzwerk-Datenflussendpunktschaltung(en)) dorthin (z. B. in den dreidimensionalen Array-Ausgangspuffer 508) geroutet (z. B. gelenkt) werden sollen.
-
In einer Ausführungsform beinhaltet das Datenformat (z. B. der Daten auf dem Netzwerk 514) ein Paket mit Daten und einem Header (z. B. mit dem Ziel dieser Daten). In einer Ausführungsform beinhaltet das Datenformat (z. B. der Daten auf dem Netzwerk 504 und/oder 506) nur die Daten (z. B. kein Paket mit Daten und einem Header (z. B. mit dem Ziel dieser Daten)). Die Netzwerk-Datenflussendpunktschaltung 500 kann einem Paket einen Header (oder andere Daten) hinzufügen (z. B. Daten, die aus der Schaltung 500 ausgegeben werden) oder daraus entfernen (z. B. Daten, die in die Schaltung 500 eingegeben werden). Die Kopplung 520 (z. B. die Leitung) kann Daten, die vom Netzwerk 514 (z. B. vom Netzwerkpuffer 518) empfangen worden sind, zum Netzwerk-Eingangspuffer 524 und/oder Multiplexer 516 senden. Der Multiplexer 516 kann Daten aus dem Netzwerkpuffer 518 oder aus dem Netzwerk-Ausgangspuffer 522 ausgeben (z. B. über ein Steuersignal aus dem Scheduler 528). In einer Ausführungsform sind ein oder mehrere der Multiplexer 516 oder Netzwerkpuffer 518 Komponenten, die getrennt von der Netzwerk-Datenflussendpunktschaltung 500 sind. Ein Puffer kann mehrere (z. B. diskrete) Einträge enthalten, zum Beispiel mehrere Register.
-
In einer Ausführungsform wird der Operationskonfigurationsspeicher 526 (z. B. ein oder mehrere Register) während der Konfiguration (z. B. dem Mapping) geladen und spezifiziert die spezielle Operation (oder Operationen), die diese Netzwerk-Datenflussendpunktschaltung 500 (z. B. nicht ein Verarbeitungselement eines dreidimensionalen Array) durchführen soll (z. B. Datenlenkoperationen im Gegensatz zu logischen und/oder arithmetischen Operationen). Die Aktivität des/der Puffer(s) (z. B. 502, 508, 522 und/oder 524) kann durch diese Operation gesteuert werden (z. B. vom Scheduler 528 gesteuert werden). Der Scheduler 528 kann eine Operation oder Operationen der Netzwerk-Datenflussendpunktschaltung 500 einplanen, zum Beispiel wann (z. B. alle) Eingangs- (z. B. Nutz -) Daten und/oder Steuerdaten ankommen. Punktlinien zum und vom Scheduler 528 geben Wege an, die zum Steuern von Daten genutzt werden können, z. B. zum und/oder oder vom Scheduler 528. Der Scheduler kann auch den Multiplexer 516 steuern, z. B. um Daten zu und/oder von der Netzwerk-Datenflussendpunktschaltung 500 und dem Netzwerk 514 zu lenken.
-
Mit Bezug auf die verteilte Pick-Operation in der 4 oben kann die Netzwerk-Datenflussendpunktschaltung 402 dazu konfiguriert werden (z. B. als eine Operation in ihrem Operationskonfigurationsregister 526, wie in der 5), Eingangsdaten aus jeder von der Netzwerk-Datenflussendpunktschaltung 404 und der Netzwerk-Datenflussendpunktschaltung 406 zu empfangen (z. B. in (zwei Speicherplätzen in) ihrem Netzwerk-Eingangspuffer 524, wie in der 5) und resultierende Daten auszugeben (z. B. aus ihrem dreidimensionalen Array-Ausgangspuffer 508, wie in der 5), zum Beispiel entsprechend Steuerdaten (z. B. in ihrem dreidimensionalen Array-Eingangspuffer 502, wie in der 5). Die Netzwerk-Datenflussendpunktschaltung 404 kann dazu konfiguriert werden (z. B. als eine Operation in ihrem Operationskonfigurationsregister 526, wie in der 5), Eingangsdaten für die Netzwerk-Datenflussendpunktschaltung 402 bereitzustellen (z. B. über den Netzwerk-Ausgangspuffer 522 der Schaltung 404 zu senden, wie in der 5), z. B. bei Empfang (z. B. im dreidimensionalen Array-Eingangspuffer 502 der Schaltung 404, wie in der 5) der Eingangsdaten aus dem Verarbeitungselement 422. Dies kann in der 4 als Eingang 0 bezeichnet werden. In einer Ausführungsform wird das leitungsvermittelnde Netzwerk dazu konfiguriert (z. B. programmiert), eine dedizierte Kommunikationsleitung zwischen dem Verarbeitungselement 422 und der Netzwerk-Datenflussendpunktschaltung 404 entlang des Weges 424 bereitzustellen. Die Netzwerk-Datenflussendpunktschaltung 404 kann ein Header-Paket mit den empfangenen Daten enthalten (z. B. hinzufügen) (z. B. in ihrem Netzwerk-Ausgangspuffer 522, wie in der 5), um das Paket (z. B. Eingangsdaten) zur Netzwerk-Datenflussendpunktschaltung 402 zu lenken. Die Netzwerk-Datenflussendpunktschaltung 406 kann dazu konfiguriert werden (z. B. als eine Operation in ihrem Operationskonfigurationsregister 526, wie in der 5), Eingangsdaten für die Netzwerk-Datenflussendpunktschaltung 402 bereitzustellen (z. B. über den Netzwerk-Ausgangspuffer 522 der Schaltung 406 zu senden, wie in der 5), z. B. bei Empfang (z. B. im dreidimensionalen Array-Eingangspuffer 502 der Schaltung 406, wie in der 5) der Eingangsdaten aus dem Verarbeitungselement 420. Dies kann in der 4 als Eingang 1 bezeichnet werden. In einer Ausführungsform wird das leitungsvermittelnde Netzwerk dazu konfiguriert (z. B. programmiert), eine dedizierte Kommunikationsleitung zwischen dem Verarbeitungselement 420 und der Netzwerk-Datenflussendpunktschaltung 406 entlang des Weges 416 bereitzustellen. Die Netzwerk-Datenflussendpunktschaltung 406 kann ein Header-Paket mit den empfangenen Daten enthalten (z. B. hinzufügen) (z. B. in ihrem Netzwerk-Ausgangspuffer 522, wie in der 5), um das Paket (z. B. Eingangsdaten) zur Netzwerk-Datenflussendpunktschaltung 402 zu lenken.
-
Wenn die Netzwerk-Datenflussendpunktschaltung 404 Eingangsdaten an die Netzwerk-Datenflussendpunktschaltung 402 übertragen soll (z. B. wenn die Netzwerk-Datenflussendpunktschaltung 402 verfügbaren Speicherplatz für die Daten aufweist und/oder die Netzwerk-Datenflussendpunktschaltung 404 ihre Eingangsdaten aufweist), kann die Netzwerk-Datenflussendpunktschaltung 404 ein Paket generieren (das z. B. die Eingangsdaten und einen Header enthält, um diese Daten über das paketvermittelnde Kommunikationsnetzwerk 414 zur Netzwerk-Datenflussendpunktschaltung 402 zu lenken (z. B. als einen Stopp auf diesem (z. B. Ring -) Netzwerk)). Dies wird in der 4 schematisch mit der gestrichelten Linie 426 veranschaulicht. Das Netzwerk 414 wird schematisch mit mehreren punktierten Kästen in der 4 gezeigt. Das Netzwerk 414 kann einen Netzwerk-Controller 414A enthalten, z. B. um den Eingang und/oder den Ausgang von Daten auf dem Netzwerk 414A zu managen.
-
Wenn die Netzwerk-Datenflussendpunktschaltung 406 Eingangsdaten an die Netzwerk-Datenflussendpunktschaltung 402 übertragen soll (z. B. wenn die Netzwerk-Datenflussendpunktschaltung 402 verfügbaren Speicherplatz für die Daten aufweist und/oder die Netzwerk-Datenflussendpunktschaltung 406 ihre Eingangsdaten aufweist), kann die Netzwerk-Datenflussendpunktschaltung 404 ein Paket generieren (das z. B. die Eingangsdaten und einen Header enthält, um diese Daten über das paketvermittelnde Kommunikationsnetzwerk 414 zur Netzwerk-Datenflussendpunktschaltung 402 zu lenken (z. B. als einen Stopp auf diesem (z. B. Ring -) Netzwerk)). Dies wird in der 4 schematisch mit der gestrichelten Linie 418 veranschaulicht.
-
Die Netzwerk-Datenflussendpunktschaltung 402 kann dann (z. B. bei Empfang des Eingangs 0 aus der Netzwerk-Datenflussendpunktschaltung 404 in dem/den Netzwerk-Eingangspuffer(n) der Schaltung 402, des Eingangs 1 aus der Netzwerk-Datenflussendpunktschaltung 406 in dem/den Netzwerk-Eingangspuffer(n) der Schaltung 402 und/oder von Steuerdaten aus dem Verarbeitungselement 408 im dreidimensionalen Array-Eingangspuffer der Schaltung 402) die programmierte Datenflussoperation durchführen (z. B. eine Pick-Operation in diesem Beispiel). Die Netzwerk-Datenflussendpunktschaltung 402 kann dann die entsprechenden resultierenden Daten aus der Operation ausgeben, z. B. an das Verarbeitungselement 408 in der 4. In einer Ausführungsform wird das leitungsvermittelnde Netzwerk dazu konfiguriert (z. B. programmiert), eine dedizierte Kommunikationsleitung zwischen dem Verarbeitungselement 408 (z. B. einem Puffer davon) und der Netzwerk-Datenflussendpunktschaltung 402 entlang des Weges 428 bereitzustellen. Ein weiteres Beispiel einer verteilten Pick-Operation wird nachstehend mit Bezug auf die 17 - 19 erörtert. Die Puffer in der 4 können die kleinen, nicht benannten Kästen in jedem PE sein.
-
Die nachstehenden 6 - 8 beinhalten beispielhafte Datenformate, jedoch können andere Datenformate genutzt werden. Eines oder mehrere Felder können in einem Datenformat (z. B. in einem Paket) enthalten sein. Das Datenformat kann von Netzwerk-Datenflussendpunktschaltungen verwendet werden, z. B. um Daten zwischen einer ersten Komponente zu übertragen (z. B. zu senden und/oder zu empfangen) (z. B. zwischen einer ersten Netzwerk-Datenflussendpunktschaltung und einer zweiten Netzwerk-Datenflussendpunktschaltung, Komponente eines dreidimensionalen Arrays usw.).
-
Die 6 veranschaulicht Datenformate für eine Send-Operation 602 und eine Receive-Operation 604 gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform sind die Send-Operation 602 und die Receive-Operation 604 Datenformate von Daten, die auf einem paketvermittelnden Kommunikationsnetzwerk übertragen werden. Das gezeigte Send-Operationsdatenformat 602 enthält ein Zielfeld 602A (das z. B. angibt, zu welcher Komponente in einem Netzwerk die Daten gesendet werden sollen), ein Kanalfeld 602B (das z. B. angibt, auf welchem Kanal im Netzwerk die Daten gesendet werden sollen) und ein Eingangsfeld 602C (z. B. die Nutz- oder Eingangsdaten, die gesendet werden sollen). Die gezeigte Receive-Operation 604 enthält ein Ausgangsfeld, das z. B. ebenfalls ein Zielfeld (nicht gezeigt) enthalten kann. Diese Datenformate können (z. B. für Paket(e)) verwendet werden, um das Bewegen von Daten in und aus Komponenten zu handhaben. Diese Konfigurationen können trennbar sein und/oder parallel geschehen. Diese Konfigurationen können getrennte Ressourcen verwenden. Der Begriff Kanal kann sich im Allgemeinen auf die mit der Anforderung verknüpften Kommunikationsressourcen beziehen (z. B. in einer Management-Hardware). Die Verknüpfung von Konfigurations- und Warteschlangenmanagement-Hardware kann explizit sein.
-
Die 7 veranschaulicht ein anderes Datenformat für eine Send-Operation 702 gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform ist die Send-Operation 702 ein Datenformat von Daten, die auf einem paketvermittelnden Kommunikationsnetzwerk übertragen werden. Das gezeigte Send-Operationsdatenformat 702 enthält ein Typfeld (das z. B. verwendet wird, um spezielle Steuerpakete zu annotieren, wie zum Beispiel, aber nicht darauf beschränkt, Konfigurations-, Extraktions- oder Ausnahmepakete), ein Zielfeld 702B (das z. B. angibt, zu welcher Komponente in einem Netzwerk die Daten gesendet werden sollen), ein Kanalfeld 702C (das z. B. angibt, auf welchem Kanal im Netzwerk die Daten gesendet werden sollen) und ein Eingangsfeld 702D (z. B. die Nutz- oder Eingangsdaten, die gesendet werden sollen).
-
Die 8 veranschaulicht Konfigurationsdatenformate zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine Send- (z. B. Switch -) Operation 802 und eine Receive- (z. B. Pick -) Operation 804 gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform sind die Send-Operation 802 und die Receive-Operation 804 Konfigurationsdatenformate für Daten, die auf einem paketvermittelnden Kommunikationsnetzwerk übertragen werden sollen, zum Beispiel zwischen Netzwerk-Datenflussendpunktschaltungen. Das gezeigte Send-Operationskonfigurationsdatenformat 802 enthält ein Zielfeld 802A (das z. B. angibt, zu welcher/welchen Komponente(n) in einem Netzwerk die (Eingangs -) Daten gesendet werden sollen), ein Kanalfeld 802B (das z. B. angibt, auf welchem Kanal im Netzwerk die (Eingangs -) Daten gesendet werden sollen), ein Eingangsfeld 802C (zum Beispiel einen Identifizierer der Komponente(n), die die Eingangsdaten senden sollen, z. B. den Satz von Eingängen im (z. B. Fabric-Eingangs -) Puffer, gegenüber denen dieses Element empfindlich ist) und ein Operationsfeld 802D (das z. B. angibt, welche von mehreren Operationen durchgeführt werden sollen). In einer Ausführungsform ist die (z. B. abgehende) Operation eine von einer Switch- oder SwitchAny-Datenflussoperation, die z. B. einem (z. B. dem gleichen) Datenflussoperator eines Datenflussgraphen entspricht.
-
Das gezeigte Receive-Operationskonfigurationsdatenformat 804 enthält ein Ausgangsfeld 804A (das z. B. angibt, zu welcher/welchen Komponente(n) in einem Netzwerk die (resultierenden) Daten gesendet werden sollen), ein Eingangsfeld 804B (z. B. einen Identifizierer der Komponente(n), die die Eingangsdaten senden sollen) und ein Operationsfeld 804C (das z. B. angibt, welche der mehreren Operationen durchgeführt werden sollen). In einer Ausführungsform ist die (z. B. eingehende) Operation eine von einer Pick-, PickSingleLeg-, PickAny- oder Merge-Datenflussoperation, die z. B. einem (z. B. dem gleichen) Datenflussoperator eines Datenflussgraphen entspricht. In einer Ausführungsform ist eine Merge-Datenflussoperation ein Pick, der alle Operanden anfordert und aus der Warteschlange austrägt (z. B. mit der Ausgangsendpunkt-Empfangssteuerung).
-
Ein hier genutztes Konfigurationsdatenformat kann eines oder mehrere der hier beschriebenen Felder enthalten, z. B. in irgendeiner Reihenfolge.
-
Die 9 veranschaulicht ein Konfigurationsdatenformat 902 zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine Send-Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung 900 annotiert werden, gemäß Ausführungsformen der Offenbarung. Das gezeigte Send-Operationskonfigurationsdatenformat 902 enthält ein Zielfeld 902A (das z. B. angibt, zu welcher Komponente in einem Netzwerk die Daten gesendet werden sollen), ein Kanalfeld 902B (das z. B. angibt, auf welchem Kanal im (paketvermittelnden) Netzwerk die Daten gesendet werden sollen) und ein Eingangsfeld 602C (z. B. einen Identifizierer der Komponente(n), die die Eingangsdaten senden soll). In einer Ausführungsform dient die Schaltung 900 (z. B. Netzwerk-Datenflussendpunktschaltung) zum Empfangen eines Datenpakets im Datenformat des Send-Operationskonfigurationsdatenformats 902, wobei zum Beispiel der Zielort angibt, zu welcher Schaltung von mehreren Schaltungen das Resultat gesendet werden soll, der Kanal angibt, auf welchem Kanal des (paketvermittelnden) Netzwerks die Daten gesendet werden sollen, und der Eingang die Schaltung von mehreren Schaltungen ist, aus der die Eingangsdaten empfangen werden sollen. Das AND-Gatter 904 dient dazu, zu ermöglichen, dass die Operation durchgeführt wird, wenn sowohl die Eingangsdaten verfügbar sind als auch der Credit-Status ein Ja ist (was zum Beispiel das Abhängigkeits-Token angibt), was angibt, dass Platz für die zu speichernden Ausgangsdaten ist, z. B. in einem Puffer des Ziels. In bestimmten Ausführungsformen wird jede Operation mit ihren Anforderungen (z. B. Eingänge, Ausgänge und Steuerung) annotiert und, falls alle Anforderungen erfüllt sind, ist die Konfiguration durch die Schaltung (z. B. die Netzwerk-Datenflussendpunktschaltung) „durchführbar“.
-
Die 10 veranschaulicht ein Konfigurationsdatenformat 1002 zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine ausgewählte (z. B. Send -) Operation mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung 1000 annotiert werden, gemäß Ausführungsformen der Offenbarung. Das gezeigte (z. B. Send -) Operationskonfigurationsdatenformat 1002 enthält ein Zielfeld 1002A (das z. B. angibt, zu welcher/welchen Komponente(n) in einem Netzwerk die (Eingangs -) Daten gesendet werden sollen), ein Kanalfeld 1002B (das z. B. angibt, auf welchem Kanal im Netzwerk die (Eingangs -) Daten gesendet werden sollen), ein Eingangsfeld 1002C (z. B. einen Identifizierer der Komponente(n), die die Eingangsdaten senden sollen) und ein Operationsfeld 1002D (das z. B. angibt, welche von mehreren Operationen durchgeführt werden sollen und/oder die Quelle der Steuerdaten für diese Operation). In einer Ausführungsform ist die (z. B. abgehende) Operation eine von einer Send-, Switch- oder SwitchAny-Datenflussoperation, die z. B. einem (z. B. dem gleichen) Datenflussoperator eines Datenflussgraphen entspricht.
-
In einer Ausführungsform dient die Schaltung 1000 (z. B. die Netzwerk-Datenflussendpunktschaltung) dazu, Datenpakete im Datenformat des (z. B. Send -) Operationskonfigurationsdatenformats 1002 zu empfangen, wobei zum Beispiel der Eingang die Quelle(n) der Nutzdaten (z. B. der Eingangsdaten) sind und das Operationsfeld angibt, welche Operation durchgeführt werden soll (z. B. schematisch als Switch oder SwitchAny gezeigt). Der gezeigte Multiplexer 1004 kann die Operation, die durchgeführt werden soll, aus mehreren verfügbaren Operationen auswählen, z. B. auf Basis des Wertes im Operationsfeld 1002D. In einer Ausführungsform dient die Schaltung 1000 dazu, diese Operation durchzuführen, wenn sowohl die Eingangsdaten verfügbar sind als auch der Credit-Status ein Ja ist (was zum Beispiel das Abhängigkeits-Token angibt), was angibt, dass Platz für die zu speichernden Ausgangsdaten ist, z. B. in einem Puffer des Ziels.
-
In einer Ausführungsform nutzt die Send-Operation keine Steuerung über das Prüfen hinaus, ob ihr/ihre Eingang/Eingänge zum Senden verfügbar sind. Dies kann Switch ermöglichen, die Operation ohne Credit auf allen Zweigen durchzuführen. In einer Ausführungsform enthalten die Switch- und/oder die SwitchAny-Operation einen Multiplexer, der durch den Wert gesteuert wird, der im Operationsfeld 1002D gespeichert ist, um die korrekte Warteschlangenmanagementschaltungsanordnung auszuwählen.
-
Der im Operationsfeld 1002D gespeicherte Wert kann unter Steueroptionen auswählen, z. B. mit einer anderen Steuer- (z. B. Logik -) Schaltungsanordnung für jede Operation, zum Beispiel wie in den 11 - 14. In einigen Ausführungsformen ist der Credit- (z. B. Credit auf einem Netzwerk) Status ein anderer Eingang (wie z. B. hier in den 11 - 12 gezeigt).
-
Die 11 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für ein Switch-Operationskonfigurationsdatenformat 1102 mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung 1100 annotiert werden, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform dient der im Operationsfeld 1002D gespeicherte (z. B. abgehende) Operationswert für eine Switch-Operation, die z. B. einem Switch-Datenflussoperator eines Datenflussgraphen entspricht. In einer Ausführungsform dient die Schaltung 1100 (z. B. die Netzwerk-Datenflussendpunktschaltung) dazu, ein Datenpaket im Datenformat der Switch-Operation 1102 zu empfangen, wobei zum Beispiel der Eingang im Eingangsfeld 1102A angibt, welcher/welchen Komponente(n) die Daten gesendet werden sollen, und das Operationsfeld 1102B angibt, welche Operation durchgeführt werden soll (z. B. schematisch als Switch gezeigt). Die gezeigte Schaltung 1100 kann die Operation, die ausgeführt werden soll, aus mehreren verfügbaren Operationen auf Basis des Operationsfelds 1102B auswählen. In einer Ausführungsform dient die Schaltung 1000 zum Durchführen dieser Operation, wenn sowohl die Eingangsdaten (zum Beispiel entsprechend dem Eingangsstatus, z. B. es ist Platz für die Daten in dem/den Ziel(en) vorhanden) verfügbar sind als auch der Credit-Status (z. B. der Auswahloperations- (Op -) Status) ein Ja ist (zum Beispiel gibt der Netzwerk-Credit an, dass Verfügbarkeit auf dem Netzwerk vorhanden ist, um diese Daten zu dem/den Ziel(en) zu senden). Zum Beispiel können die Multiplexer 1110, 1112, 1114 mit einem jeweiligen Eingangsstatus und Credit-Status für jeden Eingang verwendet werden (z. B. wohin die Ausgangsdaten in der Switch-Operation gesendet werden sollen), z. B. um zu verhindern, dass ein Eingang als verfügbar gezeigt wird, bis sowohl der Eingangsstatus (z. B. Platz für Daten im Ziel) als auch der Credit-Status (z. B. es ist Platz auf dem Netzwerk, um zum Ziel zu gelangen) wahr sind (z. B. Ja). In einer Ausführungsform ist der Eingangsstatus eine Angabe, dass Platz für die (Ausgangs -) Daten, die gespeichert werden sollen, vorhanden ist oder nicht, z. B. in einem Puffer des Ziels. In bestimmten Ausführungsformen dient ein AND-Gatter 1106 dazu, zu ermöglichen, dass die Operation durchgeführt wird, wenn sowohl die Eingangsdaten verfügbar sind (z. B. als Ausgang des Multiplexers 1104) als auch der Auswahloperations- (z. B. Steuerdaten -) Status ein Ja ist, was zum Beispiel die Auswahloperation angibt (z. B. zu welchem von mehreren Ausgängen ein Eingang gesendet werden soll, siehe z. B. die 3). In bestimmten Ausführungsformen dient das Durchführen der Operation mit den Steuerdaten (z. B. der Auswahl-Op) dazu, zu bewirken, dass Eingangsdaten von einem der Eingänge an einem oder mehr (z. B. mehreren) Ausgängen ausgegeben werden (wie z. B. durch die Steuerdaten angegeben), z. B. entsprechend den Multiplexer-Auswahlbits aus dem Multiplexer 1108. In einer Ausführungsform wählt die Auswahl-Op, welcher Zweig des Switch-Ausgangs verwendet wird, und/oder der Auswahldecodierer erzeugt Multiplexer-Auswahlbits.
-
Die 12 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. eine Netzwerk-Datenflussendpunktschaltung) für ein SwitchAny-Operationskonfigurationsdatenformat 1202 mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung 1200 annotiert werden, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform dient der im Operationsfeld 1002D gespeicherte (z. B. abgehende) Operationswert für eine SwitchAny-Operation, die z. B. einem SwitchAny-Datenflussoperator eines Datenflussgraphen entspricht. In einer Ausführungsform dient die Schaltung 1200 (z. B. die Netzwerk-Datenflussendpunktschaltung) dazu, ein Datenpaket im Datenformat des SwitchAny-Operationskonfigurationsdatenformats 1202 zu empfangen, wobei zum Beispiel der Eingang im Eingangsfeld 1202A angibt, welcher/welchen Komponente(n) die Daten gesendet werden sollen, und das Operationsfeld 1202B angibt, welche Operation durchgeführt werden soll (z. B. schematisch als SwitchAny gezeigt) und/oder die Quelle der Steuerdaten für diese Operation. In einer Ausführungsform dient die Schaltung 1000 zum Durchführen dieser Operation, wenn irgendwelche Eingangsdaten (zum Beispiel entsprechend dem Eingangsstatus, z. B. es ist Platz für die Daten in dem/den Ziel(en) vorhanden) verfügbar sind und der Credit-Status ein Ja ist (zum Beispiel gibt der Netzwerk-Credit an, dass Verfügbarkeit auf dem Netzwerk vorhanden ist, um diese Daten zu dem/den Ziel(en) zu senden). Zum Beispiel können die Multiplexer 1210, 1212, 1214 mit einem jeweiligen Eingangsstatus und Credit-Status für jeden Eingang verwendet werden (z. B. wohin die Ausgangsdaten in der SwitchAny-Operation gesendet werden sollen), z. B. um zu verhindern, dass ein Eingang als verfügbar gezeigt wird, bis sowohl der Eingangsstatus (z. B. Platz für Daten im Ziel) als auch der Credit-Status (z. B. es ist Platz auf dem Netzwerk, um zum Ziel zu gelangen) wahr sind (z. B. Ja). In einer Ausführungsform ist der Eingangsstatus eine Angabe, dass Platz oder dass kein Platz für die (Ausgangs -) Daten, die gespeichert werden sollen, vorhanden ist, z. B. in einem Puffer des Ziels. In bestimmten Ausführungsformen dient das OR-Gatter 1204 dazu, zu ermöglichen, dass die Operation durchgeführt wird, wenn irgendeiner der Ausgänge verfügbar ist. In bestimmten Ausführungsformen dient das Durchführen der Operation dazu, zu bewirken, dass die ersten verfügbaren Eingangsdaten von einem der Eingänge an einem oder mehr (z. B. mehreren) Ausgängen ausgegeben werden, z. B. entsprechend den Multiplexer-Auswahlbits aus dem Multiplexer 1206. In einer Ausführungsform tritt SwitchAny auf, sobald irgendein Ausgangs-Credit verfügbar ist (z. B. im Gegensatz zu einem Switch, das eine Auswahl-Op nutzt). Die Multiplexer-Auswahlbits können verwendet werden, um einen Eingang zu einem (z. B. Netzwerk -) Ausgangspuffer einer Netzwerk-Datenflussendpunktschaltung zu lenken.
-
Die 13 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. eine Netzwerk-Datenflussendpunktschaltung) für ein Pick-Operationskonfigurationsdatenformat 1302 mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung 1300 annotiert werden, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform dient der im Operationsfeld 1302C gespeicherte (z. B. eingehende) Operationswert für eine Pick-Operation, die z. B. einem Pick-Datenflussoperator eines Datenflussgraphen entspricht. In einer Ausführungsform dient die Schaltung 1300 (z. B. die Netzwerk-Datenflussendpunktschaltung) dazu, ein Datenpaket im Datenformat des Pick-Operationskonfigurationsdatenformats 1302 zu empfangen, wobei zum Beispiel die Daten im Eingangsfeld 1302B sind, welche Komponente(n) die Daten senden sollen, die Daten im Ausgangsfeld 1302A sind, an welche Komponente(n) die Eingangsdaten gesendet werden sollen, und das Operationsfeld 1302C angibt, welche Operation durchgeführt werden soll (z. B. schematisch als Pick gezeigt) und/oder die Quelle der Steuerdaten für diese Operation. Die gezeigte Schaltung 1300 kann die Operation, die ausgeführt werden soll, aus mehreren verfügbaren Operationen auf Basis des Operationsfelds 1302C auswählen. In einer Ausführungsform dient die Schaltung 1300 dazu, diese Operation durchzuführen, wenn sowohl die Eingangsdaten (zum Beispiel entsprechend dem Eingangs- (z. B. dem Netzwerk-Eingangspuffer) Status, z. B. alle Eingangsdaten sind angekommen) verfügbar sind, der Credit-Status (z. B. der Ausgangsstatus) ein Ja ist (zum Beispiel der dreidimensionale Array-Ausgangspuffer), was angibt, dass Platz für die Ausgangsdaten vorhanden ist, die gespeichert werden sollen, z. B. in einem Puffer des/der Ziels/Ziele, und der Auswahloperations- (z. B. Steuerdaten -) Status ein Ja ist. In bestimmten Ausführungsformen dient ein AND-Gatter 1306 dazu, zu ermöglichen, dass die Operation durchgeführt wird, wenn sowohl die Eingangsdaten verfügbar sind (z. B. als Ausgang des Multiplexers 1304) als auch ein Ausgangsplatz verfügbar ist und der Auswahloperations- (z. B. Steuerdaten -) Status ein Ja ist, was zum Beispiel die Auswahloperation angibt (z. B. zu welchem von mehreren Ausgängen ein Eingang gesendet werden soll, siehe z.B. die 3). In bestimmten Ausführungsformen dient das Durchführen der Operation mit den Steuerdaten (z. B. Auswahl-Op) dazu, zu bewirken, dass Eingangsdaten von einem der mehreren Eingänge (der z. B. durch die Steuerdaten angegeben wird) an einem oder mehr (z. B. mehreren) Ausgängen ausgegeben werden, z. B. entsprechend den Multiplexer-Auswahlbits aus dem Multiplexer 1308. In einer Ausführungsform wählt die Auswahl-Op, welcher Zweig des Pick verwendet wird, und/oder der Auswahldecodierer erzeugt Multiplexer-Auswahlbits.
-
Die 14 veranschaulicht ein Konfigurationsdatenformat zum Konfigurieren eines Schaltungselements (z. B. einer Netzwerk-Datenflussendpunktschaltung) für eine PickAny-Operation 1402 mit ihren Eingangs-, Ausgangs- und Steuerdaten, die an eine Schaltung 1400 annotiert werden, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform dient der im Operationsfeld 1402C gespeicherte (z. B. eingehende) Operationswert für eine PickAny-Operation, die z. B. einem PickAny-Datenflussoperator eines Datenflussgraphen entspricht. In einer Ausführungsform dient die Schaltung 1400 (z. B. die Netzwerk-Datenflussendpunktschaltung) dazu, ein Datenpaket im Datenformat des PickAny-Operationskonfigurationsdatenformats 1402 zu empfangen, wobei zum Beispiel die Daten im Eingangsfeld 1402B angeben, welche Komponente(n) die Daten senden sollen, die Daten im Ausgangsfeld 1402A angeben, an welche Komponente(n) die Eingangsdaten gesendet werden sollen, und das Operationsfeld 1402C angibt, welche Operation durchgeführt werden soll (z. B. schematisch als PickAny gezeigt). Die gezeigte Schaltung 1400 kann die Operation, die ausgeführt werden soll, aus mehreren verfügbaren Operationen auf Basis des Operationsfelds 1402C auswählen. In einer Ausführungsform dient die Schaltung 1400 dazu, diese Operation durchzuführen, wenn irgendwelche (z. B. erste ankommende) der Eingangsdaten (zum Beispiel entsprechend dem Eingangs- (z. B. dem Netzwerk-Eingangspuffer) Status, z. B. irgendwelche der Eingangsdaten sind angekommen) verfügbar sind und der Credit-Status (z. B. der Ausgangsstatus) ein Ja ist (was zum Beispiel der dreidimensionale Array-Ausgangspuffer angibt), was angibt, dass Platz für die Ausgangsdaten vorhanden ist, die gespeichert werden sollen, z. B. in einem Puffer des/der Ziels/Ziele. In bestimmten Ausführungsformen dient das AND-Gatter 1406 dazu, zu ermöglichen, dass die Operation durchgeführt wird, wenn irgendeiner der Eingangsdaten verfügbar ist (z. B. als Ausgang des Multiplexers 1404) und ein Ausgangsplatz verfügbar ist. In bestimmten Ausführungsformen dient das Durchführen der Operation dazu, zu bewirken, dass (z. B. die ersten ankommenden) Eingangsdaten von einem von mehreren Eingängen an einem oder mehr (z. B. mehreren) Ausgängen ausgegeben werden, z. B. entsprechend den Multiplexer-Auswahlbits aus dem Multiplexer 1408.
-
In einer Ausführungsform wird PickAny bei Vorhandensein irgendwelcher Daten ausgeführt, und/oder der Auswahldecodierer erzeugt Multiplexer-Auswahlbits.
-
Die 15 veranschaulicht die Auswahl einer Operation (1502, 1504, 1506) durch eine Netzwerk-Datenflussendpunktschaltung 1500 für die Durchführung gemäß Ausführungsformen der Offenbarung. Der Speicher 1501 für anhängige Operationen (z. B. im Scheduler 528 in der 5) kann eine oder mehrere Datenflussoperationen speichern, z. B. entsprechend dem/den hier erörterten Format(en). Der Scheduler (zum Beispiel auf Basis einer festgelegten Priorität oder der ältesten der Operationen, die z. B. alle ihre Operanden aufweisen) kann eine Operation zur Durchführung einplanen. Zum Beispiel kann der Scheduler die Operation 1502 auswählen und entsprechend einem im Operationsfeld gespeicherten Wert die entsprechenden Steuersignale aus dem Multiplexer 1508 und/oder dem Multiplexer 1510 senden. Als ein Beispiel: Mehrere Operationen können zeitgleich in einer einzelnen Netzwerk-Datenflussendpunktschaltung ausführbar sein. Unter der Annahme, dass alle Daten vorhanden sind, kann das „durchführbare“ Signal (wie z. B. in den 9 - 14 gezeigt wird) als ein Signal in den Multiplexer 1512 eingegeben werden. Der Multiplexer 1512 kann als einen Ausgang Steuersignale für eine ausgewählte Operation (z. B. eine der Operationen 1502, 1504 und 1506) senden, die bewirken, dass der Multiplexer 1508 die Verbindungen in einer Netzwerk-Datenflussendpunktschaltung konfiguriert, um die ausgewählte Operation durchzuführen (z. B. Daten aus dem/den Puffer(n) zu entnehmen oder dorthin zu senden). Der Multiplexer 1512 kann als einen Ausgang Steuersignale für eine ausgewählte Operation (z. B. eine der Operationen 1502, 1504 und 1506) senden, die bewirken, dass der Multiplexer 1510 die Verbindungen in einer Netzwerk-Datenflussendpunktschaltung konfiguriert, um Daten aus der/den Warteschlange(n) zu entfernen, z. B. verbrauchte Daten. Als ein Beispiel: Siehe die Erörterung hier zum Entfernen von Daten (z. B. Token). Der „PE-Status“ in der 15 können die Steuerdaten sein, die aus einem PE kommen, zum Beispiel der Leer-Indikator und die Voll-Indikatoren der Warteschlangen (z. B. die Backpressure-Signale und/oder der Netzwerk-Credit). In einer Ausführungsform kann der PE-Status die Leer- oder Voll-Bits für alle Puffer und/oder Datenwege enthalten, z. B. hier in der 5. Die 15 veranschaulicht ein verallgemeinertes Scheduling für die Ausführungsformen hier, z. B. mit spezialisiertem Scheduling für mit Bezug auf die 11 - 14 erörterte Ausführungsformen.
-
Die Wahl des Austragens aus der Warteschlange wird in einer Ausführungsform (wie z. B. beim Scheduling) durch die Operation und ihr dynamisches Verhalten bestimmt, um z. B. die Operation nach der Durchführung aus der Warteschlange auszutragen. In einer Ausführungsform dient eine Schaltung dazu, die Operandenauswahlbits zum Austragen von Daten (z. B. Eingangs-, Ausgangs- und/oder Steuerdaten) aus der Warteschlange zu verwenden.
-
Die 16 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung 1600 gemäß Ausführungsformen der Offenbarung. Im Vergleich zur 5 hat die Netzwerk-Datenflussendpunktschaltung 1600 die Konfiguration und die Steuerung in zwei separate Scheduler geteilt. In einer Ausführungsform dient der Ausgangs-Scheduler 1628A dazu, eine Operation auf Daten zu planen, die in die Datenflussendpunktschaltung 1600 (z. B. auf der Argument-Warteschlange 1602, zum Beispiel dem dreidimensionalen Array-Eingangspuffer 502, wie in der 5) gelangen sollen (z. B. aus einem leitungsvermittelnden Kommunikationsnetzwerk, das mit ihr gekoppelt ist) und die die Datenflussendpunktschaltung 1600 (z. B. an den Netzwerk-Ausgangspuffer 1622, zum Beispiel den Netzwerk-Ausgangspuffer 522, wie in der 5) ausgeben soll (z. B. aus einem paketvermittelnden Kommunikationsnetzwerk, das mit ihr gekoppelt ist). In einer Ausführungsform dient der Eingangs-Scheduler 1628B dazu, eine Operation an Daten zu planen, die in die Datenflussendpunktschaltung 1600 (z. B. am Netzwerk-Eingangspuffer 1624, zum Beispiel Netzwerk-Eingangspuffer 1524, wie in der 5) gelangen sollen (z. B. aus einem paketvermittelnden Kommunikationsnetzwerk, das mit ihr gekoppelt ist) und die die Datenflussendpunktschaltung 1600 (z. B. am Ausgangspuffer 1608, zum Beispiel dem dreidimensionalen Array-Ausgangspuffer 1508, wie in der 5) ausgeben soll (z. B. aus einem leitungsvermittelnden Kommunikationsnetzwerk, das mit ihr gekoppelt ist). Der Scheduler 1628A und/oder der Scheduler 1628B können als einen Eingang den (z. B. Operations -) Status der Schaltung 1600 enthalten, z. B. Füllgrad der Eingänge (z. B. der Puffer 1602A, 1602), den Füllgrad der Ausgänge (z. B. der Puffer 1608), Werte (z. B. den Wert in 1602A) usw. Der Scheduler 1628B kann eine Credit-Rückgabeschaltung enthalten, zum Beispiel um zu bezeichnen, dass dieser Credit zum Sender zurückgegeben wird, z. B. nach dem Empfang im Netzwerk-Eingangspuffer 1624 der Schaltung 1600.
-
Das Netzwerk 1614 kann ein leitungsvermittelndes Netzwerk sein, z. B. wie hier erörtert. Zusätzlich oder alternativ kann auch ein paketvermittelndes Netzwerk (wie z. B. hier erörtert wird) genutzt werden, das zum Beispiel mit dem Netzwerk-Ausgangspuffer 1622, dem Netzwerk-Eingangspuffer 1624 oder anderen Komponenten hierin gekoppelt ist. Die Argument-Warteschlange 1602 kann einen Steuerpuffer 1602A enthalten, um zum Beispiel anzugeben, wann eine jeweilige Eingangswarteschlange (z. B. Puffer) eine (neue) Dateneinheit enthält, z. B. als ein einzelnes Bit. Nun bezugnehmend auf die 17 - 19: In einer Ausführungsform zeigen diese gesamt die Konfigurationen zum Erstellen eines verteilten Pick.
-
Die 17 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung 1700, die Eingang Null (0) empfängt, während sie eine Pick-Operation durchführt, gemäß Ausführungsformen der Offenbarung, wie zum Beispiel oben mit Bezug auf die 4 erörtert worden ist. In einer Ausführungsform wird die Ausgangskonfiguration 1726A mit einem Abschnitt einer Pick-Operation geladen (z. B. während eines Konfigurationsschritts), die zum Senden von Daten an eine andere Netzwerk-Datenflussendpunktschaltung (z. B. die Schaltung 1900 in der 19) dient. In einer Ausführungsform dient der Ausgangs-Scheduler 1728A zum Überwachen der Warteschlange 1702 (z. B. der Daten-Warteschlange) für Eingangsdaten (z. B. aus einem Verarbeitungselement). Gemäß einer Ausführungsform des gezeigten Datenformats gibt das „Send“ (z. B. ein Binärwert dafür) an, dass Daten entsprechend den Feldern X, Y gesendet werden sollen, wobei X der Wert ist, der eine besondere Ziel-Netzwerk-Datenflussendpunktschaltung angibt (wobei z. B. 0 die Netzwerk-Datenflussendpunktschaltung 1900 in der 19 ist), und Y der Wert ist, der angibt, auf welchem Netzwerk-Eingangspuffer-(z. B. der Puffer 1924) Platz der Wert gespeichert werden soll. In einer Ausführungsform ist Y der Wert, der einen besonderen Kanal eines Mehr-Kanal- (z. B. paketvermittelnden) Netzwerks angibt (wobei z. B. 0 der Kanal 0 und/oder das Pufferelement 0 der Netzwerk-Datenflussendpunktschaltung 1900 in der 19 ist). Wenn die Eingangsdaten ankommen, sollen sie dann (z. B. aus dem Netzwerk-Ausgangspuffer 1722) von der Netzwerk-Datenflussendpunktschaltung 1700 an eine andere Netzwerk-Datenflussendpunktschaltung (z. B. die Netzwerk-Datenflussendpunktschaltung 1900 in der 19) gesendet werden.
-
Die 18 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung 1800, die Eingang Eins (1) empfängt, während sie eine Pick-Operation durchführt, gemäß Ausführungsformen der Offenbarung, wie zum Beispiel oben mit Bezug auf die 4 erörtert worden ist. In einer Ausführungsform wird die Ausgangskonfiguration 1826A mit einem Abschnitt einer Pick-Operation geladen (z. B. während eines Konfigurationsschritts), die zum Senden von Daten an eine andere Netzwerk-Datenflussendpunktschaltung (z. B. die Schaltung 1900 in der 19) dient. In einer Ausführungsform dient der Ausgangs-Scheduler 1828A zum Überwachen der Argumente-Warteschlange 1820 (z. B. der Daten-Warteschlange 1802B) für Eingangsdaten (z. B. aus einem Verarbeitungselement). Gemäß einer Ausführungsform des gezeigten Datenformats gibt das „Send“ (z. B. ein Binärwert dafür) an, dass Daten entsprechend den Feldern X, Y gesendet werden sollen, wobei X der Wert ist, der eine besondere Ziel-Netzwerk-Datenflussendpunktschaltung angibt (wobei z. B. 0 die Netzwerk-Datenflussendpunktschaltung 1900 in der 19 ist), und Y der Wert ist, der angibt, auf welchem Netzwerk-Eingangspuffer- (z. B. der Puffer 1924) Platz der Wert gespeichert werden soll. In einer Ausführungsform ist Y der Wert, der einen besonderen Kanal eines Mehr-Kanal-(z. B. paketvermittelnden) Netzwerks angibt (wobei z. B. 1 der Kanal 1 und/oder das Pufferelement 1 der Netzwerk-Datenflussendpunktschaltung 1900 in der 19 ist). Wenn die Eingangsdaten ankommen, sollen sie dann (z. B. aus dem Netzwerk-Ausgangspuffer 1722) von der Netzwerk-Datenflussendpunktschaltung 1800 an eine andere Netzwerk-Datenflussendpunktschaltung (z. B. die Netzwerk-Datenflussendpunktschaltung 1900 in der 19) gesendet werden.
-
Die 19 veranschaulicht eine Netzwerk-Datenflussendpunktschaltung 1900, die den ausgewählten Eingang ausgibt, während sie eine Pick-Operation durchführt, gemäß Ausführungsformen der Offenbarung, wie zum Beispiel oben mit Bezug auf die 4 erörtert worden ist. In einer Ausführungsform dienen andere Netzwerk-Datenflussendpunktschaltungen (z. B. die Schaltung 1700 und die Schaltung 1800) zum Senden ihrer Eingangsdaten zum Netzwerk-Eingangspuffer 1924 der Schaltung 1900. In einer Ausführungsform wird die Eingangskonfiguration 1926B mit einem Abschnitt einer Pick-Operation geladen (z. B. während eines Konfigurationsschritts), die zum Picken der Daten dient, die an die Netzwerk-Datenflussendpunktschaltung 1900 gesendet worden sind, z. B. entsprechend einem Steuerwert. In einer Ausführungsform soll der Steuerwert in der Eingangssteuerung 1932 (z. B. dem Puffer) empfangen werden. In einer Ausführungsform dient der Eingangs-Scheduler 1828A zum Überwachen des Empfangs des Steuerwerts und der Eingangswerte (z. B. im Netzwerk-Eingangspuffer 1924). Falls zum Beispiel der Steuerwert angibt, dass der Pick aus dem Pufferelement A (z. B. 0 oder 1 in diesem Beispiel) (z. B. aus dem Kanal A) des Netzwerk-Eingangspuffers 1924 ausgeführt werden soll, wird dann der in diesem Pufferelement A gespeicherte Wert als ein Resultierender der Operation durch die Schaltung 1900 ausgegeben, zum Beispiel in einen Ausgangspuffer 1908, z. B. wenn der Ausgangspuffer Speicherplatz aufweist (wie z. B. durch ein Backpressure-Signal angegeben wird). In einer Ausführungsform werden die Ausgangsdaten der Schaltung 1900 abgesendet, wenn der Ausgangspuffer ein Token aufweist (z. B. Eingangsdaten und Steuerdaten) und der Empfänger bestätigt, dass er Puffer hat (z. B. angibt, dass Speicher verfügbar ist, obwohl andere Zuordnungen von Ressourcen möglich sind, dieses Beispiel ist lediglich veranschaulichend).
-
Die 20 veranschaulicht ein Flussdiagramm 2000 gemäß Ausführungsformen der Offenbarung. Der gezeigte Fluss 2000 beinhaltet das Bereitstellen eines dreidimensionalen Arrays von Verarbeitungselementen 2002, das Routing von Daten innerhalb des dreidimensionalen Arrays mit einem paketvermittelnden Kommunikationsnetzwerk zwischen Verarbeitungselementen entsprechend einem Datenflussgraphen 2004, das Durchführen einer ersten Datenflussoperation des Datenflussgraphen mit den Verarbeitungselementen 2006 und das Durchführen einer zweiten Datenflussoperation des Datenflussgraphen mit mehreren Netzwerk-Datenflussendpunktschaltungen des paketvermittelnden Kommunikationsnetzwerks 2008.
-
CSA-ARCHITEKTUR
-
Das Ziel bestimmter Ausführungsformen eines CSA ist es, schnell und effizient Programme auszuführen, z. B. von Kompilierern produzierte Programme. Bestimmte Ausführungsformen der CSA-Architektur stellen Programmierabstraktionen bereit, die die Anforderungen von Kompilierertechnologien und Programmierparadigmen unterstützen. Ausführungsformen des CSA führen Datenflussgraphen aus, z. B. eine Programmerscheinungsform, die der eigenen internen Repräsentation (IR) des Kompilierers von kompilierten Programmen sehr ähnelt. In diesem Modell wird ein Programm als ein Datenflussgraph dargestellt, der aus Knoten (z. B. Eckpunkten), die von einem Satz von architektonisch definierten Datenflussoperatoren gezogen werden (die z. B. sowohl Berechnungs- als auch Steueroperationen umfassen), und Kanten, die die Übertragung von Daten zwischen Datenflussoperatoren darstellen, besteht. Die Ausführung kann fortfahren, indem Datenfluss-Tokens (die z. B. Datenwerte sind oder darstellen) in den Datenflussgraphen injiziert werden. Tokens können zwischen Knoten (z. B. Eckpunkt) fließen und an jedem Knoten transformiert werden, was zum Beispiel eine vollständige Berechnung bildet. Ein Beispiel-Datenflussgraph und seine Ableitung aus einem High-Level-Quellcode werden in den 21A - 21C gezeigt, und die 23 zeigt ein Beispiel für die Ausführung eines Datenflussgraphen.
-
Ausführungsformen des CSA werden zur Ausführung von Datenflussgraphen konfiguriert, indem sie genau jene Datenflussgraph-Ausführungsunterstützungen bereitstellen, die von Kompilierern verlangt werden. In einer Ausführungsform ist der CSA ein Beschleuniger (z. B. ein Beschleuniger in der 2) und strebt nicht danach, einige der notwendigen, jedoch selten verwendeten Mechanismen bereitzustellen, die auf Universalprozessorkernen (z. B. einem Kern in der 2) verfügbar sind, wie zum Beispiel Systemaufrufe. Daher kann der CSA in dieser Ausführungsform viele Codes, jedoch nicht alle Codes ausführen. Dafür gewinnt der CSA erhebliche Vorteile bei Performance und Energie. Um die Beschleunigung von Code zu ermöglichen, der in üblicherweise verwendeten sequentiellen Sprachen geschrieben ist, bringen die Ausführungsformen hier auch mehrere neuartige architektonische Merkmale ein, um den Kompilierer zu unterstützen. Eine besondere Neuheit ist die Behandlung von Speicher durch den CSA, ein Gegenstand, der bisher ignoriert oder wenig angesprochen worden ist. Ausführungsformen des CSA sind auch einzigartig in der Verwendung von Datenflussoperatoren, z. B. im Gegensatz zu Lookup-Tabellen (LUTs), als ihrer grundlegenden architektonischen Schnittstelle.
-
Mit Rückbezug auf Ausführungsformen des CSA werden als Nächstes Datenflussoperatoren erörtert.
-
Datenflussoperatoren
-
Die architektonische Schlüsselschnittstelle von Ausführungsformen des Beschleunigers (z. B. des CSA) ist der Datenflussoperator, z. B. als eine direkte Repräsentation eines Knotens in einem Datenflussgraphen. Aus einer operativen Perspektive verhalten sich Datenflussoperatoren auf eine Streaming- oder datengesteuerte Weise. Datenflussoperatoren können ablaufen, sobald ihre eingehenden Operanden verfügbar werden. Die CSA-Datenflussausführung kann (z. B. nur) vom stark lokalisiertem Status abhängen, was zum Beispiel zu einer stark skalierbaren Architektur mit einem verteilten asynchronen Ausführungsmodell führt. Zu Datenflussoperatoren können Arithmetik-Datenflussoperatoren, zum Beispiel eines oder mehrere von Fließkomma-Addition und -Multiplikation, Ganzzahl-Addition, -Subtraktion und -Multiplikation, verschiedene Formen von Vergleichen, Logikoperatoren und Schieben zählen. Allerdings können Ausführungsformen des CSA auch einen umfangreichen Satz an Steueroperatoren enthalten, die das Management von Datenfluss-Tokens im Programmgraphen unterstützen. Zu Beispielen für diese zählen ein „Pick“-Operator, der z. B. zwei oder mehr logische Eingangskanäle in einen einzelnen Ausgangskanal multiplext, und ein „Switch“-Operator, der z. B. als ein Kanaldemultiplexer arbeitet (der z. B. einen einzelnen Kanal aus zwei oder mehr logischen Eingangskanälen ausgibt). Diese Operatoren können ermöglichen, dass ein Kompilierer Steuerparadigmen implementiert, wie zum Beispiel bedingte Ausdrücke. Bestimmte Ausführungsformen eines CSA können einen begrenzten Satz Datenflussoperatoren enthalten (z. B. für eine relativ kleine Anzahl von Operationen), um dichte und energieeffiziente PE-Mikroarchitekturen zu erreichen. Bestimmte Ausführungsformen können Datenflussoperatoren für komplexe Operationen enthalten, die bei HPC-Code üblich sind. Die CSA-Datenflussoperatorarchitektur ist sehr offen für einsatzspezifische Erweiterungen. Zum Beispiel können komplexere mathematische Datenflussoperatoren, z. B. trigonometrische Funktionen, in bestimmten Ausführungsformen enthalten sein, um bestimmte mathematisch intensive HPC-Arbeitsbelastungen zu beschleunigen. Gleichermaßen kann eine auf neuronale Netze abgestimmte Erweiterung Datenflussoperatoren für vektorisierte, wenig genaue Arithmetik enthalten.
-
Die 21A veranschaulicht eine Programmquelle gemäß Ausführungsformen der Offenbarung. Der Programmquellcode enthält eine Multiplikationsfunktion (func). Die 21B veranschaulicht einen Datenflussgraphen 2100 für die Programmquelle der 21A gemäß Ausführungsformen der Offenbarung. Der Datenflussgraph 2100 enthält einen Pick-Knoten 2104, einen Switch-Knoten 2106 und einen Multiplikationsknoten 2108. Ein Puffer kann optional auf einem oder mehreren der Kommunikationswege enthalten sein. Der gezeigte Datenflussgraph 2100 kann eine Operation zum Auswählen des Eingangs X mit dem Pick-Knoten 2104, das Multiplizieren von X mal Y (z. B. am Multiplikationsknoten 2108) und dann das Ausgeben des Ergebnisses aus dem linken Ausgang des Switch-Knotens 2106 durchführen. Die 21C veranschaulicht einen Beschleuniger (z. B. CSA) mit mehreren Verarbeitungselementen 2101, der dazu konfiguriert ist, den Datenflussgraphen der 21B auszuführen, gemäß Ausführungsformen der Offenbarung. Insbesondere wird der Datenflussgraph 2100 in das Array von Verarbeitungselementen 2101 (und z. B. das/die (z. B. Interconnect -) Netzwerk(e) dazwischen) überlagert, zum Beispiel so dass jeder Knoten des Datenflussgraphen 2100 als ein Datenflussoperator im Array von Verarbeitungselementen 2101 dargestellt wird. Zum Beispiel können bestimmte Datenflussoperationen mit einem Verarbeitungselement erreicht werden, und/oder bestimmte Datenflussoperationen können mit einem Kommunikationsnetzwerk (z. B. einer Netzwerk-Datenflussendpunktschaltung davon) erreicht werden. Zum Beispiel kann eine Pick-, PickSingleLeg-, PickAny-, Switch- und/oder SwitchAny-Operation mit einer oder mehreren Komponenten eines Kommunikationsnetzwerks erreicht werden (z. B. einer Netzwerk-Datenflussendpunktschaltung davon), z. B. im Gegensatz zu einem Verarbeitungselement.
-
In einer Ausführungsform dient eines oder mehrere der Verarbeitungselemente im Array von Verarbeitungselementen 2101 zum Zugriff auf den Speicher über die Speicherschnittstelle 2102. In einer Ausführungsform entspricht somit der Pick-Knoten 2104 des Datenflussgraphen 2100 dem Pick-Operator 2104A (wird z. B. durch ihn dargestellt), der Switch-Knoten 2106 des Datenflussgraphen 2100 entspricht somit dem Switch-Operator 2106A (wird z. B. durch ihn dargestellt), und der Multipliziererknoten 2108 des Datenflussgraphen 2100 entspricht somit dem Multipliziereroperator 2108A (wird z. B. durch ihn dargestellt). Ein anderes Verarbeitungselement und/oder Flusssteuerwegenetzwerk kann dem Pick-Operator 2104A und dem Switch-Operator 2106A die Steuersignale (z. B. Steuer-Tokens) zum Durchführen der Operation in der 21A bereitstellen. In einer Ausführungsform ist das Array von Verarbeitungselementen 2101 dazu konfiguriert, den Datenflussgraphen 2100 der 21B auszuführen, bevor die Ausführung beginnt. In einer Ausführungsform führt der Kompilierer die Umwandlung aus den 21A - 21B durch. In einer Ausführungsform bindet der Eingang der Datenflussgraphenknoten in das Array von Verarbeitungselementen den Datenflussgraphen logisch in das Array von Verarbeitungselementen ein, wie z. B. nachstehend weiter erörtert wird, so dass die Eingangs -/Ausgangswege dazu konfiguriert sind, das gewünschte Ergebnis zu produzieren.
-
Latenzunempfindliche Kanäle
-
Kommunikationsbögen sind die zweite Hauptkomponente des Datenflussgraphen. Bestimmte Ausführungsformen eines CSA beschreiben diese Bögen als latenzunempfindliche Kanäle, zum Beispiel In-Order-, Backpressure- (die z. B. keinen Ausgang produzieren oder senden, bis ein Platz zum Speichern des Ausgangs vorhanden ist), Punkt-zu-Punkt-Kommunikationskanäle. Wie bei Datenflussoperatoren sind latenzunempfindliche Kanäle im Grunde asynchron, was Freiraum zum Aufsetzen vieler Arten von Netzwerken gewährt, um die Kanäle eines besonderen Graphen zu implementieren. Latenzunempfindliche Kanäle können beliebig lange Latenzen aufweisen und dennoch die CSA-Architektur genau implementieren. Allerdings gibt es in bestimmten Ausführungsformen einen starken Anreiz in Bezug auf Performance und Energie, Latenzen so gering wie möglich zu machen. Der Abschnitt 3.2 offenbart hier eine Netzwerk-Mikroarchitektur, bei der Datenflussgraphenkanäle in einer Pipeline-Weise mit nicht mehr als einem Zyklus an Latenz implementiert werden. Ausführungsformen von latenzunempfindlichen Kanälen stellen eine entscheidende Abstraktionsschicht bereit, die mit einer CSA-Architektur wirksam eingesetzt werden kann, um dem Anwendungsprogrammierer eine Reihe von Laufzeitdiensten bereitzustellen. Zum Beispiel kann ein CSA latenzunempfindliche Kanäle in der Implementierung der CSA-Konfiguration (dem Laden eines Programms auf das CSA-Array) wirksam einsetzen.
-
Die 22 veranschaulicht eine beispielhafte Ausführung eines Datenflussgraphen 2200 gemäß Ausführungsformen der Offenbarung. Im Schritt 1 können Eingangswerte (z. B. 1 für X in der 21B und 2 für Y in der 21B) in den Datenflussgraphen 2200 geladen werden, um eine Multiplikationsoperation 1 * 2 durchzuführen. Einer oder mehrere der Dateneingangswerte kann in der Operation statisch (z. B. konstant) sein (z. B. 1 für X und 2 für Y in Bezug auf die 21B) oder während der Operation aktualisiert werden. Im Schritt 2 gibt ein Verarbeitungselement (z. B. auf einem Flusssteuerwegenetzwerk) oder eine andere Schaltung eine Null an den Steuereingang (z. B. das Multiplexer-Steuersignal) des Pick-Knotens 2204 aus (um z. B. eine Eins vom Port „0“ an seinen Ausgang zu entnehmen) und gibt eine Null an den Steuereingang (z. B. das Multiplexer-Steuersignal) des Switch-Knotens 2206 aus (um z. B. seinen Eingang aus dem Port „0“ an ein Ziel (z. B. an ein nachgelagertes Verarbeitungselement) auszugeben). Im Schritt 3 wird der Datenwert 1 vom Pick-Knoten 2204 (z. B., und nimmt sein Steuersignal „0“ am Pick-Knoten 2204 auf) zum Multipliziererknoten 2208 ausgegeben, damit es im Schritt 4 mit dem Datenwert von 2 multipliziert wird. Im Schritt 4 kommt der Ausgang des Multipliziererknotens 2208 am Switch-Knoten 2206 an, was z. B. bewirkt, dass der Switch-Knoten 2206 ein Steuersignal „0“ aufnimmt, um den Wert von 2 aus dem Port „0“ des Switch-Knotens 2206 im Schritt 5 auszugeben. Die Operation ist dann abgeschlossen. Ein CSA kann somit dementsprechend programmiert werden, so dass ein entsprechender Datenflussoperator für jeden Knoten die Operationen in der 22 durchführt. Obwohl die Ausführung in diesem Beispiel serialisiert ist, können alle Datenflussoperationen im Prinzip parallel ablaufen. Die Schritte werden in der 22 verwendet, um die Datenflussausführung von irgendeiner physikalischen Mikroarchitektur-Erscheinungsform zu unterscheiden. In einer Ausführungsform dient ein nachgelagertes Verarbeitungselement zum Senden eines Signals (oder zum Nicht-Senden eines Bereitschaftssignals) (z. B. auf einem Flusssteuerwegenetzwerk) an den Switch 2206, um den Ausgang des Switch 2206 abzustellen, z. B. bis das nachgelagerte Verarbeitungselement fertig für den Ausgang ist (z. B. Speicherplatz aufweist).
-
Speicher
-
Datenflussarchitekturen konzentrieren sich im Allgemeinen auf die Kommunikations- und Datenmanipulation, wobei dem Zustand weniger Aufmerksamkeit gewidmet wird. Allerdings erfordert das Aktivieren von realer Software, insbesondere von Programmen, die in sequentiellen Legacy-Sprachen geschrieben sind, erhebliche Aufmerksamkeit gegenüber der Verbindung mit Speicher. Bestimmte Ausführungsformen eines CSA verwenden architektonische Speicheroperationen als ihre primäre Schnittstelle zu (z. B. großem) zustandsabhängigem Speicher. Aus der Perspektive des Datenflussgraphen ähneln Speicheroperationen anderen Datenflussoperationen, mit der Ausnahme, dass sie den Nebeneffekt aufweisen, einen gemeinsam genutzten Speicher zu aktualisieren. Insbesondere weisen Speicheroperationen bestimmter Ausführungsformen hier die gleiche Semantik auf wie jeder andere Datenflussoperator, zum Beispiel „laufen sie ab“, wenn ihre Operanden, z. B. eine Adresse, verfügbar sind und, nach einer gewissen Latenz, eine Antwort produziert wird. Hier entkoppeln bestimmte Ausführungsformen explizit den eingegebenen Operanden und den resultierenden Ausgang, so dass Speicheroperatoren natürlicherweise mittels Pipeline geführt werden und das Potential aufweisen, viele zeitgleiche ausstehende Anforderungen zu produzieren, was sie z. B. außerordentlich geeignet für die Latenz- und Bandbreitencharakteristika eines Speichersubsystems macht. Ausführungsformen eines CSA stellen grundlegende Speicheroperationen, wie zum Beispiel Laden, das einen Adresskanal aufnimmt und einen Antwortkanal mit den der Adresse entsprechenden Werten befüllt, und einen Speicher bereit. Ausführungsformen eines CSA können auch fortgeschrittenere Operationen bereitstellen, wie zum Beispiel speicherinterne atomare und Konsistenzoperatoren. Diese Operationen können eine ähnliche Semantik wie ihre Von-Neumann-Gegenstücke aufweisen. Ausführungsformen eines CSA können vorhandene Programme beschleunigen, die unter Verwendung von sequentiellen Sprachen beschrieben worden sind, wie zum Beispiel C und Fortran. Eine Folge der Unterstützung dieser Sprachmodelle ist die Adressierung von Programmspeicherreihenfolge, z. B. des seriellen Anordnens von Speicheroperationen, die typischerweise durch diese Sprachen beschrieben werden.
-
Die 23 veranschaulicht eine Programmquelle (z. B. C-Code) 2300 gemäß Ausführungsformen der Offenbarung. Gemäß der Speichersemantik der Programmiersprache C sollte Speicherkopieren (memcpy) serialisiert sein. Allerdings kann memcpy mit einer Ausführungsform des CSA parallelisiert sein, falls die Arrays A und B als disjunkt bekannt sind. Die 23 veranschaulicht des Weiteren das Problem der Programmreihenfolge. Im Allgemeinen können Kompilierer nicht nachweisen, dass das Array A sich vom Array B unterscheidet, z. B. entweder für den gleichen Wert des Index oder für unterschiedliche Werte des Index über Schleifenkörper. Dies ist als Zeiger- oder Speicher-Alias-Effekt bekannt. Weil Kompilierer dazu dienen, statisch korrekten Code zu generieren, sind sie gewöhnlich gezwungen, Speicherzugriffe zu serialisieren. Typischerweise verwenden Kompilierer, die sequentielle Von-Neumann-Architekturen zum Ziel haben, das Befehlsanordnen als ein natürliches Mittel zum Durchsetzen einer Programmreihenfolge. Allerdings haben Ausführungsformen des CSA keine Neigung zum Befehls- oder befehlsbasierten Programmanordnen, wie es durch einen Programmzähler definiert wird. In bestimmten Ausführungsformen sind eingehende Abhängigkeits-Tokens, die z. B. keine architektonisch sichtbaren Informationen enthalten, wie alle anderen Datenfluss-Tokens, und Speicheroperationen laufen möglicherweise nicht ab, bis sie ein Abhängigkeits-Token empfangen haben. In bestimmten Ausführungsformen produzieren Speicheroperationen ein abgehendes Abhängigkeits-Token, sobald ihre Operation für alle logisch nachfolgenden, abhängigen Speicheroperationen sichtbar ist. In bestimmten Ausführungsformen ähneln Abhängigkeits-Tokens anderen Datenfluss-Tokens in einem Datenflussgraphen. Weil zum Beispiel Speicheroperationen in bedingten Kontexten vorkommen, können Abhängigkeits-Tokens ebenfalls unter Verwendung von Steueroperatoren manipuliert werden, die im Abschnitt 2.1 beschrieben worden sind, wie z. B. irgendwelche anderen Tokens. Abhängigkeits-Tokens können die Wirkung des Serialisierens von Speicherzugriffen haben, was z. B. dem Kompilierer ein Mittel bereitstellt, um die Reihenfolge von Speicherzugriffen architektonisch zu definieren.
-
Laufzeitdienste
-
Eine primäre architektonische Überlegung von Ausführungsformen des CSA bezieht die tatsächliche Ausführung von Programmen auf Nutzerebene mit ein, es kann jedoch auch wünschenswert sein, mehrere Unterstützungsmechanismen bereitzustellen, die diese Ausführung stärken. Die wichtigsten davon sind: Konfiguration (bei der ein Datenflussgraph in den CSA geladen wird), Extraktion (bei der der Zustand eines Ausführungsgraphen in den Speicher bewegt wird) und Ausnahmen (wobei mathematische Fehler, Soft Errors und andere Arten von Fehlern in der Fabric detektiert und behandelt werden, möglicherweise durch eine externe Instanz). Der nachstehende Abschnitt 3.6 erörtert die Eigenschaften einer latenzunempfindlichen Datenflussarchitektur einer Ausführungsform eines CSA zum Erreichen von effizienten Implementierungen dieser Funktionen, größtenteils mittels Pipeline. Konzeptionell kann diese Konfiguration den Zustand eines Datenflussgraphen in das Interconnect- (und/oder Kommunikations -) Netzwerk (z. B. eine Netzwerk-Datenflussendpunktschaltung davon) und die Verarbeitungselemente (z. B. Fabric) laden, z. B. im Allgemeinen aus dem Speicher. Während dieses Schritts können alle Strukturen im CSA mit einem neuen Datenflussgraphen geladen werden, und alle Datenfluss-Tokens leben in diesem Graphen, zum Beispiel als eine Folge eines Kontext-Switch. Die latenzunempfindliche Semantik eines CSA kann eine verteilte, asynchrone Initialisierung der Fabric zulassen, z. B. kann er unmittelbar mit der Ausführung beginnen, sobald die PEs konfiguriert sind. Unkonfigurierte PEs können ihre Kanäle zurückdrücken, bis sie konfiguriert sind, was z. B. Kommunikation zwischen konfigurierten und unkonfigurierten Elementen verhindert. Die CSA-Konfiguration kann in privilegierten und Nutzerebenen-Zustand aufgeteilt sein. Solch eine Aufteilung auf zwei Ebenen kann ermöglichen, dass die primäre Konfiguration der Fabric stattfindet, ohne dass das Betriebssystem aufgerufen wird. Während einer Ausführungsform der Extraktion wird eine logische Ansicht des Datenflussgraphen erfasst und in den Speicher geschrieben, z. B. einschließlich aller lebenden Steuer- und Datenfluss-Tokens und dem Zustand im Graphen.
-
Die Extraktion kann auch beim Bereitstellen von Zuverlässigkeitsgarantien über die Erzeugung von Fabric-Kontrollpunkten eine Rolle spielen. Ausnahmen in einem CSA können im Allgemeinen durch die gleichen Ereignisse bewirkt werden, die Ausnahmen in Prozessoren bewirken, wie zum Beispiel unerlaubte Operatorargumente oder Zuverlässigkeits-, Verfügbarkeits- und Wartbarkeits- (RAS-, Reliability, Availability, Serviceability) Ereignisse. In bestimmten Ausführungsformen werden Ausnahmen auf der Ebene von Datenflussoperatoren detektiert, zum Beispiel durch Kontrolle von Argumentenwerten oder über modulare Arithmetikschemata. Bei Detektion einer Ausnahme kann ein Datenflussoperator (z. B. Schaltung) anhalten und eine Ausnahmenachricht ausgeben, die z. B. sowohl einen Operationsidentifizierer als auch einige Details zur Art des Problems, das aufgetreten ist, enthält. In einer Ausführungsform wird der Datenflussoperator angehalten bleiben, bis er rekonfiguriert worden ist. Die Ausnahmenachricht kann dann zur Wartung an einen verknüpften Prozessor (z. B. Kern) kommuniziert werden, was z. B. das Extrahieren des Graphen zur Software-Analyse beinhalten kann.
-
Architektur auf Kachelebene
-
Ausführungsformen der CSA-Computerarchitekturen (die z. B. HPC- und Datenzentrumverwendungen zum Ziel haben) sind gekachelt. Die 24 und 26 zeigen Einsätze auf Kachelebene für einen CSA. Die 26 zeigt eine Implementierung mit ganzer Kachel eines CSA, der z. B. ein Beschleuniger eines Prozessors mit einem Kern sein kann. Ein Hauptvorteil dieser Architektur kann ein reduziertes Entwurfsrisiko sein, z. B. so dass der CSA und der Kern während der Herstellung komplett entkoppelt sind. Zusätzlich dazu, dass bessere Wiederverwendung von Komponenten ermöglicht wird, kann dies ermöglichen, dass der Entwurf von Komponenten, wie dem CSA-Cache, nur den CSA in Betracht zieht, anstatt z. B. die strengeren Latenzanforderungen des Kerns integrieren zu müssen. Schließlich können separate Kacheln die Integration des CSA mit kleinen oder großen Kernen ermöglichen. Eine Ausführungsform des CSA erfasst die meisten vektorparallelen Arbeitsbelastungen, so dass die meisten vektorartigen Arbeitsbelastungen direkt auf dem CSA laufen, jedoch können in bestimmten Ausführungsformen vektorartige Befehle im Kern eingeschlossen sein, um z. B. Legacy-Binärprogramme zu unterstützen.
-
MIKROARCHITEKTUR
-
In einer Ausführungsform ist das Ziel der CSA-Mikroarchitektur, eine Implementierung von hoher Qualität für jeden Datenflussoperator bereitzustellen, der durch die CSA-Architektur spezifiziert wird. Ausführungsformen der CSA-Mikroarchitektur stellen bereit, dass jedes Verarbeitungselement (und/oder Kommunikationsnetzwerk (z. B. eine Netzwerk-Datenflussendpunktschaltung davon)) der Mikroarchitektur ungefähr einem Knoten (z. B. Instanz) im architektonischen Datenflussgraphen entspricht. In einer Ausführungsform ist ein Knoten im Datenflussgraphen in mehreren Netzwerk-Datenflussendpunktschaltungen verteilt. In bestimmten Ausführungsformen führt dies zu mikroarchitektonischen Elementen, die nicht nur kompakt sind, was zu einem dichten Berechnungs-Array führt, sondern auch energieeffizient, wobei zum Beispiel Verarbeitungselemente (PEs) sowohl einfach als auch größtenteils nicht gemultiplext sind, z. B. einen einzelnen Datenflussoperator für eine Konfiguration (z. B. Programmierung) des CSA ausführen. Um die Energie und die Implementierungsfläche weiter zu reduzieren, kann ein CSA eine konfigurierbare heterogene Fabric-Art enthalten, bei der jedes PE davon nur ein Subset von Datenflussoperatoren implementiert (z. B. mit einem separaten Subset von Datenflussoperatoren, die mit Netzwerk-Datenflussendpunktschaltung(en) implementiert sind). Periphere und unterstützende Subsysteme, wie zum Beispiel der CSA-Cache, können zur Verfügung gestellt werden, um die verteilten Parallelitäten zu unterstützen, die für die Haupt-CSA-Verarbeitungs-Fabric selbst gelten. Die Implementierung der CSA-Mikroarchitekturen kann Datenfluss und latenzunempfindliche Kommunikationsabstraktionen nutzen, die in der Architektur vorhanden sind. In bestimmten Ausführungsformen besteht (z. B. im Wesentlichen) eine Eins-zu-Eins-Entsprechung zwischen Knoten im vom Kompilierer generierten Graphen und den Datenflussoperatoren (z. B. den Datenflussoperator-Berechnungselementen) in einem CSA.
-
Nachstehend folgt eine Erörterung eines beispielhaften CSA, gefolgt von einer ausführlicheren Erörterung der Mikroarchitektur. Hier stellen bestimmte Ausführungsformen einen CSA bereit, der einfache Kompilierung ermöglicht, z. B. im Gegensatz zu bereits vorhandenen FPGA-Kompilierern, die ein kleines Subset einer Programmiersprache (z. B. C oder C++) behandeln und viele Stunden sogar zum Kompilieren von kleinen Programmen benötigen.
-
Bestimmte Ausführungsformen einer CSA-Architektur lassen heterogene grobkörnige Operationen zu, wie Fließkomma-Operationen mit doppelter Genauigkeit. Programme können in weniger, grobkörnigen Operationen ausgedrückt werden, z. B. so dass der offenbarte Kompilierer schneller als herkömmliche dreidimensionale Kompilierer läuft. Bestimmte Ausführungsformen enthalten eine Fabric mit neuen Verarbeitungselementen, um sequentielle Konzepte zu unterstützen, wie durch Programm geordnete Speicherzugriffe. Bestimmte Ausführungsformen implementieren Hardware, um grobkörnige Kommunikationskanäle nach Datenflussart zu unterstützen. Dieses Kommunikationsmodell ist abstrakt und nahe an den vom Kompilierer verwendeten Steuer-Datenflussdarstellungen. Hier enthalten bestimmte Ausführungsformen eine Netzwerkimplementierung, die Kommunikationen mit Latenz von einem Zyklus unterstützt, z. B. unter Nutzung von (z. B. kleinen) PEs, die einzelne Steuer-Datenflussoperationen unterstützen. In bestimmten Ausführungsformen verbessert dies nicht nur die Energieeffizienz und Performance, es vereinfacht auch die Kompilierung, weil der Kompilierer ein Eins-zu-Eins-Mapping zwischen High-Level-Datenflusskonstrukten und der Fabric vornimmt. Hier vereinfachen somit bestimmte Ausführungsformen die Aufgabe, bereits vorhandene (z. B. C, C++ oder Fortran -) Programme für einen CSA (z. B. Fabric) zu kompilieren.
-
Die Energieeffizienz kann in modernen Computersystemen ein Anliegen ersten Ranges sein. Hier stellen bestimmte Ausführungsformen ein neues Schema von energieeffizienten dreidimensionalen Architekturen bereit. In bestimmten Ausführungsformen bilden diese Architekturen eine Fabric mit einer einzigartigen Zusammensetzung aus einer heterogenen Mischung von kleinen energieeffizienten datenflussorientierten Verarbeitungselementen (PEs) (und/oder einem paketvermittelnden Kommunikationsnetzwerk (z. B. einer Netzwerk-Datenflussendpunktschaltung davon)) mit einem leitungsvermittelnden Lightweight-Kommunikationsnetzwerk (z. B. Interconnect), z. B. mit verfestigter Unterstützung für Flusssteuerung. Aufgrund ihrer Vorteile in Bezug auf die Energie kann die Kombination dieser Komponenten einen dreidimensionalen Beschleuniger (z. B. als Teil eines Computers) bilden, der geeignet ist, vom Kompilierer generierte parallele Programme auf eine extrem energieeffiziente Art und Weise auszuführen. Weil diese Fabric heterogen ist, können bestimmte Ausführungsformen für unterschiedliche Anwendungsdomänen durch Einbringen von neuen, domänenspezifischen PEs angepasst werden. Zum Beispiel könnte eine Fabric für hochperformante Berechnungen einige Anpassungen für zusammengefasstes Multiplizieren-Addieren mit doppelter Genauigkeit enthalten, während eine Fabric, das auf tiefe neuronale Netzwerke abzielt, Fließkomma-Operationen mit geringer Genauigkeit enthalten könnte.
-
Eine Ausführungsform eines dreidimensionalen Architekturschemas, wie z. B. in der 24 beispielhaft gezeigt, ist die Zusammensetzung aus Lightweight-Verarbeitungselementen (PEs), die durch ein Inter-PE-Netzwerk verbunden sind. Im Allgemeinen können PEs Datenflussoperatoren umfassen, wobei z. B., sobald (z. B. alle) Eingangsoperanden am Datenflussoperator ankommen, irgendeine Operation (z. B. ein Mikrobefehl oder ein Satz von Mikrobefehlen) ausgeführt wird und die Ergebnisse an nachgelagerte Operatoren weitergeleitet werden. Steuerung, Scheduling und Datenspeicherung können daher unter den PEs verteilt werden, was z. B. den Overhead der zentralisierten Strukturen beseitigt, die klassische Prozessoren beherrschen.
-
Programme können in Datenflussgraphen konvertiert werden, die auf die Architektur abgebildet sind, indem PEs und das Netzwerk konfiguriert werden, um den Steuer-Datenflussgraphen des Programms auszudrücken. Kommunikationskanäle können flussgesteuert sein und vollständig Backpressure verwenden, z. B. so dass PEs aussetzen werden, falls entweder die Quell-Kommunikationskanäle keine Daten haben oder die Ziel-Kommunikationskanäle voll sind. In einer Ausführungsform fließen zur Laufzeit Daten durch die PEs und Kanäle, die dazu konfiguriert sind, die Operation zu implementieren (z. B. einen beschleunigten Algorithmus). Zum Beispiel können Daten aus dem Speicher übertragen werden, durch die Fabric und dann zurück hinaus zum Speicher.
-
Ausführungsformen einer solchen Architektur können bemerkenswerte Performance-Effizienz im Vergleich zu herkömmlichen Mehrkernprozessoren erreichen: das Berechnen (z. B. in der Form von PEs) kann einfacher, energieeffizienter und umfangreicher als in größeren Kernen sein, und die Kommunikationen können direkt und meist auf kurzen Strecken erfolgen, z. B. im Gegensatz dazu, dass sie über ein weites vollständiges Chip-Netzwerk, wie in typischen Mehrkernprozessoren, erfolgen. Weil Ausführungsformen der Architektur extrem parallel sind, sind außerdem eine Reihe von leistungsstarken Optimierungen auf Schaltungs- und Einrichtungsebene möglich, ohne sich ernsthaft auf den Durchsatz auszuwirken, z. B. Einrichtungen mit geringer Streuung und niedriger Betriebsspannung. Diese Optimierungen auf niedrigerer Ebene können sogar größere Performance-Vorteile als herkömmliche Kerne ermöglichen. Die Kombination von Effizienzgewinnen auf den Architektur-, Schaltungs- und Einrichtungsebenen dieser Ausführungsformen sind überzeugend. Ausführungsformen dieser Architektur können größere aktive Flächen ermöglichen, weil die Transistordichte weiter zunimmt.
-
Hier bieten Ausführungsformen eine einzigartige Kombination von Datenflussunterstützung und Schaltungs-Switch, um zu ermöglichen, dass die Fabric kleiner und energieeffizienter wird, und stellen höhere aggregierte Performance als frühere Architekturen bereit. FPGAs sind im Allgemeinen auf feinkörnige Bit-Manipulation abgestimmt, wohingegen hier Ausführungsformen auf die Fließkomma-Operationen mit doppelter Genauigkeit, wie sie in HPC-Anwendungen zu finden sind, abgestimmt sind. Hier können bestimmte Ausführungsformen ein FPGA zusätzlich zu einem CSA gemäß dieser Offenbarung enthalten.
-
Hier kombinieren bestimmte Ausführungsformen ein Lightweight-Netzwerk mit energieeffizienten Datenfluss-Verarbeitungselementen (und/oder einem Kommunikationsnetzwerk (z. B. einer Netzwerk-Datenflussendpunktschaltung davon)), um eine energieeffiziente HPC-Fabric mit hohem Durchsatz und geringer Latenz zu bilden. Dieses Netzwerk mit geringer Latenz kann das Formen von Verarbeitungselementen (und/oder einem Kommunikationsnetzwerk (z. B. einer Netzwerk-Datenflussendpunktschaltung davon)) mit weniger Funktionalitäten ermöglichen, zum Beispiel nur einem oder zwei Befehlen und vielleicht einem architektonisch sichtbaren Register, weil es effizient ist, mehrere PEs zusammen zu koppeln, um ein vollständiges Programm zu bilden.
-
In Bezug auf einen Prozessorkern können CSA-Ausführungsformen hier für mehr Rechendichte und Energieeffizienz sorgen. Wenn zum Beispiel die PEs sehr klein sind (z. B. im Vergleich zu einem Kern), kann der CSA viel mehr Operationen durchführen und sehr viel mehr Rechenparallelitäten aufweisen als ein Kern, z. B. vielleicht 16 Mal die Anzahl an FMAs wie eine Vektorverarbeitungseinheit (VPU). Um alle diese Rechenelemente zu nutzen, ist die Energie pro Operation in bestimmten Ausführungsformen sehr gering.
-
Die Energievorteile unserer Ausführungsformen in dieser Datenflussarchitektur sind zahlreich. Parallelität ist in Datenflussgraphen und Ausführungsformen der CSA-Architektur explizit, die keine oder minimale Energie für ihre Extraktion aufwenden, z. B. anders als Out-of-Order-Prozessoren, die Parallelität jedes Mal wieder erkennen müssen, wenn ein Befehl ausgeführt wird. Weil jedes PE für eine einzelne Operation in einer Ausführungsform zuständig ist, können die Registerdateien und Portzählwerte klein sein, z. B. häufig nur Eins, und verwenden daher weniger Energie als ihre Gegenstücke im Kern. Bestimmte CSAs enthalten viele PEs, die jeweils lebende Programmwerte halten, was die aggregierte Wirkung einer riesigen Registerdatei in einer herkömmlichen Architektur ergibt, was die Speicherzugriffe dramatisch reduziert. In Ausführungsformen, bei denen der Speicher mehrere Ports aufweist und verteilt ist, kann ein CSA viel mehr ausstehende Speicheranforderungen halten und mehr Bandbreite nutzen als ein Kern. Diese Vorteile können sich kombinieren, so dass sich ein Energielevel pro Watt ergibt, das nur einen geringen Prozentsatz über dem Aufwand der reinen Arithmetikschaltungsanordnung liegt. Zum Beispiel kann ein CSA im Fall einer Ganzzahl-Multiplikation nicht mehr als 25 % mehr Energie verbrauchen als die zugrundeliegende Multiplikationsschaltung. In Bezug auf eine Ausführungsform eines Kerns verbraucht eine Ganzzahl-Operation in dieser CSA-Fabric weniger als 1/30tel der Energie pro Ganzzahl-Operation.
-
Aus der Programmierungsperspektive erreicht die anwendungsspezifische Formbarkeit von Ausführungsformen der CSA-Architektur erhebliche Vorteile gegenüber einer Vektorverarbeitungseinheit (VPU). Bei herkömmlichen unflexiblen Architekturen muss die Anzahl von Funktionseinheiten, wie Fließkomma-Division oder die verschiedenen transzendenten mathematischen Funktionen, zum Zeitpunkt des Entwurfs auf Basis einiger erwarteter Verwendungsfälle gewählt werden. In Ausführungsformen der CSA-Architektur können solche Funktionen in die Fabric auf Basis der Anforderungen jeder Anwendung konfiguriert werden (z. B. von einem Nutzer und nicht vom Hersteller). Der Durchsatz der Anwendung kann dadurch weiter erhöht werden. Zeitgleich verbessert sich die Rechendichte von Ausführungsformen des CSA durch Vermeiden der Verfestigung solcher Funktionen und stattdessen Bereitstellung von mehr Stammfunktionsinstanzen, wie Fließkomma-Multiplikation. Diese Vorteile können bei HPC-Arbeitsbelastungen erheblich sein, von denen einige 75 % der Fließkomma-Ausführungszeit mit transzendenten Funktionen verbringen.
-
Bestimmte Ausführungsformen des CSA stellen einen erheblichen Vorteil als eine datenflussorientierte dreidimensionale Architektur dar, z. B. können die PEs dieser Offenbarung kleiner, jedoch auch energieeffizienter sein. Diese Verbesserungen können sich direkt aus der Kombination von datenflussorientierten PEs mit einem leitungsvermittelnden Lightweight-Interconnect ergeben, das zum Beispiel eine Latenz von einem Zyklus aufweist, z. B. im Gegensatz zu einem paketvermittelnden Netzwerk (z. B. mit einer mindestens 300 % höheren Latenz). Bestimmte Ausführungsformen von PEs unterstützen 32-Bit- oder 64-Bit-Operation. Hier lassen bestimmte Ausführungsformen das Einbringen neuer anwendungsspezifischer PEs zu, zum Beispiel für maschinelles Lernen oder Sicherheit, und nicht lediglich eine homogene Kombination. Hier kombinieren bestimmte Ausführungsformen datenflussorientierte Lightweight-Verarbeitungselemente mit einem Lightweight-Netzwerk mit geringer Latenz, um eine energieeffiziente Rechen-Fabric zu bilden.
-
Damit bestimmte dreidimensionale Architekturen erfolgreich sind, sollten Programmierer sie mit relativ geringem Aufwand konfigurieren, während z. B. die erhebliche Leistungs- und Performance-Überlegenheit gegenüber sequentiellen Kernen erhalten wird. Hier sorgen bestimmte Ausführungsformen für einen CSA (z. B. dreidimensionale Fabric), der leicht zu programmieren (z. B. von einem Kompilierer), leistungseffizient und hochgradig parallel ist. Hier sorgen bestimmte Ausführungsformen für ein (z. B. Interconnect -) Netzwerk, das diese drei Ziele erreicht. Aus der Perspektive der Programmierbarkeit stellen bestimmte Ausführungsformen des Netzwerks flussgesteuerte Kanäle bereit, die z. B. dem in Kompilierern verwendeten Steuer-Datenflussgraphen- (CDFG -) Modell entsprechen. Bestimmte Netzwerkausführungsformen nutzen dedizierte leitungsvermittelnde Links, so dass es einfacher ist, über die Programm-Performance nachzudenken, sowohl seitens eines Menschen als auch eines Kompilierers, weil die Performance prognostizierbar ist. Bestimmte Netzwerkausführungsformen bieten sowohl eine hohe Bandbreite als auch geringe Latenz. Bestimmte Netzwerkausführungsformen (z. B. statische, leitungsvermittelnde) stellen eine Latenz von 0 bis 1 Zyklus bereit (abhängig vom Übertragungsabstand). Bestimmte Netzwerkausführungsformen sorgen für eine hohe Bandbreite, indem sie mehrere Netzwerke parallel und z. B. in Metallen niedriger Levels auslegen. Bestimmte Netzwerkausführungsformen kommunizieren in Metallen niedriger Levels und über kurze Abstände und sind somit sehr leistungseffizient.
-
Bestimmte Ausführungsformen von Netzwerken enthalten architektonische Unterstützung zur Flusssteuerung. Zum Beispiel können in dreidimensionalen Beschleunigern, die aus kleinen Verarbeitungselementen (PEs) bestehen, die Kommunikationslatenz und -bandbreite entscheidend für die gesamte Programm-Performance sein. Hier sorgen bestimmte Ausführungsformen für ein leitungsvermittelndes Lightweight-Netzwerk, das die Kommunikation zwischen PEs in dreidimensionalen Verarbeitungs-Arrays ermöglicht, wie zum Beispiel das in der 24 gezeigte dreidimensionale Array, und die mikroarchitektonischen Steuermerkmale, die zur Unterstützung dieses Netzwerks erforderlich sind. Bestimmte Ausführungsformen eines Netzwerks ermöglichen den Aufbau von flussgesteuerten Punkt-zu-Punkt-Kommunikationskanälen, die die Kommunikationen der datenflussorientierten Verarbeitungselemente (PEs) unterstützen. Zusätzlich zu Punkt-zu-Punkt-Kommunikationen unterstützen bestimmte Netzwerke hier auch Multicast-Kommunikationen. Kommunikationskanäle können gebildet werden, indem das Netzwerk statisch konfiguriert wird, um virtuelle Schaltungen zwischen PEs zu bilden. Leitungsvermittelnde Techniken können hier die Kommunikationslatenz verringern und Netzwerkpufferung entsprechend minimieren, was z. B. sowohl zu hoher Performance als auch zu hoher Energieeffizienz führt. In bestimmten Ausführungsformen eines Netzwerks kann die Inter-PE-Latenz nur null Zyklen betragen, was bedeutet, dass das nachgelagerte PE in dem Zyklus auf den Daten arbeiten kann, nachdem sie produziert worden sind. Um sogar noch höhere Bandbreite zu erhalten und mehr Programme zuzulassen, können mehrere Netzwerke parallel ausgelegt werden, wie z. B. in der 24 gezeigt wird.
-
Dreidimensionale Architekturen, wie zum Beispiel die in der 24 gezeigte, können die Anordnung von Lightweight-Verarbeitungselementen sein, die durch ein Inter-PE-Netzwerk verbunden sind (und/oder Kommunikationsnetzwerk (z. B. eine Netzwerk-Datenflussendpunktschaltung davon)). Programme, die wie Datenflussgraphen gesehen werden, können auf die Architektur abgebildet werden, indem PEs und das Netzwerk konfiguriert werden. Im Allgemeinen können PEs als Datenflussoperatoren konfiguriert werden, und sobald (z. B. alle) Eingangsoperanden am PE ankommen, kann dann irgendeine Operation erfolgen, und das Ergebnis kann an die gewünschten nachgelagerten PEs weitergeleitet werden. PEs können über dedizierte virtuelle Schaltungen kommunizieren, die durch statisches Konfigurieren eines leitungsvermittelnden Kommunikationsnetzwerks gebildet werden. Diese virtuellen Schaltungen können flussgesteuert sein und vollständig Backpressure verwenden, z. B. so dass PEs aussetzen werden, falls entweder die Quelle keine Daten hat oder das Ziel voll ist. Zur Laufzeit können Daten durch die PEs fließen, was den abgebildeten Algorithmus implementiert. Zum Beispiel können Daten aus dem Speicher übertragen werden, durch die Fabric und dann zurück hinaus zum Speicher. Ausführungsformen dieser Architektur können relativ zu herkömmlichen Mehrkernprozessoren bemerkenswerte Performance-Effizienz erreichen: wobei zum Beispiel das Berechnen in der Form von PEs einfacher und zahlreicher als bei größeren Kernen ist und die Kommunikationen direkt erfolgen, im Gegensatz z. B. zu einer Erweiterung des Speichersystems.
-
Die 24 veranschaulicht eine Beschleunigerkachel 2400, die ein Array von Verarbeitungselementen (PEs) umfasst, gemäß Ausführungsformen der Offenbarung. Das Interconnect-Netzwerk wird als leitungsvermittelnde, statisch konfigurierte Kommunikationskanäle gezeigt. Zum Beispiel ein Satz von Kanälen, die durch einen Switch miteinander gekoppelt sind (z. B. den Switch 2410 in einem ersten Netzwerk und den Switch 2411 in einem zweiten Netzwerk). Das erste Netzwerk und das zweite Netzwerk können getrennt oder miteinander gekoppelt sein. Zum Beispiel kann der Switch 2410 einen oder mehrere der vier Datenwege (2412, 2414, 2416, 2418) miteinander koppeln, wie es z. B. zum Durchführen einer Operation entsprechend einem Datenflussgraphen konfiguriert ist. In einer Ausführungsform ist die Anzahl an Datenwegen irgendeine Vielzahl. Das Verarbeitungselement (z. B. das Verarbeitungselement 2404) kann so wie hier offenbart sein, zum Beispiel wie in der 27. Die Beschleunigerkachel 2400 enthält eine Speicher -/Cache-Hierarchieschnittstelle 2402, z. B. um die Beschleunigerkachel 2400 an einen Speicher und/oder Cache anzuschließen. Ein Datenweg (z. B. 2418) kann zu einer anderen Kachel verlaufen oder enden, z. B. an der Kante einer Kachel. Ein Verarbeitungselement kann einen Eingangspuffer (z. B. den Puffer 2406) und einen Ausgangspuffer (z. B. den Puffer 2408) enthalten.
-
Operationen können auf Basis der Verfügbarkeit ihrer Eingänge und dem Status des PE ausgeführt werden. Ein PE kann Operanden von Eingangskanälen erhalten und Ergebnisse an Ausgangskanäle schreiben, obwohl auch ein interner Registerzustand verwendet werden kann. Hier enthalten bestimmte Ausführungsformen ein konfigurierbares datenflussgerechtes PE. Die 27 zeigt ein detailliertes Blockschaltbild eines solchen PE: das Ganzzahl-PE. Dieses PE besteht aus mehreren E/A-Puffern, einer ALU, einem Speicherregister, einigen Befehlsregistern und einem Scheduler. In jedem Zyklus kann der Scheduler einen Befehl zur Ausführung auf Basis der Verfügbarkeit der Eingangs- und Ausgangspuffer und des Status des PE auswählen. Das Resultat der Operation kann dann entweder in einen Ausgangspuffer oder in ein Register (z. B. lokal für das PE) geschrieben werden. Daten, die in einen Ausgangspuffer geschrieben werden, können zur weiteren Verarbeitung zu einem nachgelagerten PE transportiert werden. Diese Art von PE kann extrem energieeffizient sein, zum Beispiel liest ein PE die Daten aus einem Register, statt Daten aus einer komplexen Multiport-Registerdatei zu lesen. Gleichermaßen können Befehle direkt in einem Register gespeichert werden, statt in einem virtualisierten Befehls-Cache.
-
Die Befehlsregister können während eines speziellen Konfigurationsschritts gesetzt werden. Während dieses Schritts können Zusatz-Steuerleitungen und -zustand zusätzlich zum Inter-PE-Netzwerk verwendet werden, um über die mehreren PEs, die die Fabric umfassen, die Konfiguration zu übertragen. Als Ergebnis der Parallelität können bestimmte Ausführungsformen solch eines Netzwerks für schnelle Rekonfiguration sorgen, z. B. kann eine Fabric von Kachelgröße in weniger als etwa 10 Mikrosekunden konfiguriert werden.
-
Die 27 stellt eine beispielhafte Konfiguration eines Verarbeitungselements dar, in dem z. B. alle architektonischen Elemente kleinstmöglich dimensioniert sind. In anderen Ausführungsformen ist jede der Komponenten eines Verarbeitungselements unabhängig skaliert, um neue PEs zu produzieren. Um zum Beispiel kompliziertere Programme zu behandeln, kann eine größere Anzahl von Befehlen, die von einem PE ausführbar sind, eingebracht werden. Eine zweite Abmessung der Konfigurierbarkeit liegt in der Funktion der PE-Arithmetik-Logik-Einheit (ALU). In der 27 wird ein Ganzzahl-PE gezeigt, das Addition, Subtraktion und verschiedene Logikoperationen unterstützen kann. Andere Arten von PEs können durch Ersetzen von unterschiedlichen Arten von Funktionseinheiten im PE geschaffen werden. Ein Ganzzahl-Multiplikations-PE kann zum Beispiel keine Register, einen einzelnen Befehl und einen einzelnen Ausgangspuffer aufweisen. Bestimmte Ausführungsformen eines PE zerlegen ein zusammengefasstes Multiplizieren-Addieren (FMA, Fused Multiply-Add) in separate, jedoch eng gekoppelte Fließkomma-Multiplizier- und Fließkomma-Addiereinheiten, um die Unterstützung für hohe Multiplizier-Addier-Arbeitsbelastungen zu verbessern. PEs werde nachstehend weiter erörtert.
-
Die 25A veranschaulicht ein konfigurierbares Datenwegenetzwerk 2500 (z. B. das Netzwerk Eins oder das Netzwerk Zwei, die in Bezug auf die 24 erörtert worden sind) gemäß Ausführungsformen der Offenbarung. Das Netzwerk 2500 enthält mehrere Multiplexer (z. B. die Multiplexer 2502, 2504, 2506), die dazu konfiguriert sein können (z. B. über ihre jeweiligen Steuersignale), einen oder mehrere Datenwege (z. B. aus PEs) zu verbinden. Die 25B veranschaulicht ein konfigurierbares Flusssteuerwegenetzwerk 2501 (z. B. das Netzwerk Eins oder das Netzwerk Zwei, die in Bezug auf die 24 erörtert worden sind) gemäß Ausführungsformen der Offenbarung. Ein Netzwerk kann ein PE-zu-PE-Lightweight-Netzwerk sein. Bestimmte Ausführungsformen eines Netzwerks können als ein Satz von zusammensetzbaren Stammfunktionen für den Aufbau von verteilten Punkt-zu-Punkt-Datenkanälen gedacht sein. Die 25A zeigt ein Netzwerk, das zwei aktivierte Kanäle aufweist, die fette schwarze Linie und die gestrichelte schwarze Linie. Der Kanal der fetten schwarzen Linie ist ein Multicast, z. B. ein einzelner Eingang wird an zwei Ausgänge gesendet. Es sei angemerkt, dass diese Kanäle sich an einigen Punkten innerhalb eines einzelnen Netzwerks kreuzen können, obwohl dedizierte leitungsvermittelnde Wege zwischen Kanalendpunkten gebildet werden. Des Weiteren bringt dieses Kreuzen möglicherweise kein strukturelles Risiko zwischen den beiden Kanälen ein, so dass jeder unabhängig und mit voller Bandbreite arbeitet.
-
Das Implementieren von verteilten Datenkanälen kann zwei Wege enthalten, die in den 25A - 25B veranschaulicht sind. Der Vorwärts- oder Datenweg überträgt Daten von einem Erzeuger zu einem Verbraucher. Multiplexer können dazu konfiguriert sein, Daten und gültige Bits vom Erzeuger zum Verbraucher zu lenken, wie z. B. in der 25A. Im Fall von Multicast werden die Daten zu mehreren Verbraucherendpunkten gelenkt. Der zweite Abschnitt dieser Ausführungsform eines Netzwerks ist der Flusssteuer- oder Backpressure-Weg, der entgegengesetzt zum Vorwärtsdatenweg fließt, wie z. B. in der 25B. Verbraucherendpunkte können bestätigen, wenn sie zum Annehmen neuer Daten bereit sind. Diese Signale können dann unter Verwendung konfigurierbarer logischer Verbindungen, die in der 25B als (z. B. Rückfluss -) Flusssteuerfunktion bezeichnet werden, zurück zum Erzeuger gelenkt werden. In einer Ausführungsform kann jede Flusssteuer-Funktionsschaltung mehrere Switches (z. B. Multiplexer) sein, zum Beispiel ähnlich der 25A. Der Flusssteuerweg kann zurückkommende Steuerdaten vom Verbraucher zum Erzeuger behandeln. Die Verbindungen können Multicast ermöglichen, wobei z. B. jeder Verbraucher bereit ist, Daten zu empfangen, bevor der Erzeuger annimmt, dass sie empfangen worden sind. In einer Ausführungsform ist ein PE ein PE, das einen Datenflussoperator an seiner architektonischen Schnittstelle aufweist. Zusätzlich oder alternativ kann ein PE in einer Ausführungsform irgendeine Art von PE (z. B. in der Fabric) sein, zum Beispiel, aber nicht darauf beschränkt, ein PE, das eine architektonische Schnittstelle auf Basis eines Befehlszeigers, eines getriggerten Befehls oder einer Zustandsmaschine aufweist.
-
Das Netzwerk kann statisch konfiguriert sein, z. B. zusätzlich dazu, dass die PEs statisch konfiguriert sind. Während des Konfigurationsschritts können Konfigurationsbits an jeder Netzwerkkomponente gesetzt werden. Diese Bits steuern zum Beispiel die Multiplexerauswahlen und die Flusssteuerfunktionen. Ein Netzwerk kann mehrere Netzwerke umfassen, z. B. ein Datenwegenetzwerk und ein Flusssteuerwegenetzwerk. Ein Netzwerk oder mehrere Netzwerke können Wege von unterschiedlichen Breiten nutzen (z. B. einer ersten Breite und einer engeren oder breiteren Breite). In einer Ausführungsform weist ein Datenwegenetzwerk eine breitere (z. B. Bittransport -) Breite auf als die Breite eines Flusssteuerwegenetzwerks. In einer Ausführungsform enthalten ein erstes Netzwerk und ein zweites Netzwerk jeweils ihr eigenes Datenwegenetzwerk und Flusssteuernetzwerk, z. B. das Datenwegenetzwerk A und das Flusssteuernetzwerk A und das breitere Datenwegenetzwerk B und das Flusssteuernetzwerk B.
-
Bestimmte Ausführungsformen eines Netzwerks sind pufferlos, und Daten müssen zwischen dem Erzeuger und dem Verbraucher in einem einzelnen Zyklus bewegt werden. Bestimmte Ausführungsformen eines Netzwerks sind auch unbeschränkt, das heißt, das Netzwerk überspannt die gesamte Fabric. In einer Ausführungsform dient ein PE dazu, in einem einzelnen Zyklus mit irgendeinem anderen PE zu kommunizieren. Um die Routing-Bandbreite zu verbessern, können in einer Ausführungsform mehrere Netzwerke parallel zwischen Reihen von PEs ausgelegt werden.
-
Bezogen auf FPGA weisen bestimmte Ausführungsformen von Netzwerken hier drei Vorteile auf: Fläche, Frequenz und Programmausdruck. Bestimmte Ausführungsformen von Netzwerken arbeiten hier auf grobkörniger Basis, was z. B. die Anzahl an Konfigurationsbits reduziert und dadurch die Fläche des Netzwerks. Bestimmte Ausführungsformen von Netzwerken erhalten Flächenreduktion durch Implementieren von Flusssteuerlogik direkt in Schaltungsanordnungen (z. B. Silicium). Bestimmte Ausführungsformen von verfestigten Netzwerkimplementierungen erfreuen sich auch eines Frequenzvorteils gegenüber FPGA. Wegen eines Flächen- und Frequenzvorteils kann ein Leistungsvorteil vorhanden sein, wobei eine niedrigere Spannung bei Gleichheit des Durchsatzes verwendet wird. Schließlich stellen bestimmte Ausführungsformen von Netzwerken bessere High-Level-Semantik als FPGA-Leitungen bereit, insbesondere in Bezug auf variables Timing, und somit werden diese bestimmten Ausführungsformen einfacher von Kompilierern angesprochen. Bestimmte Ausführungsformen von Netzwerken können hier als ein Satz von zusammensetzbaren Stammfunktionen für den Aufbau von verteilten Punkt-zu-Punkt-Datenkanälen gedacht sein.
-
In bestimmten Ausführungsformen kann eine Multicast-Quelle ihre Daten nicht als gültig bestätigen, es sei denn, sie empfängt ein Bereitschaftssignal aus jeder Senke. Daher kann im Multicast-Fall ein zusätzliches Verbindungs- und Steuerbit genutzt werden.
-
Wie bestimmte PEs kann das Netzwerk statisch konfiguriert sein. Während dieses Schritts werden Konfigurationsbits an jeder Netzwerkkomponente gesetzt. Diese Bits steuern zum Beispiel die Multiplexerauswahl und die Flusssteuerfunktion. Der Vorwärtsweg unseres Netzwerks erfordert einige Bits zum Schwingen seiner Multiplexer. In dem in der
25A gezeigten Beispiel sind vier Bits pro Hop erforderlich: Die East- und West-Multiplexer nutzen jeweils nur ein Bit, während der nach South gerichtete Multiplexer zwei Bits nutzt. In dieser Ausführungsform können vier Bits für den Datenweg genutzt werden, aber 7 Bits können für die Flusssteuerfunktion genutzt werden (z. B. im Flusssteuerwegenetzwerk). Andere Ausführungsformen können mehr Bits nutzen, zum Beispiel falls ein CSA weiter eine North-South-Richtung nutzt. Die Flusssteuerfunktion kann ein Steuerbit für jede Richtung nutzen, aus der die Flusssteuerung kommen kann. Dies kann das statische Einstellen der Empfindlichkeit der Flusssteuerfunktion ermöglichen. Die nachstehende Tabelle 1 fasst die Implementierung mit Boolescher Algebra der Flusssteuerfunktion des Netzwerks in der
25B zusammen, wobei Konfigurationsbits großgeschrieben sind. In diesem Beispiel werden sieben Bits genutzt.
Tabelle 1: Flussimplementierung
readyToEast | (EAST_WEST_SENSITIVE + readyFromWest)* (EAST_SOUTH_SENSITIVE + readyFromSouth) |
readyToWest | (WEST_EAST_SENSITIVE + readyFromEast) * (WEST_SOUTH_SENSITIVE + readyFromSouth) |
readyToNorth | (NORTH_WEST_SENSITIVE + readyFromWest)* (NORTH_EAST_SENSITIVE + readyFromEast)* (NORTH_SOUTH_SENSITIVE + readyFromSouth) |
Für den dritten Flusssteuerungskasten von links in der
25B werden EAST_WEST_SENSITIVE und NORTH_SOUTH_SENSITIVE als Satz zum Implementieren der Flusssteuerung für die Kanäle mit der fetten Linie bzw. der gestrichelten Linie gezeigt.
-
Die 26 veranschaulicht eine Hardware-Prozessorkachel 2600, die einen Beschleuniger 2602 umfasst, gemäß Ausführungsformen der Offenbarung. Der Beschleuniger 2602 kann gemäß dieser Offenbarung ein CSA sein. Die Kachel 2600 enthält mehrere Cache-Bänke (z. B. die Cache-Bank 2608). Die Request Address File- (RAF -) Schaltungen 2610 können enthalten sein, wie z. B. nachstehend im Abschnitt 3.2 erörtert wird. ODI kann sich auf einen On-Die-Interconnect beziehen, z. B. einen Interconnect, der sich über einen gesamten Die erstreckt, der alle Kacheln verbindet. OTI kann sich auf einen On-Tile-Interconnect beziehen, der sich zum Beispiel über eine Kachel erstreckt, der z. B. Cache-Bänke auf der Kachel miteinander verbindet.
-
Verarbeitungselemente
-
In bestimmten Ausführungsformen enthält ein CSA ein Array aus heterogenen PEs, in dem die Fabric aus mehreren Arten von PEs zusammengesetzt ist, von denen jedes nur ein Subset der Datenflussoperatoren implementiert. Als Beispiel: Die 27 zeigt eine vorläufige Implementierung eines PE, das in der Lage ist, einen breiten Satz der Ganzzahl- und Steueroperationen zu implementieren. Andere PEs, einschließlich diejenigen, die Fließkomma-Addition, Fließkomma-Multiplikation, Pufferung und bestimmte Steueroperationen unterstützen, können eine ähnliche Implementierungsart aufweisen, z. B. mit der geeigneten (Datenflussoperator -) Schaltungsanordnung, durch die die ALU ersetzt worden ist. PEs (z. B. Datenflussoperatoren) eines CSA können vor Beginn der Ausführung konfiguriert (z. B. programmiert) werden, um eine besondere Datenflussoperation aus dem Satz, den das PE unterstützt, zu implementieren. Eine Konfiguration kann ein oder zwei Steuerwörter enthalten, die einen Opcode spezifizieren, der die ALU steuert, die verschiedenen Multiplexer innerhalb des PE lenkt und den Datenfluss in und aus den PE-Kanälen ansteuert. Datenflussoperatoren können durch Mikrocodierung dieser Konfigurationsbits implementiert werden. Das gezeigte Ganzzahl-PE 2700 in der 27 ist als eine einstufige logische Pipeline, die von oben nach unten läuft, organisiert. Die Daten treten in das PE 2700 aus einem Satz logischer Netzwerke ein, wo sie in einem Eingangspuffer für die nachfolgende Operation registriert werden. Jedes PE kann eine Reihe von breiten, datenorientierten und engen, steuerungsorientierten Kanälen unterstützen. Die Anzahl von zur Verfügung gestellten Kanälen kann auf Basis der PE-Funktionalität variieren, eine Ausführungsform eines ganzzahlig orientierten PE weist jedoch 2 breite und 1 - 2 enge Eingangs- und Ausgangskanäle auf. Obwohl das Ganzzahl-PE als eine Pipeline für einen Zyklus implementiert ist, können andere Pipeline-Wahlen genutzt werden. Zum Beispiel können Multiplikations-PEs mehrere Pipeline-Stufen aufweisen.
-
Die PE-Ausführung kann in einer Datenflussart fortfahren. Auf Basis des Konfigurations-Mikrocodes kann der Scheduler den Status der PE-Eingangs- und -Ausgangspuffer untersuchen, und wenn alle Eingänge für die konfigurierte Operation angekommen sind und der Ausgangspuffer der Operation verfügbar ist, organisiert er die tatsächliche Ausführung der Operation durch einen Datenflussoperator (z. B. auf der ALU). Der resultierende Wert kann im konfigurierten Ausgangspuffer platziert werden. Die Übertragungen zwischen dem Ausgangspuffer eines PE und dem Eingangspuffer eines anderen PE können asynchron erfolgen, wenn die Pufferung verfügbar wird. In bestimmten Ausführungsformen werden PEs zur Verfügung gestellt, so dass wenigstens eine Datenflussoperation pro Zyklus abgeschlossen wird. Der Abschnitt 2 erörterte den Datenflussoperator, der Stammfunktionsoperationen umfasst, wie zum Beispiel Addieren, XOR oder Pick. Bestimmte Ausführungsformen können Vorteile hinsichtlich der Energie, der Fläche, der Performance und der Latenz bereitstellen. In einer Ausführungsform mit einer Erweiterung zu einem PE-Steuerweg können weitere zusammengefasste Kombinationen ermöglicht werden. In einer Ausführungsform beträgt die Breite der Verarbeitungselemente 64 Bits, z. B. für die starke Nutzung von Fließkomma-Berechnungen mit doppelter Genauigkeit beim HPC und um 64-Bit-Speicheradressierung zu unterstützen.
-
Kommunikationsnetzwerke
-
Ausführungsformen der CSA-Mikroarchitektur stellen eine Hierarchie von Netzwerken bereit, die zusammen eine Implementierung der architektonischen Abstraktion von latenzunempfindlichen Kanälen über mehrere Kommunikationsskalen bereitstellen. Die unterste Ebene der CSA-Kommunikationshierarchie kann das lokale Netzwerk sein. Das lokale Netzwerk kann statisch leitungsvermittelnd sein, z. B. unter Verwendung von Konfigurationsregistern, um den/die Multiplexer im lokalen Netzwerk-Datenweg schwingen zu lassen, um feste elektrische Wege zwischen kommunizierenden PEs zu bilden. In einer Ausführungsform wird die Konfiguration des lokalen Netzwerks einmal je Datenflussgraph gesetzt, z. B. zur gleichen Zeit wie die PE-Konfiguration. In einer Ausführungsform optimiert statisches Leitungsvermitteln hinsichtlich der Energie, wobei z. B. ein Großteil (vielleicht mehr als 95 %) des CSA-Kommunikationsverkehrs das lokale Netzwerk überqueren wird. Ein Programm kann Terme enthalten, die in mehreren Ausdrücken verwendet werden. Um diesen Fall zu optimieren, sorgen Ausführungsformen hier für Hardware-Unterstützung für das Multicast innerhalb des lokalen Netzwerks. Mehrere lokale Netzwerke können zusammen gruppiert werden, um Routing-Kanäle zu bilden, die z. B. zwischen Zeilen und Spalten der PEs (als ein Gitter) eingefügt sind. Als eine Optimierung können mehrere lokale Netzwerke enthalten sein, um Steuer-Tokens zu übertragen. Im Vergleich zu einem FPGA-Interconnect kann ein lokales CSA-Netzwerk mit der Granularität des Datenwegs geroutet werden, und ein anderer Unterschied kann die Behandlung des Steuerns durch den CSA sein. Eine Ausführungsform eines lokalen CSA-Netzwerks ist explizit flussgesteuert (z. B. mit Backpressure). Zum Beispiel dient ein CSA für jeden Vorwärts-Datenweg und Multiplexersatz zum Bereitstellen eines rückwärts fließenden Flusssteuerweges, der physikalisch mit dem Vorwärts-Datenweg gepaart ist. Die Kombination der beiden mikroarchitektonischen Wege kann eine Punkt-zu-Punkt-Implementierung mit geringer Latenz, geringer Energie und geringer Fläche der latenzunempfindlichen Kanalabstraktion bereitstellen. In einer Ausführungsform sind die Flusssteuerzeilen eines CSA für das Anwenderprogramm nicht sichtbar, sie können jedoch durch die Architektur im Dienst des Anwenderprogramms manipuliert werden. Zum Beispiel kann der Ausnahmebehandlungsmechanismus, der im Abschnitt 2.2 beschrieben wird, durch Ziehen von Flusssteuerzeilen zu einem „Nicht-Vorhanden“-Zustand bei Detektion einer Ausnahmebedingung erreicht werden. Diese Aktion kann nicht nur diejenigen Teile der Pipeline elegant aussetzen, die an der fehlerhaften Berechnung beteiligt sind, sondern kann auch den Maschinenzustand, der zu der Ausnahme geführt hat, behalten, z. B. für die diagnostische Analyse. Die zweite Netzwerkschicht, z. B. das Mezzanin-Netzwerk, kann ein gemeinsam genutztes paketvermittelndes Netzwerk sein. Das Mezzanin-Netzwerk kann mehrere verteilte Netzwerk-Controller, Netzwerk-Datenflussendpunktschaltungen, enthalten. Das Mezzanin-Netzwerk (z. B. das Netzwerk, das schematisch durch den gestrichelten Kasten in der 40 gezeigt wird) kann allgemeinere Weitbereichskommunikationen bereitstellen, z. B. auf Kosten von Latenz, Bandbreite und Energie. In einigen Programmen können die meisten Kommunikationen auf dem lokalen Netzwerk stattfinden, und somit wird die Bereitstellung des Mezzanin-Netzwerks vergleichsweise deutlich reduziert, zum Beispiel kann jedes PE mit mehreren lokalen Netzwerken verbinden, jedoch wird der CSA nur einen Mezzanin-Endpunkt pro logischer Umgebung der PEs zur Verfügung stellen. Weil das Mezzanin effektiv ein gemeinsam genutztes Netzwerk ist, kann jedes Mezzanin-Netzwerk mehrere logisch unabhängige Kanäle übertragen, und z. B. mit mehreren virtuellen Kanälen bereitgestellt werden. In einer Ausführungsform ist die Hauptfunktion des Mezzanin-Netzwerks, Weitbereichskommunikationen zwischen PEs und zwischen PEs und dem Speicher bereitzustellen. Zusätzlich zu dieser Fähigkeit kann das Mezzanin auch Netzwerk-Datenflussendpunktschaltung(en) enthalten, um zum Beispiel bestimmte Datenflussoperationen durchzuführen. Zusätzlich zu dieser Fähigkeit kann das Mezzanin auch als ein Laufzeitunterstützungs-Netzwerk arbeiten, durch das z. B. verschiedene Dienste auf die vollständige Fabric auf eine für das Anwenderprogramm transparente Art und Weise zugreifen können. In dieser Fähigkeit kann der Mezzanin-Endpunkt als ein Controller für seine lokale Umgebung fungieren, zum Beispiel während der CSA-Konfiguration. Um Kanäle zu bilden, die eine CSA-Kachel überspannen, können drei Unterkanäle und zwei lokale Netzwerkkanäle (die Verkehr zu und aus einem einzelnen Kanal im Mezzanin-Netzwerk übertragen) genutzt werden. In einer Ausführungsform wird ein Mezzanin-Kanal genutzt, z. B. ein Mezzanin und zwei lokale = 3 Netzwerk-Hops gesamt.
-
Die Zusammensetzbarkeit von Kanälen über Netzwerkschichten kann auf Netzwerkschichten höherer Ebenen auf der Inter-Kachel-, der Inter-Die- und der Fabric-Granularität erweitert werden.
-
Die 27 veranschaulicht ein Verarbeitungselement 2700 gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform wird das Operationskonfigurationsregister 2719 während der Konfiguration (z. B. dem Mapping) geladen und spezifiziert die besondere Operation (oder Operationen), die dieses Verarbeitungs- (z. B. Rechen -) Element durchführen soll. Die Aktivität des Registers 2720 kann durch diese Operation (z. B. ein Ausgang des Multiplexers 2716, der z. B. durch den Scheduler 2714 gesteuert wird) gesteuert werden. Der Scheduler 2714 kann eine Operation oder Operationen des Verarbeitungselements 2700 planen, zum Beispiel, wann die Eingangsdaten und der Steuereingang ankommen. Der Steuereingangspuffer 2722 ist mit dem lokalen Netzwerk 2702 verbunden (und z. B. kann das lokale Netzwerk 2702 ein Datenwegenetzwerk wie in der 25A und ein Flusssteuer-Wegenetzwerk wie in der 25B enthalten) und wird mit einem Wert geladen, wenn er ankommt (z. B. weist das Netzwerk Datenbit(s) und gültige Bit(s) auf). Der Steuerausgangspuffer 2732, der Datenausgangspuffer 2734 und/oder der Datenausgangspuffer 2736 können einen Ausgang des Verarbeitungselements 2700 empfangen, wie er z. B. durch die Operation (einen Ausgangs des Multiplexers 2716) gesteuert wird. Das Statusregister 2738 kann immer geladen werden, wenn die ALU 2718 ausführt (ebenfalls vom Ausgang des Multiplexers 2716 gesteuert). Daten im Steuereingangspuffer 2722 und im Steuerausgangspuffer 2732 können ein einzelnes Bit sein. Der Multiplexer 2721 (z. B. der Operand A) und der Multiplexer 2723 (z. B. der Operand B) können Eingänge entnehmen.
-
Zum Beispiel sei angenommen, dass die Operation dieses Verarbeitungs- (z. B. Rechen -) Elements das ist (oder enthält), was in der 21B als ein Pick bezeichnet wird. Das Verarbeitungselement 2700 dient dann dazu, entweder aus dem Dateneingangspuffer 2724 oder dem Dateneingangspuffer 2726 Daten auszuwählen, z. B. um zum Datenausgangspuffer 2734 (z. B. Default) oder dem Datenausgangspuffer 2736 zu gehen. Das Steuerbit in 2722 kann somit eine 0, falls es aus dem Dateneingangspuffer 2724 auswählt, oder eine 1, falls es aus dem Dateneingangspuffer 2726 auswählt, angeben.
-
Zum Beispiel sei angenommen, dass die Operation dieses Verarbeitungs- (z. B. Rechen -) Elements das ist (oder enthält), was in der 21B als Aufruf eines Switch bezeichnet wird. Das Verarbeitungselement 2700 dient dazu, Daten an den Datenausgangspuffer 2734 oder den Datenausgangspuffer 2736 auszugeben, z. B. aus dem Dateneingangspuffer 2724 (z. B. Default) oder dem Dateneingangspuffer 2726. Das Steuerbit in 2722 kann somit eine 0, falls es an den Datenausgangspuffer 2734 ausgibt, oder eine 1, falls es an den Datenausgangspuffer 2736 ausgibt, angeben.
-
Mehrere Netzwerke (z. B. Interconnects) können mit einem Verarbeitungselement verbunden sein, z. B. den (Eingangs -) Netzwerken 2702, 2704, 2706 und den (Ausgangs -) Netzwerken 2708, 2710, 2712. Die Verbindungen können Switches sein, wie z. B. in Bezug auf die 25A und 25B erörtert worden ist. In einer Ausführungsform enthält jedes Netzwerk zwei Unternetzwerke (oder zwei Kanäle auf dem Netzwerk), z. B. einen für das Datenwegenetzwerk in der 25A und einen für das Flusssteuer- (z. B. Backpressure -) Wegenetzwerk in der 25B. Als ein Beispiel: Das lokale Netzwerk 2702 (das z. B. als ein Steuer-Interconnect aufgesetzt ist) wird als mit dem Steuereingangspuffer 2722 verschaltet (z. B. verbunden) gezeigt. In dieser Ausführungsform kann ein Datenweg (z. B. Netzwerk wie in der 25A) den Steuereingangswert (z. B. Bit oder Bits) (z. B. ein Steuer-Token) übertragen, und der Flusssteuerweg (z. B. Netzwerk) kann das Backpressure-Signal (z. B. Backpressure- oder Kein-Backpressure-Token) aus dem Steuereingangspuffer 2722 übertragen, z. B. um gegenüber dem vorgelagerten Erzeuger (z. B. PE) anzugeben, dass kein neuer Steuereingangswert in den Steuereingangspuffer 2722 geladen werden soll (z. B. an diesen gesendet), bis das Backpressure-Signal angibt, dass im Steuereingangspuffer 2722 Platz für den neuen Steuereingangswert (z. B. aus einem Steuerausgangspuffer des vorgelagerten Erzeugers) vorhanden ist. In einer Ausführungsform kann der neue Steuereingangswert nicht in den Steuereingangspuffer 2722 gelangen, bis sowohl (i) der vorgelagerte Erzeuger das „Platz verfügbar“-Backpressure-Signal aus dem „Steuereingangs“-Puffer 2722 empfängt, als auch (ii) der neue Steuereingangswert vom vorgelagerten Erzeuger gesendet wird, und dies kann z. B. das Verarbeitungselement 2700 aussetzen, bis dies geschieht (und Platz im Ziel, dem/den Ausgangspuffer(n), verfügbar ist).
-
Der Dateneingangspuffer 2724 und der Datenausgangspuffer 2726 können ähnlich arbeiten, z. B. wird das lokale Netzwerk 2704 (das z. B. als ein Daten- (im Gegensatz zu Steuer -) Interconnect aufgesetzt ist) so gezeigt, dass es mit dem Dateneingangspuffer 2724 verschaltet (z. B. verbunden) wird. In dieser Ausführungsform kann ein Datenweg (z. B. Netzwerk wie in der 25A) den Dateneingangswert (z. B. Bit oder Bits) (z. B. ein Datenfluss-Token) übertragen, und der Flusssteuerweg (z. B. Netzwerk) kann das Backpressure-Signal (z. B. Backpressure- oder Kein-Backpressure-Token) aus dem Dateneingangspuffer 2724 übertragen, z. B. um gegenüber dem vorgelagerten Erzeuger (z. B. PE) anzugeben, dass kein neuer Dateneingangswert in den Dateneingangspuffer 2724 geladen werden soll (z. B. an diesen gesendet), bis das Backpressure-Signal angibt, dass im Dateneingangspuffer 2724 Platz für den neuen Dateneingangswert (z. B. aus einem Datenausgangspuffer des vorgelagerten Erzeugers) vorhanden ist. In einer Ausführungsform kann der neue Dateneingangswert nicht in den Dateneingangspuffer 2724 gelangen, bis sowohl (i) der vorgelagerte Erzeuger das „Platz verfügbar“-Backpressure-Signal aus dem „Dateneingangs“-Puffer 2724 empfängt, als auch (ii) der neue Dateneingangswert vom vorgelagerten Erzeuger gesendet wird, und dies kann z. B. das Verarbeitungselement 2700 aussetzen, bis dies geschieht (und Platz im Ziel, dem/den Ausgangspuffer(n), verfügbar ist). Ein Steuerausgangswert und/oder Datenausgangswert können in ihren jeweiligen Ausgangspuffern (z. B. 2732, 2734, 2736) ausgesetzt werden, bis ein Backpressure-Signal angibt, dass im Eingangspuffer Platz für das/die nachgelagerten Verarbeitungselement(e) verfügbar ist.
-
Ein Verarbeitungselement 2700 kann von der Ausführung ausgesetzt werden, bis seine Operanden (z. B. ein Steuereingangswert und sein entsprechender Dateneingangswert oder -werte) empfangen worden sind und/oder bis in dem/den Ausgangspuffer(n) des Verarbeitungselements 2700 Platz für die Daten vorhanden ist, die durch die Ausführung der Operation an diesen Operanden produziert werden sollen.
-
Speicherschnittstelle
-
Die Request Address File- (RAF -) Schaltung, deren vereinfachte Version in der 28 gezeigt wird, kann für das Ausführen von Speicheroperationen zuständig sein und dient als ein Zwischenstück zwischen der CSA-Fabric und der Speicherhierarchie. Von daher kann die Hauptaufgabe der Mikroarchitektur des RAF sein, das Out-of-Order-Speicher-Subsystem mit der In-Order-Semantik der CSA-Fabric zu rationalisieren. In dieser Eigenschaft können der RAF-Schaltung Abschlusspuffer zur Verfügung gestellt werden, z. B. warteschlangenähnliche Strukturen, die Speicherantworten neu ordnen und sie an die Fabric in der Anforderungsreihenfolge zurückgeben. Die zweite Hauptfunktionalität der RAF-Schaltung kann sein, Unterstützung in der Form von Adressübersetzung und einem Page Walker bereitzustellen. Eingehende virtuelle Adressen können in physikalische Adressen unter Verwendung eines kanalassoziativen Übersetzungspuffers (TLB, Translation Lookaside Buffer) übersetzt werden. Um ausreichend Speicherbandbreite bereitzustellen, kann jede CSA-Kachel mehrere RAF-Schaltungen enthalten. Wie die verschiedenen PEs der Fabric können RAF-Schaltungen auf eine Datenflussart arbeiten, indem sie die Verfügbarkeit von Eingangsargumenten und Ausgangspufferung, falls erforderlich, prüfen, bevor eine Speicheroperation zur Ausführung ausgewählt wird. Anders als einige PEs wird die RAF-Schaltung allerdings zwischen mehreren zusammen positionierten Speicheroperationen gemultiplext. Eine gemultiplexte RAF-Schaltung kann verwendet werden, um den Flächen-Overhead ihrer verschiedenen Subkomponenten zu minimieren, z. B. um das Accelerator Cache Interface (ACI -) Netzwerk (ausführlicher im Abschnitt 3.4 beschrieben), die Shared Virtual Memory (SVM -) Unterstützungs-Hardware, die Mezzanin-Netzwerkschnittstelle und andere Hardware-Managementeinrichtungen gemeinsam zu nutzen. Allerdings gibt es einige Programmcharakteristika, die diese Wahl ebenfalls begründen können. In einer Ausführungsform dient ein (z. B. gültiger) Datenflussgraph zum Abfragen von Speicher in einem gemeinsam genutzten virtuellen Speichersystem. Durch Speicherlatenz begrenzte Programme, wie Graphenverfahren, können aufgrund des speicherabhängigen Steuerflusses viele separate Speicheroperationen nutzen, um Speicherbandbreite zu erfüllen. Obwohl jedes RAF gemultiplext sein kann, kann ein CSA mehrere (z. B. zwischen 8 und 32) RAFs auf einer Kachelgranularität enthalten, um angemessene Cache-Bandbreite sicherzustellen. RAFs können mit dem Rest der Fabric sowohl über das lokale Netzwerk als auch über das Mezzanin-Netzwerk kommunizieren. Wo RAFs gemultiplext werden, können jedem RAF mehrere Ports in das lokale Netzwerk zur Verfügung gestellt werden. Diese Ports können als ein höchst deterministischer Weg mit minimaler Latenz in den Speicher zur Verwendung durch latenzempfindliche Speicheroperationen oder Speicheroperationen mit hoher Bandbreite dienen. Zusätzlich kann einem RAF ein Mezzanin-Netzwerkendpunkt zur Verfügung gestellt werden, der z. B. Speicherzugriff auf Laufzeitdienste und entfernte Speicherzugriffsfunktionen auf Nutzerebene bereitstellt.
-
Die 28 veranschaulicht eine Request Address File- (RAF -) Schaltung 2800 gemäß Ausführungsformen der Offenbarung. Zum Konfigurationszeitunkt werden in einer Ausführungsform die Speicher-Lade- und Speicheroperationen, die im Datenflussgraphen enthalten waren, in den Registern 2810 spezifiziert. Die Bögen zu diesen Speicheroperationen in den Datenflussgraphen können dann mit den Eingangswarteschlangen 2822, 2824 und 2826 verbunden werden. Die Bögen aus diesen Speicheroperationen lassen somit die Abschlusspuffer 2828, 2830 oder 2832 zurück. Die Abhängigkeits-Tokens (die einzelne Bits sein können) kommen in den Warteschlangen 2818 und 2820 an. Die Abhängigkeits-Tokens sollen die Warteschlange 2816 verlassen. Der Abhängigkeits-Token-Zähler 2814 kann eine kompakte Darstellung einer Warteschlange sein und eine Anzahl von Abhängigkeits-Tokens verfolgen, die für irgendeine gegebene Eingangswarteschlange verwendet werden. Falls die Abhängigkeits-Token-Zähler 2814 gesättigt sind, können keine zusätzlichen Abhängigkeits-Tokens für neue Speicheroperationen generiert werden. Dementsprechend kann eine Speicheranordnungsschaltung (z. B. ein RAF in der 29) das Scheduling von neuen Speicheroperationen aussetzen, bis die Abhängigkeits-Token-Zähler 2814 ungesättigt sind.
-
Als ein Beispiel für ein Laden kommt eine Adresse in der Warteschlange 2822 an, die der Scheduler 2812 mit einem Laden in 2810 in Übereinstimmung bringt. Ein Abschlusspuffer-Slot für dieses Laden wird in der Reihenfolge der angekommenen Adresse zugeordnet. Unter der Annahme, dass dieses besondere Laden im Graphen keine spezifizierten Abhängigkeiten aufweist, werden die Adresse und der Abschlusspuffer-Slot vom Scheduler zum Speichersystem abgeschickt (z. B. über den Speicherbefehl 2842). Wenn das Ergebnis zum Multiplexer 2840 zurückkommt (schematisch gezeigt), wird es in dem Abschlusspuffer-Slot gespeichert, den es spezifiziert (weil es z. B. den Ziel-Slot über das gesamte Speichersystem übertragen hat). Der Abschlusspuffer sendet Ergebnisse in der Reihenfolge der angekommenen Adressen zurück in das lokale Netzwerk (z. B. das lokale Netzwerk 2802, 2804, 2806 oder 2808).
-
Speicher können ähnlich sein, ausgenommen, dass sowohl Adresse als auch Daten ankommen müssen, bevor irgendeine Operation zum Speichersystem abgeschickt wird.
-
Cache
-
Datenflussgraphen können in der Lage sein, eine Fülle an Anforderungen (z. B. auf Wortgranularität) parallel zu generieren. Somit stellen bestimmte Ausführungsformen des CSA ein Cache-Subsystem mit ausreichender Bandbreite zum Bedienen des CSA bereit. Eine stark bankorganisierte Cache-Mikroarchitektur kann genutzt werden, z. B. wie in der 29 gezeigt wird. Die 29 veranschaulicht eine Schaltung 2900 mit mehreren Request Address File-(RAF -) Schaltungen (z. B. der RAF-Schaltung (1)), die zwischen mehreren Beschleunigerkacheln (2908, 2910, 2912, 2914) und mehreren Cache-Bänken (z. B. der Cache-Bank 2902) gekoppelt sind, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform kann die Anzahl von RAFs und Cache-Bänken in einem Verhältnis von 1:1 oder 1:2 liegen. Cache-Bänke können vollständige Cache-Zeilen enthalten (z. B. im Gegensatz zum Sharding durch ein Wort), wobei jede Zeile exakt eine Ausgangsstellung im Cache aufweist. Cache-Zeilen können über eine Pseudozufallsfunktion auf Cache-Bänke abgebildet werden. Der CSA kann das Shared Virtual Memory- (SVM -) Modell annehmen, um sich in andere gekachelte Architekturen zu integrieren. Bestimmte Ausführungsformen enthalten ein Accelerator Cache Interface- (ACI -) Netzwerk, das die RAFs mit den Cache-Bänken verbindet. Dieses Netzwerk kann Adresse und Daten zwischen den RAFs und dem Cache übertragen. Die Topologie der ACI kann eine kaskadierte Crossbar sein, wie z. B. ein Kompromiss zwischen Latenz- und Implementierungskomplexität.
-
Fließkommaunterstützung
-
Bestimmte HPC-Anwendungen sind durch ihren Bedarf an erheblicher Fließkomma-Bandbreite charakterisiert. Um diesen Bedarf zu erfüllen, können den Ausführungsformen eines CSA mehrere (z. B. jeweils zwischen 128 und 256) Fließkomma-Addier- und Multiplikations-PEs zur Verfügung gestellt werden, z. B. abhängig von der Kachelkonfiguration. Ein CSA kann einige andere Modi mit erweiterter Genauigkeit bereitstellen, z. B. zum Vereinfachen der Implementierung der mathematischen Bibliothek. Die CSA-Fließkomma-PEs können sowohl einfache als auch doppelte Genauigkeit unterstützen, jedoch können PEs mit geringerer Genauigkeit Arbeitsbelastungen für maschinelles Lernen unterstützen. Ein CSA kann eine Größenordnung mehr Fließkomma-Performance bereitstellen als ein Prozessorkern. In einer Ausführungsform wird, zusätzlich zum Erhöhen der Fließkomma-Bandbreite, die in Fließkomma-Operationen zum Bestromen aller Fließkomma-Einheiten verbrauchte Energie reduziert. Um zum Beispiel die Energie zu reduzieren, kann ein CSA die niederwertigen Bits des Fließkomma-Multiplizierer-Arrays selektiv gattern. Bei Untersuchung des Verhaltens von Fließkomma-Arithmetik beeinflussen die niederwertigen Bits des Multiplikations-Arrays häufig das endgültige gerundete Produkt nicht. Die
30 veranschaulicht einen Fließkomma-Multiplizierer
3000, der in drei Bereiche aufgeteilt ist (den Ergebnisbereich, drei potentielle Übertragsbereiche (
3002,
3004,
3006) und den gegatterten Bereich), gemäß Ausführungsformen der Offenbarung. In bestimmten Ausführungsformen beeinflusst der Übertragsbereich wahrscheinlich den Ergebnisbereich, und der gegatterte Bereich beeinflusst wahrscheinlich nicht den Ergebnisbereich. Wird ein gegatterter Bereich von g Bits betrachtet, kann der maximale Übertrag sein:
-
Falls das Ergebnis des Übertragsbereichs kleiner als 2c - g ist, wobei der Übertragsbereich c Bits breit ist, kann dann bei diesem maximalen Übertrag der gegatterte Bereich ignoriert werden, weil er nicht den Ergebnisbereich beeinflusst. Das Erhöhen von g bedeutet, dass es wahrscheinlicher ist, dass der gegatterte Bereich gebraucht wird, während das Erhöhen von c unter einer Zufallsannahme bedeutet, dass der gegatterte Bereich nicht verwendet wird und deaktiviert werden kann, um Energieverbrauch zu vermeiden. In Ausführungsformen eines CSA-Fließkomma-Multiplikations-PE wird ein zweistufiger Pipeline-Ansatz genutzt, bei dem zuerst der Übertragsbereich bestimmt wird und dann der gegatterte Bereich bestimmt wird, falls befunden wird, dass er das Ergebnis beeinflusst. Falls mehr Informationen über den Kontext der Multiplikation bekannt sind, stimmt ein CSA die Größe des gegatterten Bereichs offensiver ab. Bei FMA kann das Multiplikationsergebnis zu einem Akkumulator addiert werden, der häufig viel größer als jeder der Multiplikanden ist. In diesem Fall kann der Summandenexponent im Voraus der Multiplikation beobachtet werden, und der CSA kann den gegatterten Bereich dementsprechend anpassen. Eine Ausführungsform des CSA enthält ein Schema, bei dem ein Kontextwert, der das Mindestergebnis einer Berechnung begrenzt, für zugehörige Multiplizierer bereitgestellt wird, um die Gatterkonfigurationen mit minimaler Energie auszuwählen.
-
Laufzeitdienste
-
In bestimmten Ausführungsformen enthält ein CSA eine heterogene und verteilte Fabric und folglich müssen Implementierungen von Laufzeitdiensten mehrere Arten von PEs auf eine parallele und verteilte Weise aufnehmen. Obwohl Laufzeitdienste in einem CSA entscheidend sein können, werden sie in Bezug auf Berechnungen auf Nutzerebene möglicherweise selten genutzt. Bestimmte Implementierungen konzentrieren sich daher auf überlagernde Dienste auf Hardware-Ressourcen. Um diese Ziele zu erreichen, können CSA-Laufzeitdienste als eine Hierarchie geformt sein, wobei z. B. jede Schicht einem CSA-Netzwerk entspricht. Auf der Kachelebene kann ein einzelner, nach außen gerichteter Controller Dienstbefehle annehmen oder an einen verknüpften Kern mit einer CSA-Kachel senden. Ein Controller auf Kachelebene kann dazu dienen, regionale Controller an den RAFs zu koordinieren, z. B. unter Verwendung des ACI-Netzwerks. Im Gegenzug können regionale Controller lokale Controller an bestimmten Mezzanin-Netzwerk-Stopps (z. B. an Netzwerk-Datenflussendpunktschaltungen) koordinieren. Auf der niedrigsten Ebene können dienstspezifische Mikroprotokolle über das lokale Netzwerk ausgeführt werden, z. B. während eines speziellen Modus, der über die Mezzanin-Controller gesteuert wird. Die Mikroprotokolle können zulassen, dass jedes PE (z. B. die PE-Klasse nach der Art) mit dem Laufzeitdienst entsprechend seinen eigenen Anforderungen interagiert. Parallelität ist somit in dieser hierarchischen Organisation implizit, und Operationen auf den niedrigsten Ebenen können zeitgleich stattfinden. Diese Parallelität kann die Konfiguration einer CSA-Kachel zwischen einigen Hundert Nanosekunden bis zu ein paar Mikrosekunden ermöglichen, abhängig z. B. von der Größe der Konfiguration und ihrer Position in der Speicherhierarchie. Ausführungsformen des CSA setzen somit Eigenschaften von Datenflussgraphen wirksam ein, um die Implementierung jedes Laufzeitdienstes zu verbessern. Eine Schlüsselbeobachtung ist, dass Laufzeitdienste möglicherweise nur eine gültige logische Sicht auf den Datenflussgraphen behalten müssen, z. B. einen Zustand, der durch ein gewisses Anordnen der Ausführungen von Datenflussoperatoren produziert werden kann. Im Allgemeinen müssen Dienste keine temporäre Sicht des Datenflussgraphen garantieren, z. B. den Zustand des Datenflussgraphen in einem CSA zu einem spezifischen Zeitpunkt. Dies kann zulassen, dass der CSA die meisten Laufzeitdienste in einer verteilten und parallelen Pipeline-Weise ausführt, z. B. unter der Voraussetzung, dass der Dienst zum Behalten der logischen Sicht des Datenflussgraphen organisiert ist. Das lokale Konfigurations-Mikroprotokoll kann ein paketbasiertes Protokoll sein, das dem lokalen Netzwerk überlagert ist. Die Konfigurationsziele können in einer Konfigurationskette organisiert sein, die z. B. in der Mikroarchitektur festgelegt ist. Die Fabric- (z. B. PE -) Ziele können zu einem Zeitpunkt konfiguriert werden, z. B. unter Verwendung eines einzelnen zusätzlichen Registers pro Ziel, um verteilte Koordination zu erreichen. Um die Konfiguration zu beginnen, kann ein Controller ein Out-Of-Band-Signal ansteuern, das alle Fabric-Ziele in seiner Umgebung in einen unkonfigurierten angehaltenen Zustand versetzt und die Multiplexer im lokalen Netzwerk in eine vordefinierte Form schwingen lässt. Wenn die Fabric- (z. B. PE -) Ziele konfiguriert sind, das heißt, sie ihr Konfigurationspaket vollständig empfangen, können sie ihre Konfigurations-Mikroprotokollregister setzen, wobei sie das unmittelbar folgende Ziel (z. B. PE) benachrichtigen, dass es mit dem Konfigurieren unter Verwendung des folgenden Pakets fortfahren kann. Es gibt keine Beschränkung der Größe eines Konfigurationspakets, und die Pakete können eine dynamisch variierende Länge aufweisen. Zum Beispiel können PEs, die konstante Operanden konfigurieren, ein Konfigurationspaket aufweisen, das verlängert ist, damit es das Konstantenfeld enthält (z. B. X und Y in den 21B - 21C). Die 31 veranschaulicht eine Konfiguration eines Beschleunigers 3100 im laufenden Prozess mit mehreren Verarbeitungselementen (z. B. den PEs 3102, 3104, 3106, 3108) gemäß Ausführungsformen der Offenbarung. Sobald sie konfiguriert sind, können die PEs gemäß Datenflussvorgaben ausgeführt werden. Allerdings können Kanäle, die unkonfigurierte PEs beteiligen, durch die Mikroarchitektur deaktiviert werden, was z. B. verhindert, dass irgendwelche undefinierten Operationen stattfinden. Diese Eigenschaften gestatten, dass Ausführungsformen eines CSA ohne irgendeine zentrale Steuerung in einer verteilten Weise initialisiert und ausgeführt werden. Aus einem unkonfigurierten Zustand kann die Konfiguration vollständig parallel erfolgen, z. B. in vielleicht nur 200 Nanosekunden. Aufgrund der verteilten Initialisierung von Ausführungsformen eines CSA können PEs allerdings aktiv werden, wobei sie zum Beispiel Anforderungen an den Speicher senden, lange bevor die gesamte Fabric konfiguriert ist. Die Extraktion kann in fast der gleichen Weise wie die Konfiguration fortfahren. Das lokale Netzwerk kann dazu angepasst sein, Daten aus jeweils einem Ziel zur Zeit zu extrahieren, und Zustandsbits werden verwendet, um verteilte Koordination zu erreichen. Ein CSA kann die Extraktion so organisieren, dass sie zerstörungsfrei ist, das heißt, bei Abschluss der Extraktion ist jedes extrahierbare Ziel in seinen Startzustand zurückgekehrt. In dieser Implementierung können alle Zustände im Ziel zu einem Ausgangregister umlaufen, das mit dem lokalen Netzwerk nach Art eines Scan verbunden ist. Obwohl die ortsfeste Extraktion durch Einbringen neuer Wege in das Register Transfer Level (RTL) oder Verwenden bereits vorhandener Zeilen erreicht werden kann, werden die gleichen Funktionalitäten mit weniger Overhead bereitgestellt. Wie die Konfiguration wird die hierarchische Extraktion parallel erreicht.
-
Die 32 veranschaulicht eine Momentaufnahme 3200 einer Pipeline-Extraktion im laufenden Prozess gemäß Ausführungsformen der Offenbarung. In einigen Verwendungsfällen der Extraktion, wie zum Beispiel Checkpointing, ist die Latenz möglicherweise nicht von Belang, so lange der Fabric-Durchsatz aufrechterhalten wird. In diesen Fällen kann die Extraktion auf eine Pipeline-Weise organisiert sein. Diese Organisation, die in der 32 gezeigt wird, lässt zu, dass die meiste Fabric weiter ausführt, während ein enger Bereich für die Extraktion deaktiviert ist. Die Konfiguration und Extraktion können koordiniert und zusammengesetzt sein, um einen Pipeline-Kontext-Switch zu erreichen. Ausnahmen können sich qualitativ von der Konfiguration und der Extraktion darin unterscheiden, dass sie, statt zu einem spezifizierten Zeitpunkt aufzutreten, irgendwo in der Fabric zu jedem Punkt während der Laufzeit auftreten. Somit kann in einer Ausführungsform das Ausnahme-Mikroprotokoll nicht auf dem lokalen Netzwerk überlagert werden, das zur Laufzeit vom Anwenderprogramm belegt ist, und nutzt sein eigenes Netzwerk. Allerdings sind Ausnahmen von Natur aus selten und gegenüber Latenz und Bandbreite unempfindlich. Somit nutzen bestimmte Ausführungsformen des CSA ein paketvermittelndes Netzwerk, um Ausnahmen zum lokalen Mezzanin-Stopp zu übertragen, wo sie z. B. in der Diensthierarchie nach oben weitergeleitet werden (z. B. wie in der 47). Pakete im lokalen Ausnahmenetzwerk können extrem klein sein. In vielen Fällen genügt eine PE-Identifikation (ID) von nur zwei bis acht Bits als ein vollständiges Paket, weil z. B. der CSA einen eindeutigen Ausnahmeidentifizierer erzeugen kann, wenn das Paket die Ausnahmediensthierarchie durchläuft. Solch ein Schema kann wünschenswert sein, weil es auch den Flächen-Overhead beim Produzieren von Ausnahmen an jedem PE reduziert.
-
KOMPILIERUNG
-
Die Fähigkeit, Programme, die in Hochsprachen geschrieben sind, auf einen CSA zu kompilieren, kann für die industrielle Übernahme wesentlich sein. Dieser Abschnitt gibt einen Überblick auf hoher Ebene über die Kompilierungsstrategien für Ausführungsformen eines CSA. Die erste ist ein Vorschlag für einen CSA-Software-Framework, der die gewünschten Eigenschaften einer Toolchain mit idealer Produktionsqualität veranschaulicht. Als Nächstes wird ein Prototyp eines Kompilierer-Framework erörtert. Dann wird eine Steuerfluss-Datenfluss-Konvertierung erörtert, z. B. um gewöhnlichen sequentiellen Steuerflusscode in CSA-Datenfluss-Assemblercode zu konvertieren.
-
Beispielhaftes Produktions-Framework
-
Die 33 veranschaulicht eine Kompilierungs-Toolchain 3300 für einen Beschleuniger gemäß Ausführungsformen der Offenbarung. Diese Toolchain kompiliert Hochsprachen (wie zum Beispiel C, C++ und Fortran) in eine Kombination der Host-Code-(LLVM -) Intermediate Representation (IR) für die spezifischen Bereiche, die beschleunigt werden sollen. Der CSA-spezifische Abschnitt dieser Kompilierungs-Toolchain nimmt die LLVM-IR als seinen Eingang auf, optimiert und kompiliert diese IR in einen CSA-Assembler, z. B. unter Hinzufügen von geeignetem Puffern auf latenzunempfindlichen Kanälen für die Performance. Er platziert und routet den CSA-Assembler dann auf die Hardware-Fabric und konfiguriert die PEs und das Netzwerk für die Ausführung. In einer Ausführungsform unterstützt die Toolchain die CSA-spezifische Kompilierung als Just-in-Time (JIT), wobei sie potentielles Feedback zur Laufzeit aus aktuellen Ausführungen einbindet. Eine der Schlüssel-Design-Charakteristika des Framework ist die Kompilierung von (LLVM -) IR für den CSA, statt eine Hochsprache als Eingang zu verwenden. Während ein Programm, das in einer Hochsprache, die speziell für den CSA entwickelt ist, maximale Performance und/oder Energieeffizienz erreichen könnte, kann die Übernahme neuer Hochsprachen oder Programmier-Frameworks wegen der Schwierigkeit, bereits vorhandene Code-Grundlagen zu konvertieren, langsam und in der Praxis eingeschränkt sein. Die Verwendung der (LLVM -) IR als Eingang ermöglicht, dass ein breites Spektrum bereits vorhandener Programme potentiell auf einem CSA ausgeführt werden, z. B. ohne die Notwendigkeit, eine neue Sprache zu erstellen oder das Front-End neuer Sprachen, die auf dem CSA laufen möchten, erheblich zu modifizieren.
-
Prototyp-Kompilierer
-
Die 34 veranschaulicht einen Kompilierer 3400 für einen Beschleuniger gemäß Ausführungsformen der Offenbarung. Der Kompilierer 3400 konzentriert sich zu Anfang auf die Ahead-of-Time-Kompilierung von C und C++ über das (z. B. Clang -) Front-End. Um (LLVM -) IR zu kompilieren, implementiert der Kompilierer ein CSA-Back-End-Ziel innerhalb von LLVM mit drei Hauptstufen. Zuerst setzt das CSA-Back-End die LLVM-IR in zielspezifische Maschinenbefehle für die sequentielle Einheit herab, die die meisten CSA-Operationen kombiniert mit einer herkömmlichen RISC-ähnlichen Steuerflussarchitektur (z. B. mit Verzweigungen und einem Programmzähler) implementiert. Die sequentielle Einheit in der Toolchain kann sowohl für den Kompilierer als auch die Anwendungsentwickler als eine nützliche Hilfe dienen, weil sie eine inkrementelle Transformation eines Programms von Steuerfluss (CF, Control Flow) in Datenfluss (DF) ermöglicht, z. B. durch Konvertieren eines Code-Abschnitts zur Zeit vom Steuerfluss zum Datenfluss und Validierung der Korrektheit des Programms. Die sequentielle Einheit kann ebenfalls ein Modell zur Handhabung von Code bereitstellen, der nicht in das dreidimensionale Array passt. Als Nächstes konvertiert der Kompilierer diese Steuerflussbefehle in Datenflussoperatoren (z. B. Code) für den CSA. Diese Phase wird später im Abschnitt 4.3 beschrieben. Dann kann das CSA-Back-End seine eigenen Optimierungsdurchgänge auf den Datenflussbefehlen laufen lassen. Schließlich kann der Kompilierer die Befehle in einem CSA-Assemblerformat abladen. Dieses Assemblerformat wird als Eingang für Werkzeuge später Phasen genommen, die die Datenflussbefehle auf der tatsächlichen CSA-Hardware platzieren und routen.
-
Steuern der Datenfluss-Konvertierung
-
Ein Schlüsselteil des Kompilierers kann im Steuerfluss-Datenfluss-Konvertierungsdurchlauf implementiert werden oder, kurz gesagt, im Datenfluss-Konvertierungsdurchlauf. Dieser Durchlauf nimmt eine in Steuerflussform dargestellte Funktion auf, z. B. einen Steuerflussgraphen (CFG, Control Flow Graph) mit sequentiellen Maschinenbefehlen, die auf virtuellen Registern arbeiten, und konvertiert sie in eine Datenflussfunktion, die konzeptionell ein Graph von Datenflussoperationen (-befehlen) ist, die von latenzunempfindlichen Kanälen (LICs, Latency-Insensitive Channels) verbunden sind. Dieser Abschnitt liefert eine Beschreibung auf hoher Ebene dieses Durchlaufs, indem er beschreibt, wie er konzeptionell mit Speicheroperationen, Verzweigungen und Schleifen in bestimmten Ausführungsformen umgeht.
-
Geradliniger Code
-
Die 35A veranschaulicht den sequentiellen Assemblercode 3502 gemäß Ausführungsformen der Offenbarung. Die 35B veranschaulicht den Datenfluss-Assemblercode 3504 für den sequentiellen Assemblercode 3502 der 35A gemäß Ausführungsformen der Offenbarung. Die 35C veranschaulicht einen Datenflussgraphen 3506 für den Datenfluss-Assemblercode 3504 der 35B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung.
-
Es wird zuerst der einfache Fall des Konvertierens von geradlinigem sequentiellen Code in Datenfluss betrachtet. Der Datenfluss-Konvertierungsdurchlauf kann einen Basisblock sequentiellen Code, wie zum Beispiel den in der 35A gezeigten in CSA-Assemblercode, konvertieren, der in der 35B gezeigt wird. Der CSA-Assembler in der 35B stellt konzeptionell den in der 35C gezeigten Datenflussgraphen dar. In diesem Beispiel wird jeder sequentielle Befehl in einen abgeglichenen CSA-Assembler übersetzt. Die .lic-Anweisungen (z. B. für Daten) geben latenzunempfindliche Kanäle an, die den virtuellen Registern im sequentiellen Code entsprechen (z. B. Rdata). In der Praxis kann der Eingang zum Datenfluss-Konvertierungsdurchlauf in nummerierten virtuellen Registern erfolgen. Allerdings verwendet dieser Abschnitt der Übersichtlichkeit halber beschreibende Registernamen. Es sei angemerkt, dass in dieser Ausführungsform Lade- und Speicheroperationen in der CSA-Architektur unterstützt werden, was ermöglich, dass viel mehr Programme laufen, als bei einer Architektur, die nur reinen Datenfluss unterstützt. Weil der sequentielle Codeeingang in den Kompilierer in SSA- (Singlestatic Assignment -) Form für einen einfachen Basisblock erfolgt, kann der Steuerfluss-Datenfluss-Durchlauf jede virtuelle Registerdefinition in die Produktion eines einzelnen Werts auf einem latenzunempfindlichen Kanal konvertieren. Die SSA-Form ermöglicht mehrfache Verwendungen einer einzelnen Definition eines virtuellen Registers (wie zum Beispiel in Rdata2). Um dieses Modell zu unterstützen, unterstützt der CSA-Assemblercode mehrfache Verwendungen des gleichen LIC (z. B. data2), wobei der Simulator implizit die nötigen Kopien der LICs erzeugt. Ein Schlüsselunterschied zwischen sequentiellem Code und Datenfluss-Code liegt in der Behandlung von Speicheroperationen. Der Code in der 35A ist konzeptionell seriell, was bedeutet, dass load32 (ld32) der addr3 nach st32 der addr geschehen sollte, falls sich die Adressen addr und addr3 überlappen.
-
Verzweigungen
-
Um Programme mit mehreren Basisblöcken und Bedingungen für den Datenfluss zu konvertieren, generiert der Kompilierer spezielle Datenflussoperatoren, um die Verzweigungen zu ersetzen. Insbesondere verwendet der Kompilierer Switch-Operatoren, um ausgehende Daten am Ende eines Basisblocks im Original-CFG zu lenken, und Pick-Operatoren, um am Beginn eines Basisblocks Werte aus dem geeigneten eingehenden Kanal auszuwählen. Als ein konkretes Beispiel werde der Code und der entsprechende Datenflussgraph in den 36a - 36C betrachtet, der einen Wert von y auf Basis mehrerer Eingänge, ein i, x und n, bedingt berechnet. Nach dem Berechnen des Verzweigungsbedingungstests verwendet der Datenfluss-Code einen Switch-Operator (siehe z. B. die 21B - 21C), der den Wert im Kanal x zum Kanal xF lenkt, falls test 0 ist, oder zum Kanal xT, falls test 1 ist. Gleichermaßen wird ein Pick-Operator (siehe z. B. die 21B - 21C) verwendet, um den Kanal yF zu y zu senden, falls test 0 ist, oder den Kanal yT zu y zu senden, falls test 1 ist. In diesem Beispiel stellt sich heraus, dass, obwohl der Wert von a nur in der True-Verzweigung der Bedingung verwendet wird, der CSA einen Switch-Operator enthalten soll, der ihn zum Kanal aT lenkt, wenn test 1 ist, und den Wert verbraucht (verzehrt), wenn test 0 ist. Dieser letztere Fall wird durch Setzen des False-Ausgangs des Switch auf %ign ausgedrückt. Es ist möglicherweise nicht korrekt, den Kanal einfach direkt mit dem True-Weg zu verbinden, weil in den Fällen, bei denen die Ausführung tatsächlich den falschen Weg nimmt, dieser Wert von „a“ im Graphen übrig bleiben wird, was zu einem falschen Wert von a für die nächste Ausführung der Funktion führt. Dieses Beispiel hebt die Eigenschaft der Steueräquivalenz hervor, eine Schlüsseleigenschaft in Ausführungsformen der korrekten Datenfluss-Konvertierung.
-
Steueräquivalenz: Es werde ein Steuerflussgraph G mit einem einzelnen Eingang und einem einzelnen Ausgang (Single-Entry Single-Exit) mit den zwei Basisblöcken A und B betrachtet. A und B sind steueräquivalent, falls alle vollständigen Steuerflusswege durch G A und B die gleiche Anzahl von Malen aufsuchen.
-
LIC-Ersatz: In einem Steuerflussgraphen G werde eine Operation im Basisblock A, die ein virtuelles Register x definiert, und eine Operation im Basisblock B, die x verwendet, angenommen. Dann kann eine korrekte Steuerfluss-Datenfluss-Transformation x mit einem latenzunempfindlichen Kanal nur ersetzen, falls A und B steueräquivalent sind. Die Steueräquivalenz-Beziehung teilt die Basisblöcke eines CFG in stabile Steuerabhängigkeits-Bereiche auf. Die 36A veranschaulicht den C-Quellcode 3602 gemäß Ausführungsformen der Offenbarung. Die 36B veranschaulicht den Datenfluss-Assemblercode 3604 für den C-Quellcode 3602 der 36A gemäß Ausführungsformen der Offenbarung. Die 36C veranschaulicht einen Datenflussgraphen 3606 für den Datenfluss-Assemblercode 3604 der 36B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung. In dem Beispiel in den 36A - 36C sind der Basisblock vor und nach den Bedingungen steueräquivalent zueinander, jedoch liegen die Basisblöcke in den True- und False-Wegen jeweils in ihrem eigenen Steuerabhängigkeits-Bereich. Ein korrekter Algorithmus zum Konvertieren eines CFG in Datenfluss ist es, den Kompilierer (1) Switches einfügen zu lassen, um den Versatz der Ausführungsfrequenz für alle Werte zu kompensieren, die zwischen Basisblöcken laufen, die nicht steueräquivalent sind, und (2) Picks zu Beginn der Basisblöcke, um korrekt aus irgendwelchen in einen Basisblock eingehenden Werten zu wählen. Das Generieren der geeigneten Steuersignale für diese Picks und Switches kann der Schlüsselteil der Datenfluss-Konvertierung sein.
-
Schleifen
-
Eine andere wichtige Klasse von CFGs in der Datenfluss-Konvertierung sind CFGs für Schleifen mit einem einzelnen Eingang und einem einzelnen Ausgang, eine übliche Schleifenform, die in der (LLVM -) IR generiert wird. Diese Schleifen können fast azyklisch sein, ausgenommen für einen einzelnen Back-Edge vom Ende der Schleife zurück zu einem Schleifen-Header-Block. Der Datenfluss-Konvertierungsdurchlauf kann die gleiche High-Level-Strategie verwenden, um Schleifen wie für Verzweigungen zu konvertieren, z. B. fügt er Switches am Ende der Schleife ein, um Werte aus der Schleife heraus zu leiten (entweder aus dem Schleifenausgang oder um das Back-Edge herum zum Beginn der Schleife), und fügt Picks am Beginn der Schleife ein, um zwischen Anfangswerten, die in die Schleife gelangen, und Werten, die durch das Back-Edge kommen, zu wählen. Die 37A veranschaulicht den C-Quellcode 3702 gemäß Ausführungsformen der Offenbarung. Die 37B veranschaulicht den Datenfluss-Assemblercode 3704 für den C-Quellcode 3702 der 37A gemäß Ausführungsformen der Offenbarung. Die 37C veranschaulicht einen Datenflussgraphen 3706 für den Datenfluss-Assemblercode 3704 der 37B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung. Die 37A - 37C zeigen sowohl C- und CSA-Assemblercode für eine beispielhafte Do-While-Schleife, die Werte einer Schleifeninduktionsvariablen i aufaddiert, als auch den entsprechenden Datenflussgraphen. Für jede Variable, die konzeptionell um die Schleife umläuft (i und Summe) weist dieser Graph ein entsprechendes Pick -/Switch-Paar auf, das den Fluss dieser Werte steuert. Es sei angemerkt, dass dieses Beispiel auch ein Pick -/Switch-Paar verwendet, um den Wert von n um die Schleife umlaufen zu lassen, obwohl n eine Schleifeninvariante ist. Diese Wiederholung von n ermöglicht die Konvertierung der virtuellen Register von n in ein LIC, weil sie die Ausführungsfrequenzen zwischen einer konzeptionellen Definition von n außerhalb der Schleife und der einen oder den mehreren Verwendungen von n innerhalb der Schleife abgleicht. Für eine korrekte Datenfluss-Konvertierung müssen im Allgemeinen Register, die live-in (eingangsaktiv) in eine Schleife gehen, einmal für jede Iteration innerhalb des Schleifenkörpers wiederholt werden, wenn das Register in ein LIC konvertiert wird. Gleichermaßen müssen Register, die innerhalb einer Schleife aktualisiert werden und live-out (ausgangsaktiv) aus der Schleife gehen, verbraucht werden, wobei z. B. ein einzelner Endwert aus der Schleife heraus gesendet wird. Schleifen bringen einen Aspekt in den Datenfluss-Konvertierungsprozess ein, nämlich indem die Steuerung für einen Pick am Beginn der Schleife und der Switch für das Ende der Schleife versetzt sind. Falls zum Beispiel die Schleife in der 36A drei Iterationen ausführt und endet, sollte die Steuerung für Picker 0, 1, 1 sein, während die Steuerung für Switcher 1, 1, 0 sein sollte. Diese Steuerung wird implementiert, indem der Picker-Kanal mit einer anfänglichen zusätzlichen 0 gestartet wird, wenn die Funktion am Zyklus 0 beginnt (der im Assembler durch die Anweisung .value 0 und .avail 0 spezifiziert ist), und dann der Ausgangs-Switcher in Picker kopiert wird. Es sei angemerkt, dass die letzte 0 in Switcher eine abschließende 0 in Picker wiederherstellt, was sicherstellt, dass der Endzustand des Datenflussgraphen mit seinem Anfangszustand abgeglichen ist.
-
Die 38A veranschaulicht ein Flussdiagramm 3800 gemäß Ausführungsformen der Offenbarung. Der gezeigte Fluss 3800 beinhaltet Folgendes: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren, 3802; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen, 3804; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, 3806; den Datenflussgraphen in mehrere Verarbeitungselemente des Prozessors und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird, 3808; und eine zweite Operation des Datenflussgraphen mit dem Interconnect-Netzwerk und den mehreren Verarbeitungselementen durch einen jeweiligen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente ankommt, 3810.
-
Die 38B veranschaulicht ein Flussdiagramm 3801 gemäß Ausführungsformen der Offenbarung. Der gezeigte Fluss 3801 beinhaltet Folgendes: einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, 3803; und den Datenflussgraphen in mehrere Verarbeitungselemente eines Prozessors, ein Datenwegenetzwerk zwischen den mehreren Verarbeitungselementen und ein Flusssteuerwegenetzwerk zwischen den mehreren Verarbeitungselementen zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird, 3805.
-
In einer Ausführungsform schreibt der Kern einen Befehl in eine Speicherwarteschlange, und ein CSA (z. B. die mehreren Verarbeitungselemente) überwacht die Speicherwarteschlange und beginnt die Ausführung, wenn der Befehl gelesen worden ist. In einer Ausführungsform führt der Kern einen ersten Teil eines Programms aus, und ein CSA (z. B. die mehreren Verarbeitungselemente) führt einen zweiten Teil des Programms aus. In einer Ausführungsform erledigt der Kern eine andere Arbeit, während der CSA seine Operationen ausführt.
-
VORTEILE DES CSA
-
In bestimmten Ausführungsformen stellen die CSA-Architektur und -Mikroarchitektur profunde Energie-, Performance- und Verwendbarkeitsvorteile gegenüber Roadmap-Prozessorarchitekturen und FPGAs bereit. In diesem Abschnitt werden diese Architekturen mit Ausführungsformen des CSA verglichen und die Überlegenheit des CSA beim Beschleunigen von parallelen Datenflussgraphen zueinander hervorgehoben.
-
Prozessoren
-
Die 39 veranschaulicht einen Graphen 3900 des Durchsatzes gegenüber der Energie pro Operation gemäß Ausführungsformen der Offenbarung. Wie in der 39 gezeigt wird, sind kleine Kerne im Allgemeinen energieeffizienter als große Kerne, und bei einigen Arbeitsbelastungen kann dieser Vorteil durch größere Kernanzahlen in absolute Performance übersetzt werden. Die CSA-Mikroarchitektur folgt diesen Beobachtungen bis zu ihrem Schluss und entfernt (z. B. die meisten) energiehungrige Steuerstrukturen, die mit Von-Neumann-Architekturen verknüpft sind, einschließlich des größten Teils der befehlsseitigen Mikroarchitektur. Durch Entfernen dieser Overheads und Implementieren von einfachen PEs für einzelne Operationen erreichen Ausführungsformen eines CSA ein dichtes, effizientes dreidimensionales Array. Anders als kleine Kerne, die normalerweise ziemlich seriell sind, kann ein CSA seine PEs zusammen gruppieren, z. B. über das leitungsvermittelnde lokale Netzwerk, um explizit parallele aggregierte Datenflussgraphen zu bilden. Das Ergebnis ist Performance, nicht nur in parallelen Anwendungen, sondern ebenfalls in seriellen Anwendungen. Anders als Kerne, die möglicherweise teuer in Hinsicht auf Fläche und Energie für die Performance zahlen, ist ein CSA in seinem nativen Ausführungsmodell bereits parallel. In bestimmten Ausführungsformen erfordert ein CSA weder Vermutungen, um die Performance zu erhöhen, noch muss er Parallelität wiederholt aus einer sequentiellen Programmdarstellung neu extrahieren, wodurch zwei der Hauptenergieabgaben in den Von-Neumann-Architekturen vermieden werden. Die meisten Strukturen in Ausführungsformen eines CSA sind verteilt, klein und energieeffizient, im Gegensatz zu den zentralisierten, sperrigen, energiehungrigen Strukturen, die sich in Kernen finden. Es werde der Fall von Registern im CSA betrachtet: Jedes PE kann einige wenige Speicherregister aufweisen (z. B. 10 oder weniger). Einzeln genommen, können diese Register effizienter als herkömmliche Registerdateien sein. Insgesamt können diese Register die Wirkung einer großen In-Fabric-Registerdatei bereitstellen. Als Ergebnis wird bei Ausführungsformen eines CSA das meiste Stack-Überlaufen und -Füllen vermieden, das mit klassischen Architekturen einhergeht, während viel weniger Energie pro Zustandszugriff verwendet wird. Natürlich können Anwendungen weiter auf Speicher zugreifen. In Ausführungsformen eines CSA sind Speicherzugriffsanforderung und -antwort architektonisch entkoppelt, was ermöglicht, dass Arbeitsbelastungen viel mehr ausstehende Speicherzugriffe pro Flächen- und Energieeinheit aufnehmen. Diese Eigenschaft ergibt eine wesentlich höhere Performance für cache-gebundene Arbeitsbelastungen und reduziert die Fläche und die Energie, die benötigt werden, um Hauptspeicher bei speichergebundenen Arbeitsbelastungen zu füllen. Ausführungsformen eines CSA stellen neue Formen der Energieeffizienz heraus, die gegenüber Von-Neumann-Architekturen einzigartig sind. Eine Folge der Ausführung einer einzelnen Operation (z. B. eines Befehls) an einem (z. B. den meisten) PE ist reduzierte Operandenentropie. Im Fall einer Inkrementoperation kann jede Ausführung zu einer Handvoll von Umschaltungen auf Schaltungsebene und einem geringen Energieverbrauch führen, ein Fall, der ausführlich im Abschnitt 6.2 untersucht wird. Im Gegensatz dazu sind Von-Neumann-Architekturen gemultiplext, was zu großen Anzahlen von Bitübergängen führt. Die asynchrone Art von Ausführungsformen eines CSA ermöglicht auch mikroarchitektonische Optimierungen, wie zum Beispiel die im Abschnitt 3.5 beschriebenen Fließkomma-Optimierungen, die in eng geplanten Kern-Pipelines schwierig umzusetzen sind. Weil die PEs relativ einfach sein können und ihr Verhalten in einem besonderen Datenflussgraphen statisch bekannt sein kann, können Clock-Gating- und Power-Gating-Techniken effektiver angewendet werden als in gröberen Architekturen. Die Art der Graphenausführung, die geringe Größe und die Formbarkeit von Ausführungsformen der CSA-PEs zusammen mit dem Netzwerk ermöglichen den Ausdruck vieler Arten von Parallelität: Befehle-, Daten-, Pipeline-, Vektor-, Speicher-, Thread- und Task-Parallelität können allesamt implementiert werden. In Ausführungsformen eines CSA kann zum Beispiel eine Anwendung Arithmetikeinheiten verwenden, um einen hohen Grad von Adressbandbreite bereitzustellen, während eine andere Anwendung die gleichen Einheiten zur Berechnung verwenden kann. In vielen Fällen können mehrere Arten von Parallelität kombiniert werden, um noch mehr Performance zu erreichen. Viele HPC-Schlüsseloperationen können sowohl repliziert als auch als Pipeline erfolgen, was zu Performance-Steigerungen in Größenordnungen führt. Im Gegensatz dazu optimieren Kerne nach Von-Neumann-Art typischerweise eine sorgfältig von den Architekten gewählte Art der Parallelität, was dazu führt, dass das Erfassen aller wichtigen Anwendungskerne fehlschlägt. Ebenso wie Ausführungsformen eines CSA viele Formen von Parallelität herausstellen und ermöglichen, ordnen sie keine besondere Form von Parallelität an oder, schlimmer noch, dass eine besondere Subroutine in einer Anwendung vorhanden sein muss, um vom CSA zu profitieren. Viele Anwendungen, einschließlich Single-Stream-Anwendungen, können sowohl Performance- als auch Energievorteile durch Ausführungsformen eines CSA gewinnen, sogar wenn sie z. B. ohne Modifikation kompiliert werden. Dies ist eine Umkehrung des langfristigen Trends, dass erheblicher Aufwand der Programmierer erforderlich ist, um eine wesentliche Performance-Steigerung in Single-Stream-Anwendungen zu erreichen. In einigen Anwendungen erreichen Ausführungsformen eines CSA allerdings mehr Performance aus funktionell äquivalenten, jedoch weniger „modernen“ Codes als aus ihren verschachtelten, zeitgemäßen Vettern, die vergewaltigt worden sind, damit sie Vektorbefehle zum Ziel haben.
-
Vergleich von CSA-Ausführungsformen und FPGAs
-
Die Wahl von Datenflussoperatoren als der grundlegenden Architektur von Ausführungsformen eines CSA unterscheidet diese CSAs von einem FPGA, und insbesondere hebt sich der CSA als überlegener Beschleuniger für HPC-Datenflussgraphen, die sich aus herkömmlichen Programmiersprachen ergeben, ab. Datenflussoperatoren sind grundlegend asynchron. Dies ermöglicht, dass Ausführungsformen eines CSA nicht nur großen Implementierungsfreiraum in der Mikroarchitektur aufweisen, sondern ermöglicht auch, dass sie einfach und kurz abstrakte architektonische Konzepte aufnehmen. Zum Beispiel nehmen Ausführungsformen eines CSA mit einer einfachen Laden-Speichern-Schnittstelle natürlicherweise viele Speicher-Mikroarchitekturen auf, die im Wesentlichen asynchron sind. Es muss nur ein FPGA-DRAM-Controller untersucht werden, um den Unterschied in der Komplexität zu würdigen. Ausführungsformen eines CSA setzen auch die Asynchronität wirksam ein, um schnellere und besser ausgestattete Laufzeitdienste, wie Konfiguration und Extraktion, bereitzustellen, von denen angenommen wird, dass sie vier bis sechs Größenordnungen schneller als ein FPGA sind. Indem die architektonische Schnittstelle verengt wird, stellen Ausführungsformen eines CSA die Steuerung über die meisten zeitgebundenen Wege auf der Mikroarchitekturebene bereit. Die ermöglicht es, dass Ausführungsformen eines CSA mit einer viel höheren Frequenz arbeiten als die allgemeineren Steuermechanismen, die in einem FPGA geboten werden. Gleichermaßen sind Taktung und Reset, die in FPGAs grundlegend architektonisch sein können, im CSA mikroarchitektonisch, wodurch z. B. vermieden wird, dass sie als programmierbare Instanzen unterstützt werden müssen. Datenflussoperatoren können größtenteils grobkörnig sein. Indem nur mit groben Operatoren gehandelt wird, verbessern Ausführungsformen eines CSA sowohl die Dichte der Fabric als auch ihren Energieverbrauch: Der CSA führt Operationen direkt aus, statt sie mit Lookup-Tabellen zu emulieren. Eine zweite Folge der Grobstruktur ist eine Vereinfachung des Platzierungs- und Routing-Problems. CSA-Datenflussgraphen sind um viele Größenordnungen kleiner als FPGA-Netzlisten, und Platzierungs- und Routing-Zeit sind in Ausführungsformen eines CSA entsprechend reduziert. Die signifikanten Unterschiede zwischen Ausführungsformen eines CSA und einem FPGA machen einen CSA als Beschleuniger überlegen, z. B. für Datenflussgraphen, die sich aus herkömmlichen Programmiersprachen ergeben.
-
EVALUATION
-
Der CSA ist eine neuartige Computer-Architektur mit dem Potential, enorme Performance- und Energievorteile im Vergleich zu Roadmap-Prozessoren bereitzustellen. Es werde der Fall des Berechnens einer einzelnen Stride-Adresse zum Durchqueren eines Arrays betrachtet. Dieser Fall kann bei HPC-Anwendungen wichtig sein, die z. B. erheblichen Ganzzahl-Aufwand zur Berechnung von Adress-Offsets erbringen. Bei der Adressberechnung und insbesondere bei der Berechnung von Stride-Adressen ist ein Argument konstant, und das andere ändert sich je Berechnung nur ein wenig. Somit schalten in der Mehrzahl der Fälle nur wenige Bits pro Zyklus um. Es kann allerdings gezeigt werden, dass bei Verwendung einer Ableitung, ähnlich der Grenze bei Fließkomma-Übertragsbits, die im Abschnitt 3.5 beschrieben wird, im Mittel weniger als zwei Bits des Eingangs pro Berechnung für eine Stride-Berechnung umschalten, was die Energie um 50 % gegenüber einer zufälligen Verteilung beim Umschalten reduziert. Wenn ein Zeitmultiplex-Ansatz verwendet werden würde, könnte viel dieser Energieeinsparungen verloren sein. In einer Ausführungsform erreicht der CSA ungefähr die 3fache Energieeffizienz über einem Kern, während er eine 8fache Performance-Steigerung liefert. Die durch Ausführungsformen eines CSA erreichten Parallelitätssteigerungen können zu reduzierten Programmlaufzeiten führen, was eine anteilige wesentliche Reduzierung von Streuenergie ergibt. Auf der PE-Ebene sind Ausführungsformen eines CSA extrem energieeffizient. Eine zweite wichtige Frage für den CSA ist, ob der CSA auf der Kachelebene eine angemessene Energiemenge verbraucht. Weil Ausführungsformen eines CSA in der Lage sind, jedes Fließkomma-PE in der Fabric in jedem Zyklus auszuführen, dient es als eine angemessene obere Grenze für den Energie- und Leistungsverbrauch, z. B. so dass die meiste Energie in die Fließkomma-Multiplikation und -Addition läuft.
-
WEITERE DETAILS DES CSA
-
Dieser Abschnitt erörtert weitere Details zur Konfiguration und Ausnahmebehandlung.
-
Mikroarchitektur zum Konfigurieren eines CSA
-
Dieser Abschnitt offenbart Beispiele, wie ein CSA (z. B. Fabric) zu konfigurieren ist, wie diese Konfiguration schnell zu erreichen ist und wie der Ressourcen-Overhead der Konfiguration zu minimieren ist. Das schnelle Konfigurieren der Fabric kann von überragender Wichtigkeit beim Beschleunigen von kleinen Abschnitten eines größeren Algorithmus und folglich beim Erweitern der Anwendbarkeit eines CSA sein. Dieser Abschnitt offenbart des Weiteren Merkmale, die ermöglichen, dass Ausführungsformen eines CSA mit Konfigurationen unterschiedlicher Länge programmiert werden.
-
Ausführungsformen eines CSA (z. B. Fabric) können sich von herkömmlichen Kernen darin unterscheiden, dass sie einen Konfigurationsschritt nutzen, in dem (z. B. große) Teile der Fabric vor der Programmausführung mit Programmkonfiguration geladen werden. Ein Vorteil von statischer Konfiguration kann sein, dass zur Laufzeit sehr wenig Energie auf die Konfiguration aufgewendet wird, z. B. im Gegensatz zu sequentiellen Kernen, die in fast jedem Zyklus Energie zum Abrufen von Konfigurationsinformationen (einen Befehl) aufwenden. Der frühere Nachteil der Konfiguration lag darin, dass es sich um einen grobkörnigen Schritt mit einer potentiell hohen Latenz handelte, die aufgrund des Aufwands für das Kontext-Switching eine Untergrenze für die Größe des Programms, das in der Fabric beschleunigt werden kann, gesetzt hat. Diese Offenbarung beschreibt eine skalierbare Mikroarchitektur zum schnellen Konfigurieren eines dreidimensionalen Arrays auf eine verteilte Weise, die z. B. die früheren Nachteile vermeidet.
-
Wie oben erörtert worden ist, kann ein CSA Lightweight-Verarbeitungselemente enthalten, die durch ein Inter-PE-Netzwerk verbunden sind. Als Steuer-Datenflussgraphen gesehene Programme werden dann auf die Architektur abgebildet, indem die konfigurierbaren Fabric-Elemente (CFEs, Configurable Fabric Elements), zum Beispiel PEs und die Interconnect-(Fabric -) Netzwerke, konfiguriert werden. Im Allgemeinen können PEs als Datenflussoperatoren konfiguriert werden, und sobald alle Eingangsoperanden am PE ankommen, erfolgt irgendeine Operation, und die Ergebnisse werden an ein anderes PE oder andere PEs zum Verbrauch oder Ausgang weitergeleitet. PEs können über dedizierte virtuelle Schaltungen kommunizieren, die durch statisches Konfigurieren des leitungsvermittelnden Kommunikationsnetzwerks gebildet werden. Diese virtuellen Schaltungen können flussgesteuert sein und vollständig Backpressure verwenden, z. B. so dass PEs ausgesetzt werden, falls entweder die Quelle keine Daten hat oder das Ziel voll ist. Zur Laufzeit können Daten durch die PEs fließen, was den abgebildeten Algorithmus implementiert. Zum Beispiel können Daten aus dem Speicher übertragen werden, durch die Fabric und dann zurück hinaus zum Speicher. Solch eine dreidimensionale Architektur kann relativ zu herkömmlichen Mehrkernprozessoren bemerkenswerte Performance-Effizienz erreichen: das Berechnen in der Form von PEs kann einfacher und zahlreicher als bei größeren Kernen sein und die Kommunikationen können direkt erfolgen, im Gegensatz zu einer Erweiterung des Speichersystems.
-
Ausführungsformen eines CSA nutzen möglicherweise keine (z. B. von Software gesteuerte) Paketvermittlung, z. B. Paketvermittlung, die zur Umsetzung erhebliche Software-Unterstützung benötigt, was die Konfiguration verlangsamt. Ausführungsformen eines CSA enthalten Out-of-Band-Signalisierung im Netzwerk (z. B. von nur 2 - 3 Bits, abhängig vom unterstützten Merkmalssatz) und eine feste Konfigurationstopologie, um die Notwendigkeit erheblicher Software-Unterstützung zu vermeiden.
-
Ein Schlüsselunterschied zwischen Ausführungsformen eines CSA und dem in FPGAs verwendeten Ansatz ist, dass ein CSA-Ansatz ein breites Datenwort verwenden kann, verteilt ist und Mechanismen zum Abrufen von Programmdaten direkt aus dem Speicher enthält. Ausführungsformen eines CSA nutzen im Interesse der Flächeneffizienz möglicherweise keine Einzelbit-Kommunikationen nach JTAG-Art, weil dies z. B. möglicherweise Millisekunden erfordert, um eine große FPGA-Fabric vollständig zu konfigurieren.
-
Ausführungsformen eines CSA enthalten ein verteiltes Konfigurationsprotokoll und Mikroarchitektur zum Unterstützen dieses Protokolls. Zu Anfang kann sich der Konfigurationszustand im Speicher befinden. Mehrere (z. B. verteilte) lokale Konfigurations-Controller (Kästen) (LLC, Local Configuration Controllers) können Abschnitte des Gesamtprogramms in ihren lokalen Bereich der dreidimensionalen Fabric übertragen, z. B. unter Verwendung einer Kombination aus einem kleinen Satz Steuersignale und dem von der Fabric bereitgestellten Netzwerk. Zustandselemente können an jedem CFE verwendet werden, um Konfigurationsketten zu bilden, die z. B. ermöglichen, dass sich einzelne CFEs ohne globale Adressierung selbst programmieren.
-
Ausführungsformen eines CSA enthalten spezifische Hardware-Unterstützung für die Bildung von Konfigurationsketten, z. B. keine Software, die diese Ketten dynamisch auf Kosten zunehmender Konfigurationszeit einrichtet. Ausführungsformen eines CSA sind nicht rein paketvermittelnd und enthalten zusätzliche Out-of-Band-Steuerleitungen (z. B. wird kein Steuern über den Datenweg gesendet, was zusätzliche Zyklen erfordert, um diese Informationen abzutasten und diese Informationen zu reserialisieren). Ausführungsformen eines CSA verringern die Konfigurationslatenz durch Festlegen der Konfigurationsreihenfolge und durch Bereitstellen expliziter Out-of-Band-Steuerung (z. B. wenigstens um einen Faktor von zwei), während die Netzwerkkomplexität nicht erheblich erhöht wird.
-
Ausführungsformen eines CSA verwenden keinen seriellen Mechanismus zur Konfiguration, bei dem Daten unter Verwendung eines Protokolls nach JTAG-Art Bit für Bit in die Fabric übertragen werden. Ausführungsformen eines CSA nutzen einen Ansatz mit grobkörniger Fabric. In bestimmten Ausführungsformen weist das Hinzufügen einiger Steuerleitungen oder Zustandselemente zu einer 64- oder 32-Bit-orientierten Fabric einen geringeren Aufwand auf als das Hinzufügen dieser gleichen Steuermechanismen zu einer 4- oder 6-Bit-Fabric.
-
Die 40 veranschaulicht eine Beschleunigerkachel 4000, die ein Array von Verarbeitungselementen (PEs) und einen lokalen Konfigurations-Controller (4002, 4006) umfasst, gemäß Ausführungsformen der Offenbarung. Jedes PE, jeder Netzwerk-Controller (z. B. Netzwerk-Datenflussendpunktschaltung) und jeder Switch kann ein konfigurierbares Fabric-Element (CFE) sein, das z. B. durch Ausführungsformen der CSA-Architektur konfiguriert (z. B. programmiert) wird.
-
Ausführungsformen eines CSA enthalten Hardware, die für eine effiziente verteilte Konfiguration mit geringer Latenz einer heterogenen dreidimensionalen Fabric sorgt. Dies kann entsprechend vier Techniken erreicht werden. Erstens wird eine Hardware-Instanz, der lokale Konfigurations-Controller (LCC), genutzt, zum Beispiel wie in den 40 - 42. Ein LCC kann einen Strom von Konfigurationsinformationen aus dem (z. B. virtuellen) Speicher abrufen. Zweitens kann ein Konfigurationsdatenweg enthalten sein, der z. B. genauso breit wie die native Breite der PE-Fabric ist und der der PE-Fabric überlagert sein kann. Drittens können neue Steuersignale in der PE-Fabric empfangen werden, die den Konfigurationsprozess organisieren. Viertens können sich Zustandselemente an jedem konfigurierbaren Endpunkt befinden (z. B. in einem Register), der den Status benachbarter CFEs verfolgt, was ermöglicht, dass sich jedes CFE ohne zusätzliche Steuersignale eindeutig selbst konfiguriert. Diese vier mikroarchitektonischen Merkmale können ermöglichen, dass ein CSA Ketten seiner CFEs konfiguriert. Um geringe Konfigurationslatenz zu erreichen, kann die Konfiguration durch Aufbau vieler LCCs und CFE-Ketten aufgeteilt werden. Zum Konfigurationszeitpunkt können diese unabhängig arbeiten, um die Fabric parallel zu laden, was z. B. die Latenz drastisch reduziert. Als Ergebnis dieser Kombinationen können Fabrics, die unter Verwendung von Ausführungsformen einer CSA-Architektur konfiguriert werden, vollständig konfiguriert werden (z. B. in einigen Hundert Nanosekunden). Im Folgenden werden die detaillierten Operationen der verschiedenen Komponenten von Ausführungsformen eines CSA-Konfigurationsnetzwerks offenbart.
-
Die 41A - 41C veranschaulichen einen lokalen Konfigurations-Controller 4102, der ein Datenwegenetzwerk konfiguriert, gemäß Ausführungsformen der Offenbarung. Das gezeigte Netzwerk enthält mehrere Multiplexer (z. B. die Multiplexer 4106, 4108, 4110), die dazu konfiguriert sein können (z. B. über ihre jeweiligen Steuersignale), einen oder mehrere Datenwege (z. B. aus PEs) zu verbinden. Die 41A veranschaulicht das Netzwerk 4100 (z. B. Fabric), das für irgendeine frühere Operation oder Programm konfiguriert (z. B. gesetzt) ist. Die 41B veranschaulicht den lokalen Konfigurations-Controller 4102 (der z. B. eine Netzwerkschnittstellenschaltung 4104 enthält, um Signale zu senden und/oder zu empfangen), der ein Konfigurationssignal abtastet, und das lokale Netzwerk wird auf eine Default-Konfiguration gesetzt (z. B. wie gezeigt), die ermöglicht, dass der LCC Konfigurationsdaten an alle konfigurierbaren Fabric-Elemente (CFEs) sendet, z. B. an die Multiplexer. Die 41C veranschaulicht den LLC, der Konfigurationsinformationen über das Netzwerk abtastet, wodurch CFEs in einer vorbestimmten (z. B. im Silicium definierten) Sequenz konfiguriert werden. Wenn CFEs konfiguriert sind, können sie in einer Ausführungsform unmittelbar mit der Operation beginnen. In anderen Ausführungsformen warten die CFEs mit dem Beginn der Operation, bis die Fabric vollständig konfiguriert worden ist (wie z. B. für jeden lokalen Konfigurations-Controller vom Konfigurations-Terminator signalisiert wird (z. B. dem Konfigurations-Terminator 4304 und dem Konfigurations-Terminator 4308 in der 43)). In einer Ausführungsform erhält der LCC die Steuerung über die Netzwerk-Fabric, indem er eine spezielle Nachricht sendet oder ein Signal ansteuert. Er tastet dann die Konfigurationsdaten (z. B. über eine Periode von vielen Zyklen) zu den CFEs in der Fabric ab. In diesen Figuren sind die Multiplexer-Netzwerke analog dem „Switch“, der in bestimmten Figuren gezeigt wird (z. B. 24).
-
Lokaler Konfigurations-Controller
-
Die 42 veranschaulicht einen (z. B. lokalen) Konfigurations-Controller 4202 gemäß Ausführungsformen der Offenbarung. Ein lokaler Konfigurations-Controller (LCC) kann die Hardware-Instanz sein, die für das Laden der lokalen Abschnitte (z. B. in einem Subset einer Kachel oder anderweitig) des Fabric-Programms zuständig ist, die diese Programmabschnitte interpretiert und dann diese Programmabschnitte in die Fabric lädt, indem das geeignete Protokoll auf den verschiedenen Konfigurationsleitungen angesteuert wird. In dieser Eigenschaft kann der LCC ein sequentieller Spezial-Mikrocontroller sein.
-
Die LCC-Operation kann beginnen, wenn er einen Zeiger auf ein Code-Segment empfängt. Abhängig von der LCB-Mikroarchitektur kann dieser Zeiger (z. B. gespeichert im Zeigerregister 4206) entweder über ein Netzwerk (z. B. von innerhalb des CSA (-Fabric) selbst) oder über einen Speichersystemzugriff zum LCC gelangen. Wenn er solch einen Zeiger empfängt, leitet der LCC optional den relevanten Zustand aus seinem Abschnitt der Fabric für Kontextspeichern ab und fährt dann damit fort, den Abschnitt der Fabric unmittelbar zu rekonfigurieren, für den er zuständig ist. Das vom LCC geladene Programm kann eine Kombination aus Konfigurationsdaten für die Fabric und Steuerbefehlen für den LCC sein, die z. B. leicht codiert sind. Wenn der LCC den Programmabschnitt herein überträgt, kann er das Programm als einen Befehlsstrom interpretieren und die geeignete codierte Aktion zum Konfigurieren (z. B. Laden) der Fabric durchführen.
-
In der 40 werden zwei unterschiedliche Mikroarchitekturen für den LLC gezeigt, wobei z. B. eine oder beide in einem CSA genutzt werden. Die erste platziert den LCC 4002 an der Speicherschnittstelle. In diesem Fall kann der LCC direkte Anforderungen an das Speichersystem zum Laden von Daten stellen. Im zweiten Fall ist der LCC 4006 auf einem Speichernetzwerk platziert, in dem er Anforderungen an den Speicher nur indirekt stellt. In beiden Fällen bleibt die logische Operation des LCB unverändert. In einer Ausführungsform sind LCCs über das zu ladende Programm informiert, zum Beispiel durch einen Satz von (z. B. OSsichtbaren) Steuerstatusregistern, die verwendet werden, um einzelne LCCs über neue Programmzeiger usw. zu informieren.
-
Zusätzliche Out-of-Band-Steuerkanäle (z. B. Leitungen)
-
In bestimmten Ausführungsformen beruht die Konfiguration auf 2 - 8 zusätzlichen Out-of-Band-Steuerkanälen, um die Konfigurationsgeschwindigkeit zu verbessern, wie nachstehend definiert. Zum Beispiel kann der Konfigurations-Controller
4202 die folgenden Steuerkanäle enthalten, z. B. CFG_START Steuerkanal
4208, CFG_VALID Steuerkanal
4210 und CFG_DONE Steuerkanal
4212, wobei für jeden Beispiele in der nachstehenden Tabelle 2 erörtert werden.
Tabelle 2: Steuerkanäle
CFG_START | Wird zu Beginn der Konfiguration auf wahr gesetzt. Setzt den Konfigurationszustand an jedem CFE und setzt den Konfigurationsbus. |
CFG_VALID | Kennzeichnet die Gültigkeit von Werten auf dem Konfigurationsbus. |
CFG_DONE | Optional. Kennzeichnet den Abschluss der Konfiguration eines besonderen CFE. Dies ermöglicht, dass die Konfiguration kurzgeschlossen wird, falls ein CFE keine zusätzliche Konfiguration erfordert. |
-
Im Allgemeinen kann die Behandlung von Konfigurationsinformationen dem Implementierer eines besonderen CFE überlassen werden. Zum Beispiel kann ein CFE für auswählbare Funktion für das Setzen von Registern unter Verwendung eines bereits vorhandenen Datenwegs vorgesehen sein, während ein CFE für festgelegte Funktion möglicherweise einfach ein Konfigurationsregister setzt.
-
Aufgrund von großen Leitungsverzögerungen beim Programmieren eines großen CFE-Satzes kann das Signal CFE_VALID als ein Clock -/Latch-Aktivieren für CFE-Komponenten behandelt werden. Weil dieses Signal als ein Taktsignal verwendet wird, ist der Tastgrad der Zeilen in einer Ausführungsform höchstens 50 %. Als Ergebnis ist der Konfigurationsdurchsatz ungefähr halbiert. Optional kann ein zweites Signal CFG_VALID hinzugefügt werden, um kontinuierliche Programmierung zu ermöglichen.
-
In einer Ausführungsform wird nur CFG_START genau auf einer unabhängigen Kopplung (z. B. Leitung) kommuniziert, CFG_VALID und CFG_DONE können zum Beispiel auf anderen Netzwerkkopplungen überlagert werden.
-
Wiederverwendung von Netzwerkressourcen
-
Um den Konfigurations-Overhead zu reduzieren, verwenden bestimmte Ausführungsformen eines CSA die bereits vorhandene Netzwerkinfrastruktur, um Konfigurationsdaten zu kommunizieren. Ein LCC kann sowohl eine Speicherhierarchie auf Chip-Ebene als auch Kommunikationsnetzwerke auf Fabric-Ebene verwenden, um Daten aus dem Speicher in die Fabric zu bewegen. Als Ergebnis fügt die Konfigurationsinfrastruktur in bestimmten Ausführungsformen eines CSA nicht mehr als 2 % zur Gesamt-Fabric-Fläche und -Leistung hinzu.
-
Die Wiederverwendung von Netzwerkressourcen in bestimmten Ausführungsformen eines CSA kann bewirken, dass ein Netzwerk etwas Hardware-Unterstützung für einen Konfigurationsmechanismus aufweist. Leitungsvermittelnde Netzwerke von Ausführungsformen eines CSA bewirken, dass ein LCC seine Multiplexer auf eine spezifische Weise für die Konfiguration setzt, wenn das Signal ‚CFG_START‘ auf Wahr gesetzt wird. Paketvermittelnde Netzwerke erfordern keine Erweiterung, obwohl LCC-Endpunkte (z. B. Konfigurationsterminatoren) eine spezifische Adresse im paketvermittelnden Netzwerk verwenden. Die Wiederverwendung des Netzwerks erfolgt optional, und bei einigen Ausführungsformen können dedizierte Konfigurationsbusse als zweckmäßiger angesehen werden.
-
Zum CFE-Zustand
-
Jedes CFE kann ein Bit führen, das kennzeichnet, ob es konfiguriert worden ist oder nicht (siehe z. B. die 31). Dieses Bit kann auf Falsch gesetzt sein, wenn das Konfigurationsstartsignal angesteuert ist, und dann auf Wahr gesetzt werden, sobald das besondere CFE konfiguriert worden ist. In einem Konfigurationsprotokoll sind CFEs dazu ausgelegt, Ketten zu bilden, wobei das CFE-Konfigurationszustandsbit die Topologie der Kette bestimmt. Ein CFE kann das Konfigurationszustandsbit des unmittelbar benachbarten CFE lesen. Falls dieses benachbarte CFE konfiguriert ist und das aktuelle CFE nicht konfiguriert ist, kann das CFE bestimmen, dass alle aktuellen Konfigurationsdaten das aktuelle CFE zum Ziel haben. Wenn das Signal ‚CFG_DONE‘ auf Wahr gesetzt ist, kann das CFE sein Konfigurationsbit setzen, was z. B. vorgelagerte CFEs zum Konfigurieren aktiviert. Als ein Basisfall für den Konfigurationsprozess kann ein Konfigurationsterminator (z. B. der Konfigurationsterminator 4004 für den LCC 4002 oder der Konfigurationsterminator 4008 für den LCC 4006 in der 40), der Wahr setzt, dass er konfiguriert ist, am Ende einer Kette enthalten sein.
-
Intern kann dieses Bit im CFE verwendet werden, um Flusssteuer-Bereitschaftssignale anzusteuern. Wenn zum Beispiel das Konfigurationsbit auf Falsch gesetzt ist, können Netzwerksteuersignale automatisch auf Werte geklemmt werden, die verhindern, dass Daten fließen, während innerhalb der PEs keine Operationen oder anderen Aktionen geplant werden.
-
Behandlung von Konfigurationswegen mit hoher Verzögerung
-
Eine Ausführungsform eines LCC kann ein Signal über eine große Entfernung ansteuern, z. B. über viele Multiplexer und mit vielen Ladevorgängen. Somit kann es für ein Signal schwierig sein, innerhalb eines kurzen Taktzyklus an einem entfernten CFE anzukommen. In bestimmten Ausführungsformen liegen Konfigurationssignale auf irgendeiner Aufteilung (z. B. einem Bruchteil) der Haupt- (z. B. CSA -) Taktfrequenz, um Disziplin der digitalen Zeitvorgabe bei der Konfiguration sicherzustellen. Die Taktaufteilung kann in einem Out-of-Band-Signalprotokoll genutzt werden und erfordert keine Modifikation des Haupttaktverteilers.
-
Sicherstellen von konsistentem Fabric-Verhalten während der Konfiguration
-
Weil bestimmte Konfigurationsschemata verteilt sind und aufgrund von Programmier- und Speicherwirkungen nichtdeterministische Zeitvorgaben aufweisen, werden möglicherweise unterschiedliche Abschnitte der Fabric zu unterschiedlichen Zeiten konfiguriert. Als Ergebnis stellen bestimmte Ausführungsformen eines CSA Mechanismen bereit, um inkonsistente Operation zwischen konfigurierten und unkonfigurierten CFEs zu verhindern. Im Allgemeinen wird Konsistenz als eine Eigenschaft angesehen, die von den CFEs selbst angefordert und aufrechterhalten wird, z. B. unter Verwendung des internen CFE-Zustands. Wenn sich zum Beispiel ein CFE in einem unkonfigurierten Zustand befindet, kann es behaupten, dass seine Eingangspuffer voll sind und dass sein Ausgang ungültig ist. Wenn es konfiguriert ist, werden diese Werte auf den wahren Zustand der Puffer gesetzt. Weil genug der Fabric aus der Konfiguration hervorgeht, können diese Techniken zulassen, mit der Operation zu beginnen. Dies hat die Wirkung, die Latenz des Kontext-Switching weiter zu reduzieren, z. B. falls Speicheranforderungen mit großer Latenz früh ausgegeben werden.
-
Variablenbreitenkonfiguration
-
Unterschiedliche CFEs können unterschiedliche Konfigurationswortbreiten aufweisen. Für kleinere CFE-Konfigurationswörter können Implementierer die Verzögerung ausgleichen, indem sie CFE-Konfigurationsladevorgänge über die Netzwerkleitungen ausgewogen zuordnen. Um das Laden auf Netzwerkleitungen auszugleichen, ist eine Option, Konfigurationsbits unterschiedlichen Abschnitten von Netzwerkleitungen zuzuordnen, um die Netto-Verzögerung auf jeder Leitung zu begrenzen. Breite Datenwörter können unter Verwendung von Serialisierungs -/Deserialisierungstechniken behandelt werden. Diese Entscheidungen können auf einer Fabric-Basis getroffen werden, um das Verhalten eines spezifischen CSA (z. B. Fabric) zu optimieren. Der Netzwerk-Controller (z. B. einer oder mehrere vom Netzwerk-Controller 4010 und Netzwerk-Controller 4012) kann mit jeder Domäne (z. B. Subset) des CSA (z. B. Fabric) kommunizieren, um zum Beispiel Konfigurationsinformationen an einen oder mehrere LCCs zu senden. Der Netzwerk-Controller kann ein Teil eines Kommunikationsnetzwerks sein (z. B. separat vom leitungsvermittelnden Netzwerk). Der Netzwerk-Controller kann eine Netzwerk-Datenflussendpunktschaltung enthalten.
-
Mikroarchitektur für Konfiguration mit geringer Latenz eines CSA und zum zeitgerechten Abrufen von Konfigurationsdaten für einen CSA
-
Ausführungsformen eines CSA können ein energieeffizientes und hochperformantes Mittel zum Beschleunigen von Nutzeranwendungen sein. Wenn betrachtet wird, ob ein Programm (z. B. ein Datenflussgraph davon) erfolgreich durch einen Beschleuniger beschleunigt werden kann, können sowohl die Zeit zum Konfigurieren des Beschleunigers als auch die Zeit zum Ablauf des Programms betrachtet werden. Falls die Laufzeit kurz ist, kann die Konfigurationszeit eine große Rolle beim Bestimmen einer erfolgreichen Beschleunigung spielen. Um daher die Domäne von zu beschleunigenden Programmen zu maximieren, wird in einigen Ausführungsformen die Konfigurationszeit so kurz wie möglich gemacht. Einer oder mehrere Konfigurations-Caches können in einem CSA enthalten sein, z. B. so dass das Speichern mit hoher Bandbreite und geringer Latenz schnelle Rekonfiguration ermöglicht. Als Nächstes folgt eine Beschreibung mehrerer Ausführungsformen eines Konfigurations-Cache.
-
In einer Ausführungsform greift die Konfigurations-Hardware (z. B. LCC) während der Konfiguration optional auf den Konfigurations-Cache zu, um neue Konfigurationsinformationen zu erhalten. Der Konfigurations-Cache kann entweder als ein herkömmlicher adressbasierter Cache oder in einem OS-gemanagten Modus arbeiten, bei dem Konfigurationen im lokalen Adressraum gespeichert werden und durch Referenzieren auf diesen Adressraum angesprochen werden. Falls der Konfigurationszustand sich im Cache befindet, dann müssen in bestimmten Ausführungsformen keine Anforderungen an den Sicherungsspeicher gestellt werden. In bestimmten Ausführungsformen liegt dieser Konfigurations-Cache separat von jedem gemeinsam genutzten Cache (z. B. einer unteren Ebene) in der Speicherhierarchie.
-
Die 43 veranschaulicht eine Beschleunigerkachel 4300, die ein Array von Verarbeitungselementen, einen Konfigurations-Cache (z. B. 4318 oder 4320) und einen lokalen Konfigurations-Controller (z. B. 4302 oder 4306) umfasst, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform befindet sich der Konfigurations-Cache 4314 zusammen mit dem lokalen Konfigurations-Controller 4302. In einer Ausführungsform befindet sich der Konfigurations-Cache 4318 in der Konfigurationsdomäne des lokalen Konfigurations-Controllers 4306, z. B. mit einer ersten Domäne, die am Konfigurationsterminator 4304 endet, und einer zweiten Domäne, die am Konfigurationsterminator 4308 endet. Ein Konfigurations-Cache kann ermöglichen, dass sich ein lokaler Konfigurations-Controller während der Konfiguration auf den Konfigurations-Cache beziehen kann, z. B. in der Hoffnung, den Konfigurationszustand mit geringerer Latenz als beim Referenzieren auf den Speicher zu erhalten. Ein Konfigurations-Cache (-Speicher) kann entweder dediziert sein, oder auf ihn kann als ein Konfigurationsmodus eines In-Fabric-Speicherelements, z. B. des lokalen Cache 4316, zugegriffen werden.
Caching-Modi
- 1. Anforderungs-Caching - In diesem Modus arbeitet der Konfigurations-Cache als ein richtiger Cache. Der Konfigurations-Controller gibt adressbasierte Anforderungen aus, die gegen Tags im Cache geprüft werden. Fehlstellen werden in den Cache geladen und können dann während zukünftiger Reprogrammierung neu referenziert werden.
- 2. In-Fabric-Speicher- (Zwischenspeicher -) Caching - In diesem Modus empfängt der Konfigurations-Cache eine Referenz auf eine Konfigurationssequenz in seinem eigenen kleinen Adressraum statt im größeren Adressraum des Host. Dies kann die Speicherdichte verbessern, weil der Abschnitt des Cache, der verwendet wird, um Tags zu speichern, stattdessen verwendet werden kann, um die Konfiguration zu speichern.
-
In bestimmten Ausführungsformen kann ein Konfigurations-Cache die Konfigurationsdaten vorab in sich geladen haben, entweder durch externe oder durch interne Anleitung. Dies kann Reduzierung der Latenz beim Laden von Programmen ermöglichen. Hier sorgen bestimmte Ausführungsformen für eine Schnittstelle zu einem Konfigurations-Cache, was das Laden des neuen Konfigurationszustands in den Cache zulässt, sogar z. B. wenn eine Konfiguration bereits in der Fabric läuft. Das Aufrufen dieses Ladens kann entweder von einer internen oder einer externen Quelle erfolgen. Ausführungsformen eines Vorab-Lade-Mechanismus reduzieren des Weiteren die Latenz, indem sie die Latenz des Cache-Ladens vom Konfigurationsweg beseitigen.
Prefetch-Modi
- 1. Explizites Prefetching - Ein Konfigurationsweg wird mit einem neuen Befehl erweitert, ConfigurationCachePrefetch. Anstatt die Fabric zu programmieren, bewirkt dieser Befehl einfach ein Laden der relevanten Programmkonfiguration in einen Konfigurations-Cache, ohne die Fabric zu programmieren. Weil dieser Mechanismus Huckepack auf der bereits vorhandenen Konfigurationsinfrastruktur läuft, liegt er sowohl innerhalb der Fabric als auch nach außen frei, z. B. gegenüber Kernen und anderen Instanzen, die auf den Speicherraum zugreifen.
- 2. Implizites Prefetching - Ein globaler Konfigurations-Controller kann einen Prefetch-Prädiktor führen und diesen verwenden, um das explizite Prefetching in einen Konfigurations-Cache aufzurufen, z. B. in einer automatisierten Weise.
-
Hardware für schnelle Rekonfiguration eines CSA als Reaktion auf eine Ausnahme
-
Bestimmte Ausführungsformen eines CSA (z. B. eine dreidimensionale Fabric) enthalten große Menge an Befehlen und Konfigurationszuständen, die z. B. während der Operation des CSA größtenteils statisch sind. Somit kann der Konfigurationszustand durch Soft Errors gefährdet sein. Schnelle und fehlerfreie Wiederherstellung bei diesen Soft Errors kann für die Langzeitzuverlässigkeit und -Performance von dreidimensionalen Systemen entscheidend sein.
-
Hier sorgen bestimmte Ausführungsformen für eine schnelle Konfigurations-Wiederherstellungsschleife, in der z. B. Konfigurationsfehler detektiert und Abschnitte der Fabric unmittelbar rekonfiguriert werden. Hier enthalten bestimmte Ausführungsformen einen Konfigurations-Controller, z. B. mit Reprogrammierungsmerkmalen für Zuverlässigkeit, Verfügbarkeit und Wartbarkeit (RAS, Reliability, Availability, Serviceability). Bestimmte Ausführungsformen des CSA enthalten Schaltungsanordnungen für Hochgeschwindigkeitskonfiguration, Fehlermeldung und Paritätsprüfung innerhalb der dreidimensionalen Fabric. Bei Verwendung dieser drei Merkmale und optional eines Konfigurations-Cache kann eine Konfigurations -/Ausnahmebehandlungsschaltung sich schnell von Soft Errors in der Konfiguration erholen. Wenn sie detektiert werden, können Soft Errors an einen Konfigurations-Cache übermittelt werden, der eine sofortige Rekonfiguration (z. B. dieses Abschnitts) der Fabric aufruft. Bestimmte Ausführungsformen sorgen für eine dedizierte Rekonfigurationsschaltung, die z. B. schneller als irgendeine Lösung ist, die indirekt in der Fabric implementiert würde. In bestimmten Ausführungsformen arbeiten die Ausnahme- und Konfigurationsschaltung, die sich zusammen befinden, zusammen, um die Fabric bei Detektion von Konfigurationsfehlern neu zu laden.
-
Die 44 veranschaulicht eine Beschleunigerkachel 4400, die ein Array von Verarbeitungselementen und einen Konfigurations- und Ausnahmebehandlungs-Controller (4402, 4406) mit einer Rekonfigurationsschaltung (4418, 4422) umfasst, gemäß Ausführungsformen der Offenbarung. Wenn ein PE durch seine lokalen RAS-Merkmale einen Konfigurationsfehler entdeckt, sendet es in einer Ausführungsform eine (z. B. Konfigurationsfehler- oder Rekonfigurationsfehler -) Nachricht über seinen Ausnahmegenerator an den Konfigurations- und Ausnahmebehandlungs-Controller (z. B. 4402 oder 4406). Beim Empfang dieser Nachricht ruft der Konfigurations- und Ausnahmebehandlungs-Controller (z. B. 4402 oder 4406) die Rekonfigurationsschaltung (z. B. 4418 bzw. 4422), die sich zusammen befinden, auf, um den Konfigurationszustand neu zu laden. Die Konfigurationsmikroarchitektur fährt fort und lädt (z. B. nur) den Konfigurationszustand neu und in bestimmten Ausführungsformen nur den Konfigurationszustand für das PE, das den RAS-Fehler meldet. Bei Abschluss der Rekonfiguration kann die Fabric die normale Operation wiederaufnehmen. Um die Latenz zu verringern, kann der Konfigurationszustand, der vom Konfigurations- und Ausnahmebehandlungs-Controller (z. B. 4402 oder 4406) verwendet wird, aus einem Konfigurations-Cache entnommen werden. Als ein Basisfall für den Konfigurations- oder Rekonfigurationsprozess kann ein Konfigurationsterminator (z. B. der Konfigurationsterminator 4404 für den Konfigurations- und Ausnahmebehandlungs-Controller 4402 oder der Konfigurationsterminator 4408 für den Konfigurations- und Ausnahmebehandlungs-Controller 4406 in der 44), der auf Wahr setzt, dass er konfiguriert (oder rekonfiguriert) ist, am Ende einer Kette enthalten sein.
-
Die 45 veranschaulicht eine Rekonfigurationsschaltung 4518 gemäß Ausführungsformen der Offenbarung. Die Rekonfigurationsschaltung 4518 enthält ein Konfigurationszustandsregister 4520, um den Konfigurationszustand (oder einen Zeiger darauf) zu speichern.
-
Hardware für von der Fabric aufgerufene Rekonfiguration eines CSA
-
Einige Abschnitte einer Anwendung, die auf einen CSA (z. B. dreidimensionales Array) abzielen, können selten laufen oder können zu anderen Teilen des Programms wechselseitig exklusiv sein. Um Fläche einzusparen, die Performance zu verbessern und/oder die Leistung zu reduzieren, kann es nützlich sein, Abschnitte der dreidimensionalen Fabric zwischen unterschiedlichen Teilen des Programmdatenflussgraphen zeitlich zu multiplexen. Hier enthalten bestimmte Ausführungsformen eine Schnittstelle, durch die ein CSA (z. B. über das dreidimensionale Programm) anfordern kann, dass dieser Teil der Fabric reprogrammiert wird. Dies kann ermöglichen, dass der CSA sich dynamisch selbst entsprechend dem dynamischen Steuerfluss ändert. Hier ermöglichen bestimmte Ausführungsformen die von der Fabric aufgerufene Rekonfiguration (z. B. Reprogrammierung). Hier sorgen bestimmte Ausführungsformen für einen Satz von Schnittstellen zum Triggern der Konfiguration von innerhalb der Fabric. In einigen Ausführungsformen gibt ein PE eine Rekonfigurationsanforderung auf Basis einiger Entscheidungen im Programmdatenflussgraphen aus. Diese Anforderung kann über ein Netzwerk zur neuen Konfigurationsschnittstelle laufen, wo es die Rekonfiguration triggert. Sobald die Rekonfiguration abgeschlossen ist, kann optional eine Nachricht zurückgegeben werden, die den Abschluss meldet. Bestimmte Ausführungsformen eines CSA sorgen somit für eine vom Programm (z. B. Datenflussgraphen) geführte Rekonfigurationsfähigkeit.
-
Die 46 veranschaulicht eine Beschleunigerkachel 4600, die ein Array von Verarbeitungselementen und einen Konfigurations- und Ausnahmebehandlungs-Controller 4606 mit einer Rekonfigurationsschaltung 4618 umfasst, gemäß Ausführungsformen der Offenbarung. Hier gibt ein Abschnitt der Fabric eine Anforderung zur (Re -) Konfiguration an eine Konfigurationsdomäne aus, z. B. den Konfigurations- und Ausnahmebehandlungs-Controller 4606 und/oder die Rekonfigurationsschaltung 4618. Die Domäne (re -) konfiguriert sich selbst, und wenn die Anforderung erfüllt worden ist, geben der Konfigurations- und Ausnahmebehandlungs-Controller 4606 und/oder die Rekonfigurationsschaltung 4618 eine Antwort an die Fabric aus, um der Fabric zu melden, dass die (Re -) Konfiguration abgeschlossen ist. In einer Ausführungsform deaktivieren der Konfigurations- und Ausnahmebehandlungs-Controller 4606 und/oder die Rekonfigurationsschaltung 4618 die Kommunikation während der Zeit, in der die (Re -) Konfiguration stattfindet, so dass das Programm während der Operation keine Konsistenzprobleme hat.
-
Konfigurationsmodi
-
Konfigurieren nach Adresse - In diesem Modus stellt die Fabric eine direkte Anforderung zum Laden der Konfigurationsdaten aus einer besonderen Adresse.
-
Konfigurieren nach Referenz - In diesem Modus stellt die Fabric eine Anforderung zum Laden einer neuen Konfiguration, z. B. durch eine vorbestimmte Referenz-ID. Dies kann die Bestimmung des Codes zum Laden vereinfachen, weil der Ort des Codes abstrahiert worden ist.
-
Mehrere Domänen konfigurieren
-
Ein CSA kann einen Konfigurations-Controller einer höheren Ebene enthalten, um einen Multicast-Mechanismus zum Ausgeben (z. B. über das durch den gestrichelten Kasten gezeigte Netzwerk) von Konfigurationsanforderungen an mehrere (z. B. verteilte oder lokale) Konfigurations-Controller zu unterstützen. Dies kann ermöglichen, dass eine einzelne Konfigurationsanforderung über größere Abschnitte der Fabric repliziert wird, was z. B. eine breitere Konfiguration triggert.
-
Ausnahmeaggregatoren
-
Bestimmte Ausführungsformen eines CSA können ebenfalls eine Ausnahme (z. B. Ausnahmebedingung) erfahren, zum Beispiel Fließkomma-Unterlauf. Wenn diese Bedingungen auftreten, können spezielle Handler aufgerufen werden, um entweder das Programm zu korrigieren oder es zu beenden. Hier sorgen bestimmte Ausführungsformen für eine Architektur auf Systemebene zur Behandlung von Ausnahmen in dreidimensionalen Fabrics. Weil bestimmte dreidimensionale Fabrics die Flächeneffizienz betonen, minimieren hier Ausführungsformen die Gesamtfläche, während sie einen allgemeinen Ausnahmemechanismus bereitstellen. Hier stellen bestimmte Ausführungsformen ein Mittel mit geringer Fläche bereit, das Ausnahmebedingungen signalisiert, die innerhalb eines CSA (z. B. einem dreidimensionalen Array) auftreten. Hier stellen bestimmte Ausführungsformen ein Schnittstellen- und ein Signalisierungsprotokoll zum Übermitteln solcher Ausnahmen wie auch eine Ausnahmesemantik auf PE-Ebene bereit. Hier sind bestimmte Ausführungsformen z. B. dedizierte Ausnahmebehandlungsfähigkeiten und erfordern keine explizite Behandlung durch den Programmierer.
-
Eine Ausführungsform einer CSA-Ausnahmearchitektur besteht aus vier Abschnitten, die z. B. in den 47 - 48 gezeigt werden. Diese Abschnitte können in einer Hierarchie angeordnet sein, bei der Ausnahmen vom Erzeuger und schließlich hoch zum Ausnahmeaggregator (z. B. -Handler) auf Kachelebene laufen, der mit einem Ausnahmedienstleister, z. B. eines Kerns, zusammenkommen kann. Diese vier Abschnitte können Folgende sein:
- 1. PE-Ausnahmegenerator
- 2. Lokales Ausnahmenetzwerk
- 3. Mezzanin-Ausnahmeaggregator
- 4. Ausnahmeaggregator auf Kachelebene
-
Die 47 veranschaulicht eine Beschleunigerkachel 4700, die ein Array von Verarbeitungselementen und einen Mezzanin-Ausnahmeaggregator 4702 umfasst, der mit einem Ausnahmeaggregator 4704 auf Kachelebene gekoppelt ist, gemäß Ausführungsformen der Offenbarung. Die 48 veranschaulicht ein Verarbeitungselement 4800 mit einem Ausnahmegenerator 4844 gemäß Ausführungsformen der Offenbarung.
-
PE-Ausnahmegenerator
-
Das Verarbeitungselement 4800 kann das Verarbeitungselement 2700 aus der 27 enthalten, wobei zum Beispiel ähnliche Nummern ähnliche Komponenten sind, z. B. das lokale Netzwerk 2702 und das lokale Netzwerk 4802. Das zusätzliche Netzwerk 4813 (z. B. der Kanal) kann ein Ausnahmenetzwerk sein. Ein PE kann eine Schnittstelle mit einem Ausnahmenetzwerk implementieren (z. B. dem Ausnahmenetzwerk 4813 (z. B. Kanal) in der 48). Zum Beispiel zeigt die 48 die Mikroarchitektur einer solchen Schnittstelle, wobei das PE einen Ausnahmegenerator 4844 aufweist (der z. B. ein Ausnahme-Zustandsmaschine (FSM, Finite State Machine) 4840 aufruft, um ein Ausnahmepaket (z. B. BOXID 4842) abzutasten, heraus auf das Ausnahmenetzwerk). BOXID 4842 kann ein eindeutiger Identifizierer für eine ausnahmeproduzierende Instanz (z. B. ein PE oder Kasten) innerhalb eines lokalen Ausnahmenetzwerks sein. Wenn eine Ausnahme detektiert wird, erfasst der Ausnahmegenerator 4844 das Ausnahmenetzwerk und tastet den BOXID heraus, wenn ermittelt wird, dass das Netzwerk frei ist. Ausnahmen können durch viele Bedingungen bewirkt werden, zum Beispiel, ohne darauf beschränkt zu sein, durch einen Arithmetikfehler, eine fehlgeschlagene ECC-Zustandsprüfung usw., allerdings kann es auch sein, dass eine Ausnahmedatenflussoperation mit der Idee eingebracht wird, Konstruktionen wie Haltepunkte zu unterstützen.
-
Das Aufrufen der Ausnahme kann entweder explizit, durch die Ausführung eines vom Programmierer gegebenen Befehls, oder implizit, wenn eine verfestigte Fehlerbedingung (z. B. ein Fließkomma-Unterlauf) detektiert wird, stattfinden. Bei einer Ausnahme kann das PE 4800 in einen Wartezustand gelangen, in dem es darauf wartet, vom endgültigen Ausnahme-Handler, z. B. außerhalb des PE 4800, bedient zu werden. Die Inhalte des Ausnahmepakets hängen von der Implementierung des besonderen PE ab, wie nachstehend beschrieben wird.
-
Lokales Ausnahmenetzwerk
-
Ein (z. B. lokales) Ausnahmenetzwerk lenkt Ausnahmepakete aus dem PE 4800 zum Mezzanin-Ausnahmenetzwerk. Das Ausnahmenetzwerk (z. B. 4813) kann ein serielles paketvermittelndes Netzwerk sein, das aus einer (z. B. einzelnen) Steuerleitung und einer oder mehreren Datenleitungen besteht, die z. B. in einer Ring- oder Baumtopologie organisiert sind, z. B. für ein Subset von PEs. Jedes PE kann einen (z. B. Ring -) Stopp im (z. B. lokalen) Ausnahmenetzwerk aufweisen, wo es z. B. zuweisen kann, um Nachrichten in das Ausnahmenetzwerk zu injizieren.
-
PE-Endpunkte, die ein Ausnahmepaket injizieren müssen, können ihren lokalen Ausnahmenetzwerk-Eingangspunkt beobachten. Falls das Steuersignal belegt angibt, muss das PE mit der Einleitung der Injektion seines Pakets warten. Falls das Netzwerk nicht belegt ist, das heißt, der nachgelagerte Stopp hat kein Paket weiterzuleiten, dann wird das PE damit fortfahren, die Injektion einzuleiten.
-
Netzwerkpakete können von variabler oder fester Länge sein. Jedes Paket kann mit einem Header-Feld fester Länge beginnen, dass das Quell-PE des Pakets identifiziert. Darauf kann eine variable Anzahl von PE-spezifischen Informationen, die Felder enthalten, folgen, zum Beispiel einschließlich Fehlercodes, Datenwerte oder andere nützliche Statusinformationen.
-
Mezzanin-Ausnahmeaggregator
-
Der Mezzanin-Ausnahmeaggregator 4704 ist für das Assemblieren des lokalen Ausnahmenetzwerks in größere Pakete und ihr Senden an den Ausnahmeaggregator 4702 auf Kachelebene zuständig. Der Mezzanin-Ausnahmeaggregator 4704 kann vorab an das lokale Ausnahmepaket seine eigene eindeutige ID anhängen, was z. B. sicherstellt, dass Ausnahmenachrichten eindeutig sind. Der Mezzanin-Ausnahmeaggregator 4704 kann einen speziellen virtuellen Kanal nur für Ausnahmen im Mezzanin-Netzwerk anschließen, was z. B. sicherstellt, dass Ausnahmen frei von Deadlocks sind.
-
Der Mezzanin-Ausnahmeaggregator 4704 kann auch in der Lage sein, bestimmte Ausnahmeklassen direkt zu bedienen. Zum Beispiel kann eine Konfigurationsanforderung aus der Fabric aus dem Mezzanin-Netzwerk heraus unter Verwendung von Caches, die für den Mezzanin-Netzwerkstopp lokal sind, bedient werden.
-
Ausnahmeaggregator auf Kachelebene
-
Die Endstufe des Ausnahmesystems ist der Ausnahmeaggregator 4702 auf Kachelebene. Der Ausnahmeaggregator 4702 auf Kachelebene ist für das Erfassen von Ausnahmen aus den verschiedenen Ausnahmeaggregatoren auf Mezzanin-Ebene (z. B. 4704) und ihre Weiterleitung an die geeignete Dienst-Hardware (z. B. Kern) zuständig. Der Ausnahmeaggregator 4702 auf Kachelebene kann von daher einige interne Tabellen und einen Controller enthalten, um besondere Nachrichten mit Handler-Routinen zu verknüpfen. Diese Tabellen können entweder direkt oder mit einem kleinen Zustandsautomaten indiziert werden, um besondere Ausnahmen zu lenken.
-
Wie der Mezzanin-Ausnahmeaggregator kann der Ausnahmeaggregator auf Kachelebene einige Ausnahmeanforderungen bedienen. Er kann zum Beispiel die Reprogrammierung eines großen Abschnitts der PE-Fabric als Reaktion auf eine spezifische Ausnahme aufrufen.
-
Extraktions-Controller
-
Bestimmte Ausführungsformen eines CSA enthalten (einen) Extraktions-Controller, um Daten aus der Fabric zu extrahieren. Das Nachstehende erörtert Ausführungsformen, wie diese Extraktion schnell erreicht und wie der Ressourcen-Overhead der Datenextraktion minimiert werden kann. Die Datenextraktion kann für solche entscheidenden Aufgaben wie Ausnahmebehandlung und Kontext-Switching genutzt werden. Hier extrahieren bestimmte Ausführungsformen Daten aus einer heterogenen dreidimensionalen Fabric, indem sie Merkmale einbringen, die ermöglichen, dass extrahierbare Fabric-Elemente (EFEs, Extractable Fabric Elements) (zum Beispiel PEs, Netzwerk-Controller und/oder Switches) mit variablen und dynamisch variablen Zustandsmengen extrahiert werden.
-
Ausführungsformen eines CSA enthalten ein verteiltes Datenextraktionsprotokoll und Mikroarchitektur zum Unterstützen dieses Protokolls. Bestimmte Ausführungsformen eines CSA enthalten mehrere lokale Extraktions-Controller (LECs), die Programmdaten aus ihrem lokalen Bereich der dreidimensionalen Fabric unter Verwendung einer Kombination eines (z. B. kleinen) Satzes von Steuersignalen und dem durch die Fabric bereitgestellten Netzwerk heraus übertragen. Zustandselemente können an jedem extrahierbaren Fabric-Element (EFE) verwendet werden, um Extraktionsketten zu bilden, die z. B. ermöglichen, dass sich einzelne EFEs ohne globale Adressierung selbst extrahieren.
-
Ausführungsformen eines CSA verwenden kein lokales Netzwerk, um Programmdaten zu extrahieren. Ausführungsformen eines CSA enthalten spezifische Hardware-Unterstützung (z. B. einen Extraktions-Controller) zum Beispiel für die Bildung von Extraktionsketten, und beruhen nicht auf Software, um diese Ketten dynamisch einzurichten, z. B. auf Kosten von zunehmender Extraktionszeit. Ausführungsformen eines CSA sind nicht rein paketvermittelnd und enthalten zusätzliche Out-of-Band-Steuerleitungen (z. B. wird kein Steuern über den Datenweg gesendet, was zusätzliche Zyklen erfordert, um diese Informationen abzutasten und zu reserialisieren). Ausführungsformen eines CSA verringern die Extraktionslatenz durch Festlegen der Extraktionsreihenfolge und durch Bereitstellen expliziter Out-of-Band-Steuerung (z. B. wenigstens um einen Faktor von zwei), während sie die Netzwerkkomplexität nicht erheblich erhöhen.
-
Ausführungsformen eines CSA verwenden keinen seriellen Mechanismus zur Datenextraktion, bei dem Daten unter Verwendung eines Protokolls nach JTAG-Art Bit für Bit aus der Fabric übertragen werden. Ausführungsformen eines CSA nutzen einen Ansatz mit grobkörniger Fabric. In bestimmten Ausführungsformen weist das Hinzufügen einiger Steuerleitungen oder Zustandselemente zu einer 64- oder 32-Bit-orientierten Fabric einen geringeren Aufwand auf als das Hinzufügen dieser gleichen Steuermechanismen zu einer 4- oder 6-Bit-Fabric.
-
Die 49 veranschaulicht eine Beschleunigerkachel 4900, die ein Array von Verarbeitungselementen und einen lokalen Extraktions-Controller (4902, 4906) umfasst, gemäß Ausführungsformen der Offenbarung. Jedes PE, jeder Netzwerk-Controller und jeder Switch können extrahierbare Fabric-Elemente (EFEs) sein, die z. B. durch Ausführungsformen der CSA-Architektur konfiguriert (z. B. programmiert) sind.
-
Ausführungsformen eines CSA enthalten Hardware, die für eine effiziente verteilte Extraktion mit geringer Latenz aus einer heterogenen dreidimensionalen Fabric sorgt. Dies kann entsprechend vier Techniken erreicht werden. Erstens wird eine Hardware-Instanz, der lokale Extraktions-Controller (LEC), genutzt, zum Beispiel wie in den 49 - 51. Ein LEC kann Befehle von einem Host (z. B. einem Prozessorkern) annehmen, die z. B. einen Datenstrom aus dem dreidimensionalen Array extrahieren, und diese Daten zur Prüfung durch den Host zurück in den virtuellen Speicher schreiben. Zweitens kann ein Extraktionsdatenweg enthalten sein, der z. B. genauso breit wie die native Breite der PE-Fabric ist und der der PE-Fabric überlagert sein kann. Drittens können neue Steuersignale in der PE-Fabric empfangen werden, die den Extraktionsprozess organisieren. Viertens können sich Zustandselemente an jedem konfigurierbaren Endpunkt befinden (z. B. in einem Register), der den Status benachbarter EFEs verfolgt, was ermöglicht, dass jedes EFE seinen Zustand ohne zusätzliche Steuersignale eindeutig exportiert. Diese vier mikroarchitektonischen Merkmale können ermöglichen, dass ein CSA Daten aus EFE-Ketten extrahiert. Um geringe Datenextraktionslatenz zu erreichen, können bestimmte Ausführungsformen das Extraktionsproblem aufteilen, indem sie mehrere (z. B. viele) LEC- und EFE-Ketten in der Fabric enthalten. Zum Extraktionszeitpunkt können diese Ketten unabhängig arbeiten, um Daten aus der Fabric parallel zu extrahieren, was z. B. die Latenz drastisch reduziert. Als Ergebnis dieser Kombinationen kann ein CSA einen vollständigen Zustands-Dump durchführen (z. B. in einigen Hundert Nanosekunden).
-
Die 50A - 50C veranschaulichen einen lokalen Extraktions-Controller 5002, der ein Datenwegenetzwerk konfiguriert, gemäß Ausführungsformen der Offenbarung. Das gezeigte Netzwerk enthält mehrere Multiplexer (z. B. die Multiplexer 5006, 5008, 5010), die dazu konfiguriert sein können (z. B. über ihre jeweiligen Steuersignale), einen oder mehrere Datenwege (z. B. aus PEs) zu verbinden. Die 50A veranschaulicht das Netzwerk 5000 (z. B. Fabric), das für irgendeine frühere Operation oder Programm konfiguriert (z. B. gesetzt) ist. Die 50B veranschaulicht den lokalen Extraktions-Controller 5002 (der z. B. eine Netzwerk-Schnittstellenschaltung 5004 zum Senden und/oder Empfangen von Signalen enthält), der ein Extraktionssignal abtastet, und alle PEs, die vom LEC gesteuert werden, gelangen in den Extraktionsmodus. Das letzte PE in der Extraktionskette (oder ein Extraktionsterminator) kann die Extraktionskanäle (z. B. -Bus) führen und Daten entweder entsprechend (1) Signalen aus dem LEC oder (2) intern produzierten Signalen (z. B. aus einem PE) senden. Bei Abschluss kann ein PE sein Abschluss-Flag setzen, was z. B. ermöglicht, dass das nächste PE seine Daten extrahiert. Die 50C veranschaulicht, dass das am weitesten entfernte PE den Extraktionsprozess abgeschlossen hat und als Ergebnis sein Extraktionszustandsbit oder -bits gesetzt hat, was z. B. die Multiplexer in das benachbarte Netzwerk schwingen lässt, um zu ermöglichen, dass das nächste PE mit dem Extraktionsprozess beginnt. Das extrahierte PE kann die normale Operation wiederaufnehmen. In einigen Ausführungsformen kann das PE deaktiviert bleiben, bis andere Aktionen erfolgen. In diesen Figuren sind die Multiplexer-Netzwerke analog dem „Switch“, der in bestimmten Figuren gezeigt wird (z. B. 24).
-
Die folgenden Abschnitte beschreiben die Operation der verschiedenen Komponenten von Ausführungsformen eines Extraktionsnetzwerks.
-
Lokaler Extraktions-Controller
-
Die 51 veranschaulicht einen Extraktions-Controller 5102 gemäß Ausfiihrungsformen der Offenbarung. Ein lokaler Extraktions-Controller (LEC) kann die Hardware-Instanz sein, die für das Annehmen von Extraktionsbefehlen, die Koordination des Extraktionsprozesses mit den EFEs und/oder das Speichern der extrahierten Daten, z. B. in virtuellem Speicher, zuständig ist. In dieser Eigenschaft kann der LEC ein sequentieller Spezial-Mikrocontroller sein.
-
Die LEC-Operation kann beginnen, wenn er einen Zeiger auf einen Puffer (z. B. im virtuellen Speicher), in den der Fabric-Zustand geschrieben wird, und optional einen Befehl, der steuert, wie viel der Fabric extrahiert werden wird, empfängt. Abhängig von der LEC-Mikroarchitektur kann dieser Zeiger (z. B. gespeichert im Zeigerregister 5104) entweder über ein Netzwerk oder über einen Speichersystemzugriff zum LEC gelangen. Wenn er solch einen Zeiger (z. B. Befehl) empfängt, fährt der LEC damit fort, den Zustand aus dem Abschnitt der Fabric zu extrahieren, für den er zuständig ist. Der LEC kann diese extrahierten Daten aus der Fabric in den Puffer, der durch den externen Aufrufer bereitgestellt wird, übertragen.
-
Zwei unterschiedliche Mikroarchitekturen für den LEC werden in der 49 gezeigt. Die erste platziert den LEC 4902 an der Speicherschnittstelle. In diesem Fall kann der LEC direkte Anforderungen an das Speichersystem zum Schreiben extrahierter Daten stellen. Im zweiten Fall ist der LEC 4906 auf einem Speichernetzwerk platziert, in dem er Anforderungen an den Speicher nur indirekt stellt. In beiden Fällen kann die logische Operation des LEC unverändert sein. In einer Ausführungsform werden LECs über den Wunsch informiert, Daten aus der Fabric zu extrahieren, zum Beispiel durch einen Satz von (z. B. OS-sichtbaren) Steuerstatusregistern, die verwendet werden, um einzelne LECs über neue Befehle zu informieren.
-
Zusätzliche Out-of-Band-Steuerkanäle (z. B. Leitungen)
-
In bestimmten Ausführungsformen beruht die Extraktion auf
2 -
8 zusätzlichen Out-of-Band-Signalen, um die Konfigurationsgeschwindigkeit zu verbessern, wie nachstehend definiert. Vom LEC angesteuerte Signale können mit LEC bezeichnet sein. Vom EFE (z. B. PE) angesteuerte Signale können mit EFE bezeichnet sein. Der Konfigurations-Controller
5102 kann die folgenden Steuerkanäle enthalten, z. B. LEC_EXTRACT Steuerkanal
5206, LEC_START Steuerkanal
5108, LEC_STROBE Steuerkanal
5110 und EFE_COMPLETE Steuerkanal
5112, wobei für jeden Beispiele in der nachstehenden Tabelle 3 erörtert werden.
TABELLE 3: Extraktionskanäle
LEC_EXTRACT | Optionales Signal, das vom LEC während des Extraktionsprozesses gesetzt wird. Heruntersetzen dieses Signals bewirkt, dass die normale Operation wiederaufgenommen wird. |
LEC-START | Signal, das den Start der Extraktion kennzeichnet, was Einrichten des lokalen EFE-Zustands ermöglicht. |
LEC_STROBE | Optionales Abtastsignal zum Steuern von zur Extraktion in Bezug stehende Zustandsmaschinen an EFEs. In einigen Implementierungen können EFEs dieses Signal intern generieren. |
EFE_COMPLETE | Optionales Signal, das abgetastet wird, wenn der EFE den Dumping-Zustand abgeschlossen hat. Dies hilft dem LEC, den Abschluss von einzelnen EFE-Dumps zu identifizieren. |
-
Im Allgemeinen kann die Behandlung der Extraktion dem Implementierer eines besonderen EFE überlassen werden. Zum Beispiel kann das EFE für auswählbare Funktion für das Dumping von Registern unter Verwendung eines bereits vorhandenen Datenwegs vorgesehen sein, während ein EFE für festgelegte Funktion möglicherweise einfach einen Multiplexer aufweist.
-
Aufgrund von großen Leitungsverzögerungen beim Programmieren eines großen EFE-Satzes kann das Signal LEC_STROBE als ein Clock -/Latch-Aktivieren für EFE-Komponenten behandelt werden. Weil dieses Signal als ein Taktsignal verwendet wird, ist der Tastgrad der Zeilen in einer Ausführungsform höchstens 50 %. Als Ergebnis ist der Extraktionsdurchsatz ungefähr halbiert. Optional kann ein zweites Signal LEC_STROBE hinzugefügt werden, um kontinuierliche Extraktion zu ermöglichen.
-
In einer Ausfiihrungsform wird nur LEC_START genau auf einer unabhängigen Kopplung (z. B. Leitung) kommuniziert, andere Steuerkanäle können zum Beispiel auf dem bereits vorhandenen Netzwerk (z. B. Leitungen) überlagert werden.
-
Wiederverwendung von Netzwerkressourcen
-
Um den Datenextraktions-Overhead zu reduzieren, verwenden bestimmte Ausführungsformen eines CSA die bereits vorhandene Netzwerkinfrastruktur, um Extraktionsdaten zu kommunizieren. Ein LEC kann sowohl eine Speicherhierarchie auf Chip-Ebene als auch Kommunikationsnetzwerke auf Fabric-Ebene verwenden, um Daten aus der Fabric in Speicher zu bewegen. Als Ergebnis fügt die Extraktionsinfrastruktur in bestimmten Ausführungsformen eines CSA nicht mehr als 2 % zur Gesamt-Fabric-Fläche und -Leistung hinzu.
-
Die Wiederverwendung von Netzwerkressourcen in bestimmten Ausführungsformen eines CSA kann bewirken, dass ein Netzwerk etwas Hardware-Unterstützung für ein Extraktionsprotokoll aufweist. Leitungsvermittelnde Netzwerke, die von bestimmten Ausführungsformen eines CSA erforderlich sind, bewirken, dass ein LEC seine Multiplexer auf eine spezifische Weise für die Konfiguration setzt, wenn das Signal ‚LEC_START‘ auf Wahr gesetzt ist. Paketvermittelnde Netzwerke erfordern keine Erweiterung, obwohl LEC-Endpunkte (z. B. Extraktionsterminatoren) eine spezifische Adresse im paketvermittelnden Netzwerk verwenden. Die Wiederverwendung des Netzwerks erfolgt optional, und bei einigen Ausführungsformen können dedizierte Konfigurationsbusse als zweckmäßiger angesehen werden.
-
Zum EFE-Zustand
-
Jedes EFE kann ein Bit führen, das kennzeichnet, ob es seinen Zustand exportiert hat oder nicht. Dieses Bit kann auf Falsch gesetzt sein, wenn das Extraktionsstartsignal angesteuert ist, und dann auf Wahr gesetzt sein, sobald das besondere EFE die Extraktion beendet hat. In einem Extraktionsprotokoll sind EFEs dazu ausgelegt, Ketten zu bilden, wobei das EFE-Extraktionszustandsbit die Topologie der Kette bestimmt. Ein EFE kann das Extraktionszustandsbit des unmittelbar benachbarten EFE lesen. Falls bei diesem benachbarten EFE das Extraktionsbit gesetzt ist und beim aktuellen EFE nicht, kann das EFE bestimmen, dass ihm der Extraktionsbus gehört. Wenn ein EFE seinen letzten Datenwert ausliest, kann es das Signal ‚EFE_DONE‘ ansteuern und sein Extraktionsbit setzen, was z. B. vorgelagerte EFEs zum Konfigurieren für die Extraktion aktiviert. Das dem EFE benachbarte Netzwerk kann dieses Signal beobachten und ebenfalls seinen Zustand anpassen, um den Übergang zu handhaben. Als ein Basisfall für den Extraktionsprozess kann ein Extraktionsterminator (z. B. der Extraktionsterminator 4904 für den LEC 4902 oder der Extraktionsterminator 4908 für den LEC 4906 in der 40), der Wahr setzt, dass die Extraktion abgeschlossen ist, am Ende einer Kette enthalten sein.
-
Intern können diese Bits im EFE verwendet werden, um Flusssteuer-Bereitschaftssignale anzusteuern. Wenn zum Beispiel das Extraktionsbit auf Falsch gesetzt ist, können Netzwerksteuersignale automatisch auf Werte geklemmt werden, die verhindern, dass Daten fließen, während innerhalb der PEs keine Operationen oder Aktionen geplant werden.
-
Behandlung von Wegen mit hoher Verzögerung
-
Eine Ausführungsform eines LEC kann ein Signal über eine große Entfernung ansteuern, z. B. über viele Multiplexer und mit vielen Ladevorgängen. Somit kann es für ein Signal schwierig sein, innerhalb eines kurzen Taktzyklus an einem entfernten EFE anzukommen. In bestimmten Ausführungsformen liegen Extraktionssignale auf irgendeiner Aufteilung (z. B. einem Bruchteil) der Haupt- (z. B. CSA -) Taktfrequenz, um Disziplin der digitalen Zeitvorgabe bei der Extraktion sicherzustellen. Die Taktaufteilung kann in einem Out-of-Band-Signalprotokoll genutzt werden und erfordert keine Modifikation des Haupttaktverteilers.
-
Sicherstellen von konsistentem Fabric-Verhalten während der Extraktion
-
Weil bestimmte Extraktionsschemata verteilt sind und aufgrund von Programmier- und Speicherwirkungen nichtdeterministische Zeitvorgaben aufweisen, werden möglicherweise unterschiedliche Elemente der Fabric zu unterschiedlichen Zeiten extrahiert. Während LEC_EXTRACT angesteuert ist, können alle Netzwerk-Flusssteuersignale auf logisch Null angesteuert werden, womit z. B. die Operation eines besonderen Segments der Fabric eingefroren wird.
-
Ein Extraktionsprozess kann zerstörungsfrei sein. Daher kann ein Satz PEs als betriebsfähig angesehen werden, sobald die Extraktion abgeschlossen ist. Eine Erweiterung eines Extraktionsprotokolls kann ermöglichen, dass PEs optional nach der Extraktion deaktiviert werden. Alternativ wird der Beginn der Konfiguration während des Extraktionsprozesses eine ähnliche Wirkung in Ausführungsformen aufweisen.
-
Einzel-PE-Extraktion
-
In einigen Fällen kann es angebracht sein, ein einzelnes PE zu extrahieren. In diesem Fall kann ein optionales Adresssignal als Teil des Beginns des Extraktionsprozesses angesteuert werden. Dies kann ermöglichen, dass das zur Extraktion angezielte PE direkt aktiviert wird. Sobald dieses PE extrahiert worden ist, kann der Extraktionsprozess enden, indem das Signal LEC_EXTRACT heruntergesetzt wird. Auf diese Weise kann ein einzelnes PE selektiv extrahiert werden, z. B. vom lokalen Extraktions-Controller.
-
Handhabung von Extraktions-Backpressure
-
In einer Ausführungsform, bei der der LEC extrahierte Daten in Speicher schreibt (zum Beispiel zur Nachbearbeitung, z. B. in Software), kann er begrenzter Speicherbandbreite ausgesetzt sein. Falls der LEC seine Pufferkapazität ausschöpft oder erwartet, dass er seine Pufferkapazität ausschöpfen wird, kann er das Abtasten des Signals LEC_STROBE stoppen, bis das Pufferproblem gelöst worden ist.
-
Es sei angemerkt, dass in bestimmten Figuren (z. B. in den 40, 43, 44, 46, 47 und 49) die Kommunikationen schematisch gezeigt werden. In bestimmten Ausführungsformen können diese Kommunikationen über das (z. B. Interconnect -) Netzwerk erfolgen.
-
Flussdiagramme
-
Die 52 veranschaulicht ein Flussdiagramm 5200 gemäß Ausführungsformen der Offenbarung. Der gezeigte Fluss 5200 beinhaltet Folgendes: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren, 5202; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen, 5204; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, 5206; den Datenflussgraphen in ein Array von Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator im Array von Verarbeitungselementen dargestellt wird, 5208; und eine zweite Operation des Datenflussgraphen mit dem Array von Verarbeitungselementen durchzuführen, wenn ein eingehender Operandensatz am Array von Verarbeitungselementen ankommt, 5210.
-
Die 53 veranschaulicht ein Flussdiagramm 5300 gemäß Ausführungsformen der Offenbarung. Der gezeigte Fluss 5300 beinhaltet Folgendes: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren, 5302; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen, 5304; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, 5306; den Datenflussgraphen in mehrere Verarbeitungselemente des Prozessors und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird, 5308; und eine zweite Operation des Datenflussgraphen mit dem Interconnect-Netzwerk und den mehreren Verarbeitungselementen durchzuführen, wenn ein eingehender Operandensatz an den mehreren Verarbeitungselementen ankommt, 5310.
-
ZUSAMMENFASSUNG
-
Supercomputing im ExaFLOP-Maßstab kann eine Herausforderung bei Hochleistungsberechnungen darstellen, eine Herausforderung, die wahrscheinlich nicht mit konventionellen Von-Neumann-Architekturen zu erfüllen ist. Um ExaFLOPs zu erreichen, stellen Ausführungsformen eines CSA ein heterogenes dreidimensionales Array bereit, das auf die direkte Ausführung von (z. B. vom Kompilierer produzierten) Datenflussgraphen abzielt. Zusätzlich zum Auslegen der architektonischen Prinzipien von Ausführungsformen eines CSA, werden oben auch Ausführungsformen eines CSA beschrieben und bewertet, die gegenüber den bereits vorhandenen Produkten eine mehr als zehnfache Performance und Energie zeigten. Vom Kompilierer generierter Code kann erhebliche Performance- und Energiesteigerungen gegenüber Roadmap-Architekturen aufweisen. Als heterogene parametrische Architektur können Ausführungsformen eines CSA ohne Weiteres an alle Computeranwendungen angepasst werden. Zum Beispiel kann eine mobile Version eines CSA auf 32 Bits abgestimmt werden, während sich ein auf maschinelles Lernen fokussiertes Array durch erhebliche Anzahlen an vektorisierten 8-Bit Multiplikationseinheiten auszeichnen kann. Die Hauptvorteile von Ausführungsformen eines CSA sind hohe Performance und höchste Energieeffizienz - Charakteristika, die für alle Formen von Berechnungen wichtig sind, von Supercomputing und Datenzentren bis zum Internet der Dinge.
-
In einer Ausführungsform enthält ein Prozessor ein dreidimensionales Array von Verarbeitungselementen und ein paketvermittelndes Kommunikationsnetzwerk, um Daten innerhalb des dreidimensionales Arrays zwischen Verarbeitungselementen entsprechend einem Datenflussgraphen zu routen, um eine erste Datenflussoperation des Datenflussgraphen durchzuführen, wobei das paketvermittelnde Kommunikationsnetzwerk des Weiteren mehrere Netzwerk-Datenflussendpunktschaltungen umfasst, um eine zweite Datenflussoperation des Datenflussgraphen durchzuführen. Eine Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen kann einen Netzwerk-Eingangspuffer enthalten, um Eingangsdaten aus dem paketvermittelnden Kommunikationsnetzwerk zu empfangen, und einen Ausgangspuffer des dreidimensionalen Arrays, um resultierende Daten an das dreidimensionale Array von Verarbeitungselementen entsprechend der zweiten Datenflussoperation auf den Eingangsdaten auszugeben. Der Ausgangspuffer des dreidimensionalen Arrays kann die resultierenden Daten auf Basis eines Schedulers innerhalb der Netzwerk-Datenflussendpunktschaltung ausgeben, der das paketvermittelnde Kommunikationsnetzwerk überwacht. Der Ausgangspuffer des dreidimensionalen Arrays kann die resultierenden Daten auf Basis des Schedulers innerhalb der Netzwerk-Datenflussendpunktschaltung ausgeben, der einen ausgewählten Kanal von mehreren virtuellen Netzwerkkanälen des paketvermittelnden Kommunikationsnetzwerks überwacht. Eine Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen kann einen Eingangspuffer des dreidimensionalen Arrays enthalten, um Steuerdaten aus dem dreidimensionalen Array zu empfangen, was bewirkt, dass ein Netzwerk-Eingangspuffer der Netzwerk-Datenflussendpunktschaltung, die Eingangsdaten aus dem paketvermittelnden Kommunikationsnetzwerk empfangen hat, resultierende Daten an das dreidimensionale Array von Verarbeitungselementen entsprechend der zweiten Datenflussoperation auf den Eingangsdaten und den Steuerdaten ausgibt. Eine Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen kann eine Ausgabe von resultierenden Daten der zweiten Datenflussoperation aus dem Ausgangspuffer des dreidimensionalen Arrays der Netzwerk-Datenflussendpunktschaltung aussetzen, wenn ein Backpressure-Signal aus einem nachgelagerten Verarbeitungselement des dreidimensionalen Arrays von Verarbeitungselementen angibt, dass im nachgelagerten Verarbeitungselement kein Speicher für die Ausgabe der Netzwerk-Datenflussendpunktschaltung verfügbar ist. Eine Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen kann ein Backpressure-Signal senden, um auszusetzen, dass eine Quelle Eingangsdaten auf dem paketvermittelnden Kommunikationsnetzwerk in einen Netzwerk-Eingangspuffer der Netzwerk-Datenflussendpunktschaltung sendet, wenn der Netzwerk-Eingangspuffer nicht verfügbar ist. Das dreidimensionale Array von Verarbeitungselementen kann Folgendes enthalten: mehrere Verarbeitungselemente; und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen, um einen Eingang des Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Interconnect-Netzwerk, die mehreren Verarbeitungselemente und die mehreren Netzwerk-Datenflussendpunktschaltungen überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in beiden, den mehreren Verarbeitungselementen und den mehreren Netzwerk-Datenflussendpunktschaltungen, dargestellt wird, und die mehreren Verarbeitungselemente und die mehreren Netzwerk-Datenflussendpunktschaltungen dazu dienen, eine Operation durch einen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente und den mehreren Netzwerk-Datenflussendpunktschaltungen ankommt. Das dreidimensionale Array von Verarbeitungselementen kann ein leitungsvermittelndes Netzwerk enthalten, um die Daten innerhalb des dreidimensionalen Arrays zwischen Verarbeitungselementen entsprechend dem Datenflussgraphen zu transportieren.
-
In einer anderen Ausführungsform beinhaltet das Verfahren das Bereitstellen eines dreidimensionalen Arrays von Verarbeitungselementen, das Routing von Daten innerhalb des dreidimensionalen Arrays mit einem paketvermittelnden Kommunikationsnetzwerk zwischen Verarbeitungselementen entsprechend einem Datenflussgraphen, das Durchführen einer ersten Datenflussoperation des Datenflussgraphen mit den Verarbeitungselementen und das Durchführen einer zweiten Datenflussoperation des Datenflussgraphen mit mehreren Netzwerk-Datenflussendpunktschaltungen des paketvermittelnden Kommunikationsnetzwerks. Das Durchführen der zweiten Datenflussoperation kann beinhalten, Eingangsdaten aus dem paketvermittelnden Kommunikationsnetzwerk mit einem Netzwerk-Eingangspuffer einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen zu empfangen und resultierende Daten aus einem Ausgangspuffer des dreidimensionalen Arrays der Netzwerk-Datenflussendpunktschaltung zum dreidimensionalen Array von Verarbeitungselementen entsprechend der zweiten Datenflussoperation auf den Eingangsdaten auszugeben. Das Ausgeben kann beinhalten, die resultierenden Daten auf Basis eines Schedulers innerhalb der Netzwerk-Datenflussendpunktschaltung auszugeben, der das paketvermittelnde Kommunikationsnetzwerk überwacht. Das Ausgeben kann beinhalten, die resultierenden Daten auf Basis des Schedulers innerhalb der Netzwerk-Datenflussendpunktschaltung auszugeben, der einen ausgewählten Kanal von mehreren virtuellen Netzwerkkanälen des paketvermittelnden Kommunikationsnetzwerks überwacht. Das Durchführen der zweiten Datenflussoperation kann beinhalten, mit einem Eingangspuffer des dreidimensionalen Arrays einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen Steuerdaten aus dem dreidimensionalen Array zu empfangen und die Netzwerk-Datenflussendpunktschaltung so zu konfigurieren, dass sie bewirkt, dass ein Netzwerk-Eingangspuffer der Netzwerk-Datenflussendpunktschaltung, die Eingangsdaten aus dem paketvermittelnden Kommunikationsnetzwerk empfangen hat, resultierende Daten an das dreidimensionale Array von Verarbeitungselementen entsprechend der zweiten Datenflussoperation auf den Eingangsdaten und den Steuerdaten ausgibt. Das Durchführen der zweiten Datenflussoperation kann beinhalten, eine Ausgabe der zweiten Datenflussoperation aus einem Ausgangspuffer des dreidimensionalen Arrays einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen auszusetzen, wenn ein Backpressure-Signal aus einem nachgelagerten Verarbeitungselement des dreidimensionalen Arrays von Verarbeitungselementen angibt, dass im nachgelagerten Verarbeitungselement kein Speicher für die Ausgabe der Netzwerk-Datenflussendpunktschaltung verfügbar ist. Das Durchführen der zweiten Datenflussoperation kann beinhalten, ein Backpressure-Signal aus einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen zu senden, um auszusetzen, dass eine Quelle Eingangsdaten auf dem paketvermittelnden Kommunikationsnetzwerk in einen Netzwerk-Eingangspuffer der Netzwerk-Datenflussendpunktschaltung sendet, wenn der Netzwerk-Eingangspuffer nicht verfügbar ist. Das Routen, das Durchführen der ersten Datenflussoperation und das Durchführen der zweiten Datenflussoperation können Folgendes beinhalten: einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in das dreidimensionale Array von Verarbeitungselementen und die mehreren Netzwerk-Datenflussendpunktschaltungen zu überlagern, wobei jeder Knoten als ein Datenflussoperator in beiden, den Verarbeitungselementen und den mehreren Netzwerk-Datenflussendpunktschaltungen, dargestellt wird; und die erste Datenflussoperation mit den Verarbeitungselementen durchzuführen und die zweite Datenflussoperation mit den mehreren Netzwerk-Datenflussendpunktschaltungen durchzuführen, wenn ein eingehender Operandensatz an jedem der Datenflussoperatoren der Verarbeitungselemente und den mehreren Netzwerk-Datenflussendpunktschaltungen ankommt. Das Verfahren kann beinhalten, die Daten innerhalb des dreidimensionalen Arrays zwischen Verarbeitungselementen entsprechend dem Datenflussgraphen mit einem leitungsvermittelnden Netzwerk des dreidimensionalen Arrays zu transportieren.
-
In noch einer anderen Ausführungsform ein nichtflüchtiges maschinenlesbares Medium, das Code speichert, der, wenn er von einer Maschine ausgeführt wird, bewirkt, dass die Maschine ein Verfahren durchführt, das Folgendes beinhaltet: das Bereitstellen eines dreidimensionalen Arrays von Verarbeitungselementen; das Routing von Daten mit einem paketvermittelnden Kommunikationsnetzwerk innerhalb des dreidimensionalen Arrays zwischen Verarbeitungselementen entsprechend einem Datenflussgraphen; das Durchführen einer ersten Datenflussoperation des Datenflussgraphen mit den Verarbeitungselementen; und das Durchführen einer zweiten Datenflussoperation des Datenflussgraphen mit mehreren Netzwerk-Datenflussendpunktschaltungen des paketvermittelnden Kommunikationsnetzwerks. Das Durchführen der zweiten Datenflussoperation kann beinhalten, Eingangsdaten aus dem paketvermittelnden Kommunikationsnetzwerk mit einem Netzwerk-Eingangspuffer einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen zu empfangen und resultierende Daten aus einem Ausgangspuffer des dreidimensionalen Arrays der Netzwerk-Datenflussendpunktschaltung zum dreidimensionalen Array von Verarbeitungselementen entsprechend der zweiten Datenflussoperation auf den Eingangsdaten auszugeben. Das Ausgeben kann beinhalten, die resultierenden Daten auf Basis eines Schedulers innerhalb der Netzwerk-Datenflussendpunktschaltung auszugeben, der das paketvermittelnde Kommunikationsnetzwerk überwacht. Das Ausgeben kann beinhalten, die resultierenden Daten auf Basis des Schedulers innerhalb der Netzwerk-Datenflussendpunktschaltung auszugeben, der einen ausgewählten Kanal von mehreren virtuellen Netzwerkkanälen des paketvermittelnden Kommunikationsnetzwerks überwacht. Das Durchführen der zweiten Datenflussoperation kann beinhalten, mit einem Eingangspuffer des dreidimensionalen Arrays einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen Steuerdaten aus dem dreidimensionalen Array zu empfangen und die Netzwerk-Datenflussendpunktschaltung so zu konfigurieren, dass sie bewirkt, dass ein Netzwerk-Eingangspuffer der Netzwerk-Datenflussendpunktschaltung, die Eingangsdaten aus dem paketvermittelnden Kommunikationsnetzwerk empfangen hat, resultierende Daten an das dreidimensionale Array von Verarbeitungselementen entsprechend der zweiten Datenflussoperation auf den Eingangsdaten und den Steuerdaten ausgibt. Das Durchführen der zweiten Datenflussoperation kann beinhalten, eine Ausgabe der zweiten Datenflussoperation aus einem Ausgangspuffer des dreidimensionalen Arrays einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen auszusetzen, wenn ein Backpressure-Signal aus einem nachgelagerten Verarbeitungselement des dreidimensionalen Arrays von Verarbeitungselementen angibt, dass im nachgelagerten Verarbeitungselement kein Speicher für die Ausgabe der Netzwerk-Datenflussendpunktschaltung verfügbar ist. Das Durchführen der zweiten Datenflussoperation kann beinhalten, ein Backpressure-Signal aus einer Netzwerk-Datenflussendpunktschaltung der mehreren Netzwerk-Datenflussendpunktschaltungen zu senden, um auszusetzen, dass eine Quelle Eingangsdaten auf dem paketvermittelnden Kommunikationsnetzwerk in einen Netzwerk-Eingangspuffer der Netzwerk-Datenflussendpunktschaltung sendet, wenn der Netzwerk-Eingangspuffer nicht verfügbar ist. Das Routen, das Durchführen der ersten Datenflussoperation und das Durchführen der zweiten Datenflussoperation können Folgendes beinhalten: einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in das dreidimensionale Array von Verarbeitungselementen und die mehreren Netzwerk-Datenflussendpunktschaltungen zu überlagern, wobei jeder Knoten als ein Datenflussoperator in beiden, den Verarbeitungselementen und den mehreren Netzwerk-Datenflussendpunktschaltungen, dargestellt wird; und die erste Datenflussoperation mit den Verarbeitungselementen durchzuführen und die zweite Datenflussoperation mit den mehreren Netzwerk-Datenflussendpunktschaltungen durchzuführen, wenn ein eingehender Operandensatz an jedem der Datenflussoperatoren der Verarbeitungselemente und den mehreren Netzwerk-Datenflussendpunktschaltungen ankommt. Das Verfahren kann beinhalten, die Daten innerhalb des dreidimensionalen Arrays zwischen Verarbeitungselementen entsprechend dem Datenflussgraphen mit einem leitungsvermittelnden Netzwerk des dreidimensionalen Arrays zu transportieren.
-
In einer anderen Ausführungsform enthält ein Prozessor ein dreidimensionales Array von Verarbeitungselementen und ein paketvermittelndes Kommunikationsnetzwerk, um Daten innerhalb des dreidimensionales Arrays zwischen Verarbeitungselementen entsprechend einem Datenflussgraphen zu routen, um eine erste Datenflussoperation des Datenflussgraphen durchzuführen, wobei das paketvermittelnde Kommunikationsnetzwerk des Weiteren Mittel umfasst, um eine zweite Datenflussoperation des Datenflussgraphen durchzuführen.
-
In einer Ausführungsform enthält ein Prozessor Folgendes: einen Kern mit einem Decodierer, um einen Befehl in einen decodierten Befehl zu decodieren, und einer Ausführungseinheit, um den decodierten Befehl auszuführen, um eine erste Operation durchzuführen; mehrere Verarbeitungselemente; und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen, um einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Interconnect-Netzwerk und die mehreren Verarbeitungselemente überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durch einen jeweiligen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente ankommt. Ein Verarbeitungselement der mehreren Verarbeitungselemente kann die Ausführung aussetzen, wenn ein Backpressure-Signal aus einem nachgelagerten Verarbeitungselement angibt, dass kein Speicher im nachgelagerten Verarbeitungselement für eine Ausgabe des Verarbeitungselements verfügbar ist. Der Prozessor kann ein Flusssteuerwegenetzwerk enthalten, um das Backpressure-Signal entsprechend dem Datenflussgraphen zu führen. Ein Datenfluss-Token kann eine Ausgabe aus einem Datenflussoperator bewirken, der das Datenfluss-Token empfängt, das an einen Eingangspuffer eines besonderen Verarbeitungselements der mehreren Verarbeitungselemente gesendet werden soll. Die zweite Operation kann einen Speicherzugriff beinhalten, und die mehreren Verarbeitungselemente umfassen einen Speicherzugriffs-Datenflussoperator, der den Speicherzugriff nicht durchführen darf, bis er ein Speicher-Abhängigkeits-Token aus einem logisch vorhergehenden Datenflussoperator empfängt. Die mehreren Verarbeitungselemente können eine erste Art von Verarbeitungselement und eine zweite, andere Art von Verarbeitungselement enthalten.
-
In einer anderen Ausführungsform beinhaltet ein Verfahren Folgendes: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in mehrere Verarbeitungselemente des Prozessors und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird; und eine zweite Operation des Datenflussgraphen mit dem Interconnect-Netzwerk und den mehreren Verarbeitungselementen durch einen jeweiligen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente ankommt. Das Verfahren kann beinhalten, dass die Ausführung durch ein Verarbeitungselement der mehreren Verarbeitungselemente ausgesetzt wird, wenn ein Backpressure-Signal aus einem nachgelagerten Verarbeitungselement angibt, dass kein Speicher im nachgelagerten Verarbeitungselement für eine Ausgabe des Verarbeitungselements verfügbar ist. Das Verfahren kann beinhalten, das Backpressure-Signal auf einem Flusssteuerwegenetzwerk entsprechend dem Datenflussgraphen zu senden. Ein Datenfluss-Token kann eine Ausgabe aus einem Datenflussoperator bewirken, der das Datenfluss-Token empfängt, das an einen Eingangspuffer eines besonderen Verarbeitungselements der mehreren Verarbeitungselemente gesendet werden soll. Das Verfahren kann beinhalten, einen Speicherzugriff nicht durchzuführen, bis ein Speicher-Abhängigkeits-Token aus einem logisch vorhergehenden Datenflussoperator empfangen wird, wobei die zweite Operation den Speicherzugriff umfasst und die mehreren Verarbeitungselemente einen Speicherzugriffs-Datenflussoperator umfassen. Das Verfahren kann beinhalten, eine erste Art von Verarbeitungselement und eine zweite, andere Art von Verarbeitungselement der mehreren Verarbeitungselemente bereitzustellen.
-
In noch einer anderen Ausführungsform beinhaltet eine Vorrichtung Folgendes: ein Datenwegenetzwerk zwischen mehreren Verarbeitungselementen; und ein Flusssteuerwegenetzwerk zwischen den mehreren Verarbeitungselementen, wobei das Datenwegenetzwerk und das Flusssteuerwegenetzwerk dazu dienen, einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, der Datenflussgraph in das Datenwegenetzwerk, das Flusssteuerwegenetzwerk und die mehreren Verarbeitungselemente überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird, und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durch einen jeweiligen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente ankommt. Das Flusssteuerwegenetzwerk kann Backpressure-Signale zu mehreren Datenflussoperatoren entsprechend dem Datenflussgraphen führen. Ein Datenfluss-Token, das auf dem Datenwegenetzwerk zu einem Datenflussoperator gesendet wird, kann bewirken, dass ein Ausgang aus dem Datenflussoperator an einen Eingangspuffer eines besonderen Verarbeitungselements der mehreren Verarbeitungselemente auf dem Datenwegenetzwerk gesendet wird. Das Datenwegenetzwerk kann ein statisches leitungsvermittelndes Netzwerk sein, um den jeweiligen eingegebenen Operandensatz zu jedem der Datenflussoperatoren entsprechend dem Datenflussgraphen zu führen. Das Flusssteuerwegenetzwerk kann ein Backpressure-Signal entsprechend dem Datenflussgraphen aus einem nachgelagerten Verarbeitungselement übertragen, um anzugeben, dass kein Speicher im nachgelagerten Verarbeitungselement für einen Ausgang des Verarbeitungselements verfügbar ist. Wenigstens ein Datenweg des Datenwegenetzwerks und wenigstens ein Flusssteuerweg des Flusssteuerwegenetzwerks können eine kanalisierte Schaltung mit Backpressure-Steuerung bilden. Das Flusssteuerwegenetzwerk kann wenigstens zwei der mehreren Verarbeitungselemente hintereinander mittels Pipeline führen.
-
In einer anderen Ausführungsform beinhaltet ein Verfahren Folgendes: einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; und den Datenflussgraphen in mehrere Verarbeitungselemente eines Prozessors, ein Datenwegenetzwerk zwischen den mehreren Verarbeitungselementen und ein Flusssteuerwegenetzwerk zwischen den mehreren Verarbeitungselementen zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird. Das Verfahren kann beinhalten, die Backpressure-Signale mit dem Flusssteuerwegenetzwerk zu mehreren Datenflussoperatoren entsprechend dem Datenflussgraphen zu führen. Das Verfahren kann beinhalten, ein Datenfluss-Token auf dem Datenwegenetzwerk zu einem Datenflussoperator zu senden, um zu bewirken, dass ein Ausgang aus dem Datenflussoperator an einen Eingangspuffer eines besonderen Verarbeitungselements der mehreren Verarbeitungselemente auf dem Datenwegenetzwerk gesendet wird. Das Verfahren kann beinhalten, mehrere Switches des Datenwegenetzwerks und/oder mehrere Switches des Flusssteuerwegenetzwerks dazu einzustellen, den jeweiligen eingegebenen Operandensatz zu jedem der Datenflussoperatoren entsprechend dem Datenflussgraphen zu führen, wobei das Datenwegenetzwerk ein statisches leitungsvermittelndes Netzwerk ist. Das Verfahren kann beinhalten, ein Backpressure-Signal mit dem Flusssteuerwegenetzwerk entsprechend dem Datenflussgraphen aus einem nachgelagerten Verarbeitungselement zu übertragen, um anzugeben, dass kein Speicher im nachgelagerten Verarbeitungselement für einen Ausgang des Verarbeitungselements verfügbar ist. Das Verfahren kann beinhalten, eine kanalisierte Schaltung mit Backpressure-Steuerung mit wenigstens einem Datenweg des Datenwegenetzwerks und wenigstens einem Flusssteuerweg des Flusssteuerwegenetzwerks zu bilden.
-
In noch einer anderen Ausführungsform enthält ein Prozessor Folgendes: einen Kern mit einem Decodierer, um einen Befehl in einen decodierten Befehl zu decodieren, und einer Ausführungseinheit, um den decodierten Befehl auszuführen, um eine erste Operation durchzuführen; mehrere Verarbeitungselemente; und ein Netzwerkmittel zwischen den mehreren Verarbeitungselementen, um einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Netzwerkmittel und die mehreren Verarbeitungselemente überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durch einen jeweiligen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente ankommt.
-
In einer anderen Ausführungsform beinhaltet eine Vorrichtung Folgendes: ein Datenwegemittel zwischen mehreren Verarbeitungselementen; und ein Flusssteuerwegemittel zwischen den mehreren Verarbeitungselementen, wobei das Datenwegemittel und das Flusssteuerwegemittel dazu dienen, einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Datenwegemittel, das Flusssteuerwegemittel und die mehreren Verarbeitungselemente überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durch einen jeweiligen eingehenden Operandensatz durchzuführen, der an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente ankommt.
-
In einer Ausführungsform enthält ein Prozessor Folgendes: einen Kern mit einem Decodierer, um einen Befehl in einen decodierten Befehl zu decodieren, und einer Ausführungseinheit, um den decodierten Befehl auszuführen, um eine erste Operation durchzuführen; und ein Array von Verarbeitungselementen, um einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Array von Verarbeitungselementen überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in dem Array von Verarbeitungselementen dargestellt ist und das Array von Verarbeitungselementen dazu dient, eine zweite Operation durchzuführen, wenn ein eingehender Operandensatz am Array von Verarbeitungselementen ankommt. Das Array von Verarbeitungselementen führt möglicherweise die zweite Operation nicht aus, bis der eingehende Operandensatz am Array von Verarbeitungselementen ankommt und der Speicher im Array von Verarbeitungselementen für den Ausgang der zweiten Operation verfügbar ist. Das Array von Verarbeitungselementen kann ein Netzwerk (oder einen Kanal/Kanäle) enthalten, um Datenfluss-Tokens und Steuer-Tokens zu mehreren Datenflussoperatoren zu führen. Die zweite Operation kann einen Speicherzugriff beinhalten, und das Array von Verarbeitungselementen kann einen Speicherzugriffs-Datenflussoperator enthalten, der den Speicherzugriff nicht durchführen darf, bis er ein Speicher-Abhängigkeits-Token aus einem logisch vorhergehenden Datenflussoperator empfängt. Jedes Verarbeitungselement kann nur ein oder zwei Operationen des Datenflussgraphen durchführen.
-
In einer anderen Ausführungsform beinhaltet das Verfahren Folgendes: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in ein Array von Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator im Array von Verarbeitungselementen dargestellt wird; und eine zweite Operation des Datenflussgraphen mit dem Array von Verarbeitungselementen durchzuführen, wenn ein eingehender Operandensatz am Array von Verarbeitungselementen ankommt. Das Array von Verarbeitungselementen führt möglicherweise die zweite Operation nicht aus, bis der eingehende Operandensatz am Array von Verarbeitungselementen ankommt und der Speicher im Array von Verarbeitungselementen für den Ausgang der zweiten Operation verfügbar ist. Das Array von Verarbeitungselementen kann ein Netzwerk enthalten, das Datenfluss-Tokens und Steuer-Tokens zu mehreren Datenflussoperatoren führt. Die zweite Operation kann einen Speicherzugriff beinhalten, und das Array von Verarbeitungselementen umfasst einen Speicherzugriffs-Datenflussoperator, der den Speicherzugriff nicht durchführen darf, bis er ein Speicher-Abhängigkeits-Token aus einem logisch vorhergehenden Datenflussoperator empfängt. Jedes Verarbeitungselement kann nur ein oder zwei Operationen des Datenflussgraphen durchführen.
-
In noch einer anderen Ausführungsform ein nichtflüchtiges maschinenlesbares Medium, das Code speichert, der, wenn er von einer Maschine ausgeführt wird, bewirkt, dass die Maschine ein Verfahren durchführt, das Folgendes beinhaltet: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in ein Array von Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator im Array von Verarbeitungselementen dargestellt wird; und eine zweite Operation des Datenflussgraphen mit dem Array von Verarbeitungselementen durchzuführen, wenn ein eingehender Operandensatz am Array von Verarbeitungselementen ankommt. Das Array von Verarbeitungselementen führt möglicherweise die zweite Operation nicht aus, bis der eingehende Operandensatz am Array von Verarbeitungselementen ankommt und der Speicher im Array von Verarbeitungselementen für den Ausgang der zweiten Operation verfügbar ist. Das Array von Verarbeitungselementen kann ein Netzwerk enthalten, das Datenfluss-Tokens und Steuer-Tokens zu mehreren Datenflussoperatoren führt. Die zweite Operation kann einen Speicherzugriff beinhalten, und das Array von Verarbeitungselementen umfasst einen Speicherzugriffs-Datenflussoperator, der den Speicherzugriff nicht durchführen darf, bis er ein Speicher-Abhängigkeits-Token aus einem logisch vorhergehenden Datenflussoperator empfängt. Jedes Verarbeitungselement kann nur ein oder zwei Operationen des Datenflussgraphen durchführen.
-
In einer anderen Ausführungsform enthält ein Prozessor Folgendes: einen Kern mit einem Decodierer, um einen Befehl in einen decodierten Befehl zu decodieren, und einer Ausführungseinheit, um den decodierten Befehl auszuführen, um eine erste Operation durchzuführen; und ein Mittel, um einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Mittel überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in dem Mittel dargestellt ist und das Mittel dazu dient, eine zweite Operation durchzuführen, wenn ein eingehender Operandensatz am Mittel ankommt.
-
In einer Ausführungsform enthält ein Prozessor Folgendes: einen Kern mit einem Decodierer, um einen Befehl in einen decodierten Befehl zu decodieren, und einer Ausführungseinheit, um den decodierten Befehl auszuführen, um eine erste Operation durchzuführen; mehrere Verarbeitungselemente; und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen, um einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Interconnect-Netzwerk und die mehreren Verarbeitungselemente überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durchzuführen, wenn ein eingehender Operandensatz an den mehreren Verarbeitungselementen ankommt. Der Prozessor kann des Weiteren mehrere Konfigurations-Controller umfassen, wobei jeder Konfigurations-Controller mit einem jeweiligen Subset der mehreren Verarbeitungselemente gekoppelt ist und jeder Konfigurations-Controller dazu dient, Konfigurationsinformationen aus dem Speicher zu laden und Koppeln des jeweiligen Subset der mehreren Verarbeitungselemente entsprechend den Konfigurationsinformationen zu bewirken. Der Prozessor kann mehrere Konfigurations-Caches enthalten, und jeder Konfigurations-Controller ist mit einem jeweiligen Konfigurations-Cache gekoppelt, um die Konfigurationsinformationen für das jeweilige Subset der mehreren Verarbeitungselemente abzurufen. Die erste Operation, die von der Ausführungseinheit durchgeführt wird, kann Konfigurationsinformationen in jeden der mehreren Konfigurations-Caches prefetchen. Jeder der mehreren Konfigurations-Controller kann eine Rekonfigurationsschaltung enthalten, um eine Rekonfiguration für wenigstens ein Verarbeitungselement des jeweiligen Subset der mehreren Verarbeitungselemente beim Empfang einer Konfigurationsfehlernachricht aus dem wenigstens einen Verarbeitungselement zu bewirken. Jeder der mehreren Konfigurations-Controller kann eine Rekonfigurationsschaltung enthalten, um eine Rekonfiguration für das jeweilige Subset der mehreren Verarbeitungselemente beim Empfang einer Rekonfigurations-Anforderungsnachricht zu bewirken und die Kommunikation mit dem jeweiligen Subset der mehreren Verarbeitungselemente zu deaktivieren, bis die Rekonfiguration abgeschlossen ist. Der Prozessor kann mehrere Ausnahmeaggregatoren enthalten, und jeder Ausnahmeaggregator ist mit einem jeweiligen Subset der mehreren Verarbeitungselemente gekoppelt, um Ausnahmen aus dem jeweiligen Subset der mehreren Verarbeitungselemente zu erfassen und die Ausnahmen zur Behandlung an den Kern weiterzuleiten. Der Prozessor kann mehrere Extraktions-Controller umfassen, wobei jeder Extraktions-Controller mit einem jeweiligen Subset der mehreren Verarbeitungselemente gekoppelt ist und jeder Extraktions-Controller dazu dient, zu bewirken, dass Zustandsdaten aus dem jeweiligen Subset der mehreren Verarbeitungselemente im Speicher gespeichert werden.
-
In einer anderen Ausführungsform beinhaltet das Verfahren Folgendes: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in mehrere Verarbeitungselemente des Prozessors und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird; und eine zweite Operation des Datenflussgraphen mit dem Interconnect-Netzwerk und den mehreren Verarbeitungselementen durchzuführen, wenn ein eingehender Operandensatz an den mehreren Verarbeitungselementen ankommt. Das Verfahren kann beinhalten, Konfigurationsinformationen aus dem Speicher für jeweilige Subsets der mehreren Verarbeitungselemente zu laden und zu bewirken, dass jedes jeweilige Subset der mehreren Verarbeitungselemente entsprechend den Konfigurationsinformationen gekoppelt wird. Das Verfahren kann beinhalten, die Konfigurationsinformationen für das jeweilige Subset der mehreren Verarbeitungselemente aus einem jeweiligen Konfigurations-Cache von mehreren Konfigurations-Caches abzurufen. Die erste Operation, die von der Ausführungseinheit durchgeführt wird, kann das Prefetching von Konfigurationsinformationen in jeden der mehreren Konfigurations-Caches sein. Das Verfahren kann beinhalten, eine Rekonfiguration für wenigstens ein Verarbeitungselement des jeweiligen Subset der mehreren Verarbeitungselemente beim Empfang einer Konfigurationsfehlernachricht aus dem wenigstens einen Verarbeitungselement zu bewirken. Das Verfahren kann Folgendes beinhalten: eine Rekonfiguration für das jeweilige Subset der mehreren Verarbeitungselemente beim Empfang einer Rekonfigurations-Anforderungsnachricht zu bewirken; und Kommunikation mit dem jeweiligen Subset der mehreren Verarbeitungselemente zu deaktivieren, bis die Rekonfiguration abgeschlossen ist. Das Verfahren kann Folgendes beinhalten: Ausnahmen aus einem jeweiligen Subset der mehreren Verarbeitungselemente zu erfassen; und die Ausnahmen an den Kern zur Behandlung weiterzuleiten. Das Verfahren kann beinhalten, zu bewirken, dass Zustandsdaten aus einem jeweiligen Subset der mehreren Verarbeitungselemente im Speicher gespeichert werden.
-
In noch einer anderen Ausführungsform ein nichtflüchtiges maschinenlesbares Medium, das Code speichert, der, wenn er von einer Maschine ausgeführt wird, bewirkt, dass die Maschine ein Verfahren durchführt, das Folgendes beinhaltet: einen Befehl mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl zu decodieren; den decodierten Befehl mit einer Ausführungseinheit des Kerns des Prozessors auszuführen, um eine erste Operation durchzuführen; einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst; den Datenflussgraphen in mehrere Verarbeitungselemente des Prozessors und ein Interconnect-Netzwerk zwischen den mehreren Verarbeitungselementen des Prozessors zu überlagern, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt wird; und eine zweite Operation des Datenflussgraphen mit dem Interconnect-Netzwerk und den mehreren Verarbeitungselementen durchzuführen, wenn ein eingehender Operandensatz an den mehreren Verarbeitungselementen ankommt. Das Verfahren kann beinhalten, Konfigurationsinformationen aus dem Speicher für jeweilige Subsets der mehreren Verarbeitungselemente zu laden und zu bewirken, dass jedes jeweilige Subset der mehreren Verarbeitungselemente entsprechend den Konfigurationsinformationen gekoppelt wird. Das Verfahren kann beinhalten, die Konfigurationsinformationen für das jeweilige Subset der mehreren Verarbeitungselemente aus einem jeweiligen Konfigurations-Cache von mehreren Konfigurations-Caches abzurufen. Die erste Operation, die von der Ausführungseinheit durchgeführt wird, kann das Prefetching von Konfigurationsinformationen in jeden der mehreren Konfigurations-Caches sein. Das Verfahren kann beinhalten, eine Rekonfiguration für wenigstens ein Verarbeitungselement des jeweiligen Subset der mehreren Verarbeitungselemente beim Empfang einer Konfigurationsfehlernachricht aus dem wenigstens einen Verarbeitungselement zu bewirken. Das Verfahren kann beinhalten, eine Rekonfiguration für das jeweilige Subset der mehreren Verarbeitungselemente beim Empfang einer Rekonfigurations-Anforderungsnachricht zu bewirken und die Kommunikation mit dem jeweiligen Subset der mehreren Verarbeitungselemente zu deaktivieren, bis die Rekonfiguration abgeschlossen ist. Das Verfahren kann Folgendes beinhalten: Ausnahmen aus einem jeweiligen Subset der mehreren Verarbeitungselemente zu erfassen; und die Ausnahmen an den Kern zur Behandlung weiterzuleiten. Das Verfahren kann beinhalten, zu bewirken, dass Zustandsdaten aus einem jeweiligen Subset der mehreren Verarbeitungselemente im Speicher gespeichert werden.
-
In einer anderen Ausführungsform enthält ein Prozessor Folgendes: einen Kern mit einem Decodierer, um einen Befehl in einen decodierten Befehl zu decodieren, und einer Ausführungseinheit, um den decodierten Befehl auszuführen, um eine erste Operation durchzuführen; mehrere Verarbeitungselemente; und Mittel zwischen den mehreren Verarbeitungselementen, um einen Eingang eines Datenflussgraphen zu empfangen, der mehrere Knoten umfasst, wobei der Datenflussgraph in das Mittel und die mehreren Verarbeitungselemente überlagert werden soll, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durchzuführen, wenn ein eingehender Operandensatz an den mehreren Verarbeitungselementen ankommt.
-
In noch einer anderen Ausführungsform umfasst eine Vorrichtung eine Datenspeichereinrichtung, die Code speichert, der, wenn er von einem Hardware-Prozessor ausgeführt wird, bewirkt, dass der Hardware-Prozessor irgendein hier offenbartes Verfahren durchführt. Eine Vorrichtung kann so sein, wie sie in der ausführlichen Beschreibung beschrieben wird. Ein Verfahren kann so sein, wie es in der ausführlichen Beschreibung beschrieben wird.
-
In einer anderen Ausführungsform ein nichtflüchtiges maschinenlesbares Medium, das Code speichert, der, wenn er von einer Maschine ausgeführt wird, bewirkt, dass die Maschine ein Verfahren durchführt, das jedes hier offenbarte Verfahren umfasst.
-
Ein Befehlssatz (z. B. zur Ausführung durch einen Kern) kann eines oder mehrere Befehlsformate enthalten. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. Bitanzahl, Bitposition) definieren, um unter anderem die durchzuführende Operation (z. B. Opcode) und den/die Operanden, auf dem bzw. denen diese Operation durchgeführt werden soll, und/oder ein anderes oder andere Datenfeld(er) (z. B. Maske) zu spezifizieren. Einige Befehlsformate werden des Weiteren durch die Definition der Befehls-Templates (oder Subformate) heruntergebrochen. Zum Beispiel können die Befehls-Templates eines gegebenen Befehlsformats so definiert werden, dass sie unterschiedliche Subsets der Felder des Befehlsformats aufweisen (die enthaltenen Felder befinden sich typischerweise in der gleichen Reihenfolge, jedoch weisen wenigstens einige andere Bitpositionen auf, weil weniger Felder enthalten sind), und/oder so definiert werden, dass ein gegebenes Feld anderes interpretiert wird. Somit wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats ausgedrückt (und, falls definiert, in einem gegebenen der Befehls-Templates dieses Befehlsformats) und enthält Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld, um diesen Opcode zu spezifizieren, und Operandenfelder zum Auswählen von Operanden (source1/destination und source2) enthält; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezifische Inhalte in den Operandenfelder aufweisen, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als die Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden und die das Vector Extensions (VEX) Codierschema verwenden, ist veröffentlicht und/oder herausgegeben worden (siehe z. B. Intel® 64 and IA-32 Architectures Software Developer's Manual, Juni 2016, und siehe Intel® Architecture Instruction Set Extensions Programming Reference, Februar 2016).
-
Beispielhafte Befehlsformate
-
Ausführungsformen des/der hier beschriebenen Befehl(e) können in unterschiedlichen Formaten ausgeführt werden. Zusätzlich werden nachstehend beispielhafte Systeme, Architekturen und Pipelines ausführlich beschrieben. Ausführungsformen des/der Befehl(e) können in solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf diese Details beschränkt.
-
Generisches vektorgerechtes Befehlsformat
-
Ein vektorgerechtes Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte, für Vektoroperationen spezifische Felder). Obwohl Ausführungsformen beschrieben werden, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorgerechte Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen des vektorgerechten Befehlsformats.
-
Die 54A - 54B sind Blockdiagramme, die ein generisches, vektorgerechtes Befehlsformat und dessen Befehls-Templates gemäß Ausführungsformen der Offenbarung veranschaulichen. Die 54A ist ein Blockschaltbild, das ein generisches vektorgerechtes Befehlsformat und dessen Befehls-Templates der Klasse A gemäß Ausführungsformen der Offenbarung veranschaulicht; während die Figure 54B ein Blockschaltbild ist, das das generische vektorgerechte Befehlsformat und dessen Befehls-Templates der Klasse B gemäß Ausführungsformen der Offenbarung veranschaulicht. Insbesondere ein generisches vektorgerechtes Befehlsformat 5400, für das Befehls-Templates der Klasse A und der Klasse B definiert sind, die beide keine Befehls-Templates für Kein-Speicherzugriff 5405 und Befehls-Templates für Speicherzugriff 5420 enthalten. Der Begriff generisch im Kontext des vektorgerechten Befehlsformats bezieht sich darauf, dass das Befehlsformat nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
-
Obwohl Ausführungsformen der Offenbarung beschrieben werden, in denen das vektorgerechte Befehlsformat das Folgende unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -große) mit Datenelementebreiten (oder -großen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder alternativ aus 8 Elementen in Quadwortgröße), eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementebreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte), eine 3 2-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementebreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte) und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementebreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte), können alternative Ausführungsformen mehr, weniger und/oder andere Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Datenelementebreiten (z. B. 128-Bit- (16-Byte -) Datenelementebreiten) unterstützen.
-
Die Befehls-Templates der Klasse A in der 54A enthalten Folgendes: 1) innerhalb der Kein-Speicherzugriff- 5405 Befehls-Templates wird ein Kein-Speicherzugriff-, Vollständig-Runden-Steuerungstyp-Operations- 5410 Befehls-Template und ein Kein-Speicherzugriff-, Datentransformations-Operations- 5415 Befehls-Template gezeigt, und 2) innerhalb der Speicherzugriff- 5420 Befehls-Templates wird ein temporäres Speicherzugriff-5425 Befehls-Template und ein nicht temporäres Speicherzugriff- 5430 Befehls-Template gezeigt. Die Befehls-Templates der Klasse B in der 54B enthalten Folgendes: 1) innerhalb der Kein-Speicherzugriff- 5405 Befehls-Templates wird ein Kein-Speicherzugriff-, Schreibmasken-Steuerungs-, Partielles-Runden-Steuerungstyp-Operations- 5412 Befehls-Template und ein Kein-Speicherzugriff-, Schreibmasken-Steuerungs-, VSIZE-Typ-Operations-5417 Befehls-Template gezeigt, und 2) innerhalb der Speicherzugriff- 5420 Befehls-Templates wird ein Speicherzugriff-, Schreibmasken-Steuerungs- 5427 Befehls-Template gezeigt.
-
Das generische vektorgerechte Befehlsformat 5400 enthält die folgenden Felder, die nachstehend in der in den 54A - 54B veranschaulichten Reihenfolge aufgelistet sind.
-
Formatfeld 5440 - ein spezifischer Wert (ein Befehlsformat-Identifiziererwert) in diesem Feld identifiziert eindeutig das vektorgerechte Befehlsformat und somit Vorkommen von Befehlen im vektorgerechten Befehlsformat in Befehlsströmen. Von daher ist dieses Feld in dem Sinne optional, dass es nicht für einen Befehlssatz erforderlich ist, der nur das generische vektorgerechte Befehlsformat aufweist.
-
Basisoperationsfeld 5442 - sein Inhalt unterscheidet unterschiedliche Basisoperationen.
-
Registerindexfeld 5444 - sein Inhalt spezifiziert, direkt oder durch Adressgenerierung, die Positionen der Quell- und Zieloperanden, sei es in Registern oder in Speicher. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer PxQ-Registerdatei (z. B. 32x512, 16x128, 32x1024, 64x1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quell- und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quell- und Zielregister unterstützen (sie können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, sie können bis zu zwei Quellen und ein Ziel unterstützen).
-
Modifiziererfeld 5446 - sein Inhalt unterscheidet die Vorkommen von Befehlen im generischen Vektorbefehlsformat, die Speicherzugriff spezifizieren, von denen, die dies nicht tun, das heißt zwischen Kein-Speicherzugriff- 5405 Befehls-Templates und Speicherzugriff-5420 Befehls-Templates. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (wobei sie in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern spezifizieren), während Kein-Speicherzugriff-Operationen dies nicht tun (z. B. sind die Quelle und die Ziele Register). Obwohl dieses Feld in einer Ausführungsform auch zwischen drei unterschiedlichen Arten wählt, Speicheradressberechnungen durchzuführen, können alternative Ausführungsformen mehr, weniger oder andere Arten zum Durchführen von Speicheradressberechnungen unterstützen.
-
Erweiterungsoperationsfeld 5450 - sein Inhalt unterscheidet, welche aus einer Vielzahl unterschiedlicher Operationen zusätzlich zur Basisoperation durchgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Offenbarung ist dieses Feld in ein Klassenfeld 5468, ein Alpha-Feld 5452 und ein Beta-Feld 5454 unterteilt. Das Erweiterungsoperationsfeld 5450 ermöglicht, dass übliche Gruppen von Operationen in einem einzigen Befehl statt in 2, 3 oder 4 Befehlen durchgeführt werden.
-
Skalierfeld 5460 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfeldes zur Speicheradressgenerierung (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis verwendet).
-
Verlagerungsfeld 5462A - sein Inhalt wird als Teil der Speicheradressgenerierung verwendet (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + Verlagerung verwendet).
-
Verlagerungsfaktorfeld 5462B (es ist anzumerken, dass die Nebeneinanderstellung des Verlagerungsfelds 5462A direkt über dem Verlagerungsfaktorfeld 5462B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressgenerierung verwendet; es spezifiziert einen Verlagerungsfaktor, der um die der Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Bytes im Speicherzugriff ist (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + skalierte Verlagerung verwendet). Redundante Bits niederer Ordnung werden ignoriert, und somit wird der Inhalt des Verlagerungsfaktorfelds mit der Gesamtgröße (N) der Speicheroperanden multipliziert, um die endgültige Verlagerung zu generieren, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N wird durch die Prozessor-Hardware zur Laufzeit auf Basis des vollständigen Opcode-Feldes 5474 (hier später beschrieben) und des Datenmanipulationsfelds 5454C bestimmt. Das Verlagerungsfeld 5462A und das Verlagerungsfaktorfeld 5462B sind in dem Sinne optional, dass sie für die Kein-Speicherzugriff-5405 Befehls-Templates nicht verwendet werden und/oder dass andere Ausführungsformen nur eines oder keines der beiden implementieren.
-
Datenelementebreitenfeld 5464 - sein Inhalt unterscheidet, welche von einer Reihe von Datenelementebreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle, in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht benötigt wird, falls nur eine Datenelementebreite unterstützt wird und/oder falls Datenelementebreiten unter Verwendung einiger Aspekte der Opcodes unterstützt werden.
-
Schreibmaskenfeld 5470 - sein Inhalt steuert auf Basis einer jeweiligen Datenelelementeposition, ob diese Datenelementeposition im Zielvektoroperanden das Ergebnis der Basisoperation und der Erweiterungsoperation widerspiegelt. Befehls-Templates der Klasse A unterstützen Merging-Schreibmaskieren, während Befehls-Templates der Klasse B sowohl Merging- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Merging ermöglichen Vektormasken, dass irgendein Satz von Elementen im Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erweiterungsoperation spezifiziert wird) vor Aktualisierungen geschützt ist; in einer anderen Ausführungsform, dass der alte Wert jedes Elements des Ziels beibehalten wird, wo das entsprechende Maskenbit eine 0 aufweist. Im Gegensatz dazu ermöglichen Vektormasken beim Nullsetzen, dass irgendein Satz von Elementen im Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erweiterungsoperation spezifiziert wird) nullgesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen Wert von 0 aufweist. Ein Subset dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die durchgeführt wird, zu steuern (das heißt, die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); allerdings ist es nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Somit sorgt das Schreibmaskenfeld 5470 partielle Vektoroperationen, einschließlich Lade-, Speicher-, Arithmetik- und Logik-Operationen usw. Obwohl Ausführungsformen der Offenbarung beschrieben werden, bei denen der Inhalt des Schreibmaskenfelds 5470 eines aus einer Reihe von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und somit identifiziert der Inhalt des Schreibmaskenfelds 5470 indirekt, dass Maskieren durchgeführt werden soll), können alternative Ausführungsformen stattdessen oder zusätzlich ermöglichen, dass der Inhalt des Schreibmaskenfelds 5470 direkt die durchzuführende Maskierung spezifiziert.
-
Immediate-Feld 5472 - sein Inhalt ermöglicht die Spezifikation eines Immediate. Dieses Feld ist in dem Sinne optional, dass es bei einer Implementierung des generischen vektorgerechten Formats nicht vorhanden ist, die Immediate nicht unterstützt, und dass es bei Befehlen nicht vorhanden ist, die kein Immediate verwenden.
-
Klassenfeld 5468 - sein Inhalt unterscheidet zwischen unterschiedlichen Befehlsklassen. Mit Bezug auf die 54A - B: Die Inhalte dieses Feldes wählen zwischen Befehlen der Klasse A und der Klasse B. In den 54A - B werden Vierecke mit abgerundeten Ecken verwendet, um anzugeben, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 5468A bzw. Klasse B 5468B für das Klassenfeld 5468 in den 54A - B).
-
Befehls-Templates der Klasse A
-
Im Fall der Kein-Speicherzugriff- 5405 Befehls-Templates der Klasse A wird das Alpha-Feld 5452 als ein RS-Feld 5452A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Erweiterungsoperationstypen durchgeführt werden soll (z. B. Runden 5452A.1 und Datentransformieren 5452A.2 werden jeweils für die Kein-Speicherzugriff-, Rundentyp-Operations- 5410 und die Kein-Speicherzugriff-, Datentransformationstyp-Operations- 5415 Befehls-Templates spezifiziert), während das Beta-Feld 5454 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Kein-Speicherzugriff-5405 Befehls-Templates sind das Skalierfeld 5460, das Verlagerungsfeld 5462A und das Verlagerungsskalierfeld 5462B nicht vorhanden.
-
Kein-Speicherzugriff-Befehls-Templates - Vollständig-Runden-Steuerungstyp-Operation
-
Beim Kein-Speicherzugriff-, Vollständig-Runden-Steuerungstyp-Operations-5410 Befehls-Template wird das Beta-Feld 5454 als ein Runden-Steuerfeld 5454A interpretiert, dessen Inhalt(e) statisches Runden bereitstellen. Obwohl in den beschriebenen Ausführungsformen der Offenbarung das Runden-Steuerfeld 5454A ein Feld 5456 zum Unterdrücken aller Fließkomma-Ausnahmen (SAE, Suppress All floating point Exceptions) und ein Rundenoperationssteuerfeld 5458 enthält, können alternative Ausführungsformen beide dieser Konzepte in das gleiche Feld codieren oder nur das das eine oder das andere dieser Konzepte/Felder aufweisen (sie können z. B. nur das Rundenoperationssteuerfeld 5458 aufweisen).
-
SAE-Feld 5456 - sein Inhalt unterscheidet, ob das Ausnahmeereignis-Melden deaktiviert wird oder nicht; wenn der Inhalt des SAE-Feldes 5456 angibt, dass das Unterdrücken aktiviert ist, meldet ein gegebener Befehl keinerlei Art von Fließkomma-Ausnahme-Flag und ruft keinen Fließkomma-Ausnahme-Handler auf.
-
Rundenoperationssteuerfeld 5458 - sein Inhalt unterscheidet, welche einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Das Rundenoperationssteuerfeld 5458 sorgt somit für das Ändern des Rundungsmodus auf einer befehlsweisen Basis. In einer Ausführungsform der Offenbarung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi umfasst, überschreibt der Inhalt des Rundenoperationssteuerfelds 5450 diesen Registerwert.
-
Kein-Speicherzugriff-Befehls-Templates - Datentransformationstyp-Operation
-
Beim Kein-Speicherzugriff-, Datentransformationstyp-Operations- 5415 Befehls-Template wird das Beta-Feld 5454 als ein Datentransformationsfeld 5454B interpretiert, dessen Inhalt unterscheidet, welche einer Reihe von Datentransformationen durchgeführt werden soll (z. B. kein Datentransformieren, Swizzle, Broadcast).
-
Im Fall eines Speicherzugriff- 5420 Befehls-Templates der Klasse A wird das Alpha-Feld 5452 als ein Räumungshinweisfeld 5452B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in der 54A werden temporäre 5452B.1 bzw. nicht temporäre 5452B.2 für das temporäre Speicherzugriff- 5425 Befehls-Template und das nicht temporäre Speicherzugriff- 5430 Befehls-Template spezifiziert), während das Beta-Feld 5454 als ein Datenmanipulationsfeld 5454C interpretiert wird, dessen Inhalt unterscheidet, welche einer Reihe von Datenmanipulationsoperationen (auch als Primitive bekannt) durchgeführt werden soll (z. B. keine Manipulation, Broadcast, Aufwärtskonvertierung einer Quelle und Abwärtskonvertierung eines Ziels). Die Speicherzugriff- 5420 Befehls-Templates enthalten das Skalierfeld 5460 und optional das Verlagerungsfeld 5462A oder das Verlagerungsskalierfeld 5462B.
-
Vektor-Speicherbefehle führen Vektor-Ladevorgänge aus dem und Vektor-Speichervorgänge in den Speicher mit Konvertierungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektor-Speicherbefehle Daten aus dem / in den Speicher in einer datenelementweisen Art, wobei die Elemente, die tatsächlich übertragen werden, von den Inhalten der Vektormaske vorgeschrieben werden, die als die Schreibmaske ausgewählt ist.
-
Speicherzugriff-Befehls-Templates - temporär
-
Temporäre Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um vom Caching zu profitieren. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können es auf unterschiedliche Weisen implementieren, einschließlich, den Hinweis komplett zu ignorieren.
-
Speicherzugriff-Befehls-Templates - nicht temporär
-
Nicht temporäre Daten sind Daten, die wahrscheinlich nicht bald genug wiederverwendet werden, um vom Caching im Cache des 1. Levels zu profitieren, und sollten bei Räumung Priorität erhalten. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können es auf unterschiedliche Weisen implementieren, einschließlich, den Hinweis komplett zu ignorieren.
-
Befehls-Templates der Klasse B
-
Im Fall der Befehls-Templates der Klasse B wird das Alpha-Feld 5452 als ein Schreibmaskensteuer- (Z -) Feld 5452C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 5470 gesteuerte Schreibmaskierung ein Merging oder ein Nullsetzen sein soll.
-
Im Fall der Kein-Speicherzugriff- 5405 Befehls-Templates der Klasse B wird ein Teil des Beta-Felds 5454 als ein RL-Feld 5457A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Erweiterungsoperationstypen durchgeführt werden soll (z. B. werden Runden 5457A.1 und Vektorlänge (VSIZE) 5457A.2 jeweils für das Kein-Speicherzugriff-, Schreibmasken-Steuerungs-, Partielles-Runden-Steuerungstyp-Operations-5412 Befehls-Template und das Kein-Speicherzugriff-, Schreibmasken-Steuerungs- VSIZE-Typ-Operations- 5417 Befehls-Template spezifiziert), während der Rest des Beta-Feldes 5454 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Kein-Speicherzugriff- 5405 Befehls-Templates sind das Skalierfeld 5460, das Verlagerungsfeld 5462A und das Verlagerungsskalierfeld 5462B nicht vorhanden.
-
Im Kein-Speicherzugriff-, Schreibmasken-Steuerungs-, Partielles-Runden-Steuerungstyp-Operations- 5410 Befehls-Template wird der Rest des Beta-Felds 5454 als ein Runden-Operationsfeld 5459A interpretiert und das Ausnahmeereignis-Melden ist deaktiviert (ein gegebener Befehl meldet keinerlei Art von Fließkomma-Ausnahme-Flag und ruft keinen Fließkomma-Ausnahme-Handler auf).
-
Rundenoperationssteuerfeld 5459A - genau wie das Rundenoperationssteuerfeld 5458 unterscheidet sein Inhalt, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Das Rundenoperationssteuerfeld 5459A sorgt somit für das Ändern des Rundungsmodus auf einer befehlsweisen Basis. In einer Ausführungsform der Offenbarung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi umfasst, überschreibt der Inhalt des Rundenoperationssteuerfelds 5450 diesen Registerwert.
-
Beim Kein-Speicherzugriff-, Schreibmaskensteuerungs-, VSIZE-Typ-Operations-5417 Befehls-Template wird der Rest des Beta-Felds 5454 als ein Vektorlängenfeld 5459B interpretiert, dessen Inhalt unterscheidet, auf welcher aus einer Reihe von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
-
Im Fall eines Speicherzugriff- 5420 Befehls-Templates der Klasse B wird ein Teil des Beta-Felds 5454 als ein Broadcast-Feld 5457B interpretiert, dessen Inhalt unterscheidet, ob die Datenmanipulations-Operation vom Broadcast-Typ durchgeführt werden soll oder nicht, während der Rest des Beta-Felds 5454 als das Vektorlängenfeld 5459B interpretiert wird. Die Speicherzugriff- 5420 Befehls-Templates enthalten das Skalierfeld 5460 und optional das Verlagerungsfeld 5462A oder das Verlagerungsskalierfeld 5462B.
-
Mit Bezug auf das generische vektorgerechte Befehlsformat 5400 wird ein vollständiges Opcode-Feld 5474 gezeigt, das das Formatfeld 5440, das Basisoperationsfeld 5442 und das Datenelementebreitenfeld 5464 enthält. Obwohl eine Ausführungsform gezeigt wird, bei der das vollständige Opcode-Feld 5474 alle diese Felder enthält, enthält das vollständige Opcode-Feld 5474 bei Ausführungsformen, die nicht alle diese unterstützen, weniger als alle diese Felder. Das vollständige Opcode-Feld 5474 stellt den Operationscode (Opcode) bereit.
-
Das Erweiterungsoperationsfeld 5450, das Datenelementebreitenfeld 5464 und das Schreibmaskenfeld 5470 ermöglichen, dass diese Merkmale auf einer befehlsweisen Basis im generischen vektorgerechten Befehlsformat spezifiziert werden.
-
Die Kombination von Schreibmaskenfeld und Datenelementebreitenfeld erzeugt insofern typisierte Befehle, als dass sie ermöglicht, dass die Maske auf der Basis unterschiedlicher Datenelementebreiten angewendet wird.
-
Die verschiedenen Befehls-Templates, die in Klasse A und Klasse B zu finden sind, sind in unterschiedlichen Situationen vorteilhaft. In einigen Ausführungsformen der Offenbarung können unterschiedliche Prozessoren oder unterschiedliche Kerne innerhalb eines Prozessors nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Hochleistungs-Universal-Out-of-Order-Kern, der für Universalberechnung vorgesehen ist, nur Klasse B unterstützen, ein Kern, der vor allem für grafische und/oder wissenschaftliche (Durchsatz -) Berechnung vorgesehen ist, kann nur Klasse A unterstützen, und ein Kern, der für beides vorgesehen ist, kann beide unterstützen (natürlich liegt ein Kern, der eine Mischung aus Templates und Befehlen aus beiden Klassen aufweist, jedoch nicht alle Templates und Befehle aus beiden Klassen, im Geltungsbereich der Offenbarung). Auch kann ein einzelner Prozessor mehrere Kerne enthalten, die alle die gleiche Klasse unterstützen oder bei dem unterschiedliche Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Universalkernen einer der Grafikkerne, der vor allem für grafische und/oder wissenschaftliche Berechnung gedacht ist, nur Klasse A unterstützen, während einer oder mehrere der Universalkerne Hochleistungs-Universalkerne mit Out-of-Order-Ausführung und -Registerumbenennung sein können, die für Universalberechnung gedacht sind, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere Universal-In-Order- oder -Out-of-Order-Kerne enthalten, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können in unterschiedlichen Ausführungsformen der Offenbarung Merkmale aus einer Klasse auch in der anderen Klasse implementiert werden. In einer Hochsprache geschriebene Programme werden in eine Vielzahl unterschiedlicher ausführbarer Formen gebracht (z. B. Just-in-Time-kompiliert oder statisch kompiliert), einschließlich: 1) eine Form, die nur Befehle der Klasse(n) aufweist, die vom Zielprozessor zur Ausführung unterstützt werden; oder 2) eine Form, die alternative Routinen aufweist, die unter Verwendung unterschiedlicher Kombinationen der Befehle aller Klassen geschrieben worden sind und die einen Steuerflusscode aufweisen, der die auszuführenden Routinen auf Basis der Befehle auswählt, die vom Prozessor unterstützt werden, der gerade den Code ausführt.
-
Beispielhaftes spezifisches vektorgerechtes Befehlsformat
-
Die 55 ist ein Blockschaltbild, das ein beispielhaftes spezifisches vektorgerechtes Befehlsformat gemäß Ausführungsformen der Offenbarung veranschaulicht. Die 55 zeigt ein spezifisches vektorgerechtes Befehlsformat 5500, das in dem Sinne spezifisch ist, dass es die Position, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder spezifiziert. Das spezifische, vektorgerechte Befehlsformat 5500 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und somit ähneln oder gleichen einige der Felder denen, die im vorhandenen x86-Befehlssatz und seiner Erweiterung verwendet werden (z. B. AVX). Dieses Format bleibt konsistent mit dem Präfixcodierfeld, dem realen Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verlagerungsfeld und den Immediate-Feldern des vorhandenen x86-Befehlssatzes mit Erweiterungen. Die Felder aus der 54, auf die die Felder aus 55 abgebildet werden, werden veranschaulicht.
-
Obwohl Ausführungsformen der Offenbarung zur Veranschaulichung in Bezug auf das spezifische vektorgerechte Befehlsformat 5500 im Kontext des generischen vektorgerechten Befehlsformats 5400 beschrieben werden, versteht es sich, dass die Offenbarung nicht auf das spezifische vektorgerechte Befehlsformat 5500 beschränkt ist, außer wo es beansprucht wird. Zum Beispiel werden beim generischen, vektorgerechten Befehlsformat 5400 eine Vielzahl möglicher Größen für die verschiedenen Felder in Betracht gezogen, während das spezifische vektorgerechte Befehlsformat 5500 mit Feldern spezifischer Größen gezeigt wird. Als spezifisches Beispiel: Obwohl das Datenelementebreitenfeld 5464 als ein Ein-Bit-Feld im spezifischen vektorgerechten Befehlsformat 5500 veranschaulicht wird, ist die Offenbarung nicht darauf beschränkt (das heißt: Beim generischen vektorgerechten Befehlsformat 5400 werden andere Größen des Datenelementebreitenfeldes 5464 in Betracht gezogen).
-
Das generische vektorgerechte Befehlsformat 5400 enthält die folgenden Felder, die nachstehend in der in den 55A veranschaulichten Reihenfolge aufgelistet sind.
-
EVEX-Präfix (Bytes 0 - 3) 5502 - wird in einer Vier-Byte-Form codiert.
-
Formatfeld 5440 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 5440, und es enthält 0x62 (der eindeutige Wert, der in einer Ausführungsform der Offenbarung zum Unterscheiden des vektorgerechten Befehlsformats verwendet wird).
-
Die zweiten bis vierten Bytes (EVEX-Bytes 1 - 3) enthalten eine Reihe von Bitfeldern, die eine spezifische Fähigkeit bereitstellen.
-
REX-Feld 1405 (EVEX-Byte 1, Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), einem EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] - X) und einem 5457BEX-Byte 1, Bit [5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit und sind unter Verwendung der Einerkomplementform codiert, d. h. ZMMO ist als 2911B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie im Fachgebiet bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
-
REX'-Feld 5410 - ist der erste Teil des REX'-Feldes 5410 und ist das EVEX.R'-Bit-Feld (EVEX-Byte 1, Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. In einer Ausführungsform der Offenbarung wird dieses Bit, zusammen mit anderen, wie nachstehend angegeben wird, in bitinvertiertem Format gespeichert, um es (in dem allgemein bekannten x86 32-Bit-Modus) vom BOUND-Befehl zu unterscheiden, dessen reales Opcode-Byte 62 ist, der jedoch im MOD R/M-Feld (nachstehend beschrieben) den Wert von 11 im MOD-Feld nicht akzeptiert; alternative Ausführungsformen der Offenbarung speichern dieses und die anderen, nachstehend angegebenen Bits nicht im invertierten Format. Ein Wert von 1 wird zum Codieren der unteren 16 Register verwendet. Mit anderen Worten: R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R und das andere RRR aus anderen Feldern gebildet.
-
Opcode-Map-Feld 5515 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein implizites, führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
-
Datenelementebreitenfeld 5464 (EVEX-Byte 2, Bit [7] - W) - wird durch die Bezeichnung EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
-
EVEX.vvvv 5520 (EVEX-Byte 2, Bits [6:3] - vvvv) - die Rolle von EVEX.vvvv kann Folgendes beinhalten: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter (Einerkomplement -) Form spezifiziert ist, und ist für Befehle mit 2 oder mehr Quelloperanden gültig; 2) EVEX.vvvv codiert den Zielregisteroperanden, der für bestimmte Vektorverschiebungen in Einerkomplement-Form spezifiziert ist; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 2911b enthalten. Somit codiert das EVEX.vvvv-Feld 5520 die 4 Bits niederer Ordnung des ersten Quellregisterspezifikationselements, die in invertierter (Einerkomplement -) Form gespeichert sind. Je nach Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Größe des Spezifikationselements auf 32 Register zu erweitern.
-
EVEX.U 5468 Klassenfeld (EVEX-Byte 2, Bit [2] - U) - falls EVEX.U = 0, gibt es Klasse A oder EVEX.U0 an; falls EVEX.U = 1, gibt es Klasse B oder EVEX.U1 an.
-
Präfixcodierfeld 5525 (EVEX-Byte 2, Bits [1:0] - pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich dazu, dass Unterstützung für die Legacy-SSE-Befehle im EVEX-Präfixformat bereitgestellt wird, hat dies auch den Vorteil, das SIMD-Präfix kompakter zu machen (statt ein Byte zum Ausdrücken des SIMD-Präfixes erfordert das EVEX-Präfix lediglich 2 Bits). Um Legacy-SSE-Befehle, die ein SIMD-Präfix (66H, F2H, F3H) verwenden, sowohl im Legacy-Format als auch im EVEX-Präfixformat zu unterstützen, werden diese Legacy-SIMD-Präfixe in einer Ausführungsform in das SIMD-Präfixcodierfeld codiert; und sie werden bei Laufzeit in das Legacy-SIMD-Präfix erweitert, bevor sie dem PLA des Decoders bereitgestellt werden (somit kann das PLA sowohl das Legacy- als auch das EVEX-Format dieser Legacy-Befehle ohne Modifikation ausführen). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierfeldes direkt als eine Opcode-Erweiterung verwenden könnten, nehmen bestimmte Ausführungsformen aus Konsistenzgründen eine ähnliche Erweiterung vor, ermöglichen jedoch, dass andere Bedeutungen durch diese Legacy-SIMD-Präfixe spezifiziert werden. Eine alternative Ausführungsform kann das PLA neu konzipieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen und somit keine Erweiterung erforderlich zu machen.
-
Alpha-Feld 5452 (EVEX-Byte 3, Bit [7] - EH, auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt, auch mit α veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
-
Beta-Feld 5454 (EVEX-Byte 3, Bits [6:4]-SSS, auch als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL00, EVEX.LLB bekannt, auch mit βββ veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
-
REX'-Feld 5410 - dies ist der Rest des REX'-Feldes und das EVEX.V'-Bitfelds (EVEX-Byte 3, Bit [3] - R'), der verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Dieses Bit wird im bitinvertierten Format gespeichert. Ein Wert von 1 wird zum Codieren der unteren 16 Register verwendet. Mit anderen Worten: V'VVVV wird durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
-
Schreibmaskenfeld 5470 (EVEX-Byte 3, Bits [2:0] - kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie vorher beschrieben worden ist. In einer Ausfiihrungsform der Offenbarung weist der spezifische Wert EVEX.kkk = 000 ein spezielles Verhalten auf, das impliziert, dass keine Schreibmaske für den jeweiligen Befehl verwendet wird (dies kann auf vielfältige Weise implementiert werden, einschließlich der Verwendung einer Schreibmaske, die mit allen Einsen festverdrahtet ist, oder von Hardware, die die Maskierungs-Hardware umgeht).
-
Reales Opcode-Feld 5530 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld spezifiziert.
-
MOD R/M-Feld 5540 (Byte 5) enthält das MOD-Feld 5542, das Reg-Feld 5544 und das R/M-Feld 5546. Wie vorher beschrieben worden ist, unterscheidet der Inhalt des MOD-Feldes 5542 zwischen Speicherzugriff- und Kein-Speicherzugriff-Operationen. Die Rolle des Reg-Feldes 5544 kann auf zwei Situationen zusammengefasst werden: codiert entweder den Zielregisteroperanden oder einen Quellregisteroperanden, oder es wird als eine Opcode-Erweiterung behandelt und nicht zum Codieren irgendeines Befehlsoperanden verwendet. Die Rolle des R/M-Feld 5546 kann Folgendes beinhalten: codiert des Befehlsoperanden, der auf eine Speicheradresse referenziert, oder codiert entweder den Zielregisteroperanden oder einen Quellregisteroperanden.
-
Scale, Index, Base (SIB)-Byte (Byte 6) - wie vorher beschrieben worden ist, wird der Inhalt des Skalierfeldes 5450 zur Speicheradressgenerierung verwendet. SIB.xxx 5554 und SIB.bbb 5556 - auf die Inhalte dieser Felder ist vorher in Bezug auf die Registerindizes Xxxx und Bbbb eingegangen worden.
-
Verlagerungsfeld 5462A (Bytes 7 - 10) - wenn das MOD-Feld 5542 10 enthält, sind die Bytes 7 - 10 das Verlagerungsfeld 5462A, und es funktioniert genauso wie die Legacy-32-Bit-Verlagerung (disp32) und arbeitet mit Byte-Granularität.
-
Verlagerungsfaktorfeld 5462B (Byte 7) - wenn das MOD-Feld 5542 01 enthält, ist das Byte 7 das Verlagerungsfaktorfeld 5462B. Die Position dieses Feldes ist die gleiche wie die der Legacy-8-Bit-Verlagerung des x86-Befehlssatzes (disp8), die mit Byte-Granularität arbeitet. Weil disp8 vorzeichenerweitert ist, kann es nur Offsets zwischen -128 und 127 Bytes adressieren; in Bezug auf 64-Byte-Cache-Zeilen verwendet disp8 8 Bits, die auf nur vier wirklich verwendbare Werte gesetzt werden können: -128, -64, 0 und 64; weil häufig ein größerer Bereich benötigt wird, wird disp32 verwendet; allerdings erfordert disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verlagerungsfaktorfeld 5462B eine Reinterpretation von disp8; bei Verwendung des Verlagerungsfaktorfeldes 5462B wird die eigentliche Verlagerung bestimmt durch: der Inhalt des Verlagerungsfaktorfeldes multipliziert mit der Größe des Speicheroperandenzugriffs (N). Dieser Verlagerungstyp wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verlagerung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verlagerung basiert auf der Annahme, dass die effektive Verlagerung ein Vielfaches der Granularität des Speicherzugriffs ist und somit die redundanten Bits niederer Ordnung des Adress-Offsets nicht codiert werden müssen. Mit anderen Worten: Das Verlagerungsfaktorfeld 5462B ersetzt die 8-Bit-Verlagerung des Legacy-x86-Befehlssatzes. Somit wird das Verlagerungsfaktorfeld 5462B in der gleichen Weise wie eine 8-Bit-Verlagerung des x86-Befehlssatzes codiert (also keine Änderungen in den ModRM/SIB-Codierregeln), mit der einzigen Ausnahme, dass disp8 auf disp8*N aufgeladen wird. Mit anderen Worten: Bei den Codierregeln oder den Codierlängen gibt es keine Änderungen, sondern lediglich bei der Interpretation des Verlagerungswertes durch Hardware (die die Verlagerung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adress-Offset zu erhalten). Immediate-Feld 5472 - operiert wie vorher beschrieben worden ist.
-
Vollständiges Opcode-Feld
-
Die 55B ist ein Blockschaltbild, das gemäß einer Ausführungsform der Offenbarung die Felder des spezifischen vektorgerechten Befehlsformats 5500 veranschaulicht, aus denen das vollständige Opcode-Feld 5474 besteht. Insbesondere enthält das vollständige Opcode-Feld 5474 das Formatfeld 5440, das Basisoperationsfeld 5442 und das Datenelementebreiten- (W -) Feld 5464. Das Basisoperationsfeld 5442 enthält das Präfixcodierfeld 5525, das Opcode-Map-Feld 5515 und das reale Opcode-Feld 5530.
-
Registerindexfeld
-
Die 55C ist ein Blockschaltbild, das gemäß einer Ausführungsform der Offenbarung die Felder des spezifischen vektorgerechten Befehlsformats 5500 veranschaulicht, aus denen das Registerindexfeld 5444 besteht. Insbesondere enthält das Registerindexfeld 5444 das REX-Feld 5505, das REX'-Feld 5510, das MODR/M.reg-Feld 5544, das MODR/M.r/m-Feld 5546, das VVVV-Feld 5520, das xxx-Feld 5554 und das bbb-Feld 5556.
-
Erweiterungsoperationsfeld
-
Die 55D ist ein Blockschaltbild, das gemäß einer Ausführungsform der Offenbarung die Felder des spezifischen, vektorgerechten Befehlsformats 5500 veranschaulicht, aus denen das Erweiterungsoperationsfeld 5450 besteht. Wenn das Klasse (U)-Feld 5468 0 enthält, bezeichnet es EVEX.U0 (Klasse A 5468A); wenn es 1 enthält, bezeichnet es EVEX.U1 (Klasse B 5468B). Wenn U = 0 ist und das MOD-Feld 5542 11 enthält (was eine Kein-Speicherzugriff-Operation bezeichnet), wird das Alpha-Feld 5452 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 5452A interpretiert. Wenn das rs-Feld 5452A eine 1 enthält (Runden 5452A.1), wird das Beta-Feld 5454 (EVEX-Byte 3, Bits [6:4] - SSS) als das Rundungssteuerfeld 5454A interpretiert. Das Rundungssteuerfeld 5454A enthält ein Ein-Bit-SAE-Feld 5456 und ein Zwei-Bit-Rundungsoperationsfeld 5458. Wenn das rs-Feld 5452A eine 0 enthält (Datentransformation 5452A.2), wird das Beta-Feld 5454 (EVEX-Byte 3, Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 5454B interpretiert. Wenn U = 0 ist und das MOD-Feld 5542 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), wird das Alpha-Feld 5452 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweis- (EH -) Feld 5452B interpretiert, und das Beta-Feld 5454 (EVEX-Byte 3, Bits [6:4] - SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 5454C interpretiert.
-
Wenn U = 1 ist, wird das Alpha-Feld 5452 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuer- (Z -) Feld 5452C interpretiert. Wenn U = 1 ist und das MOD-Feld 5542 11 enthält (was eine Kein-Speicherzugriff-Operation bezeichnet), wird ein Teil des Beta-Feldes 5454 (EVEX-Byte 3, Bit [4] - S0) als das RL-Feld 5457A interpretiert; wenn es eine 1 enthält (Runden 5457A.1), wird der Rest des Beta-Feldes 5454 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Rundungsoperationsfeld 5459A interpretiert, während der Rest des Beta-Feldes 5454 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Vektorlängenfeld 5459B (EVEX-Byte 3, Bit [6-5] - L1-0) interpretiert wird, wenn das RL-Feld 5457A eine 0 enthält (VSIZE 5457.A2). Wenn U = 1 ist und das MOD-Feld 5542 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), wird das Beta-Feld 5454 (EVEX-Byte 3, Bits [6:4] - SSS) als das Vektorlängenfeld 5459B (EVEX-Byte 3, Bit [6-5] - L1-0) und das Broadcast-Feld 5457B (EVEX-Byte 3, Bit [4] - B) interpretiert.
-
Beispielhafte Registerarchitekturen
-
Die
56 ist ein Blockschaltbild einer Registerarchitektur
5600 gemäß einer Ausführungsform der Offenbarung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister
5610, die
512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niederer Ordnung der unteren 16 zmm-Register werden den Registern ymm0-16 überlagert. Die 128 Bits niederer Ordnung der unteren 16 zmm-Register (die 128 Bits niederer Ordnung der ymm-Register) werden den Registern xmm0-15 überlagert. Das spezifische vektorgerechte Befehlsformat
5500 operiert auf dieser überlagerten Registerdatei, wie in der nachstehenden Tabelle veranschaulicht wird.
Einstellbare Vektorlänge | Klasse | Operationen | Register |
Befehls-Templates, die nicht das Vektorlängenfeld 5459B enthalten | A ( 54A; U = 0) | 5410,5415, 5425, 5430 | zmm-Register (die Vektorlänge beträgt 64 Byte) |
B ( 54B; U=1) | 5412 | zmm-Register (die Vektorlänge beträgt 64 Byte) |
Befehls-Templates, die das Vektorlängenfeld 5459B enthalten | B ( 54B; U =1) | 5417, 5427 | zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte), abhängig vom Vektorlängenfeld 5459B |
-
Mit anderen Worten: Das Vektorlängenfeld 5459B wählt zwischen einer maximalen Länge und einer oder mehreren anderen, kürzeren Längen, wobei jede solcher kürzeren Längen halb so lang ist wie die vorhergehende Länge; und Befehls-Templates ohne das Vektorlängenfeld 5459B operieren mit der maximalen Vektorlänge. Des Weiteren operieren in einer Ausführungsform die Klasse-B-Befehls-Templates des spezifischen vektorgerechten Befehlsformats 5500 an gepackten oder skalaren Fließkomma-Daten mit einfacher/doppelter Genauigkeit und an gepackten oder skalaren Ganzzahl-Daten. Skalare Operationen sind Operationen, die an der Datenelementeposition der niedrigsten Ordnung in einem zmm -/ymm -/xmm-Register durchgeführt werden; die Datenelementepositionen höherer Ordnung bleiben, je nach Ausführungsform, entweder genauso, wie sie vor dem Befehl waren, oder sie werden nullgesetzt.
-
Schreibmaskenregister 5615 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7) von jeweils 64 Bits Größe. In einer alternativen Ausführungsform sind die Schreibmaskenregister 5615 16 Bits groß. Wie vorher beschrieben worden ist, kann das Vektormaskenregister k0 in einer Ausführungsform der Offenbarung nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt es eine festverdrahtete Schreibmaske mit OxFFFF, womit die Schreibmaskierung für diesen Befehl effektiv deaktiviert wird.
-
Universalregister 5625 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressiermodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register werden als RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
-
Skalare Fließkomma-Stack-Registerdatei (x87-Stack) 5645, auf die Aliasing der gepackten MMX-Ganzzahl-Flat-Register-Datei 5650 erfolgt - in der veranschaulichten Ausführungsform ist der x87-Stack ein Acht-Elemente-Stack, der verwendet wird, um skalare Fließkomma-Operationen an 32 -/64 -/80-Bit-Fließkomma-Daten unter Verwendung der x87-Befehlssatzerweiterung auszuführen, während die MMX-Register verwendet werden, um Operationen an gepackten 64-Bit-Ganzzahl-Daten durchzuführen, sowie Operanden für einige Operationen zu halten, die zwischen dem MMX- und dem XMM-Register durchgeführt werden.
-
In alternativen Ausführungsformen der Offenbarung können breitere oder schmalere Register verwendet werden. Zusätzlich können in alternativen Ausführungsformen der Offenbarung mehr, weniger oder andere Registerdateien und Register verwendet werden.
-
Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
-
Prozessorkerne können auf unterschiedliche Weisen, für unterschiedliche Zwecke und in unterschiedlichen Prozessoren implementiert werden. Zu Implementierungen solcher Kerne können zum Beispiel zählen: 1) ein Universal-In-Order-Kern, der für Universalberechnen vorgesehen ist; 2) ein Hochleistungs-Universal-Out-of-Order-Kern, der für Universalberechnen vorgesehen ist; 3) ein Spezialkern, der vor allem für Grafiken und/oder wissenschaftliches (Durchsatz -) Berechnen vorgesehen ist. Zu Implementierungen unterschiedlicher Prozessoren können zählen: 1) eine CPU, die einen oder mehrere Universal-In-Order-Kerne enthält, die für Universalberechnen vorgesehen sind, und/oder einen oder mehrere Hochleistungs-Universal-Out-of-Order-Kerne, die für Universalberechnen vorgesehen sind; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne enthält, die vor allem für Grafiken und/oder Wissenschaft (Durchsatz) vorgesehen sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, zu denen Folgende zählen können: 1) der Coprozessor auf einem von der CPU getrennten Chip; 2) der Coprozessor auf einem separaten Die im gleichen Package wie eine CPU; 3) der Coprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Coprozessor manchmal als Speziallogik, wie zum Beispiel als integrierte Grafik- und/oder wissenschaftliche (Durchsatz -) Logik, oder als Spezialkern bezeichnet); und 4) ein System-on-Chip, das die beschriebene CPU (manchmal als der/die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität auf dem gleichen Die enthalten kann. Beispielhafte Kernarchitekturen werden als Nächstes beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.
-
Beispielhafte Kernarchitekturen
-
In-Order- und Out-of-Order-Kern-Blockschaltbild
-
Die 57A ist ein Blockschaltbild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-, Out-of-Order-Ausgabe -/Ausführungs-Pipeline veranschaulicht, gemäß Ausführungsformen der Offenbarung. Die 57B ist ein Blockschaltbild, das sowohl ein Ausführungsbeispiel für einen In-Order-Architekturkern als auch für einen beispielhaften Registerumbenennungs-, Out-of-Order-Issue -/Ausführungs-Architekturkern veranschaulicht, die in einem Prozessor gemäß Ausführungsformen der Offenbarung enthalten sein sollen. Die Kästen mit durchgezogenen Linien in den 57A-B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während durch das optionale Hinzufügen der gestrichelt gezeichneten Kästen die Registerumbenennungs-, Out-of-Order-Issue -/Ausführungs-Pipeline und -Kern veranschaulicht werden. Der Out-of-Order-Aspekt wird unter der Voraussetzung beschrieben, dass der In-Order-Aspekt ein Subset des Out-of-Order-Aspekts ist.
-
In der 57A enthält eine Prozessor-Pipeline 5700 eine Abrufstufe 5702, eine Längendecodierstufe 5704, eine Decodierstufe 5706, eine Zuordnungsstufe 5708, eine Umbennungsstufe 5710, eine Scheduling-Stufe (auch bekannt als eine Dispatch- oder Issue-Stufe) 5712, eine Registerlese -/Speicherlese-Stufe 5714, eine Ausführungsstufe 5716, eine Zurückschreib -/Speicherschreib-Stufe 5718, eine Ausnahmebehandlungsstufe 5722 und eine Commit-Stufe 5724.
-
Die 57B zeigt den Prozessorkern 5790 einschließlich einer Front-End-Einheit 5730, die mit einer Ausführungsmaschinen-Einheit 5750 gekoppelt ist, und beide sind mit einer Speichereinheit 5770 gekoppelt. Der Kern 5790 kann ein RISC-Kern (Reduced Instruction Set Computer), ein CISC-Kern (Complex Instruction Set Computer), ein VLIW-Kern (Very Long Instruction Word) oder ein Hybrid- oder ein alternativer Kerntyp sein. Als noch eine andere Option kann der Kern 5790 ein Spezialkern sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungsmaschine, ein Coprozessorkern, ein General Purpose Computation on Graphics Processing Unit (GPGPU -) Kern, ein Grafikkern oder Ähnliches.
-
Die Front-End-Einheit 5730 enthält eine Verzweigungsvorhersage- (Branch Prediction -) Einheit 5732, die mit einer Befehls-Cache-Einheit 5734 gekoppelt ist, die mit einem Befehlsübersetzungspuffer (TLB, Translation Lookaside Buffer) 5736 gekoppelt ist, der mit einer Befehlsabrufeinheit 5738 gekoppelt ist, die mit einer Decodiereinheit 5740 gekoppelt ist. Die Decodiereinheit 5740 (oder der Decodierer oder die Decodiereinheit) kann Befehle (z. B. Makro-Befehle) decodieren und generiert als eine Ausgabe eine oder mehrere Mikro-Operationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den Originalbefehlen decodiert worden sind oder diese andernfalls widerspiegeln oder daraus abgeleitet sind. Die Decodiereinheit 5740 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Zu Beispielen für geeignete Mechanismen zählen, aber ohne darauf beschränkt zu sein: Lookup-Tabellen, Hardware-Implementierungen, programmierbare Logik-Arrays (PLAs), Mikrocode-Festwertspeicher (ROMs) usw. In einer Ausführungsform enthält der Kern 5790 ein Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 5740 oder andernfalls innerhalb der Front-End-Einheit 5730). Die Decodiereinheit 5740 ist mit einer Umbenennungs -/Allokatoreinheit 5752 in der Ausführungsmaschineneinheit 5750 gekoppelt.
-
Die Ausführungsmaschineneinheit 5750 enthält die Umbenennungs -/Allokatoreinheit 5752, die mit einer Retirement-Einheit 5754 gekoppelt ist, und einen Satz aus einer oder mehreren Scheduler-Einheit(en) 5756. Die Scheduler-Einheit(en) 5756 stellt/stellen irgendeine Anzahl unterschiedlicher Scheduler dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster usw. Die Scheduler-Einheit(en) 5756 ist/sind mit den physikalischen Registerdatei(en)-Einheit(en) 5758 gekoppelt. Jede der physikalischen Registerdatei(en)-Einheiten 5758 stellt eine oder mehrere physikalische Registerdateien dar, von denen unterschiedliche einen oder mehrerer unterschiedliche Datentypen speichern, wie zum Beispiel skalare Ganzzahl, skalare Fließkomma-Zahl, gepackte Ganzzahl, gepackte Fließkomma-Zahl, Ganzzahl-Vektor, Fließkomma-Vektor, Zustand (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physikalische Registerdatei(en)-Einheit 5758 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physikalische Registerdatei(en)-Einheit(en) 5758 wird/werden von der Retirement-Einheit 5754 überlappt, um verschiedene Arten zu veranschaulichen, in denen das Registerumbenennen und die Out-of-Order-Ausführung implementiert werden können (z. B. unter Verwendung von Rückordnungspuffer(n) und von Retirement-Registerdatei(en), unter Verwendung von Future File(s), von History Buffer(s) und von Retirement-Registerdatei(en), unter Verwendung von Register-Maps und eines Pools von Registern usw.). Die Retirement-Einheit 5754 und die physikalische Registerdatei(en)-Einheit(en) 5758 sind mit dem/den Ausführungs-Cluster(n) 5760 gekoppelt. Der/die Ausführungs-Cluster 5760 enthält/enthalten einen Satz aus einer oder mehreren Ausführungseinheiten 5762 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 5764. Die Ausführungseinheiten 5762 können verschiedene Operationen (z. B. Shifts, Addition, Subtraktion, Multiplikation) und auf verschiedenen Datentypen (z. B. skalare Fließkomma-Zahl, gepackte Ganzzahl, gepackte Fließkomma-Zahl, Ganzzahlvektor, Fließkomma-Vektor) durchführen. Während einige Ausführungsformen eine Reihe von Ausführungseinheiten enthalten können, die für spezielle Funktionen oder Funktionssätze dediziert sind, können andere Ausführungsformen lediglich eine Ausführungseinheit oder mehrere Ausführungseinheiten, die sämtlich alle Funktionen ausführen, enthalten. Die Scheduler-Einheit(en) 5756, die physikalischen Registerdatei(en)-Einheit(en) 5758 und der/die Ausführungs-Cluster 5760 werden so gezeigt, dass sie möglicherweise mehrfach vorhanden sind, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erstellen (z. B. eine skalare Ganzzahl-Pipeline, eine skalare Fließkomma -/gepackte Ganzzahl -/gepackte Fließkomma -/Ganzzahl-Vektor -/Fließkomma-Vektor-Pipeline und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physikalische Registerdatei(en)-Einheit(en) und/oder Ausführungs-Cluster aufweisen, - und im Fall einer separaten Speicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, bei denen lediglich der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 5764 aufweist). Es versteht sich auch, dass bei Verwendung separater Pipelines eine oder mehrere dieser Pipelines Out-of-Order-Issue -/Ausführungs-Pipelines und der Rest In-Order sein können.
-
Der Satz Speicherzugriffseinheiten 5764 ist mit der Speichereinheit 5770 gekoppelt, die eine Daten-TLB-Einheit 5772 enthält, die mit einer Daten-Cache-Einheit 5774 gekoppelt ist, die mit einer Level2- (L2 -) Cache-Einheit 5776 gekoppelt ist. In einem Ausführungsbeispiel können die Speicherzugriffseinheiten 5764 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit enthalten, die jeweils mit der Daten-TLB-Einheit 5772 in der Speichereinheit 5770 gekoppelt sind. Die Befehls-Cache-Einheit 5734 ist des Weiteren mit einer Level-2- (L2 -) Cache-Einheit 5776 in der Speichereinheit 5770 gekoppelt. Die L2-Cache-Einheit 5776 ist mit einer oder mehreren anderen Cache-Ebenen und eventuell mit einem Hauptspeicher gekoppelt.
-
Als Beispiel: Die beispielhafte Registerumbenennungs-, Out-of-Order-Issue/Ausführungs-Kernarchitektur kann die Pipeline 5700 wie folgt implementieren: 1) die Befehlsabrufeinheit 5738 fuhrt die Abruf- und Längendecodierstufen 5702 und 5704 durch; 2) die Decodiereinheit 5740 fuhrt die Decodierstufe 5706 durch; 3) die Umbenennungs -/Allokator-Einheit 5752 führt die Zuordnungsstufe 5708 und Umbenennungsstufe 5710 durch; 4) die Scheduler-Einheit(en) 5756 führt/führen die Schedule-Stufe 5712 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 5758 und die Speichereinheit 5770 führen die Registerlese -/Speicherlesestufe 5714 durch; der Ausführungs-Cluster 5760 führt die Ausführungsstufe 5716 durch; 6) die Speichereinheit 5770 und die physikalischen Registerdatei(en)-Einheit(en) 5758 führen die Zurückschreib -/Speicherschreibstufe 5718 durch; 7) verschiedene Einheiten können in der Ausnahmebehandlungsstufe 5722 einbezogen sein; und 8) die Retirement-Einheit 5754 und die physikalischen Registerdatei(en)-Einheit(en) 5758 führt/führen die Commit-Stufe 5724 durch.
-
Der Kern 5790 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt worden sind), den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, Kalifornien, den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie zum Beispiel NEON) von ARM Holdings, Sunnyvale, Kalifornien), einschließlich des/der hier beschriebenen Befehl(e). In einer Ausführungsform enthält der Kern 5790 Logik, um eine gepackte Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2) zu unterstützen, wodurch ermöglicht wird, dass die Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
-
Es versteht sich, dass der Kern Multithreading unterstützen kann (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) und dass er dieses auf die unterschiedlichsten Arten erledigen kann, einschließlich des Zeitscheiben-Multithreadings, des simultanen Multithreadings (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, wobei der physikalische Kern simultan Multithreading ausführt) oder einer Kombination daraus (z. B. Zeitscheiben-Abrufen und -Decodieren und simultanes Multithreading danach, wie zum Beispiel in der Intel® Hyperthreading-Technologie).
-
Obwohl das Registerumbenennen im Kontext von Out-of-Order-Ausführung beschrieben wird, versteht es sich, dass Registerumbenennen in einer In-Order-Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten 5734/5774 und eine gemeinsam genutzte L2-Cache-Einheit 5776 enthält, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie zum Beispiel einen internen Level-1- (L1 -) Cache oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
-
Spezifische beispielhafte In-Order-Kernarchitektur
-
Die 58A-B veranschaulichen ein Blockschaltbild einer spezifischeren, beispielhaften In-Order-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Interconnect-Netzwerk mit hoher Bandbreite (z. B. ein Ringnetz) mit Fixed-Function-Logik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik, je nach Anwendung.
-
Die 58A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit seiner Verbindung zum On-Die-Interconnect-Netzwerk 5802 und seinem lokalen Subset des Level-2- (L2 -) Cache 5804, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform unterstützt eine Befehlsdecodiereinheit 5800 den x86-Befehlssatz mit einer gepackten Daten-Befehlssatz-Erweiterung. Ein L1-Cache 5806 ermöglicht Zugriffe mit geringer Latenz auf Cache-Speicher in die Skalar- und Vektoreinheiten. Obwohl in einer Ausführungsform (um das Design zu vereinfachen) eine Skalareinheit 5808 und eine Vektoreinheit 5810 unterschiedliche Registersätze verwenden (Skalarregister 5812 bzw. Vektorregister 5814) und zwischen ihnen übertragene Daten in Speicher geschrieben und dann von einem Level-1- (L1 -) Cache 5806 wieder eingelesen werden, kann in alternativen Ausführungsformen der Offenbarung ein anderer Ansatz verwendet werden (z. B. das Verwenden eines einzelnen Registersatzes oder das Einschließen eines Kommunikationsweges, der das Übertragen von Daten zwischen den beiden Registerdateien ermöglicht, ohne dass sie geschrieben und zurückgelesen werden).
-
Das lokale Subset des L2-Caches 5804 ist Teil eines globalen L2-Caches, der in separate lokale Subsets aufgeteilt ist, einer je Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffsweg zu seinem eigenen lokalen Subset des L2-Caches 5804 auf. Von einem Prozessorkern gelesene Daten werden in seinem L2-Cache-Subset 5804 gespeichert, und es kann schnell auf sie zugegriffen werden, parallel zum Zugreifen anderer Prozessorkerne auf ihre eigenen lokalen L2-Cache-Subsets. Von einem Prozessorkern geschriebene Daten werden in seinem eigenen L2-Cache-Subset 5804 gespeichert und, falls nötig, aus anderen Subsets geflusht. Das Ringnetz stellt Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, um es Agenten, wie zum Beispiel Prozessorkernen, L2-Caches und anderen Logikblöcken, zu ermöglichen, miteinander innerhalb des Chips zu kommunizieren. Jeder Ring-Datenweg ist pro Richtung 1012 Bits breit.
-
Die 58B ist eine erweiterte Ansicht eines Teils des Prozessorkerns aus der 58A gemäß Ausführungsformen der Offenbarung. Die 58B enthält einen L1-Daten-Cache 5806A, der Teil des L1-Caches 5804 ist, ebenso wie mehr Details hinsichtlich der Vektoreinheit 5810 und der Vektorregister 5814. Insbesondere ist die Vektoreinheit 5810 eine 16-breite Vector Processing Unit (VPU, Vektorverarbeitungseinheit) (siehe die 16-breite ALU 5828), die einen oder mehrere der folgenden Befehle ausführt: Ganzzahl-Befehle, Fließkomma-Befehle mit einfacher Genauigkeit und Fließkomma-Befehle mit doppelter Genauigkeit. Die VPU unterstützt das Swizzling der Registereingänge mit der Swizzle-Einheit 5820, die numerische Konvertierung mit den numerischen Konvertierungseinheiten 5822A - B und die Replikation mit der Replikationseinheit 5824 auf dem Speichereingang. Die Schreibmaskenregister 5826 ermöglichen, resultierende Vektorschreibvorgänge zu prädizieren.
-
Die 59 ist ein Blockschaltbild eines Prozessors 5900, der mehr als einen Kern, einen integrierten Speicher-Controller und integrierte Grafiken gemäß Ausführungsformen der Offenbarung aufweisen kann. Die Kästen mit durchgezogenen Linien in der 59 veranschaulichen einen Prozessor 5900 mit einem einzelnen Kern 5902A, einem Systemagenten 5910, einem Satz einer oder mehreren Bus-Controller-Einheiten 5916, während das optionale Hinzufügen der Kästen mit gestrichelten Linien einen alternativen Prozessor 5900 mit mehreren Kernen 5902A - N, einem Satz aus einer oder mehreren integrierten Speicher-Controller-Einheit(en) 5914 in der Systemagenteneinheit 5910 und einer Speziallogik 5908 veranschaulicht.
-
Somit können unterschiedliche Implementierungen des Prozessors 5900 Folgendes enthalten: 1) eine CPU mit der Speziallogik 5908, die integrierte Grafik- und/oder wissenschaftliche (Durchsatz -) Logik ist (die einen oder mehrere Kerne enthalten kann), und die Kerne 5902A - N, die einer oder mehrere Universalkerne sind (z. B. Universal-In-Order-Kerne, Universal-Out-of-Order-Kerne, eine Kombination aus den beiden); 2) einen Coprozessor mit den Kernen 5902A - N, die eine große Anzahl Spezialkerne sind, die vor allem für Grafiken und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Coprozessor mit den Kernen 5902A - N, die eine große Anzahl von Universal-In-Order-Kernen sind. Somit kann der Prozessor 5900 ein Universalprozessor, ein Coprozessor oder ein Spezialprozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU (General Purpose Graphics Processing Unit), ein High-Throughput-MIC- (Many Integrated Core -) Coprozessor (mit 30 oder mehr Kernen), ein eingebetteter Prozessor oder Ähnliches. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 5900 kann Teil eines oder mehrerer Substrate sein, die irgendeine aus einer Reihe von Prozesstechnologien verwenden, wie zum Beispiel BiCMOS, CMOS oder NMOS, und/oder er kann auf diesen implementiert sein.
-
Die Speicherhierarchie enthält eine oder mehrere Cache-Ebenen innerhalb der Kerne, einen Satz aus einer oder mehreren Shared-Cache-Einheiten 5906 und externen Speicher (nicht dargestellt), der mit dem Satz integrierter Speicher-Controller-Einheiten 5914 gekoppelt ist. Der Satz der Shared-Cache-Einheiten 5906 kann einen oder mehrere Mid-Level-Caches enthalten, wie zum Beispiel Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, einen Last-Level-Cache (LLC) und/oder Kombinationen daraus. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 5912 die integrierte Grafiklogik 5908, den Satz Shared-Cache-Einheiten 5906 und die Systemagenteneinheit 5910 bzw. die integrierten Speicher-Controller-Einheit(en) 5914 miteinander verbindet, können alternative Ausführungsformen irgendeine Anzahl von allgemein bekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen der einer oder den mehreren Cache-Einheiten 5906 und den Kernen 5902A - N aufrechterhalten.
-
In einigen Ausführungsformen sind einer oder mehrere der Kerne 5902A - N zum Multithreading in der Lage. Der Systemagent 5910 enthält diese Komponenten, die die Kerne 5902A - N koordinieren und betreiben. Die Systemagenteneinheit 5910 kann zum Beispiel eine Leistungssteuereinheit (PCU, Power Control Unit) und eine Display-Einheit enthalten. Die PCU kann Logik und Komponenten sein oder enthalten, die zum Regeln des Leistungszustands der Kerne 5902A - N und der integrierten Grafiklogik 5908 benötigt werden. Die Display-Einheit dient zum Ansteuern eines oder mehrerer extern verbundener Displays.
-
Die Kerne 5902A - N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 5902A - N können in der Lage sein, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur einen Subset dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
-
Beispielhafte Computerarchitekturen
-
Die 60 - 63 sind Blockschaltbilder beispielhafter Computerarchitekturen. Auch andere Systemdesigns und -konfigurationen sind geeignet, die für Laptops, Desktops, tragbare PCs, Personal Digital Assistants, Engineering-Workstations, Server, Netzwerkeinrichtungen, Netzwerk-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikeinrichtungen, Videospieleinrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienabspielgeräte, tragbare Einrichtungen und verschiedene andere elektronische Einrichtungen im Fachgebiet bekannt sind. Im Allgemeinen ist eine große Vielzahl von Systemen oder elektronischen Einrichtungen allgemein geeignet, die in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik, wie sie hier offenbart werden, einzubeziehen.
-
Es wird nun auf die 60 Bezug genommen: Es wird ein Blockschaltbild eines Systems 6000 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Das System 6000 kann einen oder mehrere Prozessoren 6010, 6015 enthalten, die mit einem Controller-Hub 6020 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 6020 einen GMCH (Graphics Memory Controller Hub) 6090 und einen Input -/Output-Hub (IOH) 6050 (der sich auf einem separaten Chip befinden kann); der GMCH 6090 enthält Speicher- und Grafik-Controller, mit denen der Speicher 6040 und ein Coprozessor 6045 gekoppelt sind; der IOH 6050 koppelt die Eingabe -/Ausgabe- (E/A -) Einrichtungen 6060 mit dem GMCH 6090. Alternativ sind einer oder beide der Speicher- und Grafik-Controller innerhalb des Prozessors integriert (wie hier beschrieben wird), der Speicher 6040 und der Coprozessor 6045 sind direkt mit dem Prozessor 6010 und der Controller-Hub 6020 in einem einzelnen Chip mit dem IOH 6050 gekoppelt. Der Speicher 6040 kann ein Kompilierer-Modul 6040A enthalten, um zum Beispiel Code zu speichern, der, wenn er ausgeführt wird, bewirkt, dass ein Prozessor irgendein Verfahren dieser Offenbarung durchführt.
-
Der optionale Charakter der zusätzlichen Prozessoren 6015 wird in der 60 mit unterbrochenen Linien bezeichnet. Jeder Prozessor 6010, 6015 kann einen oder mehrere der hier beschriebenen Prozessorkerne enthalten und kann eine Version des Prozessors 5900 sein.
-
Der Speicher 6040 kann zum Beispiel dynamischer Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), Phase-Change Memory (PCM) oder eine Kombination der beiden sein. Wenigstens für eine Ausführungsform kommuniziert der Controller-Hub 6020 mit dem/den Prozessor(en) 6010, 6015 über einen Multi-Drop-Bus, wie zum Beispiel einen Front Side Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie zum Beispiel QuickPath Interconnect (QPI), oder eine ähnliche Verbindung 6095.
-
In einer Ausführungsform ist der Coprozessor 6045 ein Spezialprozessor, wie zum Beispiel ein High-Throughput-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder Ähnliches. In einer Ausführungsform kann der Controller-Hub 6020 einen integrierten Grafikbeschleuniger enthalten.
-
Es kann eine Vielzahl von Unterschieden zwischen den physikalischen Ressourcen 6010, 6015 hinsichtlich eines Spektrums von Bewertungsmetriken geben, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Leistungsaufnahmecharakteristika und Ähnliches.
-
In einer Ausführungsform führt der Prozessor 6010 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Innerhalb der Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 6010 erkennt diese Coprozessorbefehle als einen Typ, der vom angeschlossenen Coprozessor 6045 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 6010 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einen anderen Interconnect zum Coprozessor 6045 aus. Der/die Coprozessor(en) 6045 übernehmen die aufgenommenen Coprozessorbefehle und führen sie aus.
-
Es wird nun auf die 61 Bezug genommen: Es wird ein Blockschaltbild eines ersten, genauer spezifizierten beispielhaften Systems 6100 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Wie in der 61 gezeigt wird, ist das Mehrprozessorsystem 6100 ein Punkt-zu-Punkt-Interconnect-System und enthält einen ersten Prozessor 6170 und einen zweiten Prozessor 6180, die über einen Punkt-zu-Punkt-Interconnect 6150 gekoppelt sind. Jeder der Prozessoren 6170 und 6180 kann eine Version des Prozessors 5900 sein. In einer Ausführungsform der Offenbarung sind die Prozessoren 6170 und 6180 die Prozessoren 6010 bzw. 6015, während der Coprozessor 6138 der Coprozessor 6045 ist. In einer anderen Ausführungsform sind die Prozessoren 6170 und 6180 der Prozessor 6010 bzw. der Coprozessor 6045.
-
Die Prozessoren 6170 und 6180 werden so gezeigt, dass sie die integrierten Speicher-Controller-Einheiten (IMCs, Integrated Memory Controllers) 6172 bzw. 6182 enthalten. Der Prozessor 6170 enthält als Teil seiner Bus-Controller-Einheiten auch die Punkt-zu-Punkt- (P-P -) Schnittstellen 6176 und 6178; gleichermaßen enthält der zweite Prozessor 6180 P-P-Schnittstellen 6186 und 6188. Die Prozessoren 6170, 6180 können Informationen über eine Punkt-zu-Punkt- (P-P -) Schnittstelle 6150 unter Verwendung der P-P-Schnittstellenschaltungen 6178, 6188 austauschen. Wie in der 61 gezeigt wird, koppeln die IMCs 6172 und 6182 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 6132 und einem Speicher 6134, die Teile eines Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
-
Die Prozessoren 6170, 6180 können jeweils Informationen mit einem Chipsatz 6190 über die einzelnen P-P-Schnittstellen 6152, 6154 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 6176, 6194, 6186, 6198 austauschen. Der Chipsatz 6190 kann optional Informationen mit dem Coprozessor 6138 über eine Hochleistungsschnittstelle 6139 austauschen. In einer Ausführungsform ist der Coprozessor 6138 ein Spezialprozessor, wie zum Beispiel ein High-Throughput-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder Ähnliches.
-
Ein Shared-Cache (nicht dargestellt) kann in jedem Prozessor oder außerhalb beider Prozessoren enthalten sein, mit den Prozessoren jedoch über einen P-P-Interconnect verbunden sein, so dass lokale Cache-Informationen des einen oder beider Prozessoren im Shared-Cache gespeichert werden können, falls ein Prozessor in einen Niedrigleistungsmodus versetzt wird.
-
Der Chipsatz 6190 kann an einen ersten Bus 6116 über eine Schnittstelle 6196 (Interface) gekoppelt sein. In einer Ausführungsform kann der erste Bus 6116 ein Peripheral Component Interconnect- (PCI -) Bus oder ein Bus, wie zum Beispiel ein PCI-Express-Bus, oder ein anderer E/A-Interconnect-Bus der dritten Generation sein, obwohl der Schutzbereich der vorliegenden Offenbarung nicht darauf beschränkt ist.
-
Wie in der 61 gezeigt wird, können verschiedene E/A-Einrichtungen 6114 mit dem ersten Bus 6116 zusammen mit einer Bus-Bridge 6118 gekoppelt sein, die den ersten Bus 6116 mit einem zweiten Bus 6120 koppelt. In einer Ausführungsform sind einer oder mehrere zusätzliche Prozessor(en) 6115, wie zum Beispiel Coprozessoren, High-Throughput-MIC-Prozessoren, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungs- (DSP-, Digital Signal Processing -) Einheiten), Field Programmable Gate Arrays oder irgendein anderer Prozessor mit dem ersten Bus 6116 gekoppelt. In einer Ausführungsform kann der zweite Bus 6120 ein Low-Pin-Count- (LPC -) Bus sein. Verschiedene Einrichtungen können in einer Ausführungsform mit einem zweiten Bus 6120 gekoppelt sein, einschließlich zum Beispiel eine Tastatur und/oder Maus 6122, die Kommunikationseinrichtungen 6127 und eine Speichereinrichtung 6128, wie zum Beispiel ein Diskettenlaufwerk oder eine andere Massenspeichereinrichtung, die Befehle/Code und Daten 6130 enthalten können. Des Weiteren kann ein Audio-E/A 6124 mit dem zweiten Bus 6120 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann ein System statt der Punkt-zu-Punkt-Architektur der 61 einen Multidrop-Bus oder eine andere solche Architektur implementieren.
-
Es wird nun auf die 62 Bezug genommen: Es wird ein Blockschaltbild eines zweiten, genauer spezifizierten beispielhaften Systems 6200 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Gleiche Elemente in den 61 und 62 tragen gleiche Referenznummern, und bestimmte Aspekte der 61 sind in der 62 weggelassen worden, um zu vermeiden, andere Aspekte der 62 unverständlich zu machen.
-
Die 62 veranschaulicht, dass die Prozessoren 6170, 6180 integrierten Speicher und E/A-Steuerlogik („CL“, Control Logic) 6172 bzw. 6182 enthalten können. Somit enthalten die CL 6172, 6182 integrierte Speicher-Controller-Einheiten und E/A-Steuerlogik. Die 62 veranschaulicht, dass nicht nur die Speicher 6132, 6134 mit der CL 6172, 6182 gekoppelt sind, sondern auch, dass die E/A-Einrichtungen 6214 ebenfalls mit der Steuerlogik 6172, 6182 gekoppelt sind. Die Legacy-E/A-Einrichtungen 6215 sind mit dem Chipsatz 6190 gekoppelt.
-
Es wird nun auf die 63 Bezug genommen: Dort wird ein Blockschaltbild eines SoC 6300 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Gleiche Elemente in der 59 tragen gleiche Referenznummern. Auch sind Kästen mit gestrichelten Linien optionale Merkmale auf weiter verbesserten SoCs. In der 63 ist/sind Interconnect-Einheit(en) 6302 mit Folgenden gekoppelt: einem Anwendungsprozessor 6310, der einen Satz aus einem oder mehreren Kernen 202A - N und Shared-Cache-Einheit(en) 5906 enthält, einer Systemagenteneinheit 5910, mit Bus-Controller-Einheit(en) 5916, mit integrierten Speicher-Controller-Einheit(en) 5914, mit einem Satz aus einem oder mehreren Coprozessor(en) 6320, der/die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann/können, einer statischen Direktzugriffsspeicher- (SRAM-, Static Random Access Memory) Einheit 6330, einer Speicherdirektzugriffs- (DMA-, Direct Memory Access) Einheit 6332 und einer Display-Einheit 6340, um mit einem oder mehreren externen Displays zu koppeln. In einer Ausführungsform ist/sind der/die Coprozessor(en) 6320 ein Spezialprozessor, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsmaschine, eine GPGPU, ein High-Throughput-MIC-Prozessor, ein eingebetteter Prozessor oder Ähnliches.
-
Ausführungsformen (z. B. der Mechanismen), die hier offenbart werden, können als Hardware, Software, Firmware oder eine Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Offenbarung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren System ausführen, die wenigstens einen Prozessor, ein Speichersystem (das flüchtige und nichtflüchtige Speicher und/oder Speicherelemente enthält), wenigstens eine Eingabeeinrichtung und wenigstens eine Ausgabeeinrichtung umfassen.
-
Programmcode, wie zum Beispiel der in der 61 veranschaulichte Code 6130, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können auf eine oder mehrere Ausgabeeinrichtungen in bekannter Weise angewendet werden. Für die Zwecke dieser Anmeldung enthält ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie zum Beispiel einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC, Application Specific Integrated Circuit) oder einen Mikroprozessor.
-
Der Programmcode kann in einer höheren, prozeduralen oder objektorientierten Programmiersprache zum Kommunizieren mit einem Verarbeitungssystem implementiert werden. Der Programmcode kann auch in Assembler- oder Maschinensprache implementiert werden, falls gewünscht. Tatsächlich sind die hier beschriebenen Mechanismen in ihrem Schutzbereich nicht auf irgendeine spezielle Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder eine übersetzte Sprache sein.
-
Einer oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors darstellt, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik zum Durchführen der hier beschriebenen Techniken herstellt. Solche Repräsentationen, bekannt als „IP-Kerne“, können auf einem dinghaften, maschinenlesbaren Medium gespeichert und an verschiedene Kunden oder Herstellungsanlagen zum Laden in die Herstellungsmaschinen, die die Logik oder den Prozessor eigentlich herstellen, geliefert werden.
-
Zu solchen maschinenlesbaren Speichermedien können, ohne Einschränkung, nichtflüchtige, dinghafte Anordnungen von Objekten zählen, die von einer Maschine oder einer Einrichtung hergestellt werden, einschließlich Speichermedien, wie zum Beispiel Festplatten, irgendein anderer Disktyp, einschließlich Floppydisks, optische Disks, CD-ROMs (Compact Disc Read-Only Memory), wiederbeschreibbare Compact Discs (CD RWs) und magnetooptische Disks, Halbleitereinrichtungen, wie zum Beispiel Nur-Lese-Speicher (ROMs), Direktzugriffspeicher (RAMs), wie zum Beispiel Dynamic Random Access Memory (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbare PROMs (EPROMs), Flash-Speicher, elektrisch löschbare PROMs (EEPROMs), Phase-Change Memory (PCM), magnetische oder optische Karten oder irgendein anderer Medientyp, der zum Speichern von elektronischen Befehlen geeignet ist.
-
Dementsprechend zählen zu Ausführungsformen der Offenbarung auch nichtflüchtige, dinghafte maschinenlesbare Medien, die Befehle umfassen oder Design-Daten umfassen, wie zum Beispiel Hardware-Beschreibungssprache (HDL, Hardware Description Language), die die hier beschriebenen Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
-
Emulation (einschließlich Binärübersetzung, Code-Morphing usw.)
-
In einigen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz zu konvertieren. Zum Beispiel kann der Befehlskonverter einen Befehl in einen oder mehrere andere Befehle, die vom Kern verarbeitet werden sollen, übersetzen (z. B. unter Verwendung von statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischer Kompilierung), verwandeln, emulieren oder anders konvertieren. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert werden. Der Befehlskonverter kann ein On-Prozessor, ein Off-Prozessor oder zum Teil ein On- und zum Teil ein Off-Prozessor sein.
-
Die 64 ist ein Blockschaltbild, das die Verwendung eines Software-Befehlskonverters zum Konvertieren von Binärbefehlen in einem Quellbefehlssatz Binärbefehlen in einem Zielbefehlssatz vergleichend gegenüberstellt, gemäß Ausführungsformen der Offenbarung. In der veranschaulichten Ausführungsform ist der Befehlskonverter ein Software-Befehlskonverter, obwohl der Befehlskonverter alternativ als Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. Die 64 zeigt, dass ein Programm in einer Hochsprache 6402 unter Verwendung eines x86-Kompilierers 6404 kompiliert werden kann, um den x86-Binärcode 6406 zu generieren, der von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 6416 nativ ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatzkern 6416 stellt irgendeinen Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die zum Laufen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern vorgesehen ist, kompatibel ausführt oder andernfalls verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern zu erreichen. Der x86-Kompilierer 6404 stellt einen Kompilierer dar, der dazu betrieben werden kann, den x86-Binärcode 6406 (z. B. Objektcode) zu generieren, der auf dem Prozessor mit wenigstens einem x86-Befehlssatzkern 6416 mit oder ohne zusätzliche Verknüpfungsverarbeitung ausgeführt werden kann. Gleichermaßen zeigt die 64, dass das Programm in der Hochsprache 6402 unter Verwendung eines alternativen Befehlssatz-Kompilierers 6408 kompiliert werden kann, um den alternativen Befehlssatzbinärcode 6410 zu generieren, der von einem Prozessor ohne wenigstens einen x86-Befehlssatzkern 6414 (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings, Sunnyvale, Kalifornien ausführen) nativ ausgeführt werden kann. Der Befehlskonverter 6412 wird zum Konvertieren des x86-Binärcodes 6406 in Code verwendet, der vom Prozessor ohne einen x86-Befehlssatzkern 6414 nativ ausgeführt werden kann. Dieser konvertierte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatzbinärcode 6410, weil ein Befehlskonverter, der dazu in der Lage ist, schwierig herzustellen ist; allerdings wird der konvertierte Code den allgemeinen Betrieb erledigen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Somit stellt der Befehlskonverter 6412 Software, Firmware, Hardware oder eine Kombination daraus dar, die es einem Prozessor oder einer anderen elektronischen Einrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, durch Emulation, Simulation oder irgendeinen anderen Prozess ermöglicht, den x86-Binärcode 6406 auszuführen.