DE102018006889A1 - Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array - Google Patents

Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array Download PDF

Info

Publication number
DE102018006889A1
DE102018006889A1 DE102018006889.8A DE102018006889A DE102018006889A1 DE 102018006889 A1 DE102018006889 A1 DE 102018006889A1 DE 102018006889 A DE102018006889 A DE 102018006889A DE 102018006889 A1 DE102018006889 A1 DE 102018006889A1
Authority
DE
Germany
Prior art keywords
processing elements
subset
design
network
preference
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018006889.8A
Other languages
English (en)
Inventor
Kermin E. Fleming
Simon C. Jr. Steely
Kent D. Glossop
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102018006889A1 publication Critical patent/DE102018006889A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/14Time supervision arrangements, e.g. real time clock
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Verfahren und Einrichtungen im Zusammenhang mit bevorzugter Auslegung in räumlichen Arrays werden beschrieben. In einer Ausführungsform umfasst ein Prozessor Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den Verarbeitungselementen; und eine Auslegungssteuerung, die mit einer ersten und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die erste Teilmenge eine Ausgabe hat, der mit einer Eingabe der zweiten, unterschiedlichen Teilmenge gekoppelt ist, wobei die Auslegungssteuerung dazu dient, das Verbindungsnetzwerk zwischen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist.

Description

  • TECHNISCHES GEBIET
  • Die Offenbarung bezieht sich allgemein auf Elektronik, und insbesondere bezieht sich eine Ausführungsform der Offenbarung auf eine Auslegungssteuerung für bevorzugte Auslegung in einem räumlichen Array.
  • STAND DER TECHNIK
  • Ein Prozessor, oder eine Menge von Prozessoren, führt Befehle aus einem Befehlssatz, z. B. der Befehlssatzarchitektur (ISA, Instruction Set Architectur), aus. Der Befehlssatz ist der Teil der Computerarchitektur, der sich auf Programmierung bezieht, und umfasst allgemein die systemeigenen Datentypen, Befehle, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Unterbrechungs- und Ausnahmenbehandlung und externe Eingabe und Ausgabe (E/A). Es ist anzumerken, dass der Begriff „Befehl“ sich hier auf einen Makrobefehl, d. h. einen Befehl, der dem Prozessor zur Ausführung bereitgestellt wird, oder auf einen Mikrobefehl, d. h. einen Befehl, der aus dem Decodieren von Makrobefehlen durch den Decodierer eines Prozessors resultiert, beziehen kann.
  • Figurenliste
  • Die vorliegende Offenbarung wird in den Figuren der beigefügten Zeichnungen als Beispiel und nicht als Einschränkung dargestellt, wobei ähnliche Bezüge ähnliche Elemente anzeigen und:
    • 1 stellt eine Beschleuniger-Kachel gemäß Ausführungsformen der Offenbarung dar.
    • 2 stellt einen Hardwareprozessor, der mit einem Speicher gekoppelt ist, gemäß Ausführungsformen der Offenbarung dar.
    • 3 stellt eine Hardwareprozessor-Kachel, umfassend einen Beschleuniger, gemäß Ausführungsformen der Offenbarung dar.
    • 4 stellt eine In-Flight-Beschleunigerauslegung mit mehreren Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar.
    • 5A stellt ein auslegbares Datenpfadnetzwerk gemäß Ausführungsformen der Offenbarung dar.
    • 5B stellt ein auslegbares Flusssteuerungspfadnetzwerk gemäß Ausführungsformen der Offenbarung dar.
    • 6 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 7 stellt einen Kontextwechsel in einem räumlichen Array von Verarbeitungselementen eines Prozessors gemäß Ausführungsformen der Offenbarung dar.
    • 8A-8D stellen eine In-Flight-Auslegung für einen Kontextwechsel eines räumlichen Arrays von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar.
    • 9A-9J stellen eine phasengesteuerte Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen dar, ausgelegt zum Ausführen eines Datenflussgraphen gemäß Ausführungsformen der Offenbarung.
    • 10A stellt einen extrahierten Zustand gemäß Ausführungsformen der Offenbarung dar.
    • 10B stellt einen Zustand am Beginn einer Extraktion gemäß Ausführungsformen der Offenbarung dar.
    • 11 stellt eine Zustandsmaschine für eine (z. B. Auslegungs-)Steuerung gemäß Ausführungsformen der Offenbarung dar.
    • 12A stellt eine Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar.
    • 12B stellt eine Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar.
    • 13 stellt eine phasengesteuerte Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen dar, das ein (z. B. Mezzanine- oder globales) Netzwerk dazwischen umfasst, gemäß Ausführungsformen der Offenbarung.
    • 14 stellt eine phasengesteuerte Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen dar, das Speicherzugriff umfasst, gemäß Ausführungsformen der Offenbarung.
    • 15A stellt eine Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar.
    • 15B stellt eine Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar.
    • 16 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 17 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 18A stellt eine Programmquelle gemäß Ausführungsformen der Offenbarung dar.
    • 18B stellt einen Datenflussgraphen für die Programmquelle aus 18A gemäß Ausführungsformen der Offenbarung dar.
    • 18C stellt einen Beschleuniger mit mehreren Verarbeitungselementen, ausgelegt zum Ausführen des Datenflussgraphen aus 3B, gemäß Ausführungsformen der Offenbarung dar.
    • 19 stellt eine beispielhafte Ausführung des Datenflussgraphen gemäß Ausführungsformen der Offenbarung dar.
    • 20 stellt eine Programmquelle gemäß Ausführungsformen der Offenbarung dar.
    • 21 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen, gemäß Ausführungsformen der Offenbarung dar.
    • 22A stellt ein auslegbares Datenpfadnetzwerk gemäß Ausführungsformen der Offenbarung dar.
    • 22B stellt ein auslegbares Flusssteuerungspfadnetzwerk gemäß Ausführungsformen der Offenbarung dar.
    • 23 stellt eine Hardwareprozessor-Kachel, umfassend einen Beschleuniger, gemäß Ausführungsformen der Offenbarung dar.
    • 24 stellt ein Verarbeitungselement gemäß Ausführungsformen der Offenbarung dar.
    • 25 stellt eine Abfrage-Adressdatei-Schaltung (RAF, Request Address File) gemäß Ausführungsformen der Offenbarung dar.
    • 26 stellt mehrere Abfrage-Adressdatei-Schaltungen (RAF, Request Address File), die zwischen mehreren Beschleuniger-Kacheln und mehreren Cache-Bänken gekoppelt sind, gemäß Ausführungsformen der Offenbarung dar.
    • 27 stellt einen Gleitkomma-Multiplizierer, der in drei Bereiche (Ergebnisbereich, drei potentielle Übertragbereiche und gattergesteuerter Bereich) unterteilt ist, gemäß Ausführungsformen der Offenbarung dar.
    • 28 veranschaulicht eine In-Flight-Auslegung eines Beschleunigers mit mehreren Verarbeitungselementen gemäß Ausfiihrungsformen der Offenbarung;
    • 29 veranschaulicht einen Speicherauszug einer fließbandverarbeiteten In-Flight-Extraktion gemäß Ausführungsformen der Offenbarung;
    • 30 veranschaulicht eine Kompilationstoolkette für einen Beschleuniger gemäß Ausführungsformen der Offenbarung;
    • 31 veranschaulicht einen Kompilierer für einen Beschleuniger gemäß Ausführungsformen der Offenbarung;
    • 32A stellt einen sequentiellen Assemblercode gemäß Ausführungsformen der Offenbarung dar.
    • 32B stellt einen Datenfluss-Assemblercode für den sequentiellen Assemblercode aus 32A gemäß Ausführungsformen der Offenbarung dar.
    • 32C stellt einen Datenflussgraphen für den Datenfluss-Assemblercode aus 32B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung dar.
    • 33A stellt einen C-Quellcode gemäß Ausführungsformen der Offenbarung dar.
    • 33B stellt einen Datenfluss-Assemblercode für den C-Quellcode aus 33A gemäß Ausführungsformen der Offenbarung dar.
    • 33C stellt einen Datenflussgraphen für den Datenfluss-Assemblercode aus 33B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung dar.
    • 34A stellt einen C-Quellcode gemäß Ausführungsformen der Offenbarung dar.
    • 34B stellt einen Datenfluss-Assemblercode für den C-Quellcode aus 34A gemäß Ausführungsformen der Offenbarung dar.
    • 34C stellt einen Datenflussgraphen für den Datenfluss-Assemblercode aus 34B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung dar.
    • 35A stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 35B stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 36 stellt einen Graphen zum Durchsatz zu Energie-pro-Operation gemäß Ausführungsformen der Offenbarung dar;
    • 37 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen und eine lokale Auslegungssteuerung, gemäß Ausführungsformen der Offenbarung dar.
    • 38A-38C stellen eine lokale Auslegungssteuerung, die ein Datenpfadnetzwerk auslegt, gemäß Ausführungsformen der Offenbarung dar.
    • 39 stellt eine Auslegungssteuerung gemäß Ausführungsformen der Offenbarung dar.
    • 40 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen, einen Auslegungscache und eine lokale Auslegungssteuerung, gemäß Ausführungsformen der Offenbarung dar.
    • 41 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen und eine Auslegungs- und Ausnahmebehandlungssteuerung mit einer Neuauslegungsschaltung gemäß Ausführungsformen der Offenbarung dar.
    • 42 stellt eine Neuauslegungsschaltung gemäß Ausführungsformen der Offenbarung dar.
    • 43 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen und eine Auslegungs- und Ausnahmebehandlungssteuerung mit einer Neuauslegungsschaltung gemäß Ausführungsformen der Offenbarung dar.
    • 44 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen und einen Mezzanine-Ausnahmeaggregator, der mit einem Ausnahmeaggregator auf Kachel-Ebene gekoppelt ist, gemäß Ausführungsformen der Offenbarung dar.
    • 45 stellt ein Verarbeitungselement mit einem Ausnahmegenerator gemäß Ausführungsformen der Offenbarung dar.
    • 46 stellt eine Beschleuniger-Kachel, umfassend ein Array von Verarbeitungselementen und eine lokale Extraktionssteuerung, gemäß Ausführungsformen der Offenbarung dar.
    • 47A-47C stellen eine lokale Extraktionssteuerung, die ein Datenpfadnetzwerk auslegt, gemäß Ausführungsformen der Offenbarung dar.
    • 48 stellt eine Extraktionssteuerung gemäß Ausführungsformen der Offenbarung dar.
    • 49 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 50 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar.
    • 51A ist ein Blockdiagramm, ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Offenbarung.
    • 51B ist ein Blockdiagramm, das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Offenbarung.
    • 52A ist ein Blockdiagramm, Felder für die generischen vektorfreundlichen Befehlsformate in 51A und 51B darstellend, gemäß Ausführungsformen der Offenbarung.
    • 52B ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats in 52A, die ein volles Opcode-Feld bilden, darstellend, gemäß einer Ausführungsform der Offenbarung.
    • 52C ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats in 52A, die ein Registerindexfeld bilden, darstellend, gemäß einer Ausführungsform der Offenbarung.
    • 52D ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats in 52A, die das Zusatzoperationsfeld 5150 bilden, darstellend, gemäß einer Ausführungsform der Offenbarung.
    • 53 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Offenbarung.
    • 54A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue (In-order) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Offenbarung darstellt.
    • 54B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines reihenfolgetreuen (In-order) Architekturkerns als auch eines reihenfolgeveränderten (Out-of-order) Ausgabe-/Ausführungs-Architekturkerns mit Registerumbenennung, in einen Prozessor einzuschließen, gemäß Ausführungsformen der Offenbarung darstellt.
    • 55A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetzwerk und mit seinem lokalen Teilsatz des Level-2-Caches (L2), gemäß Ausführungsformen der Offenbarung.
    • 55B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 55A gemäß Ausführungsformen der Offenbarung.
    • 56 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern haben kann, der eine integrierte Speichersteuerung haben kann und der integrierte Grafik haben kann, gemäß Ausführungsformen der Offenbarung.
    • 57 ist ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Offenbarung.
    • 58 ist ein Blockdiagramm eines spezifischeren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Offenbarung.
    • 59 ist ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Offenbarung.
    • 60 ist ein Blockdiagramm eines Systems-on-a-Chip (SoC) gemäß einer Ausführungsform der vorliegenden Offenbarung.
    • 61 ist ein Blockdiagramm, die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz abgesetzt darstellend, 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 sein können. In anderen Fällen sind wohl bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht einzutrüben.
  • Bezugnahmen in der Spezifikation auf „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. zeigen an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine Struktur oder Charakteristik umfassen kann, aber jede Ausführungsform muss nicht notwendigerweise das spezielle Merkmal, die Struktur oder Charakteristik umfassen. Darüber hinaus beziehen sich solche Phrasen nicht notwendigerweise auf die gleiche Ausführungsform. Ferner, wenn ein bestimmtes Merkmal, eine Struktur oder Charakteristik in Verbindung mit einer Ausführungsform beschrieben wird, wird davon ausgegangen, dass es im Wissen eines Fachmanns liegt, ein solches Merkmal, eine Struktur oder Charakteristik in Verbindung mit anderen Ausführungsformen umzusetzen, seien sie ausdrücklich beschrieben oder nicht.
  • Ein Prozessor (z. B. mit einem oder mehreren Kernen) kann Befehle (z. B. einen Thread von Befehlen) zum Operieren auf Daten ausführen, beispielsweise, um arithmetische, logische oder andere Funktionen durchzuführen. Beispielsweise kann Software eine Operation anfordern, und ein Hardwareprozessor (z. B. ein Kern oder Kerne davon) kann die Operation in Reaktion auf die Anforderung durchführen. Ein nicht einschränkendes Beispiel für eine Operation ist eine Mischoperation, um mehrere Vektorelemente einzugeben und einen Vektor mit mehreren Mischelementen auszugeben. In bestimmten Ausführungsformen wird eine Vielzahl von Operationen mit der Ausführung eines einzelnen Befehls erreicht.
  • Exascale-Leistung, z. B. wie vom Ministerium für Energie definiert, kann erfordern, dass die Gleitkomma-Punktleistung auf Systemebene 10^18 Gleitkomma-Operationen pro Sekunde (exaFLOPs) oder mehr innerhalb eines vorgegebenen (z. B. 20 MW) Leistungsbudgets übersteigt. Bestimmte Ausführungsformen hier sind auf ein räumliches Array von Verarbeitungselementen (z. B. einen auslegbaren räumlichen Beschleuniger (CSA, Configurable Spatial Accelerator) gerichtet, der auf Hochleistungsdatenverarbeitung (HPC; High Performance Computing), beispielsweise eines Prozessors, abzielt. Bestimmte Ausführungsformen eines räumlichen Arrays von Verarbeitungselementen (z. B. ein CSA) zielen auf die direkte Ausführung eines (oder mehrerer) Datenflussgraphen ab, um eine rechenintensive, jedoch energieeffiziente räumliche Mikroarchitektur zu erhalten, die herkömmliche Roadmap-Architekturen weit übersteigt.
  • Bestimmte Ausführungsformen von räumlichen Architekturen (z. B. die hier offenbarten räumlichen Arrays) sind eine energieeffiziente und hochleistungsfähige Weise, um Benutzeranwendungen zu beschleunigen. In bestimmten Ausführungsformen dient ein räumliches Array (z. B. mehrere miteinander durch ein (z. B. leitungsvermittelt) (z. B. Verbindungs-)Netzwerk gekoppelte Verarbeitungselemente) dazu, eine Anwendung zu beschleunigen, um, beispielsweise, irgendeinen Bereich eines Einzelstromprogramms auszuführen (z. B. schneller als ein Kern eines Prozessors) In bestimmten Ausführungsformen ist ein Maß der Effektivität einer räumlichen Architektur die Geschwindigkeit, mit der ein (z. B. zu beschleunigender) Bereich in diese hinein geladen werden kann, z. B. je länger es dauert, um den Bereich zu laden, desto größer muss der Bereich sein, um die Kosten des Ladens des Programms zu amortisieren. Wenn im Gegensatz dazu die Auslegungszeiten kurz sind, dann können kleinere Programmbereiche beschleunigt werden, z. B. die Anwendbarkeit der räumlichen Architektur erweiternd (z. B. Beschleuniger).
  • Bestimmte Ausführungsformen hier bieten Hardware und Techniken zum Bereitstellen von Bevorzugungsauslegung in einem räumlichen Array (z. B. räumliche Fabric-Struktur).
  • Bestimmte Ausführungsformen hier bieten Hardware und Techniken zum Fließbandverarbeitungs-Auslegung in einem räumlichen Array (z. B. räumliche Fabric-Struktur). Bestimmte Ausführungsformen hier nutzen (z. B. Bereichs-)Steuerung (z. B. Auslegungssteuerungen) und Datenflusssemantik (z. B. auf niedriger Ebene) eines räumlichen Arrays (z. B. eines auslegbaren räumlichen Arrays (CSA, Configurable Spatial Array), um einen fließbandverarbeiteten Auslegungseffekt zu erzeugen, der es vorher (z. B. frühzeitig) ausgelegten (z. B. Verarbeitungs-)Elementen des räumlichen Arrays ermöglicht, (z. B. unmittelbar) zu arbeiten zu beginnen, beispielsweise, bevor die Gesamtheit (z. B. Sektion) des räumlichen Arrays ausgelegt ist. Bestimmte Ausführungsformen hier können die effektive Latenz der Auslegung bis hinunter auf mehrere Zehn Nanosekunden verringern. In einer Ausführungsform kann die Auslegung zwei (z. B. separate) Operationen sein: die tatsächliche Auslegung und die (z. B. gleichzeitige) Extraktion einer vorherigen Auslegung (z. B. Zustand davon), die in das räumliche Array geladen ist (z. B. Fabric-Struktur), beispielsweise können diese Operationen während eines Kontextwechsels auftreten. Bestimmte Ausführungsformen hier erlauben, dass diese Operationen innerhalb eines räumlichen Arrays gleichzeitig auftreten können. Bestimmte Ausführungsformen hier nutzen ein oder mehrere Mikroprotokolle zur Auslegung und Extraktion, beispielsweise, wie nachfolgend Bezug nehmend auf 28, 29 und 37-44 erörtert.
  • Bestimmte Ausführungsformen hier bieten Techniken und Hardware (z. B. mikroarchitektonische Erweiterungen und/oder Definitionen), um Fließbandverarbeitung der Auslegungs- und/oder Extraktionsoperationen eines räumlichen Arrays zu gestatten. Bestimmte Ausführungsformen hier nutzen eine oder mehrere Steuerungen zum Koordinieren einer Wellenfront von Auslegungs- und Extraktionsbereichen über einem räumlichen Array. Bestimmte Ausführungsformen hier nutzen eine (z. B. Auslegungs- und/oder Extraktions-)Steuerung auf höherer Ebene zum Koordinieren von Steuerungen auf lokaler Ebene, um eine Wellenfront von Auslegungs- und Extraktionsbereichen über einem räumlichen Array zu erreichen. In einer Ausführungsform trennt eine Wellenfront logisch die neuen und alten (z. B. Programm-)Kontext, beispielsweise, ermöglichend, dass der neue Kontext unmittelbar ausgeführt werden kann. Bestimmte Ausführungsformen hier wandeln das, was ein serieller Prozess war (z. B. Extraktion, gefolgt von Auslegung) in einen fließbandverarbeiteten Prozess um, z. B. Verringern von Latenz um eine Größenordnung.
  • Bestimmte Ausführungsformen hier verringern die Zeitdauer, die nötig ist, um einen räumlichen Beschleuniger auszulegen (und/oder zu extrahieren), z. B. die rentable Beschleunigung von kleineren Codebereichen ermöglichend. Als ein Ergebnis kann die Leistung weiterer Programme verbessert und in stärkerem Maße verbessert werden.
  • Nachfolgendes umfasst auch eine Beschreibung der architektonischen Philosophie von Ausführungsformen eines räumlichen Arrays von Verarbeitungselementen (z. B. eines CSA) und bestimmter Merkmale davon. Wie bei jeder revolutionären Architektur kann die Programmierbarkeit ein Risiko darstellen. Zur Abschwächung dieses Problems wurden Ausführungsformen der CSA-Architektur zusammen mit einer Kompilier-Toolkette ausgestaltet, die ebenfalls unten erläutert wird.
  • EINLEITUNG
  • Exascale-Rechenziele können eine enorme Gleitkommaleistung auf Systemebene (z. B. 1 ExaFLOPs) innerhalb eines aggressiven Leistungsbudgets (z. B. 20 MW) erfordern. Die gleichzeitige Verbesserung der Leistung und Energieeffizienz der Programmausführung mit klassischen von Neumann-Architekturen ist jedoch schwierig geworden: reihenfolgeveränderte (Out-of-order) Planung, simultanes Multithreading, komplexe Registerdateien und andere Strukturen stellen Leistung bereit, jedoch mit hohen Energiekosten. Bestimmte Ausführungsformen hierin erreichen gleichzeitig die Leistungs- und Energieanforderungen. Exascale-Rechenenergie-Leistungsziele können sowohl einen hohen Durchsatz als auch einen geringen Energieverbrauch pro Operation erfordern. Bestimmte Ausführungsformen hierin stellen dies bereit, indem sie eine große Anzahl von niederkomplexen, energieeffizienten Verarbeitungs- (z. B. Rechen-)Elementen bereitstellen, die den Steuerungsaufwand bisheriger Prozessorausgestaltungen weitgehend beseitigt. Geleitet von dieser Beobachtung umfassen bestimmte Ausführungsformen hierin ein räumliches Array von Verarbeitungselementen, beispielsweise einen auslegbaren räumlichen Beschleuniger (CSA), der z. B. ein Array aus Verarbeitungselementen (PEs) umfasst, die durch eine Menge von leichtgewichtigen Gegendrucknetzwerken (z. B. Kommunikation) verbunden werden. Ein Beispiel für eine CSA-Kachel ist in 1 dargestellt. Bestimmte Ausführungsformen von Verarbeitungselementen (z. B. Rechenelementen) sind Datenflussoperatoren, z. B. mehrere Datenflussoperatoren, die nur Eingabedaten verarbeiten, wenn sowohl (i) die Eingabedaten beim Datenflussoperator eingegangen sind und (ii) Speicherplatz zum Speichern der Ausgabedaten verfügbar ist, weil z. B. andernfalls keine Verarbeitung erfolgt. Bestimmte Ausführungsformen (z. B. eines Beschleunigers oder CSA) benutzen keinen ausgelösten Befehl.
  • Grobkörnige räumliche Architekturen, wie etwa eine Ausführungsform des in 1 gezeigten auslegbaren räumlichen räumlichen Beschleunigers (CSA, Configurable Spatial Accelerator), sind die Kombination von leichtgewichtigen Verarbeitungselementen (PEs, Processing Elements (PEs)), verbunden durch ein Verbindungsnetzwerk. Programme, die, z. B., als Steuerdatenflussgraphen angesehen werden, können auf der Architektur durch Konfigurieren der PEs und des Netzwerks abgebildet werden. Im Allgemeinen können PEs als Datenflussoperatoren ausgelegt sein, z. B. nachdem alle Eingabeoperatoren bei den PE eingegangen sind, irgendeine Operation auftritt, und Ergebnisse abwärts (z. B. zu einem oder mehreren Ziel-PEs) in einer fließbandverarbeiteten Weise weitergeleitet werden. Datenflussoperatoren können sich entscheiden, eingehende Daten auf einer Pro-Operator-Basis zu verbrauchen.
  • Räumliche Architekturen können erforderlich sein, um sowohl die Systemprogramme (z. B. Betriebssystem (BS)) (z. B. Bevorzugungen auf Systemebene) und Benutzerprogramme (z. B. Bevorzugung auf Benutzerebene) vor bösartigen Codes zu schützen. In einer Ausführungsform multiplext ein leitungsvermitteltes Verbindungsnetzwerk eine räumliche Architektur auf mehrere Benutzerprogramme. Teile der räumlichen Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) können unterschiedlichen Programmen auf Benutzerebene zur exklusiven Verwendung gegeben werden. Allerdings kann Unterstützen eines solchen Multiplexings auf mehrere Programme (z. B. Threads von jedem Programm) Probleme auf Systemebene einbringen: z. B. Programme, die voreinander geschützt sind, sodass ein Programm die Operation von anderen Programmen, die sich in der gleichen Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) befinden, nicht beobachten oder damit interferieren kann. Solche Operationen können als ein Teil von einem (z. B. auf Systemebene) bevorzugten Programms, wie etwa eines Betriebssystems auftreten. Bestimmte Ausführungsformen dieser Offenbarung bieten direkte Auslegung einer Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) auf Benutzerebene, was Auslegungsmehraufwand wesentlich verringern kann. In bestimmten Ausführungsformen umfasst ein räumliches Array (z. B. ein leitungsvermitteltes Verbindungsnetzwerk davon) (z. B. eines CSA) eine bevorzugte Auslegung (z. B. Bevorzugungsmodus), beispielsweise, um Auslegungsbits zu laden, die von der Modifikation auf Benutzerebene geschützt sind. Bestimmte Ausführungsformen hier erweitern räumliche Fabric-Strukturen mit Bevorzugungssteuerungsschaltungsanordnungen, die z. B. verwendet werden, um Schutzmechanismen in einer räumlichen Fabric-Struktur umzusetzen. Beispielsweise können Prozessidentifikationswerte (Prozes-IDs) unter Verwendung unserer Bevorzugungssteuerungsschaltungsanordnungen in die Fabric-Struktur (z. B. Speicherschnittstelle) geladen werden. Bestimmte Ausführungsformen hier erlauben die Partitionierung einer Fabric-Struktur (z. B. CSA) unter Verwendung von Bevorzugungsbits in der Fabric-Struktur (z. B. in der Verbindung selbst), z. B. unter Verwendung eines Bevorzugungsmodus einer Auslegungssteuerung. Bestimmte Ausführungsformen hier bieten Unterstützung für Bevorzugungen (z. B. eine bevorzugte Auslegung). Eine Auslegungssteuerung, die den Bevorzugungsmodus setzt oder in diesen versetzt wird, kann bevorzugten Programmen, wie etwa einem Betriebssystem, ermöglichen, ein oder mehrere spezielle Auslegungsbits in der Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) zu setzen, die z. B. Funktionen auf einer höheren Ebene, wie etwa Schutz, steuern. Bestimmte Ausführungsformen hier setzen auch Schutz in einer gemeinsam genutzten Fabric-Struktur um. Beispielsweise bieten bestimmte Ausführungsformen hier Bevorzugungsmodus zum Setzen eines logischen (z. B. Daten-treten-nicht-über-)Bereichs, der in die Hardware (z. B. Auslegungssteuerung und Fabric-Struktur) festverdrahtet ist, um z. B. zu verhindern, dass Signale zwischen Programmbereichen auf Benutzerebene übertreten, beispielsweise im Gegensatz zu einem weichen Schutz, der in ein feldprogrammierbares Gate-Array (FPGA) ausgelegt ist. Bestimmte Ausführungsformen hier sind auf räumliche Architekturen gerichtet, die spezielle Hardware (z. B. Auslegungs-(z. B. steuerungs-)Schaltungsanordnung) verwenden, um Schutz zu bieten. Bestimmte Ausführungsformen hier fügen keinen signifikanten Leistungsmehraufwand zur Auslegungszeit hinzu. Bestimmte Ausführungsformen hier erfordern nicht, dass Programmieren in einem bevorzugten Kontext erfolgt, z. B. selbst, wenn die Auslegung direkten Zugriff auf physischen Speicher hat. Bestimmte Ausführungsformen hier trennen für den Benutzer sichtbare Architektur von bevorzugter Architektur, um z. B. die vertrauenswürdige Codebasis zu minimieren und echte Neuauslegung auf Benutzerebene zu gestatten. Bestimmte Ausführungsformen hier bieten eine Architektur zum Trennen dieser Auslegungen. Ein weiterer Vorteil dieser Trennung kann die Ermöglichung einer direkten Auslegung der Fabric-Struktur auf Benutzerebene sein, was z. B. Auslegungsmehraufwand verringert. Bestimmte Ausführungsformen hier sind auf CSA-Hardware gerichtet, die sich selbst und gutartige Benutzerprogramme gegen ein oder mherere bösartige Benutzerprogramme verteidigt. Bestimmte Ausführungsformen hier erlauben einen einzelnen Auslegungsschritt zum Setzen der Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) für (z. B. alle) nachfolgenden Auslegungen, z. B. deutlich den Aufwand von Schutz im Hinblick auf die Auslegungszeit verringernd. Bestimmte Ausführungsformen hier differenzieren zwischen einer Auslegung auf Benutzerebene und einer bevorzugten Auslegung. Bestimmte Ausführungsformen hier bieten hardwaregeschützte Bevorzugungsauslegungen, die z. B. an keinem Punkt für das Benutzerprogramm sichtbar sind. Bestimmte Ausführungsformen hier erlauben einem räumlichen Array (z. B. CSA), einen Bevorzugungsmodus zu nutzen, um sicher innerhalb eines gemeinsam genutzten Speichersystems teilzunehmen. Bestimmte Ausführungsformen hier erlauben einem räumlichen Array (z. B. CSA), einen Bevorzugungsmodus zu nutzen, um Teile der Auslegung des räumlichen Array (z. B. gemäß einem Datenflussgraphen ausgelegt) zu schützen und/oder Auslegung auf Benutzerebene von anderen Teilen des räumlichen Arrays zu ermöglichen, um z. B. die Latenz dieser Operationen zu verringern.
  • Zusätzlich oder alternativ erweitern bestimmte Ausführungsformen hier die Fähigkeiten eines räumlichen Arrays (z. B. CSA), um, beispielsweise, fließbandverarbeitete Auslegung(en) und Extraktion(en) einzuschließen, im Gegensatz dazu, dass diese Operationen serialisiert werden. Bestimmte Operatoren, wie etwa die, die unkonditionale Evaluierung von arithmetischen Ausdrücken behandeln, können alle eingehenden Daten verbrauchen. Allerdings ist es manchmal für Operatoren hilfreich, einen Zustand (z. B. den Ausführungskontext) zu erhalten, beispielsweise bei einer Akkumulationsoperation. In einer Ausführungsform wird der aktuelle Zustand gespeichert, bevor ein Kontextwechsel durchgeführt wird.
  • Ein Kontextwechsel kann sich allgemein auf den Prozess des Speicherns und Wiederherstellens des Zustands (insbesondere des Ausführungskontexts) einer Operation (z. B. eines Prozesses oder Threads) beziehen, sodass die Ausführung zu einer späteren Zeit am gleichen Punkt wiederaufgenommen werden kann. Bestimmte Ausführungsformen hier erweitern die Fähigkeiten eines räumlichen Arrays (z. B. CSA), um, beispielsweise, fließbandverarbeitete Auslegung(en) und Extraktion(en) einzuschließen, im Gegensatz dazu, dass diese Operationen serialisiert werden. Bestimmte Ausführungsformen hier verringern die wahrgenommene Latenz eines Kontextwechsels (beispielsweise von wenigen Hundert Zyklen auf eine effektive Latenz von einigen Zehn Zyklen, z. B. einer Verringerung der Größenordnung).
  • 1 stellt eine Beschleuniger-Kachel 100 als Ausführungsform eines räumlichen Arrays von Verarbeitungselementen, gemäß Ausführungsformen der Offenbarung dar. Die Beschleuniger-Kachel 100 kann ein Teil einer größeren Kachel sein. Die Beschleuniger-Kachel 100 führt einen oder mehrere Datenflussgraphen aus. Ein Datenflussgraph kann sich im Allgemeinen auf eine explizit parallele Programmbeschreibung beziehen, die bei der Kompilierung von sequentiellen Codes entsteht. Bestimmte Ausführungsformen hier (z. B. CSAs) ermöglichen, dass Datenflussgraphen direkt auf dem CSA-Array ausgelegt werden, z. B. anstatt in sequentielle Befehlsströme umgewandelt zu werden. Bestimmte Ausführungsformen erlauben einer ersten (z. B. einem Typ von) Datenflussoperation, durch ein oder mehrere Verarbeitungselemente (PEs, Processing Elements) des räumlichen Arrays durchgeführt zu werden und, zusätzlich oder alternativ dazu, einer zweiten (z. B. unterschiedlichen, einem Typ von) Datenflussoperation, durch eine oder mehrere Netzwerkkommunikationsschaltungen (z. B. Endpunkte) des räumlichen Arrays durchgeführt zu werden.
  • Die Ableitung eines Datenflussgraphen aus einem sequentiellen Kompilierungsfluss ermöglicht es Ausführungsformen eines CSA, bekannte Programmiermodelle zu unterstützen und (z. B. ohne Verwendung einer Arbeitstabelle) einen existierenden Hochleistungsrechencode (HPC) direkt auszuführen. Die CSA-Verarbeitungselemente (PE) können energieeffizient sein. In 1 kann die Speicherschnittstelle 102 mit einem Speicher (z. B. Speicher 202 in 2) gekoppelt sein, um es der Beschleuniger-Kachel 100 zu ermöglichen, auf Daten des Speichers (z. B. Off-Die) zuzugreifen (z. B. diese zu laden und/oder zu speichern). Die dargestellte Beschleuniger-Kachel 100 ist ein heterogenes Array, das aus verschiedenen Arten von PEs besteht, die über ein Verbindungsnetzwerke 105 miteinander gekoppelt sind. Die Beschleuniger-Kachel 100 kann ein oder mehrere ganzzahlige arithmetische PEs, arithmetische Gleitkomma-PEs, Kommunikationsschaltungsanordnungen (z. B. Netzwerkdatenfluss-Endpunktschaltungen) und Speicherung in der Fabric-Struktur, z. B. als Teil eines räumlichen Arrays von Verarbeitungselementen 101 umfassen. Die Datenflussgraphen (z. B. kompilierte Datenflussgraphen) können über die Beschleuniger-Kachel 100 für die Ausführung gelegt werden. In einer Ausführungsform behandelt, für einen bestimmten Datenflussgraphen, jede PE nur eine oder zwei (z. B. Datenfluss-)Operationen des Graphen. Das PE-Array kann heterogen sein, z. B. derart, dass kein PE die volle CSA-Datenflussarchitektur unterstützt und/oder eine oder mehrere PEs programmiert sind (z. B. benutzerdefiniert), um nur einige wenige, aber hocheffiziente Operationen durchzuführen. Bestimmte Ausführungsformen hier ergeben somit einen Prozessor oder Beschleuniger mit einem Array aus Verarbeitungselementen, das im Vergleich zu Roadmap-Architekturen rechenintensiv ist und dennoch eine Erhöhung der Energieeffizienz und Leistung in Bezug auf bestehende HPC-Angebote um etwa eine Größenordnung erreicht.
  • Bestimmte Ausführungsformen hier bieten Leistungserhöhungen von paralleler Ausführung innerhalb eines (z. B. dichten) räumlichen Arrays von Verarbeitungselementen (z. B. CSA), wo jedes genutzte PE seine Operationen gleichzeitig durchführen kann, z. B. wenn Eingabedaten verfügbar sind. Die Effizienzanstiege können aus der Effizienz jedes PE resultieren, z. B. wenn jede PE-Operation (z. B. Verhalten) einmal pro Auslegungsschritt (z. B. Mapping) fixiert wird und die Ausführung beim lokalen Eingehen von Daten am PE erfolgt, z. B. ohne Berücksichtigen einer anderen Fabric-Strukturaktivität. In bestimmten Ausführungsformen ist ein PE ein (z. B. jeweils einzelner) Datenflussoperator, z. B. ein Datenflussoperator, der nur auf Eingabedaten operiert, wenn sowohl (i) die Eingabedaten beim Datenflussoperator eingegangen sind als auch (ii) Speicherplatz zum Speichern der Ausgabedaten verfügbar ist, weil z. B. andernfalls keine Operation erfolgt.
  • Bestimmte Ausführungsformen hier umfassen ein räumliches Array von Verarbeitungselemente als eine energieeffizente und hochleistungsfähige Weise zum Beschleunigen von Benutzeranwendungen. In einer Ausführungsform wird ein bzw. werden mehrere räumliche(s) Array(s) über einen seriellen Prozess ausgelegt, bei dem die Latenz der Auslegung vollständig über ein globales Zurücksetzen exponiert wird. Einiges davon kann von der RTL-Semantik (Register-Transfer Level, Register-Übertragungsebene) eines Arrays (z. B. eines feldprogrammierbaren Gate-Arrays (FPGA)) herrühren. Ein Programm zum Ausführen auf einem Array (z. B. FPGA) kann von einer fundamentalen Vorstellung von Zurücksetzen ausgehen, bei dem von jedem Teil der Ausgestaltung erwartet wird, dass er betriebsbereit ist, nachdem er aus dem Auslegungsrücksetzen heraus kommt. Bestimmte Ausführungsformen hier bieten ein Array im Datenflussstil, in dem PEs (z. B. alle) einem Flusssteuerungs-Mikroprotokoll entsprechen. Dieses Mikroprotokoll kann den Effekt einer verteilten Initialisierung erzeugen. Dieses Mikroprotokoll kann einen fließbandverarbeiteten Auslegungs- und Extraktionsmechanismus ermöglichen, z. B. mit regionaler (z. B. nicht im gesamten Array) Koordinierung. Bestimmte Ausführungsformen hier bieten einen Kontextwechsel in einer Datenflussarchitektur.
  • Die dargestellte Beschleuniger-Kachel 100 umfasst eine Auslegungssteuerung 104 (z. B. auf Kachelebene), z. B. zum Auslegen von einem oder mehreren der Verarbeitungselemente (PEs) und/oder des Netzwerks (z. B. Verbindungsnetzwerk 105) zwischen den PEs, z. B. gemäß einem Eingabedatenflussgraphen. Zusätzlich oder alternativ dazu umfasst die Beschleuniger-Kachel 100 eine oder mehrere (z. B. lokale) Auslegungssteuerungen (106, 108). Beispielsweise kann jede lokale Auslegungssteuerung eine (z. B. entsprechende) Teilmenge der Verarbeitungselemente und/oder das Netzwerk auslegen (z. B. Eingeben und/oder Ausgeben in diese Teilmenge der Verarbeitungselemente). Jede lokale (z. B. Auslegungs-)Steuerung kann unabhängig arbeiten. In einer Ausführungsform umfasst eine Auslegungssteuerung die Fähigkeiten zum Setzen der Bevorzugungsebene (z. B. für bestimmte (oder alle) der PEs und das Netzwerk zwischen den PEs). In einer Ausführungsform umfasst eine Auslegungssteuerung die Fähigkeiten zur Extraktion, z. B. eine Extraktionssteuerung. In einer Ausführungsform werden eine Auslegungssteuerung und eine separate Extraktionssteuerung genutzt. In einer Ausführungsform sitzen lokale Steuerungen auf einem Netzwerk, durch das sie mit den höheren Ebenen der Steuerhierarchie, Speicher und/oder miteinander, beispielsweise, über das Netzwerk im gestrichelten Kasten aus 37 kommunizieren.
  • In einer Ausführungsform ist eine lokale (z. B. Auslegungs-)Steuerung verantwortlich für das Setzen der Bevorzugungsebene der Komponenten (z. B. ein leitungsvermitteltes Verbindungsnetzwerk) und/oder für Arbeit (z. B. auf niedriger Ebene) von Laufzeitdiensten, wie (z. B. PE-)Auslegung und Extraktion. Jede lokale Steuerung kann für eine Teilmenge (z. B. eine kleine Anzahl) von PEs verantwortlich sein, wie in 1 und 4A-5J dargestellt. 1 kann in zwei Teilmengen von PEs unterteilt werden, wie z. B. durch Auslegungssteuerung 106 bzw. Auslegungssteuerung 108 verwaltet.
  • Wie nachfolgend gezeigt, kann ein Ausführungsplan für fließbandverarbeitete Dienste drei Schritte umfassen:
    • Auslegen (und z. B. Setzen einer Bevorzugungsebene), Puffern und Extraktion. In ähnlicher Weise erfordert die Steuerungshardware (z. B. Steuerung(en)) Kenntnis und Koordinierung dieser drei Schritte. Ein beispielhafter Steuerfluss ist wie folgt: jede lokale Steuerung kann eine Liste der Steuerungen enthalten, die physisch an diese angrenzend sind. Ein Kontext- (z. B. Zustands-)Übergang kann beginnen, wenn eine lokale Steuerung eine Nachricht von jeder dieser lokalen Steuerungen, die diesem vorhergehen, empfängt. Diese lokale Steuerung kann dann seine aktuelle Operation beginnen. Wenn die Operation abschließt, kann ihre Kontext (z. B. Zustand) übergehen, und sie kann eine Nachricht an jede nachfolgende Steuerung senden. In einer Ausführungsform folgen die lokalen Steuerungen vier Zuständen: Run (Ausführen), Extract (Extrahieren), Inactive (Inaktiv) und Configure (Auslegen). „Inactive“ kann, beispielsweise, durch Starten des „Configure“-Mikroprotokolls erhalten werden, das die PEs deaktiviert, kann aber nicht unmittelbar die Auslegungsinformationen bereitstellen, dadurch z. B. die PEs in einem deaktivierten Zustand haltend.
  • Fließbandverarbeitete Laufzeitdienste können Koordinierung zwischen einer Steuerung auf höherer Ebene (z. B. Kachelebene) und der für die Auslegung verantwortlichen lokalen Steuerung umfassen. Um diese Kommunikationszeit zu verkürzen und das Pipelineverhalten zu verbessern, umfassen bestimmte Ausführungsformen hier eine Mikroarchitektur zum Unterstützen des direkten Wieterleitens von (z. B. Auslegungs-, Extraktions und/oder Abschluss-)Befehlen unter den lokalen Steuerungen. Dies kann der bzw. den Steuerung(en) auf höherer Ebene gestatten, einen koordinierten Auslegungs- und Extraktionsgraphen über die lokalen Steuerungen zu legen, der verwendet werden kann, um die Wellenfront dynamisch zu konstruieren.
  • Bestimmte Ausführungsformen hier bieten paradigmaverschobene Leistungsniveaus und enorme Verbesserungen in der Energieeffizienz über eine breite Klasse bestehender Einzelstrom- und Parallelprogramme, z. B. aller bei gleichzeitiger Beibehaltung vertrauter HPC-Programmiermodelle. Bestimmte Ausführungsformen hier können auf HPC abzielen, sodass die Gleitkomma-Energieeffizienz extrem wichtig wird. Bestimmte Ausführungsformen hier liefern nicht nur überzeugende Leistungsverbesserungen und Energieeinsparungen, sie liefern diese Vorteile auch für bestehende HPC-Programme, die in Mainstream-HPC-Sprachen und für Mainstream-HPC-Frameworks geschrieben sind. Bestimmte Ausführungsformen der Architektur hier (z. B. unter Berücksichtigung der Kompilierung) stellen mehrere Erweiterungen bei der direkten Unterstützung der von modernen Kompilierern erzeugten internen Steuerdatenflussrepräsentationen bereit. Bestimmte Ausführungsformen hierin sind direkt an einen CSA-Datenfluss-Kompilierer gerichtet, der z. B. C-, C++- und Fortran-Programmiersprachen akzeptieren kann, um auf eine CSA-Architektur abzuzielen.
  • 2 stellt einen Hardwareprozessor 200, der mit einem Speicher 202 gekoppelt (z. B. damit verbunden) ist, gemäß Ausführungsformen der Offenbarung dar. In einer Ausführungsform sind der Hardwareprozessor 200 und der Speicher 202 ein Datenverarbeitungssystem 201. In bestimmen Ausführungsformen sind einer oder mehrere der Beschleuniger ein CSA gemäß dieser Offenbarung. In bestimmten Ausführungsformen sind einer oder mehrere der Kerne in einem Prozessor die hierin offenbarten Kerne. Der Hardwareprozessor 200 (z. B. jeder Kern davon) kann einen Hardware-Decodierer (z. B. Decodiereinheit) und eine Hardware-Ausführungseinheit aufweisen. Der Hardwareprozessor 200 kann Register aufweisen. Es sei angemerkt, dass die Figuren hierin ggf. nicht alle Datenkommunikationskopplungen (z. B. Verbindungen) darstellen. Ein Durchschnittsfachmann wird zu schätzen wissen, dass dies gewisse Details in den Figuren nicht verschleiert. Es sei darauf hingewiesen, dass ein Doppelpfeil in den Figuren keine Zweiwegekommunikation erfordert, z. B. kann er eine Einwegekommunikation (z. B. zu oder von dieser Komponente oder Vorrichtung) angeben. Jede oder alle Kombinationen von Kommunikationspfaden können in bestimmten Ausführungsformen hierin verwendet werden. Der dargestellte Hardwareprozessor 200 weist mehrere Kerne (O bis N, wobei N 1 oder mehr sein kann) und Hardwarebeschleuniger (O bis M, wobei M 1 oder mehr sein kann) gemäß Ausführungsformen der Offenbarung auf. Der Hardwareprozessor 200 (z. B. der/die Beschleuniger und/oder Kern(e) davon) können mit dem Speicher 202 (z. B. Datenspeichervorrichtung) gekoppelt sein. Der Hardware-Decodierer (z. B. des Kerns) kann einen (z. B. einzelnen) Befehl (z. B. 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. Makrobefehl) zum Durchführen einer Operation oder Operationen ausführen.
  • Abschnitt 1 unten erörtert Bevorzugungsauslegung und Auslegung sowie (z. B. gleichzeitige) Extraktion einer vorherigen Auslegung (z. B. Zustand davon). Abschnitt 2 unten offenbart Ausführungsformen der CSA-Architektur. Insbesondere sind neuartige Ausführungsformen der Integration von Speicher innerhalb des Datenfluss-Ausführungsmodells offenbart. Abschnitt 3 taucht in die mikroarchitektonischen Details der Ausführungsformen eines CSA ein. In einer Ausführungsform ist das Hauptziel eines CSA die Unterstützung von vom Kompilierer erzeugten Programmen. Abschnitt 4 unten untersucht die Ausführungsformen einer CSA-Kompilierungstoolkette. Die Vorteile der Ausführungsformen eines CSA werden mit anderen Architekturen bei der Ausführung von kompilierten Codes in Abschnitt 5 verglichen. Schließlich wird die Leistung der Ausführungsformen einer CSA-Mikroarchitektur in Abschnitt 6 erläutert, weitere CSA-Details werden in Abschnitt 7 erläutert und eine Zusammenfassung in Abschnitt 8 bereitgestellt.
  • BEVORZUGUNGSAUSLEGUNG SOWIE AUSLEGUNG UND EXTRAKTION EINER VORHERIGEN AUSLEGUNG
  • In bestimmten Ausführungsformen kommunizieren Verarbeitungselemente (PEs, Processing Elements) unter Verwendung von dedizierten virtuellen Schaltungen, die durch statisches Auslegen eines (z. B. leitungsvermittelten) Kommunikationsnetzwerks, wie beispielsweise hier erörtert, gebildet werden. Diese virtuellen Schaltungen können flussgesteuert und vollständig gegengedrückt sein, z. B. so, dass ein PEs anhält, wenn entweder die Quelle keine Daten aufweist oder sein Ziel voll ist. Bei Laufzeit können Daten durch die PEs fließen, die den gemappten Datenflussgraphen umsetzen (z. B. gemappter Algorithmus). Beispielsweise können Daten von einem Speicher durch das (z. B. den Fabric-Strukturbereich von einem) räumliche Array von Verarbeitungselementen und eingeströmt und dann zurück herausgeströmt werden.
  • Eine solche Architektur kann eine bemerkenswerte Leistungseffizienz im Vergleich zu herkömmlichen Mehrkernprozessoren erreichen: die Berechnung, z. B. in der Form von PEs kann einfacher und zahlreicher als Kerne sein und die Kommunikation direkt sein, z. B. im Gegensatz zu einer Erweiterung des Speichersystems. In bestimmten Ausführungsformen umfasst ein räumliches Array (z. B. CSA) einen bevorzugten Auslegungsmodus (z. B. Setzen von Komponenten in einen ersten Modus oder einen zweiten Modus). Diese Modi können durch ein Bevorzugungsprogramm, wie etwa ein Betriebssystem, aufgerufen werden, um Sicherheitsmodi innerhalb des räumlichen Arrays (z. B. leitungsvermitteltes Verbindungsnetzwerk davon) zu modifizieren, um beispielsweise im Falle von Mehrfachprogrammierung dynamische Partitionen im räumlichen Array zu setzen. Zum Auslegen eines räumlichen Arrays in einen ersten Modus oder einen zweiten Modus kann das Bevorzugungsprogramm eine Bevorzugungsschnittstelle verwenden, beispielsweise eine speicherabgebildete Schnittstelle (z. B. ein Auslegungsraumregister (CSR, Configuration Space Register) oder Decodieren eines Befehls in einen decodierten Befehl und Ausführen des decodierten Befehls, um das räumliche Array zu veranlassen, in den Bevorzugungsmodus zu wechseln oder diesen zu verlassen (z. B. Decodieren und Ausführen des Befehls auf einem mit dem CSA gekoppelten Prozessorkern). Eine Bevorzugungsschnittstelle kann geschützt sein, z. B. durch Verwenden eines virtuellen Speicherübersetzungsmechanismus oder durch den Bevorzugungsmodus eines Prozessors (z. B. Kern). Bei Aufrufunf des Bevorzugungsmodus kann eine Auslegungssteuerung (z. B. Auslegungssteuerung auf Kachelebene 104) die entsprechenden Auslegungsnachrichten an eine lokale Auslegungssteuerung (z. B. Auslegungssteuerung 106 und Auslegungssteuerung 108) senden, die dann eine bevorzugte Auslegung auf ihren Unterregionen aufrufen. In Abhängigkeit von der Auswahl des Mikroprotokolls (z. B. unten beschrieben), kann die Speicherschnittstelle 102 zusätzliche virtuelle Speicherübersetzungsmechanismen verwenden, um beliebige bevorzugte Adressräume, die vom aufrufenden Programm verwendet werden, zu unterstützen. In einer Ausführungsform wird, um bevorzugte Auslegung zu unterstützen, das Auslegungsmikroptokoll erweitert, um den Steuerkanal einzuschließen: CFG_START_PRIVILEGE, wie z. B. Bezug nehmend auf 39 weiter unten erörtert.
  • Ein Signal auf dem Kanal CFG_START_PRIVILEGE kann (z. B. den PEs und/oder dem Verbindungsnetzwerk (z. B. leitungsvermitteltes Verbindungsnetzwerk)) den Beginn des Bevorzugungsmodus (z. B. für eine Bevorzugungsauslegung) anzeigen und/oder Bevorzugungsbits oder Bitspeicher (z. B. in einem Bevorzugungsregister) anzeigen, dass sie eingehende Werte gemäß dem Auslegungsmikroprotokoll akzeptieren sollen. In anderer Hinsicht kann es einem Signal auf dem Kanal CFG_START ähneln. Unter Voraussetzung dieser Konzepte ist es mögliche, mehrere Stile von bevorzugter Auslegung umzusetzen.
  • Separate bevorzugte Auslegung
  • In bestimmten Ausführungsformen ist bevorzugte Auslegung (z. B. Bevorzugungsmodus) separat von der Benutzermodusauslegung. Die ausgelegten Steuerungsbits werden im Auslegungsmikroprotokoll verwendet, um z. B. Bevorzugungsmodus oder Nicht-Bevorzugungsmodus anzuzeigen. Bestimmte Ausführungsformen können einen Wert auf dem Kanal CFG_START_PRIVILEGE bestätigen, um anzuzeigen, dass es das oder die Bevorzugungsbit(s) ist bzw. sind (z. B. Bevorzugungsauslegungsbit oder -bits) das modifiziert wird bzw. die modifiziert werden. Bezug nehmend auf 1 können eine oder mehrere der Auslegungssteuerungen (z. B. Speicher darin) angewiesen werden (z. B. über eine Bevorzugungsschnittstelle, wie z. B. hier erörtert), die Beschleuniger-Kachel 100 (z. B. PEs und/oder Verbindungsnetzwerk 105) in einen Bevorzugungsmodus oder in einen Nicht-Bevorzugungsmodus zu setzen, um z. B. das bzw. die Bevorzugungsbit(s) (z. B. Bevorzugungsauslegungsbit oder -bits) zu aktualisieren, wenn im Bevorzugungsmodus befindlich.
  • In einer Ausführungsform ist die Bevorzugungsauslegung zerstörungsfrei gegenüber bestehenden Auslegungsbits (z. B. Auslegung für einen Datenflussgraphen), die nicht das bzw. die Bevorzugungsbit(s) sind, um einen ersten Modus oder einen zweiten Modus anzuzeigen. In einer Ausführungsform wird Auslegung auf einen neuen Modus (z. B. zwischen einem ersten Modus unter Verwendung des bzw. der Bevorzugungsbits zum Blocken von Kommunikationen auf dem Netzwerk und einen zweiten Modus, das bzw. die Bevorzugungsbit(s) nicht verwendend, um Kommunikationen auf dem Netzwerk zu blocken) bei Laufzteit aufgerufen. In einer Ausführungsform, wenn in den Auslegungsmodus gewechselt wird, werden die lokalen Netzwerkmultiplexer (wie z. B. in 22A-22B) geschwungen, um einen Pfad zwischen einer Auslegungssteuerung und dem bzw. den Auslegungsziel(en), z. B. Auslegungsbit- oder Bitsspeicher, zu bilden. In bestimmten Ausführungsformen, wenn der Zustand des lokalen Multiplexers erhalten wird, ist keine zusätzliche Auslegung erforderlich, und z. B. die Mux kehren zu ihrer ursprünglichen Auslegung zurück, nachdem ihre Verwendung bei der Auslegung (z. B. Bereitstellen eines Pfades zwischen Auslegungssteuerung und den PEs (z. B. Speichern von Operationsauslegungswertem, z. B. im Operationsauslegungsregister 2419 in 24) abgeschlossen ist. In bestimmten Ausführungsformen ist es möglich, Bevorzugungsbits zu setzen, ohne ein laufendes (z. B. Benutzer-)Programm neu auszulegen und/oder anzuhalten. In einer anderen Ausführungsform umfasst eine Bevorzugungsauslegung (z. B. Setzen des Bevorzugungsmodus) Versetzen des CSA (z. B. Beschleuniger-Kachel) in einen Nicht-Operationszustand (No-Op), bevor die Auslegung versucht wird. Ein Prozessor (auf dem z. B. ein BS läuft) kann ein CSA (z. B. Beschleuniger-Kachel) auffordern, einige oder alle CSA (z. B. PEs und/oder Verbindung) in einen Bevorzugungsmodus zu versetzen, z. B. bevor eine bevorzugte Aufgabe zur Ausführung an das CSA übergeben wird.
  • Vereinheitlichte bevorzugte Auslegung
  • In einer Ausführungsform erfolgt Bevorzugungsauslegung von der Benutzerauslegung getrennt. In diesem Fall kann der Benutzerteil der bevorzugten Auslegung eine Nicht-Operationsauslegung (No-Op) sein. Während nachfolgender Benutzerauslegungen wird die bevorzugte Auslegung (z. B. Setzen in den Bevorzugungsmodus) nicht verwendet, und die Auslegung in Verbindung mit den Bevorzugungsbits kann entweder ignoriert oder nicht in das Benutzerauslegungsformat (z. B. binär) eingeschlossen werden. Im letzteren Fall kann der Bevorzugungsauslegungszustand ein Zustandsbit umfassen, um seine Auslegung automatisch zu umgehen.
  • 3 stellt eine Hardwareprozessor-Kachel 300, umfassend einen Beschleuniger 302, gemäß Ausführungsformen der Offenbarung dar. Der Beschleuniger 302 kann ein CSA gemäß dieser Offenbarung sein. Die Kachel 300 weist mehrere Cache-Bänke (z. B. Cache-Bank 308) auf. Abfrage-Adressdatei-Schaltungen (RAF, Request Address File) 310 können eingeschlossen sein, z. B. wie unten in Abschnitt 3.2 erläutert. ODI kann sich auf eine On-Die-Verbindung beziehen, z. B. eine Verbindung, die sich über den gesamten Chip erstreckt, der alle Kacheln miteinander verbindet. OTI kann sich auf eine On-Tile-Verbindung beziehen, die sich z. B. über eine Kachel erstreckt, die z. B. die Cache-Bänke auf der Kachel miteinander verbindet. CSA kann eine bevorzugte Auslegung erlauben, wo z. B. eines oder mehrere Auslegungsbits (z. B. Bevorzugungssbits) verwendet werden, um eine Grenze zu setzen, wo Daten zwischen zwei Benutzeranwendungen (z. B. Prozess-ID Null (PID 0) und Prozess-ID Eins (PID 1) sich nicht kreuzen, z. B. innerhalb des Beschleunigers (z. B. CSA) 302 und/oder RAFs 310. Die gewellte Linie ist aufgenommen, um allgemein die Grenze anzuzeigen, und die tatsächlichen Grenzen zwischen den Regionen (z. B. Anwendungen) folgen möglicherweise nicht diesem exakten Muster.
  • Umsetzen von Schutz unter Partitionen
  • In bestimmten Ausführungsformen umfasst Schutz (z. B. im Bevorzugungsmodus) die Verteidigung von potenziell gemeinsam genutzten Ressourcen. In Prozessoren kann dieser Schutz auf Zustand und, insbesondere, das Speicherteilsystem eingegrenzt werden. Dieser Schutz kann durch virtuelle Speicherübersetzungsmechanismen umgesetzt werden. Allerdings besteht zusätzlich zum Speicherschutz für räumliche Arrays (z. B. CSA) möglicherweise eine Notwendigkeit des Schutzes der Kommunikation innerhalb der Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) selbst. In 4 und 21 kann, als Beispiele, das lokale leitungsvermittelte Kommunikationsnetzwerk (z. B. erstes Netzwerk einschließlich Weiche 2110 und zweites Netzwerk einschließlich Weiche 2111 in 21) eine Kachel, oder sogar einen gesamten Die, überspannen. Wenn zwei (z. B. Benutzer-)Programme die gleiche Kachel oder den gleichen Die gemeinsam nutzen, kann eines oder beide Programme (z. B. auf dem räumlichen Array durchgefüht) die Kommunikationen des anderen beobachten, z. B. durch Abtasten eines gemeinsam genutzten Kommunikationskanals oder gemeinsam genutzter Ressourcen.
  • Zum Umsetzen des Schutzes bieten bestimmte Ausführungsformen hier Bevorzugungsbits (z. B. Bevorzugungszustandsbits) an bestimmten Punkten in der Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk), z. B. entsprechend partitionierbaren Bereichen. Die partitionierbaren Bereiche können grob oder fein sein, z. B. abhängig vom Ausmaß des Mehraufwands, der mit einer bestimmten Ausgestaltung verbunden ist. Beispielsweise ist eine Zwei-Wege-Partition in 4 gezeigt durch Platzieren von Bevorzugungsbit(s) (z. B. Bevorzugungszustandsbit(s)) (z. B. im Auslegungsspeicher (z. B. Register) 410 zusammen mit anderen Auslegungsbits oder in einem separaten Bevorzugungsspeicher (z. B. Bevorzugungszustandsregister) 412) bei (z. B. einem bestimmten oder jedem) lokalen Netzwerk, das entlang der welligen Linie kreuzt. Die gewellte Linie ist aufgenommen, um allgemein die Grenze anzuzeigen, und die tatsächlichen Grenzen zwischen den Regionen (z. B. Anwendungen) folgen möglicherweise nicht diesem exakten Muster. In einer Ausführungsform ist das Bevorzugungsbit auf einen Wert (z. B. logische Eins oder logische Null) gesetzt, um anzuzeigen, dass keine Kommunikation diesen Punkt kreuzen soll (z. B. Schnittpunkt 414 in 4). Das Blockieren der Kommunikationen kann Blockieren von Datenfluss zu und/oder von einem oder mehreren (z. B. allen) Zweigen von Schnittpunkt 414 sein. Weiche (z. B. Weichenschaltungsanordnung) (wie z. B. ferner Bezug nehmend auf 5A-5B weiter unten erörtert) kann durch das Bevorzugungsbitfeld gesteuert werden.
  • 4 stellt eine In-Flight-Auslegung eines Beschleunigers 400 mit mehreren Verarbeitungselementen (z. B. 402, 404, 406, 408) gemäß Ausführungsformen der Offenbarung dar. Beschleuniger 400 umfasst Bevorzugungsmodus- und Nicht-Bevorzugungsmodus-Fähigkeiten, z. B. Ermöglichen des Setzens von Bevorzugungsbit(s) (z. B. Bevorzugungszustandsbit(s)), wenn im Bevorzugungsmodus befindlich (z. B. im Auslegungsspeicher (z. B. Register) 410 und/oder Setzen von anderen Auslegungsbits oder in separatem Bevorzugungsspeicher (z. B. Register) 412) bei einem (z. B. bestimmten oder jedem) Kreuzen des lokalen Netzwerks. Obwohl eine In-flight-Auslegung der PEs dargestellt ist, kann z. B. das Setzen der Bevorzugungsbits gleichzeitig mit diesem oder separat von diesem erfolgen. Die Weiche (z. B. Weichenschaltungsanordnung) (z. B. an Schnittpunkt 414) kann (z. B. nur) durch ihren zugehörigen Bevorzugungsspeicher (z. B. Bevorzugungsspeicher 412) gesteuert werden. In einer Ausführungsform werden die Weiche (z. B. Weichenschaltungsanordnung) (wie z. B. ferner Bezug nehmend auf 5A-5B weiter unten erörtert) an Schnittpunkt 414 im ersten Netzwerk 401 und Weiche (z. B. Weichenschaltungsanordnung) (wie z. B. ferner Bezug nehmend auf 5A-5B weiter unten erörtert) an Schnittpunkt 416 im zweiten Netzwerk 403 (z. B. nur) durch einen einzelnen Bevorzugungsspeicher 412 (z. B. Bevorzugungszustandsregister) gesteuert. In einer Ausführungsform werden die Weiche (z. B. Weichenschaltungsanordnung) (wie z. B. ferner Bezug nehmend auf 5A-5B weiter unten erörtert) an Schnittpunkt 414 im ersten Netzwerk 401 und Weiche (z. B. Weichenschaltungsanordnung) (wie z. B. ferner Bezug nehmend auf 5A-5B weiter unten erörtert) an Schnittpunkt 416 im zweiten Netzwerk 403 (z. B. nur) durch ihren eigenen, entsprechenden Bevorzugungsspeicher, z. B. Bevorzugungsspeicher 412 (z. B. Bevorzugungszustandsregister) für Schnittpunkt 414 und Bevorzugungsspeicher 418 (z. B. Berechtigungszustandsregister) für Schnittpunkt 416 gesteuert. Wie dargestellt, kann jeder Schnittpunkt seinen eigenen damit verbundenen Bevorzugungsspeicher haben (z. B. physisch angrenzend an die Weiche(n) der Fabric-Struktur (z. B. leitungsvermitteltes Verbindungsnetzwerk) befindlich, die er steuert). Einmal ausgelegt, können PEs datenflussbezogene Einschränkungen /oder Bevorzugungseinschränkungen ausführen (z. B. separat von den Datenflusseinschränkungen).
  • In einer Ausführungsform verhindert bzw. verhindern (z. B. stoppt bzw. stoppen) das bzw. die Bevorzugungsbit(s) (z. B. durch eine Auslegungssteuerung gesetzt, z. B. eine oder mehrere der Auslegungssteuerungen in 1), wenn deaktiviert, Kommunikationen zwischen den zwei Partitionen. In einer Ausführungsform werden alle Signale, die versuchen, die Partition zu kreuzen, auf einen niedrigen Wert gezogen, z. B. Null. Dies kann sicherstellen, dass nicht im Zusammenhang stehende Partitionen vollständig voneinander getrennt sind, beispielsweise, um eine harte Schaltungspartition zu erzeugen, z. B. nicht rein in Software. Obwohl zwei Partitionen erörtert werden, können drei oder mehr Partitionen gebildet werden, z. B. durch entsprechendes Setzen des bzw. der Bevorzugungsbits, beispielsweise kann jede Spalte von Beschleuniger 400 auf ihre eigene Partition gesetzt werden. Zum Partitionieren einer räumlichen Fabric-Struktur (z. B. CSA) kann das Betriebssystem oder ein anderer bevorzugter Benutzer die entsprechenden Einstellungen für die gewünschten (z. B. Benutzer-)Arbeitslasten bestimmen und eine bevorzugte Auslegungsdatei basierend auf der gewünschten Partitionierung konstruieren. Das Betriebssystem oder der andere bevorzugte Benutzer kann die Verteilung der bevorzugten Auslegungsdatei an das CSA (z. B. über Auslegungssteuerung(en), z. B. basierend auf den hier beschriebenen Techniken veranlassen. Wie weiter unten, z. B. Bezug nehmend auf 22A-22B, erörtert wird, kann eine Verbindung einen auslegbaren Datenpfad (z. B. Netzwerk) und einen auslegbaren Flusssteuerungspfad (z. B. Netzwerk) umfassen. Zusätzlich oder alternativ zum Einstellen der Auslegung des Datenpfades und des Flusssteuerungspfades (z. B. Gegendruck) ermöglichen bestimmte Ausführungsformen hier eine Bevorzugungsauslegung, z. B. zum Einstellen von einem oder mehreren Bevorzugungsbits zum Ermöglichen oder Nicht-Ermöglichen (z. B. Blockieren) von Kommunikation auf einem Datenpfad (z. B. Netzwerk) und/oder einem Flusssteuerungspfad (z. B. Gegendruck) (z. B. Netzwerk).
  • 5A stellt ein auslegbares Datenpfadnetzwerk 500 (z. B. von Netzwerk eins oder Netzwerk zwei, die Bezug nehmend auf 4 erläutert wurden) gemäß Ausführungsformen der Offenbarung dar. Das Netzwerk 500 weist mehrere Multiplexer (z. B. Multiplexer 502, 504, 506) auf, die ausgelegt werden können (z. B. über zugehörige Steuersignale), um einen oder mehrere Datenpfade (z. B. von PEs) miteinander zu verbinden. 5B stellt ein auslegbares Flusssteuerungsnetzwerk 501 (z. B. von Netzwerk eins oder Netzwerk zwei, die Bezug nehmend auf 4 erläutert wurden) gemäß Ausführungsformen der Offenbarung dar. Ein Netzwerk kann ein leichtgewichtiges PE-PE-Netzwerk sein. Bestimmte Ausführungsformen eines Netzwerks können als eine Menge von zusammenfügbaren Grundelementen zum Bau von verteilten, Punkt-zu-Punkt-Datenkanälen gedacht sein. 5A zeigt ein Netzwerk, das zwei aktivierte Kanäle aufweist, die fette schwarze Linie und die gepunktete schwarze Linie. Der Kanal der fetten schwarzen Linie ist Multicast, z. B. wird eine einzelne Eingabe an zwei Ausgaben gesendet. Es sei angemerkt, dass sich die Kanäle an einigen Punkten innerhalb eines einzelnen Netzwerks kreuzen können, selbst wenn zweckgebundene leitungsvermittelte Pfade zwischen den Kanalendpunkten gebildet werden. Des Weiteren stellt dieses Kreuzen keine strukturelle Gefahr zwischen den zwei Kanälen dar, sodass jeder unabhängig und bei voller Bandbreite arbeitet.
  • Das Umsetzen von verteilten Datenkanälen kann zwei Pfade aufweisen, wie in 7A bis 7B dargestellt. Der Vorwärts- oder Datenpfad, trägt Daten von einem Erzeuger zu einem Verbraucher. Multiplexer können zum Lenken von Daten und Validieren von Bits von dem Erzeuger zu dem Verbraucher ausgelegt sein, wie z. B. in 5A. Im Fall von Multicast werden die Daten zu einer Vielzahl von Verbraucherendpunkten gelenkt. Der zweite Teil dieser Ausführungsform eines Netzwerks ist die Flusssteuerung oder der Gegendruckpfad, der in Gegenrichtung des Vorwärtsdatenpfads fließt, wie z. B. in 7B. Die Verbraucherendpunkte können bestätigen, wenn sie zum Annehmen neuer Daten bereit sind. Diese Signale können dann zurück zum Erzeuger unter Verwendung der auslegbaren logischen Konjunktionen gelenkt werden, die als Flusssteuerungsfunktion in 5B gekennzeichnet sind (z. B. Rückfluss). In einer Ausführungsform kann jede Flusssteuerungsfunktionsschaltung mehrere Weichen (z. B. Muxes) aufweisen, wie z. B. ähnlich denen aus 5A. Der Flusssteuerungspfad kann zurückkehrende Steuerdaten von dem Verbraucher an den Erzeuger behandeln. Konjunktionen können Multicast ermöglichen, wobei z. B. jeder Verbraucher Daten empfangen kann, bevor der Erzeuger annimmt, dass diese empfangen wurden. In einer Ausführungsform ist ein PE ein PE, das einen Datenflussoperator als seine Architekturschnittstelle aufweist. Zusätzlich oder alternativ kann in einer Ausführungsform ein PE eine Art von PE (z. B. in der Fabric-Struktur) sein, z. B. ein PE, das eine auf Befehlszeiger, ausgelösten Befehl oder Zustandsmaschine basierende Architekturschnittstelle aufweist, aber nicht darauf beschränkt ist.
  • Das Netzwerk kann statisch ausgelegt sein, z. B. zusätzlich zu PEs, die statisch ausgelegt sind. Während des Auslegungsschrittes können Auslegungsbits an jeder Netzwerkkomponente gesetzt werden. Diese Bits steuern z. B. die Muxauswahl und die Flusssteuerungsfunktionen. Ein Netzwerk kann mehrere Netzwerke umfassen, z. B. ein Datenpfadnetzwerk und ein Flusssteuerungsnetzwerk. Eine Netzwerk oder mehrere Netzwerke können Pfade unterschiedlicher Breiten benutzen (z. B. einer ersten Breite und einer engeren oder breiteren Breite). In einer Ausführungsform weist ein Datenpfadnetzwerk eine breitere (z. B. Bittransport-)Breite auf als die Breite eines Flusssteuerungspfadnetzwerks. In einer Ausführungsform weist jedes von einem ersten Netzwerk und einem zweiten Netzwerk sein eigenes Datenpfadnetzwerk und Flussteuerungspfadnetzwerk auf, z. B. Datenpfadnetzwerk A und Flusssteuerungspfadnetzwerk A und ein breiteres Datenpfadnetzwerk B und ein Flusssteuerungspfadnetzwerk B.
  • Bestimmte Ausführungsformen eines Netzwerks sind pufferlos, und die Daten müssen sich zwischen dem Erzeuger und Verbraucher in einem einzelnen Zyklus bewegen. Bestimmte Ausführungsformen eines Netzwerks sind ungebunden, das heißt, das Netzwerk überspannt die gesamte Fabric-Struktur. In einer Ausführungsform kommuniziert ein PE mit einem anderen PE in einem einzelnen Zyklus. In einer Ausführungsform können zum Verbessern der Routingbandbreite mehrere Netzwerke parallel zwischen die Reihen der PE gelegt werden.
  • Bezüglich der FPGAs haben bestimmte Ausführungsformen von Netzwerken hierin drei Vorteile: Bereich, Frequenz und Programmausdruck. Bestimmte Ausführungsformen von Netzwerken arbeiten grobkörnig, was z. B. die Anzahl an Auslegungsbits reduziert und dadurch den Netzwerkbereich. Bestimmte Ausführungsformen von Netzwerken erhalten die Bereichsreduktion durch direktes Umsetzen der Steuerlogik in der Schaltungsanordnung (z. B. Silicium). Bestimmte Ausführungsformen gehärteter Netzwerkumsetzungen genießen gegenüber FPGA auch einen Frequenzvorteil. Aufgrund eines Bereichs- und Frequenzvorteils kann ein Leistungsvorteil vorhanden sein, wenn eine geringere Spannung als Durchsatzparität verwendet wird. Schließlich stellen bestimmte Ausführungsformen von Netzwerken bessere High-Level-Semantiken als FPGA-Drähte bereit, insbesondere in Bezug auf die variable Zeitsteuerung, weshalb solche bestimmten Ausführungsformen leichter durch die Kompilierer anzuzielen sind. Bestimmte Ausführungsformen von Netzwerken hierin können als eine Menge von zusammensetzbaren Grundelementen zum Bau von verteilten, Punkt-zu-Punkt-Datenkanälen gedacht sein.
  • In bestimmten Ausführungsformen kann eine Multicast-Quelle ihre Daten erst dann bestätigen, wenn ein Bereit-Signal von jeder Senke empfangen wurde. Daher können ein zusätzliches Konjunktions- und Steuerbit in dem Multicastfall benutzt werden.
  • Wie bestimmte PEs kann das Netzwerk statistisch ausgelegt sein. Während dieses Schrittes werden Auslegungsbits an jeder Netzwerkkomponente gesetzt. Diese Bits steuern z. B. die Muxauswahl und die Flusssteuerungsfunktion. Der Vorwärtspfad unseres Netzwerks erfordert, dass einige Bits ihre Muxe schwingen. In dem in 5A gezeigten Beispiel werden vier Bits pro Hop erfordert: die Ost- und West-Muxe benutzen jeweils ein Bit, während die südlich gebundenen Muxe zwei Bits benutzen. In dieser Ausführungsform können vier Bits für den Datenpfad benutzt werden, es können aber 7 Bits für die Flusssteuerungsfunktion benutzt werden (z. B. in dem Flusssteuerungspfadnetzwerk). Andere Ausführungsformen können mehr Bits benutzen, z. B., wenn ein CSA ferner eine Nord-Süd-Richtung benutzt. Die Flusssteuerungsfunktion kann ein Steuerbit für jede Richtung benutzen, aus welcher die Flusssteuerung kommen kann. Dies kann das Einstellen der Sensitivität der Flusssteuerungsfunktion statisch ermöglichen. Die Tabelle 1 unten fasst die Boolsche Algebra-Umsetzung der Flusssteuerungsfunktion für das Netzwerk in 5B zusammen, wobei die Auslegungsbits in Großbuchstaben aufgeführt sind. In diesem Beispiel werden sieben Bits benutzt. Tabelle 1: Flussumsetzung
    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 die dritte Flusssteuerungsbox von links in 5B sind EAST_WEST_SENSITIVE (ostwest-sensitiv) und NORTH_SOUTH_SENSITIVE (nord-süd-sensitiv) als Satz dargestellt, um die Flusssteuerung für Kanäle in fetter Linie bzw. gestrichelter Linie umzusetzen.
  • Das dargestellte auslegbare Datenpfadnetzwerk 500 und das auslegbare Flusssteuerungspfadnetzwerk 501 können einen oder mehrere Bevorzugungsbitspeicher (z. B. Register) zum Speichern eines Bevorzugungsbits zum Steuern von einer oder mehreren Schaltungen (z. B. AND-Logikgatter) umfassen, um Kommunikation auf dem bzw. den Datenpfad(en) zu blockieren oder zu ermöglichen. Jedes dargestellte AND-Logikgatter umfasst einen (z. B. gemeinsam genutzten oder exklusiven) Bevorzugungsbitspeicher, z. B. Bevorzugungsbitspeicher 508 für das Bevorzugungsbit, das in das AND-Logikgatter 510 eingegeben wird, Bevorzugungsbitspeicher 512 für das Bevorzugungsbit, das in das AND-Logikgatter 516 eingegeben wird, und Bevorzugungsbitspeicher 522 für das Bevorzugungsbit, das in AND-Logikgatter 524 eingegeben wird. In einer Ausführungsform kann jeder Schnittpunkt (z. B. Schnittpunkt 514 von Pfadmultiplexern 502, 504, 506, beispielsweise, kumulativ eine Weiche bilden, z. B. eine Weiche in einem leitungsvermittelten Verbindungsnetzwerk wie in 21) einen einzelnen Bevorzugungsbitspeicher (z. B. Bevorzugungsbitspeicher 508 für das Bevorzugungsbit, das in das AND-Logikgatter 510 eingegeben wird, und für das gleiche Bevorzugungsbit, das in das AND-Logikgatter 516 eingegeben wird, und/oder für das gleiche Bevorzugungsbit, das in das AND-Logikgatter 524 eingegeben wird) (z. B. Bevorzugungsbitspeicher 522 für das Bevorzugungsbit, das in das AND-Logikgatter 524 eingegeben wird, und für das gleiche Bevorzugungsbit, das in das AND-Logikgatter 516 eingegeben wird (z. B. zwischen angrenzenden Schnittpunkten))) umfassen. Ein einzelner Bevorzugungs- (z. B. -bit- oder -bits-)Wert (z. B. Bevorzugungsbitspeicher) kann für ein einzelnes AND-Logikgatter verwendet oder an jede Kombination aus mehreren AND-Logkgattern verteilt werden. Als ein Beispiel, wenn Bevorzugungsbitspeicher 512 einen ersten Wert (z. B. logische Null) hat, der darin gespeichert ist (z. B. in einer Bevorzugungsauslegungsstufe), bewirkt er, dass das AND-Logikgatter 516, den Wert nicht ausgibt, den es von Multiplexer 506 empfängt, z. B. in der dargestellten Ausführungsform kann der Bevorzugungsbitwert eine logische Null sein, um zu bewirken, dass das AND-Logikgatter 516 den Wert von Eingabe 518, den das AND-Logikgatter 516 von Multiplexer 506 empfängt, beim Fortfahren in den Schnittpunkt 520 von Multiplexern blockiert (z. B. nicht ausgibt) (z. B. kumulativ eine Weiche bildend, z. B. eine Weiche in einem leitungsvermittelten Verbindungsnetzwerk wie in 21). Als ein anderes Beispiel, wenn Bevorzugungsbitspeicher 512 einen zweiten Wert (z. B. logische Eins) (z. B. vom ersten Wert verschieden) hat, der darin gespeichert ist (z. B. in einer Bevorzugungsauslegungsstufe), bewirkt er, dass das AND-Logikgatter 516, den Wert ausgibt, den es von Multiplexer 506 empfängt, z. B. in der dargestellten Ausführungsform kann der Bevorzugungsbitwert eine logische Eins sein, um zu bewirken, dass das AND-Logikgatter 516 den Wert von Eingabe 518, den das AND-Logikgatter 516 von Multiplexer 506 empfängt, in den Schnittpunkt 520 von Multiplexern ausgibt (z. B. kumulativ eine Weiche bildend, z. B. eine Weiche in einem leitungsvermittelten Verbindungsnetzwerk wie in 21). Bevorzugungsbitspeicher kann entlang eines Datenpfads innerhalb eines auslegbaren Datenpfadnetzwerks 500 und/oder auslegbaren Flusssteuerungspfadnetzwerks 501 aktualisiert werden, beispielsweise kann eine Auslegungssteuerung (z. B. nur bei Aufrufen des Bevorzugungsmodus) eine Aktualisierung des Bevorzugungsbitspeichers bewirken. In einer Ausführungsform bestätigt eine Auslegungssteuerung (z. B. eine lokale Auslegungssteuerung) ein CFG_START_PRIVILEGE-Signal (z. B. auf einem CFG_START_PRIVILEGE-Kanal), um bestimmte der Weichen (z. B. Multiplexer) in dem bzw. den Netzwerk(en) zu schwingen, um einen Pfad in dem bzw. den (z. B. lokalen) Netzwerk(en) zu dem bzw. den Bevorzugungsbitspeicherort(en) zu bilden. In einer Ausführungsform ist es einer Auslegungssteuerung im Benutzermodus nicht gestattet, eine Aktualisierung des Bevorzugungsbitspeichers zu bewirken.
  • Jedes dargestellte AND-Logikgatter umfasst einen Bevorzugungsbitspeicher, z. B. Bevorzugungsbitspeicher 505 für das Bevorzugungsbit, das in das AND-Logikgatter 507 eingegeben wird, Bevorzugungsbitspeicher 509 für das Bevorzugungsbit, das in das AND-Logikgatter 511 eingegeben wird, und Bevorzugungsbitspeicher 513 für das Bevorzugungsbit, das in AND-Logikgatter 515 eingegeben wird. In einer Ausführungsform kann jeder Schnittpunkt (z. B. Schnittpunkt bei Flusssteuerungsfunktionsspeicher 503 oder Flusssteuerungsfunktionsspeicher 517, beispielsweise, kumulativ eine Weiche bildend, z. B. eine Weiche in einem leitungsvermittelten Verbindungsnetzwerk wie in 21), einen einzelnen Bevorzugungsbitspeicher (z. B. Bevorzugungsbitspeicher 509 für das Bevorzugungsbit, das in AND-Logikgatter 511 eingegeben wird, und für das gleiche Bevorzugungsbit, das in AND-Logikgatter 515 eingegeben wird) umfassen, z. B. kann ein einzelnes Bevorzugungsbit mehrere AND-Logikgatter steuern (z. B. eine Eingabe in diese sein).
  • Bereichsreduktionstechnik für kanalbasierte Architekturen
  • Ein räumliches Array (z. B. CSA) kann eine kanalbasierte Architektur in dem Sinne sein, dass alle Kommunikationen implizit flussgesteuert sind. In bestimmten Ausführungsformen eines CSA werden Partitionen in dem CSA durch Manipulieren von (z. B. nur) den Bereit/Aktivieren-Signalen des Kanalkommunikationsprotokolls erzeugt. In einer Ausführungsform ist es möglich, diese Signale einfach auf inaktive Werte zu ziehen. In einer Ausführungsform eines CSA umfasst die Auslegung eines lokalen leitungsvermittelten Netzwerks einen separat auslegbaren Vorwärtsdatenpfad und Rückwärtssteuerungspfad. In bestimmten Ausführungsformen kann dies eine Sicherheitsanfälligkeit erzeugen, wenn ein bösartiger Code seinen Datenpfad in eine Richtung und seinen Steuerungspfad in eine andere Richtung auslegt, dahingehend, dass der Datenpfand aus einer unterschiedlichen Partition (z. B. von unterschiedlichen Programmen) stammen kann, während der Steuerungspfad von der lokalen Partition stammen kann. Um dies zu verhindern, nutzen bestimmte Ausführungsformen hier einen einzelnen Bevorzugungsauslegungszustand (z. B. Bevorzugungsbit oder -bits) zum Steuern sowohl des Datenpfad- als auch des Steuerungspfadwechsels. Auf diese Weise sind der Datenpfad und der Steuerungspfad durch die Hardware physisch gepaat, z. B. Erreichen einer Bevorzugungspartitionierung durch Manipulieren des Datenpfads und des Steuerungspfads ermöglichend.
  • In einer Ausführungsform werden ein Vorwärtsdatenpfad (z. B. eines auslegbaren Datenpfadnetzwerks 500) und ein rückwärts fließender Flusssteuerungspfad (z. B. eines auslegbaren Flusssteuerungspfadnetzwerks 501) miteinander gepaart (z. B. Eingaben und/oder Ausgaben für die PEs in einer Auslegung bereitstellend, wo sie durch den Vorwärtsdatenpfad und den rückwärts fließenden Flusssteuerungspfad miteinander gekoppelt sind), und ein einzelner Steuerungswert (z. B. Steuerbit) kann verwendet werden, um sowohl den Vorwärtsdatenpfad (z. B. des auslegbaren Datenpfadnetzwerks 500) und den gepaarten rückwärts fließenden Flusssteuerungspfad (z. B. des auslegbaren Flusssteuerungspfadnetzwerks 501) zu steuern, z. B. über ein oder mehrere AND-Logikgatter oder andere blockierende Schaltungsanordnungen. Ein einzelner Bevorzugungs- (z. B. Bit- oder Bits-)Wert (z. B. in Bevorzugungsbitspeicher 522) kann für zumindest ein AND-Logikgatter im Vorwärtsdatenpfad und für zumindest ein AND-Logikgatter im rückwärts fließenden Flusssteuerungspfad, z. B. einer beliebigen Kombination von AND-Logikgattern, verwendet werden. Beispielsweise kann ein einzelner Bevorzugungs- (z. B. Bit- oder Bits-)Wert (z. B. im Bevorzugungsbitspeicher 522) verwendet werden, um gemäß dem Wert Kommunikation zu ermöglichen oder zu blockieren, durch Erlauben oder Blockieren von Kommunikation über die AND-Logikgatter (z. B. AND-Logikgatter 511, 515, 516 und 524) (wo z. B. das AND-Logikgatter nur einen Nicht-Null-Wert (z. B. logische Eins) ausgibt, wenn all seine Eingänge einen Nicht-Null-Wert (z. B. logische Eins) haben. Beispielsweise kann ein einzelner Bevorzugungs- (z. B. Bit- oder Bits-)Wert (z. B. in Bevorzugungsbitspeicher 508) verwendet werden, um gemäß dem Wert Kommunikation zu ermöglichen oder zu blockieren, durch Ermöglichen oder Blockieren von Kommunikation durch die AND-Logikgatter 510, 507. In bestimmten Ausführungsformen unterscheidet sich Ausschalten eines leitungsvermittelten Pfades (z. B. über AND-Logikgatter) vom Ausschalten (z. B. Takten) eines Puffers (z. B. Register) (z. B. in einem PE) vom Speichern und/oder Empfangen von Daten dahingehend, dass garantiert ist, dass Daten nicht von Gegnern beobachtet werden. Ein räumliches Array (z. B. CSA), Prozessor oder System kann jedes bzw. jeden der hier offenbarten umfassen, beispielsweise ein räumliches Array gemäß einer beliebigen der hier offenbarten Architekturen.
  • 6 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 600 umfasst Durchführen einer Operation eines Datenflussgraphen mit einem Verbindungsnetzwerk und mehreren Verarbeitungselementen eines Prozessors, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht, wobei der Prozessor die mehreren Verarbeitungselemente und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen umfasst, und hat einen Datenflussgraphen, umfassend mehrere Knoten, der über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt ist, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen 602 dargestellt ist; und Auslegen, mit einer Auslegungssteuerung des Prozessors, des Verbindungsnetzwerks zwischen einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert 604 gesetzt ist. In einer Ausführungsform kann das bzw. können die Bevorzugungsbit(s) mit anderen Auslegungsbits gespeichert werden, z. B. in einem oder mehreren Auslegungsspeichern (822A-822O) in 8A-8D.
  • 7 stellt einen Kontextwechsel in einem räumlichen Array 701 von Verarbeitungselementen eines Prozessors 700 gemäß Ausführungsformen der Offenbarung dar. Das räumliche Array 701 iat als ein Beschleuniger, gekoppelt mit Prozessorkern 702 und/oder Vektorverarbeitungseinheit (VPU) 704 gekoppelt, dargestellt, damit, beispielsweise, der Beschleuniger Aufgaben anstelle des Kerns und/oder der VPU ausführt. Der dargestellte Prozessor 700 umfasst einen Cache Home Agent 706, beispielsweise, um als lokale Kohärenz- und Cachesteuerung (z. B. Caching Agent) zu dienen, und/oder dient auch als die globale Kohärenz- und Speichersteuerungsschnittstelle (z. B. Home Agent).
  • Das räumliche Array 701 kann ein beliebiges der hier, z. B. in 8A-8D oder 9A-9J, erörterten räumlichen Arrays sein. Insbesondere bietet 7 eine konzeptuelle Ansicht eines Kontextwechsels in einem räumlichen Array. Eine (z. B. zentralisierte) Steuerung koordiniert eine, z. B. aus dem Cache (z. B. L2-Cache 708), ausstrahlende Wellenfront. Der Bereich mit neuer Auslegung 710 und der Bereich mit alter Auslegung 716 können gleichzeitig aktiv sein, z. B. Daten verarbeitend. 7 stellt die Idee dar, dass das räumliche Array durch Koordinierung des räumlichen Arrays 701 (z. B. Fabric-Struktur) fließbandverarbeitete, wellenfrontorientierte Laufzeitdienste erreichen kann. In 7 wird eine koordinierte Umsetzung eines Kontextwechsels gezeigt. Hier ist ein Extraktionsbereich 714 (der z. B. den Zustand eines ersten räumlichen Kontexts speichert) gleichzeitig mit einem Auslegungsbereich 712 aktiv (z. B. das Laden eines zweiten (neuen oder vorherigen), unterschiedlichen Kontexts in das räumliche Array). In dieser Ausführungsform können die neue und die alte Auslegung gleichzeitig aktiv sein, um z. B. die durch Laufzeitoperationen verursachte Verschlechterung des Durchsatzes des räumlichen Arrays zu begrenzen. In einer Ausführungsform ist, um fließbandverarbeitete Auslegung und Extraktion zu erreichen, die zu garantierende Haupteigenschaft, dass die neue Auslegung 712 (z. B. Auslegungsbereich) und die alte Extraktion 714 (z. B. Extraktionsbereich) nicht kommunizieren. Um diese Garantie zu erreichen, nutzen bestimmte Ausführungsformen hier die archtitektonische Eigenschaft eines räumlichen Arrays im Hinblick auf Kommunikation, beispielsweise PEs, die einem vollen/leeren (z. B. Gegendruck-)Mikroprotokoll folgen, das in der Mikroarchitektur manipuliert werden kann, um Kommunikationen zu verhindern. Ein Beispiel dieses Mechanismus ist in 8A-8D gezeigt. Bestimmte Ausführungsformen hier bieten einen Koordinierungsmechanismus (z. B. Steuerung) des räumlichen Arrays, um sicherzustellen, dass die neuen und alten Bereiche nicht kommunizieren, um z. B. Korrektheit des Programms sicherzustellen.
  • 8A-8D stellen eine In-Flight-Auslegung für einen Kontextwechsel (z. B. Auslegung und Extraktion) eines räumlichen Arrays 800 von Verarbeitungselementen (802A-802O) gemäß Ausführungsformen der Offenbarung dar. In einer Ausführungsform ist das räumliche Array ein Beschleuniger eines Prozessors (z. B. mit einem Kern). Nach der Auslegung können die PEs ausführen, abhzängig von Datenflusseinschränkungen. Kanäle, die nicht ausgelegte PEs beinhalten, können jedoch durch die Mikroarchitektur deaktiviert werden, z. B. verhindern, dass undefinierte Operationen stattfinden. Diese Eigenschaften ermöglichen Ausführungsformen hier das verteilte Initialisieren und Ausführen z. B. ohne jegliche zentralisierte Ausführungssteuerung. Aus einem nicht ausgelegten Zustand kann die Auslegung vollständig parallel stattfinden, z. B. in vielleicht lediglich 200 Nanosekunden. Aufgrund der verteilten Initialisierung von Ausführungsformen eines räumlichen Arrays (z. B. CSA) können PEs jedoch aktiv werden und zum Beispiel Anforderungen an den Speicher senden, z. B. lange bevor die gesamte Fabric-Struktur ausgelegt ist. Die Extraktion kann ähnlich wie die Auslegung ablaufen. Das lokale Netzwerk (z. B. 804 oder 806) kann angepasst (z. B. Schaltungen davon geschaltet) werden, um Daten von jeweils einem Ziel gleichzeitig zu extrahieren, und es werden Zustandsbits verwendet, um eine verteilte Koordination zu erreichen. Ein räumliches Array (z. B. CSA) kann die Extraktion so steuern, dass sie nicht-destruktiv ist, d. h. nach Abschluss der Extraktion ist jedes extrahierbare Ziel in seinen Ausgangszustand zurückgekehrt. In dieser Umsetzung kann der gesamte Zustand in dem Ziel in einem abtastungsähnlichen Ausgangsregister, das an das lokale Netzwerk gebunden ist, zirkuliert werden. Es kann jedoch eine In-Place-Extraktion erreicht werden, indem neue Pfade auf der Registerübertragungsebene (RTL) eingefügt werden oder bestehende Leitungen verwendet werden, um die gleichen Funktionen mit geringerem Aufwand bereitzustellen. Wie bei der Auslegung wird die hierarchische Extraktion parallel dazu erreicht.
  • In 8A sind mehrere lokale (z. B. Auslegungs-)Steuerungen (808A-808E) eingeschlossen, z. B. mit dem Netzwerk (z. B. loklaes Netzwerk 804 oder 806) verbunden. In einer Ausführungsform dient eine lokale (z. B. Auslegungs-)Steuerung dazu, die Auslegung und/oder Extraktion zu steuern. Eine lokale Steuerung kann ferner durch eine Steuerung auf höherer Ebene, z. B. Steuerung 104 in 1 gesteuert werden. Eine (z. B. Auslegungs-)Steuerung kann die Auslegung und/oder Extraktion einer Teilmenge von Verarbeitungselementen verwalten. Die lokale (z. B. Auslegungs-)Steuerung 808A kann die Auslegung und/oder Extraktion von Verarbeitungselementen 802A-802C verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 808B kann die Auslegung und/oder Extraktion von Verarbeitungselementen 802D-802O verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 808C kann die Auslegung und/oder Extraktion von Verarbeitungselementen 802G-802I verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 808D kann die Auslegung und/oder Extraktion von Verarbeitungselementen 802J-802L verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 808E kann die Auslegung und/oder Extraktion von Verarbeitungselementen 802M-8020 verwalten (z. B. bewirken). Obwohl jede Teilmenge von verwalteten Verarbeitungselementen (z. B. 802A-802C) auf einer gleichen Zeile wie seine lokale (z. B. Auslegungs-)Steuerung (z. B. 808A) gezeigt wird, sind andere Ausrichtungen möglich. Obwohl drei Verarbeitungselemente (z. B. 802A-802C) als eine einzelne lokale (z. B. Auslegungs-)Steuerung (z. B. 808A) aufweisend gezeigt sind, kann eine (z. B. lokale) Steuerung für ein Verarbeitungselement oder beliebige mehrere Verarbeitungselemente genutzt werden. Ein Verarbeitungselement kann sein, wie hier offenbart, beispielsweise in 24. Ein Verarbeitungselement kann ausgelegt sein, z. B. durch Schreiben an ein Auslegungsregister. Eine lokale (z. B. Auslegungs-)Steuerung kann eine Auslegungssteuerung (z. B. wie in 39) und/oder eine Extraktionssteuerung (z. B. wie in 48) sein. Ein Zustand eines Verarbeitungselements (z. B. Auslegungsinformationen) kann die Daten in beliebigen (Eingabe- oder Ausgabe-)Warteschlangen oder Puffern, Gegendruckdaten (z. B. Signale), Operationsauslegung und/oder beliebige andere Daten umfassen. Zustand kann Informationen umfassen, die in einem oder mehreren beliebigen Registern des Verarbeitungselements gespeichert sind. Der Zustand kann umfassen, woher (z. B. von einem oder mehreren PEs oder Speicher) Quell- (Eingabe-)Daten für ein PE zu beziehen sind und wohin (Ausgabe-)Daten zu senden sind, z. B. zu welchem PE oder PEs oder Speicher. Der Zustand kann die (z. B. Weichen-)Einstellungen für ein Datenpfadnetzwerk und/oder ein Flusssteuerungs- (z. B. Gegendruck-)Pfadnetzwerk umfassen, siehe z. B. 22A-22B. Zustand kann Daten im Zusammenhang mit Speicherzugriffen umfassen, z. B. einschließlich Adressen und zurückgegebenen Daten.
  • In der dargestellten Ausführungsform kann jedes Verarbeitungselement im angezeigten Status sein, z. B. bereits mit einer bestimmten Auslegung ausgelegt, aktiv auslegend (z. B. eine Auslegung zum Ausführen ladend oder ermöglichend), nicht ausgelegt, aktiv nichtauslegend oder eine Auslegung (z. B. Zustand) extrahierend. Eine Auslegung in einem räumlichen Array (z. B. Verarbeitungselement(e)) kann für einen gleichen Datenflussgraphen sein, beispielsweise, wobei ein oder mehrere Verarbeitungselemente nicht neu ausgelegt sind. Beispielsweise kann das eine oder können die mehreren Verarbeitungselemente eine gleiche Operation aber mit unterschiedlicher bzw. unterschiedlichen Eingabequelle(n) und/oder Ausgabeziel(en), z. B. Werten, für jede Auslegung durchführen. Eine Auslegung kann für einen unterschiedlichen Datenflussgraphen sein, wobei z. B. ein oder mehrere Verarbeitungselemente neu ausgelegt sind, um eine unterschiedliche Operation durchzuführen. Eine Auslegung kann sein, wobei (z. B. eine Teilmenge davon) Verarbeitungselemente so ausgelegt (z. B. programmiert) sind, dass jeder Knoten eines Datenflussgraphen in einem räumlichen Array dargestellt ist (z. B. mit den Verarbeitungselementen als Datenflussoperatoren).
  • In 8A kann lokale Steuerung 808A vorab einen Befehl (z. B. von einer Steuerung auf höherer Ebene) empfangen haben, eine neue Auslegung auf die Teilmenge von Verarbeitungselementen (802A-802C) anzuwenden, mit denen sie gekoppelt ist, und die in 8A bereits vollständig angewendet (z. B. geladen) ist. Die lokale Steuerung 808B kann einen Befehl (z. B. von einer Steuerung auf höherer Ebene) empfangen haben, eine neue Auslegung auf die Teilmenge von Verarbeitungselementen (802D-802F) anzuwenden, mit denen sie gekoppelt ist. In 8A ist Verarbeitungselement 802D nicht ausgelegt, Verarbeitungselement 802E wird aktiv ausgelegt (z. B. mit neuer Auslegung), und Verarbeitungselement 802F ist bereits mit der neuen Auslegung ausgelegt. Die lokale Steuerung 808B kann Auslegungsinformationen (z. B. Daten) 810 (z. B. einschließlich des Zustands usw.) an Verarbeitungselement 802E senden, um die Auslegung von Verarbeitungselement 802E entsprechend zu bewirken. Linie 820 stellt schematisch Auslegungssteuerung dar, gesendet vom Auslegungsspeicher 822E zum Netzwerk (z. B. 804 und/oder 806), um den bzw. die gewünschten Auslegungsdatenpfad(e) zu erreichen. Auslegungssteuerungssignaldaten auf Linie 820 können von der lokalen Steuerung 808B kommen.
  • Auslegungsspeicher (822A-822O) stellt schematisch die Auslegungs- und Extraktionssteuerungsdaten(signale) dar (z. B. im Kontrast zu den Auslegungs- und Extraktions-Nutzdaten selbst), die die leitungsvermittelten Weichen im Netzwerk setzen. In einer Ausführungsform ist eine Auslegungssteuerung ein Register in einer lokalen (z. B. Auslegungs- und/oder Extraktions-)Steuerung. Die Linien (818, 820, 824) stellen schematisch Auslegungssteuerung dar, gesendet vom Auslegungsspeicher (822D-822F) zum Netzwerk (z. B. 804 und/oder 806), um den bzw. die gewünschten Auslegungsdatenpfad(e) zu erreichen. Die Linie von Verarbeitungselement 802B zu Verarbeitungselement 802F kann einen aktiven Kanal im Netzwerk (804 und/oder 806) darstellen, der gesetzt wird (z. B. die Weichen eines leitungsvermittelten Netzwerks setzen, um die Datenpfad zu emöglichen), um eine Ausgabe (z. B. einen Puffer davon) von Verarbeitungselement 802B mit einer Eingabe von Verarbeitungselement 802F (z. B. einen Puffer davon) zu koppeln. Dieser Kanal kann entsprechend der neuen Auslegung gesetzt werden. Gepunktete Linien (812, 814, 816) können inaktiven Kanälen des Netzwerks anzeigen, z. B. aktiv zu sein, wenn sowohl Eingabe- als auch Ausgabeelement(e) entsprechend ausgelegt sind.
  • Die lokale (z. B. Auslegungs-)Steuerung 808D wird als Nicht-Auslegungs- (z. B. Extraktions-)Daten 830 (z. B. einschließlich des Zustands usw.) sendend und/oder empfangend gezeigt, wobei Verarbeitungselement 802J die Nicht-Auslegung (z. B. Extraktion von Zustand) von Verarbeitungselement 802J entsprechend bewirkt. Linie 826 stellt schematisch Nicht-Auslegungs- (z. B. Extraktions-)Steuerung dar, gesendet vom Auslegungs- (z. B. Nicht-Auslegungs-)Speicher 822J zum Netzwerk (z. B. 804 und/oder 806), um den bzw. die gewünschten Nicht-Auslegungsdatenpfad(e) zu erreichen. Nicht-Auslegungs- (z. B. Extraktions-)Steuerungssignaldaten auf Linie 826 können von der lokalen Steuerung 808D kommen.
  • Lokale Steuerungen (808A-808E) können jeweils Speicher 828A-828E (z. B. Register) zum Speichern von Informationen umfassen, der die Koordinierung zwischen den lokalen Steuerungen beschreibt, z. B. welche Operation (z. B. aktiv mit neuer Auslegung, aktiv mit alter Auslegung, nicht ausgelegt, nicht auslegend (extrahierend) oder auslegend) jede einzelne Steuerung ausführt.
  • Jetzt Bezug nehmend auf 8B ist Verarbeitungselement 802J, das in 8A nicht auslegend war, jetzt nicht ausgelegt, beispielsweise werden die Zustandsdaten für diesen Kontext jetzt gespeichert, z. B. in einem beliebigen hier erörterten Speicher. Verarbeitungselement 802J ist dann nicht ausgelegt, z. B. kann es Gegendruck gegenüber beliebigen vorgelagerten Verarbeitungselementen usw. bestätigen, um nicht zu ermöglichen, dass Daten in Verarbeitungselement 802J eingegeben werden. In einer Ausführungsform, wenn die Zustandsdaten für Verarbeitungselement 802J gespeichert werden (wie z. B. durch die lokale Steuerung 808D verwaltet), kann der Pfad zum Senden und/oder Empfangen von Nicht-Auslegungs- (z. B. Extraktions-)Daten 830 in 8A deaktiviert sein, beispielsweise, durch Löschen der Daten in Auslegungs- (z. B. Nicht-Auslegungs-)Speicher 822J.
  • Bezug nehmend auf 8C kann, bei Abschluss der Nicht-Auslegung (z. B. Nicht-Auslegungsoperation) von Verarbeitungselement 80J (und Verarbeitungselement 802K und Verarbeitungselement 802L), die lokale Steuerung 808D (Abschluss-)Nachrichten (832, 834) an angrenzende Steuerungen (808C bzw. 808E) senden. In einer Ausführungsform kann eine solche Nachricht (z. B. Abschluss von Extraktion), bewirken, dass einer oder mehrere der angrenzenden Sätze von Verarbeitungselementen ihre nächsten Operationen beginnen.
  • Jetzt Bezug nehmend auf 8D kann Empfang der Abschluss- (z. B. Nicht-Auslegungs-)Nachricht 832 durch die lokale Steuerung 808C auslösen, dass die lokale Steuerung 808C ihre nächste Operation beginnt, z. B. angezeigt in 8D als Auslegung von Verarbeitungselement 8021, z. B. mit Auslegungsinformationen (z. B. Daten) 840 (z. B. einschließlich des Zustands usw.), die entlang des Pfades (z. B. in Netzwerk 804 und/oder 806) zu Verarbeitungselement 802I gesendet werden, um die Auslegung von Verarbeitungselement 802I (z. B. und Verarbeitungselement 802G und Verarbeitungselement 802H) entsprechend zu bewirken. In einer Ausführungsform wird die Auslegungs- (z. B. Extraktions-)Steuerung vom Auslegungsspeicher (822G-822I) zum Netzwerk (z. B. 804 und/oder 806) gesendet, um den gewünschten Auslegungsdatenpfad zu erreichen. Auslegungssteuerungssignaldaten 842 können von der lokalen Steuerung 808C kommen.
  • Zusätzlich oder alternativ kann Empfang der Abschluss- (z. B. Nicht-Auslegungs-)Nachricht 834 durch die lokale Steuerung 808E auslösen, dass die lokale Steuerung 808E ihre nächste Operation beginnt, z. B. angezeigt in 8D als Start der Nicht-Auslegung (z. B. Extraktion) von Verarbeitungselement 802O, z. B. mit Nicht-Auslegungs- (z. B. Extraktions-)Daten 850 (z. B. einschließlich des Zustands usw.), die entlang des Pfades (z. B. in Netzwerk 804 und/oder 806) mit Verarbeitungselement 802O gesendet und/oder empfangen werden, um die Nicht-Auslegung (z. B. Extraktion) von Verarbeitungselement 802O (z. B. und Verarbeitungselement 802M und Verarbeitungselement 802H) entsprechend zu bewirken. In einer Ausführungsform wird die Nicht-Auslegungs- (z. B. Extraktions-)Steuerung vom Auslegungs- (z. B. Nicht-Auslegungs-)Speicher 822O zum Netzwerk (z. B. 804 und/oder 806) gesendet, um den bzw. die gewünschten Nicht-Auslegungsdatenpfad(e) zu erreichen. Nicht-Auslegungs- (z. B. Extraktions-)Steuerungssignaldaten 852 können von der lokalen Steuerung 808D kommen. Es ist anzumerken, das sder Begriff „alt“, wie Bezug nehmend auf diese Figuren verwendet, sich auf eine bestehende Auslegung beziehen kann. Es ist anzumerken, dass der Begriff „neu“, wie Bezug nehmend azf diese Figuren verwendet, auf eine vorherige Auslegung beziehen kann, die aber die Auslegung ersetzt, die momentan in einem PE ist oder die in ein nicht ausgelegtes PE ausgelegt wird.
  • In einer Ausführungsform umfasst ein Netzwerk (z. B. ein leitungsvermitteltes Netzwerk) mehrere Kanäle (wie z. B. in 8A-8D gezeigt). Kanalsemantiken (z. B. die in 8A-8D über das Netzwerk gelegten gepunkteten und durchgehenden Linien) können eine natürliche Aktivierung einer Pipeline ermöglichen, wo z. B. nicht ausgelegte PEs Steuerwerte klammern und/oder wenn PEs ausgelegt werden, sie zu berechnen beginnen. Ein räumliches Array kann so innerhalb sehr weniger Zyklen aktiv werden, beispielsweise in etwa einigen 10 Nanosekunden (z. B. im Gegensatz zu den Semnatiken auf Zyklusebene eines FPGA, wo Gegendruck nicht implizit ist und die gesamte Ausgestaltung (FPGA) ausgelegt werden muss, als analog und „aus dem Rücksetzen kommend“).
  • Obwohl sich die obige Erörterung der 8A-8D auf mehrere lokale Steuerungen bezieht, kann, in einer anderen Ausführungsform, eine einzelne (z. B. Auslegungs-)Steuerung Obiges erreichen.
  • 8A-8D stellen ferner Kommunikations-Mikroprotokolle während Extraktion dar, z. B. über die Manipulation von vollen/leeren (z. B. Gegendruck-)Bits im Kommunikations-Mikroprotokoll zum Verhindern von Datenfluss bei einer feinen Körnung während Laufzeitdienstereignissen.
  • 9A-9J stellen eine phasengesteuerte Extraktion eines (z. B. ersten) Kontexts für ein räumliches Array 900 von Verarbeitungselementen (902A-902P) dar, ausgelegt zum Ausführen eines Datenflussgraphen gemäß Ausführungsformen der Offenbarung. In 9A-9J ist ein einzelner Signaldatenflussgraph als über ein räumliches Array 900 von Verarbeitungselementen (902A-902P) gelegt gezeigt (z. B. und über die dazwischen befindlichen (z. B. Verbindungs-)Netzwerke gelegt), beispielsweise, sodass jeder Knoten des Datenflussgraphen als ein Datenflussoperator im räumlichen Array von Verarbeitungselementen dargestellt ist. In einer Ausführungsform dienen eines oder mehrere der Verarbeitungselemente in dem räumlichen Array von Verarbeitungselementen zum Zugriff auf den Speicher über die Speicherschnittstelle (z. B. Speicherschnittstelle 1802 in 18C). In einer Ausführungsform entspricht der Pick-Knoten eines Datenflussgraphen daher dem (wird z. B. dargestellt durch den) Pick-Operator 904, der Weichenknoten eines Datenflussgraphen entspricht so dem (wird z. B. dargestellt durch den) Weichenoperator 906, der Multipliziererknoten des Datenflussgraphen entspricht so dem (wird z. B. dargestellt durch den) Multipliziereroperator 908, der „Ist-gleich“-Knoten des Datenflussgraphen entspricht so dem (wird z. B. dargestellt durch den) Gleichheitsprüfoperator 910, und der „Kleiner-als“-Knoten des Datenflussgraphen entspricht so dem (wird z. B. dargestellt durch den) Kleiner-als-Operator 912. Ein weiteres Verarbeitungselement und/oder ein Flusssteuerungspfadnetzwerk können die Steuersignale (z. B. Steuer-Token) an den Pick-Operator 904 und den Weichenoperator 906 bereitstellen, um die Operationen durchzuführen. In einer Ausführungsform wird das räumliche Array 900 von Verarbeitungselementen (zum Ausführen des Datenflussgraphen) ausgelegt, bevor die Ausführung beginnt. In einer Ausführungsform führt der Kompilierer die Umwandlung vom Programm und/oder Datenflussgraphen in die Auslegung in 9A durch. In einer Ausführungsform bettet die Eingabe der Datenflussgraphknoten in das räumliche Array aus Verarbeitungselementen den Datenflussgraphen logisch in das Array aus Verarbeitungselementen ein, wie z. B. weiter unten besprochen, sodass der Eingabe-/Ausgabepfad zum Erzeugen des gewünschten Ergebnisses ausgelegt ist. Siehe z. B. die Diskussion zu 18A-18C weiter unten.
  • In 9A-9J wird das räumliche Array 900 als lokale (z. B. Auslegungs- und/oder Extraktions-) Steuerungen 908A-908D aufweisend dargestellt. Eine (z. B. Auslegungs-)Steuerung kann die Auslegung und/oder Extraktion einer Teilmenge von Verarbeitungselementen verwalten. Die lokale (z. B. Auslegungs-)Steuerung 908A kann die Auslegung und/oder Extraktion von Verarbeitungselementen 902A-402D verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 908B kann die Auslegung und/oder Extraktion von Verarbeitungselementen 902E-902H verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 908C kann die Auslegung und/oder Extraktion von Verarbeitungselementen 902I-902L verwalten (z. B. bewirken). Die lokale (z. B. Auslegungs-)Steuerung 908D kann die Auslegung und/oder Extraktion von Verarbeitungselementen 902M-902P verwalten (z. B. bewirken). Eine lokale Steuerung kann ferner durch eine Steuerung auf höherer Ebene, z. B. Steuerung 914 gesteuert werden.
  • In 9A empfangen lokale Steuerungen ihre Signale von (Kachel-)Steuerung 914, z. B. für eine Auslegung (z. B. gemäß einem ersten Kontext). Diese Signale (z. B. Befehle) steuern das Verhalten der lokalen Steuerungen zum Auslegen ihrer entsprechenden Teilmenge von Verarbeitungselementen. Eine Extraktion des aktuellen Betriebszustands (z. B. der Operanden usw.) kann, beispielsweisem bei einem Kontextwechsel von einem ersten Kontext zu einem zweiten, unterschiedlichen Kontext erwünscht sein. Die Konstanten 1 und 2 in Verarbeitungselementen 902G bzw. 902K können als Eingaben genutzt werden, diese Offenbarung ist allerdings nicht so begrenzt.
  • In 9B haben die lokalen (z. B. Auslegungs- und/oder Extraktions-)Steuerungen 908A-908D ihre Auslegung (z. B. gemäß einem ersten Kontext) abgeschlossen und können jetzt operieren, wenn z. B. Eingabedaten und/oder Ausgabedatenraum (z. B. kein Gegendruck ist bestätigt) verfügbar ist. Sei als nächstes angenommen, dass eine Anforderung erfolgt, den Kontext zu extrahieren, der momentan in 9B ist. Diese Extraktion kann in Phasen durchgeführt werden, z. B. von oben nach unten (im Programm-/Operationsfluss).
  • In 9C wird mit der Extraktion des Kontexts der (z. B. ausgelegten und/oder nicht ausgelegten) Verarbeitungselemente (902A-902D) begonnen, z. B. durch die lokale Steuerung 908A. Beispielsweise werden beliebige Eingabedaten, Ausgabedaten und entsprechende Gegendrucksignale aus den ausgelegten Verarbeitungselementen 902A und 902B extrahiert (und gespeichert). Die verbleibenden Verarbeitungselemente (902E-902P, z. B. nur 902G, 902K und 902O) können weiter operieren, z. B. unter der Annahme, dass sie Eingabedaten und/oder Ausgabedatenraum haben (z. B. kein Gegendruck ist bestätigt). In 9C hat Verarbeitungselement 902G als Pick-Operator 904 gedient und hat Ausgabedaten 916. Leere Kreise in diesen Figuren können Eingabedatenwert und/oder Ausgabedatenraum (z. B. kein Gegendruck ist bestätigt) gemäß einem ersten Kontext darstellen, und durchgehende Kreise in diesen Figuren können Eingabedatenwerte und/oder Ausgabedatenraum (z. B. kein Gegendruck ist bestätigt) gemäß einem ersten Kontext darstellen.
  • In 9D findet die Extraktion des Kontexts von Verarbeitungselementen (902A-902D) immer noch statt, und Ausgabedaten 916 wurden durch Verarbeitungselement 902K verbraucht das als Multipliziereroperator 908 wirkt und Augabedaten 918 hat.
  • In 9E ist die Extraktion des Kontexts von Verarbeitungselementen (902A-902D) abgeschlossen, und Ausgabedaten 918 wurden durch Verarbeitungselement 902O verbraucht das als Weichenoperator 906 wirkt und Augabedaten 918 hat. Der Kontext der (z. B. ausgelegten und/oder nicht ausgelegten) nächsten Teilmenge von Verarbeitungselementen (902E-902H) wird begonnen, z. B. durch die lokale Steuerung 908B. Beispielsweise werden beliebige Eingabedaten, Ausgabedaten und entsprechende Gegendrucksignale aus dem ausgelegten Verarbeitungselement 902G extrahiert (und gespeichert). Die verbleibenden Verarbeitungselemente (902I-902P, z. B. nur 902K und 902O) können weiter operieren, z. B. unter der Annahme, dass sie Eingabedaten und/oder Ausgabedatenraum haben (z. B. kein Gegendruck ist bestätigt). In bestimmten Ausführungsformen können sich Daten nicht über einen Extraktionsbereich hinaus bewegen, z. B. hier ist der Extraktionsbereich die Verarbeitungselemente (902E-902H). Daher werden in Ausführungsformen, in denen ein Extraktionsbereich keine neuen Daten akzeptieren soll (z. B. bestätigt dieser Bereich von Verarbeitungselementen sein Gegendrucksignal), Ausgabedaten 920 angehalten (es sollte z. B. als Pick-Operator 904 zu Verarbeitungselement 902G gehen). In einer Ausführungsform können neue Daten für Bereiche über (z. B. in Programmflussreihenfolge) den Extraktionsbereichen erzeugt werden, z. B. durch Verarbeitungselement 902A als Gleichheitsprüfoperator 910 und/oder durch Verarbeitungselement 902B als Kleiner-als-Operator 912.
  • In 9F ist die Extraktion des Kontexts von Verarbeitungselementen (902E-902H) abgeschlossen. Der Kontext der (z. B. ausgelegten und/oder nicht ausgelegten) nächsten Teilmenge von Verarbeitungselementen (902I-902L) wird begonnen, z. B. durch die lokale Steuerung 908C. Beispielsweise werden beliebige Eingabedaten, Ausgabedaten und entsprechende Gegendrucksignale aus dem ausgelegten Verarbeitungselement 902K extrahiert (und gespeichert). Die verbleibenden Verarbeitungselemente (902M-902P, z. B. nur 902O) können weiter operieren, z. B. unter der Annahme, dass sie Eingabedaten und/oder Ausgabedatenraum haben (z. B. kein Gegendruck ist bestätigt). In bestimmten Ausführungsformen können sich Daten nicht über einen Extraktionsbereich hinaus bewegen, z. B. hier ist der Extraktionsbereich die Verarbeitungselemente (902I-902L). Daher werden in Ausführungsformen, in denen ein Extraktionsbereich (und jeder (logisch) darüber befindliche Bereich) keine neuen Daten akzeptieren soll (z. B. bestätigt dieser Bereich von Verarbeitungselementen sein Gegendrucksignal, um zu verhindern, dass Daten diesen Bereich passieren), Ausgabedaten 920 angehalten (es sollte z. B. als Pick-Operator 904 zu Verarbeitungselement 902G gehen). In einer Ausführungsform können neue Daten für Bereiche über (z. B. in Programmflussreihenfolge) dem Extraktionsbereich erzeugt werden, z. B. wobei die Ausgabedaten 922 von Verarbeitungselement 902A als Gleichheitsprüfoperator 910 angehalten werden, zu Verarbeitungselement 902O zu gehen (z. B. über den Extraktionsbereich) und/oder wobei die Ausgabedaten 924 von Verarbeitungselement 902B als Kleiner-als-Operator 912 nicht angehalten werden, zu Verarbeitungselement 902G zu gehen (z. B. nicht den (prozessinternen) Extraktionsbereich zu queren).
  • In 9G ist die Extraktion des Kontexts von Verarbeitungselementen (902I-902L) abgeschlossen. Der Kontext der (z. B. ausgelegten und/oder nicht ausgelegten) nächsten Teilmenge von Verarbeitungselementen (902M-902P) wird begonnen, z. B. durch die lokale Steuerung 908D. Beispielsweise werden beliebige Eingabedaten, Ausgabedaten (angehaltene Ausgabedaten 920) und entsprechende Gegendrucksignale aus dem ausgelegten Verarbeitungselement 902O extrahiert (und gespeichert). Es gibt hier keine weiteren nachgelagerten Verarbeitungselement, deren Kontext gespeichert werden könnte (z. B. dies ist das Ende dieses Teils des Datenflussgraphen), sodass die Extraktion fast abgeschlossen ist. Die obigen Verarbeitungselemente (902A-902L, z. B. nur 902A, 902B, 902G und 902K) können weiter operieren, z. B. unter der Annahme, dass sie Eingabedaten und/oder Ausgabedatenraum haben (z. B. kein Gegendruck ist bestätigt). In bestimmten Ausführungsformen können sich Daten nicht über einen Extraktionsbereich hinaus bewegen, z. B. hier ist der Extraktionsbereich die Verarbeitungselemente (902M-902P). Daher werden in Ausführungsformen, in denen ein Extraktionsbereich (und jeder (logisch) darüber befindliche Bereich) keine neuen Daten akzeptieren soll (z. B. bestätigt dieser Bereich von Verarbeitungselementen sein Gegendrucksignal, um zu verhindern, dass Daten diesen Bereich passieren), Ausgabedaten von Verarbeitungselement 902G angehalten (es wartet z. B. auf Daten von Verarbeitungselement 902O, um fortzufahren). In einer Ausführungsform können neue Daten für Bereiche über (z. B. in Programmflussreihenfolge) dem Extraktionsbereich erzeugt werden, z. B. wobei die Ausgabedaten 922 von Verarbeitungselement 902G als Pick-Operator 904 mit Ausgabedaten von Verarbeitungselement 902O als Weichenoperator 906 angehalten werden, aber nicht abgehalten werden, den (prozessinternen) Extraktionsbereich zu queren.
  • In 9H haben die lokalen (z. B. Auslegungs- und/oder Extraktions-)Steuerungen 908A-908D ihre Extraktion eines ersten Kontexts (und Auslegung für einen zweiten Kontext) abgeschlossen und können jetzt operieren, wenn z. B. Eingabedaten und/oder Ausgabedatenraum (z. B. kein Gegendruck ist bestätigt) verfügbar ist. Beispielsweise kann das räumliche Array 900 (z. B. der darin geladene Datenflussgraph) nach der Extraktion für eine unterschiedliche Menge von (Eingabe-)Operanden wiederverwendet werden, z. B. als ein zweiter Kontext. In 9H kann eine Datenausgabe 926 (z. B. von einer vorherigen Operation auf Kontext zwei) verfügbar sein (z. B. in das räumliche Array 900 ausgelegt sein), und so als Pick-Operator 904 aufwärts zu Verarbeitungselement 902G fließen, wie in 9I gezeigt.
  • In 9J kann Verarbeitungselement 902G als Pick-Operator 904 all seine Operanden und keine Gegendrucksignale haben und so Ausgabedaten 928 erzeugen. In einer Ausführungsform kann, zum Zugreifen auf eine lokale Steuerung, eine Steuerung auf höherer Ebene Zugriff auf die Adresse für die lokalen Steuerungen haben, die sie verwaltet. Eine lokale Steuerung kann Zugriff auf die Adresse für die Verarbeitungselemente haben (z. B. berechnen), die sie verwaltet. Die Adresse für ein PE kann durch die Steuerung auf höherer Ebene (z. B. Bereichssteuerung), die z. B. Kenntnis der Speicherformate für den Kontext des räumlichen Arrays hat, eingesendet werden.
  • 10A stellt einen extrahierten Zustand 1000 gemäß Ausführungsformen der Offenbarung dar. 10B stellt einen Zustand 1000 am Beginn einer Extraktion gemäß Ausführungsformen der Offenbarung dar. 10A und 10B stellen dar, dass, wenn eine Extraktion phasengesteuert ist, die Extraktion die Form des Datenflussgraphen annehmen kann, die in 10A gezeigt ist (z. B. mit den Eingabe- und Ausgabedaten von diesem gespeicherten Zustand, angezeigt als leere Kreise), obwohl dieser Zustand in seiner exakten Form zu keinem Zeitpunkt existiert hat. Daher kann gesagt werden, dass die phasengesteuerte Extraktionsausgabe in 10A die gültige Ansicht (z. B. Zustand) des räumlichen Arrays erfasst (z. B. Datenflussgraph, dargestellt im räumlichen Array), während 10B den Zustand zu Beginn einer phasengesteuerten Extraktion darstellt, die mehrere Phasen umfasst (z. B. mehrere Phasen eines einzelnen Teils eines Datenflussgraphen). Der Zustand in 10A kann dem ursprünglichen Zustand (als die Extraktion erstmal begann) mehrere Schritte voraus sein, da, beispielsweise, mehrere Operationen ausgeführt wurden, z. B. Verbrauchen von Eingabedaten 1002 und 1004 und Erzeugen von Ausgabedaten 1006.
  • 11 stellt eine Zustandsmaschine 1100 für eine (z. B. Auslegungs-)Steuerung gemäß Ausführungsformen der Offenbarung dar. Eine Steuerung kann eine Hardware-Zustandsmaschine umfassen, z. B. in jeder lokalen (z. B. Auslegungs-)Steuerung. Die Zustandsmaschine kann eine Mealy-Maschine oder eine Moore-Maschine sein. Zustand 1102 kann sein, wo eine Steuerung (z. B. auf höherer Ebene) eine Steuernachricht sendet, um einen Kontextwechsel anzuzeigen, z. B. für ein oder mehrere vorher ausgelegte PE(s) von einer anderen (z. B. lokalen) Steuerung. Das bzw. die vorher ausgelegte(n) PE oder PEs können gemäß einem ersten (z. B. alten) Kontext (z. B. eines Datenflussgraphen) in Zustand 1104 operieren (z. B. wenn Eingabedatenoperanden und Ausgaberaum verfügbar sind), z. B. bis die Daten allesamt verbraucht sind. In Zustand 1106 kann dann eingetreten werden, z. B. basierend auf dem angeforderten Kontextwechsel, und es kann begonnen werden, den Kontext (z. B. alte Auslegung) des bzw. der vorher ausgelegten PEs zu extrahieren. Bei Abschluss der Extraktion, z. B. nach Zustand 1106 oder beim Eintritt in Zustand 1112, kann die lokale (z. B. Auslegungs-)Steuerung eine Nachricht an angrenzende Steuerungen senden, um eine fließbandverarbeitete Kontextweiche zu bilden. In einer Ausführungsform sendet die lokale (z. B. Auslegungs-)Steuerung eine Nachricht an die nächste lokale (z. B. Auslegungs-)Steuerung(en) (z. B. 2, 3, 4 ,5 usw. Steuerungen) als eine Indikation, dass sie beginnen können, den ersten Kontext für ihre Teilmenge von Verarbeitungselement(en) zu extrahieren. Zusätzlich oder alternativ sendet die lokale (z. B. Auslegungs-)Steuerung eine Nachricht an die vorherige lokale (z. B. Auslegungs-)Steuerung(en) (z. B. 2, 3, 4 ,5 usw. Steuerungen) als eine Indikation, dass sie beginnen können, einen zweiten (z. B. neuen) Kontext in ihre Teilmenge von Verarbeitungselement(en) auszulegen (z. B. zu laden). In Zustand 1112 können dann die letzten extrahierten Verarbeitungselemente in einem nicht ausgelegten Zustand gehalten werden. In Zustand 1114 können diese nicht ausgelegten Verarbeitungselemente beginnen, einen zweiten Kontext in ihre Teilmenge von Verarbeitungselement(en) auszulegen (z. B. zu laden), beispielsweise, bei Empfang einer Nachricht von einer oder mehreren nächsten lokalen (z. B. Auslegungs-)Steuerung(en) (z. B. 2, 3, 4 ,5 usw. Steuerungen), dass ihre Extraktion des ersten Zustands abgeschlossen ist. In Zustand 1116 kann dieser neue Zustand (z. B. Auslegung) auf dem bzw. den ausgelegten Verarbeitungselement(en) ausgeführt werden und dann zu Zustand 1104 zurückkehren, z. B. wenn eine Steuerung (z. B. auf höherer Ebene) eine Steuernachricht sendet, um einen weiteren Kontextwechsel zu initiieren. In einer Ausführungsform kann ein Kontext von einem oder mehreren unterschiedlichen Datenflussgraph(en) oder (z. B. unterschiedlichen Teilen) des gleichen Datenflussgraphen sein.
  • 12A stellt eine Extraktion von Kontext für ein räumliches Array 1202 von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar. Das räumliche Array 1202 ist schematisch dargestellt, um eine anfängliche Auslegungsnachricht zu zeigen, die eine über das gesamte räumliche Array wirksame (z. B. über die Fabric-Struktur ausgebreitete) Barriere (z. B. Extraktionsbereich) bildet, die durch das gesamte räumliche Array (z. B. Fabric-Struktur) streicht, beispielsweise, unter der Steuerung und Anleitung der Steuerung auf höherer Ebene (z. B. Kachel-Ebene) 1204. Steuerung 1204 kann lokale Steuerungen steuern, um diese Pipeline zu koordinieren. ACI-Netzwerk und RAF können sein, wie hier erörtert. Obwohl 12A hier ein0phasige Ordnung darstellt, sind andere Topologien möglich.
  • 12B stellt eine Extraktion von Kontext für ein räumliches Array 1202 von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar. Das räumliche Array 1202 ist schematisch dargestellt, um eine über das gesamte räumliche Array wirksame (z. B. über die Fabric-Struktur ausgebreitete) Barriere (z. B. Extraktionsbereich mit „auf Auslegung wartend“) zu zeigen, die durch das gesamte räumliche Array (z. B. Fabric-Struktur) streicht, beispielsweise, unter der Steuerung und Anleitung der Steuerung auf höherer Ebene (z. B. Kachel-Ebene) 1204. Steuerung 1204 kann lokale Steuerungen steuern, um diese Pipeline zu koordinieren. In einer Ausführungsform entsprechen die Zustände des räumlichen Arrays 1202 in 12B denen in 4A-4D. ACI-Netzwerk und RAF können sein, wie hier erörtert. Obwohl 12B hier einphasige Ordnung darstellt, sind andere Topologien möglich.
  • 13 stellt eine phasengesteuerte Extraktion von Kontext für ein räumliches Array von Verarbeitungselementen dar, das ein (z. B. Mezzanine- oder globales) Netzwerk dazwischen umfasst, gemäß Ausführungsformen der Offenbarung. Das Netzwerk kann ein beliebiges hier erörtertes Netzwerk sein. 13 umfasst eine Blockdarstellung eines Extraktionsbereichs 1302, NACH-(Extraktions-)Bereichs 1304 und VOR-(Extraktions-)Bereichs 1306, die eine Netzwerknachricht umfassen, die diese Bereiche kreuzen.
  • Nachrichten in Netzwerken können Phasengrenzen (z. B. Extraktionsbereich) kreuzen. In einer Ausführungsform zeichnet die Hardware (z. B. eine Netzwerksteuerung, wie hier erörtert) einen Zustand von Netzwerktoken auf. In einer Ausführungsform kann die Netzwerksteuerung eine NACH- (z. B. Extraktionsbereichs-)Übergangsnachricht auf jedem Kanal injizieren und bis zum Empfangen einer NACH-Nachricht keine VOR- (z. B. Extraktionsbereichs-)Nachricht ausgeben. Die Netzwerksteuerung kann ihren Zustand aufzeichnen, wenn NACH-Nachrichten für alle aktiven Kanäle empfangen wedren. In einer Ausführungsform ist früher Verbrauch der Nachricht zulässig, aber der Zustand wird erhalten. Zueinander passende Nachrichten (z. B. Nachricht vom gleichen Kontext) können weitergeleitet werden, VOR kann beispielsweise VOR-Nachrichten verbrauchen, und NACH kann NACH-Nachrichten verbrauchen. Fehlende Übereinstimmung kann bedeuten, dass die Daten azs der falschen Epoche stammen und warten müssen. VOR-Nachrichten können befördert werden. VOR-Endpunkte können auf Extraktion warten. VOR-Nachrichten können auf NACH-Übergang warten.
  • 14 stellt eine phasengesteuerte Extraktion von Kontext für ein räumliches Array 1400 von Verarbeitungselementen 1402 dar, das Speicherzugriff umfasst, gemäß Ausführungsformen der Offenbarung. Kommunikationen durch den Speicher können in einigen Ausführungsformen genutzt werden. In der dargestellten Ausführungsform berühren nur die Verarbeitungselemente im NACH-Bereich (z. B. nach dem Extraktionsbereich) den Speicher (z. B. Cache), z. B. abgeschwächt durch zunächst Extrahieren von nahe dem Speicher (z. B. nahe einer Abfrage-Adressdatei-Schaltung (RAF, Request Address File) befindlichen PEs, um sie schnell wieder zu aktivieren. In einer Ausführungsform dient ein räumliches Array (z. B. Steuerung) dazu, einen VOR-Bereich von PEs und einen NACH-Bereich von PEs als widersprüchliche Kanalgruppen zu behandeln, z. B. bei Detektion eines Widerspruchs zwischen den zwei Bereichen auf einen VOR-Speicherauszug zurückzusetzen. In einer Ausführungsform dient das räumliche Array (z. B. Steuerung) dazu, alte und neue Werte im Cache aktiv zu halten, z. B. jeder Epoche zu erlauben, auf ihren Wert zuzugreifen. In einer Ausführungsform kann Extrahieren auf physisch nahe dem Cache (z. B. L2-Cache in 14) befindliche Verarbeitungselemente helfen, Zugriff schnell wiederherzustellen, wo z. B. Extraktion in der Ausführungsform in 14 nach auswärts fortfährt (z. B. abstrahlt). Das räumliche Array 1400 kann mit einer Vektorverarbeitungseinheit 1404 und/oder einem Prozessorkern 1410 gekoppelt sein.
  • Behandeln von Speicheroperationen: es kann sein, dass ein Kontext Speicheroperationen hat, die während einer Extraktionsperiode ausstehend sind. In diesem Fall reserviert die Cache-Schnittstelle (z. B. CHA) die Ressourcen, die bereits den ausstehenden Anforderungen zugeordnet sind, z. B. Schlitze in einem Neuordnungspuffer, bis diese Anforderungen durch das Speichersystem abgeschlossen werden. An diesem Punkt können Anforderungen in die Darstellung im Speicher des ausgeräumten Prozesses geschrieben werden, und die zugeordneten Ressourcen können zur Verwendung durch den neu ausgelegten Kontext an die Speicherschnittstelle zurückgegeben werden. In einer Ausführungsform während, während Anforderungen ausstehend sind, die zugehörigen Ressourcen nicht durch den neuen Kontext verwendet.
  • 15A stellt eine Extraktion von Kontext für ein räumliches Array 1500A von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar. In einer Ausführungsform kann ein zweiter (z. B. nächster) Extraktionsbereich erhalten werden (z. B. wo keine Daten den Bereich kreuzen können), um Kommunikationen zwischen Epochen zu verhindern, z. B. zusätzlich zu einem momentan extrahierenden Bereich. In einer Ausführungsform kann phasengesteuerte Extraktion ohne Modifikationeen an einem oder mehreren Verarbeitungselement(en) erreicht werden, beispielsweise, wo ein lokales Netzwerk während der Extraktion deaktiviert wird (z. B. über Gegendrucksignale). Dies kann eine undurchdringliche Barriere bereitstellen (z. B. da die Gegendrucksignale aktiv sind). Eine doppelte Schichtung von Extraktion kann sicherstellen, dass PEs in der ersten Schicht nicht mit dem VOR-Bereich interferieren, wenn sie zu NACH übergehen, wie z. B. in 15A. In bestimmten Ausführungsformen wird eine sorgfältige Orchestrierung und Koordinierung auf höherer Ebene genutzt, z. B. für die Funktion von bereichsbasierten und/oder globalen Extraktionssteuerungen. NACH kann sich auf den neuen Auslegungsbereich beziehen, der mit der neuen Auslegung (z. B. Kontext) ausgelegt ist. VOR kann sich auf den vorherigen Auslegungsbereich beziehen, der mit der vorherigen Auslegung (z. B. Kontext) ausgelegt ist.
  • 15B stellt eine Extraktion von Kontext für ein räumliches Array 1500B von Verarbeitungselementen gemäß Ausführungsformen der Offenbarung dar. 15B stellt eine detaillierte Zeitscheibe eines fließbandverarbeiteten Kontextwechsels dar. Fünf Bereiche sind in 15B dargestellt: die ausführenden Kontexte, der momentan extrahierende Bereich, der momentan auslegende Bereich und ein Pufferbereich dazwischen.
  • 16 stellt ein Flussdiagramm 1600 gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 1600 umfasst Bereitstellen eines Prozessors, umfassend mehrere Verarbeitungselemente und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen, einen Datenflussgraphen aufweisend, umfassend mehrere Knoten, die über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt sind, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen 1602 dargestellt ist; Durchführen einer Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge (z. B. Eingabedaten und/oder Ausgabedatenraum (z. B. kein Gegendruck ist vom Ziel für die Ausgabe bestätigt)) an den mehreren Verarbeitungselementen 1604 eingeht; Auslegen, mit einer Auslegungssteuerung des Prozessors, einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen 1606; und Auslegen, für einen angeforderten Kontextwechsel mit der Auslegungssteuerung des Prozessors, der ersten Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem (z. B. alle) ausstehenden Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge von einer Ausgabe der ersten Teilmenge, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge 1608 abgeschlossen sind.
  • 17 stellt ein Flussdiagramm gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 1700 umfasst Bereitstellen eines Prozessors, umfassend mehrere Verarbeitungselemente und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen, einen Datenflussgraphen aufweisend, umfassend mehrere Knoten, die über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt sind, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen 1702 dargestellt ist; Durchführen einer Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen 1704 eingeht; Auslegen, mit einer ersten Auslegungssteuerung und einer zweiten Auslegungssteuerung des Prozessors, einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gemäß entsprechenden Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen 1706; und Auslegen, für einen angeforderten Kontextwechsel mit der ersten Auslegungssteuerung des Prozessors, der ersten Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem (z. B. alle) ausstehende(n) Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge von einer Ausgabe der ersten Teilmenge, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge 1708 abgeschlossen sind.
  • CSA-ARCHITEKTUR
  • Das Ziel bestimmter Ausführungsformen eines CSA ist das schnelle und effiziente Ausführen von Programmen, z. B. Programmen, die von Kompilierern erzeugt werden. Bestimmte Ausführungsformen der CSA-Architektur stellen Programmierabstraktionen bereit, die den Bedarf an Kompilierertechnologien und Programmierparadigmen unterstützen. Ausführungsformen des CSA führen Datenflussgraphen aus, z. B. eine Programmmanifestation, welche die kompilierereigene interne Repräsentation (IR) von kompilierten Programmen eng imitiert. In diesem Modell wird ein Programm als ein Datenflussgraph dargestellt, der aus Knoten (z. B. Scheitelpunkten), die aus einem Satz von architektonisch definierten Datenflussoperatoren (die z. B. sowohl Rechen- als auch Steueroperationen umschließen) und Rändern besteht, welche die Übertragung von Daten zwischen den Datenflussoperatoren repräsentieren. Die Ausführung kann durch Einfügen von Datenfluss-Token (die z. B. Datenwerte sind oder repräsentieren) in den Datenflussgraphen fortschreiten. Die Token können zwischen jedem Knoten (z. B. Scheitelpunkt) fließen und umgewandelt werden und z. B. eine vollständige Berechnung bilden. Ein beispielhafter Datenflussgraph und seine Ableitung aus einem Quellcode auf hoher Ebene ist in 18A-18C gezeigt, und 20 zeigt ein Beispiel der Ausführung eines Datenflussgraphen.
  • Ausführungsformen des CSA sind für die Datenflussgraphausführung durch Bereitstellen exakt solcher Datenflussgraph-Ausführungsunterstützungen ausgelegt, die durch die Kompilierer erfordert werden. In einer Ausführungsform ist das CSA ein Beschleuniger (z. B. ein Beschleuniger aus 2), der nicht versucht, einige der notwendigen aber selten verwendeten Mechanismen bereitzustellen, die auf universellen Verarbeitungskernen verfügbar sind (z. B. einem Kern aus 2), wie z. B. Systemaufrufe. Daher kann das CSA in dieser Ausführungsform viele Codes ausführen, aber nicht alle Codes. Im Gegenzug erzielt das CSA signifikante Leistungs- und Energievorteile. Zum Aktivieren der Beschleunigung von Code, der in herkömmlich verwendeten sequentiellen Sprachen geschrieben ist, führen die Ausführungsformen hierin auch verschiedene neuartige Architekturmerkmale zum Unterstützen des Kompilierers ein. Eine besondere Neuheit ist die CSA-Speicherbehandlung, ein Gegenstand, der zuvor ignoriert oder nur dürftig angegangen wurde. Ausführungsformen des CSA sind auch eindeutig bei der Verwendung von Datenflussoperatoren, z. B. im Gegensatz zu Nachschlagetabellen (LUT), als ihre fundamentale Architekturschnittstelle.
  • Mit erneuter Bezugnahme auf die Ausführungsformen des CSA werden als nächstes die Datenflussoperatoren erläutert.
  • Datenflussoperatoren
  • Die wichtigste Architekturschnittstelle der Ausführungsformen des Beschleunigers (z. B. CSA) ist der Datenflussoperator, z. B. als eine direkte Repräsentation eines Knotens in einem Datenflussgraphen. Aus einer Operationsperspektive verhalten sich die Datenflussoperatoren in einer Streaming- oder datengesteuerten Weise. Die Datenflussoperatoren können ausführen, sobald ihre eingehenden Operanden verfügbar werden. Die CSA-Datenflussausführung kann (z. B. nur) von einem stark lokalisierten Status abhängig sein, der z. B. in einer hoch skalierbaren Architektur mit einem verteilten, asynchronen Ausführungsmodell resultiert. Die Datenflussoperatoren können arithmetische Datenflussoperatoren aufweisen, z. B. eine oder mehrere von Gleitkomma-Addition und - Multiplikation, Integer-Addition, Subtraktion und Multiplikation, verschiedene Vergleichsformen, logische Operatoren und Verschiebung. Die Ausführungsformen des CSA können auch einen reichen Satz an Steueroperatoren aufweisen, welche die Verwaltung der Datenfluss-Token in dem Programmgraphen stützen. Beispiele davon weisen einen „Pick-“ Operator auf, der z. B. zwei oder mehr logische Eingabekanäle zu einem einzelnen Ausgabekanal multiplext, sowie einen „Weichen-“ Operator, der z. B. als ein Kanal-Demultiplexer arbeitet (der z. B. einen einzelnen Kanal aus zwei oder mehreren logischen Eingabekanälen ausgibt). Diese Operatoren können einem Kompilierer ermöglichen, Steuerparadigmen umzusetzen, wie etwa bedingte Ausdrücke. Bestimmte Ausführungsformen eines CSA können einen begrenzten Datenflussoperatorsatz (z. B. für eine relativ kleine Anzahl an Operationen) aufweisen, um dichte und energieeffiziente PE-Mikroarchitekturen zu ergeben. Bestimmte Ausführungsformen können Datenflussoperatoren für komplexe Operationen aufweisen, die in HPC-Code gewöhnlich sind. Die CSA-Datenflussoperator-Architektur ist für einsatzspezifische Erweiterungen stark anpassungsfähig. Zum Beispiel können komplexere mathematische Datenflussoperatoren, z. B. trigonometrische Funktionen, in bestimmten Ausführungsformen zum Beschleunigen bestimmter mathematikintensiver HPC-Arbeitslasten einschließen. Auf ähnliche Weise kann eine neuralnetzwerkabgestimmte Erweiterung Datenflussoperatoren für eine vektorisierte niederpräzise Arithmetik einschließen.
  • 18A stellt eine Programmquelle gemäß Ausführungsformen der Offenbarung dar. Der Programmquellcode weist eine Multiplikationsfunktion (func) auf. 18B stellt einen Datenflussgraphen 1800 für die Programmquelle aus 18A gemäß Ausführungsformen der Offenbarung dar. Der Datenflussgraph 1800 umfasst einen Pick-Knoten 1804, Weichenknoten 1806 und Multiplikationsknoten 1808. Ein Puffer kann wahlweise entlang eines oder mehrerer Kommunikationspfade aufgenommen sein. Der dargestellte Datenflussgraph 1800 kann eine Operation der Auswahl der Eingabe X mit Pick-Knoten 1804 durchführen, X mit Y multiplizieren (z. B. Multiplikationsknoten 1808) und dann das Ergebnis von der übrigen Ausgabe des Weichenknotens 1806 ausgeben. 18C stellt einen Beschleuniger (z. B. CSA) mit mehreren Verarbeitungselementen 1801, ausgelegt zum Ausführen des Datenflussgraphen aus 3B, gemäß Ausführungsformen der Offenbarung dar. Insbesondere wird der Datenflussgraph 1800 über das Array der Verarbeitungselemente 1801 (z. B. und das bzw. die (z. B. Verbindungs-)Netzwerk(e) dazwischen) gelegt, z. B. sodass jeder Knoten des Datenflussgraphen 1800 als ein Datenflussoperator in dem Array aus Verarbeitungselementen 1801 dargestellt ist. Beispielsweise können bestimmte Datenflussoperationen mit einem Verarbeitungselement erreicht werden, und/oder bestimmte Datenflussoperationen können mit einem Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon) erreicht werden. Beispielsweise kann eine Pick-, PickSingleLeg-, PickAny-, Switch- und/oder SwitchAny-Operation mit einer oder mehreren Komponenten eines Kommunikationsnetzwerks (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon) erreicht werden, z. B. im Gegensatz zu einem Verarbeitungselement.
  • In einer Ausführungsform dienen ein oder mehrere der Verarbeitungselemente in dem Array von Verarbeitungselementen 1801 zum Zugriff auf den Speicher durch die Speicherschnittstelle 1802. In einer Ausführungsform entspricht der Pick-Knoten 1804 des Datenflussgraphen 1800 somit dem Pick-Operator 1804A (wird z. B. davon repräsentiert), der Weichenknoten 1806 des Datenflussgraphen 1800 entspricht also dem Weichenoperator 1806A (wird z. B. davon repräsentiert) und der Multiplizierer-Knoten 1808 des Datenflussgraphen 1800 entspricht also dem Multiplizierer-Operator 1808A (wird z. B. dadurch repräsentiert). Ein weiteres Verarbeitungselement und/oder ein Flusssteuerungspfadnetzwerk können die Steuersignale (z. B. Steuer-Token) an den Pick-Operator 1804A und den Weichenoperator 1806A bereitstellen, um die Operation in 18A durchzuführen. In einer Ausführungsform ist das Array von Verarbeitungselementen 1801 zum Ausführen des Datenflussgraphen 1800 aus 18B ausgelegt, bevor die Ausführung beginnt. In einer Ausführungsform führt der Kompilierer die Umwandlung aus 18A-18B durch. In einer Ausführungsform bettet die Eingabe der Datenflussgraphknoten in das Array aus Verarbeitungselementen den Datenflussgraphen logisch in das Array aus Verarbeitungselementen ein, z. B. wie weiter unten besprochen, sodass der Eingabe-/Ausgabepfad zum Erzeugen des gewünschten Ergebnisses ausgelegt ist.
  • Latenzinsensitive Kanäle
  • Kommunikationsbögen sind die zweite Hauptkomponente des Datenflussgraphen. Bestimmte Ausführungsformen eines CSA beschreiben diese Bögen als latenzinsensitive Kanäle, z. B. reihenfolgetreue, Gegendruck aufweisende (die z. B. keine Ausgabe erzeugen oder senden, bis ein Platz zum Speichern der Ausgabe vorhanden ist), Punkt-zu-Punkt-Kommunikationskanäle. Wie bei den Datenflussoperatoren sind die latenzinsensitiven Kanäle fundamental asynchron und geben die Freiheit, viele Typen von Netzwerken zum Umsetzen der Kanäle eines bestimmten Graphen zusammenzustellen. Latenzinsensitive Kanäle können willkürlich lange Latenzen aufweisen und die CSA-Architektur weiterhin gewissenhaft umsetzen. In bestimmten Ausführungsformen ist es jedoch ein großer Anreiz bezüglich der Leistung und Energie, die Latenzen so klein wie möglich zu machen. Abschnitt 3.2 hierin offenbart eine Netzwerk-Mikroarchitektur, in der die Datenflussgraphenkanäle fließbandverarbeitet mit nicht mehr als einem Latenzzyklus umgesetzt sind. Ausführungsformen von latenzinsensitiven Kanälen stellen eine kritische Abstraktionsschicht bereit, die mit der CSA-Architektur zum Bereitstellen einer Anzahl von Laufzeitdiensten an den Anwendungsprogrammierer genutzt werden können. Ein CSA kann beispielsweise die latenzinsensitiven Kanäle bei der Umsetzung der CSA-Auslegung (dem Laden eines Programms auf ein CSA-Array) nutzen.
  • 19 stellt eine beispielhafte Ausführung des Datenflussgraphen 1900 gemäß Ausführungsformen der Offenbarung dar. Bei Schritt 1 können Eingabewerte (z. B. 1 für X in 18B und 2 für Y in 18B) in den Datenflussgraphen 1900 geladen werden, um eine 1 x 2-Muliplikationsoperation durchzuführen. Ein oder mehrere Dateneingabewerte können in der Operation (z. B. 1 für X und 2 für Y in Bezug auf 18B) statisch (z. B. konstant) sein oder während der Operation aktualisiert werden. Bei Schritt 2 gibt ein Verarbeitungselement (z. B. auf einem Flusssteuerungspfadnetzwerk) oder eine andere Schaltung eine Null an die Steuereingabe (z. B. Mux-Steuersignal) von Pick-Knoten 1904 aus (z. B. um eine eins von Port „0“ zu seiner Ausgabe zu beschaffen) und gibt eine Null an die Steuereingabe (z. B. Mux-Steuersignal) von Weichenknoten 1906 aus (z. B. zum Bereitstellen seiner Eingabe aus Port „0“ zu einem Ziel (z. B. einem nachgelagerten Verarbeitungselement). Bei Schritt 3 wird der Datenwert 1 vom Pick-Knoten 1904 an den Multiplizierer-Knoten 1908 ausgegeben (und z. B. sein Steuersignal „0“ am Pick-Knoten 1904 verbraucht), um mit dem Datenwert von 2 bei Schritt 4 multipliziert zu werden. Bei Schritt 4 erreicht die Ausgabe des Multiplizierer-Knotens 1908 den Weichenknoten 1906, was z. B. den Weichenknoten 1906 veranlasst, ein Steuersignal „0“ zu verbrauchen, um den Wert von 2 von Port „0“ von Weichenknoten 1906 bei Schritt 5 auszugeben. Die Operation ist dann abgeschlossen. Ein CSA kann daher dementsprechend programmiert werden, damit ein entsprechender Datenflussoperator für jeden Knoten die Operation in 19 durchführt. Obwohl die Ausführung in diesem Beispiel serialisiert ist, können im Prinzip alle Datenflussoperationen parallel ausgeführt werden. Die Schritte werden in 19 verwendet, um die Datenflussausführung von jeder physischen mikroarchitektonischen Manifestation zu differenzieren. In einer Ausführungsform dient ein nachgelagertes Verarbeitungselement dazu, ein Signal an Weiche 1906 zu senden (oder kein Bereit-Signal zu senden) (z. B. auf einem Flusssteuerpfadnetzwerk), um die Ausgabe von Weiche 1906 aufzuhalten, z. B. bis das nachgelagerte Verarbeitungselement für die Ausgabe bereit ist (z. B. Speicherplatz aufweist).
  • Speicher
  • Datenflussarchitekturen konzentrieren sich im Allgemeinen auf die Kommunikation und Datenmanipulation und schenken dem Zustand weniger Beachtung. Das Aktivieren von echter Software, insbesondere Programmen, die in sequentiellen älteren Sprachen geschrieben sind, erfordert eine bedeutende Beachtung der Schnittstelle mit dem Speicher. Bestimmte Ausführungsformen eines CSA verwenden Architekturspeicheroperationen als ihre primäre Schnittstelle zur (z. B. großen) zustandsbehafteten Speicherung. Aus der Perspektive des Datenflussgraphen ähneln die Speicheroperationen anderen Datenflussoperationen, mit der Ausnahme, dass sie den Nebeneffekt der Aktualisierung eines gemeinsam genutzten Speichers aufweisen. Insbesondere haben Speicheroperationen von bestimmten Ausführungsformen hierin die gleiche Semantik wie jeder andere Datenflussoperator, z. B. werden „ausgeführt“, wenn ihre Operanden, z. B. eine Adresse, verfügbar ist und nach einiger Latenz eine Antwort erzeugt wird. Bestimmte Ausführungsformen hierin entkoppeln die Operandeneingabe explizit und resultieren in einer Ausgabe, sodass die Speicheroperatoren natürlich fließbandverarbeitet sind und das Potenzial aufweisen, viele simultan ausstehende Anforderungen zu erzeugen, welche diese z. B. ausgezeichnet für die Latenz- und Bandbreitencharakteristika eines Speicheruntersystems geeignet machen. Ausführungsformen eines CSA stellen grundlegende Speicheroperationen bereit, wie etwa Laden, was einen Adressenkanal nimmt und einen Antwortkanal mit den Werten, die den Adressen entsprechen, füllt, und ein Speichern. Ausführungsformen eines CSA können auch erweiterte Operationen wie speicherinterne Atomik- und Konsistenz-Operatoren bereitstellen. 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 sequentieller Sprachen wie C und Fortran beschrieben werden. Eine Folge der Unterstützung dieser Sprachmodelle ist das Adressieren der Programmspeicherreihenfolge, z. B. der seriellen Anordnung von Speicheroperationen, die typischerweise durch diese Sprachen vorgeschrieben sind.
  • 20 stellt eine Programmquelle (z. B. C-Code) 2000 gemäß Ausführungsformen der Offenbarung dar. Gemäß der Speichersemantik der C-Programmiersprache ist die Speicherkopie (memcpy) zu serialisieren. Memcpy kann jedoch mit einer Ausführungsform des CSA parallelisiert werden, wenn die Arrays A und B bekanntermaßen unverbunden sind. 20 veranschaulicht ferner das Problem der Programmreihenfolge. Allgemein können Kompilierer nicht nachweisen, dass Array A anders als Array B ist, z. B. entweder für den gleichen Wert des Index oder einen anderen Wert des Index über den Schleifenkörpern. Dies ist als Zeiger- oder Speicher-Aliasing bekannt. Da Kompilierer einen statisch korrekten Code erzeugen müssen, werden sie gewöhnlich zur Serialisierung der Speicherzugriffe gezwungen. Typischerweise verwenden Kompilierer, die auf sequentielle von-Neumann-Architekturen abzielen, die Befehlsreihenfolge als natürliches Mittel zum Durchsetzen der Programmreihenfolge. Ausführungsformen des CSA besitzen jedoch keine Vorstellung von Befehlen oder befehlsbasierter Programmreihenfolge, wie durch einen Programmzähler definiert. In bestimmten Ausführungsformen sind eingehende Abhängigkeits-Token, die z. B. keine architektonisch sichtbare Information enthalten, wie alle anderen Datenfluss-Token, und die Speicheroperationen können nicht ausgeführt werden, bis sie ein Abhängigkeits-Token empfangen haben. In bestimmten Ausführungsformen erzeugen die Speicheroperationen ein ausgehendes Abhängigkeits-Token, sobald ihre Operation für alle logisch nachfolgenden abhängigen Speicheroperationen sichtbar ist. In bestimmten Ausführungsformen gleichen die Abhängigkeits-Token anderen Datenfluss-Token in einem Datenflussgraphen. Da Speicheroperationen z. B. in bedingten Kontexten auftreten, können die Abhängigkeits-Token auch unter Verwendung von Steueroperatoren manipuliert werden, wie in Abschnitt 2.1 beschrieben, z. B. wie alle anderen Token. Abhängigkeits-Token können den Effekt der Serialisierung von Speicherzugriffen haben, z. B. dem Kompilierer eine Einrichtung zum architektonischen Definieren der Reihenfolge von Speicherzugriffen bereitstellen.
  • Laufzeitdienste
  • Ein Hauptpunkt für die Berücksichtigung der Architektur von Ausführungsformen des CSA beinhaltet die tatsächliche Ausführung von Programmen auf Benutzerebene, es kann aber auch wünschenswert sein, verschiedene Mechanismen zu unterstützen, die diese Ausführung stärken. Zu den wichtigsten zählen Auslegung (bei der ein Datenflussgraph in das CSA geladen wird), Extraktion (bei welcher der Zustand eines ausführenden Graphen in den Speicher verschoben wird) und Ausnahmen (in denen mathematische, weiche und andere Arten von Fehlern in der Fabric-Struktur erkannt und behandelt werden, möglicherweise durch eine externe Entität). Abschnitt 3.6 unten erläutert die Eigenschaften einer latenzinsensitiven Datenflussarchitektur einer Ausführungsform eines CSA, um effiziente, stark fließbandverarbeitete Umsetzungen dieser Funktionen zu ergeben. Konzeptuell kann die Auslegung den Zustand eines Datenflussgraphen in das Verbindungs- (und/oder Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon)) und die Verarbeitungselemente (z. B. Fabric-Struktur) laden, z. B. allgemein aus dem Speicher. Während dieses Schrittes können alle Strukturen im CSA mit einem neuen Datenflussgraphen geladen werden und alle Datenfluss-Token in diesem Graphen, z. B. als Folge eines Kontextwechsels, leben. Die latenzinsensitive Semantik eines CSA kann eine verteilte, asynchrone Initialisierung der Fabric-Struktur ermöglichen, z. B. kann sie die Ausführung unmittelbar beginnen, sobald die PEs ausgelegt sind. Nicht ausgelegte PEs können ihre Kanäle gegendrücken, bis sie ausgelegt werden, z. B. Kommunikationen zwischen ausgelegten und nicht ausgelegten Elementen verhindern. Die CSA-Auslegung kann in einen Bevorzugungszustand und Zustand auf Benutzerebene partitioniert werden. Eine solche Zwei-Level-Partitionierung kann eine primäre Auslegung der Fabric-Struktur ermöglichen, ohne dazu das Betriebssystem aufzurufen. Während einer Extraktionsausführungsform wird eine logische Ansicht des Datenflussgraphen erfasst und in den Speicher festgeschrieben, z. B. durch Aufnehmen aller Live-Steuer- und Datenfluss-Token und Zustand in dem Graphen.
  • Die Extraktion kann auch eine Rolle bei der Bereitstellung von Zuverlässigkeitsgarantien durch die Schaffung von Fabric-Strukturprüfpunkten spielen. Ausnahmen in einem CSA können allgemein durch die gleichen Ereignisse verursacht werden, die Ausnahmen in Prozessoren bewirken, wie z. B. illegale Operatorargumente oder RAS-Ereignisse (RAS - Reliability (Zuverlässigkeit), Availability (Verfügbarkeit) und Serviceability (Betriebsfähigkeit). In bestimmten Ausführungsformen werden Ausnahmen auf der Ebene der Datenflussoperatoren erfasst, wie z. B. durch Prüfen von Argumentwerten oder durch modulare arithmetische Schemata. Nach dem Detektieren einer Ausnahme kann ein Datenflussoperator (z. B. eine Schaltung) halten und eine Ausnahmenachricht emittieren, die z. B. sowohl einen Operationsidentifikator als auch einige Details über die Natur des Problems, das aufgetreten ist, enthält. In einer Ausführungsform bleibt der Datenflussoperator angehalten, bis er neu ausgelegt wurde. Die Ausnahmenachricht kann dann einem zugeordneten Prozessor (z. B. Kern) zur Wartung kommuniziert werden, die z. B. das Extrahieren des Graphen zur Softwareanalyse einschließen kann.
  • Architektur auf Kachel-Ebene
  • Ausführungsformen der CSA-Computerarchitekturen (z. B. auf HPC und Datencenter abzielende Verwendungen) sind nebeneinander angeordnet. 21 und 23 zeigen den Einsatz eines CSA auf Kachel-Ebene. 23 zeigt eine Voll-Kachel-Umsetzung eines CSA, die z. B. ein Beschleuniger eines Prozessors mit einem Kern sein kann. Ein Hauptvorteil dieser Architektur kann reduziertes Ausgestaltungsrisiko sein, sodass das CSA und der Kern z. B. bei der Herstellung vollständig entkoppelt sind. Zusätzlich zu der Ermöglichung einer besseren Komponentenwiederverwendung kann dies der Ausgestaltung der Komponenten wie dem CSA-Cache ermöglichen, nur das CSA zu berücksichtigen, statt z. B. die strikteren Latenzanforderungen des Kerns zu integrieren. 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 vektorparellelen Arbeitslasten, sodass die meisten vektorartigen Arbeitslasten direkt auf dem CSA laufen, aber in bestimmten Ausführungsformen können die vektorartigen Befehle in dem Kern eingeschlossen sein, z. B. zum Unterstützen von älteren Binärdaten.
  • MIKROARCHITEKTUR
  • In einer Ausführungsform ist das Ziel der CSA-Mikroarchitektur das Bereitstellen einer hochqualitativen Umsetzung jedes Datenflussoperators, der durch die CSA-Architektur spezifiziert wird. Ausführungsformen der CSA-Mikroarchitektur sorgen dafür, dass jedes Verarbeitrungselement (und/oder Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon)) der Mikroarchitektur etwa einem Knoten (z. B. Entität) im architektonischen Datenflussgraphen entspricht. In einer Ausführungsform wird ein Knoten im Datenflussgraphen in mehrere Netzwerkdatenfluss-Endpunktschaltungen verteilt. In bestimmten Ausführungsformen führt dies zu Mikroarchitekturelementen, die nicht nur kompakt sind, was zu einem dichten Berechnungsarray führt, sondern auch energieeffizient, zum Beispiel, wenn Verarbeitungselemente (PEs) sowohl einfach als auch weitestgehend ungemultiplext sind, z. B. einen einzelnen Datenflussoperator für eine Auslegung (z. B. Programmierung) des CSA ausführen. Um Energie und Umsetzungsfläche weiter zu verringern, kann ein CSA einen auslegbaren, heterogenen Fabric-Strukturstil umfassen, bei dem jedes PE davon nur eine Teilmenge von Datenflussoperatoren umsetzt (z. B. mit einer separaten Teilmenge von Datenflussoperatoren, die mit Netzwerkdatenfluss-Ednpunktschaltung(en) umgesetzt sind). Periphere und unterstützende Teilsysteme, wie z. B. der CSA-Cache, können bereitgestellt werden, um die verteilte Parallelität zu unterstützen, die in der Haupt-CSA-Verarbeitungs-Fabric-Struktur selbst vorherrscht. Die Umsetzung von CSA-Mikroarchitekturen kann Datenfluss- und latenzinsensitive Kommunikationsabstraktionen verwenden, die in der Architektur vorhanden sind. In bestimmten Ausführungsformen gibt es (z. B. im Wesentlichen) eine Eins-zu-Eins-Entsprechung zwischen Knoten in dem kompilierererzeugten Graphen und den Datenflussoperatoren (z. B. Datenflussoperator-Rechenelementen) in einem CSA.
  • Es folgt eine Erläuterung eines beispielhaften CSA, gefolgt von einer detaillierteren Erläuterung der Mikroarchitektur. Bestimmte Ausführungsformen hierin stellen ein CSA bereit, das eine einfache Kompilierung ermöglicht, z. B. im Gegensatz zu bestehenden FPGA-Kompilierern, die eine kleine Teilmenge einer Programmiersprache (z. B. C oder C++) behandeln und viele Stunden benötigen, um selbst kleine Programme zu kompilieren.
  • Bestimmte Ausführungsformen einer CSA-Architektur erlauben heterogene grobkörnige Operationen, wie Gleitkomma mit doppelter Genauigkeit. Programme können in weniger grobkörnigen Operationen ausgedrückt werden, z. B. so, dass der offenbarte Kompilierer schneller läuft als herkömmliche räumliche Kompilierer. Bestimmte Ausführungsformen beinhalten eine Fabric-Struktur mit neuen Verarbeitungselementen, um sequentielle Konzepte wie programmgeordnete Speicherzugriffe zu unterstützen. Bestimmte Ausführungsformen setzen Hardware um, um grobkörnige datenflussartige Kommunikationskanäle zu unterstützen. Dieses Kommunikationsmodell ist abstrakt und kommt der vom Kompilierer verwendeten Steuerdatenflussrepräsentation sehr nahe. Bestimmte Ausführungsformen hierin umfassen eine Netzwerkumsetzung, die Einzelzyklus-Latenzzeitkommunikationen unterstützt, z. B. Benutzen (z. B. kleiner) PEs, die einzelne Steuerdatenflussoperationen unterstützen. In bestimmten Ausführungsformen verbessert dies nicht nur die Energieeffizienz und Leistung, sondern vereinfacht auch die Kompilierung, da der Kompilierer eine Eins-zu-Eins-Abbildung zwischen Datenflusskonstrukten auf hoher Ebene und der Fabric-Struktur vornimmt. Bestimmte Ausführungsformen hierin vereinfachen somit die Aufgabe des Kompilierens existierender (z. B. C-, C++- oder Fortran-) Programme zu einem CSA (z. B. Fabric-Struktur).
  • Die Energieeffizienz kann ein Hauptanliegen moderner Rechensysteme sein. Bestimmte Ausführungsformen hierin stellen ein neues Schema von energieeffizienten räumlichen Architekturen bereit. In bestimmten Ausführungsformen bilden diese Architekturen eine Fabric-Struktur mit einer einzigartigen Zusammensetzung aus einer heterogenen Mischung aus kleinen, energieeffizienten, datenflussorientierten Verarbeitungselementen (PEs) (und/oder einem paketvermittelten Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon)) mit einem leichtgewichtigen leitungsvermittelten Kommunikationsnetzwerk (z. B. Verbindungsnetzwerk), z. B. mit einer gehärteten Unterstützung der Flussteuerung. Aufgrund der Energievorteile davon kann die Kombination dieser Komponenten einen räumlichen Beschleuniger (z. B. als Teil eines Rechners) bilden, der zum Ausführen von kompilierererzeugten parallelen Programmen in einer extrem energieeffizienten Weise geeignet ist. Da diese Fabric-Struktur heterogen ist, können bestimmte Ausführungsformen an unterschiedliche Anwendungsdomänen durch Einführen neuer domänenspezifischer PEs angepasst werden. Eine Fabric-Struktur für die Hochleistungsberechnung könnte z. B. einige Anpassungen für doppelte Genauigkeit, fusioniertes Multiplizieren-Addieren, enthalten, während eine Fabric-Struktur, die auf tiefe neuronale Netzwerke abzielt, Gleitkomma-Operationen mit niedriger Genauigkeit beinhalten könnte.
  • Eine Ausführungsform eines räumlichen Architekturschemas, wie es z. B. in 21 veranschaulicht ist, ist die Zusammensetzung von leichtgewichtigen Verarbeitungselementen (PE), die durch ein Inter-PE-Netzwerk verbunden sind. Im Allgemeinen können PEs Datenflussoperatoren umfassen, wo z. B., sobald alle Eingabeoperanden bei dem Datenflussoperator eingegangen sind, einige Operationen (z. B. Mikrobefehl oder Mikrobefehlssatz) ausgeführt werden, und die Ergebnisse an nachgelagerte Operatoren weitergeleitet werden. Steuerung, Planung und Datenspeicherung können daher unter den PEs verteilt sein, z. B. durch Entfernen des Aufwands der zentralisierten Strukturen, die klassische Prozessoren dominieren.
  • Programme können in Datenflussgraphen umgewandelt werden, die auf die Architektur abgebildet werden, indem PEs und Netzwerk ausgelegt werden, um den Steuerdatenflussgraphen des Programms auszudrücken. Kommunikationskanäle können flussgesteuert und vollständig gegengedrückt sein, sodass z. B. die PEs anhalten, wenn entweder die Quellkommunikationskanäle keine Daten aufweisen oder die Zielkommunikationskanäle voll sind. In einer Ausführungsform fließen Daten zur Laufzeit durch die PEs und Kanäle, die zum Umsetzen der Operation ausgelegt wurden (z. B. ein beschleunigter Algorithmus). Zum Beispiel können Daten aus dem Speicher durch die Fabric-Struktur eingestreamt werden und dann zurück in den Speicher gehen.
  • Ausführungsformen einer solchen Architektur können eine bemerkenswerte Leistungseffizienz gegenüber herkömmlichen Mehrkernprozessoren erreichen: die Rechenleistung (z. B. in Form von PEs) kann einfacher, energieeffizienter und umfangreicher sein als in größeren Kernen, und die Kommunikation kann direkt und meist kurzstreckig sein, z. B. im Gegensatz zum Auftreten über ein breites Vollchip-Netzwerk wie in typischen Mehrkernprozessoren. Da Ausführungsformen der Architektur des Weiteren extrem parallel sind, ist eine Anzahl von leistungsfähigen Optimierungen auf Schaltungs- und Geräteebene möglich, ohne den Durchsatz ernsthaft zu beeinträchtigen, z. B. Geräte mit niedrigem Verlust und niedriger Betriebsspannung. Diese Optimierungen auf niedrigerer Ebene können gegenüber herkömmlichen Kernen noch größere Leistungsvorteile bringen. Die Kombination aus Effizienz auf Architektur-, Schaltungs- und Geräteebene dieser Ausführungsformen ist zwingend. Ausführungsformen dieser Architektur können größere aktive Bereiche ermöglichen, während gleichzeitig die Transistordichte weiter steigt.
  • Ausführungsformen hierin bieten eine einzigartige Kombination aus Datenflussunterstützung und Leitungsvermittlung, um die Fabric-Struktur kleiner, energieeffizienter zu machen und eine höhere Aggregatleistung gegenüber vorherigen Architekturen bereitzustellen. FPGAs sind im Allgemeinen auf eine feinkörnige Bitmanipulation abgestimmt, während Ausführungsformen hierin auf Gleitkomma-Operationen mit doppelter Genauigkeit in HPC-Anwendungen abgestimmt sind. Bestimmte Ausführungsformen hierin können einen FPGA zusätzlich zu einem CSA gemäß dieser Offenbarung aufweisen.
  • Bestimmte Ausführungsformen hier kombinieren ein leichtgewichtiges Netzwerk mit energieeffizienten Datenflussverarbeitungselementen (und/oder Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon)), um eine energieeffiziente HPC-Fabric-Struktur mit hohem Durchsatz und geringer Latenz zu bilden. Dieses Netzwerk mit geringer Latenz kann den Bau von Verarbeitungselementen (und/oder Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon)) mit weniger Funktionen ermöglichen, zum Beispiel nur einen oder zwei Befehle und ggf. ein sichtbares Architekturregister, weil es effizient ist, mehrere PE gemeinsam zu gruppieren, um ein vollständiges Programm zu bilden.
  • Bezüglich eines Prozessorkerns können CSA-Ausführungsformen hierin mehr Rechendichte und Energieeffizienz bereitstellen. Wenn zum Beispiel PEs sehr klein sind (z. B. verglichen mit einem Kern), kann das CSA viel mehr Operationen durchführen und hat viel mehr Rechenparallelität als ein Kern, z. B. womöglich etwa das 16-fache der Anzahl der FMAs einer Vektorverarbeitungseinheit (VPU - Vector Processing Unit). Zum Nutzen aller dieser Rechenelemente ist die Energie pro Operation in bestimmten Ausführungsformen sehr gering.
  • Die Energievorteile unserer Ausführungsformen dieser Datenflussarchitektur sind zahlreich. Parallelität ist in Datenflussgraphen explizit und Ausführungsformen der CSA-Architektur verbrauchen keine oder nur minimale Energie zur Extraktion davon, z. B. im Gegensatz zu reihenfolgeveränderten Prozessoren, die jedes Mal, wenn ein Befehl ausgeführt wird, die Parallelität neu erkennen müssen. Da jedes PE in einer Ausführungsform für eine einzelne Operation verantwortlich ist, können die Registerdateien und Port-Zählungen klein sein, z. B. oft nur eins, und verbrauchen daher weniger Energie als ihre Gegenstücke im Kern. Bestimmte CSAs weisen viele PEs auf, von denen jedes Live-Programmwerte enthält, die den Gesamteffekt einer riesigen Registerdatei in einer traditionellen Architektur ergeben, was die Speicherzugriffe drastisch reduziert. In Ausführungsformen, bei denen der Speicher vom Mehrfachporttyp und verteilt ist, kann ein CSA viel mehr anstehende Speicheranforderungen erfüllen und mehr Bandbreite als ein Kern nutzen. Diese Vorteile können kombiniert werden, um einen Energiepegel pro Watt zu ergeben, der nur einen kleinen Prozentsatz der Kosten der bloßen arithmetischen Schaltung darstellt. Zum Beispiel kann im Falle einer Integer-Multiplikation ein CSA nicht mehr als 25% mehr Energie als die zugrundeliegende Multiplikationsschaltung verbrauchen. In Bezug auf eine Ausführungsform eines Kerns verbraucht eine Integeroperation in dieser CSA-Fabric-Struktur weniger als 1/30 der Energie pro Integeroperation.
  • Aus einer Programmierperspektive ergibt die anwendungsspezifische Formbarkeit von Ausführungsformen der CSA-Architektur wichtige Vorteile gegenüber einer Vektorverarbeitungseinheit (VPU). Bei traditionellen, unflexiblen Architekturen müssen die Anzahl funktionaler Einheiten, wie Gleitdivision, oder die verschiedenen transzendentalen mathematischen Funktionen zum Ausgestaltungszeitpunkt basierend auf einem erwarteten Anwendungsfall gewählt werden. In Ausführungsformen der CSA-Architektur können solche Funktionen basierend auf den Anforderungen jeder Anwendung (z. B. durch einen Benutzer und nicht einen Hersteller) in der Fabric-Struktur ausgelegt werden. Der Anwendungsdurchsatz kann dadurch weiter gesteigert werden. Gleichzeitig verbessert sich die Rechendichte von Ausführungsformen des CSA, indem die Verhärtung solcher Funktionen vermieden wird und stattdessen mehr Instanzen primitiver Funktionen wie Gleitmultiplikation vorgesehen werden. Diese Vorteile können bei HPC-Arbeitslasten von Bedeutung sein, von denen einige 75% der Gleitkomma-Ausführung in transzendentalen Funktionen verbrauchen.
  • Bestimmte Ausführungsformen des CSA stellen einen bedeutenden Fortschritt als eine datenflussorientierte räumliche Architektur dar, weil z. B. die PEs dieser Offenbarung kleiner, aber auch energieeffizienter sein können. Diese Verbesserungen können sich direkt aus der Kombination von datenflussorientierten PEs mit einer leichtgewichtigen, leitungsvermittelten Zwischenverbindung ergeben, die zum Beispiel im Gegensatz zu einem paketvermittelten Netzwerk eine Einzelzykluslatenz aufweist (z. B. mit einer 300% höheren Latenz an einem Minimum). Bestimmte Ausführungsformen der PEs unterstützen die 32-Bit- oder 64-Bit-Operation. Bestimmte Ausführungsformen hierin erlauben die Einführung neuer anwendungsspezifischer PEs, z. B. für Maschinenlernen oder Sicherheit, und sind keine rein homogene Kombination. Bestimmte Ausführungsformen hierin kombinieren leichtgewichtige datenflussorientierte Verarbeitungselemente mit einem leichtgewichtigen Netzwerk mit geringer Latenz zum Bilden einer energieeffizienten Fabric-Rechenstruktur.
  • Damit bestimmte räumliche Architekturen erfolgreich sind, müssen Programmierer sie mit relativ geringem Aufwand auslegen, z. B. dabei gegenüber sequentiellen Kernen eine signifikante Energie- und Leistungsüberlegenheit erhaltend. Bestimmte Ausführungsformen hierin stellen ein CSA (z. B. räumliche Fabric-Struktur) bereit, das leicht programmiert werden kann (z. B. durch einen Kompilierer), energieeffizient und hochparallel ist. Bestimmte Ausführungsformen hierin stellen ein Netzwerk (z. B. Verbindungsnetzwerk) bereit, das diese drei Ziele erreicht. Aus einer Programmierbarkeitsperspektive stellen bestimmte Ausführungsformen des Netzwerks flussgesteuerte Kanäle bereit, die z. B. dem Steuerdatenflussgraphen-Modell (CDFG, Control-Dataflow Graph) der Ausführung entsprechen, das in Kompilierern verwendet wird. Bestimmte Netzwerkausführungsformen benutzen zweckgebundene leitungsvermittelte Verknüpfungen, so dass die Programmleistung sowohl von einem Menschen als auch einem Kompilierer leichter zu verstehen ist, weil die Leistung vorhersagbar ist. Bestimmte Netzwerkausführungsformen bieten sowohl hohe Bandbreite als auch niedrige Latenz. Bestimmte Netzwerkausführungsformen (z. B. statische leitungsvermittelte) stellen eine Latenz von 0 bis 1 Zyklus bereit (z. B. je nach der Übertragungsstrecke). Bestimmte Ausführungsformen stellen eine hohe Bandbreite durch paralleles Verlegen verschiedener Netzwerke bereit, z. B. in Low-Level-Metallen. Bestimmte Netzwerkausführungsformen kommunizieren in Low-Level-Metallen und über kurze Strecken und sind somit sehr energieeffizient.
  • Bestimmte Ausführungsformen von Netzwerken weisen eine Architekturunterstützung für die Durchflusssteuerung auf. Zum Beispiel können in räumlichen Beschleunigern, die aus kleinen Verarbeitungselementen (PEs) bestehen, die Kommunikationslatenz und die Bandbreite für die Gesamtprogrammleistung bedeutend sein. Bestimmte Ausführungsformen hierin stellen ein leichtgewichtiges leitungsvermitteltes Netzwerk bereit, das die Kommunikation zwischen PEs in räumlichen Verarbeitungsarrays, wie dem in 21 gezeigten räumlichen Array, und den mikroarchitektonischen Steuermerkmalen, die notwendig sind, um dieses Netzwerk zu unterstützen, erleichtert. Bestimmte Ausführungsformen eines Netzwerks ermöglichen die Konstruktion von flussgesteuerten Punkt-zu-Punkt-Kommunikationskanälen, welche die Kommunikation der datenflussorientierten Verarbeitungselemente (PEs) unterstützen. Zusätzlich zu den Punkt-zu-Punkt-Kommunikationen können bestimmte Netzwerke hierin auch Multicast-Kommunikationen unterstützen. Die Kommunikationskanäle können durch statisches Konfigurieren des Netzwerks zum Bilden virtueller Schaltungen zwischen den PEs gebildet werden. Schaltungsumschalttechniken hierin können die Kommunikationslatenz verringern und die Netzwerkpufferung entsprechend minimieren, was zum Beispiel sowohl zu einer hohen Leistungsfähigkeit als auch zu einer hohen Energieeffizienz führt. In bestimmten Ausführungsformen eines Netzwerks kann die Inter-PE-Latenz so niedrig wie ein Null-Zyklus sein, was bedeutet, dass das nachgelagerte PE mit Daten im Zyklus arbeiten kann, nachdem es erzeugt wurde. Zum Erhalten einer noch höheren Bandbreite und zum Zulassen von mehr Programmen kann eine Vielzahl von Netzwerken parallel angeordnet sein, wie z. B. in 21 gezeigt.
  • Räumliche Architekturen, wie etwa die in 21 gezeigte, können die Zusammensetzung von leichtgewichtigen Verarbeitungselementen sein, die durch ein Inter-PE-Netzwerk (und/oder Kommunikationsnetzwerk (z. B. einer Netzwerkdatenfluss-Endpunktschaltung davon)) verbunden sind. Programme, die als Datenflussgraphen angesehen werden, können auf der Architektur durch Auslegen der PEs und des Netzwerks abgebildet werden. Im Allgemeinen können PEs als Datenflussoperatoren ausgelegt sein und, sobald alle Eingabeoperanden am PE eingehen, kann dann eine Operation erfolgen und das Ergebnis an die gewünschten nachgelagerten PEs weitergeleitet werden. PEs können über zweckgebundene virtuelle Schaltungen kommunizieren, die durch statistisches Auslegen eines leitungsvermittelten Kommunikationsnetzwerks gebildet werden. Diese virtuellen Schaltungen können flussgesteuert und vollständig gegengedrückt sein, z. B. so, dass die PEs anhalten, wenn entweder die Quelle keine Daten aufweist oder der Zielspeicherplatz voll ist. Bei Laufzeit können Daten durch die PEs fließen und den abgebildeten Algorithmus umsetzen. Zum Beispiel können Daten aus dem Speicher durch die Fabric-Struktur eingestreamt werden und dann zurück in den Speicher gehen. Ausführungsformen dieser Architektur können eine bemerkenswerte Leistungseffizienz im Vergleich zu herkömmlichen Mehrkernprozessoren erreichen: wenn zum Beispiel eine Berechnung in der Form von PEs einfacher und zahlreicher ist als größere Kerne und die Kommunikation direkt ist, z. B. im Gegensatz zu einer Erweiterung des Speichersystems.
  • 21 stellt eine Beschleuniger-Kachel 2100, umfassend ein Array von Verarbeitungselementen (PEs), gemäß Ausführungsformen der Offenbarung dar. Das Verbindungsnetzwerk ist als leitungsvermittelte, statisch ausgelegte Kommunikationskanäle dargestellt. Zum Beispiel eine Gruppe von Kanälen, die durch eine Weiche miteinander verbunden sind (z. B. Weiche 2110 in einem ersten Netzwerk und Weiche 2111 in einem zweiten Netzwerk). Das erste Netzwerk und das zweite Netzwerk können getrennt oder zusammengekoppelt sein. Die Weiche 2110 kann z. B. einen oder mehrere der vier Datenpfade (2112, 2114, 2116, 2118) zusammenkoppeln, z. B. wie zum Durchführen einer Operation gemäß einem Datenflussgraphen ausgelegt. In einer Ausführungsform kann die Anzahl von Datenpfaden jede beliebige Vielzahl sein. Das Verarbeitungselement (z. B. Verarbeitungselement 2104) kann wie hierin offenbart sein, zum Beispiel, wie in 24. Die Beschleuniger-Kachel 2100 weist eine Speicher-/Cache-Hierarchieschnittstelle 2102 auf, z. B. zum Verbinden der Beschleuniger-Kachel 2100 mit einem Speicher und/oder Cache. Ein Datenpfad (z. B. 2118) kann sich zu einer anderen Kachel erstrecken oder enden, z. B. am Rand einer Kachel. Ein Verarbeitungselement kann einen Eingabepuffer (z. B. Puffer 2106) und einen Ausgabepuffer (z. B. Puffer 2108) aufweisen.
  • Die Operationen können basierend auf der Verfügbarkeit ihrer Eingaben und dem Status des PE ausgeführt werden. Ein PE kann Operanden aus den Eingabekanälen erhalten und die Ergebnisse in Ausgabekanäle schreiben, auch wenn ein interner Registerzustand ebenfalls verwendet werden kann. Bestimmte Ausführungsformen hierin beinhalten ein auslegbares datenflussfreundliches PE. 24 zeigt ein detailliertes Blockdiagramm eines solchen PE: dem Integer-PE. Dieses PE besteht aus verschiedenen E/A-Puffern, einer ALU, einem Speicherregister, einigen Befehlsregistern und einer Ablaufsteuerung. Jeden Zyklus kann die Ablaufsteuerung einen Befehl für die Ausführung basierend auf der Verfügbarkeit der Eingabe- und Ausgabepuffer und dem Status des PE auswählen. Das Ergebnis der Operation kann dann entweder in einen Ausgabepuffer oder ein Register (z. B. lokal oder PE) geschrieben werden. Die Daten, die in einen Ausgabepuffer geschrieben werden, können zu einem nachgelagerten PE zur weiteren Verarbeitung transportiert werden. Dieser PE-Stil kann extrem energieeffizient sein, z. B. weil, statt Daten aus einer komplexen Mehrportregisterdatei zu lesen, ein PE die Daten aus einem Register liest. Auf ähnliche Weise können die Befehle direkt in einem Register gespeichert werden, anstelle in einem virtuellen Befehls-Cache.
  • Befehlsregister können während eines speziellen Auslegungsschrittes eingestellt werden. Während dieses Schritts können Hilfssteuerdrähte und Zustand zusätzlich zum Inter-PE-Netzwerk zum Streamen in der Auslegung über die verschiedenen PEs, welche die Fabric-Struktur umfassen, verwendet werden. Als Ergebnis der Parallelität können bestimmte Ausführungsformen eines solchen Netzwerks eine schnelle Neuauslegung bereitstellen, z. B. kann ein kachelgroßes Netzwerk in weniger als etwa 10 Mikrosekunden ausgelegt sein.
  • 24 stellt eine beispielhafte Auslegung eines Verarbeitungselements dar, in dem z. B. alle Architekturelemente minimal bemessen sind. In anderen Ausführungsformen ist jede der Komponenten eines Verarbeitungselements unabhängig bemessen, um neue PEs zu erzeugen. Zum Behandeln komplizierterer Programme kann z. B. eine größere Anzahl von Befehlen eingefügt werden, die durch ein PE ausführbar sind. Eine zweite Dimension der Auslegbarkeit ist abhängig von der PE-Arithmetik-Logik-Einheit (ALU). In 24 ist ein Integer-PE dargestellt, das Addition, Subtraktion und verschiedene logische Operationen unterstützen kann. Andere Arten von PEs können durch Ersetzen unterschiedlicher Arten von Funktionseinheiten in dem PE geschaffen werden. Ein Integer-Multiplikations-PE kann beispielsweise keine Register, einen Einzelbefehl und einen einzigen Ausgabepuffer aufweisen. Bestimmte Ausführungsformen eines PE zerlegen eine fusionierte Multiplikation-Addition (FMA) in separate, aber eng gekoppelte, Gleitkomma-Multiplikations- und Gleitkomma-Additionseinheiten zum Verbessern der Unterstützung von Multiplikation-Addition-Schwerarbeitslasten. PEs werden nachstehend erläutert.
  • 22A stellt ein auslegbares Datenpfadnetzwerk 2200 (z. B. von Netzwerk eins oder Netzwerk zwei, die Bezug nehmend auf 21 erläutert wurden) gemäß Ausführungsformen der Offenbarung dar. Das Netzwerk 2200 weist mehrere Multiplexer (z. B. Multiplexer 2202, 2204, 2206) auf, die ausgelegt werden können (z. B. über zugehörige Steuersignale), um einen oder mehrere Datenpfade (z. B. von PEs) miteinander zu verbinden. 22B stellt ein auslegbares Flusssteuerungsnetzwerk 2201 (z. B. von Netzwerk eins oder Netzwerk zwei, die Bezug nehmend auf 21 erläutert wurden) gemäß Ausführungsformen der Offenbarung dar. Ein Netzwerk kann ein leichtgewichtiges PE-PE-Netzwerk sein. Bestimmte Ausführungsformen eines Netzwerks können als eine Menge von zusammenfügbaren Grundelementen zum Bau von verteilten, Punkt-zu-Punkt-Datenkanälen gedacht sein. 22A zeigt ein Netzwerk, das zwei aktivierte Kanäle aufweist, die fette schwarze Linie und die gepunktete schwarze Linie. Der Kanal der fetten schwarzen Linie ist Multicast, z. B. wird eine einzelne Eingabe an zwei Ausgaben gesendet. Es sei angemerkt, dass sich die Kanäle an einigen Punkten innerhalb eines einzelnen Netzwerks kreuzen können, selbst wenn zweckgebundene leitungsvermittelte Pfade zwischen den Kanalendpunkten gebildet werden. Des Weiteren stellt dieses Kreuzen keine strukturelle Gefahr zwischen den zwei Kanälen dar, sodass jeder unabhängig und bei voller Bandbreite arbeitet.
  • Das Umsetzen von verteilten Datenkanälen kann zwei Pfade aufweisen, wie in 22A-22B dargestellt. Der Vorwärts- oder Datenpfad, trägt Daten von einem Erzeuger zu einem Verbraucher. Multiplexer können zum Lenken von Daten und Validieren von Bits von dem Erzeuger zu dem Verbraucher ausgelegt sein, wie z. B. in 22A. Im Fall von Multicast werden die Daten zu einer Vielzahl von Verbraucherendpunkten gelenkt. Der zweite Teil dieser Ausführungsform eines Netzwerks ist die Flusssteuerung oder der Gegendruckpfad, der in Gegenrichtung des Vorwärtsdatenpfads fließt, wie z. B. in 22B. Die Verbraucherendpunkte können bestätigen, wenn sie zum Annehmen neuer Daten bereit sind. Diese Signale können dann zurück zum Erzeuger unter Verwendung der auslegbaren logischen Konjunktionen gelenkt werden, die als Flusssteuerungsfunktion in 22B gekennzeichnet sind (z. B. Rückfluss). In einer Ausführungsform kann jede Flusssteuerungsfunktionsschaltung mehrere Weichen (z. B. Muxes) aufweisen, wie z. B. ähnlich denen aus 22A. Der Flusssteuerungspfad kann zurückkehrende Steuerdaten von dem Verbraucher an den Erzeuger behandeln. Konjunktionen können Multicast ermöglichen, wobei z. B. jeder Verbraucher Daten empfangen kann, bevor der Erzeuger annimmt, dass diese empfangen wurden. In einer Ausführungsform ist ein PE ein PE, das einen Datenflussoperator als seine Architekturschnittstelle aufweist. Zusätzlich oder alternativ kann in einer Ausführungsform ein PE eine Art von PE (z. B. in der Fabric-Struktur) sein, z. B. ein PE, das eine auf Befehlszeiger, ausgelösten Befehl oder Zustandsmaschine basierende Architekturschnittstelle aufweist, aber nicht darauf beschränkt ist.
  • Das Netzwerk kann statisch ausgelegt sein, z. B. zusätzlich zu PEs, die statisch ausgelegt sind. Während des Auslegungsschrittes können Auslegungsbits an jeder Netzwerkkomponente gesetzt werden. Diese Bits steuern z. B. die Muxauswahl und die Flusssteuerungsfunktionen. Ein Netzwerk kann mehrere Netzwerke umfassen, z. B. ein Datenpfadnetzwerk und ein Flusssteuerungsnetzwerk. Eine Netzwerk oder mehrere Netzwerke können Pfade unterschiedlicher Breiten benutzen (z. B. einer ersten Breite und einer engeren oder breiteren Breite). In einer Ausführungsform weist ein Datenpfadnetzwerk eine breitere (z. B. Bittransport-)Breite auf als die Breite eines Flusssteuerungspfadnetzwerks. In einer Ausführungsform weist jedes von einem ersten Netzwerk und einem zweiten Netzwerk sein eigenes Datenpfadnetzwerk und Flussteuerungspfadnetzwerk auf, z. B. Datenpfadnetzwerk A und Flusssteuerungspfadnetzwerk A und ein breiteres Datenpfadnetzwerk B und ein Flusssteuerungspfadnetzwerk B.
  • Bestimmte Ausführungsformen eines Netzwerks sind pufferlos, und die Daten müssen sich zwischen dem Erzeuger und Verbraucher in einem Einzelzyklus bewegen. Bestimmte Ausführungsformen eines Netzwerks sind ungebunden, das heißt, das Netzwerk überspannt die gesamte Fabric-Struktur. In einer Ausführungsform kommuniziert ein PE mit einem anderen PE in einem Einzelzyklus. In einer Ausführungsform können zum Verbessern der Routingbandbreite mehrere Netzwerke parallel zwischen die Reihen der PE gelegt werden.
  • Bezüglich der FPGAs haben bestimmte Ausführungsformen von Netzwerken hierin drei Vorteile: Bereich, Frequenz und Programmausdruck. Bestimmte Ausführungsformen von Netzwerken arbeiten grobkörnig, was z. B. die Anzahl an Auslegungsbits reduziert und dadurch den Netzwerkbereich. Bestimmte Ausführungsformen von Netzwerken erhalten die Bereichsreduktion durch direktes Umsetzen der Steuerlogik in der Schaltungsanordnung (z. B. Silicium). Bestimmte Ausführungsformen gehärteter Netzwerkumsetzungen genießen gegenüber FPGA auch einen Frequenzvorteil. Aufgrund eines Bereichs- und Frequenzvorteils kann ein Leistungsvorteil vorhanden sein, wenn eine geringere Spannung als Durchsatzparität verwendet wird. Schließlich stellen bestimmte Ausführungsformen von Netzwerken bessere Semantiken auf hoher Ebene als FPGA-Drähte bereit, insbesondere in Bezug auf die variable Zeitsteuerung, weshalb solche bestimmten Ausführungsformen leichter durch die Kompilierer anzuzielen sind. Bestimmte Ausführungsformen von Netzwerken hierin können als eine Menge von zusammensetzbaren Grundelementen zum Bau von verteilten Punkt-zu-Punkt-Datenkanälen gedacht sein.
  • In bestimmten Ausführungsformen kann eine Multicast-Quelle ihre Daten erst dann bestätigen, wenn ein Bereit-Signal von jeder Senke empfangen wurde. Daher können ein zusätzliches Konjunktions- und Steuerbit in dem Multicastfall benutzt werden.
  • Wie bestimmte PEs kann das Netzwerk statistisch ausgelegt sein. Während dieses Schrittes werden Auslegungsbits an jeder Netzwerkkomponente gesetzt. Diese Bits steuern z. B. die Muxauswahl und die Flusssteuerungsfunktion. Der Vorwärtspfad unseres Netzwerks erfordert, dass einige Bits ihre Muxe schwingen. In dem in 22A gezeigten Beispiel werden vier Bits pro Hop erfordert: die Ost- und West-Muxe benutzen jeweils ein Bit, während die südlich gebundenen Muxe zwei Bits benutzen. In dieser Ausführungsform können vier Bits für den Datenpfad benutzt werden, es können aber 7 Bits für die Flusssteuerungsfunktion benutzt werden (z. B. in dem Flusssteuerungspfadnetzwerk). Andere Ausführungsformen können mehr Bits benutzen, z. B., wenn ein CSA ferner eine Nord-Süd-Richtung benutzt. Die Flusssteuerungsfunktion kann ein Steuerbit für jede Richtung benutzen, aus welcher die Flusssteuerung kommen kann. Dies kann das Einstellen der Sensitivität der Flusssteuerungsfunktion statisch ermöglichen. Die Tabelle 1 unten fasst die Boolsche Algebra-Umsetzung der Flusssteuerungsfunktion für das Netzwerk in 22B zusammen, wobei die Auslegungsbits in Großbuchstaben aufgeführt sind. In diesem Beispiel werden sieben Bits benutzt. Tabelle 2: Flussumsetzung
    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 die dritte Flusssteuerungsbox von links in 22B sind EAST_WEST_SENSITIVE (ostwest-sensitiv) und NORTH_SOUTH_SENSITIVE (nord-süd-sensitiv) als Satz dargestellt, um die Flusssteuerung für Kanäle in fetter Linie bzw. gestrichelter Linie umzusetzen.
  • 23 stellt eine Hardwareprozessor-Kachel 2300, umfassend einen Beschleuniger 2302, gemäß Ausführungsformen der Offenbarung dar. Der Beschleuniger 2302 kann ein CSA gemäß dieser Offenbarung sein. Die Kachel 2300 weist mehrere Cache-Bänke (z. B. Cache-Bank 2308) auf. Abfrage-Adressdatei-Schaltungen (RAF, Request Address File) 2310 können eingeschlossen sein, z. B. wie unten in Abschnitt 3.2 erläutert. ODI kann sich auf eine On-Die-Verbindung beziehen, z. B. eine Verbindung, die sich über den gesamten Chip erstreckt, der alle Kacheln miteinander verbindet. OTI kann sich auf eine On-Tile-Verbindung beziehen, die sich z. B. über eine Kachel erstreckt, die z. B. die Cache-Bänke auf der Kachel miteinander verbindet.
  • Verarbeitungselemente
  • In bestimmten Ausführungsformen umfasst ein CSA ein Array aus heterogenen PEs, in denen die Struktur aus verschiedenen Typen von PEs zusammengesetzt ist, von denen jedes nur eine Teilmenge von Datenflussoperatoren umsetzt. Beispielhaft zeigt 24 eine vorläufige Umsetzung eines PE, das einen breiten Satz von Integer- und Steueroperationen umsetzen kann. Andere PEs, einschließlich solcher, die eine Gleitkomma-Addition, Gleitkomma-Multiplikation, Pufferung und bestimmte Steueroperationen aufweisen, können einen ähnlichen Umsetzungsstil aufweisen, z. B. mit der angemessenen (Datenflussoperator)-Schaltung, welche die ALU ersetzt. PEs (z. B. Datenflussoperatoren) eines CSA können vor dem Beginn der Ausführung zum Umsetzen einer bestimmten Datenflussoperation von einem der Sätze, die das PE unterstützt, ausgelegt (z. B. programmiert) werden. Eine Auslegung kann ein oder zwei Steuerwörter umfassen, die einen Opcode spezifizieren, der die ALU steuert, die verschiedenen Multiplexer innerhalb des PE lenkt und den Datenfluss in die PE-Kanäle hinein und aus diesen heraus betätigt. Die Datenflussoperatoren können durch Mikrocodieren dieser Auslegungsbits umgesetzt werden. Das dargestellte Integer-PE 2400 in 24 ist als Einzelstufen-Logik-Pipeline, die von oben nach unten fließt, organisiert. Daten treten von einem eines Satzes lokaler Netzwerke in PE 2400 ein, in denen sie in einem Eingabepuffer zur nachfolgenden Operation registriert werden. Jedes PE kann eine Anzahl von breiten, datenausgerichteten und schmalen, steuerungsausgerichteten Kanälen unterstützen. Die Anzahl der vorgesehenen Kanäle kann basierend auf der PE-Funktionalität variieren, jedoch weist eine Ausführungsform eines ganzzahlorientierten PE 2 breite und 1-2 schmale Eingabe- und Ausgabekanäle auf. Obwohl das Integer-PE als eine Einzelzyklus-Pipeline umgesetzt ist, können andere Wahlen für das Pipelinenetz benutzt werden. Multiplikations-PEs können z. B. eine Mehrzahl von Pipelinestufen aufweisen.
  • Die PE-Ausführung kann im Datenflussstil voranschreiten. Basierend auf dem Auslegungsmikrocode kann die Ablaufsteuerung den Status der Eintritts- und Austrittspuffer des PE untersuchen und, wenn alle Eingaben für die ausgelegte Operation eingegangen sind und der Austrittspuffer der Operation verfügbar ist, die tatsächliche Ausführung der Operation durch einen Datenflussoperator (z. B. auf der ALU) inszenieren. Der resultierende Wert kann in dem ausgelegten Austrittspuffer platziert werden. Übertragungen zwischen dem Austrittspuffer eines PE und dem Eintrittspuffer eines anderen PE können asynchron auftreten, wenn eine Pufferung verfügbar wird. In bestimmten Ausführungsformen sind die PEs derart ausgestattet, dass mindestens eine Datenflussoperation pro Zyklus abgeschlossen wird. In Abschnitt 2 ist der Datenflussoperator als primitive Operationen umschließend erläutert, wie z. B. Add, Xor oder Pick. Bestimmte Ausführungsformen können Vorteile bei Energie, Bereich, Leistung und Latenz bereitstellen. In einer Ausführungsform können mit einer Erweiterung zu einem PE-Steuerungspfad mehr fusionierte Kombinationen ermöglicht werden. In einer Ausführungsform beträgt die Breite der Verarbeitungselemente 64 Bits, z. B. für die starke Nutzung der Doppelpräzision-Gleitkomma-Berechnung in HPC und zum Unterstützen der 64-Bit-Speicher-Adressierung.
  • Kommunikationsnetzwerke
  • Ausführungsformen der CSA-Mikroarchitektur stellen eine Hierarchie von Netzwerken bereit, die zusammen eine Umsetzung der architektonischen Abstraktion latenzinsensitiver Kanäle über mehrere Kommunikationsmaßstäbe bereitstellen. Die niedrigste Ebene der CSA-Kommunikationshierarchie kann das lokale Netzwerk sein. Das lokale Netzwerk kann ein statisch leitungsvermitteltes sein, das z. B. die Auslegungsregister zum Schwingen eines oder mehrerer Multiplexer in dem lokalen Netzwerkdatenpfad zum Bilden fester elektrischer Pfade zwischen kommunizierenden PEs verwendet. In einer Ausführungsform wird die Auslegung des lokalen Netzwerkes einmal pro Datenflussgraph eingestellt, z. B. gleichzeitig mit der PE-Auslegung. In einer Ausführungsform optimiert die statische Leitungsvermittlung die Energie, z. B. wenn eine große Mehrheit (evtl. größer als 95%) des CSA-Kommunikationsverkehrs das lokale Netzwerk kreuzt. Ein Programm kann Begriffe aufweisen, die in einer Mehrzahl von Ausdrücken verwendet werden. Zum Optimieren in diesem Fall stellen Ausführungsformen hierin eine Hardwareunterstützung für Multicast innerhalb des lokalen Netzwerks bereit. Mehrere verschiedene lokale Netzwerke können zusammengefasst werden, um Routingkanäle zu bilden, die z. B. verschachtelt (als ein Gitter) zwischen Reihen und Spalten der PEs sind. Als eine Optimierung können mehrere verschiedene Netzwerke zum Tragen von Steuerungs-Token aufgenommen sein. Im Vergleich mit einer FPGA-Zwischenverbindung kann ein lokales CSA-Netzwerk an der Granularität des Datenpfads geleitet werden und ein weiterer Unterschied kann die CSA-Behandlung der Steuerung sein. Eine Ausführungsform eines lokalen CSA-Netzwerks ist explizit flussgesteuert (z. B. gegengedrückt). Zum Beispiel muss ein CSA für jeden Vorwärts-Datenpfad und Multiplexer-Satz einen Rückwärtsfluss-Flusssteuerungspfad bereitstellen, der physisch mit dem Vorwärts-Datenpfad gepaart ist. Die Kombination der zwei mikroarchitektonischen Pfade kann eine Punkt-zu-Punkt-Umsetzung der latenzinsensitiven Kanalabstraktion mit niedriger Latenz, niedriger Energie und niedrigem Bereich bereitstellen. In einer Ausführungsform sind die Flusssteuerungsleitungen eines CSA für das Benutzerprogramm nicht sichtbar, können jedoch durch die Architektur in Betrieb des Benutzerprogramms manipuliert werden. Zum Beispiel können die in Abschnitt 2.2 beschriebenen Ausnahmebehandlungsmechanismen erreicht werden, indem Flusssteuerungsleitungen bei der Erkennung eines Ausnahmezustands in einen Zustand „nicht vorhanden“ gezogen werden. Diese Aktion kann nicht nur die Teile der Pipeline, die an der fehlerhaften Berechnung beteiligt sind, elegant anhalten, sondern kann auch den Maschinenzustand, der zu der Ausnahme geführt hat, bewahren, z. B. für eine Diagnoseanalyse. Die zweite Netzwerkschicht, z. B. das Mezzanine-Netzwerk, kann ein gemeinsam genutztes paketvermitteltes Netzwerk sein. Das Mezzanine-Netzwerk kann mehrere verteilte Netzwerksteuerungen, Netzwerkdatenfluss-Endpunktschaltungen umfassen. Das Mezzanine-Netzwerk (z. B. das Netzwerk, das schematisch durch die gestrichelte Box in 37 dargestellt ist) kann allgemeinere Kommunikationen mit größerer Reichweite auf Kosten von, z. B., Latenz, Bandbreite und Energie bereitstellen. In einigen Programmen kann die meiste Kommunikation in dem lokalen Netzwerk stattfinden, weshalb die Mezzanine-Netzwerkbereitstellung im Vergleich beträchtlich reduziert wird, zum Beispiel kann sich jedes PE mit mehreren lokalen Netzwerken verbinden, aber das CSA nur einen Mezzanine-Endpunkt pro logischer Nachbarschaft der PEs bereitstellen. Da das Mezzanine tatsächlich ein gemeinsam genutztes Netzwerk ist, kann jedes Mezzanine-Netzwerk mehrere logisch unabhängige Kanäle tragen und z. B. mit einer Vielzahl von virtuellen Kanälen versehen sein. In einer Ausführungsform ist die Hauptfunktion des Mezzanine-Netzwerks die Bereitstellung von Weitbereichskommunikationen zwischen PEs und zwischen PEs und Speicher. Zusätzlich zu dieser Fähigkeit kann das Mezzanine auch Netzwerkdatenfluss-Endpunktschaltung(en) umfassen, beispielsweise, um bestimmte Datenflussoperationen durchzuführen. Zusätzlich zu dieser Fähigkeit kann das Mezzanine-Netzwerk auch ein Laufzeitunterstützungsnetzwerk betreiben, durch das z. B. verschiedene Dienste auf die komplette Fabric-Struktur auf benutzerprogrammtransparente Weise zugreifen. In dieser Eigenschaft kann der Mezzanine-Endpunkt als eine Steuerung für seine lokale Nachbarschaft dienen, z. B. während der CSA-Auslegung. Zum Bilden der Kanäle, die eine CSA-Kachel überbrücken, können drei Teilkanäle und zwei lokale Netzwerkkanäle (die Verkehr zu und von einem einzelnen Kanal in dem Mezzanine-Netzwerk tragen) benutzt werden. In einer Ausführungsform wird ein Mezzanine-Kanal benutzt, z. B. ein Mezzanine- und zwei lokale = 3 Netzwerk-Hops insgesamt.
  • Die Zusammensetzbarkeit von Kanälen über Netzwerkschichten hinweg kann auf Netzwerkschichten höherer Ebenen an den Inter-Tile-, Inter-Die- und Fabric-Granularitäten erweitert werden.
  • 24 stellt ein Verarbeitungselement 2400 gemäß Ausführungsformen der Offenbarung dar. In einer Ausführungsform wird das Operationsauslegungsregister 2419 während der Auslegung (z. B. Abbildung) geladen und spezifiziert die bestimmte Operation (oder Operationen), die dieses Verarbeitungs- (z. B. Rechen-) Element durchführen soll. Die Aktivität von Register 2420 kann durch diese Operation (eine Ausgabe von Mux 2416, die z. B. durch die Ablaufsteuerung 2414 gesteuert wird) gesteuert werden. Die Ablaufsteuerung 2414 kann eine Operation oder Operationen des Verarbeitungselements 2400 planen, zum Beispiel, wenn Eingabedaten und die Steuereingabe eintreffen. Der Steuereingabepuffer 2422 ist mit dem lokalen Netzwerk 2402 verbunden (z. B. kann das lokale Netzwerk 2402 ein Datenpfadnetzwerk wie in 22A und ein Flusssteuerungspfadnetzwerk wie in 22B umfassen) und wird mit einem Wert geladen, wenn er eintrifft (wenn z. B. das Netzwerk ein oder mehrere Datenbit(s) und ein oder mehrere gültige(s) Bit(s) aufweist). Der Steuerausgabepuffer 2432, der Datenausgabepuffer 2434 und/oder der Datenausgabepuffer 2436 können eine Ausgabe des Verarbeitungselements 2400 empfangen, z. B. wie durch die Operation (eine Ausgabe des Mux 2416) gesteuert. Das Zustandsregister 2438 kann immer dann geladen werden, wenn die ALU 2418 ausgeführt wird (wird auch durch die Ausgabe von Mux 2416 gesteuert). Die Daten in dem Steuereingabepuffer 2422 und Steuerausgabepuffer 2432 können ein Einzelbit sein. Der Mux 2421 (z. B. Operand A) und Mux 2423 (z. B. Operand B) können Quelleingaben sein.
  • Angenommen, die Operation dieses Verarbeitungs- (z. B. Rechen-) Elements ist (oder umfasst) zum Beispiel, was als ein Pick in 14B bezeichnet wird. Das Verarbeitungselement 2400 muss dann die Daten entweder von dem Dateneingabepuffer 2424 oder dem Dateneingabepuffer 2426 auswählen, z. B. um zu Datenausgabepuffer 2434 (z. B. Standard) oder Datenausgabepuffer 2436 zu gehen. Das Steuerbit in 2422 kann daher eine 0 angeben, wenn es von dem Dateneingabepuffer 2424 ausgewählt wird oder 1, wenn es von dem Dateneingabepuffer 2426 ausgewählt wird.
  • Angenommen, die Operation dieses Verarbeitungs- (z. B. Rechen-) Elements ist (oder umfasst) zum Beispiel, was als eine Weiche in 14B bezeichnet wird. Das Verarbeitungselement 2400 muss dann die Daten zum Datenausgabepuffer 2434 oder dem Datenausgabepuffer 2436 ausgeben, z. B. vom Dateneingabepuffer 2424 (z. B. Standard) oder Dateneingabepuffer 2426. Das Steuerbit in 2422 kann daher eine 0 angeben, wenn es zum Datenausgabepuffer 2434 ausgegeben wird oder 1, wenn es zum Datenausgabepuffer 2436 ausgegeben wird.
  • Eine Vielzahl von Netzwerken (z. B. Verbindungsnetzwerke) kann mit einem Verarbeitungselement verbunden sein, z. B. die (Eingabe-) Netzwerke 2402, 2404, 2406 und (Ausgabe-) Netzwerke 2408, 2410, 2412. Die Verbindungen können Weichen sein, wie z. B. in Bezug auf 22A und 22B erläutert. In einer Ausführungsform weist jedes Netzwerk zwei Unternetzwerke (oder zwei Kanäle auf dem Netzwerk) auf, z. B. eines für das Datenpfadnetzwerk aus 22A und eines für das Flusssteuerungs- (z. B. Gegendruck-)Pfadnetzwerk aus 22B. Als ein Beispiel ist das lokale Netzwerk 2402 (z. B. als Steuerungszwischenverbindung eingerichtet) als mit dem Steuereingabepuffer 2422 geschaltet (z. B. verbunden) dargestellt. In dieser Ausführungsform kann ein Datenpfad (z. B. ein Netzwerk wie in 22A) den Steuereingabewert (z. B. Bit oder Bits) (z. B. ein Steuer-Token) tragen, und der Flusssteuerungspfad (z. B. das Netzwerk) kann das Gegendrucksignal (z. B. Gegendruck- oder Nicht-Gegendruck-Token) von dem Steuereingabepuffer 2422 tragen, um z. B. dem vorgelagerten Erzeuger (z. B. PE) anzuzeigen, dass ein neuer Steuereingabewert nicht in den Steuereingabepuffer 2422 zu laden (z. B. senden) ist, bis das Gegendrucksignal angibt, dass Platz in dem Steuereingabepuffer 2422 für den neuen Steuereingabewert (z. B. von einem Steuerausgabepuffer des vorgelagerten Erzeugers) vorhanden ist. In einer Ausführungsform kann der neue Steuereingabewert nicht in den Steuereingabepuffer 2422 eintreten, bis sowohl (i) der vorgelagerte Erzeuger das Gegendrucksignal „Platz verfügbar“ von dem „Steuereingabe“-Puffer 2422 empfängt, als auch (ii) der neue Steuereingabewert von dem vorgelagerten Erzeuger gesendet wird, und dies z. B. das Verarbeitungselement 2400 anhält, bis dies geschieht (und Platz in dem bzw. den Zielausgabepuffer(n) verfügbar ist).
  • Der Dateneingabepuffer 2424 und der Dateneingabepuffer 2426 können in ähnlicher Weise arbeiten, z. B. ist das lokale Netzwerk 2404 (z. B. als eine Datenzwischenverbindung (im Gegensatz zur Steuerung) eingerichtet) als mit dem Dateneingabepuffer 2424 geschaltet (z. B. verbunden) dargestellt. In dieser Ausführungsform kann ein Datenpfad (z. B. ein Netzwerk wie in 22A) den Dateneingabewert (z. B. Bit oder Bits) (z. B. ein Datenfluss-Token) tragen, und der Flusssteuerungspfad (z. B. das Netzwerk) kann das Gegendrucksignal (z. B. Gegendruck- oder Nicht-Gegendruck-Token) von dem Dateneingabepuffer 2424 tragen, um z. B. dem vorgelagerten Erzeuger (z. B. PE) anzuzeigen, dass ein neuer Dateneingabewert nicht in den Dateneingabepuffer 2424 zu laden (z. B. senden) ist, bis das Gegendrucksignal angibt, dass Platz in dem Dateneingabepuffer 2424 für den neuen Dateneingabewert (z. B. von einem Datenausgabepuffer des vorgelagerten Erzeugers) vorhanden ist. In einer Ausführungsform kann der neue Dateneingabewert nicht in den Dateneingabepuffer 2424 eintreten, bis sowohl (i) der vorgelagerte Erzeuger das Gegendrucksignal „Platz verfügbar“ von dem „Dateneingabe“-Puffer 2424 empfängt, als auch (ii) der neue Dateneingabewert von dem vorgelagerten Erzeuger gesendet wird, und dies z. B. das Verarbeitungselement 2400 anhält, bis dies geschieht (und Platz in dem bzw. den Zielausgabepuffer(n) verfügbar ist). Ein Steuerausgabewert und/oder Datenausgabewert können in ihren jeweiligen Ausgabepuffern (z. B. 2432, 2434, 2436) angehalten werden, bis ein Gegendrucksignal anzeigt, dass Platz in dem Eingabepuffer für das bzw. die nachgelagerten Verarbeitungselemente verfügbar ist.
  • Ein Verarbeitungselement 2400 kann von der Ausführung abgehalten werden, bis seine Operanden (z. B. ein Steuereingabewert und sein bzw. seine entsprechender/n Dateneingabewert oder -werte) empfangen werden und/oder bis Platz in dem/den Ausgabepuffer(n) des Verarbeitungselements 2400 für Daten vorhanden ist, die durch die Ausführung der Operation für diese Operanden zu erzeugen sind.
  • Speicherschnittstelle
  • Die Abfrage-Adressdatei-Schaltung (RAF, Request Address File), von der eine vereinfachte Version in 25 gezeigt ist, kann für die Ausführung von Speicheroperationen verantwortlich sein und dient als Vermittler zwischen der CSA-Fabric-Struktur und der Speicherhierarchie. Als solche kann die Hauptaufgabe der Mikroarchitektur der RAF darin bestehen, das reihenfolgeveränderte Speichersubsystem mit der reihenfolgetreuen Semantik der CSA-Fabric-Struktur zu rationalisieren. In dieser Eigenschaft kann die RAF-Schaltung mit Abschlusspuffern ausgestattet sein, z. B. warteschlangenähnlichen Strukturen, welche die Speicherantworten neu ordnen und diese zur Fabric-Struktur in der Anforderungsreihenfolge zurückführen. Die zweite Hauptfunktionalität der RAF-Schaltung kann darin bestehen, Unterstützung in Form einer Adressumsetzung und eines Seitenwanderers bereitzustellen. Eingehende virtuelle Adressen können unter Verwendung eines kanalassoziativen Adressenübersetzungspuffers (Translation Lookaside Puffer - TLB) in physische Adressen umgesetzt werden. Zum Bereitstellen einer breiten Speicherbandbreite kann jede CSA-Kachel eine Vielzahl von RAF-Schaltungen aufweisen. Wie bei den verschiedenen PEs der Fabric-Struktur können die RAF-Schaltungen in einem Datenflussstil durch Prüfen auf Verfügbarkeit der Eingabeargumente und Ausgabepufferung, wenn notwendig, vor dem Auswählen eines Speicherbetriebs zur Ausführung betrieben werden. Im Gegensatz zu einigen PEs wird die RAF-Schaltung jedoch zwischen mehreren verschiedenen gemeinsam angeordneten Speicheroperationen gemultiplext. Eine gemultiplexte RAF-Schaltung kann zum Minimieren des Bereichs oberhalb ihrer verschiedenen Subkomponenten verwendet werden, z. B. zum gemeinsamen Nutzen des ACI-Ports (Accelerator Cache Interface) (ausführlicher in Abschnitt 3.4 beschrieben), der gemeinsam genutzten virtuellen Speicherunterstützungshardware (SVM, Shared Virtual Memory), Mezzanine-Netzwerkschnittstelle und anderen Hardware-Verwaltungseinrichtungen. Es kann jedoch einige Programmeigenschaften geben, die diese Wahl motivieren. In einer Ausführungsform muss ein (z. B. gültiger) Datenflussgraph den Speicher in einem gemeinsam genutzten virtuellen Speichersystem abfragen. Speicherlatenzgebundene Programme, wie z. B. Graph-Traversierungen, können viele getrennte Speicheroperationen benutzen, um die Speicherbandbreite aufgrund des speicherabhängigen Steuerflusses zu sättigen. Obwohl jede RAF gemultiplext sein kann, kann ein CSA eine Vielzahl (z. B. zwischen 8 und 32) RAFs bei einer Kachel-Granularität aufweisen, um eine adäquate Bandbreite bereitzustellen. RAFs können mit dem Rest der Fabric-Struktur über sowohl das lokale Netzwerk als auch das Mezzanine-Netzwerk kommunizieren. Wenn die RAFs gemultiplext sind, kann jede RAF mit mehreren verschiedenen Ports in dem lokalen Netzwerk versehen sein. Diese Ports können als minimallatenter, hochdeterministischer Pfad zum Speicher zur Verwendung durch latenzsensitive oder Hochbandbreiten-Speicheroperationen dienen. Zusätzlich kann eine RAF mit einem Mezzanine-Endpunkt versehen sein, der z. B. einen Speicherzugriff auf Laufzeitdienste und entfernte Benutzerebenen-Speicherzugriffseinrichtungen bereitstellt.
  • 25 stellt eine Abfrage-Adressdatei-Schaltung (RAF, Request Address File) 2500 gemäß Ausführungsformen der Offenbarung dar. In einer Ausführungsform können zur Zeit der Auslegung die Speicherlade- und -speicheroperationen, die in einem Datenflussgraphen waren, in Registern 2510 spezifiziert werden. Die Bögen zu diesen Speicheroperationen in den Datenflussgraphen können dann mit den Eingabewarteschlangen 2522, 2524 und 2526 verbunden werden. Die Bögen aus diesen Speicheroperationen müssen somit die Abschlusspuffer 2528, 2530 oder 2532 verlassen. Abhängigkeits-Token (die einzelne Bits sein können) kommen in die Warteschlangen 2518 und 2520. Abhängigkeits-Token müssen die Warteschlange 2516 verlassen. Der Abhängigkeits-Tokenzähler 2514 kann eine kompakte Repräsentation einer Warteschlange sein und eine Anzahl von Abhängigkeits-Token, die für eine vorgegebene Eingabewarteschlange verwendet werden, nachverfolgen. Wenn die Abhängigkeits-Tokenzähler 2514 gesättigt sind, können keine zusätzlichen Abhängigkeits-Token für neue Speicheroperationen erzeugt werden. Entsprechend kann eine Speicherordnungsschaltung (z. B. eine RAF in 26) das Planen neuer Speicheroperationen anhalten, bis die Abhängigkeits-Tokenzähler 2514 ungesättigt werden.
  • Als ein Beispiel für ein Laden geht eine Adresse in der Warteschlange 2522 ein, die die Ablaufsteuerung 2512 mit einem Laden in 2510 in Übereinstimmung bringt. Ein Abschlusspufferschlitz für dieses Laden wird in der Reihenfolge zugeordnet, in der die Adresse eingegangen ist. Unter der Voraussetzung, dass dieses bestimmte Laden in dem Graphen keine spezifizierten Abhängigkeiten aufweist, werden die Adresse und der Abschlusspufferschlitz durch die Ablaufsteuerung (z. B. über Speicherbefehl 2542) aus dem Speichersystem gesendet. Wenn das Ergebnis zum Mux 2540 zurückkehrt (schematisch dargestellt), wird dieses in dem Abschlusspufferschlitz, den dieser spezifiziert, gespeichert (z. B. wenn es den Zielschlitz durch das gesamte Speichersystem getragen hat). Der Abschlusspuffer sendet die Ergebnisse zurück in das lokale Netzwerk (z. B. lokales Netzwerk 2502, 2504, 2506 oder 2508), in der Reihenfolge, in der die Adressen eingegangen sind.
  • Die Speicher können ähnlich sein, außer dass sowohl die Adresse als auch die Daten eingehen müssen, bevor irgendeine Operation an das Speichersystem ausgesendet wird.
  • Cache
  • Datenflussgraphen können eine Profusion von Anfragen (z. B. Wortgranularität) parallel erzeugen. Daher stellen bestimmte Ausführungsformen des CSA ein Cache-Untersystem mit ausreichender Bandbreite bereit, um das CSA zu bedienen. Eine stark gestapelte Cache-Mikroarchitektur, wie sie beispielsweise in 26 gezeigt ist, kann benutzt werden. 26 stellt eine Schaltung 2600 mit mehreren Abfrage-Adressdatei-Schaltungen (RAF, Request Address File) (z. B. RAF-Schaltung (1)) dar, die zwischen mehreren Beschleuniger-Kacheln (2608, 2610, 2612, 2614) und mehreren Cache-Bänken (z. B. Cache-Bank 2602) gekoppelt sind, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform kann die Anzahl der RAFs und Cache-Bänke in einem Verhältnis von entweder 1:1 oder 1:2 sein. Cache-Bänke können volle Cache-Zeilen enthalten (z. B. im Gegensatz zur gemeinsamen Nutzung durch Wort), wobei jede Zeile genau eine Heimat im Cache hat. Cache-Zeilen können über eine Pseudozufallsfunktion auf Cache-Bänke abgebildet werden. Das CSA kann das SVM-Modell zur Integration mit anderen gekachelten Architekturen übernehmen. Bestimmte Ausführungsformen umfassen ein ACI-Netzwerk (Accelerator Cache Interconnect, Beschleuniger-Cache-Verbindung), das die RAFs mit den Cache-Bänken verbindet. Dieses Netzwerk kann die Adresse und Daten zwischen den RAFs und dem Cache übertragen. Die ACI-Topologie kann eine kaskadierte Koordinatenstruktur sein, z. B. als ein Kompromiss zwischen Latenz- und Umsetzungskomplexität.
  • Gleitkomma-Unterstützung
  • Bestimmte HPC-Anwendungen sind durch ihren Bedarf einer signifikanten Gleitkomma-Bandbreite gekennzeichnet. Um diesen Bedarf zu erfüllen, können Ausführungsformen eines CSA mit einer Vielzahl (z. B. jeweils zwischen 128 und 256) von Gleitkomma-Additions- und Multiplikations-PEs bereitgestellt werden, z. B. in Abhängigkeit von der Kachelauslegung. Ein CSA kann einige andere erweiterte Genauigkeitsmodi bereitstellen, z. B. zum Vereinfachen der Mathematikbibliothek-Umsetzung. CSA-Gleitkomma-PEs können sowohl einzelne als auch doppelte Genauigkeit unterstützen, aber PEs mit geringerer Genauigkeit können die Maschinenlern-Arbeitslasten unterstützen. Ein CSA kann eine um eine Größenordnung höhere Gleitkomma-Leistung als ein Prozessorkern bereitstellen. In einer Ausführungsform wird zusätzlich zur Erhöhung der Gleitkomma-Bandbreite die Energie, die in Gleitkomma-Operationen verbraucht wird, reduziert, um alle Gleitkomma-Einheiten zu versorgen. Zum Reduzieren von Energie kann ein CSA beispielsweise gezielt die Bits niedriger Ordnung der Gleitkomma-Multiplizierer-Anordnung durchschalten. Bei der Untersuchung des Verhaltens der Gleitkomma-Arithmetik beeinflussen die Bits niedriger Ordnung des Multiplikationsarrays oft nicht das endgültige, gerundete Produkt. 27 stellt einen Gleitkomma-Multiplizierer 2700, der in drei Bereiche (Ergebnisbereich, drei potentielle Übertragbereiche (2702, 2704, 2706) und den gattergesteuerten Bereich) unterteilt ist, gemäß Ausführungsformen der Offenbarung dar. In bestimmten Ausführungsformen beeinflusst der Übertragbereich wahrscheinlich den Ergebnisbereich, und es ist unwahrscheinlich, dass der gattergesteuerte Bereich den Ergebnisbereich beeinflusst. Bei der Betrachtung eines gattergesteuerten Bereichs aus g Bits kann der maximale Übertrag wie folgt sein: c a r r y g 1 2 g 1 g i 2 i 1 1 g i 2 g 1 g 1 2 g + 1 g 1
    Figure DE102018006889A1_0001
    Wenn bei diesem maximalen Übertrag das Ergebnis des Übertragbereichs kleiner als 2c - g ist, wobei der Übertragbereich c Bits breit ist, kann der gattergesteurte Bereich ignoriert werden, da er den Ergebnisbereich nicht beeinflusst. Das Erhöhen von g bedeutet, dass es wahrscheinlicher ist, dass der gattergesteuerte Bereich benötigt wird, während das Erhöhen von c bedeutet, dass der gattergesteuerte Bereich bei zufälliger Annahme unbenutzt bleibt und deaktiviert werden kann, um einen Energieverbrauch zu vermeiden. In Ausführungsformen eines CSA-Gleitkomma-Multiplikations-PE wird ein zweistufiger Pipeline-Ansatz benutzt, bei dem zuerst der Übertragbereich bestimmt wird und dann der gattergesteuerte Bereich bestimmt wird, wenn festgestellt wird, dass dieser das Ergebnis beeinflusst. Wenn mehr Information über den Kontext der Multiplikation bekannt ist, stimmt ein CSA die Größe des gattergesteuerten Bereichs aggressiver ab. Bei einer FMA kann das Multiplikationsergebnis zu einem Akkumulator addiert werden, der oft viel größer als jeder der Multiplikanden ist. In diesem Fall kann der Addend-Exponent vor der Multiplikation beobachtet werden, und die CSDA kann den gattergesteuerten Bereich entsprechend einstellen. Eine Ausführungsform des CSA umfasst ein Schema, in dem ein Kontextwert, der das Mindestergebnis einer Berechnung bindet, zugehörigen Multiplizierern bereitgestellt wird, um Minimum-Energie-Gating-Auslegungen auszuwählen.
  • Laufzeitdienste
  • In einer bestimmten Ausfiihrungsform weist ein CSA eine heterogene und verteilte Fabric-Struktur auf, und folglich müssen Laufzeitdienst-Umsetzungen mehrere Arten von PEs in einer parallelen und verteilten Weise aufnehmen. Obwohl Laufzeitdienste in einem CSA kritisch sein können, können sie im Vergleich zur Berechnung auf Benutzerebene infrequent sein. Bestimmte Umsetzungen konzentrieren sich daher auf das Überlagern von Diensten über Hardwareressourcen. Zur Erreichung dieser Ziele können CSA-Laufzeitdienste als eine Hierarchie angegeben werden, wobei z. B. jede Schicht einem CSA-Netzwerk entspricht. Auf Kachel-Ebene kann eine einzelne nach außen weisende Steuerung Dienstbefehle an einen zugeordneten Kern mit der CSA-Kachel akzeptieren oder senden. Eine Steuerung auf Kechael-Ebene kann dazu dienen, Bereichssteuerungen an den RAFs zu koordinieren, z. B. unter Verwendung des ACI-Netzwerks. Bereichssteuerungen können ihrerseites lokale Steuerungen an bestimmten Haltepunkte des Mezzanine-Netzwerks koordinieren (z. B. Netzwerkdatenfluss-Endpunktschaltungen). Auf der niedrigsten Ebene können dienstspezifische Mikroprotokolle über das lokale Netzwerk ausgeführt werden, z. B. während eines speziellen Modus, der durch die Mezzanine-Steuerungen gesteuert wird. Die Mikroprotokolle können zulassen, dass jedes PE (z. B. PE-Klasse nach Typ) mit dem Laufzeitdienst gemäß eigenem Bedarf interagiert. Die Parallelität ist somit in dieser hierarchischen Organisation implizit und Operationen auf niedrigster Ebene können gleichzeitig stattfinden. Diese Parallelität kann die Auslegung einer CSA-Kachel zwischen Hunderten von Nanosekunden bis einigen Mikrosekunden ermöglichen, z. B. abhängig von der Auslegungsgröße und ihrem Speicherplatz in der Speicherhierarchie. Ausführungsformen des CSA nutzen somit die Eigenschaften von Datenflussgraphen, um die Umsetzung jedes Laufzeitdienstes zu verbessern. Eine Hauptbeobachtung ist, dass Laufzeitdienste möglicherweise nur eine legale logische Ansicht des Datenflussgraphen bewahren müssen, z. B. einen Zustand, der durch eine gewisse Reihenfolge von Ausführungen des Datenflussoperators erzeugt werden kann. Dienste brauchen im Allgemeinen keine temporäre Ansicht des Datenflussgraphen garantieren, z. B. den Zustand eines Datenflussgraphen in einem CSA zu einem spezifischen Zeitpunkt. Dies kann es dem CSA ermöglichen, die meisten Laufzeitdienste auf verteilte, fließbandverarbeitete und parallele Weise durchzuführen, z. B. unter der Voraussetzung, dass der Dienst abgestimmt ist, um die logische Ansicht des Datenflussgraphen zu bewahren. Das lokale Auslegungsmikroprotokoll kann ein paketbasiertes Protokoll sein, das über das lokale Netzwerk gelegt ist. Auslegungsziele können in einer Auslegungskette organisiert sein, die z. B. in der Mikroarchitektur festgelegt ist. Fabric-Strukturziele (z. B. PE-Ziele) können einzeln ausgelegt werden, z. B. unter Verwendung eines einzelnen zusätzlichen Registers pro Ziel, um eine verteilte Koordination zu erreichen. Zum Starten der Auslegung kann eine Steuerung ein bandexternes Signal ansteuern, das alle Fabric-Strukturziele in seiner Nachbarschaft in einen nicht ausgelegten, pausierten Zustand versetzt und Multiplexer in dem lokalen Netzwerk zu einer vordefinierten Konformation schwingt. Wenn die Fabric-Strukturziele (z. B. PE-Ziele) ausgelegt sind, d. h. sie vollständig ihr Auslegungspaket empfangen, können sie ihre Auslegungs-Mikroprotokoll-Register setzen und das unmittelbar nachfolgende Ziel (z. B. PE), das als nächstes ausgelegt wird, unter Verwendung des nachfolgenden Pakets mitteilen. Es gibt keine Beschränkung für die Größe eines Auslegungspakets, und Pakete können eine dynamisch variable Länge aufweisen. Zum Beispiel können PEs, die konstante Operanden auslegen, ein Auslegungspaket aufweisen, das verlängert wird, um das konstante Feld (z. B. X und Y in 18B - 18C) einzuschließen. 28 stellt eine In-Flight-Auslegung eines Beschleunigers 2800 mit mehreren Verarbeitungselementen (z. B. PEs 2802, 2804, 2806, 2808) gemäß Ausführungsformen der Offenbarung dar. Nach der Auslegung können die PEs ausführen, abhzängig von Datenflusseinschränkungen. Kanäle, die nicht ausgelegte PEs beinhalten, können jedoch durch die Mikroarchitektur deaktiviert werden, z. B. verhindern, dass undefinierte Operationen stattfinden. Diese Eigenschaften ermöglichen Ausführungsformen eines CSA das verteilte Initialisieren und Ausführen ohne jegliche zentralisierte Steuerung. Aus einem nicht ausgelegten Zustand kann die Auslegung vollständig parallel stattfinden, z. B. in vielleicht lediglich 200 Nanosekunden. Aufgrund der verteilten Initialisierung von Ausführungsformen eines CSA können PEs jedoch aktiv werden und zum Beispiel Anforderungen an den Speicher senden, lange bevor die gesamte Fabric-Struktur ausgelegt ist. Die Extraktion kann ähnlich wie die Auslegung ablaufen. Das lokale Netzwerk kann angepasst werden, um Daten von jeweils einem Ziel zu einem Zeitpunkt zu extrahieren, und es werden Zustandsbits verwendet, um eine verteilte Koordination zu erreichen. Ein CSA kann die Extraktion so steuern, dass sie nicht-destruktiv ist, d. h. nach Abschluss der Extraktion ist jedes extrahierbare Ziel in seinen Ausgangszustand zurückgekehrt. In dieser Umsetzung kann der gesamte Zustand in dem Ziel in einem abtastungsähnlichen Ausgangsregister, das an das lokale Netzwerk gebunden ist, zirkuliert werden. Es kann jedoch eine In-Place-Extraktion erreicht werden, indem neue Pfade auf der Registerübertragungsebene (RTL) eingefügt werden oder bestehende Leitungen verwendet werden, um die gleichen Funktionen mit geringerem Aufwand bereitzustellen. Wie bei der Auslegung wird die hierarchische Extraktion parallel dazu erreicht.
  • 29 veranschaulicht einen Speicherauszug 2900 einer fließbandverarbeiteten In-Flight-Extraktion gemäß Ausführungsformen der Offenbarung; In einigen Verwendungsfällen der Extraktion, wie Checkpointing, ist die Latenz möglicherweise kein Problem, solange der Fabric-Strukturdurchsatz erhalten wird. In diesen Fällen kann die Extraktion fließbandverarbeitet erfolgen. Diese Anordnung, die in 29 gezeigt ist, erlaubt es dem größten Teil der Fabric-Struktur, weiter auszuführen, während ein schmaler Bereich für die Extraktion deaktiviert ist. Auslegung und Extraktion können koordiniert und zusammengesetzt werden, um einen fließbandverarbeiteten Kontextwechsel zu erreichen. Ausnahmen können sich qualitativ von der Auslegung und Extraktion darin unterscheiden, indem sie nicht zu einem spezifischen Zeitpunkt auftreten, sondern irgendwo in der Fabric-Struktur zu einem beliebigen Zeitpunkt während der Laufzeit. Dementsprechend kann das Ausnahme-Mikroprotokoll in einer Ausführungsform nicht über das lokale Netzwerk gelegt werden, das zur Laufzeit durch das Benutzerprogramm belegt ist, und benutzt sein eigenes Netzwerk. Ausnahmen sind jedoch von Natur aus selten und insensitiv gegenüber Latenz und Bandbreite. Daher verwenden bestimmte Ausführungsformen des CSA ein paketvermitteltes Netzwerk, um Ausnahmen zu dem lokalen Mezzanine-Stopp zu übertragen, wo sie z. B. in der Diensthierarchie nach oben weitergeleitet werden (wie z. B. in 40). Pakete in dem lokalen Ausnahme-Netzwerk können extrem klein sein. In vielen Fällen reicht eine PE-Identifikation (ID) von nur zwei bis acht Bits als ein vollständiges Paket aus, da z. B. das CSA eine eindeutige Ausnahmekennung erzeugen kann, wenn das Paket die Ausnahmediensthierarchie durchläuft. Ein solches Schema kann wünschenswert sein, weil es auch den Bereichsaufwand zum Erzeugen von Ausnahmen an jedem PE reduziert.
  • KOMPILIERUNG
  • Die Fähigkeit, in höheren Sprachen geschriebene Programme in einem CSA zu kompilieren, kann für die Übernahme durch die Branche von entscheidender Bedeutung sein. Dieser Abschnitt gibt einen allgemeinen Überblick über Kompilierungsstrategien für Ausführungsformen eines CSA. Zunächst wird ein CSA-Softwareframework vorgeschlagen, das die gewünschten Eigenschaften einer idealen Toolkette für die Produktionsqualität veranschaulicht. Danach wird ein Prototyp-Kompilierer-Framework erläutert. Dann wird eine „Control-to-Dataflow-Conversion“ (Steuerung-zu-Datenfluss-Umwandlung) besprochen, z. B. um gewöhnlichen sequentiellen Steuerflusscode in CSA-Datenfluss-Assemblercode umzuwandeln.
  • Beispielhaftes Produktionsframework
  • 30 veranschaulicht eine Kompilierungs-Toolkette 3000 für einen Beschleuniger gemäß Ausführungsformen der Offenbarung. Diese Toolkette kompiliert höhere Sprachen (wie C, C ++ und Fortran) in eine Kombination aus Host-Code- (LLVM-)Zwischenrepräsentation (IR) für die spezifischen Bereiche, die beschleunigt werden sollen. Der CSA-spezifische Teil dieser Kompilierungs-Toolkette verwendet LLVM IR als Eingabe, optimiert und kompiliert diese IR in eine CSA-Assembly, z. B. durch Hinzufügen einer geeigneten Pufferung auf latenzinsensitiven Kanälen für die Leistung. Anschließend platziert und routet er die CSA-Assembly auf der Hardware-Struktur und legt die PEs und das Netzwerk für die Ausführung aus. In einer Ausführungsform unterstützt die Toolkette die CSA-spezifische Kompilierung als Justin-Time (JIT), wobei potenzielle Laufzeitrückmeldungen von tatsächlichen Ausführungen einbezogen werden. Eine der wichtigsten Ausgestaltungseigenschaften des Frameworks ist die Kompilierung von (LLVM) IR für den CSA anstelle der Verwendung einer höheren Sprache als Eingabe. Während ein Programm, das in einer höheren Programmiersprache geschrieben wurde, die speziell für das CSA ausgestaltet wurde, maximale Leistung und/oder Energieeffizienz erreichen kann, kann die Übernahme neuer Hochsprachen oder Programmier-Frameworks in der Praxis aufgrund der Schwierigkeit der Umwandlung existierender Codegrundlagen langsam sein. Die Verwendung von (LLVM) IR als Eingabe ermöglicht vielen existierenden Programmen, möglicherweise auf einem CSA ausgeführt zu werden, ohne dass z. B. eine neue Sprache geschaffen werden muss oder das Frontend neuer Sprachen, die auf dem CSA ausgeführt werden sollen, signifikant zu modifizieren.
  • Prototypischer Kompilierer
  • 31 veranschaulicht einen Kompilierer 3100 für einen Beschleuniger gemäß Ausführungsformen der Offenbarung. Der Kompilierer 3100 konzentriert sich anfänglich auf die vorzeitige Kompilierung von C und C++ durch das Frontend (z. B. Clang). Zum Kompilieren von (LLVM) IR setzt der Kompilierer ein CSA-Backend-Ziel in LLVM mit drei Hauptstufen um. Zuerst verringert das CSA-Backend LLVM IR zu einem zielspezifischen Maschinenbefehl für die sequentielle Einheit, welche die meisten CSA-Operationen kombiniert mit einer herkömmlichen RISC-artigen Steuerungsflussarchitektur (z. B. mit Verzweigungen und einem Programmzähler) umsetzt. Die sequentielle Einheit in der Toolkette kann sowohl für Kompilierer als auch für Anwendungsentwickler eine nützliche Hilfe sein, da sie eine stufenweise Transformation eines Programms von einem Steuerungsfluss (CF) zu einem Datenfluss (DF) ermöglicht, z. B. durch gleichzeitiges Umwandeln eines Codeabschnitts von Steuerfluss zu Datenfluss und zur Validierung der Programmkorrektheit. Die sequentielle Einheit kann auch ein Modell zur Behandlung von Code bereitstellen, der nicht in das räumliche Array passt. Danach wandelt der Kompilierer diese Steuerflussbefehle in Datenflussoperatoren (z. B. Code) für das CSA um. Diese Phase wird nachstehend in Abschnitt 4.3 beschrieben. Dann kann das CSA-Back-End seine eigenen Optimierungsschritte auf den Datenflussbefehlen ausführen. Schließlich kann der Kompilierer die Befehle in einem CSA-Assemblerformat ausgeben. Dieses Assemblerformat wird als Eingabe für Tools der späten Stufe verwendet, welche die Datenflussbefehle auf der tatsächlichen CSA-Hardware platzieren und routen.
  • Steuer-zu-Datenfluss-Umwandlung
  • Ein wichtiger Teil des Kompilierers kann in dem Steuer-zu-Datenfluss-Umwandlungs-Durchlauf oder kurz Datenfluss-Umwandlungs-Durchlauf umgesetzt sein. Dieser Durchlauf nimmt eine Funktion ein, die in der Steuerflussform dargestellt ist, z. B. ein Steuerflussgraph (CFG) mit sequentiellen Maschinenbefehlen, die auf virtuellen Registern arbeiten, und wandelt sie in eine Datenflussfunktion um, die konzeptionell ein Graph von Datenflussoperationen (Befehlen) ist, der durch latenzinsensitive Kanäle (LICs) verbunden wird. Dieser Abschnitt gibt eine Beschreibung dieses Durchlaufs auf hoher Ebene und beschreibt, wie er in bestimmten Ausführungsformen Speicheroperationen, Verzweigungen und Schleifen konzeptionell behandelt.
  • Geradliniger Code
  • 32A stellt einen sequentiellen Assemblercode 3202 gemäß Ausführungsformen der Offenbarung dar. 32B stellt einen Datenfluss-Assemblercode 3204 für den sequentiellen Assemblercode 3202 aus 32A gemäß Ausführungsformen der Offenbarung dar. 32C stellt einen Datenflussgraphen 3206 für den Datenfluss-Assemblercode 3204 aus 32B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung dar.
  • Zunächst ist der einfache Fall der Umwandlung eines geradlinigen Codes zu Datenfluss in Betracht zu ziehen. Der Datenfluss-Umwandlungsdurchlauf kann einen Basisblock aus sequentiellem Code umwandeln, wie z. B. den Code aus 32A in CSA-Assemblercode, wie in 32B gezeigt. Konzeptuell repräsentiert die CSA-Anordnung in 32B den Datenflussgraphen aus 32C. In diesem Beispiel wird jeder sequentielle Befehl in eine übereinstimmende CSA-Assembly übersetzt. Die .lic-Angaben (z. B. für Daten) deklarieren latenzinsensitive Kanäle, die den virtuellen Registern im sequentiellen Code (z. B. Rdata) entsprechen. In der Praxis kann die Eingabe in den Datenfluss-Umwandlungsdurchlauf in nummerierten virtuellen Registern erfolgen. Der Klarheit halber verwendet dieser Abschnitt beschreibende Registernamen. Es ist zu beachten, dass Lade- und Speicheroperationen in dieser Ausführungsform in der CSA-Architektur unterstützt werden, sodass viel mehr Programme ausgeführt werden können als in einer Architektur, die nur reinen Datenfluss unterstützt. Da der sequentielle Code, der in den Kompilierer eingegeben wird, in SSA-Form (Single Static Assignment - Einzelstatikzuweisung) vorliegt, kann der Steuer-zu-Datenfluss-Durchlauf für einen einfachen Basisblock jede virtuelle Registerdefinition in die Erzeugung eines Einzelwertes auf einem latenzinsensitiven Kanal umwandeln. Die SSA-Form ermöglicht eine Vielzahl von Verwendungen einer einzelnen Definition eines virtuellen Registers, wie z. B. in Rdata2. Zur Unterstützung dieses Modells, unterstützt der CSA-Assemblercode eine Vielzahl von Verwendungen derselben LIC (z. B. data2), wobei der Simulator implizit die erforderlichen Kopien der LICs erzeugt. Ein Hauptunterschied zwischen sequentiellem Code und Datenflusscode liegt in der Behandlung von Speicheroperationen. Der Code in 32A ist vom Konzept her seriell, was bedeutet, dass das load32 (ld32) aus addr3 nach dem st32 von addr erfolgen sollte, falls sich die addr- und addr3-Adressen überschneiden.
  • Verzweigungen
  • Zum Umwandeln von Programmen mit mehreren Basisblöcken und Bedingtheiten in dem Datenfluss erzeugt der Kompilierer spezielle Datenflussoperatoren, um die Verzweigungen zu ersetzen. Genauer verwendet der Kompilierer Weichenoperatoren, um ausgehende Daten am Ende eines Basisblocks in dem ursprünglichen CFG zu steuern, und Operatoren zum Auswählen von Werten aus dem angemessenen eingehenden Kanal am Anfang eines Basisblocks auszusuchen. Als ein konkretes Beispiel betrachte man den Code und den entsprechenden Datenflussgraphen aus 33A - 33C, die bedingt einen Wert von y basierend auf verschiedenen Eingaben berechnen: a, i, x und n. Nach dem Berechnen des Verzweigungsbedingungstests verwendet der Datenflusscode einen Weichenoperator (siehe z. B. 18B - 18C), der den Wert in Kanal x zu Kanal xF steuert, wenn der Test 0 ist, oder Kanal xT, wenn der Test 1 ist. Ähnlich wird ein Pick-Operator (siehe z. B. 18B - 18C) verwendet, um den Kanal yF an y zu senden, wenn der Test 0 ist, oder den Kanal yT an y zu senden, wenn der Test 1 ist. In diesem Beispiel stellt sich heraus, dass, obwohl der Wert von a nur in der wahren Verzweigung der Bedingung verwendet wird, das CSA einen Weichenoperator aufweisen muss, der diese lenkt, um aT zu kanalisieren, wenn der Test 1 ist, und den Wert verbraucht (frisst), wenn der Test 0 ist. Letzterer Fall wird durch das Einstellen der falschen Eingabe der Weiche als %ign ausgedrückt. Es ist möglicherweise nicht richtig, Kanal a direkt mit dem wahren Pfad zu verbinden, da in den Fällen, in denen die Ausführung tatsächlich den falschen Pfad nimmt, dieser Wert von „a“ im Graphen übrig bleibt, was zu einem inkorrekten Wert von a für die nächste Ausführung der Funktion führt. Dieses Beispiel hebt die Eigenschaft der Steueräquivalenz hervor, einer Haupteigenschaft in Ausführungsformen der korrekten Datenflussumwandlung.
  • Steueräquivalenz: Man betrachte einen Single-Entry-Single-Exit-Steuerflussgraphen G mit zwei Basisblöcken A und B. A und B sind steueräquivalent, wenn alle vollständigen Steuerflusspfade durch G A und B die gleiche Anzahl von Malen besuchen.
  • LIC-Ersetzung: In einem Steuerflussgraphen G wird angenommen, dass eine Operation im Basisblock A ein virtuelles Register x definiert, und eine Operation im Basisblock B, der x verwendet. Dann kann eine korrekte Steuer-zu-Datenfluss-Transformation x durch einen latenzinsensitiven Kanal nur dann ersetzen, wenn A und B steueräquivalent sind. Die Steueräquivalenz-Beziehung trennt die Basisblöcke eines CFG in starke steuerungsabhängige Bereiche. 33A stellt einen C-Quellcode 3302 gemäß Ausführungsformen der Offenbarung dar. 33B stellt einen Datenfluss-Assemblercode 3304 für den C-Quellcode 3302 aus 33A gemäß Ausführungsformen der Offenbarung dar. 33C stellt einen Datenflussgraphen 3306 für den Datenfluss-Assemblercode 3304 aus 33B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung dar. In dem Beispiel aus 33A-33C sind der Basisblock vor und nach den Bedingungen steueräquivalent miteinander, aber die Basisblöcke in dem wahren und falschen Pfad befinden sich jeweils in ihrem eigenen Steuerabhängigkeitsbereich. Ein korrekter Algorithmus zum Umwandeln eines CFG in einen Datenfluss besteht darin, dass der Kompilierereinsatz (1) schaltet, um die Nichtübereinstimmung in der Ausführungsfrequenz für jeden Wert zu kompensieren, der zwischen Basisblöcken fließt, die nicht steueräquivalent sind, und (2) zu Beginn der Basisblöcke aussucht, um aus beliebigen eingehenden Werten in einem Basisblock zu wählen. Das Erzeugen der geeigneten Steuersignale für diese Picks und Weichen kann der Schlüsselteil der Datenflussumwandlung sein.
  • Schleifen
  • Eine weitere wichtige Klasse der CFGs bei der Datenflussumwandlung sind CFGs für Single-Entry-Single-Exit-Schleifen, eine herkömmliche Form von Schleife, die in (LLVM) IR erzeugt wird. Diese Schleifen können nahezu azyklisch sein, mit Ausnahme eines einzelnen Randes vom Ende der Schleife zurück zu einem Schleifenkopfblock. Der Datenfluss-Umwandlungsdurchlauf kann dieselbe Strategie auf höherer Ebene zum Umwandeln von Schleifen wie Verzweigungen verwenden, z. B. fügt er Weichen am Ende der Schleife ein, um Werte aus der Schleife zu leiten (entweder außerhalb des Schleifenaustritts oder um den hinteren Rand herum zum Beginn der Schleife) und fügt Picks zu Beginn der Schleife ein, um zwischen anfänglichen Werten, die in die Schleife eintreten, und Werten, die durch den hinteren Rand kommen, zu wählen. 34A stellt einen C-Quellcode 3402 gemäß Ausführungsformen der Offenbarung dar. 34B stellt einen Datenfluss-Assemblercode 3404 für den C-Quellcode 3402 aus 34A gemäß Ausführungsformen der Offenbarung dar. 34C stellt einen Datenflussgraphen 3406 für den Datenfluss-Assemblercode 3404 aus 34B für einen Beschleuniger gemäß Ausführungsformen der Offenbarung dar. 34A-34C zeigen C- und CSA-Assemblercode für eine beispielhafte Do-While-Schleife, die Werte zu einer Schleifeninduktionsvariable i hinzuaddiert, sowie den entsprechenden Datenflussgraphen. Für jede Variable, welche die Schleife (i und Summe) konzeptuell durchläuft, hat dieser Graph ein entsprechendes Pick-/Weichen-Paar, das den Fluss dieser Werte steuert. Es sei zu beachten, dass dieses Beispiel auch ein Pick-/Weichen-Paar zum Durchlaufen des Wertes n durch die Schleife verwendet, obgleich n schleifeninvariant ist. Diese Wiederholung von n ermöglicht die Umwandlung des virtuellen Registers von n in eine LIC, da sie die Ausführungsfrequenzen zwischen einer begrifflichen Definition von n außerhalb der Schleife und der einen oder mehreren Verwendungen von n innerhalb der Schleife in Einklang bringt. Im Allgemeinen werden für eine korrekte Datenflussumwandlung Register, die live-in in einer Schleife sind, für jede Iteration innerhalb des Schleifenkörpers einmal wiederholt, wenn das Register in eine LIC umgewandelt wird. In ähnlicher Weise müssen Register, die innerhalb einer Schleife aktualisiert werden, live-out der Schleife verbraucht werden, z. B. mit einem eindeutigen Abschlusswert, der aus der Schleife gesendet wird. Schleifen führen eine Falte in den Datenfluss-Umwandlungsprozess ein, nämlich indem die Steuerung für eine Wahl im oberen Teil der Schleife und die Weiche für den unteren Teil der Schleife versetzt sind. Wenn z. B. die Schleife in 33A drei Iterationen ausführt und beendet, sollte die Steuerung für den Pick 0, 1, 1 sein, während die Steuerung für die Weiche 1, 1, 0 sein sollte. Diese Steuerung wird durch Starten des Auswahlkanals mit einer anfänglichen zusätzlichen 0 umgesetzt, wenn die Funktion in Zyklus 0 beginnt (der in der Assembly durch die Direktiven .value 0 und .avail 0 spezifiziert wird) und dann der Ausgabeweiche in den Picker kopiert. Es sei zu beachten, dass die letzte 0 in der Weiche eine abschließende 0 in dem Picker wiederherstellt, sodass der Abschlusszustand des Datenflussgraphen garantiert mit dem anfänglichen Zustand übereinstimmt.
  • 35A stellt ein Flussdiagramm 3500 gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 3500 umfasst Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl 3502; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation 3504; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten 3506; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente des Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen 3508 dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen durch eine entsprechende, eingehende Operandenmenge, die an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente 3510 eingeht.
  • 35B stellt ein Flussdiagramm 3501 gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 3501 umfasst das Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten 3503; und Legen des Datenflussgraphen über mehrere Verarbeitungselemente eines Prozessors, ein Datenpfadnetzwerk zwischen den mehreren Verarbeitungselementen und ein Flusssteuerungspfadnetzwerk zwischen den mehreren Verarbeitungselementen, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen 3505 dargestellt ist.
  • 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 mit der Ausführung, wenn der Befehl gelesen wird. 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 vollzieht der Kern andere Arbeit, während das CSA seine Operationen ausführt.
  • CSA-VORTEILE
  • In bestimmten Ausführungsformen stellt die CSA-Architektur und -Mikroarchitektur tiefgreifende Vorteile in Bezug auf Energie, Leistung und Benutzerfreundlichkeit 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 in Bezug auf jeden davon hervorgehoben.
  • Prozessoren
  • 36 stellt einen Graphen zum Durchsatz zu Energie-pro-Operation 3600 gemäß Ausführungsformen der Offenbarung dar; Wie in 36 gezeigt, sind kleine Kerne im Allgemeinen energieeffizienter als große Kerne, und bei einigen Arbeitslasten kann dieser Vorteil durch höhere Kernzahlen in absolute Leistung umgesetzt werden. Die CSA-Mikroarchitektur befolgt diese Beobachtungen bis ihrem Abschluss und entfernt (z. B. die meisten) energieraubenden Steuerstrukturen, die mit von-Neumann-Architekturen in Zusammenhang gebracht werden, einschließlich des größten Teils der befehlsseitigen Mikroarchitektur. Durch Entfernen dieser allgemeinen Aufwendungen und Umsetzen einfacher Einzeloperations-PEs erhalten Ausführungsformen eines CSA ein dichtes, effizientes räumliches Array. Im Gegensatz zu kleinen Kernen, die normalerweise ziemlich seriell sind, kann ein CSA seine PEs gruppieren, z. B. über das leitungsvermittelte lokale Netzwerk, um explizit parallele aggregierte Datenflussgraphen zu bilden. Das Ergebnis ist Leistung in nicht nur parallelen Anwendungen, sondern auch in seriellen Anwendungen. Im Gegensatz zu Kernen, die für Leistung in Bezug auf Fläche und Energie teuer bezahlen, ist ein CSA in seinem nativen Ausführungsmodell bereits parallel. In bestimmten Ausführungsformen erfordert ein CSA weder Spekulation, um die Leistung zu erhöhen, noch muss es wiederholt Parallelität aus einer sequentiellen Programmdarstellung extrahieren, wodurch zwei der Hauptenergieverbraucher in von-Neumann-Architekturen vermieden werden. Die meisten Strukturen in Ausführungsformen eines CSA sind verteilt, klein und energieeffizient, im Gegensatz zu den zentralisierten, voluminösen, energiehungrigen Strukturen, die in Kernen zu finden sind. Zu berücksichtigen sei der Fall von Registern im CSA: jedes PE kann einige wenige (z. B. 10 oder weniger) Speicherregister aufweisen. Allein genommen, können diese Register effizienter als herkömmliche Registerdateien sein. Zusammengefasst können diese Register die Wirkung einer großen, fabric-strukturinternen Registerdatei bereitstellen. Als ein Ergebnis vermeiden Ausführungsformen eines CSA die meisten Stapelverschüttungen und -füllungen, die bei klassischen Architekturen auftreten, und brauchen gleichzeitig weniger Energie pro Zustandszugriff. Selbstverständlich können die Anwendungen weiter auf den Speicher zugreifen. In Ausführungsformen eines CSA sind Speicherzugriffsanfrage und -antwort architektonisch entkoppelt, wodurch Arbeitslasten ermöglicht werden, die viele weitere ausstehende Speicherzugriffe pro Einheit Bereich und Energie beibehalten. Diese Eigenschaft bietet eine wesentlich höhere Leistung für cachegebundene Arbeitslasten und reduziert den Bereich und die Energie, die zum Sättigen des Hauptspeichers in speichergebundenen Arbeitslasten benötigt werden. Ausführungsformen eines CSA legen neue Formen der Energieeffizienz frei, die in Nicht-von-Neumann-Architekturen einzigartig sind. Eine Folge des Ausführens einer einzelnen Operation (z. B. eines Befehls) an einem (z. B. den meisten) PE(s) ist eine reduzierte Operandenentropie. Im Fall einer Inkrementierungsoperation kann jede Ausführung zu einer Handvoll Umschaltmöglichkeiten auf Schaltungsebene und einem geringen Energieverbrauch führen, ein Fall, der in Abschnitt 6.2 im Detail untersucht wird. Demgegenüber sind von-Neumann-Architekturen gemultiplext, was zu einer höheren Anzahl von Bitübergängen führt. Der asynchrone Stil von Ausführungsformen eines CSA ermöglicht auch mikroarchitektonische Optimierungen, wie die in Abschnitt 3.5 beschriebenen Gleitkomma-Optimierungen, die in eng geplanten Kern-Pipelines schwierig zu realisieren sind. Da PEs relativ einfach sein können und ihr Verhalten in einem bestimmten Datenflussgraphen statisch bekannt ist, können Takt-Gating- und Power-Gating-Techniken effektiver angewendet werden als in gröberen Architekturen. Der Graphenausführungsstil, die kleine Größe und die Formbarkeit von Ausführungsformen der CSA-PEs und dem Netzwerk ermöglichen zusammen den Ausdruck vieler Arten von Parallelität: Befehls-, Daten-, Pipeline-, Vektor-, Speicher-, Thread- und Aufgabenparallelität können alle umgesetzt werden. Zum Beispiel kann in Ausführungsformen eines CSA eine Anwendung arithmetische Einheiten verwenden, um einen hohen Grad an Adressbandbreite bereitzustellen, während eine andere Anwendung dieselben Einheiten zur Berechnung verwenden kann. In vielen Fällen können mehrere Arten von Parallelität kombiniert werden, um noch mehr Leistung zu erzielen. Viele wichtige HPC-Operationen können sowohl repliziert als auch fließbandverarbeitet werden, was zu Leistungszugewinnen in Größenordnung führt. Im Gegensatz dazu optimieren von-Neumann-Kerne typischerweise einen von den Architekten sorgfältig gewählten Parallelitätsstil, was zu einem Versagen der Erfassung aller wichtigen Anwendungskerne führt. So wie Ausführungsformen eines CSA viele Formen von Parallelität zeigen und erleichtern, wird keine bestimmte Form von Parallelität vorgeschrieben oder, schlimmer noch, ist keine bestimmte Subroutine in einer Anwendung vorhanden, um von dem CSA zu profitieren. Viele Anwendungen, einschließlich Einzel-Stream-Anwendungen, können sowohl Leistungs- als auch Energievorteile von Ausführungsformen eines CSA erhalten, z. B. sogar dann, wenn sie ohne Modifikation kompiliert werden. Dies kehrt den langen Trend um, dass ein signifikanter Programmieraufwand erforderlich ist, um einen wesentlichen Leistungsgewinn in Einzel-Stream-Anwendungen zu erzielen. Tatsächlich erhalten Ausführungsformen eines CSA in einigen Anwendungen mehr Leistung von funktionell äquivalenten, aber weniger „modernen“ Codes als von ihren verschachtelten zeitgenössischen Cousins, die gefoltert wurden, um Vektoranweisungen zu erzielen.
  • Vergleich zwischen CSA-Ausführungsformen und FGPAs
  • Die Wahl der Datenflussoperatoren als grundlegende Architektur von Ausführungsformen eines CSA unterscheidet diese CSAs von einem FGPA, und insbesondere ist der CSA als überlegener Beschleuniger für HPC-Datenflussgraphen, die aus traditionellen Programmiersprachen stammen. Die Datenflussoperatoren sind grundlegend asynchron. Dies ermöglicht Ausführungsformen eines CSA nicht nur eine große Freiheit bei der Umsetzung in der Mikroarchitektur, sondern ermöglicht auch die einfache und prägnante Aufnahme abstrakter Architekturkonzepte. Zum Beispiel nehmen Ausführungsformen eines CSA natürlich viele Speicher-Mikroarchitekturen auf, die im Wesentlichen asynchron sind, mit einer einfachen Lade-Speicher-Schnittstelle. Es muss nur eine FPGA DRAM-Steuerung zum Schätzen des Unterschieds in der Komplexität untersucht werden. Ausführungsformen eines CSA nutzen Asynchronität auch, um schnellere und vollständiger ausgestattete Laufzeitdienste wie Auslegung und Extraktion bereitzustellen, von denen angenommen wird, dass sie vier bis sechs Größenordnungen schneller sind als ein FPGA. Durch Verengen der Architekturschnittstelle ermöglichen Ausführungsformen eines CSA die Steuerung der meisten Zeitsteuerungspfade auf Mikroarchitekturebene. Dies ermöglicht Ausführungsformen eines CSA bei einer viel höheren Frequenz als der allgemeinere Steuerungsmechanismus zu arbeiten, der in einem FPGA geboten wird. In ähnlicher Weise sind Takt und Reset, die für FPGAs architektonisch grundlegend sein können, im CSA mikroarchitektonisch, wodurch zum Beispiel ihre Unterstützung als programmierbare Einheiten überflüssig wird. Die Datenflussoperatoren können größtenteils grobkörnig sein. Indem nur grobe Operatoren behandelt werden, verbessern Ausführungsformen eines CSA sowohl die Dichte der Fabric-Struktur als auch ihren Energieverbrauch: Der CSA führt Operationen direkt aus, anstelle sie mit Nachschlagetabellen zu emulieren. Eine zweite Konsequenz der Grobkörnigkeit ist eine Vereinfachung des Platzier- und Routingproblems. CSA-Datenflussgraphen sind viele Größenordnungen kleiner als FPGA-Netzlisten, und Platzier- und Routingzeit sind in Ausführungsformen eines CSA gleichfalls reduziert. Die signifikanten Unterschiede zwischen den Ausführungsformen eines CSA und eines FPGA machen den CSA als Beschleuniger überlegen, z. B. für Datenflussgraphen, die aus traditionellen Programmiersprachen stammen.
  • AUSWERTUNG
  • Beim CSA handelt es sich um eine neuartige Computerarchitektur, die im Vergleich zu Roadmap-Prozessoren ein enormes Potential zur Bereitstellung von Leistungs- und Energievorteilen innehat. Man betrachte den Fall des Berechnens einer einzelnen ausgreifenden Adresse zum Durchlaufen eines Arrays. Dieser Fall kann in HPC-Anwendungen wichtig sein, die z. B. einen bedeutenden Integer-Aufwand bei der Berechnung von Adress-Offsets verbringen. Bei der Adressberechnung und insbesondere bei der ausgreifenden Adressberechnung ist ein Argument konstant und das andere variiert nur geringfügig pro Berechnung. Daher werden in den meisten Fällen nur eine Handvoll Bits pro Zyklus umgeschaltet. Tatsächlich kann gezeigt werden, dass unter Verwendung einer Ableitung, die den in Abschnitt 3.5 beschriebenen gebundenen Gleitkomma-Übertragsbits gleicht, durchschnittlich weniger als zwei Bits Eingabe pro Berechnung für eine Schrittberechnung umschalten, wodurch die Energie um 50% gegenüber einer zufälligen Umschaltverteilung reduziert wird. Würde ein zeitgemultiplexter Ansatz verwendet, gingen viele dieser Energieeinsparungen verloren. In einer Ausführungsform erzielt der CSA eine ungefähr 3-fache Energieeffizienz gegenüber einem Kern und erzielt einen 8-fachen Leistungszugewinn. Die Parallelitätszugewinne, die durch Ausführungsformen eines CSA erreicht werden, können zu reduzierten Programmlaufzeiten führen, was zu einer verhältnismäßigen wesentlichen Reduktion der Verlustenergie führt. Auf PE-Ebene sind die Ausführungsformen eines CSA extrem energieeffizient. Eine zweite wichtige Frage für das CSA ist, ob das CSA eine angemessene Menge an Energie auf Kachel-Ebene verbraucht. Da Ausführungsformen eines CSA jedes Gleitkomma-PE in der Fabric-Struktur bei jedem Zyklus ausüben können, dient es als eine vernünftige Obergrenze für den Energie- und Leistungsverbrauch, sodass z . B. der größte Teil der Energie in Gleitkomma-Multiplikation und -Addition geht.
  • WEITERE CSA-DETAILS
  • Dieser Abschnitt bespricht weitere Details zur Auslegung und Ausnahmenbehandlung.
  • Mikroarchitektur zum Auslegen eines CSA
  • Dieser Abschnitt offenbart Beispiele zum Auslegen eines CSA (z. B. Fabric-Struktur), wie diese Auslegung schnell erreicht werden kann und wie der Ressourcenaufwand der Auslegung minimiert werden kann. Die schnelle Auslegung der Fabric-Struktur kann bei der Beschleunigung kleiner Teile eines größeren Algorithmus und folglich bei der Erweiterung der Anwendbarkeit eines CSA von herausragender Bedeutung sein. Der Abschnitt offenbart ferner Merkmale, die Ausführungsformen eines CSA die Programmierung mit Auslegungen unterschiedlicher Länge ermöglichen.
  • Ausführungsformen eines CSA (z. B. Fabric-Struktur) können sich von herkömmlichen Kernen dadurch unterscheiden, dass sie einen Auslegungsschritt verwenden, in dem (z. B. große) Teile der Fabric-Struktur vor der Programmausführung mit einer Programmauslegung geladen werden. Ein Vorteil der statischen Auslegung kann sein, dass sehr wenig Energie zur Laufzeit der Auslegung verbraucht wird, z. B. im Gegensatz zu sequentiellen Kernen, die Energie für fast jeden Zyklus zum Abrufen von Auslegungsinformationen (eines Befehls) verbrauchen. Der bisherige Nachteil der Auslegung besteht darin, dass es sich um einen grobkörnigen Schritt mit einer möglicherweise großen Latenz handelt, was eine Untergrenze für die Größe des Programms darstellt, die aufgrund der Kosten des Kontextwechsels in der Fabric-Struktur beschleunigt werden kann. Diese Offenbarung beschreibt eine skalierbare Mikroarchitektur zum schnellen Auslegen eines räumlichen Arrays in einer verteilten Art und Weise, die z. B. die bisherigen Nachteile vermeidet.
  • Wie oben erläutert, kann ein CSA leichtgewichtige Verarbeitungselemente aufweisen, die durch ein Inter-PE-Netzwerk verbunden sind. Programme, die als Steuerdatenflussgraphen angesehen werden, werden dann auf die Architektur abgebildet, indem die auslegbaren Fabric-Strukturelemente (CFEs) ausgelegt werden, z. B. PEs und die Verbindungsnetzwerke (Fabric-Struktur). Im Allgemeinen können PEs als Datenflussoperatoren ausgelegt sein und, sobald alle Eingabeoperanden am PE eingetroffen sind, kann eine Operation stattfinden und die Ergebnisse an ein weiteres PE oder PEs zum Verbrauch oder zur Ausgabe weitergeleitet werden. PEs können über zweckgebundene virtuelle Schaltungen kommunizieren, die durch statisches Auslegen eines leitungsvermittelten Kommunikationsnetzwerks gebildet werden. Diese virtuellen Schaltungen können flussgesteuert und vollständig gegengedrückt sein, z. B. so, dass die PEs anhalten, wenn entweder die Quelle keine Daten aufweist oder der Zielspeicherplatz voll ist. Bei Laufzeit können Daten durch die PEs fließen und den abgebildeten Algorithmus umsetzen. Zum Beispiel können Daten aus dem Speicher durch die Fabric-Struktur eingestreamt werden und dann zurück in den Speicher gehen. Eine solche räumliche Architektur kann eine bemerkenswerte Leistungseffizienz im Vergleich zu herkömmlichen Mehrkernprozessoren erreichen: die Berechnung, in der Form von PEs, kann einfacher und zahlreicher als größere Kerne sein und die Kommunikation direkt sein, z. B. im Gegensatz zu einer Erweiterung des Speichersystems.
  • Ausführungsformen eines CSA brauchen keine (z. B. softwaregesteuerte) Paketvermittlung verwenden, z. B. Paketvermittlung, die eine erhebliche Softwareunterstützung zur Ausführung erfordert, welche die Auslegung verlangsamt. Ausführungsformen eines CSA weisen eine bandexterne Signalisierung in dem Netzwerk (z. B. von nur zwei bis drei Bits, abhängig von dem unterstützten Merkmalssatz) und eine Topologie mit fester Auslegung auf, um den Bedarf einer signifikanten Softwareunterstützung zu vermeiden.
  • Ein Hauptunterschied zwischen Ausführungsformen eines CSA und dem Ansatz, der in FPGAs verwendet wird, besteht darin, dass ein CSA-Ansatz ein breites Datenwort verwenden kann, verteilt ist und Mechanismen aufweist, um Programmdaten direkt aus dem Speicher abzurufen. Ausführungsformen eines CSA können im Interesse der Bereichseffizienz keine JTAG-artigen Einzelbitkommunikationen verwenden, weil dies z. B. Millisekunden benötigt, um eine große FPGA-Struktur vollständig auszulegen.
  • Ausführungsformen eines CSA umfassen ein verteiltes Auslegungsprotokoll und eine Mikroarchitektur, um dieses Protokoll zu unterstützen. Anfangs kann sich der Auslegungszustand im Speicher befinden. Mehrere (z. B. verteilte) lokale Auslegungssteuerungen (Boxes) (LCCs) können Teile des Gesamtprogramms in ihren lokalen Bereich der räumlichen Fabric-Struktur streamen, z. B. unter Verwendung einer Kombination aus einem kleinen Satz von Steuersignalen und dem Netzwerk mit Fabric-Struktur. Zustandselemente können an jedem CFE verwendet werden, um Auslegungsketten zu bilden, z. B. um einzelnen CFEs zu ermöglichen, sich ohne globale Adressierung selbst zu programmieren.
  • Ausführungsformen eines CSA weisen eine spezifische Hardwareunterstützung für die Bildung von Auslegungsketten auf, z. B. keine Software, die diese Ketten dynamisch auf Kosten einer zunehmenden Auslegungszeit erstellt. Ausführungsformen eines CSA sind nicht rein paketvermittelt und umfassen zusätzliche bandexterne Steuerdrähte (z. B. wird die Steuerung nicht durch den Datenpfad gesendet, was zusätzliche Zyklen erfordert, um diese Information abzutasten und diese Information zu reserialisieren). Ausführungsformen eines CSA verringern die Auslegungslatenz durch Festlegen der Auslegungsreihenfolge und durch Bereitstellen einer expliziten bandexternen Steuerung (z. B. um mindestens einen Faktor von zwei), während die Netzwerkkomplexität nicht wesentlich zunimmt.
  • Ausführungsformen eines CSA verwenden keinen seriellen Mechanismus zur Auslegung, bei dem Daten Bit für Bit unter Verwendung eines JTAG-artigen Protokolls in die Fabric-Struktur gestreamt werden. Ausführungsformen eines CSA benutzen einen grobkörnigen Fabric-Strukturansatz. In bestimmten Ausführungsformen ist das Hinzufügen einiger Steuerdrähte oder Zustandselemente zu einer 64- oder 32-Bit-orientierten CSA-Fabric-Struktur kostengünstiger als das Hinzufügen derselben Steuermechanismen zu einer 4- oder 6-Bit-Fabric-Struktur.
  • 37 veranschaulicht eine Beschleuniger-Kachel 3700, umfassend ein Array von Verarbeitungselementen (PE) und eine lokale Auslegungssteuerung (3702, 3706) gemäß Ausführungsformen der Offenbarung. Jedes PE, jede Netzwerksteuerung (z. B. Netzwerkdatenfluss-Endpunktschaltung) und jede Weiche können auslegbare Fabric-Strukturelemente (CFEs) sein, die z. B. durch Ausführungsformen der CSA-Architektur ausgelegt (z. B. programmiert) werden.
  • Ausführungsformen eines CSA umfassen Hardware, die eine effiziente, verteilte Auslegung mit niedriger Latenzzeit für eine heterogene räumliche Fabric-Struktur bereitstellt. Dies kann gemäß vier Techniken erreicht werden. Zuerst wird eine Hardwareentität, die lokale Auslegungssteuerung (LCC, Local Configuration Controller) benutzt, wie in 37-39. Eine LCC kann einen Stream aus Auslegungsinformation aus einem (z. B. virtuellen) Speicher abrufen. Zweitens kann ein Auslegungsdatenpfad enthalten sein, der z. B. so breit wie die ursprüngliche Breite der PE-Fabric-Struktur ist und der über die PE-Fabric-Struktur gelegt werden kann. Drittens können neue Steuersignale in der PE-Fabric-Struktur empfangen werden, die den Auslegungsprozess durchführen. Viertens können Zustandselemente an jedem auslegbaren Endpunkt angeordnet sein (z. B. in einem Register), die den Status benachbarter CFEs verfolgen, so dass sich jedes CFE ohne zusätzliche Steuersignale eindeutig selbst auslegen kann. Diese vier mikroarchitektonischen Merkmale können einem CSA das Auslegen von Ketten seiner CFEs ermöglichen. Zum Erhalten einer geringen Auslegungslatenz kann die Auslegung durch Bilden vieler LCCs und CFE-Ketten partitioniert werden. Zur Auslegungszeit können diese unabhängig voneinander arbeiten, um die Fabric-Struktur parallel zu laden, z. B. um die Latenz drastisch zu reduzieren. Als ein Ergebnis dieser Kombinationen können Fabric-Strukturen, die unter Verwendung von Ausführungsformen eines CSA-Architektur ausgelegt sind, vollständig ausgelegt sein (z. B. in Hunderten von Nanosekunden). Im Folgenden wird der Betrieb der verschiedenen Komponenten von Ausführungsformen eines CSA-Auslegungsnetzwerks detailliert beschrieben.
  • 38A-38C stellen eine lokale Auslegungssteuerung 3802, die ein Datenpfadnetzwerk auslegt, gemäß Ausführungsformen der Offenbarung dar. Das dargestellte Netzwerk umfasst mehrere Multiplexer (z. B. Multiplexer 3806, 3808, 3810), die ausgelegt werden können (z. B. über zugehörige Steuersignale), um einen oder mehrere Datenpfade (z. B. von PEs) miteinander zu verbinden. 38A stellt das Netzwerk 3800 (z. B. Fabric-Struktur) dar, das für eine bisherige Operation oder Programm ausgelegt (z. B. eingestellt) wurde. 38B stellt die lokale Auslegungssteuerung 3802 dar (die z. B. eine Netzwerkschnittstellenschaltung 3804 zum Senden und/oder Empfangen von Signalen aufweist), die ein Auslegungssignal abtastet und das lokale Netzwerk auf eine Standardauslegung (z. B. wie dargestellt) setzt, die es der LCC erlaubt, Auslegungsdaten an alle auslegbaren Fabric-Strukturelemente (CFEs), z. B. Muxe, zu senden. 38C veranschaulicht die LCC-Abtast-Auslegungsinformation über das Netzwerk, wobei CFEs in einer vorbestimmten (z. B. siliciumdefinierten) Sequenz ausgelegt werden. In einer Ausführungsform kann die Operation unverzüglich beginnen, wenn die CFEs ausgelegt werden. In anderen Ausführungsformen warten die CFEs mit dem Beginn der Operation, bis die Fabric-Struktur vollständig ausgelegt ist (z. B. wie durch den Auslegungsterminierer (z. B. Auslegungsterminierer 4004 und Auslegungsterminierer 4008 in 40) für jede lokale Auslegungssteuerung signalisiert). In einer Ausführungsform erhält die LCC die Steuerung über die Netzwerk-Fabric-Struktur durch Senden einer Sondernachricht oder Ansteuern eines Signals. Sie tastet dann Auslegungsdaten (z. B. über eine Periode mehrerer Zyklen) zu den CFEs in der Fabric-Struktur ab. In diesen Figuren sind die Multiplexernetzwerke Analoga der „Weiche“, die in bestimmten Figuren gezeigt ist (z. B. 21).
  • Lokale Auslegungssteuerung
  • 39 veranschaulicht eine (z. B. lokale) Auslegungssteuerung 3902 gemäß Ausführungsformen der Offenbarung. Eine lokale Auslegungssteuerung (LCC, Local Configuration Controller) kann die Hardwareentität sein, die für das Laden der lokalen Teile (z. B. in einer Teilmenge einer Kachel oder auf andere Weise) des Fabric-Strukturprogramms, das Interpretieren dieser Programmteile und dann das Laden dieser Programmteile in die Fabric-Struktur verantwortlich ist, indem sie das angemessene Protokoll auf den verschiedenen Auslegungsdrähten ansteuert. In dieser Eigenschaft kann die LCC ein spezieller sequentieller Mikrocontroller sein.
  • Die LCC-Operation kann beginnen, wenn ein Zeiger zu einem Codesegment empfangen wird. Je nach der LCB-Mikroarchitektur kann dieser Zeiger (z. B. im Zeigerregister 3906 gespeichert) entweder über ein Netzwerk (z. B. von innerhalb des CSA (Fabric-Struktur) selbst) oder über einen Speichersystemzugriff auf die LCC kommen. Bei Empfangen eines solchen Zeigers entzieht die LCC optional den relevanten Zustand von ihrem Teil der Fabric-Struktur für den Kontextspeicher und fährt dann fort, den Teil der Fabric-Struktur, für den sie verantwortlich ist, sofort neu auszulegen. Das von der LCC geladene Programm kann eine Kombination von Auslegungsdaten für die Fabric-Struktur- und Steuerbefehle für die LCC sein, die z. B. leicht codiert sind. Wenn die LCC in den Programmabschnitt streamt, kann sie das Programm als einen Befehlsstream interpretieren und die geeignete codierte Aktion ausführen, um die Fabric-Struktur auszulegen (z. B. zu laden).
  • Zwei unterschiedliche Mikroarchitekturen für die LCC sind in 37 gezeigt, wobei z. B. eine oder beide in einem CSA benutzt werden. Die erste setzt die LCC 3702 als Speicherschnittstelle. In diesem Fall kann die LCC direkte Anforderungen an das Speichersystem zum Laden von Daten stellen. Im zweiten Fall ist die LCC 3706 auf einem Speichernetzwerk angeordnet, in dem sie Anforderungen an den Speicher nur indirekt stellen kann. In beiden Fällen bleibt die logische Operation der LCB unverändert. In einer Ausführungsform wird eine LCC über das zu ladende Programm informiert, beispielsweise durch einen Satz von (z. B. BS-sichtbaren) Steuerstatusregistern, die verwendet werden, um einzelne LCCs über neue Programmzeiger usw. zu informieren.
  • Zusätzliche bandexterne Steuerkanäle (z. B. Drähte)
  • In bestimmten Ausführungsformen verlässt sich die Auslegung auf 2 bis 8 zusätzliche bandexterne Steuerkanäle, um die Auslegungsgeschwindigkeit wie unten definiert zu verbessern. Beispielsweise kann Auslegungssteuerung 3902 die folgenden Steuerkanäle umfassen: z. B. Steuerkanal CFG_START 3908, Steuerkanal CFG_START_PRIVILEGE 3909, Steuerkanal CFG_VALID 3910 und Steuerkanal CFG_DONE 3912, wobei Beispiele für jeden einzelnen in der nachstehenden Tabelle 3 besprochen werden. Tabelle 3: Steuerkanäle
    CFG_START Bestätigt zu Beginn der Auslegung. Legt den Auslegungszustand an jedem CFE fest und legt den Auslegungsbus fest.
    CFG_START_PRIVILEGE Bestätigt zu Beginn der Auslegung. Zeigt die Aktivierung der Bevorzugungsauslegung an.
    CFG_VALID Zeigt die Gültigkeit von Werten auf dem Auslegungsbus an.
    CFG_DONE Optional. Zeigt den Abschluss der Auslegung eines bestimmten CFE an. Dies ermöglicht das Kurzschließen einer Auslegung, wenn ein CFE keine zusätzliche Auslegung erfordert.
  • Im Allgemeinen kann die Behandlung von Auslegungsinformation dem Umsetzer eines bestimmten CFE überlassen werden. Zum Beispiel kann ein auswählbares Funktions-CFE eine Vorkehrung zum Setzen von Registern unter Verwendung eines existierenden Datenpfads aufweisen, während eine festes Funktions-CFE einfach ein Auslegungsregister einstellen kann.
  • Aufgrund der langen Drahtverzögerungen beim Programmieren großer Mengen von CFEs kann das Signal CFG_VALID als eine Takt-/Latch-Aktivierung für die CFE-Komponenten behandelt werden. Da dieses Signal als ein Takter verwendet wird, beträgt in einer Ausführungsform der Arbeitszyklus der Leitung höchstens 50%. Als Ergebnis wird der Auslegungsdurchsatz in etwa halbiert. Optional kann ein zweites CFG_VALID-Signal hinzugefügt werden, um eine kontinuierliche Programmierung zu ermöglichen.
  • In einer Ausführungsform wird nur CFG_START strikt an eine unabhängige Kopplung (z. B. Draht) kommuniziert, zum Beispiel können CFG_VALID und CFG_DONE über andere Netzwerkkopplungen gelegt werden.
  • Wiederverwendung von Netzwerkressourcen
  • Zum Reduzieren des Auslegungsaufwands nutzen bestimmte Ausführungsformen eines CSA die vorhandene Netzwerkinfrastruktur zur Kommunikation von Auslegungsdaten. Eine LCC kann sowohl eine Speicherhierarchie auf Chipebene als auch Kommunikationsnetzwerke auf Fabric-Strukturebene zum Bewegen von Daten vom Speicher in die Fabric-Struktur verwenden. Als Ergebnis trägt die Auslegungsinfrastruktur in bestimmten Ausführungsformen eines CSA nicht mehr als 2% zum gesamten Fabric-Strukturbereich und zur Gesamtleistung bei.
  • Die Wiederverwendung von Netzwerkressourcen in bestimmten Ausführungsformen eines CSA kann ein Netzwerk dazu veranlassen, einige Hardwareunterstützung für einen Auslegungsmechanismus zu erlangen. Leitungsvermittelte Netzwerke von Ausführungsformen eines CSA bewirken, dass eine LCC ihre Multiplexer auf eine spezifische Weise für die Auslegung setzt, wenn das Signal ,CFG_START‘ angegeben wird. Paketvermittelte Netzwerke erfordern keine Erweiterung, obwohl LCC-Endpunkte (z. B. Auslegungsterminierer) eine spezifische Adresse in dem paketvermittelten Netzwerk verwenden. Die Netzwerkwiederverwendung ist optional, und einige Ausführungsformen finden ggf. eigens vorgesehene Auslegungsbusse angemessener.
  • Per-CFE-Zustand
  • Jedes CFE kann ein Bit halten, das angibt, ob es ausgelegt wurde oder nicht (siehe z. B. 28). Dieses Bit kann deaktiviert werden, wenn das Auslegungsstartsignal angesteuert wird, und dann aktiviert werden, sobald das bestimmte CFE ausgelegt wurde. In einem Auslegungsprotokoll sind die CFEs angeordnet, um Ketten mit dem CFE-Auslegungszustandsbit zu bilden, das die Topologie der Kette bestimmt. Ein CFE kann das Auslegungszustandsbit des unmittelbar angrenzenden CFE lesen. Wenn dieses benachbarte CFE ausgelegt ist und das derzeitige CFE nicht ausgelegt ist, kann das CFE bestimmen, dass sämtliche derzeitigen Auslegungsdaten auf das derzeitige CFE abzielen. Wenn das Signal CFG_DONE bestätigt wird, kann das CFE sein Auslegungsbit setzen, z. B. vorgelagerte CFEs zum Konfigurieren aktivieren. Als ein Basisfall für den Auslegungsprozess kann ein Auslegungsterminierer (z. B. Auslegungsterminierer 3704 für LCC 3702 oder Auslegungsterminierer 3708 für LCC 3706 in 37), der bestätigt, dass er ausgelegt ist, am Ende einer Kette aufgenommen werden.
  • CFE-intern kann dieses Bit zum Ansteuern der flusssteuerbereiten Signale verwendet werden. Wenn zum Beispiel das Auslegungsbit deaktiviert wird, können Netzwerksteuersignale automatisch auf einen Wert geklemmt werden, der verhindert, dass Daten fließen, während innerhalb der PEs keine Operationen oder andere Aktionen geplant werden.
  • Behandeln von Auslegungspfaden mit hoher Verzögerung
  • Eine Ausführungsform einer LCC kann ein Signal über eine lange Distanz, z. B. durch viele Multiplexer und mit vielen Ladevorgängen, treiben. Daher kann es für ein Signal schwierig sein, an einem entfernten CFE innerhalb eines kurzen Taktzyklus einzugehen. In bestimmten Ausführungsformen sind die Auslegungssignale in einer bestimmten Division (z. B. einem Bruchteil von) der Haupttaktfrequenz (z. B. CSA), um eine digitale Zeitdisziplin bei der Auslegung sicherzustellen. Die Taktteilung kann in einem bandexternen Signalisierungsprotokoll benutzt werden und erfordert keine Modifikation des Haupttaktbaums.
  • Sicherstellen des konsistenten Fabric-Strukturverhaltens während der Auslegung
  • Da bestimmte Auslegungsschemata verteilt sind und aufgrund von Programm- und Speichereffekten eine nicht-deterministische Zeitsteuerung aufweisen, können verschiedene Teile der Fabric-Struktur zu unterschiedlichen Zeiten ausgelegt werden. Als ein Ergebnis stellen bestimmte Ausführungsformen eines CSA Mechanismen bereit, um eine inkonsistente Operation zwischen ausgelegten und nicht ausgelegten CFEs zu verhindern. Allgemein wird Konsistenz als eine Eigenschaft angesehen, die von den CFEs selbst gefordert und beibehalten wird, z. B. unter Verwendung des internen CFE-Zustands. Wenn ein CFE z. B. in einem nicht ausgelegten Zustand ist, kann es beanspruchen, dass seine Eingabepuffer voll sind und dass seine Ausgabe ungültig ist. Beim Auslegen werden diese Werte auf den wahren Zustand der Puffer eingestellt. Da genügend von der Fabric-Struktur aus der Auslegung kommt, können diese Techniken den Beginn der Operation zulassen. Dies hat den Effekt der weiteren Reduktion der Kontextwechsellatenz, z. B. wenn Speicheranfragen mit langer Latenz früh ausgegeben werden.
  • Auslegung mit variabler Breite
  • Unterschiedliche CFEs können unterschiedliche Auslegungswortbreiten aufweisen. Bei kleineren CFE-Auslegungswörtern können die Umsetzer die Verzögerung kompensieren, indem sie CFE-Auslegungslasten über die Netzwerkleitungen gleichmäßig zuweisen. Zum Ausgleichen der Last auf Netzwerkleitungen ist eine Möglichkeit, Auslegungsbits verschiedenen Abschnitten von Netzwerkleitungen zuzuweisen, um die Nettoverzögerung auf einen einzigen Draht zu begrenzen. Breite Datenwörter können durch Serialisierungs-/Deserealisierungstechniken behandelt werden. Diese Entscheidungen können auf einer Per-Fabric-Basis getroffen werden, um das Verhalten eines spezifischen CSA (z. B. Fabric-Struktur) zu optimieren. Die Netzwerksteuerung (z. B. eine oder mehrere von Netzwerksteuerung 3710 und Netzwerksteuerung 3712 können mit jeder Domäne (z. B. Teilmenge) des CSA (z. B. Fabric-Struktur) kommunizieren, um z. B. Auslegungsinformationen an eine oder mehrere LCCs zu senden. Die Netzwerksteuerung kann Teil eines Kommunikationsnetzwerks sein (z. B. separat vom leitungsvermittelten Netzwerk). Die Netzwerksteuerung kann eine Netzwerkdatenfluss-Endpunktschaltung umfassen.
  • Mikroarchitektur für die Niederlatenz-Auslegung eines CSA und zum rechtzeitigen Abrufen von Auslegungsdaten für ein CSA
  • Ausführungsformen eines CSA können ein energieeffizientes und leistungsstarkes Mittel sein, um Benutzeranwendungen zu beschleunigen. Bei der Berücksichtigung, ob ein Programm (z. B. ein Datenflussgraph davon) erfolgreich durch einen Beschleuniger beschleunigt werden kann, können sowohl die Zeit zum Auslegen des Beschleunigers als auch die Zeit zum Ausführen des Programms in Betracht gezogen werden. Wenn die Laufzeit kurz ist, kann die Auslegungszeit eine große Rolle bei der Bestimmung der erfolgreichen Beschleunigung spielen. Um die Domäne von beschleunigbaren Programmen zu maximieren, wird daher in einigen Ausführungsformen die Auslegungszeit so kurz wie möglich gemacht. Ein oder mehrere Auslegungs-Caches können in einem CSA enthalten sein, z. B. derart, dass der Speicher mit hoher Bandbreite und niedriger Latenz eine schnelle Neuauslegung ermöglicht. Im Folgenden wird eine Beschreibung verschiedener Ausführungsformen eines Auslegungs-Caches gegeben.
  • In einer Ausführungsform greift während der Auslegung die Auslegungshardware (z. B. LCC) optional auf den Auslegungs-Cache zu, um neue Auslegungsinformationen zu erhalten. Der Auslegungs-Cache kann entweder als ein traditioneller adressbasierter Cache oder in einem BS-verwalteten Modus arbeiten, in dem Auslegungen in dem lokalen Adressraum gespeichert sind und durch Bezugnahme auf diesen Adressraum adressiert werden. Wenn sich der Auslegungszustand in dem Cache befindet, dann müssen in bestimmten Ausführungsformen keine Anforderungen an den Sicherungsspeicher gestellt werden. In bestimmten Ausführungsformen ist dieser Auslegungs-Cache von sämtlichen gemeinsam genutzten Caches (z. B. auf niedrigerer Ebene) in der Speicherhierarchie getrennt.
  • 40 stellt eine Beschleuniger-Kachel 4000, umfassend ein Array von Verarbeitungselementen, einen Auslegungs-Cache (z. B. 4018 oder 4020) und eine lokale Auslegungssteuerung (z. B. 4002 oder 4006) gemäß Ausführungsformen der Offenbarung dar. In einer Ausführungsform ist der Auslegungs-Cache 4014 mit der lokalen Auslegungssteuerung 4002 gemeinsam angeordnet. In einer Ausführungsform befindet sich der Auslegungs-Cache 4018 in der Auslegungsdomäne der lokalen Auslegungssteuerung 4006, z. B. mit einer ersten Domäne, die am Auslegungsterminierer 4004 endet, und einer zweiten Domäne, die am Auslegungsterminierer 4008 endet. Ein Auslegungs-Cache kann es einer lokalen Auslegungssteuerung ermöglichen, während der Auslegung auf den Auslegungs-Cache Bezug zu nehmen, z. B. in der Hoffnung, einen Auslegungszustand mit einer niedrigeren Latenz als einen Bezug auf den Speicher zu erhalten. Ein Auslegungs-Cache (Speicher) kann entweder dediziert sein oder kann als ein Auslegungsmodus eines fabric-strukturinternen Speicherelements, z. B. des lokalen Caches 4016, zugänglich sein.
  • Cachemodi
    1. 1. Demand Caching - In diesem Modus arbeitet der Auslegungs-Cache als echter Cache. Die Auslegungssteuerung gibt adressbasierte Anfragen aus, die auf Tags im Cache überprüft werden. Fehler werden in den Cache geladen und können dann während einer zukünftigen Neuprogrammierung erneut referenziert werden.
    2. 2. In-Fabric Storage (Scratchpad) Caching - In diesem Modus empfängt der Auslegungs-Cache einen Verweis auf eine Auslegungssequenz in seinem eigenen kleinen Adressraum und nicht im größeren Adressraum des Hosts. Dies kann die Speicherdichte verbessern, da der Teil des Caches, der zum Speichern von Tags verwendet wird, stattdessen zum Speichern der Auslegung verwendet werden kann.
  • In bestimmten Ausführungsformen kann ein Auslegungs-Cache die Auslegungsdaten darin vorgeladen aufweisen, z. B. entweder durch externe Richtung oder interne Richtung. Dies kann die Reduktion der Latenz zum Laden von Programmen ermöglichen. Bestimmte Ausführungsformen hierin stellen eine Schnittstelle zu einem Auslegungs-Cache bereit, die das Laden eines neuen Auslegungszustands in den Cache erlaubt, z. B. selbst wenn eine Auslegung bereits in der Fabric-Struktur läuft. Die Initiierung dieses Ladens kann entweder von einer internen oder externen Quelle erfolgen. Ausführungsformen des Vorlademechanismus reduzieren die Latenz weiter, indem sie die Latenz der Cacheladung von dem Auslegungspfad entfernen.
  • Vorabrufmodi
    1. 1. Explicit Prefetching - Ein Auslegungspfad wird um einen neuen Befehl erweitert, ConfigurationCachePrefetch. Statt der Programmierung der Fabric-Struktur bewirkt dieser Befehl lediglich das Laden der relevanten Programmauslegung in einen Auslegungs-Cache, ohne die Fabric-Struktur zu programmieren. Da dieser Mechanismus auf der vorhandenen Auslegungsinfrastruktur pendelt, wird er sowohl innerhalb der Fabric-Struktur als auch extern offengelegt, z. B. für Kerne und andere Entitäten, die auf den Speicherraum zugreifen.
    2. 2. Implicit prefetching - Eine globale Auslegungssteuerung kann einen Vorabruf-Prädiktor beibehalten und diesen verwenden, um das explizite Vorladen in einen Auslegungs-Cache, z. B. automatisch, zu initiieren.
  • Hardware zur schnellen Neuauslegung eines CSA als Reaktion auf eine Ausnahme
  • Bestimmte Ausführungsformen eines CSA (z. B. eine räumliche Fabric-Struktur) weisen große Mengen eines Befehls- und Auslegungszustand auf, der z. B. während des Betriebs des CSA weitgehend statisch ist. Daher kann der Auslegungszustand anfällig für weiche Fehler sein. Die schnelle und fehlerfreie Wiederherstellung dieser weichen Fehler kann für die langfristige Zuverlässigkeit und Leistung von räumlichen Systemen entscheidend sein.
  • Bestimmte Ausführungsformen hierin stellen eine schnelle Auslegungswiederherstellungsschleife bereit, bei der z. B. Auslegungsfehler erkannt und Teile der Fabric-Struktur sofort neu ausgelegt werden. Bestimmte Ausführungsformen hierin weisen eine Auslegungssteuerung auf, z. B. mit Merkmalen zur Umprogrammierung der Zuverlässigkeit, Verfügbarkeit und Wartungsfreundlichkeit (RAS). Bestimmte Ausführungsformen des CSA weisen Schaltungsanordnungen für eine Hochgeschwindigkeitsauslegung, eine Fehlerberichterstattung und eine Paritätsprüfung innerhalb der räumlichen Fabric-Struktur auf. Unter Verwendung einer Kombination dieser drei Merkmale und optional eines Auslegungs-Cache kann sich eine Auslegungs-/Ausnahmebehandlungsschaltung von weichen Fehlern in der Auslegung erholen. Nach der Erkennung können weiche Fehler zu einem Auslegungs-Cache übertragen werden, der eine sofortige Neuauslegung der Fabric-Struktur initiiert (z. B. dieses Teils). Bestimmte Ausführungsformen stellen eine dedizierte Neuauslegungsschaltung bereit, die z. B. schneller ist als jede Lösung, die indirekt in die Fabric-Struktur umgesetzt würde. In bestimmten Ausführungsformen kooperieren die co-lokalisierte Ausnahme- und Auslegungsschaltung, um die Fabric-Struktur bei der Auslegungsfehlererkennung neu zu laden.
  • 41 veranschaulicht eine Beschleuniger-Kachel 4100, umfassend ein Array von Verarbeitungselementen und eine Auslegungs- und Ausnahmebehandlungssteuerung (4102, 4106) mit einer Neuauslegungsschaltung (4118, 4122) gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform sendet, wenn ein PE einen Auslegungsfehler durch seine lokalen RAS-Merkmale erkennt, es eine Nachricht (z. B. einen Auslegungsfehler oder einen Neuauslegungsfehler) durch seinen Ausnahmegenerator an die Auslegungs- und Ausnahmebehandlungssteuerung (z. B. 4102 oder 4106). Bei Empfang dieser Nachricht initiiert die Auslegungs- und Ausnahmebehandlungssteuerung (z. B. 4102 oder 4106) die co-lokalisierte Neuauslegungsschaltung (z. B. 4118 oder 4122), um den Auslegungszustand neu zu laden. Die Auslegungs-Mikroarchitektur geht weiter und lädt (z. B. nur) den Auslegungszustand neu, und in bestimmten Ausführungsformen nur den Auslegungszustand für das PE, das den RAS-Fehler meldet. Nach Abschluss der Neuauslegung kann die Fabric-Struktur die normale Operation wieder aufnehmen. Zum Verringern der Latenz kann der Auslegungszustand, der von der Auslegungs- und Ausnahmebehandlungssteuerung (z. B. 4102 oder 4106) verwendet wird, aus einem Auslegungs-Cache bezogen werden. Als ein Basisfall für den Auslegungs- und Neuauslegungsprozess kann ein Auslegungsterminierer (z. B. Auslegungsterminierer 4104 für die Auslegungs- und Ausnahmebehandlungssteuerung 4102 oder Auslegungsterminierer 4108 für die Auslegungs- und Ausnahmebehandlungssteuerung 4106 in 41), der bestätigt, dass er ausgelegt (oder neu ausgelegt) ist, am Ende einer Kette aufgenommen werden.
  • 42 veranschaulicht eine Neuauslegungsschaltung 4218 gemäß Ausführungsformen der Offenbarung. Die Neuauslegungsschaltung 4218 weist ein Auslegungszustandregister 4220 auf, um den Auslegungszustand (oder einen Zeiger darauf) zu speichern.
  • Hardware für eine fabric-strukturinitiierte Neuauslegung eines CSA
  • Einige Teile einer Anwendung, die auf ein CSA (z. B. räumliches Array) abzielen, können infrequent laufen oder können sich gegenseitig mit anderen Teilen des Programms ausschließen. Zum Sparen von Fläche und zum Verbessern der Leistung und/oder Reduzieren von Energie kann es nützlich sein, Teile der räumlichen Fabric-Struktur zwischen mehreren verschiedenen Teilen des Programm-Datenflussgraphen zeitzumultiplexen. Bestimmte Ausführungsformen hierin weisen eine Schnittstelle auf, durch die ein CSA (z. B. über das räumliche Programm) anfordern kann, dass ein Teil der Fabric-Struktur umprogrammiert wird. Dies kann dem CSA ermöglichen, sich gemäß dem dynamischen Steuerfluss selbst zu verändern. Bestimmte Ausführungsformen hierin erlauben eine fabric-strukturinitiierte Neuauslegung (z. B. Umprogrammierung). Bestimmte Ausführungsformen hierin stellen einen Satz für Schnittstellen zum Triggern der Auslegung von innerhalb der Fabric-Struktur bereit. In einigen Ausführungsformen gibt ein PE eine Neuauslegungsanfrage basierend auf einer Entscheidung in dem Programmdatenflussgraphen aus. Diese Anfrage kann durch ein Netzwerk zu unserer neuen Auslegungsschnittstelle gehen, wo sie die Neuauslegung triggert. Sobald die Neuauslegung abgeschlossen ist, kann eine Nachricht optional zurückgeleitet werden, die den Abschluss mitteilt. Bestimmte Ausführungsformen eines CSA stellen somit ein Programm (z. B. einen Datenflussgraphen) bereit, das sich an die Neuauslegungskapazität richtet.
  • 43 stellt eine Beschleuniger-Kachel 4300, umfassend ein Array von Verarbeitungselementen und eine Auslegungs- und Ausnahmebehandlungssteuerung 4306 mit einer Neuauslegungsschaltung 4318 gemäß Ausführungsformen der Offenbarung dar. Hier gibt ein Teil der Fabric-Struktur eine Anforderung zur (Neu-)Auslegung an eine Auslegungsdomäne aus, z. B. die Auslegungs- und Ausnahmebehandlungssteuerung 4306 und/oder Neuauslegungsschaltung 4318. Die Domäne legt sich selbst (neu) aus, und wenn die Anforderung erfüllt ist, gibt die Auslegungs- und Ausnahmebehandlungssteuerung 4306 und/oder die Neuauslegungsschaltung 4318 eine Antwort an die Fabric-Struktur aus, um die Fabric-Struktur darüber zu informieren, dass die (Neu-)Auslegung abgeschlossen ist. In einer Ausführungsform deaktivieren die Auslegungs- und Ausnahmebehandlungssteuerung 4306 und/oder die Neuauslegungsschaltung 4318 die Kommunikation während der Zeit, in der die (Neu-)Auslegung läuft, sodass das Programm während der Operation keine Konsistenzprobleme aufweist.
  • Auslegungsmodi
  • Configure-by-address - In diesem Modus fordert die Fabric-Struktur das Laden von Auslegungsdaten von einer bestimmten Adresse direkt an.
  • Configure-by-reference - In diesem Modus fordert die Fabric-Struktur das Laden einer neuen Auslegung an, z. B. durch eine vorbestimmte Referenz-ID. Dies kann die Bestimmung des zu ladenden Codes vereinfachen, da der Speicherort des Codes abstrahiert wurde.
  • Auslegen von mehreren Domänen
  • Ein CSA kann eine Auslegungssteuerung auf höherer Ebene umfassen, um einen Multicast-Mechanismus zu unterstützen, um Auslegungsanforderungen (z. B. über ein Netzwerk, das durch die gestrichelte Box angezeigt wird) an mehrere (z. B. verteilte oder lokale) Auslegungssteuerungen zu übertragen. Dies kann ermöglichen, dass eine einzelne Auslegungsanforderung über größere Teile der Fabric-Struktur repliziert werden kann, z. B. durch Triggern einer breiten Neuauslegung.
  • Ausnahmeaggregatoren
  • Bestimmte Ausführungsformen eines CSA können auch eine Ausnahme erfahren (z. B. eine Ausnahmebedingung), z. B. einen Gleitkomma-Underflow. Bei Auftreten dieser Bedingungen kann ein spezieller Handler aufgerufen werden, um das Programm entweder zu korrigieren oder es zu beenden. Bestimmte Ausführungsformen hierin stellen eine Architektur auf Systemebene zum Behandeln von Ausnahmen in räumlichen Fabric-Strukturen bereit. Da bestimmte räumliche Fabric-Strukturen die Bereichseffizienz hervorheben, minimieren die Ausführungsformen hierin die Gesamtfläche und stellen gleichzeitig einen allgemeinen Ausnahmemechanismus bereit. Bestimmte Ausführungsformen hierin stellen eine Niederbereichseinrichtung zum Signalisieren von außergewöhnlichen Zuständen bereit, die innerhalb eines CSA (z. B. einem räumlichen Array) auftreten. Bestimmte Ausführungsformen hierin stellen ein Schnittstellen- und Signalisierungsprotokoll zum Übermitteln solcher Ausnahmen sowie eine Ausnahmesemantik auf PE-Ebene bereit. Bestimmte Ausführungsformen hierin sind dedizierte Ausnahmebehandlungskapazitäten, und erfordern z. B. keine explizite Behandlung durch den Programmierer.
  • Eine Ausführungsform einer CSA-Ausnahmearchitektur besteht aus vier Teilen, die z. B. in den 44-45 gezeigt sind. Diese Teile können in einer Hierarchie angeordnet sein, in der Ausnahmen von dem Erzeuger und schließlich bis zu dem Ausnahmeaggregator auf Kachel-Ebene (z. B. Handler) fließen, der sich mit einem Ausnahmebediener, z. B. einem Kern, treffen kann. Die vier Teile können Folgende sein:
    1. 1. PE-Ausnahmegenerator
    2. 2. Lokales Ausnahme-Netzwerk
    3. 3. Mezzanine-Ausnahmeaggregator
    4. 4. Ausnahmeaggregator auf Kachel-Ebene
  • 44 stellt eine Beschleuniger-Kachel 4400, umfassend ein Array von Verarbeitungselementen und einen Mezzanine-Ausnahmeaggregator 4402, der mit einem Ausnahmeaggregator auf Kachel-Ebene 4404 gekoppelt ist, gemäß Ausführungsformen der Offenbarung dar. 45 stellt ein Verarbeitungselement 4500 mit einem Ausnahmegenerator 4544 gemäß Ausführungsformen der Offenbarung dar.
  • PE-Ausnahmegenerator
  • Das Verarbeitungselement 4500 kann beispielsweise das Verarbeitungselement 2400 aus 24 umfassen, wobei ähnliche Nummern ähnliche Komponenten sind, z. B. das lokale Netzwerk 2402 und das lokale Netzwerk 4502. Das zusätzliche Netzwerk 4513 (z. B. Kanal) kann ein Ausnahme-Netzwerk sein. Ein PE kann eine Schnittstelle zu einem Ausnahme-Netzwerk umsetzen (z. B. Ausnahme-Netzwerk 4513 (z. B. Kanal) in 45). Zum Beispiel zeigt 45 die Mikroarchitektur einer solchen Schnittstelle, wobei das PE einen Ausnahme-Erzeuger 4544 aufweist (z. B. zum Initiieren einer endlichen Ausnahmezustandsmaschine (FSM) 4540, um ein Ausnahmepaket (z. B. BOXID 4542) an das Ausnahme-Netzwerk auszugeben. BOXID 4542 kann ein eindeutiger Identifizierer für eine Ausnahmeerzeugungsentität (z. B. ein PE oder eine Box) in einem lokalen Ausnahme-Netzwerk sein. Wenn eine Ausnahme erkannt wird, misst der Ausnahmegenerator 4544 das Ausnahme-Netzwerk und tastet BOXID ab, wenn das Netzwerk als frei befunden wird. Ausnahmen können durch viele Bedingungen verursacht werden, z. B. arithmetische Fehler, fehlgeschlagener ECC-Prüfeinschaltzustand usw., aber nicht darauf beschränkt. Es kann jedoch auch sein, dass eine Ausnahmedatenflussoperation mit der Idee von Unterstützungskonstrukten wie Unterbrechungspunkten eingeführt wird.
  • Die Initiierung der Ausnahme kann entweder explizit, durch die Ausführung eines vom Programmierer eingegebenen Befehls, oder implizit, wenn eine gehärtete Fehlerbedingung (z. B. ein Gleitkomma-Underflow) erkannt wird, stattfinden. Bei einer Ausnahme kann das PE 4500 in einen Wartezustand eintreten, in dem es darauf wartet, von dem eventuellen Ausnahme-Handler bedient zu werden, z. B. außerhalb des PE 4500. Die Inhalte des Ausnahmepakets hängen von der Umsetzung des bestimmten PE ab, wie unten beschrieben.
  • Lokales Ausnahme-Netzwerk
  • Ein (z. B. lokales) Ausnahme-Netzwerk lenkt Ausnahmepakete vom PE 4500 zum Mezzanine-Ausnahme-Netzwerk. Das Ausnahme-Netzwerk (z. B. 4513) kann ein serielles paketvermitteltes Netzwerk sein, das aus einem (z. B. einzelnen) Steuerdraht und einem oder mehreren Datendrähten besteht und z. B. in einer Ring- oder Baumtopologie organisiert ist, z. B. für eine Teilmenge von PEs. Jedes PE kann einen (z. B. Ring-)Stopp im (z. B. lokalen) Ausnahme-Netzwerk aufweisen, in dem es z. B. entscheiden kann, Nachrichten in das Ausnahme-Netzwerk einzuspeisen.
  • PE-Endpunkte, die ein Ausnahmepaket einspeisen müssen, können ihren lokalen Ausnahme-Netzwerkaustrittspunkt beobachten. Wenn das Steuersignal „besetzt“ anzeigt, muss das PE warten, um mit dem Einspeisen seines Pakets zu beginnen. Wenn das Netzwerk nicht besetzt ist, d. h. der nachgelagerte Stopp kein Paket zum Weiterleiten aufweist, geht das PE zum Beginn der Einspeisung über.
  • Netzwerkpakete können von variabler oder fester Länge sein. Jedes Paket kann mit einem Feld einer festen Längenkopfzeile beginnen, die das Quell-PE des Pakets identifiziert. Danach kann eine variable Anzahl von PE-spezifischen Feldern folgen, die Informationen enthalten, einschließlich Fehlercodes, Datenwerte oder andere nützliche Statusinformationen.
  • Mezzanine-A usnahmeaggregator
  • Der Mezzanine-Ausnahmeaggregator 4404 ist dafür verantwortlich, ein lokales Ausnahme-Netzwerk zu größeren Paketen zu assemblieren und sie an den Ausnahmeaggregator auf Kachel-Ebene 4402 zu senden. Der Mezzanine-Ausnahmeaggregator 4404 kann das lokale Ausnahmepaket mit seiner eigenen eindeutigen ID voranstellen, z. B. um sicherzustellen, dass Ausnahmenachrichten unzweideutig sind. Der Mezzanine-Ausnahmeaggregator 4404 kann eine Schnittstelle mit einem speziellen virtuellen Nur-Ausnahme-Kanal im Mezzanine-Netzwerk aufweisen, die z. B. die Stillstandfreiheit der Ausnahmen sicherstellen.
  • Der Mezzanine-Ausnahmeaggregator 4404 kann auch direkt bestimmte Ausnahmeklassen bedienen. Eine Auslegungsanforderung von der Fabric-Struktur kann z. B. aus dem Mezzanine-Netzwerk unter Verwendung von Caches bedient werden, die für den Mezzanine-Netzwerkstopp lokal sind.
  • Ausnahmeaggregator auf Kachel-Ebene
  • Die letzte Stufe des Ausnahmesystems ist der Ausnahmeaggregator auf Kachel-Ebene 4402. Der Ausnahmeaggregator auf Kachel-Ebene 4402 ist verantwortlich für das Sammeln von Ausnahmen aus den verschiedenen Ausnahmeaggregatoren auf Mezzanine-Ebene (z. B. 4404) und für das Weiterleiten davon an die geeignete Service-Hardware (z. B. Kern). Daher kann der Ausnahmeaggregator auf Kachel-Ebene 4402 einige interne Tabellen und Steuerungen aufweisen, um bestimmte Nachrichten Handler-Routinen zuzuordnen. Diese Tabellen können entweder direkt oder mit einer kleinen Zustandsmaschine indiziert werden, um bestimmte Ausnahmen zu lenken.
  • Wie der Mezzanine-Ausnahmeaggregator kann der Ausnahmeaggregator auf Kachel-Ebene einige Ausnahmeanforderungen bedienen. Beispielsweise kann er die Umprogrammierung eines Großteils der PE-Fabric-Struktur als Reaktion auf eine spezifische Ausnahme initiieren.
  • Extraktionssteuerungen
  • Bestimmte Ausführungsformen eines CSA umfassen eine oder mehrere Extraktionssteuerungen zum Extrahieren von Daten aus der Fabric-Struktur. Nachstehend werden Ausführungsformen erläutert, wie diese Extraktion schnell vonstatten gehen kann und wie der Ressourcenaufwand der Auslegung minimiert werden kann. Die Datenextraktion kann für solche wichtigen Aufgaben wie Ausnahmebehandlung und Kontextwechsel benutzt werden. Bestimmte Ausführungsformen hierin extrahieren Daten aus einer heterogenen räumlichen Fabric-Struktur durch Einführen von Merkmalen, die extrahierbare Fabric-Strukturelemente (EFEs) (z. B. PEs, Netzwerksteuerungen und/oder Weichen) mit variablen und dynamisch variablen Mengen des zu extrahierenden Zustands zulassen.
  • Ausführungsformen eines CSA umfassen ein verteiltes Datenextraktionsprotokoll und eine Mikroarchitektur, um dieses Protokoll zu unterstützen. Bestimmte Ausführungsformen eines CSA umfassen mehrere Extraktionssteuerungen (LECs), die Programmdaten aus ihrem lokalen Bereich der räumlichen Fabric-Struktur unter Verwendung einer Kombination aus einer (z. B. kleinen) Menge von Steuersignalen und dem von der Fabric-Struktur bereitgestellten Netzwerk streamen. Zustandselemente können an jedem extrahierbaren Fabric-Strukturelement (EFE) verwendet werden, um Extraktionsketten zu bilden, z. B. um einzelnen EFEs zu erlauben, sich ohne globale Adressierung selbst zu extrahieren.
  • Ausführungsformen eines CSA verwenden kein lokales Netzwerk, um Programmdaten zu extrahieren. Ausführungsformen eines CSA weisen eine spezifische Hardware-Unterstützung (z. B. eine Extraktionssteuerung) für die Bildung von z. B. Extraktionsketten auf, und verlassen sich nicht auf Software, um diese Ketten dynamisch zu erstellen, z. B. auf Kosten der Extraktionszeit. Ausführungsformen eines CSA sind nicht rein paketvermittelt und umfassen zusätzliche bandexterne Steuerdrähte (z. B. wird die Steuerung nicht durch den Datenpfad gesendet, was zusätzliche Zyklen erfordert, um diese Information abzutasten und zu reserialisieren). Ausführungsformen eines CSA verringern die Extraktionslatenz durch Festlegen der Extraktionsreihenfolge und durch Bereitstellen einer expliziten bandexternen Steuerung (z. B. um mindestens einen Faktor von zwei), während die Netzwerkkomplexität nicht wesentlich zunimmt.
  • Ausführungsformen eines CSA verwenden keinen seriellen Mechanismus zur Datenextraktion, bei der Daten Bit für Bit unter Verwendung eines JTAG-artigen Protokolls in die Fabric-Struktur gestreamt werden. Ausführungsformen eines CSA benutzen einen grobkörnigen Fabric-Strukturansatz. In bestimmten Ausführungsformen ist das Hinzufügen einiger Steuerdrähte oder Zustandselemente zu einer 64- oder 32-Bit-orientierten CSA-Fabric-Struktur kostengünstiger als das Hinzufügen derselben Steuermechanismen zu einer 4- oder 6-Bit-Fabric-Struktur.
  • 46 stellt eine Beschleuniger-Kachel 4600, umfassend ein Array von Verarbeitungselementen und eine lokale Extraktionssteuerung (4602, 4606), gemäß Ausführungsformen der Offenbarung dar. Jedes PE, jede Netzwerksteuerung und jede Weiche können extrahierbare Fabric-Strukturelemente (EFEs) sein, die z. B. durch Ausführungsformen der CSA-Architektur ausgelegt (z. B. programmiert) werden.
  • Ausführungsformen eines CSA weisen Hardware auf, die eine effiziente, verteilte Extraktion mit niedriger Latenz aus einer heterogenen räumlichen Fabric-Struktur bereitstellt. Dies kann gemäß vier Techniken erreicht werden. Zuerst wird eine Hardwareentität, die lokale Extraktionssteuerung (LEC, Local Extraction Controller) benutzt, wie in 46-48. Eine LEC kann Befehle von einem Host (z. B. einem Prozessorkern) annehmen, z. B. einen Datenstream aus dem räumlichen Array extrahieren, und diese Daten zurück in den virtuellen Speicher zur Überprüfung durch den Host schreiben. Zweitens kann ein Extraktionsdatenpfad enthalten sein, der z. B. so breit wie die ursprüngliche Breite der PE-Struktur ist und der über die PE-Struktur gelegt sein kann. Drittens können neue Steuersignale in der PE-Struktur empfangen werden, die den Extraktionsprozess anleiten. Viertens können Zustandselemente an jedem auslegbaren Endpunkt angeordnet sein (z. B. in einem Register), die den Status benachbarter EFEs verfolgen, so dass jedes EFE ohne zusätzliche Steuersignale seinen Zustand eindeutig exportiert. Diese vier mikroarchitektionischen Merkmale können einem CSA das Extrahieren von Daten aus Ketten der EFEs ermöglichen. Um eine geringe Datenextraktionslatenz zu erhalten, können bestimmte Ausführungsformen das Extraktionsproblem durch Einschließen mehrerer (z. B. vieler) LECs und EFE-Ketten in die Fabric-Struktur partitionieren. Zur Extraktion können diese unabhängig voneinander arbeiten, um die Fabric-Struktur unabhängig zu extrahieren, z. B. um die Latenz drastisch zu reduzieren. Als ein Ergebnis dieser Kombinationen kann ein CSA ein vollständiges Zustandsabbild (z. B. in Hunderten von Nanosekunden) durchführen.
  • 47A-47C stellen eine lokale Extraktionssteuerung 4702, die ein Datenpfadnetzwerk auslegt, gemäß Ausführungsformen der Offenbarung dar. Das dargestellte Netzwerk umfasst mehrere Multiplexer (z. B. Multiplexer 4706, 4708, 4710), die ausgelegt werden können (z. B. über zugehörige Steuersignale), um einen oder mehrere Datenpfade (z. B. von PEs) miteinander zu verbinden. 47A stellt das Netzwerk 4700 (z. B. Fabric-Struktur) dar, das für eine bisherige Operation oder Programm ausgelegt (z. B. eingestellt) wurde. 47B zeigt die lokale Extraktionssteuerung 4702 (die beispielsweise eine Netzwerkschnittstellenschaltung 4704 zum Senden und/oder Empfangen von Signalen aufweist), die ein Extraktionssignal abtastet und alle von der LEC gesteuerten PEs in den Extraktionsmodus eingibt. Das letzte PE in der Extraktionskette (oder ein Extraktionsterminierer) kann die Extraktionskanäle (z. B. Bus) mastern und Daten entweder gemäß (1) Signalen von der LEC oder (2) intern erzeugten Signalen (z. B. von einem PE) senden. Nach Abschluss kann ein PE sein Abschlussflag setzen und z. B. dem nächsten PE das Extrahieren seiner Daten ermöglichen. 47C zeigt, dass das am weitesten entfernte PE den Extraktionsprozess abgeschlossen hat und als Ergebnis sein(e) Extraktionszustandsbit(s) gesetzt hat, die z. B. die Muxe in das benachbarte Netzwerk schwingen, um es dem nächsten PE zu ermöglichen, mit dem Extraktionsprozess zu beginnen. Das extrahierte PE kann seine normale Operation wieder aufnehmen. In einigen Ausführungsformen kann das PE deaktiviert bleiben, bis eine andere Aktion unternommen wird. In diesen Figuren sind die Multiplexernetzwerke Analoga der „Weiche“, die in bestimmten Figuren gezeigt ist (z. B. 21).
  • Die folgenden Abschnitte beschreiben die Operation der verschiedenen Komponenten von Ausführungsformen eines Extraktionsnetzwerks.
  • Lokale Extraktionssteuerung
  • 48 veranschaulicht eine Extraktionssteuerung 4802 gemäß Ausführungsformen der Offenbarung. Eine lokale Extraktionssteuerung (Local Extraction Controller, LEC) kann die Hardwareentität sein, die dafür verantwortlich ist, Extraktionsbefehle zu akzeptieren, den Extraktionsprozess mit den EFEs zu koordinieren und/oder extrahierte Daten z. B. in einem virtuellen Speicher zu speichern. In dieser Eigenschaft kann die LEC ein sequentieller Spezialzweck-Mikrocontroller sein.
  • Die LEC-Operation kann beginnen, wenn sie einen Zeiger auf einen Puffer (z. B. im virtuellen Speicher) empfängt, in den der Fabric-Strukturzustand und optional ein Befehl geschrieben wird, wie stark die Fabric-Struktur extrahiert werden wird. Je nach der LEC-Mikroarchitektur kann dieser Zeiger (z. B. im Zeigerregister 4804 gespeichert) entweder über ein Netzwerk oder über einen Speichersystemzugriff auf die LEC gelangen. Wenn sie einen solchen Zeiger (z. B. Befehl) empfängt, geht die LEC zum Extraktionszustand von dem Teil der Fabric-Struktur, für den sie verantwortlich ist. Die LEC kann diese extrahierten Daten aus der Fabric-Struktur in den Puffer streamen, der durch den externen Aufrufer bereitgestellt wird.
  • Zwei unterschiedliche Mikroarchitekturen für die LEC sind in 46 gezeigt. Die erste platziert die LEC 4602 an der Speicherschnittstelle. In diesem Fall kann die LEC direkte Anfragen an das Speichersystem zum Schreiben von extrahierten Daten stellen. Im zweiten Fall ist die LEC 4606 auf einem Speichernetzwerk angeordnet, in dem sie Anforderungen an den Speicher nur indirekt stellen kann. In beiden Fällen kann die logische Operation der LEC unverändert bleiben. In einer Ausführungsform werden die LECs über den Wunsch informiert, Daten aus der Fabric-Struktur zu extrahieren, beispielsweise durch einen Satz von (z. B. BS-sichtbaren) Steuerstatusregistern, die verwendet werden, um einzelne LECs über neue Befehle zu informieren.
  • Zusätzliche bandexterne Steuerkanäle (z. B. Drähte)
  • In bestimmten Ausführungsformen verlässt sich die Extraktion auf 2 bis 8 zusätzliche bandexterne Signale, um die Auslegungsgeschwindigkeit wie unten definiert zu verbessern. Durch die LEC angesteuerte Signale können als LEC markiert sein. Durch EFE (z. B. PE ) angesteuerte Signale können als EFE markiert sein. Die Auslegungssteuerung 4802 kann, z. B., die folgenden Steuerkanäle umfassen: Steuerkanal LEC_EXTRACT 4906, Steuerkanal LEC_START 4808, Steuerkanal LEC_STROBE 4810 und Steuerkanal EFE_COMPLETE 4812, wobei Beispiele für jeden einzelnen in der nachstehenden Tabelle 4 besprochen werden. TABELLE 4: Extraktionskanäle
    LEC_EXTRACT Optionales Signal, das während des Extraktionsprozesses von der LEC bestätigt wird. Absenken dieses Signals bewirkt, dass der normale Betrieb wiederaufgenommen wird.
    LEC_START Signal zum Kennzeichnen des Beginns der Extraktion; ermöglicht die Einrichtung eines lokalen EFE-Zustands.
    LEC_STROBE Optionales Abtastsignal zum Steuern von extraktionsbezogenen Zustandsmaschinen an EFEs. In einigen Umsetzungen können EFEs dieses Signal intern erzeugen.
    EFE_COMPLETE Optionales Signal, das aufgetastet wird, wenn EFE einen Abbildungszustand abgeschlossen hat. Dies hilft LECs, den Abschluss einzelner EFE-Abbilder zu identifizieren.
  • Im Allgemeinen kann die Behandlung der Extraktion dem Umsetzer eines bestimmten EFE überlassen werden. Zum Beispiel kann ein auswählbares Funktions-EFE eine Vorkehrung zum Abbilden von Registern unter Verwendung eines existierenden Datenpfads aufweisen, während eine festes Funktions-EFE einfach einen Multiplexer aufweisen kann.
  • Aufgrund der langen Drahtverzögerungen beim Programmieren einer großen Menge von EFEs kann das Signal LEC_STROBE als eine Takt-/Latch-Aktivierung für die EFE-Komponenten behandelt werden. Da dieses Signal als ein Takter verwendet wird, beträgt in einer Ausführungsform das Tastverhältnis der Leitung höchstens 50%. Als Ergebnis wird der Extraktionsdurchsatz in etwa halbiert. Optional kann ein zweites Signal LEC STROBE hinzugefügt werden, um eine kontinuierliche Extraktion zu ermöglichen.
  • In einer Ausführungsform wird nur LEC_START strikt an eine unabhängige Kopplung (z. B. Draht) kommuniziert, zum Beispiel können Steuerkanäle über ein existierendes Netzwerk (z. B. Drähte) gelegt werden.
  • Wiederverwendung von Netzwerkressourcen
  • Zum Reduzieren des Datenextraktionsaufwands nutzen bestimmte Ausführungsformen eines CSA die vorhandene Netzwerkinfrastruktur zur Kommunikation von Extraktionsdaten. Eine LEC kann sowohl eine Speicherhierarchie auf Chipebene als auch Kommunikationsnetzwerke auf Fabric-Strukturebene zum Bewegen von Daten von der Fabric-Struktur in den Speicher nutzen. Als Ergebnis trägt die Extraktionsinfrastruktur in bestimmten Ausführungsformen eines CSA nicht mehr als 2% zur gesamten Fabric-Strukturfläche und zur Gesamtleistung bei.
  • Die Wiederverwendung von Netzwerkressourcen in bestimmten Ausführungsformen eines CSA kann ein Netzwerk dazu veranlassen, einige Hardwareunterstützung für ein Extraktionsprotokoll aufzuweisen. Leitungsvermittelte Netzwerke erfordern von bestimmten Ausführungsformen eines CSA, dass eine LEC ihre Multiplexer auf eine spezifische Weise für die Auslegung setzt, wenn das Signal ,LEC_START‘ bestätigt wird. Paketvermittelte Netzwerke erfordern keine Erweiterung, obwohl LEC-Endpunkte (z. B. Extraktionsterminierer) eine spezifische Adresse in dem paketvermittelten Netzwerk verwenden. Die Netzwerkwiederverwendung ist optional, und einige Ausführungsformen finden ggf. eigens vorgesehene Auslegungsbusse angemessener.
  • Per-EFE-Zustand
  • Jedes EFE kann ein Bit halten, das angibt, ob es seinen Zustand exportiert hat oder nicht. Dieses Bit kann deaktiviert werden, wenn das Auslegungsstartsignal angesteuert wird, und dann aktiviert werden, sobald das bestimmte EFE die Extraktion beendet hat. In einem Extraktionsprotokoll sind die EFEs angeordnet, um Ketten mit dem EFE-Extraktionszustandsbit zu bilden, das die Topologie der Kette bestimmt. Ein EFE kann das Extraktionszustandsbit des unmittelbar angrenzenden EFE lesen. Wenn dieses angrenzende EFE sein Extraktionsbit gesetzt hat und das aktuelle EFE dies nicht tut, kann das EFE bestimmen, dass es den Extraktionsbus besitzt. Wenn ein EFE seinen letzten Datenwert abbildet, kann es das Signal ,EFE_DONE‘ ansteuern und sein Extraktionsbit setzen, z. B. indem es vorgelagerten EFEs die Auslegung für die Extraktion ermöglicht. Das an das EFE angrenzende Netzwerk kann dieses Signal beobachten und auch seinen Zustand anpassen, um den Übergang zu bewältigen. Als ein Basisfall für den Extraktionsprozess kann ein Extraktionsterminierer (z. B. Extraktionsterminierer 4604 für LEC 4602 oder Extraktionsterminierer 4608 für LEC 4606 in 37), der bestätigt, dass die Extraktion abgeschlossen ist, am Ende einer Kette enthalten sein.
  • EFE-intern kann dieses Bit zum Ansteuern der flusssteuerungsbereiten Signale verwendet werden. Wenn zum Beispiel das Extraktionsbit deaktiviert wird, können Netzwerksteuersignale automatisch auf einen Wert geklemmt werden, der verhindert, dass Daten fließen, während innerhalb der PEs keine Operationen oder Aktionen geplant werden.
  • Behandeln von Pfaden mit hoher Verzögerung
  • Eine Ausführungsform einer LEC kann ein Signal über eine lange Distanz, z. B. durch viele Multiplexer und mit vielen Ladevorgängen, treiben. Daher kann es für ein Signal schwierig sein, an einem entfernten EFE innerhalb eines kurzen Taktzyklus einzugehen. In bestimmten Ausführungsformen sind die Extraktionssignale in einer bestimmten Division (z. B. einem Bruchteil von) der Haupttaktfrequenz (z. B. CSA), um eine digitale Zeitdisziplin bei der Extraktion sicherzustellen. Die Taktteilung kann in einem bandexternen Signalisierungsprotokoll benutzt werden und erfordert keine Modifikation des Haupttaktbaums.
  • Sicherstellen des konsistenten Fabric-Strukturverhaltens während der Extraktion
  • Da bestimmte Extraktionsschemata verteilt sind und aufgrund von Programm- und Speichereffekten eine nicht-deterministische Zeitsteuerung aufweisen, können verschiedene Elemente der Fabric-Struktur zu unterschiedlichen Zeiten extrahiert werden. Während des Ansteuerns von LEC_EXTRACT können alle Netzwerkflusssignale logisch niedrig angesteuert werden, z. B. durch Einfrieren der Operation eines bestimmten Segments der Fabric-Struktur.
  • Ein Extraktionsprozess kann nicht destruktiv sein. Daher kann eine Menge von PEs als operational betrachtet werden, sobald die Extraktion abgeschlossen wurde. Eine Erweiterung eines Extraktionsprotokolls kann den PEs ermöglichen, nach der Extraktion deaktiviert zu werden. Alternativ wird die beginnende Auslegung während des Extraktionsprozesses in Ausführungsformen einen ähnlichen Effekt haben.
  • Extraktion eines einzelnen PE
  • In einigen Fällen kann es zweckmäßig sein, ein einzelnes PE zu extrahieren. In diesem Fall kann ein optionales Adresssignal als Teil des Beginns des Extraktionsprozesses angesteuert werden. Dies kann dem für die Extraktion angezielten PE ermöglichen, direkt aktiviert zu werden. Sobald dieses PE extrahiert wurde, kann der Extraktionsprozess durch das Absenken des Signals LEC_EXTRACT enden. Auf diese Weise kann gezielt ein einzelnes PE extrahiert werden, z. B. durch die lokale Extraktionssteuerung.
  • Behandeln des Extraktionsgegendrucks
  • In einer Ausführungsform, in der die LEC extrahierte Daten in den Speicher schreibt (z. B. zum Nachverarbeiten z. B. in Software), kann sie Gegenstand einer begrenzten Speicherbandbreite sein. In dem Fall, dass die LEC ihre Pufferkapazität erschöpft oder erwartet, ihre Pufferkapazität zu erschöpfen, kann sie das Abtasten des LEC_STROBE-Signals anhalten, bis das Pufferproblem gelöst ist.
  • Es sei zu beachten, dass in bestimmten Figuren (z. B. 37, 40, 41, 43, 44 und 46) Kommunikationen schematisch dargestellt sind. In bestimmten Ausführungsformen entstehen diese Kommunikationen über das (z. B. Verbindungs-)Netzwerk.
  • Flussdiagramme
  • 49 stellt ein Flussdiagramm 4900 gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 4900 umfasst Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl 4902; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation 4904; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten 4906; Legen des Datenflussgraphen über ein Array von Verarbeitungselemente des Prozessors, wobei jeder Knoten als ein Datenflussoperator in dem Array von Verarbeitungselementen 4908 dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Array von Verarbeitungselementen, wenn eine eingehende Operandenmenge am Array von Verarbeitungselementen 4910 eingeht.
  • 50 stellt ein Flussdiagramm 5000 gemäß Ausführungsformen der Offenbarung dar. Der dargestellte Fluss 5000 umfasst Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl 5002; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation 5004; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten 5006; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente des Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen 5008 dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen 5010 eingeht.
  • KURZDARSTELLUNG
  • Supercomputing auf der ExaFLOP-Skala kann eine Herausforderung im Hochleistungsrechnen sein, eine Herausforderung, die von konventionellen von-Neumann-Architekturen wahrscheinlich nicht erfüllt wird. Zum Erreichen von ExaFLOPs stellen Ausführungsformen eines CSA ein heterogenes räumliches Array bereit, das auf die direkte Ausführung von (z. B. vom Kompilierer erzeugten) Datenflussgraphen abzielt. Zusätzlich zu dem Auslegen der Architekturprinzipien von Ausführungsformen eines CSA beschreibt und bewertet das Vorstehende auch Ausführungsformen eines CSA, das eine Leistung und Energie von mehr als dem 10-fachen gegenüber existierenden Produkten zeigte. Kompilierererzeugter Code kann bedeutende Leistungs- und Energiezugewinne gegenüber Roadmap-Architekturen haben. Als eine heterogene, parametrische Architektur können Ausführungsformen eines CSA leicht an alle Computeranwendungen angepasst werden. Zum Beispiel könnte eine mobile Version von CSA auf 32 Bits abgestimmt sein, während ein auf maschinelles Lernen fokussiertes Array eine signifikante Anzahl von vektorisierten 8-Bit-Multiplikationseinheiten aufweisen könnte. Die Hauptvorteile von Ausführungsformen eines CSA sind eine hohe Leistung und eine extreme Energieeffizienz, Eigenschaften, die für alle Formen des Rechnens von Supercomputing und Rechenzentrum bis zum Internet der Dinge relevant sind.
  • In einer Ausführungsform umfasst ein Prozessor mehrere Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph dazu dient, über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente gelegt zu werden, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist, und wobei die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht; und eine Auslegungssteuerung, gekoppelt mit einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, wobei die erste Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die Auslegungssteuerung dazu dient, das Verbindungsnetzwerk zwischen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu ermöglichen, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu ermöglichen, wenn ein Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Das Verbindungsnetzwerk kann ein Bevorzugungszustandsregister an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfassen, um eine Schaltung an der Grenze ein- und auszuschalten, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit im Bevorzugungszustandsregister durch die Auslegungssteuerung auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister durch die Auslegungssteuerung auf einen zweiten Wert gesetzt ist. Ein erster Kontext kann auf der ersten Teilmenge der mehreren Verarbeitungselemente ausgeführt werden, und ein zweiter Kontext kann gleichzeitig auf der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente ausgeführt werden, ohne Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Die Auslegungssteuerung kann Kommunikation auf einem Vorwärtsdatenpfad oder einem Rückwärtsfluss-Flusssteuerungspfad, der mit dem Vorwärtsdatenpfad gepaart ist, des Verbindungsnetzwerks zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Die Auslegungssteuerung kann das Verbindungsnetzwerk veranlassen, alle Signale an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auf Null zu ziehen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Die Auslegungssteuerung kann mit der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt sein, wobei die erste Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist und wobei die dritte, unterschiedliche Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die Auslegungssteuerung das Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auslegen kann, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Die Auslegungssteuerung kann die erste Teilmenge und die zweite, unterschiedliche Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen auslegen, und, für einen angeforderten Kontextwechsel, die erste Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen auslegen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Datenfluss des zweiten Kontexts in die Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente von der Ausgabe der ersten Teilmenge der mehreren Verarbeitungselemente blocken, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente abgeschlossen sind, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Die Auslegungssteuerung kann das Bevorzugungsbit während der Laufzeit der Operation modifizieren.
  • In einer anderen Ausführungsform umfasst ein Verfahren Durchführen einer Operation eines Datenflussgraphen mit einem Verbindungsnetzwerk und mehreren Verarbeitungselementen eines Prozessors, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht, wobei der Prozessor die mehreren Verarbeitungselemente und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen umfasst, und hat einen Datenflussgraphen, umfassend mehrere Knoten, der über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt ist, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist; und Auslegen, mit einer Auslegungssteuerung des Prozessors, des Verbindungsnetzwerks zwischen einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Das Auslegen kann umfassen, dass die Auslegungssteuerung ein Bevorzugungsbit in einem Bevorzugungszustandsregister an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente aktualisiert, um eine Schaltung an der Grenze ein- und auszuschalten, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen zweiten Wert gesetzt ist. Das Verfahren kann Ausführen eines ersten Kontexts auf der ersten Teilmenge der mehreren Verarbeitungselemente und gleichzeitiges Ausführen eines zweiten Kontexts auf der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfassen, ohne Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Das Auslegen kann ferner Verhindern von Kommunikation auf einem Vorwärtsdatenpfad oder einem Rückwärtsfluss-Flusssteuerungspfad, der mit dem Vorwärtsdatenpfad gepaart ist, des Verbindungsnetzwerks zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfassen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Das Auslegen kann ferner umfassen, das Verbindungsnetzwerk zu veranlassen, alle Signale an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auf Null zu ziehen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Das Auslegen kann ferner umfassen, das Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu ermöglichen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu ermöglichen, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Das Verfahren kann ferner umfassen: Auslegen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen, und, für einen angeforderten Kontextwechsel, Auslegen der ersten Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente von der Ausgabe der ersten Teilmenge der mehreren Verarbeitungselemente, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente abgeschlossen sind, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist. Das Verfahren kann umfassen, dass die Auslegungssteuerung das Bevorzugungsbit während der Laufzeit der Operation modifiziert.
  • In noch einer anderen Ausführungsform speichert ein nicht-flüchtiges maschinenlesbares Medium Code, der wenn durch eine Maschine ausgeführt, die Maschine veranlasst, eine Operation eines Datenflussgraphen mit einem Verbindungsnetzwerk und mehreren Verarbeitungselementen eines Prozessors durchzuführen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht, wobei der Prozessor die mehreren Verarbeitungselemente und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen umfasst, und hat einen Datenflussgraphen, umfassend mehrere Knoten, der über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt ist, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist; und Auslegen, mit einer Auslegungssteuerung des Prozessors, des Verbindungsnetzwerks zwischen einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Das Auslegen kann umfassen, dass die Auslegungssteuerung ein Bevorzugungsbit in einem Bevorzugungszustandsregister an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente aktualisiert, um eine Schaltung an der Grenze ein- und auszuschalten, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen zweiten Wert gesetzt ist. Das Verfahren kann Ausführen eines ersten Kontexts auf der ersten Teilmenge der mehreren Verarbeitungselemente und gleichzeitiges Ausführen eines zweiten Kontexts auf der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfassen, ohne Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Das Auslegen kann ferner Verhindern von Kommunikation auf einem Vorwärtsdatenpfad oder einem Rückwärtsfluss-Flusssteuerungspfad, der mit dem Vorwärtsdatenpfad gepaart ist, des Verbindungsnetzwerks zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfassen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Das Auslegen kann ferner umfassen, das Verbindungsnetzwerk zu veranlassen, alle Signale an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auf Null zu ziehen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist. Das Auslegen kann ferner umfassen, das Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu ermöglichen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu ermöglichen, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Das Verfahren kann ferner umfassen: Auslegen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen, und, für einen angeforderten Kontextwechsel, Auslegen der ersten Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente von der Ausgabe der ersten Teilmenge der mehreren Verarbeitungselemente, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente abgeschlossen sind, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist. Das Verfahren kann umfassen, dass die Auslegungssteuerung das Bevorzugungsbit während der Laufzeit der Operation modifiziert.
  • In einer anderen Ausführungsform umfasst ein Prozessor mehrere Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph dazu dient, über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente gelegt zu werden, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist, und wobei die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht; und Mittel, gekoppelt mit einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, wobei die erste Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die Mittel dazu dienen, das Verbindungsnetzwerk zwischen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu ermöglichen, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu ermöglichen, wenn ein Bevorzugungsbit auf einen zweiten Wert gesetzt ist.
  • In einer Ausführungsform umfasst ein Prozessor mehrere Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen eingeht; und eine Auslegungssteuerung, gekoppelt mit einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, wobei die erste Teilmenge eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge gekoppelt ist, wobei die Auslegungssteuerung dazu dient, die erste Teilmenge und die zweite, unterschiedliche Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen auszulegen, und, bei einem angeforderten Kontextwechsel, die erste Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen auszulegen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind (z. B. bis zu dem Punkt, an dem ein Gegendrucksignal gefunden wird und/oder alle Eingabedaten verbraucht sind) (oder nicht abgeschlossen sind, z. B. Operationen werden an einem Anhaltepunkt angehalten, wo Zustand extahiert werden kann) und den Datenfluss des zweiten Kontexts in die Eingabe der zweiten, unterschiedlichen Teilmenge von der Ausgabe der ersten Teilmenge zu blockieren, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind (z. B. bis zu dem Punkt, an dem ein Gegendrucksignal gefunden wird und/oder alle Eingabedaten verbraucht sind). Der Prozessor kann eine erste lokale Auslegungssteuerung der ersten Teilmenge und eine zweite lokale Auslegungssteuerung der zweiten, unterschiedlichen Teilmenge umfassen, wobei die Auslegungssteuerung dazu dient, entsprechende Auslegungsinformationen an die erste lokale Auslegungssteuerung und die zweite lokale Auslegungssteuerung zu senden. Ausstehende Operationen können Operationen sein, die abgeschlossen werden (z. B. müssen), um in einem (z. B. vollständig) speicherbaren Zustand anzukommen, siehe beispielsweise die Erörterung der 6A-6B weiter oben. Auslegungsinformationen können irgendwo gespeichert und dann eingelesen werden, während Extraktionsinformationen irgendwo in einen beliebigen Speicher geschrieben werden können, beispielsweise in virtuellen Speicher (z. B. über eine RAF-Schaltung). Die Auslegungssteuerung kann eine Extraktionssteuerung umfassen, um zu bewirken, dass Zustandsdaten von der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente im Speicher gespeichert werden, und die Extraktionssteuerung dient dazu, für den angeforderten Kontextwechsel, erste Zustandsdaten aus der ersten Teilmenge zu extrahieren, nachdem die ausstehenden Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind. Die mehreren Verarbeitungselemente können eine dritte, unterschiedliche Teilmenge der mehreren Verarbeitungselemente zwischen der Ausgabe der ersten Teilmenge und der Eingabe der zweiten, unterschiedlichen Teilmenge umfassen, und die Auslegungssteuerung dient dazu, für den angeforderten Kontextwechsel, die dritte, unterschiedliche Teilmenge der mehreren Verarbeitungselemente in einem nicht ausgelegten Zustand zu halten, um Datenfluss des zweiten Kontexts von der Ausgabe der ersten Teilmenge zur Eingabe der zweiten, unterschiedlichen Teilmenge zu blockieren, bis die ausstehenden Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Die Auslegungssteuerung kann bewirken, dass ein Gegendrucksignal der dritten, unterschiedlichen Teilmenge für den nicht ausgelegten Zustand an die erste Teilmenge der mehreren Verarbeitungselemente ausgegeben wird. Die Auslegungssteuerung kann (z. B. Auftreten von) Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge gleichzeitig mit Operationen des zweiten Kontexts in der ersten Teilmenge ermöglichen.
  • In einer anderen Ausführungsform umfasst ein Verfahren Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente eines Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist; Durchführen einer Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht; Auslegen, mit einer Auslegungssteuerung des Prozessors, einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen; und Auslegen, für einen angeforderten Kontextwechsel mit der Auslegungssteuerung des Prozessors, der ersten Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge von einer Ausgabe der ersten Teilmenge, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Das Verfahren kann umfassen, dass die Auslegungssteuerung entsprechende Auslegungsinformationen an jede aus einer ersten lokalen Auslegungssteuerung der ersten Teilmenge und einer zweiten lokalen Auslegungssteuerung der zweiten, unterschiedlichen Teilmenge sendet. Das Verfahren kann, für den angeforderten Kontextwechsel, Extrahieren von ersten Zustandsdaten aus der ersten Teilmenge umfassen, nachdem die ausstehenden Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind. Das Verfahren kann, für den angeforderten Kontextwechsel mit der Auslegungssteuerung, Halten einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zwischen der Ausgabe der ersten Teilmenge und der Eingabe der zweiten, unterschiedlichen Teilmenge in einem nicht ausgelegten Zustand umfassen, um Datenfluss des zweiten Kontexts von der Ausgabe der ersten Teilmenge in die Eingabe der zweiten, unterschiedlichen Teilmenge zu blockieren, bis die ausstehenden Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Das Halten kann umfassen zu bewirken, dass ein Gegendrucksignal der dritten, unterschiedlichen Teilmenge für den nicht ausgelegten Zustand an die erste Teilmenge der mehreren Verarbeitungselemente ausgegeben wird. Das Verfahren kann umfassen, mit der Auslegungssteuerung, (z. B. Auftreten von) Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge gleichzeitig mit Operationen des zweiten Kontexts in der ersten Teilmenge zu ermöglichen.
  • In noch einer anderen Ausführungsform umfasst ein Prozessor mehrere Verarbeitungselemente; Verbindungsmittel zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über die Verbindungsmittel und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den Verbindungsmitteln und den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen eingeht; und Mittel, gekoppelt mit einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, wobei die erste Teilmenge eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge gekoppelt ist, wobei die Mittel dazu dienen, die erste Teilmenge und die zweite, unterschiedliche Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen auszulegen, und, bei einem angeforderten Kontextwechsel, die erste Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen auszulegen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und den Datenfluss des zweiten Kontexts in die Eingabe der zweiten, unterschiedlichen Teilmenge von der Ausgabe der ersten Teilmenge zu blockieren, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind.
  • In einer anderen Ausführungsform umfasst ein Prozessor mehrere Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen eingeht; und eine erste Auslegungssteuerung, gekoppelt mit einer ersten Teilmenge der mehreren Verarbeitungselemente, und einer zweiten Auslegungssteuerung, gekoppelt mit einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, und wobei die erste Teilmenge eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge gekoppelt ist, wobei die erste Auslegungssteuerung und die zweite Auslegungssteuerung dazu dienen, die erste Teilmenge und die zweite, unterschiedliche Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen auszulegen, und wobei, bei einem angeforderten Kontextwechsel, die erste Auslegungssteuerung dazu dient, die erste Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen auszulegen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und den Datenfluss des zweiten Kontexts in die Eingabe der zweiten, unterschiedlichen Teilmenge von der Ausgabe der ersten Teilmenge zu blockieren, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Der Prozessor kann eine Auslegungssteuerung auf höherer Ebene umfassen, gekoppelt mit der ersten Auslegungssteuerung und der zweiten Auslegungssteuerung, wobei die Auslegungssteuerung auf höherer Ebene dazu dient, entsprechende Auslegungsinformationen an die erste Auslegungssteuerung und die zweite Auslegungssteuerung zu senden. Die erste Auslegungssteuerung kann eine Extraktionssteuerung umfassen, um zu bewirken, dass Zustandsdaten von der ersten Teilmenge der mehreren Verarbeitungselemente im Speicher gespeichert werden, und die Extraktionssteuerung dient dazu, für den angeforderten Kontextwechsel, erste Zustandsdaten aus der ersten Teilmenge zu extrahieren, nachdem die ausstehenden Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind. Die mehreren Verarbeitungselemente können eine dritte, unterschiedliche Teilmenge der mehreren Verarbeitungselemente zwischen der Ausgabe der ersten Teilmenge und der Eingabe der zweiten, unterschiedlichen Teilmenge umfassen, und eine dritte Auslegungssteuerung ist mit der dritten, unterschiedlichen Teilmenge gekoppelt, um, für den angeforderten Kontextwechsel, die dritte, unterschiedliche Teilmenge der mehreren Verarbeitungselemente in einem nicht ausgelegten Zustand zu halten, um Datenfluss des zweiten Kontexts von der Ausgabe der ersten Teilmenge zur Eingabe der zweiten, unterschiedlichen Teilmenge zu blockieren, bis die ausstehenden Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Die dritte Auslegungssteuerung kann bewirken, dass ein Gegendrucksignal der dritten, unterschiedlichen Teilmenge für den nicht ausgelegten Zustand an die erste Teilmenge der mehreren Verarbeitungselemente ausgegeben wird. Die erste Auslegungssteuerung und die zweite Auslegungssteuerung können (z. B. Auftreten von) Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge gleichzeitig mit Operationen des zweiten Kontexts in der ersten Teilmenge ermöglichen.
  • In noch einer anderen Ausführungsform umfasst ein Verfahren Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente eines Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist; Durchführen einer Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht; Auslegen, mit einer ersten Auslegungssteuerung und einer zweiten Auslegungssteuerung des Prozessors, einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gemäß entsprechenden Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen; und Auslegen, für einen angeforderten Kontextwechsel mit der ersten Auslegungssteuerung des Prozessors, der ersten Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge von einer Ausgabe der ersten Teilmenge, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Das Verfahren kann umfassen, mit einer Auslegungssteuerung auf höherer Ebene des Prozessors, die entsprechenden Auslegungsinformationen an jede aus der ersten Auslegungssteuerung der ersten Teilmenge und der zweiten Auslegungssteuerung der zweiten, unterschiedlichen Teilmenge zu senden. Das Verfahren kann, für den angeforderten Kontextwechsel, Extrahieren von ersten Zustandsdaten aus der ersten Teilmenge umfassen, nachdem die ausstehenden Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind. Das Verfahren kann, für den angeforderten Kontextwechsel, Halten einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zwischen der Ausgabe der ersten Teilmenge und der Eingabe der zweiten, unterschiedlichen Teilmenge in einem nicht ausgelegten Zustand umfassen, wobei eine dritte Auslegungssteuerung der dritten, unterschiedlichen Teilmenge dazu dient, Datenfluss des zweiten Kontexts von der Ausgabe der ersten Teilmenge in die Eingabe der zweiten, unterschiedlichen Teilmenge zu blockieren, bis die ausstehenden Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind. Das Halten kann umfassen zu bewirken, dass ein Gegendrucksignal der dritten, unterschiedlichen Teilmenge für den nicht ausgelegten Zustand an die erste Teilmenge der mehreren Verarbeitungselemente ausgegeben wird. Das Verfahren kann umfassen, mit der ersten Auslegungssteuerung und der zweiten Auslegungssteuerung, (z. B. Auftreten von) Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge gleichzeitig mit Operationen des zweiten Kontexts in der ersten Teilmenge zu ermöglichen.
  • In noch einer anderen Ausführungsform umfasst ein Prozessor mehrere Verarbeitungselemente; Verbindungsmittel zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über Verbindungsmittel und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den Verbindungsmitteln und den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen eingeht; und erste Mittel, gekoppelt mit einer ersten Teilmenge der mehreren Verarbeitungselemente, und zweite Mittel, gekoppelt mit einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, und wobei die erste Teilmenge eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge gekoppelt ist, wobei die ersten Mittel und die zweiten Mittel dazu dienen, die erste Teilmenge und die zweite, unterschiedliche Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen auszulegen, und wobei, bei einem angeforderten Kontextwechsel, die ersten Mittel dazu dienen, die erste Teilmenge der mehreren Verarbeitungselemente gemäß Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen auszulegen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und den Datenfluss des zweiten Kontexts in die Eingabe der zweiten, unterschiedlichen Teilmenge von der Ausgabe der ersten Teilmenge zu blockieren, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge abgeschlossen sind.
  • In einer Ausführungsform umfasst ein Prozessor einen Kern mit einem Decodierer zum Decodieren eines Befehls in einem decodierten Befehl und eine Ausführungseinheit zum Ausführen des decodierten Befehls zum Durchführen einer ersten Operation; mehrere Verarbeitungselemente; und ein Zwischenverbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen repräsentiert ist, und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durchzuführen, wenn eine entsprechende eingehende Operandenmenge bei jedem der Datenflussoperatoren der mehreren Verarbeitungselemente eingeht. Ein Verarbeitungselement der mehreren Verarbeitungselemente kann die Ausführung anhalten, wenn ein Gegendrucksignal von einem nachgelagerten Verarbeitungselement anzeigt, dass kein Speicher in dem nachgelagerten Verarbeitungselement für eine Ausgabe des Verarbeitungselements verfügbar ist. Der Prozessor kann ein Flusssteuerungspfadnetzwerk zum Übertragen des Gegendrucksignals gemäß dem Datenflussgraphen aufweisen. Ein Datenfluss-Token kann bewirken, dass eine Ausgabe von einem Datenflussoperator, der das Datenfluss-Token empfängt, zu einem Eingabepuffer eines bestimmten Verarbeitungselements der mehreren Verarbeitungselemente gesendet wird. Die zweite Operation kann einen Speicherzugriff umfassen, und die mehreren Verarbeitungselemente umfassen einen Speicherzugriffs-Datenflussoperator, der den Speicherzugriff nicht durchzuführen hat, bis er ein Speicherabhängigkeits-Token von einem logisch vorherigen Datenflussoperator empfängt. Die mehreren Verarbeitungselemente können einen ersten Typ von Verarbeitungselement und einen zweiten, unterschiedlichen Typ von Verarbeitungselement aufweisen.
  • In einer anderen Ausführungsform umfasst ein Verfahren Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente des Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen durch eine entsprechende, eingehende Operandenmenge, die an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente eingeht. Ein Verfahren kann das Anhalten der Ausführung durch ein Verarbeitungselement der mehreren Verarbeitungselemente umfassen, wenn ein Gegendrucksignal von einem nachgelagerten Verarbeitungselement anzeigt, dass kein Speicher in dem nachgelagerten Verarbeitungselement für eine Ausgabe des Verarbeitungselements verfügbar ist. Das Verfahren kann Senden des Gegendrucksignals auf einem Flusssteuerungspfadnetzwerk gemäß dem Datenflussgraphen umfassen. Ein Datenfluss-Token kann bewirken, dass eine Ausgabe von einem Datenflussoperator, der das Datenfluss-Token empfängt, zu einem Eingabepuffer eines bestimmten Verarbeitungselements der mehreren Verarbeitungselemente gesendet wird. Das Verfahren kann umfassen, dass kein Speicherzugriff ausgeführt wird, bis ein Speicherabhängigkeits-Token von einem logisch vorherigen Datenflussoperator empfangen wird, wobei die zweite Operation den Speicherzugriff umfasst und die mehreren Verarbeitungselemente einen Speicherzugriffs-Datenflussoperator umfassen. Das Verfahren kann das Bereitstellen eines ersten Typs von Verarbeitungselement und eines zweiten, unterschiedlichen Typs von Verarbeitungselementen beinhalten.
  • In noch einer anderen Ausführungsform umfasst eine Einrichtung ein Datenpfadnetzwerk zwischen mehreren Verarbeitungselementen; und ein Flusssteuerpfadnetzwerk zwischen den mehreren Verarbeitungselementen, wobei das Datenpfadnetzwerk und das Flusssteuerpfadnetzwerk dazu dienen, eine Eingabe eines Datenflussgraphen zu empfangen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Datenpfadnetzwerk, das Flusssteuerpfadnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist, und wobei die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine entsprechende eingehende Operandenmenge an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente eingeht. Das Flusssteuerungspfadnetzwerk kann Gegendrucksignale zu mehreren Datenflussoperatoren gemäß dem Datenflussgraphen tragen. Ein Datenfluss-Token, das auf dem Datenpfadnetzwerk zu einem Datenflussoperator gesendet wurde, kann bewirken, dass eine Ausgabe von dem Datenflussoperator an einen Eingabepuffer eines bestimmten Verarbeitungselements der mehreren Verarbeitungselemente auf dem Datenpfadnetzwerk gesendet wird. Das Datenpfadnetzwerk kann ein statisches leitungsvermitteltes Netzwerk sein, um die jeweiligen Eingabeoperandenmenge gemäß dem Datenflussgraphen zu jedem der Datenflussoperatoren zu tragen. Das Flusssteuerungspfadnetzwerk kann ein Gegendrucksignal gemäß dem Datenflussgraphen von einem nachgelagerten Verarbeitungselement übertragen, um anzuzeigen, dass kein Speicher in dem nachgelagerten Verarbeitungselement für eine Ausgabe des Verarbeitungselements verfügbar ist. Mindestens ein Datenpfad des Datenpfadnetzwerks und mindestens ein Flusssteuerungspfad des Flussteuerungspfadnetzwerks können eine kanalisierte Schaltung mit Gegendrucksteuerung bilden. Das Flusssteuerungspfadnetzwerk kann mindestens zwei der mehreren Verarbeitungselemente fließbandverarbeiten.
  • In einer anderen Ausführungsform umfasst ein Verfahren Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; und Legen des Datenflussgraphen über mehrere Verarbeitungselemente eines Prozessors, ein Datenpfadnetzwerk zwischen den mehreren Verarbeitungselementen und ein Flusssteuerungspfadnetzwerk zwischen den mehreren Verarbeitungselementen, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist. Das Verfahren kann das Tragen des Gegendrucksignals mit dem Flusssteuerungspfadnetzwerk zu mehreren Datenflussoperatoren gemäß dem Datenflussgraphen beinhalten. Das Verfahren kann das Senden eines Datenfluss-Token auf dem Datenpfadnetzwerk beinhalten, um zu bewirken, dass eine Ausgabe von dem Datenflussoperator an einen Eingabepuffer eines bestimmten Verarbeitungselements der mehreren Verarbeitungselemente auf dem Datenpfadnetzwerk gesendet wird. Das Verfahren kann das Einstellen mehrerer Weichen des Datenpfadnetzwerks und/oder mehrerer Weichen des Flusssteuerpfadnetzwerks zum Tragen der jeweiligen Eingabeoperandenmenge zu jedem der Datenflussoperatoren gemäß dem Datenflussgraphen umfassen, wobei das Datenpfadnetzwerk ein statisches leitungsvermitteltes Netzwerk ist. Das Verfahren kann das Übertragen eines Gegendrucksignals mit dem Flusssteuerungspfadnetzwerk gemäß dem Datenflussgraphen von einem nachgelagerten Verarbeitungselement umfassen, um anzuzeigen, dass kein Speicher in dem nachgelagerten Verarbeitungselement für eine Ausgabe des Verarbeitungselements verfügbar ist. Das Verfahren kann das Bilden einer kanalisierten Schaltung mit Gegendrucksteuerung mit mindestens einem Datenpfad des Datenpfadnetzwerks und mindestens einem Flusssteuerungspfad des Flussteuerungspfadnetzwerks umfassen.
  • In noch einer anderen Ausführungsform umfasst ein Prozessor einen Kern mit einem Decodierer zum Decodieren eines Befehls in einem decodierten Befehl und eine Ausführungseinheit zum Ausführen des decodierten Befehls zum Durchführen einer ersten Operation; mehrere Verarbeitungselemente; und Netzwerkmittel zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über die Netzwerkmittel und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durchzuführen, wenn eine entsprechende eingehende Operandenmenge bei jedem der Datenflussoperatoren der mehreren Verarbeitungselemente eingeht.
  • In einer anderen Ausführungsform umfasst eine Einrichtung Datenpfadmittel zwischen mehreren Verarbeitungselementen; und Flusssteuerpfadmittel zwischen den mehreren Verarbeitungselementen, wobei die Datenpfadmittel und die Flusssteuerpfadmittel dazu dienen, eine Eingabe eines Datenflussgraphen zu empfangen, umfassend mehrere Knoten, wobei der Datenflussgraph über die Datenpfadmittel, die Flusssteuerpfadmittel und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist, und wobei die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn eine entsprechende eingehende Operandenmenge an jedem der Datenflussoperatoren der mehreren Verarbeitungselemente eingeht.
  • In einer Ausführungsform umfasst ein Prozessor einen Kern mit einem Decodierer zum Decodieren eines Befehls in einem decodierten Befehl und eine Ausführungseinheit zum Ausführen des decodierten Befehls zum Durchführen einer ersten Operation; und ein Array von Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Array von Verarbeitungselemente zu legen ist, 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 eine entsprechende eingehende Operandenmenge bei dem Array von Verarbeitungselementen eingeht. Das Array von Verarbeitungselementen darf die Operation nicht durchführen, bis die eingehende Operandenmenge an dem Array von Verarbeitungselementen eingeht und der Speicher in dem Array von Verarbeitungselementen zur Ausgabe der zweiten Operation verfügbar ist. Das Array von Verarbeitungselementen kann ein Netzwerk (oder einen oder mehrere Kanäle) umfassen, um die Datenfluss-Token und Steuertoken zu mehreren Datenflussoperatoren zu tragen. Die zweite Operation kann einen Speicherzugriff umfassen, und das Array von Verarbeitungselementen kann einen Speicherzugriffs-Datenflussoperator umfassen, der den Speicherzugriff nicht durchzuführen hat, bis er ein Speicherabhängigkeits-Token von einem logisch vorherigen Datenflussoperator empfängt. Jedes Verarbeitungselement kann nur eine oder zwei Operationen des Datenflussgraphen durchführen.
  • In einer anderen Ausführungsform umfasst ein Verfahren Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über ein Array von Verarbeitungselemente des Prozessors, wobei jeder Knoten als ein Datenflussoperator in dem Array von Verarbeitungselementen dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Array von Verarbeitungselementen, wenn eine eingehende Operandenmenge am Array von Verarbeitungselementen eingeht. Das Array von Verarbeitungselementen darf die Operation nicht durchführen, bis die eingehende Operandenmenge an dem Array von Verarbeitungselementen eingeht und der Speicher in dem Array von Verarbeitungselementen zur Ausgabe der zweiten Operation verfügbar ist. Das Array von Verarbeitungselementen kann ein Netzwerk umfassen, das die Datenfluss-Token und Steuertoken zu mehreren Datenflussoperatoren trägt. Die zweite Operation kann einen Speicherzugriff umfassen, und das Array von Verarbeitungselementen umfasst einen Speicherzugriffs-Datenflussoperator, der den Speicherzugriff nicht durchzuführen hat, bis er ein Speicherabhängigkeits-Token von einem logisch vorherigen Datenflussoperator empfängt. Jedes Verarbeitungselement kann nur eine oder zwei Operationen des Datenflussgraphen durchführen.
  • In noch einer anderen Ausführungsform speichert ein nicht-flüchtiges maschinenlesbares Medium Code, der, wenn durch eine Maschine ausgeführt, die Maschine veranlasst, ein Verfahren durchzuführen, umfassend Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über ein Array von Verarbeitungselemente des Prozessors, wobei jeder Knoten als ein Datenflussoperator in dem Array von Verarbeitungselementen dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Array von Verarbeitungselementen, wenn eine eingehende Operandenmenge am Array von Verarbeitungselementen eingeht. Das Array von Verarbeitungselementen darf die Operation nicht durchführen, bis die eingehende Operandenmenge an dem Array von Verarbeitungselementen eingeht und der Speicher in dem Array von Verarbeitungselementen zur Ausgabe der zweiten Operation verfügbar ist. Das Array von Verarbeitungselementen kann ein Netzwerk umfassen, das die Datenfluss-Token und Steuertoken zu mehreren Datenflussoperatoren trägt. Die zweite Operation kann einen Speicherzugriff umfassen, und das Array von Verarbeitungselementen umfasst einen Speicherzugriffs-Datenflussoperator, der den Speicherzugriff nicht durchzuführen hat, bis er ein Speicherabhängigkeits-Token von einem logisch vorherigen Datenflussoperator empfängt. Jedes Verarbeitungselement kann nur eine oder zwei Operationen des Datenflussgraphen durchführen.
  • In einer anderen Ausführungsform umfasst ein Prozessor einen Kern mit einem Decodierer zum Decodieren eines Befehls in einem decodierten Befehl und eine Ausführungseinheit zum Ausführen des decodierten Befehls zum Durchführen einer ersten Operation; und Mittel zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über die Mittel zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den Mitteln dargestellt ist, und die Mittel dazu dienen, eine zweite Operation durchzuführen, wenn eine entsprechende eingehende Operandenmenge bei den Mitteln eingeht.
  • In einer Ausführungsform umfasst ein Prozessor einen Kern mit einem Decodierer zum Decodieren eines Befehls in einem decodierten Befehl und eine Ausführungseinheit zum Ausführen des decodierten Befehls zum Durchführen einer ersten Operation; mehrere Verarbeitungselemente; und ein Zwischenverbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen repräsentiert ist, und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durchzuführen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen eingeht. Der Prozessor kann ferner mehrere Auslegungssteuerungen umfassen, wobei jede Auslegungssteuerung mit einer jeweiligen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist und jede Auslegungssteuerung dazu dient, Auslegungsinformation aus dem Speicher zu laden und eine Kopplung der jeweiligen Teilmenge der mehreren Verarbeitungselemente gemäß den Auslegungsinformationen zu veranlassen. Der Prozessor kann mehrere Auslegungs-Caches umfassen, und jede Auslegungssteuerung ist mit einem jeweiligen Auslegungs-Cache gekoppelt, um die Auslegungsinformation für die jeweilige Teilmenge der mehreren Verarbeitungselemente abzurufen. Die erste Operation, die durch die Ausführungseinheit durchgeführt wird, kann Auslegungsinformationen in jeden der mehreren Auslegungs-Caches abrufen. Jede der mehreren Auslegungssteuerungen kann eine Neuauslegungsschaltung umfassen, um bei Empfang einer Auslegungsfehlermeldung von dem mindestens einen Verarbeitungselement eine Neuauslegung für mindestens ein Verarbeitungselement der jeweiligen Teilmenge von Verarbeitungselementen zu veranlassen. Jede der mehreren Auslegungssteuerungen kann eine Neuauslegungsschaltung umfassen, um bei Empfang einer Neuauslegungsanforderungsnachricht eine Neuauslegung der jeweiligen Teilmenge der mehreren Verarbeitungselemente zu veranlassen und die Kommunikation mit der jeweiligen Teilmenge der mehreren Verarbeitungselemente zu deaktivieren, bis die Neuauslegung abgeschlossen ist. Der Prozessor kann mehrere Ausnahmeaggregatoren umfassen, und jeder Ausnahmeaggregator ist mit einer jeweiligen Teilmenge der mehreren Verarbeitungselemente gekoppelt, um Ausnahmen von der jeweiligen Teilmenge der mehreren Verarbeitungselemente zu sammeln und die Ausnahmen an den Kern zum Bedienen weiterzuleiten. Der Prozessor kann mehrere Extraktionssteuerungen aufweisen, wobei jede Extraktionssteuerung mit einer jeweiligen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist und jede Extraktionssteuerung dazu dient, zu veranlassen, dass Zustandsdaten aus der jeweiligen Teilmenge der mehreren Verarbeitungselemente in dem Speicher gespeichert werden.
  • In einer anderen Ausführungsform umfasst ein Verfahren Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente des Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht. Das Verfahren kann Laden von Auslegungsinformationen aus dem Speicher für jeweilige Teilmengen der mehreren Verarbeitungselemente und das Veranlassen der Kopplung für jede jeweilige Teilmenge der mehreren Verarbeitungselemente gemäß den Auslegungsinformationen umfassen. Das Verfahren kann Abrufen der Auslegungsinformation für die jeweilige Teilmenge der mehreren Verarbeitungselemente von einem jeweiligen Auslegungs-Cache mehrerer Auslegungs-Caches umfassen. Die erste Operation, die durch die Ausführungseinheit durchgeführt wird, kann das Abrufen von Auslegungsinformationen in jeden der mehreren Auslegungs-Caches sein. Das Verfahren kann bei Empfang einer Auslegungsfehlermeldung von dem mindestens einen Verarbeitungselement das Veranlassen einer Neuauslegung für mindestens ein Verarbeitungselement der jeweiligen Teilmenge von Verarbeitungselementen umfassen. Das Verfahren kann bei Empfang einer Neuauslegungsanforderungsnachricht das Veranlassen einer Neuauslegung der jeweiligen Teilmenge der mehreren Verarbeitungselemente und das Deaktivieren der Kommunikation mit der jeweiligen Teilmenge der mehreren Verarbeitungselemente bis Abschluss der Neuauslegung umfassen. Das Verfahren kann das Sammeln von Ausnahmen aus einer jeweiligen Teilmenge der mehreren Verarbeitungselemente; und das Weiterleiten der Ausnahmen zum Kern für die Bedienung umfassen. Das Verfahren kann umfassen zu veranlassen, dass Zustandsdaten von einer jeweiligen Teilmenge der mehreren Verarbeitungselemente in dem Speicher gespeichert werden.
  • In noch einer anderen Ausführungsform speichert ein nicht-flüchtiges maschinenlesbares Medium Code, der, wenn durch eine Maschine ausgeführt, die Maschine veranlasst, ein Verfahren durchzuführen, umfassend Decodieren eines Befehls mit einem Decodierer eines Kerns eines Prozessors in einen decodierten Befehl; Ausführen des decodierten Befehls mit einer Ausführungseinheit des Kerns des Prozessors zum Durchführen einer ersten Operation; Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten; Legen des Datenflussgraphen über die mehreren Verarbeitungselemente des Prozessors und ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen dargestellt ist; und Durchführen einer zweiten Operation des Datenflussgraphen mit dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen, wenn eine eingehende Operandenmenge an den mehreren Verarbeitungselementen eingeht. Das Verfahren kann Laden von Auslegungsinformationen aus dem Speicher für jeweilige Teilmengen der mehreren Verarbeitungselemente und das Veranlassen der Kopplung für jede jeweilige Teilmenge der mehreren Verarbeitungselemente gemäß den Auslegungsinformationen umfassen. Das Verfahren kann Abrufen der Auslegungsinformation für die jeweilige Teilmenge der mehreren Verarbeitungselemente von einem jeweiligen Auslegungs-Cache mehrerer Auslegungs-Caches umfassen. Die erste Operation, die durch die Ausführungseinheit durchgeführt wird, kann das Abrufen von Auslegungsinformationen in jeden der mehreren Auslegungs-Caches sein. Das Verfahren kann bei Empfang einer Auslegungsfehlermeldung von dem mindestens einen Verarbeitungselement das Veranlassen einer Neuauslegung für mindestens ein Verarbeitungselement der jeweiligen Teilmenge von Verarbeitungselementen umfassen. Das Verfahren kann bei Empfang einer Neuauslegungsanforderungsnachricht das Veranlassen einer Neuauslegung der jeweiligen Teilmenge der mehreren Verarbeitungselemente und das Deaktivieren der Kommunikation mit der jeweiligen Teilmenge der mehreren Verarbeitungselemente bis Abschluss der Neuauslegung umfassen. Das Verfahren kann das Sammeln von Ausnahmen aus einer jeweiligen Teilmenge der mehreren Verarbeitungselemente; und das Weiterleiten der Ausnahmen zum Kern für die Bedienung umfassen. Das Verfahren kann umfassen zu veranlassen, dass Zustandsdaten von einer jeweiligen Teilmenge der mehreren Verarbeitungselemente in dem Speicher gespeichert werden.
  • In einer anderen Ausführungsform umfasst ein Prozessor einen Kern mit einem Decodierer zum Decodieren eines Befehls in einem decodierten Befehl und eine Ausführungseinheit zum Ausführen des decodierten Befehls zum Durchführen einer ersten Operation; mehrere Verarbeitungselemente; und Mittel zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über die Mittel und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in den mehreren Verarbeitungselementen repräsentiert ist, und die mehreren Verarbeitungselemente dazu dienen, eine zweite Operation durchzuführen, wenn eine eingehende Operandenmenge bei den mehreren Verarbeitungselementen eingeht.
  • In noch einer weiteren Ausführungsform umfasst eine Einrichtung eine Datenspeichervorrichtung, die Code speichert, der, wenn durch einen Hardwareprozessor ausgeführt, den Hardwareprozessor veranlasst, eines der hier beschriebenen Verfahren durchzuführen. Eine Einrichtung kann sein, wie in der ausführlichen Beschreibung beschrieben. Ein Verfahren kann sein, wie in der ausführlichen Beschreibung beschrieben.
  • In einer weiteren Ausführungsform speichert ein nicht-flüchtiges maschinenlesbares Medium Code, der, wenn er von einer Maschine ausgeführt wird, die Maschine veranlasst, ein Verfahren durchzuführen, das jedes beliebige hierin offenbarte Verfahren umfasst.
  • Ein Befehlssatz (z. B. zur Ausführung durch den Kern) kann eines oder mehrere Befehlsformate aufweisen. Ein gegebenes Befehlsformat kann verschiedene Felder (Anzahl von Bits, Ort von Bits) zum Angeben, unter anderen Dingen, der Operation, die durchgeführt werden soll (Opcode) und des bzw. der Operanden, auf denen die Operation durchgeführt werden soll, und/oder andere(s) Datenfeld(er) (z. B. Maske) definieren. Einige Befehlsformate werden durch die Definition von Befehlsvorlagen (oder Unterformaten) weiter aufgeteilt. Zum Beispiel können die Befehlsvorlagen eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilmengen der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber wenigstens manche weisen unterschiedliche Bitpositionen auf, weil dort weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, welches unterschiedlich interpretiert wird. Daher wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einer gegebenen der Befehlsvorlagen dieses Befehlsformats) ausgedrückt und umfasst Felder zum Angeben der Operation und der Operanden. Beispielsweise hat ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat, das ein Opcode-Feld zum Angeben dieses Opcodes und Operandenfelder zum Auswählen von Operanden (Quellel/Ziel und Quelle2) umfasst; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom hat spezifische Inhalte in den Operandenfeldern, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, Bezug nehmend auf die Advanced Vector Extensions (AVX) (AVX1 und AVX2) und unter Verwendung des VEX-Codierschemas (Vector Extensions), wurde freigegeben und/oder veröffentlicht (siehe z. B. Intel® 64 and IA-32 Architectures Software Developer's Manual, Juli 2017; und siehe Intel® Architecture Instruction Set Extensions Programming Reference, April 2017; Intel ist ein Warenzeichen der Intel Corporation oder ihrer Tochterunternehmen in den USA und/oder in anderen Ländern.).
  • Beispielhafte Befehlsformate
  • Ausführungsformen des bzw. der hier beschriebenen Befehle können in unterschiedlichen Formaten ausgeführt sein. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines nachfolgend ausführlich beschrieben. Ausführungsformen des bzw. der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf diese aufgeführten beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es gewisse Felder, die für Vektoroperationen spezifisch sind). Während Ausführungsformen beschrieben sind, in denen sowohl Vektor- als auch skalare Operationen durch das vektorfreundliche Format unterstützt sind, verwenden alternative Ausführungsformen nur Vektoroperationen im vektorfreundlichen Befehlsformat.
  • 51A-51B sind Blockdiagramme, ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Offenbarung. 51A ist ein Blockdiagramm, ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Offenbarung; während 51B ein Blockdiagramm ist, das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Offenbarung. Insbesondere ein generisches vektorfreundliches Befehlsformat 5100, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Befehlsvorlagen ohne Speicherzugriff 5105 und Befehlsvorlagen mit Speicherzugriff 5120 umfassen. Der Begriff „generisch“ im Kontext des vektorfreundlichen Befehlsformats bezieht sich darauf, dass das Befehlsformat nicht an einen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen der Offenbarung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und daher besteht ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder alternativ aus 8 Elementen in Quadrupelwortgröße); eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (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 Datenelementbreiten (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 verschiedene Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)) unterstützen.
  • Die Klasse-A-Befehlsvorlagen in 51A umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 5105 ist eine Befehlsvorlage für eine Operation vom vollen Rundungssteuerungstyp ohne Speicherzugriff 5110 und eine Befehlsvorlage für eine Operation vom Datentransformationstyp ohne Speicherzugriff 5115 gezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 5120 ist eine temporale Befehlsvorlage mit Speicherzugriff 5125 und eine nicht-temporale Befehlsvorlage mit Speicherzugriff 5130 gezeigt. Die Klasse-B-Befehlsvorlagen in 51B umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 5105 ist eine Befehlsvorlage für eine Operation vom teilweisen Rundungssteuerungstyp mit Schreibmaskensteuerung ohne Speicherzugriff 5112 und eine Befehlsvorlage für eine Operation vom vsize-Typ mit Schreibmaskensteuerung ohne Speicherzugriff 5117 gezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 5120 ist eine Befehlsvorlage mit Schreibmaskensteuerung mit Speicherzugriff 5127 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 5100 umfasst die folgenden Felder, nachfolgend in der in 51A-51B dargestellten Reihenfolge aufgeführt.
  • Formatfeld 5140 - ein spezifischer Wert (ein Befehlsformat-Identifiziererwert) in diesem Feld identifiziert eindeutig das vektorfreundliche Befehlsformat und daher Auftreten von Befehlen im vektorfreundlichen Befehlsformat in Befehlsströmen. Daher ist dieses Feld optional in dem Sinne, dass es nicht für einen Befehlssatz benötigt wird, der nur das generische vektorfreundliche Befehlsformat hat.
  • Basisoperationsfeld 5142 - sein Inhalt unterscheidet die unterschiedlichen Basisoperationen.
  • Registerindexfeld 5144 - sein Inhalt gibt, direkt oder über Adresserzeugung, die Orte der Quell- und Zieloperanden an, seien sie in Registern oder im Speicher. Dies umfasst eine ausreichende Anzahl von Bits zum Auswählen von N Registern aus einer PxQ-Registerdatei (z. B. 32×512, 16×128, 32x1024, 64×1024). Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (z. B. können bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt; können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt; können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifiziererfeld 5146 - sein Inhalt unterscheidet Auftreten von Befehlen im generischen Vektorbefehlsformat, die Speicherzugriff angeben, von denen, die dies nicht tun; das heißt, zwischen Befehlsvorlagen ohne Speicherzugriff 5105 und Befehlsvorlagen mit Speicherzugriff 5120. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (in einigen Fällen die Quell- und Zieladressen unter Verwendung von Werten in Registern angebend), während Nicht-Speicherzugriffsoperationen dies nicht tun (z. B. die Quelle und Ziele sind Register). Während in einer Ausführungsform dieses Feld auch zwischen drei unterschiedlichen Wegen zum Durchführen von Speicheradressberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder verschiedene Wege zum Durchführen von Speicheradressberechnungen unterstützen.
  • Zusatzoperationsfeld 5150 - sein Inhalt unterscheidet, welche von mehreren unterschiedlichen Operationen zusätzlich zu der Basisoperation durchzuführen sind. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Offenbarung wird dieses Feld in ein Klassenfeld 5168, ein Alpha-Feld 5152 und ein Beta-Feld 5154 unterteilt. Das Zusatzoperationsfeld 5150 ermöglicht gängigen Gruppen von Operationen, in einem einzelnen Befehl durchgeführt zu werden, anstatt in 2, 3 oder 4 Befehlen.
  • Skalierungsfeld 5160 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfelds zur Speicheradresserzeugung (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 5162A - sein Inhalt wird als Teil einer Speicheradresserzeugung verwendet (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 5162B (es ist anzumerken, dass die Stellung von Verschiebungsfeld 5162A direkt über Verschiebungsfaktorfeld 5162B anzeigt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adresserzeugung verwendet; gibt einen Verschiebungsfaktor an, der um die Größe eines Speicherzugriffs (N) zu skalieren ist - wobei N die Anzahl von Bytes im Speicherzugriff ist (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert, und daher wird der Inhalt des Verschiebungsfaktorfelds mit der Speicheroperandengesamtgröße (N) multipliziert, um die abschließende Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessorhardware bei Laufzeit basierend auf dem vollen Opcode-Feld 5174 (hier später beschrieben) und dem Datenmanipulationsfeld 5154C bestimmt. Das Verschiebungsfeld 5162A und das Verschiebungsfaktorfeld 5162B sind optional in dem Sinn, dass sie nicht für die Befehlsvorlagen ohne Speicherzugriff 5105 verwendet werden, und/oder unterschiedliche Ausführungsformen können nur eins oder keins der zwei umsetzen.
  • Datenelementbreitenfeld 5164 - sein Inhalt unterscheidet, welche einer Anzahl von Datenelementbreiten zu verwenden ist (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist optional in dem Sinn, dass es nicht benötigt wird, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekte der Opcodes unterstützt werden.
  • Schreibmaskenfeld 5170 - sein Inhalt steuert, basierend auf der Datenelementposition, ob diese Datenelementposition im Zielvektoroperanden das Ergebnis der Basisoperation und Zusatzoperation widerspiegelt. Klasse-A-Befehlsvorlagen unterstützen Zusammenführungs-Schreibmaskierung, während Klasse-B-Befehlsvorlagen sowohl Zusammenführungs- als auch Nullungs-Schreibmaskierung unterstützen. Beim Zusammenführen erlauben Vektormasken jedem Satz von Elementen im Ziel, vor Aktualisierungen während der Ausführung einer beliebigen Operation (angegeben durch die Basisoperation und die Zusatzoperation) geschützt zu werden; in einer anderen Ausführungsform, Beibehalten des alten Werts jedes Elements des Ziels, wo das zugehörige Maskenbit eine 0 hat. Im Gegensatz dazu erlauben beim Nullen Vektormasken einem beliebigen Satz von Elementen im Ziel, während der Ausführung eines beliebigen Befehls (angegeben durch die Basisoperation und die Zusatzoperation) genullt zu werden; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das zugehörige Maskenbit einen 0-Wert hat. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der durchzuführenden Operation 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, aufeinander folgen. Daher erlaubt das Schreibmaskenfeld 5170 teilweise Vektoroperationen, einschließlich Ladeoperation, Speicherungen, arithmetisch, logisch usw. Während Ausführungsformen der Offenbarung beschrieben werden, in denen der Inhalt des Schreibmaskenfelds 5170 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und daher identifiziert der Inhalt des Schreibmaskenfelds 5170 indirekt die durchzuführende Maskierung), erlauben alternative Ausführungsformen stattdessen oder zusätzlich dem Inhalt des Schreibmaskenfelds 5170, die durchzuführende Maskierung direkt anzugeben.
  • Direktoperandenfeld 5172 - sein Inhalt ermöglicht die Spezifikation eines Direktoperanden. Dieses Feld ist optional in dem Sinn, dass es in einer Umsetzung des generischen vektorfreundlichen Formats, das keinen Direktoperanden unterstützt, nicht vorhanden ist, und dass es nicht in Befehlen vorhanden ist, die keine Direktoperanden verwenden.
  • Klassenfeld 5168 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Bezug nehmend auf 51A-B, wählen die Inhalte dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen aus. In 51A-B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 5168A bzw. Klasse B 5168B für das Klassenfeld 5168 in 51A-B).
  • Befehlsvorlagen der Klasse A
  • Im Falle der Befehlsvorlagen der Klasse A ohne Speicherzugriff 5105 wird das Alpha-Feld 5152 als ein RS-Feld 5152A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Zusatzoperationstypen durchzuführen sind (z. B. Runden 5152A.1 und Datentransformation 5152A.2 sind jeweils für die Befehlsvorlagen für Operation vom Rundungstyp ohne Speicherzugriff 5110 bzw. die Operation vom Datentransformationstyp 5115 ohne Speicherzugriff angegeben), während das Beta-Feld 5154 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 5105 sind das Skalierungsfeld 5160, das Verschiebungsfeld 5162A und das Verschiebungsskalierungsfeld 5162B nicht vorhanden.
  • Befehlsvorlagen ohne Speicherzugriff - Operation vom vollen Rundungssteuerungstyp
  • In der Befehlsvorlage für die Operation vom vollen Rundungssteuerungstyp ohne Speicherzugriff 5110 wird das Beta-Feld 5154 als Rundungsteuerungsfeld 5154A interpretiert, dessen Inhalt(e) statisches Runden bietet bzw. bieten. Während in den beschriebenen Ausführungsformen der Offenbarung das Rundungssteuerungsfeld 5154A ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 5156 und ein Rundungsoperationssteuerungsfeld 5158 umfasst, können alternative Ausführungsformen diese beiden Konzepte unterstützen und in das gleiche Feld codieren oder nur ein oder das andere dieser Konzepte/Felder haben (z. B. kann nur das Rundungsoperationssteuerfeld 5158 haben).
  • SAE-Feld 5156 - sein Inhalt unterscheidet, ob oder ob nicht Melden von Ausnahmeereignissen deaktiviert werden soll; wenn der Inhalt des SAE-Felds 5156 anzeigt, dass Unterdrückung aktiviert ist, meldet ein gegebener Befehl keinen Typ von Gleitkommaausnahmen-Kennzeichen und zeigt keinen Gleitkommaausnahmen-Handler an.
  • Rundungsoperationssteuerfeld 5158 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl). Daher erlaubt das Rundungsoperationssteuerfeld 5158 das Ändern des Rundungsmodus auf einer Befehlsbasis. In einer Ausführungsform der Offenbarung, wo ein Prozessor ein Steuerregister zum Angeben der Rundungsmodi umfasst, überschreibt der Inhalt des Rundungsoperationssteuerfelds 5150 diesen Registerwert.
  • Befehlsvorlagen ohne Speicherzugriff - Operation vom Datentransformationstyp
  • In der Befehlsvorlage der Operation vom Datentransformationstyp ohne Speicherzugriff 5115 wird das Beta-Feld 5154 als ein Datentransformationsfeld 5154B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datentransformationen durchzuführen ist (z. B. keine Datentransformation, Mischen, Senden).
  • Im Falle einer Befehlsvorlage der Klasse A mit Speicherzugriff 5120 wird das Alpha-Feld 5152 als ein Räumungshinweisfeld 5152B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 51A sind temporal 5152B.1 und nicht-temporal 5152B.2 angegeben für die temporale Befehlsvorlage mit Speicherzugriff 5125 bzw. die nicht-temporale Befehlsvorlage mit Speicherzugriff 5130), während das Beta-Feld 5154 als ein Datenmanipulationsfeld 5154C interpretiert wird, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datenmanipulationsoperationen (auch als Primitiven bekannt) durchzuführen sind (z. B. keine Manipulation; Senden; Aufwärtsumwandlung einer Quelle; und Abwärtsumwandlung eines Ziels). Die Befehlsvorlagen mit Speicherzugriff 5120 umfassen das Skalierungsfeld 5160 und optional das Verschiebungsfeld 5162A oder das Verschiebungsskalierungsfeld 5162B.
  • Vektorspeicherbefehle führen Vektorladeoperationen vom und Vektorspeicheroperationen im Speicher mit Umwandlungsunterstützung durch. Wie bei regulären Vektorbefehlen, transferieren Vektorspeicherbefehle Daten datenelementweise vom/in den Speicher, wobei die Elemente, die tatsächlich transferiert werden, durch die Inhalte der Vektormaske, die als Schreibmaske ausgewählt ist, bestimmt wird.
  • Befehlsvorlagen mit Speicherzugriff - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von Caching profitieren zu können. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können dies in unterschiedlichen Weisen umsetzen, einschließlich vollständiges Ignorieren des Hinweises.
  • Befehlsvorlagen mit Speicherzugriff - Nicht-temporal
  • Nicht-temporale Daten sind Daten, die wahrscheinlich nicht bald genug wiederverwendet werden, um von Caching im Level-1-Cache profitieren zu können und denen Priorität für Räumung gegeben werden sollte. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können dies in unterschiedlichen Weisen umsetzen, einschließlich vollständiges Ignorieren des Hinweises.
  • Befehlsvorlagen der Klasse B
  • Im Falle der Befehlsvorlagen der Klasse B wird das Alpha-Feld 5152 als ein Schreibmaskensteuerfeld (Z) 5152C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 5170 gesteuerte Schreibmaskierung zusammenführend oder nullend sein soll.
  • Im Falle der Befehlsvorlagen der Klasse B ohne Speicherzugriff 5105 wird ein Teil des Beta-Felds 5154 als ein RL-Feld 5157A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Zusatzoperationstypen durchzuführen sind (z. B. Runden 5157A.1 und Vektorlänge (VSIZE) 5157A.2 sind jeweils für die Befehlsvorlage für Schreibmaskensteuerungsoperation vom teilweisen Rundungssteuerungstyp ohne Speicherzugriff 5112 bzw. die Befehlsvorlage für Schreibmaskensteuerungsoperation vom VSIZE-Typ ohne Speicherzugriff 5117 angegeben), während der Rest des Beta-Felds 5154 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 5105 sind das Skalierungsfeld 5160, das Verschiebungsfeld 5162A und das Verschiebungsskalierungsfeld 5162B nicht vorhanden.
  • In der Befehlsvorlage für Schreibmaskensteuerungsoperation vom teilweisen Rundungssteuerungstyp ohne Speicherzugriff 5110 wird der Rest des Beta-Felds 5154 als ein Rundungsoperationsfeld 5159A interpretiert, und Melden von Ausnahmeereignissen ist deaktiviert (ein gegebener Befehl meldet keinen Typ von Gleitkommaausnahmen-Flag und zeigt keinen Gleitkommaausnahmen-Handler an).
  • Rundungsoperationssteuerfeld 5159A - wie bei Rundungsoperationssteuerfeld 5158, unterscheidet sein Inhalt, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl). Daher erlaubt das Rundungsoperationssteuerfeld 5159A das Ändern des Rundungsmodus auf einer Befehlsbasis. In einer Ausführungsform der Offenbarung, wo ein Prozessor ein Steuerregister zum Angeben der Rundungsmodi umfasst, überschreibt der Inhalt des Rundungsoperationssteuerfelds 5150 diesen Registerwert.
  • In der Befehlsvorlage der Schreibmaskensteuerungsoperation vom VSIZE-Typ ohne Speicherzugriff 5117 wird der Rest des Beta-Felds 5154 als ein Vektorlängenfeld 5159B interpretiert, dessen Inhalt unterscheidet, auf welcher einer Anzahl von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Falle einer Befehlsvorlage der Klasse B mit Speicherzugriff 5120 wird ein Teil des Beta-Felds 5154 als ein Sendefeld 5157B interpretiert, dessen Inhalt unterscheidet, ob oder ob nicht die Datenmanipulationsoperation vom Sendetyp durchzuführen ist, während der Rest des Beta-Felds 5154 als das Vektorlängenfeld 5159B interpretiert wird. Die Befehlsvorlagen mit Speicherzugriff 5120 umfassen das Skalierungsfeld 5160 und optional das Verschiebungsfeld 5162A oder das Verschiebungsskalierungsfeld 5162B.
  • Hinsichtlich des generischen vektorfreundlichen Befehlsformats 5100, ist ein volles Opcode-Feld 5174 gezeigt, das Formatfeld 5140, das Basisoperationsfeld 5142 und das Datenelementbreitenfeld 5164 umfassend. Während eine Ausführungsform gezeigt ist, bei der das volle Opcode-Feld 5174 all diese Felder umfasst, umfasst das volle Opcode-Feld 5174 in Ausführungsformen, die nicht alle unterstützen, weniger als alle diese Felder. Das volle Opcode-Feld 5174 stellt den Operationscode (Opcode) bereit.
  • Das Zusatzoperationsfeld 5150, das Datenelementbreitenfeld 5164 und das Schreibmaskenfeld 5170 ermöglichen, dass diese Merkmale auf einer befehlsweisen Grundlage im generischen vektorfreundlichen Befehlsformat angegeben werden können.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erzeugt typenbehaftete Befehle dahingehend, dass sie ermöglichen, die Maske basierend auf unterschiedlichen Datenelementbreiten anzuwenden.
  • Die verschiedenen Befehlsvorlagen, 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 nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Beispielsweise kann ein universeller reihenfolgeveränderter (Out-of-order) Hochleistungskern, der für universelles Rechnen gedacht ist, nur Klasse B unterstützen, ein Kern, der primär für Grafik und/oder wissenschaftliches (Durchsatz) Rechnen gedacht ist, kann nur Klasse A unterstützen, und ein Kern, der für beides gedacht ist, kann beide unterstützen (natürlich liegt ein Kern, der einen gewissen Mix aus Vorlagen und Befehlen von beiden Klassen hat, aber nicht alle Vorlagen und Befehle von beiden Klassen, innerhalb des Geltungsbereichs der Offenbarung). Außerdem kann ein einzelner Prozessor mehrere Kerne umfassen, die alle die gleiche Klasse unterstützen oder von denen verschiedene Kerne unterschiedliche Klassen unterstützen. Beispielsweise kann in einem Prozessor mit separaten Grafik- und universellen Kernen einer der Grafikkerne, die primär für Grafik und/oder wissenschaftliches Rechnen gedacht sind, nur Klasse A unterstützen, während einer oder mehrere der universellen Kerne universelle Hochleistungskerne mit reihenfolgeveränderter (Out-of-order) Ausführung und Registerumbenennung sein können, die für universelles Rechnen gedacht sind, die nur Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Grafikkern hat, kann einen oder mehrere reihenfolgetreue (In-order) oder reihenfolgeveränderte (Out-of-order) Kerne umfassen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können in verschiedenen Ausführungsformen der Offenbarung Merkmale von einer Klasse auch in der anderen Klasse umgesetzt sein. Programme, die in einer höheren Sprache geschrieben sind, würden in eine Vielzahl von unterschiedlichen ausführbaren Formen gebracht werden (z. B. just-in-time-kompiliert oder statisch kompiliert), umfassend: 1) eine Form, nur Befehle der Klasse(n) aufweisend, die durch den Zielprozessor für Ausführung unterstützt werden; oder 2) eine Form, alternative Routinen aufweisend, die unter Verwendung unterschiedlicher Kombinationen aller Klassen geschrieben wurden und Steuerflusscode aufweisen, der die auszuführenden Routinen basierend auf den durch den Prozessor, der momentan den Code ausführt, unterstützten Befehlen auswählt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 52 ist ein Blockdiagramm, ein beispielhaftes spezifisches vektorfreundliches Befehlsformat darstellend, gemäß Ausführungsformen der Offenbarung.
  • 52 zeigt ein spezifisches vektorfreundliches Befehlsformat 5200, dass spezifisch in dem Sinn ist, dass es den Ort, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder angibt. Das spezifische vektorfreundliche Befehlsformat 5200 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und daher sind einige der Felder ähnlich wie oder die gleichen wie die, die im bestehenden x86-Befehlssatz und Erweiterungen davon (z. B. AVX) verwendet werden. Dieses Format bleibt konsistent mit dem Präfixcodierungsfeld, dem Real-Opcode-Bytefeld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und dem Direktausführungsfeld des vorhandenen x86-Befehlssatzes mit Erweiterungen. Die Felder aus 51, in die die Felder aus 52 abgebildet werden, sind dargestellt.
  • Es versteht sich, dass, obwohl Ausführungsformen der Offenbarung zu Darstellungszwecken unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 5200 im Kontext des generischen vektorfreundlichen Befehlsformats 5100 beschrieben sind, die Offenbarung nicht auf das spezifische vektorfreundliche Befehlsformat 5200 beschränkt ist, ausgenommen dort, wo beansprucht. Beispielsweise berücksichtigt das generische vektorfreundliche Befehlsformat 5100 eine Vielzahl möglicher Größen für die verschiedenen Felder, während das spezifische vektorfreundliche Befehlsformat 5200 als Felder mit spezifischen Größen aufweisend gezeigt ist. Als spezifisches Beispiel, während das Datenelementbreitenfeld 5164 als ein Ein-Bit-Feld im spezifischen vektorfreundlichen Befehlsformat 5200 dargestellt ist, ist die Offenbarung nicht so beschränkt (das heißt, das generische vektorfreundliche Befehlsformat 5100 zieht andere Größen für das Datenelementbreitenfeld 5164 in Betracht).
  • Das generische vektorfreundliche Befehlsformat 5100 umfasst die folgenden Felder, nachfolgend in der in 52A dargestellten Reihenfolge aufgeführt.
  • EVEX-Präfix (Bytes 0-3) 5202 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 5140 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 5140, und es beinhaltet 0x62 (der eindeutige Wert, der in einer Ausführungsform der Offenbarung zum Unterscheiden des vektorfreundlichen Befehls verwendet wird).
  • Die zweiten bis vierten Bytes (EVEX-Bytes 1-3) umfassen eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bieten.
  • REX-Feld 5205 (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 5157BEX-Byte 1, Bit[5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder bieten die gleiche Funktionalität wie die zugehörigen VEX-Bitfelder und werden unter Verwendung der Einerkomplementform codiert, d. h. ZMM0 wird als 2611B codiert, ZMM15 wird als 0000B codiert. Andere Felder der Befehle codieren die niedrigeren drei Bits der Registerindizies, wie im Fachgebiet bekannt ist (rrr, xxx und bbb), sodass Rrrr, Xxxx und Bbbb durch Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 5110 - dies ist der erste Teil des REX'-Felds 5110 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Registersatzes zu codieren. In einer Ausführungsform der Offenbarung wird dieses Bit, zusammen mit anderen, wie nachfolgend angezeigt, im bitinvertierten Format gespeichert, um (im wohlbekannten x86-32-Bit-Modus) vom BOUND-Befehl zu unterscheiden, dessen Real-Opcode-Byte 62 ist, akzeptiert aber nicht im MOD-R/M-Feld (nachfolgend beschrieben) den Wert von 11 im MOD-Feld; alternative Ausführungsformen der Offenbarung speichern dieses und die anderen nachfolgend angezeigten Bits nicht im invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R und den anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 5215 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 5164 (EVEX-Byte 2, Bit [7] - W) - wird durch die Notation EVEX.W repräsentiert. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 5220 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvvv kann Folgendes umfassen: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, angegeben in invertierter Form (Einerkomplement) und ist gültig für Befehle mit 2 oder mehr Quelloperanden; 2) EVEX.vvvv codiert den Zielregisteroperanden, angegeben in Einerkomplementform für gewisse Vektorverschiebungen; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Daher codiert EVEX.vvvv-Feld 5220 die 4 Bits niedriger Ordnung des ersten Quellregisterspezifizierers, gespeichert in invertierter Form (Einerkomplement). In Abhängigkeit vom Befehl wird ein zusätzliches unterschiedliches EVEX-Bitfeld verwendet, um die Spezifizierergröße auf 32 Register zu erweitern.
  • EVEX.U-Klassenfeld 5168 (EVEX-Byte 2, Bit [2]-U) - Wenn EVEX.U = 0, zeigt dies Klasse A oder EVEX.U0 an; wenn EVEX.U = 1, zeigt dies Klasse B oder EVEX.U1 an.
  • Präfixcodierungsfeld 5225 (EVEX-Byte 2, Bits [1:0]-pp) bietet zusätzliche Bits für das Basisoperationsfeld. Zusätzlich zum Bereitstellen von Unterstützung für ältere SSE-Befehle im EVEX-Präfixformat hat dies auch den Vorteil des Kompaktierens des SIMD-Präfixes (anstatt dass ein Byte erforderlich ist, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix nur 2 Bits). In einer Ausführungsform werden, um die älteren SSE-Befehle zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im älteren Format als auch im EVEX-Präfixformat verwenden, diese älteren SIMD-Präfixe in das SIMD-Präfixcodierungsfeld codiert und werden bei Laufzeit in das ältere SIMD-Präfix erweitert, bevor Sie der PLA des Decodierers bereitgestellt werden (sodass die PLA sowohl das ältere als auch das EVEX-Format dieser älteren Befehle ohne Modifikationen ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfelds direkt als eine Opcode-Erweiterung verwenden können, erweitern gewisse Ausführungsformen aus Gründen der Konsistenz in einer ähnlichen Weise, erlauben aber, dass unterschiedliche Bedeutungen durch diese älteren SIMD-Präfixe angegeben werden. Eine alternative Ausführungsform kann die PLA neu konzipieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und daher die Erweiterung nicht benötigen.
  • Alpha-Feld 5152 (EVEX-Byte 3, Bit [7] - EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.write mask control (Schreibmaskensteuerung) und EVEX.N; auch dargestellt als α) - wie vorher beschrieben, ist dieses Feld kontextspezifisch.
  • Beta-Feld 5154 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch dargestellt durch βββ) - wie vorher beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 5110 - dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] - V'), das 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 verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 5170 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt gibt den Index eines Registers in den Schreibmaskenregistern an, wie vorher beschrieben. In einer Ausführungsform der Offenbarung hat der spezifische Wert EVEX.kkk=000 ein spezielles Verhalten, implizierend, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann auf verschiedene Weisen umgesetzt werden, einschließlich des Verwendens einer Schreibmaske, fest mit allen verdrahtet, oder von Hardware, die die Maskierungshardware umgeht).
  • Das Real-Opcode-Feld 5230 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld angegeben.
  • MOD-R/M-Feld 5240 (Byte 5) umfasst MOD-Feld 5242, Reg-Feld 5244 und R/M-Feld 5246. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Felds 5242 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle von Reg-Feld 5244 kann für zwei Situationen zusammengefasst werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden, oder als eine Opcode-Erweiterung behandelt zu werden und nicht zum Codieren eines Befehlsoperanden verwendet zu werden. Die Rolle von R/M-Feld 5246 kann Folgendes umfassen: Codieren des Befehlsoperanden, der sich auf eine Speicheradresse bezieht, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung-Index-Basis-Byte (SIB, Scale, Index, Base) (Byte 6) - Wie zuvor beschrieben, wird der Inhalt des Skalierungsfelds 5150 für Speicheradressenerzeugung verwendet. SIB.xxx 5254 und SIB.bbb 5256 - auf die Inhalte dieser Felder wurde vorher im Zusammenhang mit den Registerindizes Xxxx und Bbbb Bezug genommen.
  • Verschiebungsfeld 5162A (Bytes 7-10) - wenn MOD-Feld 5242 eine 10 beinhaltet, sind Bytes 7-10 das Verschiebungsfeld 5162A, und es funktioniert genau so wie die ältere 32-Bit-Verschiebung (disp32) und arbeitet mit Bytegranularität.
  • Verschiebungsfaktorfeld 5162B (Byte 7) - wenn MOD-Feld 5242 eine 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 5162B. Der Ort dieses Felds ist der gleiche wie der der älteren 8-Bit-Verschiebung (disp8) im x86-Befehlssatz, die mit Bytegranularität arbeitet. Da disp8 vorzeichenerweitert ist, kann es nur Versätze zwischen -128 und 127 Bytes adressieren; in Verbindung mit 64-Byte-Cache-Zeilen verwendet disp8 acht (8) Bits, die auf nur vier wirklich sinnvolle Werte -128, -64, 0 und 64 gesetzt werden können; da häufig ein größerer Bereich benötigt ist, wird disp32 verwendet; disp32 erfordert allerdings 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 5162B eine Neuinterpretation von disp8; bei Verwenden von Verschiebungsfaktorfeld 5162B wird die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds, multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ von Verschiebung wird als disp8*N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist und dass daher die redundanten Bits niedrigerer Ordnung des Adressenversatzes nicht codiert werden müssen. Mit anderen Worten, das Verschiebungsfaktorfeld 5162B ersetzt die 8-Bit-Verschiebung des älteren x86-Befehlssatzes. Daher wird das Verschiebungsfaktorfeld 5162B auf die gleiche Weise codiert wie eine 8-Bit-Verschiebung des x86-Befehlssatzes (also keine Änderungen in den ModRM/SIB-Codierregeln), mit der einzigen Ausnahme, dass disp8 auf disp8*N überladen wird. Mit anderen Worten, es gibt keine Änderungen in den Codierregeln oder Codierlängen, sondern nur bei der Interpretation des Verschiebungswertes durch Hardware (die die Verschiebung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressenversatz zu erhalten). Direktoperandenfeld 5172 arbeitet, wie zuvor beschrieben.
  • Volles Opcode-Feld
  • 52B ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 5200, die das volle Opcode-Feld 5174 bilden, darstellend, gemäß einer Ausführungsform der Offenbarung. Insbesondere umfasst das volle Opcode-Feld 5174 das Formatfeld 5140, das Basisoperationsfeld 5142 und das Datenelementbreitenfeld (W) 5164. Das Basisoperationsfeld 5142 umfasst das Präfixcodierungsfeld 5225, das Opcode-Abbildungsfeld 5215 und das Real-Opcode-Feld 5230.
  • Registerindexfeld
  • 52C ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 5200, die das Registerindexfeld 5144 bilden, darstellend, gemäß einer Ausführungsform der Offenbarung. Insbesondere umfasst das Registerindexfeld 5144 das REX-Feld 5205, das REX'-Feld 5210, das MODR/M.reg-Feld 5244, das MODR/M.r/m-Feld 5246, das VVVV-Feld 5220, das xxx-Feld 5254 und das bbb-Feld 5256.
  • Zusatzoperationsfeld
  • 52D ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 5200, die das Zusatzoperationsfeld 5150 bilden, darstellend, gemäß einer Ausführungsform der Offenbarung. Wenn das Klassenfeld (U) 5168 eine 0 enthält, bedeutet dies EVEX.U0 (Klasse A 5168A); wenn es eine 1 enthält, bedeutet dies EVEX.U1 (Klasse B 5168B). Wenn U=0 und das MOD-Feld 5242 eine 11 enthält (eine Operation ohne Speicherzugriff bedeutend), wird das Alpha-Feld 5152 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 5152A interpretiert. Wenn das rs-Feld 5152A eine 1 enthält (Runden 5152A.1), wird das Beta-Feld 5154 (EVEX-Byte 3, Bits [6:4]- SSS) als das Rundungssteuerfeld 5154A interpretiert. Das Rundungssteuerfeld 5154A umfasst ein Ein-Bit-SAE-Feld 5156 und ein Zwei-Bit-Rundungsoperationsfeld 5158. Wenn das rs-Feld 5152A eine 0 enthält (Datentransformation 5152A.2), wird das Beta-Feld 5154 (EVEX-Byte 3, Bits [6:4]- SSS) als das Drei-Bit-Datentransformationsfeld 5154B interpretiert. Wenn U=0 und das MOD-Feld 5242 eine 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Alpha-Feld 5152 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweisfeld (EH, Eviction Hint) 5152B interpretiert, und das Beta-Feld 5154 (EVEX-Byte 3, Bits [6:4]- SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 5154C interpretiert.
  • Wenn U=l, wird das Alpha-Feld 5152 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuerfeld (Z) 5152C interpretiert. Wenn U=1 und das MOD-Feld 5242 eine 11 enthält (eine Operation ohne Speicherzugriff bedeutend), wird ein Teil des Beta-Felds 5154 (EVEX-Byte 3, Bit [4]- S0) als das RL-Feld 5157A interpretiert; wenn es eine 1 enthält (Runden 5157A.1), wird der Rest des Beta-Felds 5154 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Rundungsoperationsfeld 5159A interpretiert, während wenn das RL-Feld 5157A eine 0 enthält (VSIZE 5157.A2), wird der Rest des Beta-Felds 5154 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Vektorlängenfeld 5159B (EVEX-Byte 3, Bit [6-5]- L1-0) interpretiert. Wenn U=1 und das MOD-Feld 5242 eine 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Beta-Feld 5154 (EVEX-Byte 3, Bits [6:4]- SSS) als das Vektorlängenfeld 5159B (EVEX-Byte 3, Bit [6-5]- L1-0) und das Sendefeld 5157B (EVEX-Byte 3, Bit [4]- B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 53 ist ein Blockdiagramm einer Registerarchitektur 5300 gemäß einer Ausführungsform der Offenbarung. In der dargestellten Ausführungsform gibt es 32 Vektorregister 5310, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niedriger Ordnung der unteren 16 zmm-Register werden auf Register ymm0-16 überlagert. Die 128 Bits niedrigerer Ordnung der unteren 16 zmm-Register (die 128 Bit niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 5200 operiert auf dieser überlagerten Registerdatei, wie in den folgenden Tabellen dargestellt.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehlsvorlagen, die das Vektorlängenfeld 5159B nicht umfassen A ( 51A; U=0) 5110, 5115, 5125, 5130 zmm-Register (die Vektorlänge ist 64 Byte)
    B ( 51B; U=l) 5112 zmm-Register (die Vektorlänge ist 64 Byte)
    Befehlsvorlagen, die das Vektorlängenfeld 5159B umfassen B ( 51B; U=l) 5117,5127 zmm-, ymm- oder xmm-Register (die Vektorlänge ist 64 Byte, 32 Byte oder 16 Byte) in Abhängigkeit vom Vektorlängenfeld 5159B
  • Mit anderen Worten, das Vektorlängenfeld 5159B wählt zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen aus, wobei jede der solchen kürzeren Längen die halbe Länge der vorhergehenden Länge ist, und Befehlsvorlagen ohne das Vektorlängenfeld 5159B operieren auf der maximalen Vektorlänge. Ferner operieren, in einer Ausführungsform, die Klasse-B-Befehlsvorlagen des spezifischen vektorfreundlichen Befehlsformats 5200 auf gepackten oder skalaren Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackten oder skalaren ganzzahligen Daten. Skalare Operationen sind Operationen, die auf der Datenelementposition der niedrigsten Ordnung in einem zmm/ymm/xmm-Register durchgeführt werden; die Datenelementpositionen der höheren Ordnung werden, in Abhängigkeit von der Ausführungsform, entweder so gelassen, wie sie vor dem Befehl waren, oder genullt.
  • Schreibmaskenregister 5315 - in der dargestellten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), die jeweils 64 Bit groß sind. In einer alternativen Ausführungsform haben die Schreibmaskenregister 5315 eine Größe von 16 Bit. Wie zuvor beschrieben, kann, in einer Ausführungsform der Offenbarung, das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 anzeigen würde, für eine Schreibmaske verwendet wird, wählt sie eine fest verdrahtete Schreibmaske OxFFFF aus, dadurch effektiv die Schreibmaskierung für diesen Befehl deaktivierend.
  • Universelle Register 5325 - in der dargestellten Ausführungsform gibt es sechzehn universelle 64-Bit-Register, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register sind mit RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Die skalare Gleitkommastapelregisterdatei (x87-Stapel) 5345, die als Alias für die gepackte ganzzahlige flache MMX-Registerdatei 5350 verwendet wird - in der dargestellten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der verwendet wird, um skalare Gleitkommaoperationen auf 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen auf gepackten ganzzahligen 64-Bit-Daten durchzuführen sowie um Operanden für einige Operationen zu halten, die zwischen dem MMX- und dem XMM-Register durchgeführt werden.
  • Alternative Ausführungsformen der Offenbarung können weitere oder engere Register verwenden. Zusätzlich können alternative Ausführungsformen der Offenbarung mehr, weniger oder unterschiedliche Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Weisen, für unterschiedliche Zwecke und in unterschiedlichen Prozessoren umgesetzt sein. Beispielsweise können Umsetzungen solcher Kerne Folgendes umfassen: 1) einen universellen reihenfolgetreuen (In-order) Kern, gedacht für universelles Rechnen; 2) einen universellen reihenfolgeveränderten (Out-of-order) Hochleistungskern, gedacht für universelles Rechnen; 3) einen speziellen Kern, primär gedacht für Grafik und/oder wissenschaftliche (Durchsatz) Berechnung. Umsetzungen von unterschiedlichen Prozessoren können umfassen: 1) eine CPU, einen oder mehrere universelle reihenfolgetreue (In-order) Kerne, gedacht für universelles Rechnen, und/oder einen oder mehrere universelle reihenfolgeveränderte (Out-of-order) Kerne, gedacht für universelles Rechnen, umfassend; und 2) einen Koprozessor, einen oder mehrere spezielle Kerne, primär gedacht für Grafik und/oder Wissenschaft (Durchsatz), umfassend. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes umfassen können: 1) den Koprozessor auf einem von der CPU separaten Chip; 2) den Koprozessor auf einem separaten Die im gleichen Chipgehäuse wie eine CPU; 3) den Koprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor manchmal als spezielle Logik, wie etwa als integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik, oder als spezielle Kerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (manchmal als der bzw. die Anwendungskerne oder Anwendungsprozessoren bezeichnet), den oben beschriebenen Koprozessor und zusätzliche Funktionalität umfassen kann. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Blockdiagramm zu reihenfolgetreuem (In-order) und reihenfolgeverändertem (Out-of-order) Kern
  • 54A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue (In-order) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Offenbarung darstellt. 54B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines reihenfolgetreuen (In-order) Architekturkerns als auch eines reihenfolgeveränderten (Out-of-order) Ausgabe-/Ausführungs-Architekturkerns mit Registerumbenennung, in einen Prozessor einzuschließen, gemäß Ausführungsformen der Offenbarung darstellt. Die Felder mit durchgezogenen Linien in 54A-B stellen die reihenfolgetreue Pipeline und den reihenfolgetreuen Kern dar, während die optionale Hinzufügung von Feldern mit gestrichelten Linien die/den reihenfolgeveränderte(n) Ausgabe-/Ausführungspipeline bzw. -kern mit Registerumbenennung darstellt. Unter der Voraussetzung, dass der reihenfolgetreue Aspekt eine Teilmenge des reihenfolgeveränderten Aspekts ist, wird der reihenfolgeveränderte Aspekt beschrieben.
  • In 54A umfasst eine Prozessorpipeline 5400 eine Abrufstufe 5402, eine Längendecodierstufe 5404, eine Decodierstufe 5406, eine Zuordnungsstufe 5408, eine Umbenennungsstufe 5410, eine Ablaufsteuerungsstufe (Scheduling, auch als Verteilung oder Ausgabe bekannt) 5412, eine Registerlese-/Speicherlesestufe 5414, eine Ausführungsstufe 5416, eine Zurückschreibe-/Speicherschreibestufe 5418, eine Ausnahmenbehandlungsstufe 5422 und eine Übergabestufe 5424.
  • 54B zeigt Prozessorkern 5490, eine Frontendeinheit 5430 umfassend, gekoppelt mit einer Ausführungsengineeinheit 5450, und beide sind mit einer Speichereinheit 5470 gekoppelt. Der Kern 5490 kann ein Kern mit reduziertem Befehlssatz (RISC, Reduced Instruction Set Computing), ein Kern mit komplexem Befehlssatz (CISC, Complex Instruction Set Computing), ein Kern mit sehr langen Befehlswörtern (VLIW, Very Long Instruction Word) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 5490 ein spezieller Kern sein, wie etwa, beispielsweise, ein Netzwerk- oder Kommunikationskern, eine Komprimierungsengine, ein Koprozessorkern, ein universeller Berechnungskern für Grafikprozessoreinheiten (GPGPU, General Purpose Computing Graphics Processing Unit), ein Grafikkern oder ähnliches.
  • Die Frontendeinheit 5430 umfasst eine Verzweigungsvorhersageeinheit 5432, gekoppelt mit einer Befehlscacheeinheit 5434, die mit einem Befehlsübersetzungspuffer (TLB, Instruction Translation Lookaside Buffer) 5436 gekoppelt ist, der mit einer Befehlsabrufeinheit 5438 gekoppelt ist, die mit einer Decodiereinheit 5440 gekoppelt ist. Die Decodiereinheit 5440 (oder Decodierer oder Decodierereinheit) kann Befehle (z. B. Makrobefehle) decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocodeeinstiegspunkte, Mikrobefehle oder Befehle oder andere Steuersignale decodieren, die aus den ursprünglichen Befehlen decodiert werden oder diese anderweitig widerspiegeln oder aus diesen abgeleitet sind. Die Decodiereinheit 5440 kann unter Verwendung verschiedener unterschiedlicher Mechanismen umgesetzt sein. Beispiele von geeigneten Mechanismen umfassen, sind aber nicht beschränkt auf, Nachschlagetabellen, Hardwareumsetzungen, programmierbare Logikarrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs, Read Only Memories) usw. In einer Ausführungsform umfasst der Kern 5490 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für gewisse Makrobefehle speichert (z. B. in Decodiereinheit 5440 oder anderweitig innerhalb der Frontendeinheit 5430). Die Decodiereinheit 5440 ist mit einer Umbenennungs-/Zuordnungseinheit 5452 in der Ausführungsengineeinheit 5450 gekoppelt.
  • Die Ausführungsengineeinheit 5450 umfasst die Umbenennungs-/Zuordnungseinheit 5452, gekoppelt mit einer Rückzugseinheit 5454 und einer Menge von einer oder mehreren Ablaufsteuerungseinheiten 5456. Die Ablaufsteuerungseinheit(en) 5456 stellt bzw. stellen eine beliebige Anzahl von unterschiedlichen Ablaufsteuerungseinheiten dar, einschließlich Reservierungsstationen, zentralem Befehlsfenster usw. Ablaufsteuerungseinheit(en) 5456 ist bzw. sind mit der bzw. den physischen Registerdateieinheiten 5458 gekoppelt. Jede der physischen Registerdatei(en)-Einheiten 5458 stellt eine oder mehrere physische Registerdateien dar, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie etwa skalare Ganzzahlen, skalare Gleitkommazahlen, gepackte Ganzzahlen, gepackte Gleitkommazahlen, Vektorganzzahlen, Vektorgleitkommazahlen, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physische Registerdatei(en)-Einheit 5458 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und universelle Register bereitstellen. Die physische(n) Registerdatei(en)einheit(en) 5458 wird bzw. werden von der Rückzugseinheit 5454 überlappt, um verschiedene Weisen darzustellen, in denen Registerumbenennung und reihenfolgeveränderte Ausführung umgesetzt werden können (z. B. unter Verwendung eines Neuordnungspuffers und einer Rückzugsregisterdatei; unter Verwendung einer Zukunftsdatei, eines Verlaufspuffers und einer Rückzugsregisterdatei; unter Verwendung einer Registerabbildung und einer Sammlung von Registern usw.). Die Rückzugseinheit 5454 und die physischen Registerdatei(en)einheit(en) 5458 ist bzw. sind mit dem bzw. den Ausführungsclustern 5460 gekoppelt. Das bzw. die Ausführungscluster 5460 umfassen eine Menge von einer oder mehreren Ausführungseinheiten 5462 und eine Menge von einer oder mehreren Speicherzugriffseinheiten 5464. Die Ausführungseinheiten 5462 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) auf verschiedenen Typen von Daten (z. B. skalare Gleitkommadaten, gepackte ganzzahlige Daten, gepackte Gleitkommadaten, Vektorganzzahl, Vektorgleitkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten, speziell für spezifische Funktionen oder Mengen von Funktionen bestimmt, umfassen können, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die allesamt alle Funktionen durchführen. Die Ablaufsteuerungseinheit(en) 5456, die physischen Registerdatei(en)einheit(en) 5458 und das bzw. die Ausführungscluster 5460 werden als möglicherweise mehrere gezeigt, da gewisse Ausführungsformen separate Pipelines für gewisse Typen von Daten/Operationen erzeugen (z. B. eine skalare ganzzahlige Pipeline, eine skalare Gleitkomma-/gepackte ganzzahlige/gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriffspipeline, die jeweils ihr(e) eigene(s) Ablaufsteuerungseinheit, physische Registerdatei(en)einheit und/oder Ausführungscluster haben - und im Falle einer separaten Speicherzugriffspipeline sind gewisse Ausführungsformen umgesetzt, bei denen nur das Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 5464 hat). Es versteht sich auch, dass dort, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines reihenfolgeveränderte Ausgabe-/Ausführungspipelines und die restlichen reihenfolgetreue sein können.
  • Die Menge von Speicherzugriffseinheiten 5464 ist mit der Speichereinheit 5470 gekoppelt, die eine Daten-TLB-Einheit 5472 umfasst, gekoppelt mit einer Datencacheeinheit 5474, gekoppelt mit einer Level-2-Cacheeinheit (L2) 5476. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 5464 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit beinhalten, von denen jede mit der Daten-TLB-Einheit 5472 in der Speichereinheit 5470 gekoppelt ist. Die Befehlscacheeinheit 5434 ist ferner mit einer Level-2-Cacheeinheit (L2) 5476 in der Speichereinheit 5470 gekoppelt. Die L2-Cacheeinheit 5476 ist mit einer oder mehreren anderen Cacheebenen und eventuell mit dem Hauptspeicher gekoppelt.
  • Als Beispiel kann die beispielhafte, Register umbenennende reihenfolgeveränderte Ausgabe-/Ausführungskernarchitektur die Pipeline 5400 wie folgt umsetzen: 1) der Befehlsabruf 5438 führt die Abruf- und die Längendecodierstufen 5402 und 5404 durch; 2) die Decodiereinheit 5440 führt die Decodierstufe 5406 durch; 3) die Umbenennungs-/Zuordnungseinheit 5452 führt die Zuordnungsstufe 5408 und die Umbenennungsstufe 5410 durch; 4) die Ablaufsteuerungseinheit(en) 5456 führt bzw. führen die Ablaufsteuerungsstufe 5412 durch; 5) die physische(n) Registerdatei(en)einheit(en) 5458 und die Speichereinheit 5470 führen die Registerlese-/Speicherlesestufe 5414 durch; das Ausführungscluster 5460 führt die Ausführungsstufe 5416 durch; 6) die Speichereinheit 5470 und die physische(n) Registerdatei(en)einheit(en) 5458 führen die Zurückschreibe-/Speicherschreibestufe 5418 durch; 7) verschiedene Einheiten können bei der Ausnahmenbehandlungsstufe 5422 beteiligt sein; und 8) die Rückzugseinheit 5454 und die physische(n) Registerdatei(en)einheit(en) 5458 führen die Übergabestufe 5424 durch.
  • Der Kern 5490 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie etwa NEON) von ARM Holdings aus Sunnyvale, CA) unterstützen, einschließlich der hier beschriebenen Befehle. In einer Ausführungsform umfasst der Kern 5490 Logik zum Unterstützen einer Befehlssatzerweiterung mit gepackten Daten (z. B. AVX1, AVX2), dadurch ermöglichend, dass Operationen, die von vielen Multimedia-Anwendungen verwendet werden, mit gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Mehrsträngigkeit (oder Multithreading, Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, einschließlich Zeitscheiben-Multithreading, Simultan-Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination davon (z. B. Zeitscheiben-Abruf und -Decodierung und Simultan-Multithreading danach, wie etwa bei der Intel® Hyperthreading-Technologie).
  • Während Registerumbenennung im Kontext von reihenfolgeveränderter (Out-of-order) Ausführung beschrieben ist, versteht es sich, dass Registerumbenennung in einer reihenfolgetreuen (In-order) Architektur verwendet werden kann. Während die dargestellte Ausführungsform des Prozessors auch separate Befehls- und Datencacheeinheiten 5434/5474 und eine gemeinsam genutzte L2-Cacheeinheit 5476 umfasst, können alternative Ausführungsformen einen einzelnen internen Cache für Befehle und Daten haben, wie etwa, beispielsweise, einen internen Level-1-Cache (L1) oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, die extern zum Kern und/oder zum Prozessor ist. Alternativ kann der gesamte Cache extern zum Kern und/oder zum Prozessor sein.
  • Spezifische beispielhafte reihenfolgetreue (In-order) Kernarchitektur
  • 55A-B stellen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen (In-order) Kernarchitektur dar, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne vom gleichen Typ und/oder anderen Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einigen festen Funktionslogiken, Speicher-E/A-Schnittstellen und anderen notwendigen E/A-Logiken, in Abhängigkeit von der Anwendung.
  • 55A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetzwerk 5502 und mit seinem lokalen Teilsatz des Level-2-Caches (L2) 5504, gemäß Ausführungsformen der Offenbarung. In einer Ausführungsform unterstützt eine Befehlsdecodiereinheit 5500 den x86-Befehlssatz mit einer Befehlssatzerweiterung mit gepackten Daten. Ein L1-Cache 5506 ermöglicht Zugriffe mit geringer Latenz auf einen Cachespeicher in die skalaren und Vektoreinheiten. Während in einer Ausführungsform (zum Vereinfachen der Konzeption) eine skalare Einheit 5508 und eine Vektoreinheit 5510 separate Registersätze verwenden (skalare Register 5512 bzw. Vektorregister 5514) und Daten, die zwischen ihnen transferiert werden, in Speicher geschrieben und dann von einem Level-1-Cache (L1) 5506 zurückgelesen werden, können alternative Ausführungsformen der Offenbarung einen unterschiedlichen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der Daten ermöglicht, zwischen den zwei Registerdateien transferiert zu werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 5504 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze unterteilt wird, einen pro Prozessorkern. Jeder Prozessorkern hat einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Caches 5504. Daten, die von einem Prozessorkern gelesen werden, werden in dessen L2-Cacheteilsatz 5504 gespeichert, und auf sie kann schnell zugegriffen werden, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cacheteilsätze zugreifen. Daten, die durch einen Prozessorkern geschrieben werden, werden in dessen eigenem L2-Cacheteilsatz 5504 gespeichert und werden, wenn nötig, aus anderen Teilsätzen ausgeräumt. Das Ringnetzwerk sichert Kohärenz der gemeinsam genutzten Daten. Das Ringnetzwerk ist bidirektional, um Agenten, wie etwa Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bit breit.
  • 55B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 55A gemäß Ausführungsformen der Offenbarung. 55B umfasst einen L1-Datencache 5506A als Teil des L1-Caches 5504, sowie weitere Details hinsichtlich der Vektoreinheit 5510 und der Vektorregister 5514. Insbesondere ist die Vektoreinheit 5510 eine 16-breite Vektorverarbeitungseinheit (VPU, Vector Processing Unit) (siehe die 16-breite ALU 5528), die einen oder mehrere Ganzzahlbefehle, Gleitkommabefehle mit einfacher Genauigkeit und Gleitkommabefehle mit doppelter Genauigkeit ausführt. Die VPU unterstützt Mischen der Registereingänge mit Mischeinheit 5520, numerische Umwandlung mit numerischen Umwandlungseinheiten 5522A-B und Replikation mit Replikationseinheit 5524 auf dem Speichereingang. Schreibmaskenregister 5526 ermöglichen das Prädizieren von resultierenden Vektorschreibvorgängen.
  • 56 ist ein Blockdiagramm eines Prozessors 5600, der mehr als einen Kern haben kann, der eine integrierte Speichersteuerung haben kann und der integrierte Grafik haben kann, gemäß Ausführungsformen der Offenbarung. Die Felder mit den durchgezogenen Linien in 56 stellen einen Prozessor 5600 mit einem einzelnen Kern 5602A, einen Systemagenten 5610, eine Menge von einer oder mehreren Bussteuerungseinheiten 5616 dar, während die optionale Hinzufügung von Feldern mit gestrichelten Linien einen alternativen Prozessor 5600 mit mehreren Kernen 5602A-N, eine Menge von einer oder mehreren integrierten Speichersteuerungseinheiten 5614 in der Systemagenteneinheit 5610 und spezieller Logik 5608 darstellt.
  • Daher können unterschiedliche Umsetzungen des Prozessors 5600 umfassen: 1) eine CPU, wobei die spezielle Logik 5608 integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik ist (die einen oder mehrere Kerne umfassen kann), und wobei die Kerne 5602A-N ein oder mehrere universelle Kerne sind (z. B. universelle reihenfolgetreue (In-order) Kerne, universelle reihenfolgeveränderte (Out-of-order) Kerne, eine Kombination aus den zwei); 2) einen Koprozessor, wobei die Kerne 5602A-N eine große Anzahl von speziellen Kernen sind, primär für Grafik und/oder wissenschaftliches (Durchsatz) Rechnen gedacht; und 3) einen Koprozessor, wobei die Kerne 5602A-N eine große Anzahl von universellen reihenfolgetreuen (In-order) Kernen sind. Daher kann der Prozessor 5600 ein universeller Prozessor, Koprozessor oder spezieller Prozessor sein, wie etwa, beispielsweise, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine universelle Grafikprozessor-Berechnungseinheit (GPGPU, General Purpose Graphics Processing Unit), ein Koprozessor mit hohem Durchsatz und vielen integrierten Kernen (MIC, Many Integrated Core) (30 oder mehr Kerne umfassend), ein eingebetteter Prozessor oder ähnliches. Der Prozessor kann auf einem oder mehreren Chips umgesetzt sein. Der Prozessor 5600 kann ein Teil eines und/oder kann auf einem oder mehreren Substraten unter Verwendung einer beliebigen Anzahl von Prozesstechnologien umgesetzt sein, wie etwa, beispielsweise, BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie umfasst eine oder mehrere Cacheebenen innerhalb der Kerne, einen Satz von einer oder mehreren gemeinsam genutzten Cacheeinheiten 5606 und externen Speicher (nicht gezeigt), gekoppelt mit der Menge von integrierten Speichersteuerungseinheiten 5614. Die Menge von gemeinsam genutzten Cacheeinheiten 5606 kann einen oder mehrere Mid-Level-Caches, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cacheebenen, einen Cache auf der untersten Ebene (LLC, Last Level Cache) und/oder Kombinationen davon umfassen. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 5612 die integrierte Grafiklogik 5608, die Menge von gemeinsam genutzten Cacheeinheiten 5606 und die Systemagenteneinheit 5610/die integrierte(n) Speichersteuerungseinheit(en) 5614 verbinden, können alternative Ausführungsformen eine beliebige Anzahl von wohlbekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cacheeinheiten 5206 und Kernen 5602-A-N gewahrt.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 5602A-N zu Multithreading fähig. Der Systemagent 5610 umfasst diejenigen Komponenten, die Kerne 5602A-N koordinieren und betreiben. Die Systemagenteneinheit 5610 kann, beispielsweise, eine Leistungssteuerungseinheit (PCU, Power Control Unit) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten, die zum Regeln des Leistungszustands der Kerne 5602A-N und der integrierten Grafiklogik 5608 benötigt werden, sein oder umfassen. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 5602A-N können homogen oder heterogen in Bezug auf den Architekturbefehlssatz sein; das heißt, zwei oder mehr der Kerne 5602A-N können zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere möglicherweise in der Lage sind, nur einen Teilsatz dieses Befehlssatzes oder einen unterschiedlichen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 57-60 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere im Fachgebiet bekannte Systemkonzeptionen und -auslegungen für Laptops, Desktops, handgestützte PCs, persönliche digitale Assistenten, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerkknoten, Weichen, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrosteuerungen, Mobiltelefone, tragbare Medienabspielvorrichtungen, handgestützte Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder andere Ausführungslogik, wie hier offenbart, zu integrieren, allgemein geeignet.
  • Jetzt Bezug nehmend auf 57 ist ein Blockdiagramm eines Systems 5700 in Übereinstimmung mit einer Ausführungsform der Offenbarung gezeigt. Das System 5700 kann einen oder mehrere Prozessoren 5710, 5715 umfassen, die mit einem Steuerungsknoten 5720 gekoppelt sind. In einer Ausführungsform umfasst der Steuerungsknoten 5720 einen Grafikspeichersteuerungsknoten (GMCH, Graphics Memory Controller Hub) 5790 und einen Eingabe-/Ausgabe-Knoten (IOH, Input/Output Hub) 5750 (die sich auf separaten Chips befinden können); der GMCH 5790 umfasst Speicher- und Grafiksteuerungen, mit denen Speicher 5740 und ein Koprozessor 5745 gekoppelt sind; der IOH 5750 koppelt Eingabe-/Ausgabevorrichtungen (E/A) 5760 mit dem GMCH 5790. Alternativ sind die Speicher- und/oder die Grafiksteuerung in den Prozessor integriert (wie hier beschrieben), der Speicher 5740 und der Koprozessor 5745 sind direkt mit dem Prozessor 5710 gekoppelt, und der Steuerungsknoten 5720 in einem einzelnen Chip mit dem IOH 5750. Speicher 5740 kann ein Kompilierermodul 5740A umfassen, um beispielsweise Code zu speichern, der, wenn ausgeführt, einen Prozessor veranlasst, ein beliebiges Verfahren dieser Offenbarung durchzuführen.
  • Die optionale Natur der zusätzlichen Prozessoren 5715 wird in 57 durch unterbrochene Linien gekennzeichnet. Jeder Prozessor 5710, 5715 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne umfassen und kann eine Version des Prozessors 5600 sein.
  • Der Speicher 5740 kann, beispielsweise, ein dynamischer Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), ein Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination aus den zweien sein. In zumindest einer Ausführungsform kommuniziert der Steuerungsknoten 5720 mit dem bzw. den Prozessoren 5710, 5715 über einen Multi-Drop-Bus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie etwa QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 5795.
  • In einer Ausführungsform ist der Koprozessor 5745 ein spezieller Prozessor, wie etwa, beispielsweise, ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder ähnliches. In einer Ausführungsform kann der Steuerungsknoten 5720 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden zwischen den physischen Ressourcen 5710, 5715 im Hinblick auf ein Spektrum von relevanten Metriken geben, einschließlich architektonisch, mikroarchitektonisch, thermisch, der Stromverbrauchscharakteristiken und ähnliches.
  • In einer Ausführungsform führt der Prozessor 5710 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Koprozessorbefehle sein. Der Prozessor 5710 erkennt, dass diese Koprozessorbefehle von einem Typ sind, der durch den angeführten Koprozessor 5745 ausgeführt werden soll. Entsprechend gibt der Prozessor 5710 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle darstellend) auf einem Koprozessorbus oder einer anderen Verbindung, an den Koprozessor 5745 aus. Ein oder mehrere Koprozessoren 5745 akzeptieren die empfangenen Koprozessorbefehle und führen sie aus.
  • Jetzt Bezug nehmend auf 58 ist ein Blockdiagramm eines ersten spezifischeren Systems 5800 in Übereinstimmung mit einer Ausführungsform der Offenbarung gezeigt. Wie in 58 gezeigt, ist Mehrprozessorsystem 5800 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 5870 und einen zweiten Prozessor 5880, die über eine Punkt-zu-Punkt-Verbindung 5850 gekoppelt sind. Jeder der Prozessoren 5870 und 5880 kann eine Version des Prozessors 5600 sein. In einer Ausführungsform der Offenbarung sind Prozessoren 5870 und 5880 Prozessoren 5710 bzw. 5715, während Koprozessor 5838 Koprozessor 5745 ist. In einer anderen Ausführungsform sind Prozessoren 5870 und 5880 Prozessor 5710 bzw. Koprozessor 5745.
  • Prozessoren 5870 und 5880 sind als integrierte Speichersteuerungseinheiten (IMC, Integrated Memory Controller) 5872 bzw. 5882 umfassend gezeigt. Prozessor 5870 umfasst auch als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt-Schnittstellen (P-P) 5876 und 5878; in ähnlicher Weise umfasst der zweite Prozessor 5880 P-P-Schnittstellen 5886 und 5888. Prozessoren 5870, 5880 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P) 5850 unter Verwendung von P-P-Schnittstellenschaltungen 5878, 5888 austauschen. Wie in 58 gezeigt, koppeln IMCs 5872 und 5882 die Prozessoren mit jeweiligen Speichern, insbesondere einem Speicher 5832 und einem Speicher 5834, die Teile des lokal mit den jeweiligen Prozessoren verbundenen Hauptspeichers sein können.
  • Prozessoren 5870, 5880 können auch jeweils Informationen mit einem Chipsatz 5890 über individuelle P-P-Schnittstellen 5852, 5854 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 5876, 5894, 5886, 5898 austauschen. Der Chipsatz 5890 kann optional Informationen mit dem Koprozessor 5838 über eine Hochleistungsschnittstelle 5839 austauschen. In einer Ausführungsform ist der Koprozessor 5838 ein spezieller Prozessor, wie etwa, beispielsweise, ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder ähnliches.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in einem der beiden Prozessoren oder außerhalb beider Prozessoren enthalten sein; jedoch kann er über eine P-P-Verschaltung mit den Prozessoren verbunden sein, sodass lokale Cache-Informationen eines oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Chipsatz 5890 kann mit einem ersten Bus 5816 über eine Schnittstelle 5896 gekoppelt sein. In einer Ausführungsform kann der erste Bus 5816 ein peripherer Komponentenverbindungsbus (PCI, Peripheral Component Interconnect) oder ein Bus, wie etwa ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation sein, obwohl der Schutzumfang der vorliegenden Offenbarung nicht so beschränkt ist.
  • Wie in 58 gezeigt, können verschiedene E/A-Vorrichtungen 5814 mit dem ersten Bus 5816 gekoppelt sein, zusammen mit einer Busbrücke 5818, die den ersten Bus 5816 mit einem zweiten Bus 5820 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 5815, wie etwa Koprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie etwa, z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungseinheiten (DSPs)), feldprogrammierbare Gate-Arrays oder jeder andere Prozessor, mit dem ersten Bus 5816 gekoppelt. In einer Ausführungsform kann der zweite Bus 5820 ein Bus mit niedriger Pinzahl (LPC, Low Pin Count) sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 5820 gekoppelt sein, einschließlich, beispielsweise eine Tastatur und/oder eine Maus 5822, Kommunikationsvorrichtungen 5827 und eine Speichereinheit 5828, wie etwa ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die, in einer Ausführungsform, Befehle/Code und Daten 5830 umfassen kann. Ferner kann eine Audio-E/A 5824 mit dem zweiten Bus 5820 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur aus 58 einen Multi-Drop-Bus oder eine andere solche Architektur umsetzen.
  • Jetzt Bezug nehmend auf 59 ist ein Blockdiagramm eines zweiten spezifischeren Systems 5900 in Übereinstimmung mit einer Ausführungsform der Offenbarung gezeigt. Ähnliche Elemente in 58 und 59 tragen ähnliche Bezugszeichen, und gewisse Aspekte von 58 wurden in 59 ausgelassen, um Eintrüben von anderen Aspekten aus 59 zu verhindern.
  • 59 stellt dar, dass die Prozessoren 5870, 5880 integrierten Speicher und E/A-Steuerlogik („CL“, Control Logic) 5872 bzw. 5882 umfassen können. Daher umfasst die CL 5872, 5882 integrierte Speichersteuerungseinheiten und umfasst E/A-Steuerlogik. 59 stellt dar, dass nicht nur die Speicher 5832, 5834 mit der CL 5872, 5882 gekoppelt sind, sondern dass auch E/A-Vorrichtungen 5914 ebenfalls mit der Steuerlogik 5872, 5882 gekoppelt sind. Ältere E/A-Vorrichtungen 5915 sind mit dem Chipsatz 5890 gekoppelt.
  • Jetzt Bezug nehmend auf 60 ist ein Blockdiagramm eines SoC 6000 in Übereinstimmung mit einer Ausführungsform der Offenbarung gezeigt. Ähnliche Elemente in 56 tragen ähnliche Bezugszeichen. Außerdem sind Felder mit gestrichelten Linien optionale Merkmale auf weiterentwickelten SoCs. In 60 ist bzw. sind Verbindungseinheit(en) 6002 gekoppelt mit: einem Anwendungsprozessor 6010, der einen Satz von einem oder mehreren Kernen 202A-N und gemeinsam genutzte Cacheeinheit(en) 5606 umfasst; einer Systemagenteneinheit 5610; einer oder mehreren Bussteuerungseinheiten 5616; einer oder mehreren integrierten Speichersteuerungseinheiten 5614; einem Satz aus einem oder mehreren Koprozessoren 6020, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen kann; einer statischen Direktzugriffsspeichereinheit (SRAM, Static Random Access Memory) 6030; einer Direktzugriffsspeichereinheit (DMA, Direct Memory Access) 6032; und einer Anzeigeeinheit 6040 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst bzw. umfassen der/die Koprozessor(en) 6020 einen speziellen Prozessor, wie etwa, beispielsweise, einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder ähnliches.
  • Hier offenbarte Ausführungsformen (z. B. der Mechanismen) können in Hardware, Software, Firmware oder einer Kombination aus solchen Umsetzungsansätzen umgesetzt sein. Ausführungsformen der Offenbarung können als Computerprogramm oder Programmcode, der auf programmierbaren Systemen, zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nichtflüchtiger Speicher und/oder Speicherelemente), zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfassend, ausgeführt wird.
  • Programmcode, wie etwa Code 5830, dargestellt in 58, kann auf die Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Im Zusammenhang mit dieser Anmeldung umfasst ein Verarbeitungssystem jedes System, das einen Prozessor hat, wie etwa, beispielsweise, einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC, Application Specific Integrated Circuit) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache umgesetzt sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch, wenn gewünscht, in Assembler- oder Maschinensprache umgesetzt sein. Tatsächlich sind die hier beschriebenen Mechanismen in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch repräsentative Befehle, gespeichert auf einem maschinenlesbaren Medium, das unterschiedliche Logik innerhalb des Prozessors repräsentiert, umgesetzt sein, die, wenn von einer Maschine gelesen, die Maschine veranlassen, Logik zu erzeugen, um die hier beschriebenen Techniken durchzuführen. Solche Repräsentationen, auch als „IP-Kerne“ bekannt, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Fertigungseinrichtungen bereitgestellt werden, um in die Fertigungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich fertigen.
  • Solche maschinenlesbaren Speichermedien können unter anderem umfassen: nicht-flüchtige, greifbare Anordnungen von Artikeln, die durch eine Maschine gefertigt oder gebildet werden, einschließlich Speichermedien, wie etwa Festplatten, jeder andere Typ von Platte, einschließlich Floppy Disks, optische Platten, CD-Nur-Lese-Speicher (CD-ROMs, Compact Disk Read-Only Memories), wiederbeschreibbare Compact Disks (CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen, wie etwa Nur-Lese-Speicher (ROMs, Read-Only Memories), Direktzugriffsspeicher (RAMs, Random Access Memories), wie etwa dynamische Direktzugriffsspeicher (DRAMs, Dynamic Random Access Memories), statische Direktzugriffsspeicher (SRAMs, Static Random Access Memories), löschbare, programmierbare Nur-Lese-Speicher (EPROMs, Erasable Programmable Read-Only Memories), Flash-Speicher, elektrisch löschbare, programmierbare Nur-Lese-Speicher (EEPROMs, Electrically Erasable Programmable Read-Only Memories), Phasenwechselspeicher (PCM, Phase Change Memory), magnetische oder optische Karten oder jeden anderen Typ von zum Speichern von elektronischen Befehlen geeigneten Medien.
  • Entsprechend umfassen Ausführungsformen der Offenbarung auch nicht-flüchtige, materielle, maschinenlesbare Medien, Befehle enthaltend oder Konzeptionsdaten enthaltend, wie etwa Hardwarebeschreibungssprache (HDL, Hardware Description Language), die Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale, wie hier beschrieben, definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulierung (einschließlich binäre Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere andere Befehle, die durch den Kern zu verarbeiten sind, übersetzen (z. B. unter Verwendung von statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilierung), morphen, emulieren oder anderweitig umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination daraus umgesetzt sein. Der Befehlsumwandler kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors sein.
  • 61 ist ein Blockdiagramm, die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz abgesetzt darstellend, gemäß Ausführungsformen der Offenbarung. In der dargestellten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl der Befehlsumwandler alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus umgesetzt sein kann. 61 zeigt, wie ein Programm in einer höheren Sprache 6102 mit einem x86-Compiler 6104 kompiliert werden kann, um x86-Binärcode 6106 zu erzeugen, der systemintern durch einen Prozessor mit zumindest einem x86-Befehlssatzkern 6116 ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 6116 repräsentiert jeden Prozessor, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel® Prozessor mit zumindest einem x86-Befehlssatzkern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel® x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, dazu bestimmt, auf einem Intel® Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt zu werden, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel® Prozessor mit zumindest einem x86-Befehlssatzkern. Der x86-Compiler 6104 repräsentiert einen Compiler, der betreibbar ist, um x86-Binärcode 6106 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 6116 ausgeführt werden kann. In ähnlicher Weise zeigt 61, wie das Programm in der höheren Sprache 6102 mit einem alternativen Befehlssatzcompiler 6108 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 6110 zu erzeugen, der systemintern durch einen Prozessor ohne zumindest einen x86-Befehlssatzkern 6114 (z. B. einen Prozessor mit Kernen, die den MIPS Befehlssatz von MIPS Technologies aus Sunnyvale, CA ausführen und/oder den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Befehlsumwandler 6112 wird verwendet, um den x86-Binärcode 6106 in Code umzuwandeln, der systemintern durch den Prozessor ohne einen x86-Befehlssatzkern 6114 ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 6110, da ein Befehlsumwandler, der dies erreichen könnte, schwierig zu erstellen ist; allerdings erfüllt der umgewandelte Code die allgemeine Operation und besteht aus Befehlen aus dem alternativen Befehlssatz. Daher repräsentiert der Befehlsumwandler 6112 Software, Firmware, Hardware oder eine Kombination daraus, die, durch Emulierung, Simulation oder jeden anderen Prozess, einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern hat, ermöglicht, den x86-Binärcode 6106 auszuführen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • CL 58725882 [0378]

Claims (25)

  1. Prozessor, der Folgendes umfasst: mehrere Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn ein eingehender Operand bei den mehreren Verarbeitungselementen eingeht; und eine Auslegungssteuerung, gekoppelt mit einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, wobei die erste Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die Auslegungssteuerung dazu dient, das Verbindungsnetzwerk zwischen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist.
  2. Prozessor nach Anspruch 1, wobei das Verbindungsnetzwerk ein Bevorzugungszustandsregister an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfasst, um eine Schaltung an der Grenze ein- und auszuschalten, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit im Bevorzugungszustandsregister durch die Auslegungssteuerung auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister durch die Auslegungssteuerung auf einen zweiten Wert gesetzt ist.
  3. Prozessor nach Anspruch 1, wobei ein erster Kontext dazu dient, auf der ersten Teilmenge der mehreren Verarbeitungselemente auszuführen, und ein zweiter Kontext dazu dient, gleichzeitig auf der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszuführen, ohne Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  4. Prozessor nach Anspruch 1, wobei die Auslegungssteuerung dazu dient, Kommunikation auf einem Vorwärtsdatenpfad oder einem Rückwärtsfluss-Flusssteuerungspfad, der mit dem Vorwärtsdatenpfad gepaart ist, des Verbindungsnetzwerks zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  5. Prozessor nach Anspruch 1, wobei die Auslegungssteuerung dazu dient, das Verbindungsnetzwerk zu veranlassen, alle Signale an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auf Null zu ziehen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  6. Prozessor nach Anspruch 1, wobei die Auslegungssteuerung mit der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die erste Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist und wobei die dritte, unterschiedliche Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die Auslegungssteuerung dazu dient, das Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist.
  7. Prozessor nach Anspruch 1, wobei die Auslegungssteuerung dazu dient, die erste Teilmenge und die zweite, unterschiedliche Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen auszulegen, und, für einen angeforderten Kontextwechsel, die erste Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen auszulegen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Datenfluss des zweiten Kontexts in die Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente von der Ausgabe der ersten Teilmenge der mehreren Verarbeitungselemente zu blocken, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente abgeschlossen sind, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist.
  8. Prozessor nach einem der Ansprüche 1-7, wobei die Auslegungssteuerung dazu dient, das Bevorzugungsbit während der Laufzeit der Operation zu modifizieren.
  9. Verfahren, das Folgendes umfasst: Durchführen einer Operation eines Datenflussgraphen mit einem Verbindungsnetzwerk und mehreren Verarbeitungselementen eines Prozessors, wenn ein eingehender Operanden menge an den mehreren Verarbeitungselementen eingeht, wobei der Prozessor die mehreren Verarbeitungselemente und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen umfasst und einen Datenflussgraphen hat, umfassend mehrere Knoten, der über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt ist, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist; und Auslegen, mit einer Auslegungssteuerung des Prozessors, des Verbindungsnetzwerks zwischen einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist.
  10. Verfahren nach Anspruch 9, wobei das Auslegen umfasst, dass die Auslegungssteuerung ein Bevorzugungsbit in einem Bevorzugungszustandsregister an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente aktualisiert, um eine Schaltung an der Grenze ein- und auszuschalten, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen zweiten Wert gesetzt ist.
  11. Verfahren nach Anspruch 9, ferner umfassend Ausführen eines ersten Kontexts auf der ersten Teilmenge der mehreren Verarbeitungselemente und gleichzeitiges Ausführen eines zweiten Kontexts auf der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, ohne Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  12. Verfahren nach Anspruch 9, wobei das Auslegen ferner umfasst, Kommunikation auf einem Vorwärtsdatenpfad oder einem Rückwärtsfluss-Flusssteuerungspfad, der mit dem Vorwärtsdatenpfad gepaart ist, des Verbindungsnetzwerks zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu verhindern, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  13. Verfahren nach Anspruch 9, wobei das Auslegen ferner umfasst, das Verbindungsnetzwerk zu veranlassen, alle Signale an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auf Null zu ziehen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  14. Verfahren nach Anspruch 9, wobei das Auslegen ferner Auslegen des Verbindungsnetzwerks zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfasst, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist.
  15. Verfahren nach Anspruch 9, ferner umfassend Auslegen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen, und, für einen angeforderten Kontextwechsel, Auslegen der ersten Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente von einer Ausgabe der ersten Teilmenge der mehreren Verarbeitungselemente, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente abgeschlossen sind, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist.
  16. Verfahren nach einem der Ansprüche 9-15, ferner umfassend, dass die Auslegungssteuerung das Bevorzugungsbit während der Laufzeit der Operation modifiziert.
  17. Nichtflüchtiges maschinenlesbares Medium, das Code speichert, der, wenn er von einer Maschine ausgeführt wird, die Maschine veranlasst, ein Verfahren durchzuführen, das Folgendes umfasst: Durchführen einer Operation eines Datenflussgraphen mit einem Verbindungsnetzwerk und mehreren Verarbeitungselementen eines Prozessors, wenn ein eingehender Operanden menge an den mehreren Verarbeitungselementen eingeht, wobei der Prozessor die mehreren Verarbeitungselemente und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen umfasst und einen Datenflussgraphen hat, umfassend mehrere Knoten, der über die mehreren Verarbeitungselemente des Prozessors und das Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen des Prozessors gelegt ist, wobei jeder Knoten als ein Datenflussoperator im Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist; und Auslegen, mit einer Auslegungssteuerung des Prozessors, des Verbindungsnetzwerks zwischen einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist.
  18. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Auslegen umfasst, dass die Auslegungssteuerung ein Bevorzugungsbit in einem Bevorzugungszustandsregister an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente aktualisiert, um eine Schaltung an der Grenze ein- und auszuschalten, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit im Bevorzugungszustandsregister auf einen zweiten Wert gesetzt ist.
  19. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Verfahren ferner Ausführen eines ersten Kontexts auf der ersten Teilmenge der mehreren Verarbeitungselemente und gleichzeitiges Ausführen eines zweiten Kontexts auf der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfasst, ohne Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  20. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Auslegen ferner umfasst, Kommunikation auf einem Vorwärtsdatenpfad oder einem Rückwärtsfluss-Flusssteuerungspfad, der mit dem Vorwärtsdatenpfad gepaart ist, des Verbindungsnetzwerks zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu verhindern, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  21. Nicht-flüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Auslegen ferner umfasst, das Verbindungsnetzwerk zu veranlassen, alle Signale an einer Grenze zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente auf Null zu ziehen, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist.
  22. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Auslegen ferner Auslegen des Verbindungsnetzwerks zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und einer dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente umfasst, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn das Bevorzugungsbit auf den ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge, der zweiten, unterschiedlichen Teilmenge und der dritten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist.
  23. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Verfahren ferner Auslegen der ersten Teilmenge und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen ersten Kontext eines Datenflussgraphen, und, für einen angeforderten Kontextwechsel, Auslegen der ersten Teilmenge der mehreren Verarbeitungselemente entsprechend Auslegungsinformationen für einen zweiten Kontext eines Datenflussgraphen, nachdem ausstehende Operationen des ersten Kontexts in der ersten Teilmenge abgeschlossen sind, und Blockieren des Datenflusses des zweiten Kontexts in eine Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente von einer Ausgabe der ersten Teilmenge der mehreren Verarbeitungselemente, bis ausstehende Operationen des ersten Kontexts in der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente abgeschlossen sind, wenn das Bevorzugungsbit auf den zweiten Wert gesetzt ist, umfasst.
  24. Nichtflüchtiges maschinenlesbares Medium nach einem der Ansprüche 17-23, wobei das Verfahren ferner umfasst, dass die Auslegungssteuerung das Bevorzugungsbit während der Laufzeit der Operation modifiziert.
  25. Prozessor, der Folgendes umfasst: mehrere Verarbeitungselemente; ein Verbindungsnetzwerk zwischen den mehreren Verarbeitungselementen zum Empfangen einer Eingabe eines Datenflussgraphen, umfassend mehrere Knoten, wobei der Datenflussgraph über das Verbindungsnetzwerk und die mehreren Verarbeitungselemente zu legen ist, wobei jeder Knoten als ein Datenflussoperator in dem Verbindungsnetzwerk und den mehreren Verarbeitungselementen dargestellt ist, und die mehreren Verarbeitungselemente dazu dienen, eine Operation durchzuführen, wenn ein eingehender Operand bei den mehreren Verarbeitungselementen eingeht; und Mittel, gekoppelt mit einer ersten Teilmenge und einer zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente, wobei die erste Teilmenge der mehreren Verarbeitungselemente eine Ausgabe hat, die mit einer Eingabe der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente gekoppelt ist, wobei die Mittel dazu dienen, das Verbindungsnetzwerk auszulegen, um Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente nicht zu erlauben, wenn ein Bevorzugungsbit auf einen ersten Wert gesetzt ist, und Kommunikation auf dem Verbindungsnetzwerk zwischen der ersten Teilmenge der mehreren Verarbeitungselemente und der zweiten, unterschiedlichen Teilmenge der mehreren Verarbeitungselemente zu erlauben, wenn das Bevorzugungsbit auf einen zweiten Wert gesetzt ist.
DE102018006889.8A 2017-09-30 2018-08-30 Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array Pending DE102018006889A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/721,809 US10445098B2 (en) 2017-09-30 2017-09-30 Processors and methods for privileged configuration in a spatial array
US15/721,809 2017-09-30

Publications (1)

Publication Number Publication Date
DE102018006889A1 true DE102018006889A1 (de) 2019-04-04

Family

ID=65728085

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018006889.8A Pending DE102018006889A1 (de) 2017-09-30 2018-08-30 Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array

Country Status (3)

Country Link
US (1) US10445098B2 (de)
CN (1) CN109597459A (de)
DE (1) DE102018006889A1 (de)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013100783A1 (en) 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US10474375B2 (en) 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10515049B1 (en) 2017-07-01 2019-12-24 Intel Corporation Memory circuits and methods for distributed memory hazard detection and error recovery
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10380063B2 (en) 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
US10564980B2 (en) 2018-04-03 2020-02-18 Intel Corporation Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10990364B2 (en) 2018-06-06 2021-04-27 Ab Initio Technology Llc Updating executable graphs
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US10776087B2 (en) * 2018-06-25 2020-09-15 Intel Corporation Sequence optimizations in a high-performance computing environment
US10459866B1 (en) * 2018-06-30 2019-10-29 Intel Corporation Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator
US10418125B1 (en) * 2018-07-19 2019-09-17 Marvell Semiconductor Write and read common leveling for 4-bit wide DRAMs
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11188497B2 (en) * 2018-11-21 2021-11-30 SambaNova Systems, Inc. Configuration unload of a reconfigurable data processor
US10831507B2 (en) 2018-11-21 2020-11-10 SambaNova Systems, Inc. Configuration load of a reconfigurable data processor
US10761822B1 (en) * 2018-12-12 2020-09-01 Amazon Technologies, Inc. Synchronization of computation engines with non-blocking instructions
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (de) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. System und verfahren zur kollektiven kommunikation
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US20200409709A1 (en) * 2019-06-29 2020-12-31 Intel Corporation Apparatuses, methods, and systems for time-multiplexing in a configurable spatial accelerator
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
WO2021026225A1 (en) * 2019-08-08 2021-02-11 Neuralmagic Inc. System and method of accelerating execution of a neural network
US11080227B2 (en) * 2019-08-08 2021-08-03 SambaNova Systems, Inc. Compiler flow logic for reconfigurable architectures
US11900156B2 (en) 2019-09-24 2024-02-13 Speedata Ltd. Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11175922B1 (en) * 2020-04-28 2021-11-16 Speedata Ltd. Coarse-grain reconfigurable array processor with concurrent handling of multiple graphs on a single grid
US11354157B2 (en) * 2020-04-28 2022-06-07 Speedata Ltd. Handling multiple graphs, contexts and programs in a coarse-grain reconfigurable array processor
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
US11409540B1 (en) * 2021-07-16 2022-08-09 SambaNova Systems, Inc. Routing circuits for defect repair for a reconfigurable data processor
US11556494B1 (en) 2021-07-16 2023-01-17 SambaNova Systems, Inc. Defect repair for a reconfigurable data processor for homogeneous subarrays
US11327771B1 (en) 2021-07-16 2022-05-10 SambaNova Systems, Inc. Defect repair circuits for a reconfigurable data processor
US20230195478A1 (en) * 2021-12-21 2023-06-22 SambaNova Systems, Inc. Access To Intermediate Values In A Dataflow Computation
CN115048296B (zh) * 2022-06-09 2024-05-31 中金金融认证中心有限公司 用于对内存屏障指令有效性进行验证的方法和相关产品
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
CN117951346B (zh) * 2024-03-26 2024-05-28 深存科技(无锡)有限公司 面向向量数据库的混合加速架构

Family Cites Families (218)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US672177A (en) 1900-02-08 1901-04-16 William H Metcalf Inhaler.
ATE200357T1 (de) 1991-07-08 2001-04-15 Seiko Epson Corp Risc-prozessor mit dehnbarer architektur
JPH0713945A (ja) 1993-06-16 1995-01-17 Nippon Sheet Glass Co Ltd 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造
US5574944A (en) 1993-12-15 1996-11-12 Convex Computer Corporation System for accessing distributed memory by breaking each accepted access request into series of instructions by using sets of parameters defined as logical channel context
US5787029A (en) 1994-12-19 1998-07-28 Crystal Semiconductor Corp. Ultra low power multiplier
US5734601A (en) 1995-01-30 1998-03-31 Cirrus Logic, Inc. Booth multiplier with low power, high performance input circuitry
US6020139A (en) 1995-04-25 2000-02-01 Oridigm Corporation S-adenosyl methionine regulation of metabolic pathways and its use in diagnosis and therapy
US5805827A (en) 1996-03-04 1998-09-08 3Com Corporation Distributed signal processing for data channels maintaining channel bandwidth
US6088780A (en) 1997-03-31 2000-07-11 Institute For The Development Of Emerging Architecture, L.L.C. Page table walker that uses at least one of a default page size and a page size selected for a virtual address space to position a sliding field in a virtual address
US5840598A (en) 1997-08-14 1998-11-24 Micron Technology, Inc. LOC semiconductor assembled with room temperature adhesive
US6604120B1 (en) 1997-09-04 2003-08-05 Cirrus Logic, Inc. Multiplier power saving design
US5930484A (en) 1997-09-18 1999-07-27 International Business Machines Corporation Method and system for input/output control in a multiprocessor system utilizing simultaneous variable-width bus access
US6141747A (en) 1998-09-22 2000-10-31 Advanced Micro Devices, Inc. System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6314503B1 (en) 1998-12-30 2001-11-06 Emc Corporation Method and apparatus for managing the placement of data in a storage system to achieve increased system performance
US6295571B1 (en) 1999-03-19 2001-09-25 Times N Systems, Inc. Shared memory apparatus and method for multiprocessor systems
JP5285828B2 (ja) 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
WO2000068784A1 (en) 1999-05-06 2000-11-16 Koninklijke Philips Electronics N.V. Data processing device, method for executing load or store instructions and method for compiling programs
US6393536B1 (en) 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
US6205533B1 (en) 1999-08-12 2001-03-20 Norman H. Margolus Mechanism for efficient data access and communication in parallel computations on an emulated spatial lattice
US7911960B1 (en) 1999-08-13 2011-03-22 International Business Machines Corporation Delayed-start method for minimizing internal switch congestion
JP2001109661A (ja) 1999-10-14 2001-04-20 Hitachi Ltd キャッシュメモリの割当方法及びオペレーティングシステム及びそのオペレーティングシステムを有するコンピュータシステム
US6601126B1 (en) 2000-01-20 2003-07-29 Palmchip Corporation Chip-core framework for systems-on-a-chip
CA2430166A1 (en) 2000-11-28 2002-06-06 Seachange International, Inc. Content/service handling and delivery
GB2370381B (en) * 2000-12-19 2003-12-24 Picochip Designs Ltd Processor architecture
GB2374443B (en) 2001-02-14 2005-06-08 Clearspeed Technology Ltd Data processing architectures
WO2005045692A2 (en) 2003-08-28 2005-05-19 Pact Xpp Technologies Ag Data processing device and method
US6725364B1 (en) 2001-03-08 2004-04-20 Xilinx, Inc. Configurable processor system
GB2374242B (en) 2001-04-07 2005-03-16 Univ Dundee Integrated circuit and related improvements
EP1402379A4 (de) 2001-05-25 2009-08-12 Annapolis Micro Systems Inc Verfahren und vorrichtung zur modellierung von datenflusssystemen und der realisierung in hardware
US20020184291A1 (en) 2001-05-31 2002-12-05 Hogenauer Eugene B. Method and system for scheduling in an adaptable computing engine
US6874079B2 (en) 2001-07-25 2005-03-29 Quicksilver Technology Adaptive computing engine with dataflow graph based sequencing in reconfigurable mini-matrices of composite functional blocks
US20030023830A1 (en) 2001-07-25 2003-01-30 Hogenauer Eugene B. Method and system for encoding instructions for a VLIW that reduces instruction memory requirements
US8412915B2 (en) 2001-11-30 2013-04-02 Altera Corporation Apparatus, system and method for configuration of adaptive integrated circuitry having heterogeneous computational elements
US20030105799A1 (en) 2001-12-03 2003-06-05 Avaz Networks, Inc. Distributed processing architecture with scalable processing layers
US20040022094A1 (en) 2002-02-25 2004-02-05 Sivakumar Radhakrishnan Cache usage for concurrent multiple streams
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
AU2003228353A1 (en) 2002-03-22 2003-10-13 Michael F. Deering Scalable high performance 3d graphics
US7987479B1 (en) 2002-03-28 2011-07-26 Cisco Technology, Inc. System and method for distribution of content over a network
US7200735B2 (en) 2002-04-10 2007-04-03 Tensilica, Inc. High-performance hybrid processor with configurable execution units
JP2004005249A (ja) 2002-05-31 2004-01-08 Fujitsu Ltd 負荷分散型マルチプロセッサに対する信号振分装置
US6986131B2 (en) 2002-06-18 2006-01-10 Hewlett-Packard Development Company, L.P. Method and apparatus for efficient code generation for modulo scheduled uncounted loops
US20040001458A1 (en) 2002-06-27 2004-01-01 Motorola, Inc. Method and apparatus for facilitating a fair access to a channel by participating members of a group communication system
US7486678B1 (en) 2002-07-03 2009-02-03 Greenfield Networks Multi-slice network processor
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US6986023B2 (en) 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7181578B1 (en) 2002-09-12 2007-02-20 Copan Systems, Inc. Method and apparatus for efficient scalable storage management
US6983456B2 (en) 2002-10-31 2006-01-03 Src Computers, Inc. Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms
US7047370B1 (en) 2003-01-14 2006-05-16 Cisco Technology, Inc. Full access to memory interfaces via remote request
WO2004114577A2 (en) 2003-06-18 2004-12-29 Centillium Communications, Inc. Event scheduling for multi-port xdsl transceivers
US7714870B2 (en) 2003-06-23 2010-05-11 Intel Corporation Apparatus and method for selectable hardware accelerators in a data driven architecture
US7088371B2 (en) 2003-06-27 2006-08-08 Intel Corporation Memory command handler for use in an image signal processor having a data driven architecture
US20050007618A1 (en) * 2003-07-07 2005-01-13 Thomason Tamra L. System for restricted execution of user requests for printing data
US20130111188A9 (en) 2003-07-24 2013-05-02 Martin Vorbach Low latency massive parallel data processing device
US7257665B2 (en) 2003-09-29 2007-08-14 Intel Corporation Branch-aware FIFO for interprocessor data sharing
US20050138323A1 (en) 2003-12-18 2005-06-23 Intel Corporation, A Delaware Corporation Accumulator shadow register systems and methods
JP4104538B2 (ja) 2003-12-22 2008-06-18 三洋電機株式会社 リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路
TWI323584B (en) 2003-12-26 2010-04-11 Hon Hai Prec Ind Co Ltd Method and system for burning mac address
US7490218B2 (en) 2004-01-22 2009-02-10 University Of Washington Building a wavecache
JP4502650B2 (ja) 2004-02-03 2010-07-14 日本電気株式会社 アレイ型プロセッサ
JP4546775B2 (ja) 2004-06-30 2010-09-15 富士通株式会社 時分割多重処理可能なリコンフィギュラブル回路
US7509484B1 (en) 2004-06-30 2009-03-24 Sun Microsystems, Inc. Handling cache misses by selectively flushing the pipeline
US7877748B2 (en) 2004-11-19 2011-01-25 The United States Of America As Represented By The Secretary Of The Air Force Method and apparatus for timing information flow in a distributed system
US7594102B2 (en) 2004-12-15 2009-09-22 Stmicroelectronics, Inc. Method and apparatus for vector execution on a scalar machine
US7613886B2 (en) 2005-02-08 2009-11-03 Sony Computer Entertainment Inc. Methods and apparatus for synchronizing data access to a local memory in a multi-processor system
US7546331B2 (en) 2005-03-17 2009-06-09 Qualcomm Incorporated Low power array multiplier
US7793040B2 (en) 2005-06-01 2010-09-07 Microsoft Corporation Content addressable memory architecture
JP4536618B2 (ja) 2005-08-02 2010-09-01 富士通セミコンダクター株式会社 リコンフィグ可能な集積回路装置
US20160098279A1 (en) 2005-08-29 2016-04-07 Searete Llc Method and apparatus for segmented sequential storage
US8275976B2 (en) 2005-08-29 2012-09-25 The Invention Science Fund I, Llc Hierarchical instruction scheduler facilitating instruction replay
US8099556B2 (en) 2005-09-13 2012-01-17 Arm Limited Cache miss detection in a data processing apparatus
JP2007079958A (ja) 2005-09-14 2007-03-29 Hitachi Ltd 記憶制御装置、データ処理方法、及びコンピュータプログラム
US8620623B2 (en) 2005-11-14 2013-12-31 Globaltrak, Llc Hierarchical and distributed information processing architecture for a container security system
US20070143546A1 (en) 2005-12-21 2007-06-21 Intel Corporation Partitioned shared cache
EP1808774A1 (de) 2005-12-22 2007-07-18 St Microelectronics S.A. Hierarchische wiederkonfigurierbare Computerarchitektur
JP4795025B2 (ja) 2006-01-13 2011-10-19 キヤノン株式会社 ダイナミックリコンフィギャラブルデバイス、制御方法、及びプログラム
US8595279B2 (en) 2006-02-27 2013-11-26 Qualcomm Incorporated Floating-point processor with reduced power requirements for selectable subprecision
WO2007133101A1 (en) 2006-05-16 2007-11-22 Intel Corporation Floating point addition for different floating point formats
EP2021921A2 (de) 2006-05-17 2009-02-11 Nxp B.V. Mehrfachverarbeitungssystem und verfarhen zum ausführen einer vielzahl von datenverarbeitungsaufgaben
US7594055B2 (en) 2006-05-24 2009-09-22 International Business Machines Corporation Systems and methods for providing distributed technology independent memory controllers
US8456191B2 (en) 2006-06-21 2013-06-04 Element Cxi, Llc Data-driven integrated circuit architecture
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US8010766B2 (en) 2006-10-12 2011-08-30 International Business Machines Corporation Increasing buffer locality during multiple table access operations
US7660911B2 (en) 2006-12-20 2010-02-09 Smart Modular Technologies, Inc. Block-based data striping to flash memory
JPWO2008087779A1 (ja) 2007-01-19 2010-05-06 日本電気株式会社 アレイ型プロセッサおよびデータ処理システム
JP4933284B2 (ja) 2007-01-25 2012-05-16 株式会社日立製作所 ストレージ装置及び負荷分散方法
US8543742B2 (en) 2007-02-22 2013-09-24 Super Talent Electronics, Inc. Flash-memory device with RAID-type controller
US8321597B2 (en) 2007-02-22 2012-11-27 Super Talent Electronics, Inc. Flash-memory device with RAID-type controller
US7479802B2 (en) 2007-03-09 2009-01-20 Quadric, Inc Programmable logic integrated circuit for digital algorithmic functions
US7613909B2 (en) 2007-04-17 2009-11-03 Xmos Limited Resuming thread to service ready port transferring data externally at different clock rate than internal circuitry of a processor
US7779298B2 (en) 2007-06-11 2010-08-17 International Business Machines Corporation Distributed job manager recovery
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8347312B2 (en) 2007-07-06 2013-01-01 Xmos Limited Thread communications
US7822951B2 (en) 2007-08-01 2010-10-26 Advanced Micro Devices, Inc. System and method of load-store forwarding
US7895463B2 (en) 2007-08-28 2011-02-22 Cisco Technology, Inc. Redundant application network appliances using a low latency lossless interconnect link
DE212007000102U1 (de) 2007-09-11 2010-03-18 Core Logic, Inc. Rekonfigurierbarer Array-Prozessor für Gleitkomma-Operationen
KR101312281B1 (ko) 2007-11-06 2013-09-30 재단법인서울대학교산학협력재단 프로세서 및 메모리 제어 방법
US8078839B2 (en) 2007-12-13 2011-12-13 Wave Semiconductor Concurrent processing element system, and method
US9219603B2 (en) 2008-01-09 2015-12-22 International Business Machines Corporation System and method for encryption key management in a mixed infrastructure stream processing framework
US8160975B2 (en) 2008-01-25 2012-04-17 Mcafee, Inc. Granular support vector machine with random granularity
US8481253B2 (en) 2008-03-19 2013-07-09 Cryo-Save Ag Cryopreservation of adipose tissue for the isolation of mesenchymal stem cells
RU2374684C1 (ru) 2008-05-04 2009-11-27 Государственное образовательное учреждение высшего профессионального образования Курский государственный технический университет Параллельно-конвейерное устройство для векторизации аэрокосмических изображений земной поверхности
US8843691B2 (en) 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
JP5056644B2 (ja) 2008-07-18 2012-10-24 富士通セミコンダクター株式会社 データ変換装置、データ変換方法及びプログラム
US8001510B1 (en) 2008-09-05 2011-08-16 Xilinx, Inc. Automated method of architecture mapping selection from constrained high level language description via element characterization
US20100191814A1 (en) 2008-12-23 2010-07-29 Marco Heddes System-On-A-Chip Employing A Network Of Nodes That Utilize Receive Side Flow Control Over Channels For Messages Communicated Therebetween
US8078848B2 (en) 2009-01-09 2011-12-13 Micron Technology, Inc. Memory controller having front end and back end channels for modifying commands
US8086783B2 (en) 2009-02-23 2011-12-27 International Business Machines Corporation High availability memory system
US8055816B2 (en) 2009-04-09 2011-11-08 Micron Technology, Inc. Memory controllers, memory systems, solid state drives and methods for processing a number of commands
US8910168B2 (en) 2009-04-27 2014-12-09 Lsi Corporation Task backpressure and deletion in a multi-flow network processor architecture
US8576714B2 (en) 2009-05-29 2013-11-05 Futurewei Technologies, Inc. System and method for relay node flow control in a wireless communications system
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
US20110004742A1 (en) 2009-07-06 2011-01-06 Eonsil, Inc. Variable-Cycle, Event-Driven Multi-Execution Flash Processor
US8650240B2 (en) 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8301803B2 (en) 2009-10-23 2012-10-30 Samplify Systems, Inc. Block floating point compression of signal data
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
US8578117B2 (en) 2010-02-10 2013-11-05 Qualcomm Incorporated Write-through-read (WTR) comparator circuits, systems, and methods use of same with a multiple-port file
US8495341B2 (en) 2010-02-17 2013-07-23 International Business Machines Corporation Instruction length based cracking for instruction of variable length storage operands
US9141350B2 (en) 2010-04-23 2015-09-22 Vector Fabrics B.V. Embedded system performance
US8438341B2 (en) 2010-06-16 2013-05-07 International Business Machines Corporation Common memory programming
US8719455B2 (en) 2010-06-28 2014-05-06 International Business Machines Corporation DMA-based acceleration of command push buffer between host and target devices
US9201801B2 (en) 2010-09-15 2015-12-01 International Business Machines Corporation Computing device with asynchronous auxiliary execution unit
TWI425357B (zh) 2010-09-27 2014-02-01 Silicon Motion Inc 用來進行區塊管理之方法以及記憶裝置及控制器
KR101735677B1 (ko) 2010-11-17 2017-05-16 삼성전자주식회사 부동 소수점의 복합 연산장치 및 그 연산방법
US9026769B1 (en) 2011-01-31 2015-05-05 Marvell International Ltd. Detecting and reissuing of loop instructions in reorder structure
TWI432987B (zh) 2011-03-15 2014-04-01 Phison Electronics Corp 記憶體儲存裝置、其記憶體控制器與病毒掃描方法
US9170846B2 (en) 2011-03-29 2015-10-27 Daniel Delling Distributed data-parallel execution engines for user-defined serial problems using branch-and-bound algorithm
US8799880B2 (en) 2011-04-08 2014-08-05 Siemens Aktiengesellschaft Parallelization of PLC programs for operation in multi-processor environments
US9817700B2 (en) 2011-04-26 2017-11-14 International Business Machines Corporation Dynamic data partitioning for optimal resource utilization in a parallel data processing system
US10078620B2 (en) 2011-05-27 2018-09-18 New York University Runtime reconfigurable dataflow processor with multi-port memory access module
US9116634B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Configure storage class memory command
US9727827B2 (en) 2011-06-24 2017-08-08 Jobvite, Inc. Method and system for referral tracking
US8990452B2 (en) 2011-07-26 2015-03-24 International Business Machines Corporation Dynamic reduction of stream backpressure
US9148495B2 (en) 2011-07-26 2015-09-29 International Business Machines Corporation Dynamic runtime choosing of processing communication methods
US9201817B2 (en) 2011-08-03 2015-12-01 Montage Technology (Shanghai) Co., Ltd. Method for allocating addresses to data buffers in distributed buffer chipset
US8694754B2 (en) 2011-09-09 2014-04-08 Ocz Technology Group, Inc. Non-volatile memory-based mass storage devices and methods for writing data thereto
US8966457B2 (en) 2011-11-15 2015-02-24 Global Supercomputing Corporation Method and system for converting a single-threaded software program into an application-specific supercomputer
US8898505B2 (en) 2011-12-01 2014-11-25 International Business Machines Corporation Dynamically configureable placement engine
US8892914B2 (en) 2011-12-08 2014-11-18 Active-Semi, Inc. Programmable fault protect for processor controlled high-side and low-side drivers
WO2013100783A1 (en) 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
KR101968512B1 (ko) 2012-02-21 2019-04-12 삼성전자주식회사 Nfc를 이용한 멀티미디어 데이터 송수신 장치 및 방법
KR101929814B1 (ko) * 2012-02-27 2019-03-14 엘지전자 주식회사 영상 표시 장치 및 이의 제어 방법
US9146775B2 (en) 2012-04-26 2015-09-29 International Business Machines Corporation Operator graph changes in response to dynamic connections in stream computing applications
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US8995410B2 (en) 2012-05-25 2015-03-31 University Of Southern California Airsync: enabling distributed multiuser MIMO with full multiplexing gain
US9213571B2 (en) 2012-06-06 2015-12-15 2236008 Ontario Inc. System and method for changing abilities of a process
US9110713B2 (en) 2012-08-30 2015-08-18 Qualcomm Incorporated Microarchitecture for floating point fused multiply-add with exponent scaling
US9063974B2 (en) * 2012-10-02 2015-06-23 Oracle International Corporation Hardware for table scan acceleration
US9632787B2 (en) 2012-10-23 2017-04-25 Ca, Inc. Data processing system with data characteristic based identification of corresponding instructions
US9104474B2 (en) 2012-12-28 2015-08-11 Intel Corporation Variable precision floating point multiply-add circuit
US10467010B2 (en) 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US9268528B2 (en) 2013-05-23 2016-02-23 Nvidia Corporation System and method for dynamically reducing power consumption of floating-point logic
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US9715389B2 (en) 2013-06-25 2017-07-25 Advanced Micro Devices, Inc. Dependent instruction suppression
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
US9524164B2 (en) 2013-08-30 2016-12-20 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
US9292076B2 (en) 2013-09-16 2016-03-22 Intel Corporation Fast recalibration circuitry for input/output (IO) compensation finite state machine power-down-exit
US9244827B2 (en) 2013-09-25 2016-01-26 Intel Corporation Store address prediction for memory disambiguation in a processing device
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
US9594720B2 (en) 2013-10-21 2017-03-14 Xmos Limited Interface between a bus and a inter-thread interconnect
JP6446995B2 (ja) 2013-10-29 2019-01-09 株式会社リコー 情報処理システム及び情報処理方法
US10591983B2 (en) 2014-03-14 2020-03-17 Wisconsin Alumni Research Foundation Computer accelerator system using a trigger architecture memory access processor
KR20150126484A (ko) 2014-05-02 2015-11-12 삼성전자주식회사 소스 코드를 머신 코드로 변환하는 전자 장치 및 방법
US9696927B2 (en) 2014-06-19 2017-07-04 International Business Machines Corporation Memory transaction having implicit ordering effects
WO2016003646A1 (en) 2014-06-30 2016-01-07 Unisys Corporation Enterprise management for secure network communications over ipsec
DE102014113430A1 (de) 2014-09-17 2016-03-17 Bundesdruckerei Gmbh Verteilte Datenspeicherung mittels Berechtigungstoken
US9836473B2 (en) 2014-10-03 2017-12-05 International Business Machines Corporation Hardware acceleration for a compressed computation database
US9473144B1 (en) 2014-11-25 2016-10-18 Cypress Semiconductor Corporation Integrated circuit device with programmable analog subsystem
US20180008183A1 (en) * 2015-01-28 2018-01-11 Seventh Sense Biosystems, Inc. Devices and methods for delivering and/or receiving fluid
US9851945B2 (en) 2015-02-16 2017-12-26 Advanced Micro Devices, Inc. Bit remapping mechanism to enhance lossy compression in floating-point applications
US9658676B1 (en) 2015-02-19 2017-05-23 Amazon Technologies, Inc. Sending messages in a network-on-chip and providing a low power state for processing cores
US9594521B2 (en) 2015-02-23 2017-03-14 Advanced Micro Devices, Inc. Scheduling of data migration
US9946719B2 (en) 2015-07-27 2018-04-17 Sas Institute Inc. Distributed data set encryption and decryption
US10216693B2 (en) 2015-07-30 2019-02-26 Wisconsin Alumni Research Foundation Computer with hybrid Von-Neumann/dataflow execution architecture
US10108417B2 (en) 2015-08-14 2018-10-23 Qualcomm Incorporated Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor
US20170083313A1 (en) 2015-09-22 2017-03-23 Qualcomm Incorporated CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs)
US10121553B2 (en) 2015-09-30 2018-11-06 Sunrise Memory Corporation Capacitive-coupled non-volatile thin-film transistor NOR strings in three-dimensional arrays
US9847783B1 (en) 2015-10-13 2017-12-19 Altera Corporation Scalable architecture for IP block integration
US9762563B2 (en) 2015-10-14 2017-09-12 FullArmor Corporation Resource access system and method
CN105512060B (zh) 2015-12-04 2018-09-14 上海兆芯集成电路有限公司 输入/输出电路以及数据传输控制方法
US9923905B2 (en) 2016-02-01 2018-03-20 General Electric Company System and method for zone access control
US9959068B2 (en) 2016-03-04 2018-05-01 Western Digital Technologies, Inc. Intelligent wide port phy usage
KR20170105353A (ko) 2016-03-09 2017-09-19 삼성전자주식회사 전자장치 및 그 제어방법
US20170286169A1 (en) 2016-03-31 2017-10-05 National Instruments Corporation Automatically Mapping Program Functions to Distributed Heterogeneous Platforms Based on Hardware Attributes and Specified Constraints
US10466868B2 (en) 2016-04-27 2019-11-05 Coda Project, Inc. Operations log
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US10110233B2 (en) 2016-06-23 2018-10-23 Altera Corporation Methods for specifying processor architectures for programmable integrated circuits
US20180081834A1 (en) * 2016-09-16 2018-03-22 Futurewei Technologies, Inc. Apparatus and method for configuring hardware to operate in multiple modes during runtime
US20180081806A1 (en) 2016-09-22 2018-03-22 Qualcomm Incorporated Memory violation prediction
US10168758B2 (en) 2016-09-29 2019-01-01 Intel Corporation Techniques to enable communication between a processor and voltage regulator
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10474375B2 (en) 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US20180189675A1 (en) 2016-12-31 2018-07-05 Intel Corporation Hardware accelerator architecture and template for web-scale k-means clustering
US10180928B2 (en) 2016-12-31 2019-01-15 Intel Corporation Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions
US10490251B2 (en) 2017-01-30 2019-11-26 Micron Technology, Inc. Apparatuses and methods for distributing row hammer refresh events across a memory device
US10754829B2 (en) 2017-04-04 2020-08-25 Oracle International Corporation Virtual configuration systems and methods
CN108694014A (zh) 2017-04-06 2018-10-23 群晖科技股份有限公司 用来进行内存空间保留及管理的方法与装置
US10452452B2 (en) 2017-04-17 2019-10-22 Wave Computing, Inc. Reconfigurable processor fabric implementation using satisfiability analysis
US10346145B2 (en) 2017-06-23 2019-07-09 Intel Corporation Loop execution with predicate computing for dataflow machines
US20190004878A1 (en) 2017-07-01 2019-01-03 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10380063B2 (en) 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US20190101952A1 (en) 2017-09-30 2019-04-04 Intel Corporation Processors and methods for configurable clock gating in a spatial array
US10402176B2 (en) 2017-12-27 2019-09-03 Intel Corporation Methods and apparatus to compile code to generate data flow code
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
US10776087B2 (en) 2018-06-25 2020-09-15 Intel Corporation Sequence optimizations in a high-performance computing environment
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator

Also Published As

Publication number Publication date
US20190102179A1 (en) 2019-04-04
CN109597459A (zh) 2019-04-09
US10445098B2 (en) 2019-10-15

Similar Documents

Publication Publication Date Title
DE102018006889A1 (de) Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array
DE102018005181B4 (de) Prozessor für einen konfigurierbaren, räumlichen beschleuniger mit leistungs-, richtigkeits- und energiereduktionsmerkmalen
DE102018006735A1 (de) Prozessoren und Verfahren für konfigurierbares Clock-Gating in einem räumlichen Array
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE102018006791A1 (de) Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator
DE102018005169A1 (de) Prozessoren und verfahren mit konfigurierbaren netzwerkbasierten datenflussoperatorschaltungen
DE102018005172A1 (de) Prozessoren, verfahren und systeme mit einem konfigurierbaren räumlichen beschleuniger
DE102018130441A1 (de) Einrichtung, Verfahren und Systeme mit konfigurierbarem räumlichem Beschleuniger
DE102018126650A1 (de) Einrichtung, verfahren und systeme für datenspeicherkonsistenz in einem konfigurierbaren räumlichen beschleuniger
US10496574B2 (en) Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US11086816B2 (en) Processors, methods, and systems for debugging a configurable spatial accelerator
DE102018126150A1 (de) Einrichtung, verfahren und systeme für multicast in einem konfigurierbaren räumlichen beschleuniger
US10387319B2 (en) Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US11307873B2 (en) Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10558575B2 (en) Processors, methods, and systems with a configurable spatial accelerator
US10416999B2 (en) Processors, methods, and systems with a configurable spatial accelerator
US10915471B2 (en) Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US20190004878A1 (en) Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features
US10891240B2 (en) Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US20190303263A1 (en) Apparatus, methods, and systems for integrated performance monitoring in a configurable spatial accelerator
US20190004994A1 (en) Processors and methods for pipelined runtime services in a spatial array
CN111868702A (zh) 用于可配置空间加速器中的远程存储器访问的装置、方法和系统
CN109215728A (zh) 用于分布式存储器危险检测和错误恢复的存储器电路和方法
DE102015002383A1 (de) Verfahren und Vorrichtung zum Implementieren einer dynamischen Out-of-order-Prozessorpipeline
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung

Legal Events

Date Code Title Description
R012 Request for examination validly filed