DE102018126001A1 - Synchronisation in einem Multi-Kachel-Verarbeitungsarray - Google Patents

Synchronisation in einem Multi-Kachel-Verarbeitungsarray Download PDF

Info

Publication number
DE102018126001A1
DE102018126001A1 DE102018126001.6A DE102018126001A DE102018126001A1 DE 102018126001 A1 DE102018126001 A1 DE 102018126001A1 DE 102018126001 A DE102018126001 A DE 102018126001A DE 102018126001 A1 DE102018126001 A1 DE 102018126001A1
Authority
DE
Germany
Prior art keywords
processing unit
data
tile
command
computer
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
DE102018126001.6A
Other languages
English (en)
Inventor
Simon Christian Knowles
Daniel John Pelham WILKINSON
Richard Luke Southwell Osborne
Alan Graham Alexander
Stephen Felix
Jonathan Mangnall
David Lacey
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.)
Graphcore Ltd
Original Assignee
Graphcore Ltd
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 Graphcore Ltd filed Critical Graphcore Ltd
Publication of DE102018126001A1 publication Critical patent/DE102018126001A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/12Synchronisation of different clock signals provided by a plurality of clock generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • 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
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation

Abstract

Die Erfindung betrifft einen Computer umfassend: eine Vielzahl von Verarbeitungseinheiten, von denen jede einen Befehlsspeicher, der ein lokales Programm enthält, eine Ausführungseinheit, die das lokale Programm ausführt, einen Datenspeicher zum Speichern von Daten; eine Eingangsschnittstelle mit einer Gruppe von Eingabeleitungen und eine Ausgangsschnittstelle mit einer Gruppe von Ausgabeleitungen aufweist; eine Schaltstruktur, die mit jeder der Verarbeitungseinheiten durch die jeweilige Gruppe von Ausgabeleitungen verbunden ist und die mit den jeweiligen Verarbeitungseinheiten durch die jeweiligen Eingabeleitungen über eine durch jede Verarbeitungseinheit steuerbare Umschaltschaltung verbindbar ist; ein Synchronisationsmodul betreibbar zum Erzeugen eines Synchronisationssignals, um den Computer so zu steuern, dass er zwischen einer Rechenphase und einer Austauschphase umschaltet, wobei die Verarbeitungseinheiten ausgestaltet sind, um ihre lokalen Programme gemäß einem gemeinsamen Takt auszuführen, wobei die lokalen Programme so ausgestaltet sind, dass in der Austauschphase mindestens eine Verarbeitungseinheit einen Sendebefehl von ihrem lokalen Programm ausführt, um zu einer Sendezeit ein Datenpaket auf seine Gruppe von Ausgangsleitungen zu übertragen, wobei das Datenpaket für mindestens eine Empfängerverarbeitungseinheit bestimmt ist, aber keine Zielidentifizierung aufweist, und wobei die Empfängerverarbeitungseinheit zu einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl aus ihrem lokalen Programm ausführt, um ihre Umschaltschaltung so zu steuern, dass ihre Gruppe von Eingabeleitungen mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen, wobei die Sendezeit, die Schaltzeit und die Empfangszeit in Bezug auf das Synchronisationssignal von dem gemeinsamen Takt bestimmt sind.

Description

  • Technischer Bereich
  • Die vorliegende Offenbarung bezieht sich auf eine Synchronisation der Auslastungen mehrerer verschiedener Kacheln (sogenannte „Tiles“) in einem Prozessor mit mehreren Kacheln, wobei jede Kachel eine Verarbeitungseinheit mit einem lokalen Speicher umfasst. Insbesondere bezieht sich die Offenbarung auf ein Protokoll für eine massensynchrone Parallelverarbeitung (Bulk Synchronous Parallel (BSP)), wobei jede Gruppe von Kacheln eine Rechenphase abschließen muss, bevor eine der Kacheln in der Gruppe zu einer Austauschphase übergehen kann.
  • Hintergrund
  • Parallelität weist in der Computertechnik verschiedene Formen auf. Programmfragmente können so organisiert sein, dass sie gleichzeitig ausgeführt werden (wo sie sich zeitlich überlappen, sich jedoch Ausführungsressourcen teilen können) oder parallel, wenn sie möglicherweise zeitgleich auf verschiedenen Ressourcen ausgeführt werden.
  • In der Computertechnik kann die Parallelität auf verschiedene Weise erreicht werden, beispielsweise mittels einer Gruppe (Array) mehrerer miteinander verbundener Prozessorkacheln oder einer Multi-Thread-Verarbeitungseinheit oder gar eines Multi-Kachel-Array, bei dem jede Kachel eine Multi-Thread-Verarbeitungseinheit aufweist.
  • Wenn Parallelität mittels eines Prozessors mit einem Array aus mehreren Kacheln auf demselben Chip (oder Chips in derselben integrierten Schaltungspackung) erreicht wird, umfasst jede Kachel ihre jeweilige eigene getrennte Verarbeitungseinheit mit lokalem Speicher (einschließlich Programmspeicher und Datenspeicher). Somit können getrennte Teile des Programmcodes auf verschiedenen Kacheln gleichzeitig ausgeführt werden. Die Kacheln sind über eine chipinterne Verbindung miteinander verbunden, sodass der auf den verschiedenen Kacheln ausgeführte Code zwischen Kacheln kommunizieren kann. In einigen Fällen kann die Verarbeitungseinheit auf jeder Kachel die Form einer Barrel-Thread-Verarbeitungseinheit (oder einer anderen Multi-Thread-Verarbeitungseinheit) annehmen. Jede Kachel kann einen Satz von Kontexten und eine Ausführungs-Pipeline aufweisen, sodass jede Kachel gleichzeitig mehrere verschachtelte Threads ausführen kann.
  • Im Allgemeinen können Abhängigkeiten zwischen den Teilen eines Programms bestehen, die auf verschiedenen Kacheln im Array ausgeführt werden. Es ist daher eine Technik erforderlich, die verhindert, dass ein Code-Anteil auf einer Kachel vorauseilt gegenüber Daten, von denen er abhängig ist, die von einem anderen Code-Anteil auf einer anderen Kachel verfügbar gemacht werden. Es gibt eine Reihe möglicher Ansätze, um dies zu erreichen, wobei aber der hier interessierende Ansatz als massensynchrone Parallelverarbeitung (BSP) bekannt ist. Gemäß BSP führt jede Kachel abwechselnd eine Rechenphase und eine Austauschphase durch. Während der Rechenphase führt jede Kachel eine oder mehrere Berechnungsaufgaben lokal auf der Kachel aus, tauscht aber keine Ergebnisse ihrer Berechnungen mit anderen Kacheln aus. In der Austauschphase wird jeder Kachel erlaubt, ein oder mehrere Ergebnisse der Berechnungen aus der vorhergehenden Rechenphase zu und/oder von einer oder mehreren anderen Kacheln in der Gruppe auszutauschen, wobei diese Kachel aber noch keine neue Rechenphase beginnt, bevor sie ihre Austauschphase beendet hat. Ferner wird gemäß dieser Form des BSP-Prinzips eine Barrierensynchronisation an der Verbindungsstelle zwischen der Rechenphase und der Austauschphase oder zwischen der Austauschphase und der Rechenphase oder beidem platziert. Das heißt, entweder: (a) alle Kacheln müssen ihre jeweilige Rechenphase abschließen, bevor eine aus der Gruppe zur nächsten Austauschphase voranschreiten darf, oder (b) alle Kacheln in der Gruppe müssen ihre jeweilige Austauschphase abschließen, bevor eine Kachel der Gruppe zur nächsten Rechenphase voranschreiten darf, oder (c) beides. Sofern hier verwendet, umfasst der Ausdruck „zwischen einer Rechenphase und einer Austauschphase“ alle diese Optionen. Eine beispielhafte Verwendung einer Parallelverarbeitung mit mehreren Threads und/oder mehreren Kacheln findet sich in der Maschinenintelligenz. Wie dem Fachmann auf dem Gebiet der Maschinenintelligenz bekannt ist, können Algorithmen der Maschinenintelligenz „Wissensmodelle erstellen“ und das Wissensmodell verwenden, um Lern- und Inferenzalgorithmen auszuführen. Ein Maschinenintelligenz-Modell mit integriertem Wissensmodell und -algorithmen kann als Graph mit mehrerer miteinander verbundenen Knoten dargestellt werden. Jeder Knoten repräsentiert eine Funktion seiner Eingaben. Einige Knoten empfangen die Eingaben des Graphen und einige empfangen Eingaben von einem oder mehreren anderen Knoten. Die Ausgangsaktivierungen einiger Knoten bilden die Eingaben für andere Knoten und die Ausgaben einiger Knoten liefern die Ausgabe des Graphen, und die Eingaben für den Graphen liefern die Eingaben für einige Knoten. Ferner wird die Funktion an jedem Knoten durch einen oder mehrere jeweilige Parameter, z.B. Gewichtungen, parametrisiert. Während einer Lernphase ist es Ziel, auf Grundlage eines Satzes experimenteller Eingangsdaten Werte für die verschiedenen Parameter aufzufinden, so dass der Graph als Ganzes eine gewünschte Ausgabe für einen Bereich möglicher Eingaben generiert. Aus dem Stand der Technik sind verschiedene Algorithmen für diesen Vorgang bekannt, wie beispielsweise ein Rückwärtsausbreitungsalgorithmus, der auf einem stochastischen Gradientenabstieg basiert. Über mehrere Iterationen werden die Parameter schrittweise so abgestimmt, dass ihre Fehler abnehmen und somit der Graph in Richtung einer Lösung konvergiert. In einer nachfolgenden Phase kann das erlernte Modell dann verwendet werden, um Vorhersagen zu treffen für Ausgaben bei einem bestimmten Satz von Eingaben oder um bei einem bestimmten Satz von Ausgaben Rückschlüsse auf Eingaben (Ursachen) zu ziehen, oder andere introspektive Analyseformen können auf dessen Grundlage ausgeführt werden.
  • Die Implementierung jedes Knotens beinhaltet die Verarbeitung von Daten, wobei die Zwischenverbindungen des Graphen den zwischen den Knoten auszutauschenden Daten entsprechen. Typischerweise kann zumindest ein Teil der Verarbeitung jedes Knotens unabhängig von einigen oder allen anderen Knoten in dem Graphen ausgeführt werden, und daher bieten große Graphen Möglichkeiten für enorme Parallelität.
  • Zusammenfassung
  • Wie oben erwähnt, kann ein Maschinenintelligenzmodell, welches das Wissensmodell und algorithmische Informationen über die Verwendung des Wissensmodells zum Lernen und zur Inferenz repräsentiert, in der Regel durch einen Graphen von mehreren miteinander verbundenen Knoten dargestellt werden, wobei jeder Knoten eine Verarbeitungsanforderung für Daten aufweist. Zwischenverbindungen des Graphen geben die zwischen den Knoten auszutauschenden Daten an und führen folglich zu Abhängigkeiten zwischen den an den Knoten ausgeführten Programmfragmenten. Im Allgemeinen kann die Verarbeitung an einem Knoten unabhängig von einem anderen Knoten ausgeführt werden und daher bieten große Graphen enorme Parallelität. Eine stark verteilte Parallelmaschine ist eine geeignete Maschinenstruktur zur Berechnung solcher Maschinenintelligenzmodelle. Durch dieses Merkmal kann eine Maschine so ausgelegt werden, dass bestimmte zeitdeterministische Garantien gegeben werden können.
  • Ein Faktor von Wissensmodellen, der in der vorliegenden Offenbarung genutzt wird, ist die im Allgemeinen statische Natur des Graphen. Das heißt, dass sich die Struktur von Knoten und des die Knoten umfassenden Graphen normalerweise während der Ausführung von Maschineintelligenzalgorithmen nicht ändert. Die Erfinder haben eine Maschine entwickelt, die bestimmte zeitdeterministische Garantien bietet, um die Berechnung auf Maschinenintelligenzmodellen zu optimieren. Dadurch kann ein Compiler den Arbeitsprozess zeitabhängig auf die Knoten verteilen und planen. Dieser Zeitdeterminismus wird in den nachfolgend beschriebenen Ausführungsbeispielen für signifikante Optimierungen beim Entwerfen eines für die Verarbeitung von Arbeitslasten basierend auf Wissensmodellen optimierten Computers verwendet.
  • Gemäß einem Aspekt der Erfindung wird ein Computer bereitgestellt, umfassend: eine Vielzahl von Verarbeitungseinheiten, die jeweils einen Befehlsspeicher mit einem lokalen Programm, eine Ausführungseinheit zum Ausführen des lokalen Programms, einen Datenspeicher zum Speichern von Daten, eine Eingangsschnittstelle mit einer Gruppe von Eingabeleitungen, und eine Ausgangsschnittstelle mit einer Gruppe von Ausgabeleitungen aufweisen; eine Schaltstruktur, die mit jeder der Verarbeitungseinheiten durch die jeweilige Gruppe von Ausgabeleitungen verbunden ist und die mit jeder der Verarbeitungseinheiten durch die jeweiligen Eingabeleitungen über eine durch jede Verarbeitungseinheit steuerbare Umschaltschaltung verbindbar ist; und ein Synchronisationsmodul, das eingerichtet ist zum Erzeugen eines Synchronisationssignals zum Steuern des Computers, dass er zwischen einer Rechenphase und einer Austauschphase umschaltet, wobei die Verarbeitungseinheiten ausgestaltet sind, ihre lokalen Programme gemäß einem gemeinsamen Takt auszuführen, wobei die lokalen Programme so ausgestaltet sind, dass in der Austauschphase mindestens eine Verarbeitungseinheit einen Sendebefehl von ihrem lokalen Programm ausführt, um zu einem Sendezeitpunkt ein Datenpaket auf seine Gruppe von Ausgabeleitungen zu übertragen, wobei das Datenpaket für mindestens eine Empfängerverarbeitungseinheit bestimmt ist, aber keine Zielidentifizierung aufweist, und wobei die Empfängerverarbeitungseinheit zu einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl aus ihrem lokalen Programm ausführt, um ihre Umschaltschaltung so zu steuern, dass ihre Gruppe der Eingabeleitungen mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen, wobei die Sendezeit, die Schaltzeit und die Empfangszeit in Bezug auf das Synchronisationssignal von dem gemeinsamen Takt bestimmt sind.
  • Ein weiterer Aspekt der Erfindung stellt ein Verfahren zum Berechnen einer Funktion in einem Computer bereit, umfassend: eine Vielzahl von Verarbeitungseinheiten, die jeweils einen Befehlsspeicher mit einem lokalen Programm, eine Ausführungseinheit zum Ausführen des lokalen Programms, einen Datenspeicher zum Speichern von Daten, eine Eingangsschnittstelle mit einer Gruppe von Eingabeleitungen, und eine Ausgangsschnittstelle mit einer Gruppe von Ausgabeleitungen aufweisen; eine Schaltstruktur, die mit jeder der Verarbeitungseinheiten durch die jeweilige Gruppe von Ausgabeleitungen verbunden ist und die mit jeder der Verarbeitungseinheiten durch die jeweiligen Eingabeleitungen über eine durch jede Verarbeitungseinheit steuerbare Umschaltschaltung verbindbar ist; und ein Synchronisationsmodul, das eingerichtet ist zum Erzeugen eines Synchronisationssignals zum Steuern des Computers, dass er zwischen einer Rechenphase und einer Austauschphase umschaltet, wobei das Verfahren umfasst: die Verarbeitungseinheiten führen ihre lokalen Programme gemäß einem gemeinsamen Takt aus, wobei zu einem vorbestimmten Zeitpunkt in der Austauschphase mindestens eine Verarbeitungseinheit einen Sendebefehl von ihrem lokalen Programm ausführt, um zu einem Sendezeitpunkt ein Datenpaket auf seine Gruppe von Ausgabeleitungen zu senden, wobei das Datenpaket für mindestens eine Empfängerverarbeitungseinheit bestimmt ist, aber keine Zielidentifizierung aufweist, und wobei die Empfängerverarbeitungseinheit zu einer vorbestimmten Schaltzeit eine Schaltsteuerbefehl aus ihrem lokalen Programm ausführt, um die Umschaltschaltung so zu steuern, dass ihre Gruppe der Eingabeleitungen mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen, wobei die Sendezeit, die Schaltzeit und die Empfangszeit in Bezug auf das Synchronisationssignal von dem gemeinsamen Takt bestimmt sind.
  • Im Prinzip könnte das Synchronisationssignal zur Steuerung des Wechsels von einer Rechenphase in die Austauschphase oder von der Austauschphase in die Rechenphase erzeugt werden. Für die hier definierte zeitdeterministische Architektur ist jedoch bevorzugt, dass das Synchronisationssignal zum Beginnen der Austauschphase erzeugt wird. In einem Ausführungsbeispiel zeigt jede Verarbeitungseinheit dem Synchronisationsmodul an, dass dessen eigene Rechenphase abgeschlossen ist, und das Synchronisationssignal wird von dem Synchronisationsmodul erzeugt, wenn alle Verarbeitungseinheiten angezeigt haben, dass deren eigene Rechenphase abgeschlossen ist, um die Austauschphase zu beginnen.
  • Die Sendezeit sollte vorbestimmt sein, damit der zeitdeterministische Austausch ordnungsgemäß abgeschlossen werden kann. Sie kann dadurch bestimmt werden, dass sie eine bekannte Anzahl von Taktzyklen nach dem Zeitpunkt der Ausführung des Sendebefehls eintritt, unter der Annahme, dass der Zeitpunkt der Ausführung des Sendebefehls vorbestimmt ist. Alternativ könnte die Sendezeit eine bekannte Verzögerung sein, die auf andere Weise aus einer durch die Ausführung des Sendebefehls bekannten Zeit bestimmt wird. Wichtig ist, dass die Sendezeit relativ zur Empfangszeit an einer vorgesehenen Empfängerverarbeitungseinheit bekannt ist.
  • Merkmale des Sendebefehls können einschließen, dass der Sendebefehl explizit die einen Ort im Datenspeicher identifizierende Sendeadresse definiert, von dem aus das Datenpaket gesendet werden soll. Alternativ wird keine Sendeadresse explizit in dem Sendebefehl definiert und die Datenpakete werden von einer in einem in dem Sendebefehl implizit definierten Register definierten Sendeadresse gesendet. Das lokale Programm kann einen Sendeadressenaktualisierungsbefehl zum Aktualisieren der Sendeadresse in dem impliziten Register enthalten.
  • In den hier beschriebenen Ausführungsbeispielen umfasst die Umschaltschaltung einen Multiplexer mit einem mit seiner Verarbeitungseinheit verbundenen Ausgangssatz von Ausgabeleitungen und mehrere Sätze von Eingabeleitungen, die mit der Schaltstruktur verbunden sind, wobei einer der mehreren Sätze von Eingabeleitungen gesteuert von der Verarbeitungseinheit ausgewählt wird. Jeder Satz kann 32 Bit umfassen. Wenn 64-Bit-Daten verwendet werden, kann ein Multiplexer-Paar mit einer Verarbeitungseinheit verbunden und gemeinsam gesteuert werden.
  • In dem beschriebenen Ausführungsbeispiel ist die Empfängerverarbeitungseinheit ausgestaltet zum Empfangen des Datenpakets und zum Laden dieses in den Datenspeicher an einem Speicherplatz, der durch einen Speicherzeiger identifiziert ist. Der Speicherzeiger kann automatisch inkrementiert werden, nachdem jedes Datenpaket in den Datenspeicher geladen wurde. Alternativ kann das lokale Programm an der Empfängerverarbeitungseinheit einen Speicherzeigeraktualisierungsbefehl enthalten, der den Speicherzeiger aktualisiert.
  • Der Sendebefehl kann ausgestaltet sein zum Identifizieren einer Anzahl von zu sendenden Datenpaketen, wobei jedes Datenpaket mit einer anderen Sendezeit verknüpft ist, weil sie seriell von der Verarbeitungseinheit gesendet werden.
  • Einer der Sätze der Eingabeleitungen des Multiplexers kann so gesteuert werden, dass er mit einer Null-Eingabe verbunden wird. Dies könnte zum Ignorieren von Daten verwendet werden, die ansonsten bei dieser Verarbeitungseinheit ankommen.
  • Die Empfängerverarbeitungseinheit, die ein bestimmtes Datenpaket empfangen soll, könnte die gleiche Verarbeitungseinheit sein, die zu einem früheren Zeitpunkt einen Sendebefehl ausgeführt hat, wodurch dieselbe Verarbeitungseinheit ausgestaltet ist, ein Datenpaket zu senden und dieses Datenpaket zu einem späteren Zeitpunkt zu empfangen. Der Zweck einer „an sich selbst sendenden“ Verarbeitungseinheit könnte darin bestehen, eine Anordnung eingehender Daten, die mit von anderen Verarbeitungseinheiten empfangenen Daten verschachtelt sind, in ihrem Speicher zusammenzuhalten. In einigen Ausführungsbeispielen können mindestens zwei der Verarbeitungseinheiten in einem Sendepaar zusammenarbeiten, wobei ein erstes Datenpaket von einer ersten Verarbeitungseinheit des Paares über dessen Ausgangssatz von Verbindungsleitungen gesendet wird und ein zweites Datenpaket von der ersten Verarbeitungseinheit über den Ausgangssatz von Verbindungsleitungen der zweiten Verarbeitungseinheit des Paares gesendet wird, um eine Übertragung mit doppelter Breite zu bewirken. In einigen Ausführungsbeispielen können mindestens zwei der Verarbeitungseinheiten als ein Empfangspaar zusammenarbeiten, wobei jede Verarbeitungseinheit des Paares ihre Umschaltschaltung so steuert, dass ihr jeweiliger Eingangssatz von Leitungen mit der Schaltstruktur verbunden wird, um entsprechende Datenpakete von entsprechenden Kacheln eines Sendepaars zu empfangen.
  • Die mehrfachen Verarbeitungseinheiten können ausgestaltet sein zum Ausführen jeweiliger Sendebefehle zum Übertragen jeweiliger Datenpakete, wobei zumindest einige der Datenpakete für keine Empfängerverarbeitungseinheit bestimmt sind.
  • Die berechnete Funktion kann in Form eines statischen Graphen mit mehreren miteinander verbundenen Knoten bereitgestellt werden, wobei jeder Knoten durch ein Codelet der lokalen Programme implementiert wird. Ein Codelet definiert einen Scheitelpunkt (Knoten) in dem Graphen und kann als atomarer Thread der Ausführung betrachtet werden, der später in der Beschreibung erläutert wird. In der Rechenphase kann jeder Codelet Daten verarbeiten, um ein Ergebnis zu erzeugen, wobei einige der Ergebnisse nicht für eine nachfolgende Rechenphase erforderlich sind und nicht von einer Empfängerverarbeitungseinheit empfangen werden. Sie werden effektiv verworfen, jedoch ohne die Notwendigkeit einer positiven Verwerfungsaktion. In der Austauschphase werden die Datenpakete zwischen Verarbeitungseinheiten über die Schaltstruktur und die Umschaltschaltung übertragen. Es gilt zu beachten, dass in der Austauschphase einige Befehle aus dem lokalen Programm ausgeführt werden, um die Austauschphase zu implementieren. Zu diesen Befehlen gehört der Sendebefehl. Während die Rechenphase für Berechnungen zuständig ist, gilt es zu beachten, dass möglicherweise einige arithmetische oder logische Funktionen während der Austauschphase einbezogen werden können, vorausgesetzt, dass diese Funktionen keine Datenabhängigkeit vom Zeitablauf des lokalen Programms aufweisen, damit es synchron bleibt.
  • Die hier beschriebene zeitdeterministische Architektur ist besonders nützlich in Kontexten, bei denen der Graph eine Maschinenintelligenz-Funktion darstellt.
  • Die Schaltstruktur kann so ausgestaltet sein, dass Datenpakete in der Austauschphase durch diese pipelineartig über eine Folge von temporären Speichern übertragen werden, wobei jeder Speicher ein Datenpaket für einen Zyklus des gemeinsamen Takts beibehält.
  • Gemäß einem weiteren Aspekt wird ein computerimplementiertes Verfahren zum Erzeugen mehrerer Programme zum Liefern einer computergesteuerten Funktion bereitgestellt, wobei jedes Programm auszuführen ist in einer Verarbeitungseinheit eines Computers mit mehreren Verarbeitungseinheiten, die jeweils einen Befehlsspeicher mit einem lokalen Programm, eine Ausführungseinheit zum Ausführen des lokalen Programms und einen Datenspeicher zum Speichern von Daten aufweisen, einer Schaltstruktur, die mit einer Ausgangsschnittstelle einer jeden Verarbeitungseinheit verbunden ist und die mit einer Eingangsschnittstelle einer jeden Verarbeitungseinheiten mittels einer durch jede Verarbeitungseinheit steuerbaren Umschaltschaltung verbindbar ist; und ein Synchronisationsmodul, das eingerichtet ist zum Erzeugen eines Synchronisationssignals, wobei das Verfahren umfasst zum Steuern des Computers, dass er zwischen einer Rechenphase und einer Austauschphase umschaltet, wobei das Verfahren umfasst: Erzeugen eines lokalen Programms für jede Verarbeitungseinheiten mit einer Sequenz von ausführbaren Befehlen; Bestimmen einer relativen Ausführungszeit von Befehlen eines jeden lokalen Programms für jede Ausführungseinheit, wodurch ein einer Verarbeitungseinheit zugeordnetes lokales Programm so ablaufgesteuert ist, dass es einen Sendebefehl zum Übertragen zumindest eines für eine Empfängerverarbeitungseinheit bestimmten aber ohne Zielidentifizierung versehenen Datenpakets zu einer vorbestimmten Sendezeit relativ zu einem Synchronisationssignal mit einer vorbestimmten Verzögerung relative zu dem Synchronisationssignal ausführt, und ein einer Empfängerverarbeitungseinheit zugeordnetes lokales Programm so ablaufgesteuert ist, dass es zu einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl zum Steuern der Umschaltschaltung ausführt, sodass deren Verarbeitungseinheitsleitung mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen.
  • In einigen Ausführungsbeispielen weisen die Verarbeitungseinheiten eine feste Positionsbeziehung zueinander auf, und der Schritt des Bestimmens umfasst das Bestimmen einer festen Verzögerung basierend auf der Positionsbeziehung zwischen jedem Paar von Verarbeitungseinheiten in dem Computer.
  • In einigen Ausführungsbeispielen umfasst die feste Positionsbeziehung eine Anordnung von Zeilen und Spalten, wobei jede Verarbeitungseinheit eine Kennung aufweist, die ihre Position in der Anordnung identifiziert.
  • In einigen Ausführungsbeispielen umfasst die Umschaltschaltung einen Multiplexer mit einem Ausgangssatz von Leitungen, die mit dessen Verarbeitungseinheit verbunden ist, und mehrere Sätze von Eingabeleitungen, die mit der Schaltstruktur verbunden werden können, wobei der Multiplexer auf dem Computer an einem vorbestimmten physikalischen Ort in Bezug auf dessen Verarbeitungseinheit angeordnet ist, und wobei der Schritt des Bestimmens ein Bestimmen der festen Verzögerung für den Schaltersteuerbefehl zum Erreichen des Multiplexers und für ein von dem Multiplexer ausgegebenes Datenpaket zum Erreichen der Eingangsschnittstelle seiner Verarbeitungseinheit umfasst.
  • In einigen Ausführungsbeispielen umfasst das Verfahren den Schritt des Bereitstellens eines Synchronisationsbefehls in jedem Programm, der dem Synchronisationsmodul anzeigt, dass eine Rechenphase an der Verarbeitungseinheit abgeschlossen wurde.
  • In einigen Ausführungsbeispielen umfasst der Schritt des Bestimmens ein Bestimmen einer festen Verzögerung zwischen einem Synchronisationsereignis auf dem Chip und einem Rückempfang einer Bestätigung an der Verarbeitungseinheit, dass ein Synchronisationsereignis aufgetreten ist, für jede Verarbeitungseinheit.
  • In einigen Ausführungsbeispielen umfasst der Schritt des Bestimmens ein Zugreifen auf eine Nachschlagetabelle, in der Informationen über Verzögerungen gespeichert sind, die die Bestimmung der vorbestimmten Sendezeit und der vorbestimmten Schaltzeit ermöglichen.
  • In einigen Ausführungsbeispielen ist die computergestützte Funktion eine Maschinenlernfunktion.
  • In einigen Ausführungsbeispielen umfasst die Umschaltschaltung einen Multiplexer mit einem Ausgangssatz von Leitungen, die mit dessen Verarbeitungseinheit verbunden sind, und mehrere Sätze von Eingabeleitungen, die mit der Schaltstruktur verbunden werden können, wobei der Multiplexer in Bezug auf dessen Verarbeitungseinheit an einem vorbestimmten physikalischen Ort in dem Computer angeordnet ist und wobei der Schritt des Bestimmens ein Bestimmen der festen Verzögerung für den Schaltersteuerbefehl zum Erreichen des Multiplexers und für ein von dem Multiplexer ausgegebenes Datenpaket zum Erreichen der Eingangsschnittstelle seiner Verarbeitungseinheit umfasst.
  • In einigen Ausführungsbeispielen gibt es den Schritt des Bereitstellens eines Synchronisationsbefehls in jedem Programm, der dem Synchronisationsmodul anzeigt, dass eine Rechenphase an der Verarbeitungseinheit abgeschlossen wurde.
  • In einigen Ausführungsbeispielen umfasst der Schritt des Bestimmens ein Bestimmen einer festen Verzögerung zwischen einem Synchronisationsereignis auf dem Chip und einem Rückempfang einer Bestätigung an der Verarbeitungseinheit, dass ein Synchronisationsereignis aufgetreten ist, für jede Verarbeitungseinheit.
  • In einigen Ausführungsbeispielen umfasst der Schritt des Bestimmens ein Zugreifen auf eine Nachschlagetabelle, in der Informationen über Verzögerungen gespeichert sind, die die Bestimmung der vorbestimmten Sendezeit und der vorbestimmten Schaltzeit ermöglichen.
  • In einigen Ausführungsbeispielen ist die computergestützte Funktion eine Maschinenlernfunktion.
  • Gemäß einem weiteren Aspekt wird ein Compiler mit einem Prozessor bereitgestellt, der zum Ausführen eines Verfahrens zum Erzeugen mehrerer Programme zum Liefern einer computergestützten Funktion programmiert ist, wobei jedes Programm in einer Verarbeitungseinheit eines Computers ausgeführt werden soll, der mehrere Verarbeitungseinheiten, die jeweils einen Befehlsspeicher zum Speichern eines lokalen Programms, eine Ausführungseinheit zum Ausführen des lokalen Programms und einen Datenspeicher zum Speichern von Daten aufweisen, eine mit einer Ausgangsschnittstelle jeder Verarbeitungseinheit verbundene Schaltstruktur, die mit einer Eingangsschnittstelle jeder Verarbeitungseinheit durch eine von jeder Verarbeitungseinheit steuerbare Umschaltschaltung verbindbar ist, und ein Synchronisationsmodul, das zum Erzeugen eines Synchronisationssignal betreibbar, wobei das Verfahren umfasst: Erzeugen eines lokalen Programms für jede Verarbeitungseinheit mit einer Folge von ausführbaren Befehlen; Bestimmen einer relativen Ausführungszeit von Befehlen jedes lokalen Programms für jede Verarbeitungseinheit, wodurch ein einer Verarbeitungseinheit zugeordnetes lokales Programm so ablaufgesteuert ist, dass es einen Sendebefehl zum Übertragen zumindest eines für eine Empfängerverarbeitungseinheit bestimmten aber ohne Zielidentifizierung versehenen Datenpakets zu einer vorbestimmten Sendezeit relativ zu einem Synchronisationssignal mit einer vorbestimmten Verzögerung relative zu dem Synchronisationssignal ausführt, und ein einer Empfängerverarbeitungseinheit zugeordnetes lokales Programm so ablaufgesteuert ist, dass es zu einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl zum Steuern der Umschaltschaltung ausführt, sodass deren Verarbeitungseinheitsleitung mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen; wobei der Compiler verbunden ist, um eine feste Graphenstruktur zu empfangen, die die computergesteuerte Funktion darstellt, und eine Tabelle, in der Verzögerungen gespeichert sind, die es ermöglichen, die vorbestimmte Sendezeit und die vorbestimmte Schaltzeit für jede Verarbeitungseinheit zu bestimmen.
  • In einigen Ausführungsbeispielen ist die computergestützte Funktion eine Maschinenlernfunktion.
  • In einigen Ausführungsbeispielen umfasst die feste Graphenstruktur eine Vielzahl von Knoten, wobei jeder Knoten durch ein Codelet in einem lokalen Programm dargestellt ist.
  • Gemäß einem weiteren Aspekt wird ein Computerprogramm bereitgestellt, das auf nicht übertragbaren Medien aufgezeichnet ist und computerlesbare Befehle umfasst, die bei ihrer Ausführung auf einem Prozessor eines Compilers ein Verfahren zum Erzeugen mehrerer Programme zum Liefern einer computergesteuerten Funktion implementieren, wobei jedes Programm auszuführen ist in einer Verarbeitungseinheit eines Computers, der mehrere Verarbeitungseinheiten, die jeweils einen Befehlsspeicher zum Speichern eines lokalen Programms, eine Ausführungseinheit zum Ausführen des lokalen Programms und einen Datenspeicher zum Speichern von Daten aufweisen, eine Schaltstruktur, die mit einer Ausgangsschnittstelle jeder Verarbeitungseinheit verbunden ist und mit einer Eingangsschnittstelle jeder Verarbeitungseinheit mittels einer von jeder Verarbeitungseinheit steuerbaren Umschaltschaltung verbunden werden kann, und ein Synchronisationsmodul, das zum Erzeugen eines Synchronisationssignals betreibbar ist, umfasst, wobei das Verfahren umfasst: Erzeugen eines lokalen Programms für jede Verarbeitungseinheit mit einer Folge von ausführbaren Befehlen; Bestimmen einer relativen Ausführungszeit von Befehlen jedes lokalen Programms für jede Verarbeitungseinheit, wodurch ein einer Verarbeitungseinheit zugeordnetes lokales Programm so ablaufgesteuert ist, dass es einen Sendebefehl zum Übertragen zumindest eines für eine Empfängerverarbeitungseinheit bestimmten aber ohne Zielidentifizierung versehenen Datenpakets zu einer vorbestimmten Sendezeit relativ zu einem Synchronisationssignal mit einer vorbestimmten Verzögerung relative zu dem Synchronisationssignal ausführt, und ein einer Empfängerverarbeitungseinheit zugeordnetes lokales Programm so ablaufgesteuert ist, dass es zu einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl zum Steuern der Umschaltschaltung ausführt, sodass deren Verarbeitungseinheitsleitung mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen.
  • Gemäß einem weiteren Aspekt wird ein Computerprogramm bereitgestellt, das eine Folge von Befehlen umfasst zur Ausführung auf einer Verarbeitungseinheit mit einem Befehlsspeicher zum Speichern des Computerprogramms, einer Ausführungseinheit zum Ausführen des Computerprogramms und einem Datenspeicher zum Speichern von Daten, wobei das Computerprogramm eine oder mehrere computerausführbare Befehle umfasst, die bei ihrer Ausführung eine Sendefunktion implementieren, die bewirkt, dass ein für eine Empfängerverarbeitungseinheit bestimmtes Datenpaket auf einer Gruppe von mit der Verarbeitungseinheit verbundenen Verbindungsleitungen übertragen wird, wobei das Datenpaket keine Zielidentifizierung aufweist, aber zu einer vorbestimmten Sendezeit übertragen wird; und eine Schaltsteuerfunktion, die bewirkt, dass die Verarbeitungseinheit die Umschaltschaltung so steuert, dass sie einen Satz von Verbindungsleitungen der Verarbeitungseinheit mit einer Schaltstruktur verbindet, um ein Datenpaket zu einer vorbestimmten Empfangszeit zu empfangen.
  • In einigen Ausführungsbeispielen umfasst der eine oder die mehreren Befehle einen Schaltersteuerbefehl und einen Sendebefehl, der eine Sendeadresse definiert, die einen Ort im Befehlsspeicher definiert, von dem aus das Datenpaket gesendet werden soll.
  • In einigen Ausführungsbeispielen definiert der Sendebefehl eine Anzahl von zu sendenden Datenpaketen, wobei jedem Paket eine andere vorbestimmte Sendezeit zugeordnet ist.
  • In einigen Ausführungsbeispielen definiert der Sendebefehl nicht explizit eine Sendeadresse, sondern implizit ein Register, in dem eine Sendeadresse gespeichert ist.
  • In einigen Ausführungsbeispielen umfasst das Computerprogramm einen weiteren Befehl zum Aktualisieren der Sendeadresse in dem implizit definierten Register.
  • In einigen Ausführungsbeispielen umfasst das Computerprogramm zumindest einen weiteren Befehl, der eine Speicherzeigeraktualisierungsfunktion definiert, die einen Speicherzeiger aktualisiert, der eine Speicherstelle in dem Datenspeicher zum Speichern des an der Empfängerverarbeitungseinheit empfangen Datenpaketes identifiziert.
  • In einigen Ausführungsbeispielen sind der eine oder die mehreren Befehle ein zusammengefügter Befehl, der die Sendefunktion und die Schaltersteuerfunktion in einem einzigen Ausführungszyklus zusammenführt, wodurch die Verarbeitungseinheit ausgestaltet ist zum Senden eines Datenpakets und zum Steuern ihrer Empfangsschaltung zum Empfangen eines anderen Datenpakets von einer anderen Verarbeitungseinheit.
  • In einigen Ausführungsbeispielen ist der mindestens eine weitere Befehl ein zusammengefügter Befehl, der die Sendefunktion und die Speicherzeigeraktualisierungsfunktion zusammenführt.
  • In einigen Ausführungsbeispielen ist der zusammengefügte Befehl in einem üblichen Format mit einem Befehlscode-Abschnitt ausgestaltet, der angibt, ob bei ihm die Sendefunktion mit der Speicherzeigeraktualisierungsfunktion oder der Schaltersteuerungsfunktion zusammengeführt ist.
  • In einigen Ausführungsbeispielen sind der eine oder die mehreren Befehle ein einzelner Befehl, in dem die Sendefunktion, die Schaltersteuerfunktion und die Speicherzeigeraktualisierungsfunktion in einem einzigen Ausführungszyklus zusammengeführt sind.
  • In einigen Ausführungsbeispielen weist jeder des einen oder der mehreren Befehle eine erste Bitbreite auf, die mit einer Bitbreite einer Holestufe der Ausführungseinheit übereinstimmt.
  • In einigen Ausführungsbeispielen weist jeder des einen oder der mehreren Befehle eine erste Bitbreite auf, die mit einer Bitbreite von einer Holestufe der Ausführungseinheit übereinstimmt, und wobei: der die Sendefunktion, die Schaltsteuerfunktion und die Speicherzeigeraktualisierungsfunktion zusammenführende Befehl eine zweite Bitbreite aufweist, die das Zweifache der Bitbreite der Holestufe der Ausführungseinheit beträgt.
  • In einigen Ausführungsbeispielen weist jeder des einen oder der mehreren Befehle eine erste Bitbreite auf, die mit einer Bitbreite von einer Holestufe der Ausführungseinheit übereinstimmt, und wobei: der Befehl einer ersten Bitbreite einen Operanden mit des ersten Bitbreite identifiziert, wobei der Operand die Schaltersteuerfunktion und eine Speicherschreibaktualisierungsfunktion implementiert.
  • In einigen Ausführungsbeispielen umfasst das Computerprogramm einen Synchronisationsbefehl, der eine Anzeige erzeugt, wenn eine Rechenphase der Verarbeitungseinheit abgeschlossen wurde.
  • In einigen Ausführungsbeispielen ist das Computerprogramm auf einem nicht übertragbaren computerlesbaren Medium aufgezeichnet.
  • In einigen Ausführungsbeispielen liegt das Computerprogramm in Form eines übertragbaren Signals vor.
  • Gemäß einem anderen Aspekt wird eine Verarbeitungseinheit bereitgestellt, mit einem Befehlsspeicher, einer Ausführungseinheit ausgestaltet zum Ausführen eines Computerprogramms, und einem Datenspeicher zum Speichern von Daten, wobei in dem Befehlsspeicher ein Computerprogramm mit einen oder mehreren computerausführbaren Befehlen gespeichert ist, das bei seiner Ausführung durch die Ausführungseinheit implementiert: eine Sendefunktion, die bewirkt, dass ein für eine Empfängerverarbeitungseinheit bestimmtes Datenpaket auf einer Gruppe von mit der Verarbeitungseinheit verbundenen Verbindungsleitungen übertragen wird, wobei das Datenpaket keine Zielidentifizierung aufweist, aber zu einer vorbestimmten Sendezeit übertragen wird; und eine Schaltsteuerfunktion, die bewirkt, dass die Verarbeitungseinheit die Umschaltschaltung so steuert, dass sie einen Satz von Verbindungsleitungen der Verarbeitungseinheit mit einer Schaltstruktur verbindet, um ein Datenpaket zu einer vorbestimmten Empfangszeit zu empfangen.
  • Gemäß einem weiteren Aspekt wird ein Computer bereitgestellt, der ein oder mehrere Chips in Form einer integrierten Packung umfasst, wobei der Computer eine Vielzahl von Verarbeitungseinheiten umfasst, wobei jede Verarbeitungseinheit einen Befehlsspeicher zum Speichern eines Computerprogramms, eine Ausführungseinheit ausgestaltet zum Ausführen des Computerprogramms, und einen Datenspeicher zum Speichern von Daten aufweist, wobei der Befehlsspeicher für jede Verarbeitungseinheit ein Computerprogramm mit einem oder mehreren computerausführbaren Befehlen umfasst, die bei ihrer Ausführung eine Sendefunktion implementieren, die bewirkt, dass ein für eine Empfängerverarbeitungseinheit bestimmtes Datenpaket auf einer Gruppe von mit der Verarbeitungseinheit verbundenen Verbindungsleitungen übertragen wird, wobei das Datenpaket keine Zielidentifizierung aufweist, aber zu einer vorbestimmten Sendezeit übertragen wird; und eine Schaltsteuerfunktion, die bewirkt, dass die Verarbeitungseinheit die Umschaltschaltung so steuert, dass sie einen Satz von Verbindungsleitungen der Verarbeitungseinheit mit einer Schaltstruktur verbindet, um ein Datenpaket zu einer vorbestimmten Empfangszeit zu empfangen.
  • Figurenliste
  • Zum besseren Verständnis der vorliegenden Erfindung und um zu zeigen, wie sie umgesetzt werden kann, wird nun beispielhaft auf die folgenden Zeichnungsfiguren Bezug genommen.
    • 1 zeigt schematisch die Architektur eines Einchip-Prozessors;
    • 2 zeigt ein schematisches Diagramm einer Kachel, die mit der Schaltstruktur verbunden ist;
    • 3 zeigt ein Diagramm, das ein BSP-Protokoll veranschaulicht;
    • 4 zeigt ein schematisches Diagramm, das zwei Kacheln in einem zeitdeterministischen Austausch zeigt;
    • 5 zeigt ein schematisches Zeitdiagramm, das einen zeitdeterministischen Austausch darstellt;
    • 6 zeigt ein Beispiel für einen Maschinenintelligenz-Graphen;
    • 7 zeigt eine schematische Architektur, die den Betrieb eines Compilers zur Erzeugung zeitdeterministischer Programme veranschaulicht;
    • 8 bis 11 zeigen Befehlsformate verschiedener Befehle, die in einer zeitdeterministischen Architektur verwendet werden können;
    • 12 zeigt ein schematisches Diagramm mit zwei Kacheln, die als Sendepaar arbeiten; und
    • 13 zeigt ein schematisches Diagramm mit zwei Kacheln, die als Empfangspaar arbeiten.
  • Ausführliche Beschreibung der Ausführungsbeispiele
  • 1 zeigt eine schematische Darstellung der Architektur eines Einchip-Prozessors 2. Der Prozessor wird hier als eine IPU (Intelligence Processing Unit) bezeichnet, um dessen Eignung für Maschinenintelligenz-Anwendungen anzugeben. In einem Computer können Einchip-Prozessoren unter Verwendung von Verbindungen auf dem Chip miteinander verbunden werden, um einen Computer zu bilden, wie später erläutert wird. Die vorliegende Beschreibung ist auf die Architektur des Einchip-Prozessors 2. Der Prozessor 2 umfasst mehrere Verarbeitungseinheiten, die als Kacheln oder Tiles bezeichnet werden. In einem Ausführungsbeispiel sind 1216 Kacheln in Arrays 6a, 6b organisiert, die hier als „Nord“ und „Süd“ bezeichnet sind. In dem beschriebenen Beispiel hat jedes Array acht Spalten mit 76 Kacheln (tatsächlich sind aus Redundanzgründen in der Regel 80 Kacheln vorgesehen). Es ist ersichtlich, dass die beschriebenen Konzepte auf eine Reihe verschiedener physikalischer Architekturen erweiterbar sind - wobei ein Beispiel hier zum besseren Verständnis dienen soll. Der Chip 2 umfasst zwei Chip-zu-Host-Verbindungen 8a, 8b und 4 Chip-zu-Chip-Verbindungen 30a, 30b, die am „West“-Rand des Chips 2 angeordnet sind. Der Chip 2 empfängt von einem Host (nicht gezeigt), der mit dem Chip über eine der Chip-zu-Host-Verbindungen verbunden ist, Arbeit in Form von Eingangsdaten, die von dem Chip 2 verarbeitet werden sollen. Die Chips können durch weitere 6 Chip-zu-Chip-Verbindungen 30a, 30b, die an der „Ost“-Seite des Chips angeordnet sind, miteinander verbunden werden, um Karten zu bilden. Ein Host kann auf einen Computer zugreifen, der als Einzelchip-Prozessor 2 aufgebaut ist, wie hier beschrieben, oder auf eine Gruppe aus mehreren miteinander verbundenen Einzelchip-Prozessoren 2, abhängig von der Arbeitslast der Host-Anwendung aufgebaut ist.
  • Der Chip 2 weist einen Takt 3 auf, der die Zeitsteuerung der Chipaktivität steuert. Der Takt ist mit allen Chip-Schaltungen und -Komponenten verbunden. Der Chip 2 umfasst eine zeitdeterministische Schaltstruktur 34, mit der alle Kacheln und Verbindungen durch Sätze von Verbindungsleitungen verbunden sind, wobei die Schaltstruktur zustandslos ist, d.h. sie weist keinen programmsichtbaren Zustand auf. Jeder Satz von Verbindungsleitungen ist von Ende zu Ende fixiert. Die Leitungen sind pipelineartig verbunden. In diesem Ausführungsbeispiel umfasst ein Satz 32 Datenleitungen plus Steuerleitungen, beispielsweise ein gültiges Bit. Jeder Satz kann ein 32-Bit-Datenpaket aufnehmen, wobei aber zu beachten ist, dass das Wort „Paket“ eine Gruppe von Bits beschreibt, die ein Datum repräsentieren (manchmal hier auch als „Datenelement“ bezeichnet), möglicherweise mit einer oder mehreren gültigen Bits. Die „Pakete“ weisen keine Header oder irgendeine Form von Zielidentifizierung auf, die eine eindeutige Identifikation eines beabsichtigten Empfängers erlaubt, und auch nicht eine Ende-des-Pakets-Information. Stattdessen repräsentieren sie alle einen numerischen oder logischen Wert, der in eine Kachel eingegeben oder von dieser ausgegeben wird. Jede Kachel hat einen eigenen lokalen Speicher (später beschrieben). Die Kacheln teilen sich keinen Speicher. Die Schaltstruktur bildet eine gekreuzte Gruppe von Verbindungsleitungen, die nur mit Multiplexern and Kacheln verbunden sind, wie später beschrieben wird, und speichert keinen programmsichtbaren Zustand. Die Schaltstruktur wird als zustandslos betrachtet und verwendet keinen Speicher. Der Datenaustausch zwischen Kacheln erfolgt auf einer zeitdeterministischen Basis, wie hier beschrieben wird. Eine Pipeline-Verbindungsleitung umfasst eine Reihe temporärer Speicher, z.B. Zwischenspeicher oder Flip-Flops, die das Datenelement für einen Taktzyklus speichern, bevor es für den nächsten Speicher freigegeben wird. Die Bewegungszeit entlang der Leitung wird durch diese temporären Speicher bestimmt, wobei jeder einen Taktzyklus an Zeit in einem Pfad zwischen zwei beliebigen Punkten verbraucht.
  • 2 zeigt eine beispielhafte Kachel 4 gemäß Ausführungsbeispielen der vorliegenden Offenbarung. In der Kachel werden mehrere Threads durch eine einzige Ausführungspipeline verschachtelt. Die Kachel 4 umfasst: eine Vielzahl von Kontexten 26, die jeweils angeordnet sind, um den Zustand eines jeweiligen anderen einer Vielzahl von Threads darzustellen; einen gemeinsam genutzten Befehlsspeicher 12, der den mehreren Threads gemeinsam ist; einen gemeinsam genutzten Datenspeicher 22, der auch den mehreren Threads gemeinsam ist; eine gemeinsam genutzte Ausführungspipeline 14, 16, 18, die wiederum den mehreren Threads gemeinsam ist; und einen Thread-Scheduler 24 zum Planen des Ablaufs der Vielzahl von Threads zur Ausführung durch die gemeinsam genutzte Pipeline auf verschachtelte Weise. Der Thread-Scheduler 24 ist in dem Diagramm schematisch durch eine Folge von Zeitschlitzen S0 bis S5 dargestellt, wobei es sich in der Praxis aber um einen Hardwaremechanismus handelt, der Programmzähler der Threads in Bezug auf ihre Zeitschlitze verwaltet. Die Ausführungspipeline umfasst eine Holestufe 4, eine Decodierstufe 16 und eine Ausführungsstufe 18, die eine Ausführungseinheit (EXU) und eine Lade-/Speichereinheit (LSU) umfasst. Jeder der Kontexte 26 umfasst einen jeweiligen Satz von Registern R0, R1 ... zum Darstellen des Programmzustands des jeweiligen Threads.
  • Die Holestufe 14 ist so verbunden, dass sie auszuführende Befehle unter Steuerung des Thread-Schedulers 24 aus dem Befehlsspeicher 12 abruft. Der Thread-Scheduler 24 ist so ausgestaltet zur Steuerung der Holestufe 14 in der Weise, dass sie Befehle aus dem lokalen Programm zur Ausführung in jedem Zeitschlitz abruft, wie weiter unten ausführlicher erläutert wird.
  • Die Holestufe 14 hat Zugriff auf einen Programmzähler (PC) eines jeden der Threads, der aktuell einem Zeitschlitz zugeordnet ist. Für einen gegebenen Thread 14 holt die Holestufe den nächsten Befehl dieses Threads aus der nächsten Adresse in dem Befehlsspeicher 12, die durch den Programmzähler des Threads angezeigt wird. Es ist zu beachten, dass ein hier genannter Befehl die Bedeutung eines Maschinencodebefehls hat, d.h. ein Exemplar einer der grundlegenden Befehle des Befehlssatzes des Computers, die aus einem Befehlscode (Befehlscode) und null oder mehreren Operanden bestehen. Es gilt auch zu beachten, dass das in jede Kachel geladene Programm durch einen Prozessor oder Compiler bestimmt ist, um Arbeit basierend auf dem unterstützten Graphen des Maschinenintelligenzmodells.
  • Die Holestufe 14 leitet dann den geholten Befehl an die Dekodierstufe 16 weiter, damit er dekodiert wird, und die Dekodierstufe 16 übergibt dann eine Angabe des dekodierten Befehls an die Ausführungsstufe 18 zusammen mit den dekodierten Adressen von Operandenregistern des im Befehl spezifizierten aktuellen Kontextes, damit der Befehl ausgeführt wird.
  • In dem vorliegenden Beispiel verschachtelt der Thread-Scheduler 24 Threads gemäß einem Round-Robin-Schema, wobei die Runde innerhalb jeder Runde des Schemas in eine Folge von Zeitschlitzen S0, S1, S2, S3 aufgeteilt wird, jeweils zum Ausführen eines entsprechenden Threads. Typischerweise weist jeder Schlitz die Länge eines Prozessorzyklus auf, wobei die verschiedenen Schlitze gleichmäßig groß sind (wenn auch nicht notwendigerweise in allen möglichen Ausführungsbeispielen). Dieses Muster wiederholt sich dann, wobei jede Runde ein jeweiliges Exemplar eines jeden der Zeitschlitze umfasst (in Ausführungs-. beispielen jeweils in derselben Reihenfolge, jedoch nicht notwendigerweise in allen möglichen Ausführungsbeispielen). Man beachte daher, dass ein Zeitschlitz, auf den hier Bezug genommen wird, die sich wiederholende zugewiesene Stelle in der Sequenz und nicht ein bestimmtes Exemplar des Zeitschlitzes in einer bestimmten Wiederholung der Sequenz bedeutet. In dem dargestellten Ausführungsbeispiel sind acht Zeitschlitze vorhanden, wobei aber andere Zahlen möglich sind. Jeder Zeitschlitz ist einer Hardwareressource zugeordnet, z. B. einem Register, um den Kontext eines ausführenden Threads zu verwalten.
  • Einer der mit SV bezeichneten Kontexte 26 ist für eine spezielle Funktion reserviert, um den Zustand eines „Supervisors“ (SV) darzustellen, dessen Aufgabe es ist, die Ausführung von „Worker“-Threads zu koordinieren. Der Supervisor kann als Programm implementiert werden, das als ein oder mehrere Supervisor-Threads organisiert ist, die gleichzeitig ausgeführt werden können. Der Supervisor-Thread kann auch für die Ausführung von Barrieren-Synchronisierungen verantwortlich sein, die später beschrieben werden, oder er kann für den Austausch von Daten von und zu der Kachel sowie in den und von dem lokalen Speicher verantwortlich sein, so dass er von den Worker-Threads zwischen Berechnungen gemeinsam genutzt werden kann. Der Thread-Scheduler 24 ist so ausgestaltet, dass er, wenn das Programm als Ganzes startet, mit der Zuweisung des Supervisor-Threads zu allen Zeitschlitzen beginnt, d.h. der Supervisor SV beginnt in allen Zeitschlitzen S0... S5 zu laufen. Der Supervisor-Thread ist jedoch mit einem Mechanismus versehen, um zu einem späteren Zeitpunkt (entweder sofort oder nach Durchführung einer oder mehrerer Supervisor-Aufgaben) jeden der Schlitze, in denen er läuft, zeitweise an einen der Worker-Threads freizugeben. C0, C1 bezeichnen Schlitze, denen ein Worker-Thread zugewiesen worden ist. Dies wird dadurch erreicht, dass der Supervisor-Thread einen Freigabebefehl ausführt, der hier beispielhaft als „RUN“ bezeichnet wird. In Ausführungsbeispielen benötigt dieser Befehl zwei Operanden: eine Adresse eines Worker-Threads in dem Befehlsspeicher 12 und eine Adresse einiger Daten für diesen Thread in dem Datenspeicher 22:
    • RUN task_addr, data_addr
  • Jeder Worker-Thread ist ein Codelet, der dazu vorgesehen ist, einen Scheitelpunkt in dem Graphen zu repräsentieren und atomar ausgeführt zu werden. Das heißt, alle von ihm benötigten Daten sind beim Start verfügbar und alle von ihm erzeugten Daten sind so lange für andere Threads nicht sichtbar, bis er beendet wird. Er wird vollständig ausgeführt (mit Ausnahme von Fehlerzuständen). Die Datenadresse kann einige Daten spezifizieren, die der Codelet verarbeiten soll. Alternativ kann der Freigabebefehl nur einen einzelnen Operanden erfordern, der die Adresse des Codelets angibt, und die Datenadresse könnte in dem Code des Codelets eingeschlossen sein; oder der einzelne Operand könnte auf eine Datenstruktur zeigen, die die Adressen des Codelets und der Daten angibt. Codelets können gleichzeitig und unabhängig voneinander ausgeführt werden.
  • Auf jeden Fall wirkt dieser Freigabebefehl („RUN“) auf den Thread-Scheduler 24, um den aktuellen Zeitschlitz, d.h. den Zeitschlitz, in dem dieser Befehl ausgeführt wird, an den durch den Operanden angegebenen Worker-Thread zu übergeben. Es gilt zu beachten, dass der Freigabe-Befehl implizit enthält, dass der Zeitschlitz, in dem dieser Befehl ausgeführt wird, freigegeben wird (implizit bedeutet im Zusammenhang mit Maschinencodebefehlen, dass kein Operand erforderlich ist, um dies anzugeben - dies wird implizit aus dem Befehlscode als solchem verstanden). Somit entspricht der abgegebene Zeitschlitz dem Zeitschlitz, in dem der Supervisor den Befehl zum Freigeben ausführt. Oder anders ausgedrückt: Der Supervisor führt in dem gleichen Platz aus, den er abgibt. Der Supervisor sagt „führe diesen Codelet zu diesem Zeitpunkt aus“, und von diesem Zeitpunkt an ist der Zeitschlitz (zeitweilig) im Besitz des betreffenden Worker-Threads. Es gilt zu beachten, dass dann, wenn ein Supervisor einen Schlitz verwendet, er nicht den mit diesem Zeitschlitz verknüpften Kontext verwendet, sondern seinen eigenen Kontext SV.
  • Der Supervisor-Thread SV führt eine ähnliche Operation in jedem der Zeitschlitze aus, um alle seine Zeitschlitze C0, C1 an jeweils verschiedene Worker-Threads abzugeben. Sobald er dies für den letzten Zeitschlitz getan hat, unterbricht der Supervisor die Ausführung, da er keine Zeitschlitze mehr hat, in denen er ausgeführt werden kann. Es gilt zu beachten, dass der Supervisor möglicherweise nicht alle seine Zeitschlitze abgibt, sondern einige davon für sich eigene Ausführungen behält.
  • Wenn der Supervisor-Thread feststellt, dass es Zeit ist, ein Codelet auszuführen, verwendet er den Freigabe-Befehl („RUN“), um diesen Codelet dem Zeitschlitz zuzuordnen, in dem er den „RUN“-Befehl ausführt.
  • Jeder der Worker-Threads in den Zeitschlitzen C0, C1 schreitet zur Ausführung seiner einen oder mehreren Berechnungsaufgaben. Am Ende seiner Aufgabe(n) übergibt der Worker-Thread dann den Zeitschlitz, in dem abläuft, wieder an den Supervisor-Thread zurück.
  • Dies wird erreicht, indem der Worker-Thread einen Beendigungs-Befehl ausführt („EXIT“). In einem Ausführungsbeispiel benötigt der EXIT-Befehl mindestens einen Operanden und vorzugweise nur einen einzelnen Operanden, nämlich Beendigung-Status (z.B. ein Binärwert), der für jeden vom Programmierer gewünschten Zweck verwendet werden soll, um einen Zustand des jeweiligen Codelets bei einer Beendigung anzuzeigen.
  • EXIT exit_state
  • In einem Ausführungsbeispiel wirkt der EXIT-Befehl auf den Scheduler 24 in der Weise, dass der Zeitschlitz, in dem er ausgeführt wird, an den Supervisor-Thread zurückgegeben wird. Der Supervisor-Thread kann dann eine oder mehrere nachfolgende Supervisor-Aufgaben ausführen (z.B. Barrieren-Synchronisation und/oder Verschieben von Daten im Speicher, um den Datenaustausch zwischen Worker-Threads zu erleichtern) und/oder einen weiteren Freigabebefehl ausführen, um dem betreffenden Zeitschlitz einen neuen Worker-Thread zuzuordnen (W4 usw.) an. Es sei noch einmal darauf hingewiesen, dass die Gesamtanzahl von Threads in dem Befehlsspeicher 12 größer sein kann als die Anzahl, die die Barrel-Thread-Verarbeitungseinheit 10 zu einem beliebigen Zeitpunkt verschachteln kann. Es ist Aufgabe des Supervisor-Threads SV, welcher der Worker-Threads W0...Wj aus dem Befehlsspeicher 12 in welchem Stadium des Gesamtprogramms für den Ablauf eingeplant werden soll.
  • In einem anderen Ausführungsbeispiel muss der EXIT-Befehl keinen Beendigung-Status definieren.
  • Dieser Befehl wirkt auf den Thread-Scheduler 24 so ein, dass der Zeitschlitz, in dem er ausgeführt wird, an den Supervisor-Thread zurückgegeben wird. Der Supervisor-Thread kann dann eine oder mehrere Supervisor-Folgeaufgaben (z.B. Barrierensynchronisation und/oder Datenaustausch) ausführen und/oder einen weiteren Freigabebefehl fortgesetzt ausführen, und so weiter.
  • Wie oben kurz erwähnt, werden Daten zwischen Kacheln auf dem Chip ausgetauscht. Jeder Chip verfügt über ein massensynchrones Parallelverarbeitungsprotokoll (BSP-Protokoll), mit einer Rechenphase und eine Austauschphase. Das Protokoll ist beispielsweise in 3 dargestellt. Das linke Diagramm in 3 stellt eine Rechenphase dar, in der sich jede Kachel 4 in einer Phase befindet, in der die zustandsbehafteten Codelets im lokalen Speicher (12, 22) ausgeführt werden. Obwohl in 3 die Kacheln 4 in einem Kreis angeordnet sind, dient dies nur der Erläuterung und spiegelt nicht die tatsächliche Architektur wider.
  • Auf die Rechenphase folgt eine Synchronisation, die durch einen Pfeil 30 gekennzeichnet ist. Um dies zu erreichen, ist im Befehlssatz des Prozessors ein SYNC- (Synchronisations-) Befehl enthalten. Der SYNC-Befehl bewirkt, dass der Supervisor-Thread SV wartet, bis alle derzeit ausführenden Arbeiter W mittels eines EXIT-Befehls beendet wurden. In Ausführungsbeispielen benötigt der SYNC-Befehl einen Modus als Operanden (in Ausführungsbeispielen sein einziger Operand), wobei der Modus angibt, ob der SYNC nur lokal in Bezug auf diejenigen Worker-Threads wirken soll, die lokal auf demselben Prozessormodul 4 laufen, z.B. derselben Kachel, oder ob er stattdessen für mehrere Kacheln oder sogar für mehrere Chips angewendet werden soll.
    • SYNC-Modus //Modus ∈ {Kachel, Chip,zone_1,zone_2}
  • BSP an sich ist im Stand der Technik bekannt. Gemäß BSP führt jede Kachel 4 in einem alternierenden Zyklus eine Rechenphase 52 und eine Austauschphase 50 (manchmal als Kommunikations- oder Nachrichtendurchlassphase bezeichnet) durch. Die Rechenphase und die Austauschphase werden von den Kacheln ausgeführt, der Befehle ausführen. Während der Rechenphase 52 führt jede Kachel 4 eine oder mehrere Berechnungsaufgaben lokal auf der Kachel durch, kommuniziert jedoch keine Ergebnisse dieser Berechnungen mit irgendwelchen anderen der Kacheln 4. In der Austauschphase 50 darf jede Kachel 4 ein oder mehrere Ergebnisse der Berechnungen aus der vorhergehenden Rechenphase zu und/oder von einer oder mehreren anderen Kacheln in der Gruppe austauschen (kommunizieren), führt aber noch keine neuen Berechnungen durch, die potentiell abhängig sind von einer auf einer anderen Kachel 4 ausgeführten Aufgabe oder von denen eine Aufgabe auf einer anderen Kachel 4 möglicherweise abhängig sein könnte (es ist nicht ausgeschlossen, dass andere Operationen, wie zum Beispiel interne steuerungsbezogene Operationen, in der Austauschphase ausgeführt werden können). Gemäß dem BSP-Prinzip wird ferner eine Barrieren-Synchronisation an der Verbindungsstelle angeordnet, die von den Rechenphasen 52 in die Austauschphase 50 übergeht, oder an der Verbindungsstelle, die von den Austauschphasen 50 in die Rechenphase 52 übergeht, oder beides. Das heißt, entweder: (a) alle Kacheln 4 müssen ihre jeweiligen Rechenphasen 52 abschließen, bevor irgendeiner in der Gruppe zur nächsten Austauschphase 50 weiterschreiten darf, oder (b) alle Kacheln 4 in der Gruppe müssen ihre jeweiligen Austauschphasen 50 abschließen, bevor irgendeine Kachel aus der Gruppe zur nächsten Rechenphase 52 weiterschreiten darf, oder (c) beide dieser Bedingungen werden durchgesetzt. Diese Folge von Austausch- und Rechenphasen kann sich dann über mehrere Wiederholungen wiederholen. In der BSP-Terminologie wird jede Wiederholung der Austauschphase und der Rechenphase hier als „Superstep“ bezeichnet, was mit der Verwendung in einigen früheren BSP-Beschreibungen übereinstimmt. Es wird hier angemerkt, dass der Begriff „Superstep“ in der Technik manchmal verwendet wird, um jeweils die Austauschphase und die Rechenphase zu bezeichnen.
  • Die Ausführungseinheit (EXU) der Ausführungsstufe 18 ist so ausgestaltet, dass sie als Reaktion auf den Befehlscode des SYNC-Befehls, wenn sie durch den On-Chip-Operanden (kachelübergreifenden Operanden) qualifiziert ist, den Supervisor-Thread, in dem der „SYNC Chip“ ausgeführt wurde, zum Anhalten veranlasst, bis alle Kacheln 4 in dem Array 6 alle ausführenden Arbeiter beendet haben. Dies kann verwendet werden, um eine Barriere für den nächsten BSP-Superstep zu implementieren, d.h. nachdem alle Kacheln 4 auf dem Chip 2 die Barriere passiert haben, kann das kachelübergreifende Programm als Ganzes in die nächste Austauschphase 50 übergehen.
  • Jede Kachel zeigt einem Synchronisationsmodul 36 ihren Synchronisationszustand an. Sobald festgestellt wurde, dass jede Kachel bereit ist, Daten zu senden, bewirkt der Synchronisationsprozess 30, dass das System in eine Austauschphase eintritt, die auf der rechten Seite von 3 gezeigt ist. In dieser Austauschphase werden Datenwerte zwischen den Kacheln bewegt (in der Tat zwischen den Speichern von Kacheln in einer Speicher-zu - Speicher-Datenbewegung). In der Austauschphase finden keine solchen Berechnungen statt, die Parallelitätsgefährdungen zwischen Kachelprogrammen verursachen könnten. In der Austauschphase bewegt sich jedes Datenelement entlang den Verbindungsleitungen, auf denen es eine Kachel verlässt, von einer sendenden Kachel zu einer oder mehreren Empfängerkachel(n). Mit jedem Taktzyklus bewegt sich das Datenelement pipelineartig um eine bestimmte Distanz entlang seines Pfads (von Speicher zu Speicher). Wenn ein Datenelement aus einer Kachel ausgegeben wird, wird es nicht mit einem einen Empfänger identifizierenden Header ausgegeben. Stattdessen weiß die Empfängerkachel, dass sie ein Datenelement zu einem bestimmten Zeitpunkt von einer bestimmten sendenden Kachel erwarten wird. Somit ist der hier beschriebene Computer zeitdeterministisch. Jede Kachel betreibt ein Programm, das ihm vom Programmierer oder von einer Compiler-Ausführung zugewiesen wurde, wobei der Programmierer oder die Compiler-Ausführung wissen, was von einer bestimmten Kachel zu einem bestimmten Zeitpunkt übertragen wird und was von einem Empfängerkachel zu einer bestimmten Zeit empfangen werden soll. Um dies zu erreichen, sind SEND-Befehle in den lokalen Programmen enthalten, die von dem Prozessor auf jeder Kachel ausgeführt werden, wobei der Zeitpunkt der Ausführung des SEND-Befehls relativ zum Zeitablauf anderen Befehle, die auf anderen Kacheln im Computer ausgeführt werden, vorbestimmt ist. Dies wird später im Einzelnen beschrieben, aber zuerst wird der Mechanismus beschrieben, durch den eine Empfängerkachel ein Datenelement zu einer vorbestimmten Zeit empfangen kann. Jede Kachel 4 ist mit ihrem eigenen Multiplexer 210 verknüpft: Somit hat der Chip 1216 Multiplexer. Jedes Multiplexer weist 1216 Eingänge auf, wobei jeder Eingang eine Breite von 32 Bit umfasst (plus gegebenenfalls einige Steuerbits). Jeder Eingang ist mit einem jeweiligen Satz von Verbindungsleitungen 140x in der Schaltstruktur 34 verbunden. Die Verbindungsleitungen der Schaltstruktur sind auch mit einem Datenausgabesatz von Verbindungsleitungen 218 einer jeder Kachel (einem später beschriebenen Rundsendungs-Austausch-Bus) verbunden, sodass es 1216 Sätze von Verbindungsleitungen gibt, die sich in diesem Ausführungsbeispiel in einer Richtung über den Chip erstrecken. Zur Vereinfachung der Darstellung ist ein einzelner symbolischer Satz angeschlossener Leitungen 140sc gezeigt, der mit den Datenausgangsleitungen 218s verbunden ist, die von einer nicht in 2 gezeigten Kachel im südlichen Array 6b herrühren. Wenn der Multiplexer zu einer bestimmten Zeit zum Umschalten auf diesen Eingang (220sc) gesteuert wird, dann wird das an den mit dem Satz von Verbindungsleitungen 140x verbundenen Datenausgangsleitungen empfangene Datenelement am Ausgang 230 des Multiplexers 210 zu einem bestimmten Zeitpunkt erscheinen. Es wird dann nach einer bestimmten Verzögerung an der Kachel 4 ankommen, wobei die Verzögerung von der Entfernung des Multiplexers von der Kachel abhängt. Da die Multiplexer einen Teil der Schaltstruktur bilden, kann die Verzögerung von der Kachel zu dem Multiplexer in Abhängigkeit der Lage der Kachel variieren. Zur Implementierung des Schaltvorgangs enthalten die auf den Kacheln ausgeführten lokalen Programme Schaltersteuerbefehle (PUTi), die ein eine Ausgabe eines Multiplexer-Steuersignals 214 verursachen, um den mit dieser Kachel verknüpften Multiplexer zu veranlassen, seinen Eingang zu einem bestimmten Zeitpunkt vor dem Zeitpunkt, an dem der Empfang eines bestimmten Datenelement an der Kachel erwartet wird, umzuschalten. In der Austauschphase werden, unter Verwendung der Schaltstruktur, Multiplexer umgeschaltet und Pakete (Daten) zwischen Kacheln ausgetauscht. Aus dieser Erläuterung geht hervor, dass die Schaltstruktur keinen Zustand hat - die Bewegung eines jeden Datenelements ist vorbestimmt durch den bestimmten Satz von Leitungen, zu dem der Eingang eines jeden Multiplexers umgeschaltet wird.
  • In der Austauschphase wird eine alle-Kacheln-zu-allen-Kacheln-Kommunikation aktiviert. Die Austauschphase kann mehrere Zyklen aufweisen. Jede Kachel 4 steuert ihren eigenen eindeutigen Eingangsmultiplexer 210. Eingehender Verkehr von irgendeiner anderen Kachel auf dem Chip oder von einer der Verbindungen kann ausgewählt werden. Es ist zu beachten, dass ein Multiplexer möglicherweise so eingestellt ist, dass er eine „Null“-Eingabe empfängt, d.h. keine Eingabe von einer anderen Kachel in dieser bestimmten Austauschphase. Die Auswahl kann sich Zyklus für Zyklus innerhalb einer Austauschphase ändern; sie muss nicht überall konstant sein. Daten können auf dem Chip oder von Chip zu Chip oder von Chip zu Host ausgetauscht werden, abhängig von der gewählten Verbindung. Die vorliegende Anmeldung befasst sich hauptsächlich mit kachelübergreifender Kommunikation auf einem Chip. Zur Durchführung einer Synchronisation auf dem Chip werden einer Synchronisationsteuerung (Sync-Controller) 36 auf dem Chip eine kleine Anzahl von Pipeline-Signalen von allen Kacheln bereitgestellt und ein zeitverschachteltes Sync-Ack-Signal wird von der Synchronisationssteuerung an alle Kacheln zurückgesendet. Bei einem Ausführungsbeispiel handelt es sich bei den Pipeline-Signalen um ein Bit breite, verkettete UND/ODER-Signale. Ein Mechanismus, durch den die Synchronisation zwischen Kacheln erreicht wird, ist der oben erwähnte oder im Folgenden beschriebene SYNC-Befehl. Ein anderer Mechanismus kann verwendet werden: Wichtig ist, dass alle Kacheln zwischen einer Rechenphase des Chips und einer Austauschphase des Chips synchronisiert werden können (3). Der SYNC-Befehl löst die folgende Funktionalität aus, die in einer dedizierten Synchronisationslogik auf der Kachel 4 ausgelöst werden soll, und in der Synchronisationssteuerung 36. Die Synchronisationssteuerung 36 kann in der Hardware-Zwischenverbindung 34 oder, wie gezeigt, in einem separaten On-Chip-Modul implementiert sein. Diese sowohl in der kachelseitigen Synchronisationslogik als auch in der Synchronisationssteuerung 36 vorhandene Funktionalität ist in einer dedizierten Hardwareschaltung implementiert, sodass die restliche Funktionalität ohne Ausführung weiterer Befehle fortschreitet sobald der SYNC-Chip ausgeführt wird.
  • Erstens bewirkt die kachelseitige Synchronisationslogik ein automatisches Pausieren der Befehlsausgabe für den Supervisor auf der betreffenden Kachel 4 (sie bewirkt, dass die Holestufe 14 und der Scheduler 24 die Ausgabe von Befehle des Supervisors aussetzen). Sobald alle ausstehenden Worker-Threads auf der lokalen Kachel 4 ein EXIT durchgeführt haben, sendet die Synchronisationslogik automatisch eine Synchronisationsanforderung „SYNC_REQ “ an die Synchronisationssteuerung 36. Die lokale Kachel 4 wartet dann weiter, während der Supervisor-Befehlsausgabe pausiert. Ein ähnlicher Prozess wird auch auf jeder der anderen Kacheln 4 in dem Array 6 implementiert (wobei jede ihre eigene Instanz der Synchronisationslogik umfasst). Sobald also alle letzten Arbeiter in der aktuellen Rechenphase 52 auf allen Kacheln 4 in dem Array 6 einen EXIT durchgeführt haben, hat die Synchronisationssteuerung 36 eine entsprechende Synchronisationsanforderung (SYNC_REQ) von allen Kacheln 4 in dem Array erhalten. Erst dann sendet die Synchronisationssteuerung 36 als Antwort auf den Empfang des SYNC_REQ von jeder Kachel 4 in dem Array 6 auf demselben Chip 2 ein Synchronisationsbestätigungssignal „SYNC_ACK“ zur Synchronisationslogik auf jeder der Kacheln 4 zurück. Bis zu diesem Zeitpunkt hat jede der Kacheln 4 ihre Supervisor-Befehlsausgabe angehalten, während auf das Synchronisationsbestätigungssignal (SYNC_ACK) gewartet wird. Beim Empfang des SYNC_ACK-Signals führt die Synchronisationslogik in der Kachel 4 automatisch die Ausgabe des Supervisor-Befehls für den jeweiligen Supervisor-Thread auf dieser Kachel 4 fort. Der Supervisor ist dann freigegeben, um mit dem Austausch von Daten mit anderen Kacheln 4 über die Zwischenverbindung 34 in einer nachfolgenden Austauschphase 50 fortzufahren.
  • Vorzugsweise werden die Signale SYNC_REQ und SYNC_ACK über eine oder mehrere dedizierte Synchronisationsleitungen, die jede Kachel 4 mit der Synchronisationssteuerung 36 in der Zwischenverbindung 34 verbinden, zu bzw. von der Synchronisationssteuerung 36 gesendet bzw. empfangen.
  • Die Verbindungsstruktur der Kachel wird nun näher beschrieben.
  • Jede Kachel weist drei Schnittstellen auf:
    • eine Ex_In-Schnittstelle 224, die Daten von der Schaltstruktur 34 an die Kachel 4 weitergibt;
    • eine Ex_Out-Schnittstelle 226, die Daten von der Kachel 4 an die Schaltstruktur 34 über den Rundsendungsaustauschbus 218 weitergibt; und
    • eine Ex_Mux-Schnittstelle 228, die das Multiplexer-Steuerungssignal 214 (mux-select) von der Kachel 4 an ihren Multiplexer 210 weitergibt.
  • Um sicherzustellen, dass jede einzelne Kachel zu geeigneten Zeitpunkten SEND-Befehle und Schaltsteuerbefehle ausführt, um die korrekten Daten zu senden und zu empfangen, müssen Austauschablaufplanungsanforderungen von dem Programmierer oder dem Compiler erfüllt werden, der den einzelnen Kacheln im Computer individuelle Programme zuweist. Diese Funktion wird von einem Austausch-Scheduler ausgeführt, dem die folgenden Austauschzeitsteuerungs-(BNET-)Parameter bekannt sein müssen. Um diese Parameter zu verstehen, ist eine vereinfachte Version der 2 in 4 gezeigt. 4 zeigt auch sowohl eine Empfängerkachel als auch eine Senderkachel.
    1. I. Die relative SYNC-Bestätigungsverzögerung jeder Kachel, BNET_RSAK (TID). TID ist die Kachelkennung (Kachel-ID), die in einem später beschriebenen TILE_ID-Register gespeichert wird. Diese entspricht einer Anzahl von Zyklen, immer größer oder gleich 0, welche anzeigt, wann jede Kachel das ACK-Signal von der Synchronisationssteuereinheit 36 im Verhältnis zur frühesten Empfängerkachel. Dies kann aus der Kachel-ID berechnet werden, wobei zu beachten ist, dass die Kachel-ID den bestimmten Ort der Kachel auf dem Chip dieser Kachel angibt und daher die physikalischen Entfernungen widerspiegelt. 4 zeigt eine Senderkachel 4T und ein Empfänger Kachel 4R . Obwohl nur schematisch und nicht maßstabsgetreu dargestellt, ist die Kachel 4T näher an der Synchronisationssteuerung 36 und die Kachel 4R weiter entfernt angezeigt, was zur Folge hat, dass die Synchronisationsbestätigungsverzögerung zur Kachel 4T kürzer ist als für die Kachel 4R . Jeder Kachel wird ein bestimmter Wert für die Synchronisationsbestätigungsverzögerung zugeordnet. Diese Werte können zum Beispiel in einer Verzögerungstabelle gespeichert werden, oder können jedes Mal in Echtzeit auf Grundlage der Kachel-ID berechnet werden.
    2. II. Die Austauschmultiplexer-Regelkreisverzögerung, BNET_MXP (TID der Empfängerkachel). Diese entspricht der Anzahl von Zyklen zwischen einer Befehlsausgabe (PUTi-MUXPTR), die eine Multiplexer-Auswahl des Kacheleingangs ändert, und dem frühesten Zeitpunkt, an dem dieselbe Kachel einen (hypothetischen) Ladebefehl für den Austausch von im Speicher gespeicherten Daten als Ergebnis der neuen Multiplexer-Auswahl abgibt. Mit Blick auf 4 umfasst diese Verzögerung die Verzögerung des Steuersignals zum Gelangen von der Ex_Mux-Schnittstelle 228R der Empfängerkachel 4R zu deren Multiplexer 210R und die Länge der Leitung von dem Ausgang des Multiplexers zur Ex_In-Schnittstelle 224 des Dateneingangs.
    3. III. Die Kachel-zu-Kachel-Austauschverzögerung, BNET_TT (TID der sendenden Kachel, TID der empfangenden Kachel). Diese entspricht der Anzahl von Zyklen zwischen einem auf einer Kachel ausgegeben SEND-Befehl und dem frühesten Zeitpunkt, an dem die empfangende Kachel einen auf den gesendeten Wert in ihrem eigenen Speicher zeigenden (hypothetischen) Ladebefehl ausgeben kann. Diese wurde bestimmt aus den Kachel-IDs der Sende- und Empfängerkacheln, entweder durch Zugriff auf eine Tabelle, wie erläutert wurde, oder durch Berechnung. Betrachtet man erneut 4, so umfasst diese Verzögerung die von Daten benötigte Zeit zum Wandern von der Ex_Out-Schnittstelle 226T der Senderkachel 4T zu der Schaltstruktur 14 entlang ihres Austauschbusses 218T und dann über den Eingangsmultiplexer 210R an der Empfängerkachel 4R zu der Ex_In Schnittstelle 224R der Empfängerkachel 4R .
    4. IV. Die Austauschverkehrsspeicherzeiger-Aktualisierungsverzögerung, BNET_MMP (). Diese entspricht der Anzahl von Zyklen zwischen der Ausgabe eines Befehls (PUTi-MEMptr), der einen Austauscheingangsverkehrsspeicherzeiger einer Kachel ändert und dem frühesten Zeitpunkt, an dem dieselbe Kachel einen (hypothetischen) Ladebefehl für im Speicher als Folge des neuen Zeigers gespeicherte Austauschdaten abgeben könnte. Dies ist eine kleine, feste Anzahl von Zyklen. Der Speicherzeiger wurde noch nicht erläutert, ist aber in 2 mit dem Bezugszeichen 232 gezeigt. Er fungiert als ein Zeiger in den Datenspeicher 202 und zeigt an, wo eingehende Daten von der Ex _in-Schnittstelle 224 gespeichert werden sollen. Dies wird später näher beschrieben.
  • 5 zeigt die Austauschzeitsteuerung im Detail. Auf der linken Seite der 4 sind die IPU-Taktzyklen von 0 bis 30 gezeigt. Zwischen den IPU-Taktzyklen 0 und 9 findet eine Aktion an der Senderkachel 4T statt, die mit der Abgabe eines Sendebefehls (SEND F3 ) beginnt. In den IPU-Taktzyklen 10 bis 24, setzt das Datenelement seinen Weg durch die Schaltstruktur 34 pipelineartig zusammen.
  • Mit Blick auf die Empfängerkachel 4R wird im IPU-Taktzyklus 11 ein PUTi-Befehl ausgeführt, der die Multiplexerauswahl des Kacheleingangs ändert: PUTi-MXptr (F3 ). In 5 wird dieser PUTi- Befehl als „PUTi EINGEHENDER MUX (F3)“ bezeichnet.
  • In Zyklus 18 wird der Speicherzeiger-Befehl PUTi-MEMptr (F3 ) ausgeführt, wodurch ein Ladebefehl im ITU-Taktzyklus 25 ermöglicht wird. In 5 ist dieser PUTi-Befehl als „PUTi EINGEHENDE ADR (F3)“ bezeichnet.
  • Auf der sendenden Kachel 4T sind die IPU-Taktzyklen 1, 3 und 5 mit „TRANSPORT ()“ markiert. Dies ist eine interne Kachelverzögerung zwischen der Abgabe eines SEND-Befehls und der Manifestierung der Daten des SEND-Befehls auf der Ex_Out-Schnittstelle. F4, E1, E3 usw. bezeichnen Datenelemente aus früherem SEND-Befehlen, die zur Ex_Out-Schnittstelle transportiert werden. Der IPU-Taktzyklus 2 ist der Bildung einer Adresse EO für einen SEND-Befehl zugeordnet. Es gilt zu beachten, dass es sich hier darum handelt, wo EO geholt werden soll, nicht um deren Zieladresse. Im IPU-Takt 4 wird ein Speichermakro ausgeführt, um E2 aus dem Speicher zu holen. Im IPU-Takt 6 wird eine Paritätsprüfung an E4 durchgeführt. Im IPU-Takt 7 wird eine MUX-Ausgabebefehl ausgeführt, um E5 zu senden. Im IPU-Takt 8 wird E6 codiert und im IPU-Takt E7 ausgegeben.
  • In der Austauschstruktur 34 sind die IPU-Taktzyklen 10 bis 24 als „AUSTAUSCH PIPELINE-STUFE“ markiert. In jedem Zyklus bewegt sich ein Datenelement um „einen Schritt“ entlang der Pipeline (zwischen temporären Speichern).
  • Die Zyklen 25 - 28 bezeichnen die Verzögerung auf der Empfängerkachel 4R zwischen dem Empfang eines Datenelements an der Ex_In-Schnittstelle (siehe SPEICHERMAKRO (E2), für Aust.), während die Zyklen 25 - 29 die Verzögerung zwischen dem Empfangen eines Datenelements an der Ex_In- Schnittstelle und dessen Laden in den Speicher angeben (siehe SP.-MAKRO (E2) für LD). Andere Funktionen können in dieser Verzögerung ausgeführt werden - siehe FRÜHESTE LD (F3), lies Reg-Datei (F4), bilde Adresse (EO), Transport (E1).
  • Mit einfachen Worten, wenn der Prozessor der Empfängerkachel 4R auf ein Datenelement (z.B. F3) einwirken möchte, das die Ausgabe eines Prozesses auf der Senderkachel 4T war, dann muss die Senderkachel 4T einen SEND-Befehl [SEND (F3)] zu einem bestimmten Zeitpunkt (z.B. IPU-Taktzyklus 0 in 5) ausführen, und die Empfängerkachel 4R muss einen Schaltsteuerbefehl PUTi EXCH MXptr (wie im IPU-Taktzyklus 11) in einer bestimmte Zeit relativ zur Ausführung des SEND-Befehls [SEND (F3)] auf der Senderkachel 4T ausführen. Dadurch wird sichergestellt, dass die Daten rechtzeitig bei der Empfängerkachel 4R ankommen, um im IPU-Zyklus 25 geladen zu werden [FRÜHESTE LD (F3)], zur Verwendung in einem Codelet, der gerade auf der Empfängerkachel 4R ausgeführt wird.
  • Es gilt zu beachten, dass der Empfangsvorgang an einer Empfängerkachel nicht das Einstellen des Speicherzeigers einzubeziehen braucht, wie mit dem Befehl PUTI MEMptr. Stattdessen kann der Speicherzeiger 232 (2) nach jedem Empfang eines Datenworts an der Ex_In Schnittstelle 224 automatisch inkrementiert werden. Empfangene Daten werden dann einfach in die nächste verfügbare Speicherstelle geladen. Allerdings kann die Empfängerkachel durch die Fähigkeit, den Speicherzeiger zu ändern, die Speicherstelle verändern, an der das Datenelement geschrieben wird. All dies kann durch den Compiler oder Programmierer bestimmt werden, der die individuellen Programme für die individuellen Kacheln schreibt, so dass diese richtig kommunizieren. Dies führt dazu, dass die Zeitsteuerung eines internen Austauschs (der übergreifende Austausch auf dem Chip) vollständig zeitdeterministisch ist. Diesen Zeitdeterminismus kann der Austausch-Scheduler nutzen, um Austauschsequenzen in hohem Maße zu optimieren.
  • 6 zeigt eine beispielhafte Anwendung der hier offenbarten Prozessorarchitektur, nämlich eine Anwendung für Maschinenintelligenz.
  • Wie bereits erwähnt wurde und dem Fachmann auf dem Gebiet der Maschinenintelligenz vertraut ist, beginnt die Maschinenintelligenz mit einer Lernphase, in der der Maschinenintelligenz-Algorithmus ein bekanntes Wissensmodell lernt. Das Modell kann als ein Graph 60 aus miteinander verbundenen Knoten 102 und Verbindungen 104 dargestellt werden. Knoten und Verbindungen können als Scheitelpunkte und Kanten bezeichnet werden. Jeder Knoten 102 in dem Graph weist eine oder mehrere Eingangskanten und eine oder mehrere Ausgangskanten auf, wobei einige der Eingangskanten von einigen der Knoten 102 die Ausgangskanten von einigen anderen der Knoten sind, wodurch die Knoten zur Bildung des Graphen miteinander verbunden sind. Ferner können eine oder mehrere der Eingangskanten von einem oder mehreren der Knoten 102 die Eingänge des Graphen als Ganzes bilden, und eine oder mehrere der Ausgangskanten von einem oder mehreren der Knoten 102 die Ausgänge des Graphen als Ganzes bilden. Jede Kante 104 kommuniziert üblicherweise einen Wert in Form eines Tensors (n-dimensionale Matrix), wobei diese die Eingaben und Ausgaben bilden, die an und von den Knoten 102 an ihrer Eingangs- bzw. Ausgangskanten bereitgestellt werden.
  • Jeder Knoten 102 stellt eine Funktion seiner einen oder mehreren Eingaben dar, die an seiner Eingangskante oder seinen Eingangskanten empfangen werden, wobei das Ergebnis dieser Funktion der an der Ausgangskante oder den Ausgangskanten bereitgestellten Ausgabe(n) entspricht. Diese Ergebnisse werden manchmal als Aktivierungen bezeichnet. Jede Funktion wird durch einen oder mehrere entsprechende Parameter parametrisiert (manchmal als Gewichtungen bezeichnet, obwohl sie nicht unbedingt multiplikative Gewichtungen sein müssen). Im Allgemeinen können die durch die verschiedenen Knoten 102 dargestellten Funktionen unterschiedliche Funktionsformen sein und/oder durch verschiedene Parameter parametrisiert werden.
  • Ferner ist jeder des einen oder der mehreren Parameter der Funktion eines jeden Knotens durch einen jeweiligen Fehlerwert gekennzeichnet. Darüber hinaus kann eine entsprechende Fehlerbedingung mit dem Fehler bzw. den Fehlern in den Parametern eines jeden Knotens 102 verknüpft sein. Für einen Knoten 102, der eine durch einen einzelnen Fehlerparameter parametrisierte Funktion darstellt, kann die Fehlerbedingung eine einfache Schwelle sein, d.h. die Fehlerbedingung ist erfüllt, wenn der Fehler unterhalb der angegebenen Schwelle liegt, aber nicht, wenn der Fehler die Schwelle überschreitet. Für einen Knoten 102, der durch mehr als einen jeweiligen Parameter parametrisiert ist, kann die Fehlerbedingung für diesen Knoten 102 komplexer sein. Zum Beispiel kann die Fehlerbedingung nur dann erfüllt sein, wenn jeder der Parameter dieses Knotens 102 unter der jeweiligen Schwelle liegt. Als ein anderes Beispiel kann eine kombinierte Metrik definiert sein, die die Fehler in den verschiedenen Parametern für denselben Knoten 102 kombiniert, und die Fehlerbedingung kann unter der Bedingung erfüllt sein, dass der Wert der kombinierten Metrik unter einer bestimmten Schwelle liegt, ansonsten jedoch die Fehlerbedingung nicht erfüllt ist, wenn der Wert der kombinierten Metrik die Schwelle überschreitet (oder umgekehrt, abhängig von der Definition der Metrik). Unabhängig von der Fehlerbedingung gibt dies ein Maß dafür an, ob der Fehler in dem/den Parameter(n) des Knotens ein bestimmtes Niveau oder einen bestimmten Akzeptanzgrad unterschreitet.
  • In der Lernphase empfängt der Algorithmus Erfahrungsdaten, d.h. mehrere Datenpunkte, die verschiedene mögliche Kombinationen von Eingaben in den Graphen darstellen. Wenn mehr und mehr Erfahrungsdaten empfangen werden, stimmt der Algorithmus allmählich die Parameter der verschiedenen Knoten 102 in dem Graphen basierend auf den Erfahrungsdaten so ab, dass er versucht, die Fehler in den Parametern zu minimieren. Ziel ist es, Werte der Parameter zu finden, sodass die Ausgabe des Graphen so nahe wie möglich an einem gewünschten Ergebnis liegt. Wenn der Graph als Ganzes einem solchen Zustand zustrebt, wird die Berechnung als konvergierend bezeichnet.
  • Beispielsweise werden die Eingangserfahrungsdaten bei einem überwachten Ansatz als Trainingsdaten verwendet, d.h. Eingaben, die bekannten Ausgaben entsprechen. Mit jedem Datenpunkt kann der Algorithmus die Parameter so einstellen, dass die Ausgabe besser mit der bekannten Ausgabe für die gegebene Eingabe übereinstimmt. In der nachfolgenden Prädiktionsphase kann der Graph dann verwendet werden, um eine Eingabeabfrage auf eine ungefähr vorhergesagte Ausgabe abzubilden (oder umgekehrt, bei einer Inferenz). Andere Ansätze sind ebenfalls möglich. So gibt es bspw. bei einem unbeaufsichtigten Ansatz kein Konzept eines Referenzergebnisses pro Eingangsdatenelement, und stattdessen muss der Maschinenintelligenz-Algorithmus seine eigene Struktur in den Ausgangsdaten identifizieren. Oder bei einem Verstärkungsansatz probiert der Algorithmus mindestens eine mögliche Ausgabe für jeden Datenpunkt in den eingegebenen Erfahrungsdaten aus, und es wird ihm mitgeteilt, ob diese Ausgabe positiv oder negativ ist (und höchstwahrscheinlich einen Grad, zu dem sie positiv oder negativ ist), z.B. Gewinn oder Verlust, oder Belohnung oder Bestrafung, oder ähnliches. In vielen Versuchen kann der Algorithmus die Parameter des Diagramms schrittweise anpassen, um Eingaben, die zu einem positiven Ergebnis führen, vorhersagen zu können. Die verschiedenen Ansätze und Algorithmen zum Lernen eines Graphen sind dem Fachmann auf dem Gebiet des maschinellen Lernens bekannt.
  • Gemäß einer beispielhaften Anwendung der hier offenbarten Techniken ist jeder Worker-Thread so programmiert, dass er die mit einem jeweiligen individuellen Knoten 102 in einem Maschinenintelligenzgraphen verknüpften Berechnungen ausführt. In diesem Fall entsprechen die Kanten 104 zwischen den Knoten 102 dem Datenaustausch zwischen Threads, von denen zumindest einige einen Austausch zwischen Kacheln einschließen können.
  • 7 zeigt ein schematisches Diagramm, das die Funktion eines Compilers 70 veranschaulicht. Der Compiler empfängt einen solchen Graphen 60 und kompiliert die Funktionen in den Graphen zu einer Vielzahl von Codelets, die in lokale Programme aufgenommen werden, die in 7 mit 72 bezeichnet sind. Jedes lokale Programm ist entworfen, um in eine bestimmte Kachel des Computers geladen zu werden. Jedes Programm umfasst ein oder mehrere Codelets 72a, 72b ... plus ein Überwachungsunterprogramm 73, die jeweils aus einer Folge von Befehlen gebildet sind. Der Compiler generiert die Programme so, dass sie zeitlich miteinander verknüpft sind, das heißt, dass sie zeitdeterministisch sind. Zu diesem Zweck greift der Compiler auf Kacheldaten 74 zu, die Kachelkennungen enthalten, die den Ort der Kacheln und damit die Verzögerungen angeben, die der Compiler verstehen muss, um die lokalen Programme zu erzeugen. Die Verzögerungen wurden bereits oben erwähnt und können basierend auf den Kacheldaten berechnet werden. Alternativ können die Kacheldaten eine Datenstruktur enthalten, in der diese Verzögerungen durch eine Nachschlagetabelle verfügbar sind.
  • Es folgt nun eine Beschreibung neuer Befehle, die als Teil des Befehlssatzes für die hier definierte Computerarchitektur entwickelt wurden. 8 zeigt einen SEND-Befehl aus 32 Bits. Ein SEND-Befehl zeigt eine Datenübertragung von einem Kachelspeicher an. Er bewirkt, dass ein oder mehrere Datenelemente, die unter einer bestimmten Adresse im lokalen Speicher 22 einer Kachel gespeichert sind, an der Ex_Out-Schnittstelle einer Kachel gesendet werden. Jedes Datenelement (in dem Befehl als „Element“ bezeichnet) kann ein oder mehrere Wörter lang sein. Ein SEND-Befehl wirkt auf ein Wort oder mehrere Wörter, um eine Sendefunktion zu implementieren. Der SEND-Befehl umfasst einen Befehlscode (Opcode) 80, ein Feld 82, welches einen Nachrichtenzählstand angibt, die Anzahl der zu sendenden Elemente in Form eines oder mehrerer Pakete von der in einem Adressfeld 84 angegebenen SEND-Adresse. Das Feld 84 definiert die Adresse im lokalen Speicher, aus dem die Elemente in Form eines unmittelbaren Werts gesendet werden sollen, der zu einem in einem Basisadressregister gespeicherten Basiswert addiert wird. Der SEND-Befehl hat auch ein Sendesteuerfeld 86 (SCTL), das die Wortgröße angibt, die aus 4 oder 8 Bytes ausgewählt wird. Das Paket enthält keine Zielidentifizierung: Mit anderen Worten, die Empfängerkachel, die die Elemente empfangen soll, ist in dem Befehl nicht eindeutig identifiziert. Die Sendefunktion bewirkt, dass auf die angegebene Anzahl von Datenelementen unter der Sendeadresse im lokalen Speicher zugegriffen und diese an der Ex_Out-Schnittstelle der Kachel platziert werden soll, um beim nächsten Taktzyklus gesendet zu werden. Bei einer anderen Variante des SEND-Befehls könnte die Adresse, von der Elemente gesendet werden sollen, implizit sein; gewonnen aus dem Basiswert im Basisadressenregister und einem Deltawert in einem ausgangsseitigen Deltaregister. Der Deltawert kann basierend auf Informationen in einem vorherigen SEND-Befehl eingestellt werden. Anstelle einer eindeutigen Kennung der Empfängerkachel hat der Compiler angeordnet, dass die richtige Empfängerkachel ihre(n) lokalen Multiplexer zur richtigen Zeit schaltet, um das Datenelement (die Datenelemente) zu empfangen, wie bereits hier beschrieben. Es gilt zu beachten, dass in einigen Fällen die Senderkachel selbst eine vorgesehene Empfängerkachel sein kann.
  • Hierfür ist eine Schaltsteuerungsfunktion vorgesehen, wie oben beschrieben. 9 zeigt einen PUTi-MUX-Befehl, der diese Funktion ausführt. Ein Befehlscode-Feld 90 definiert den Befehl als einen PUT-i-MUX-Befehl. Eine Verzögerungsperiode kann durch einen Verzögerungswert 92 definiert werden. Dieser Verzögerungswert kann verwendet werden, um „No Op“-Befehle zu ersetzen, und bietet eine Möglichkeit, die Codekompression zu optimieren. Dieser Befehl definiert bei seiner Ausführung in seinem EINGANGS-MUX-Feld 98, welcher Eingang des Multiplexers 210 so eingestellt werden soll, dass er auf von einer anderen Kachel gesendete Elemente „hört“. Aus Gründen der Kompaktheit könnte diese Multiplexer-Steuerfunktion in einem einzelnen Befehl mit einer oben definierten Sendefunktion kombiniert werden, wie in 10 gezeigt. Es gilt zu beachten, dass es keine Verbindung gibt zwischen der Sendefunktion, die ein Arbeiten der Kachel als sendende Kachel bewirkt, und der Schaltsteuerungsfunktion, die eine Funktion für eine als Empfängerkachel arbeitende Kachel darstellt, außer dass sie in einem einzelnen Ausführungszyklus auf derselben Kachel ausgeführt werden können.
  • 10 zeigt ein Beispiel für einen „Merge“-Befehl. In diesem Zusammenhang ist unter einem „Merge“-Befehl ein Befehl zu verstehen, der zwei oder mehr zur gleichen Zeit (in einem Ausführungszyklus) auf einer Kachel ausführbare Funktionen definiert.
  • 10 zeigt eine Form eines „Merge“-Sendebefehls, bei dem eine Sendefunktion mit einer zweiten Funktion kombiniert ist, die den in Registern der Kachel gespeicherten Zustand modifizieren kann. Eine solche Funktion besteht darin, den Speicherzeiger für die in dieser Kachel empfangenen Daten zu ändern. Eine weitere solche Funktion besteht darin, den Eingangsmultiplexer einzustellen. Die PUTi_MEMptr-Funktion ermöglicht eine Identifizierung eines Speicherplatzes in dem lokalen Speicher, in den das nächste von der Kachel empfangene Datenelement geladen werden soll. Diese Funktion könnte durch einen dezidierten „Empfangs“-Befehl ausgeführt werden, obwohl dessen Funktion kein Bewirken des Empfangs eines Datenelements umfasst, sondern ein Modifizieren des Speicherzeigers. Tatsächlich muss kein bestimmter Befehl ausgeführt werden, um Daten auf einer Kachel zu empfangen. An der Ex_In-Schnittstelle ankommende Daten werden unter Steuerung der Ex_In- Schnittstelle in den nächsten durch den Speicherzeiger identifizierten Speicherplatz geladen. Der Befehl in 10 umfasst ein Befehlscode-Feld 100 und ein Feld 102 zur Angabe einer Anzahl von zu sendenden Elementen. Der unmittelbare Wert in einem eingangsseitigen Zustandsmodifikationsfeld 106 wird in ein durch Feld 104 spezifiziertes Austauschkonfigurationszustandsregister geschrieben. In einer Form, kann in das Zustandsmodifikationsfeld 106 ein eingangsseitiges Delta zur Berechnung der Empfangsadresse geschrieben werden, auf die der Speicherzeiger gesetzt werden soll. In einer anderen Form kann der Austauschkonfigurationszustand mit dem Eingangsmultiplexerwert eingeschrieben werden, der den Multiplexereingang festlegt.
  • Für diese Art von „Merge“-Befehlen verwendet die Sendefunktion eine Sendeadresse, die aus in einem oder mehreren, in dem Befehl implizit angegebenen Registern gespeicherten Werten bestimmt wird. Beispielsweise kann die Sendeadresse aus dem Basisregister und dem Delta-Register bestimmt werden.
  • 11 zeigt einen Befehl mit doppelter Breite, der als Austauschbefehl (EXCH) bezeichnet wird. Dieser Befehl initiiert eine Datenübertragung aus einer angezeigten Adresse im Kachelspeicher und legt den eingangsseitigen Austauschkonfigurationszustand fest (den Multiplexer und/oder den Speicherzeiger zum Empfangen von Daten). Der EXCH-Befehl ist insofern einzigartig, als auf ihn unmittelbar eine Inline-32-Bit-Nutzlast folgt, die sich unmittelbar nach den Befehlen am Speicherort befindet. Der EXCH-Befehl umfasst ein Befehlscode-Feld 110, das eine Austauschbefehl EXCH bezeichnet. Die Nutzlast weist ein „Coissue-Flag“ 119 auf.
  • Der EXCH-Befehl enthält ein Formatfeld 112, das ein einzelnes Bit aufweist, welches die Eingangsdatenformatbreite (32 Bit oder 64 Bit) angibt. Die Datenbreite kann Auswirkungen auf die Festlegung der Multiplexerleitungen haben, wie später erläutert wird. Ein Elementfeld 114 definiert die Anzahl der Elemente, die durch den Austauschbefehl gesendet werden sollen. Diese Elemente werden von einer Sendeadresse gesendet, die unter Verwendung des unmittelbaren Werts in Feld 116 berechnet wird, wie bei dem Sendebefehl aus 9. Der Wert in diesem Feld wird zu dem Wert im Basisregister addiert.
  • Das Bezugszeichen 118 kennzeichnet ein Steuerfeld, das die Wortgröße für das Sendedatenelement definiert. Die Nutzlast enthält ein Schaltsteuerungsfeld 120, das eine Schaltsteuerung für den eingangsseitigen Multiplexer bewirkt, wie oben in Verbindung mit 9 beschrieben. Das Bezugszeichen 122 kennzeichnet ein Feld der Nutzlast, das ein eingangsseitiges Delta zum Berechnen der Adresse definiert, an der eingehende Daten gespeichert werden sollen, wie oben in Verbindung mit dem Befehl aus 10 beschrieben wurde. Die 64-Bit-breite Austauschbefehl EXCH aus 11 kann in jedem Taktzyklus ausgeführt werden und erlaubt somit gleichzeitig:
    • • Senden von einer bestimmten Adresse
    • • Aktualisierung des eingangsseitigen Multiplexers
    • • Aktualisierung der eingangsseitigen Adresse
  • Somit kann jede Austauschablaufsteuerung in einem einzelnen Befehl codiert werden. Die Befehle aus den 8, 9 und 10 führen ähnliche Funktionen aus, aber da sie nur 32 Bit lang sind, können sie verwendet werden, um die Größe des Austauschcodes im lokalen Speicher jeder Kachel zu minimieren. Die Entscheidung darüber, welcher Befehl in einem bestimmten Kontext verwendet werden soll, wird an dem Compiler 70 getroffen, wenn die Codelets für das lokale Programm 72 erstellt werden.
  • Es folgt eine Liste der wichtigsten Register und ihrer Semantik zur Unterstützung der vorgenannten Befehle. Diese Register bilden einen Teil der Registerdatei auf jeder Kachel.
    TILE_ID Speichert eine eindeutige Kennung für diese Kachel
    INCOMING_MUX Speichert die Kachel-ID der Quellenkachel für eingehende
    [INCOMING_MUXPAIR] Nachrichten, die bewirkt, dass der „hörende“ Eingang für den mit der empfangenden Kachel verknüpften Multiplexer ausgewählt wird.
    INCOMING_ DELTA Dieses speichert einen automatisch inkrementierten Wert für die Berechnung einer Adresse, an der eingehende Daten gespeichert werden sollen: es kann durch ein explizites Feld überschrieben werden [vgl. z.B. 10]. Es wird zu INCOMING_BASE hinzugefügt.
    INCOMING_BASE
    Dieses enthält eine allgemeine Basisadresse zum Aktualisieren des Speicherzeigers (hinzugefügt zu INCOMING_DELTA).
    OUTGOING_BASE Dieses speichert eine gemeinsame Basisadresse für Sendebefehle
    OUTGOING_DELTA Dieses speichert ein Delta für die Berechnung von Sendeadressen für Befehle. Eine Sende-Adresse ergibt sich aus ausgangsseitiger Basisadresse + ausgangsseitigem Delta.
    INCOMING_FORMAT Identifiziert ein eingehendes 32b- oder 64b-Datenelement.
  • Es gilt zu beachten, dass das INCOMING _ DELTA- und INCOMING_MUX-Register einen Teil des Austauschzustands der Kachel bilden.
  • Es wird nun auf dir 12 und 13 Bezug genommen, um eine Kachelpaarung zu erklären, was ein Merkmal ist, durch das ein physikalisches Paar von Kacheln zusammenarbeiten kann, um eine effektivere Nutzung ihrer kombinierten Austausch-Ressourcen zu ermöglichen. Die Kachelpaarung kann verwendet werden, um die Übertragungsbandbreite einer einzelnen Kachel durch Ausleihen eines Übertragungsbusses eines Nachbarn zu verdoppeln, oder die empfangene Bandbreite für beide Kacheln in einem Kachelpaar zu verdoppeln, indem der empfangene Bus eines Nachbarn und der zugehörige eingangsseitige Multiplexer gemeinsam genutzt werden.
  • 12 zeigt die mit Kacheln in einem Kachelpaar verknüpfte Logik zur Durchführung einer Übertragung mit doppelter Breite. Die Übertragung mit doppelter Breite wird durch Ausleihen von ausgangsseitigen Austauschressourcen eines Nachbarn für die Dauer eines SEND-Befehls erreicht. Während dieser Zeit kann die Nachbarkachel keine eigene Datenübertragung durchführen. Ein SEND-Befehl kann eine Datenübertragung mit einfacher oder doppelter Breite durchführen, wobei die Breite der Übertragung durch einen in einem Register gespeicherten Wert oder ein unmittelbares Feld angegeben wird. Die Breite kann mit 32 Bit (ein Wort) angegeben werden, wobei das Feld den in diesem Fall auf den Wert 0 gesetzt wird, oder 64 Bit (zwei Wörter), wobei das Feld in diesem Fall auf den Wert 1 gesetzt wird. Andere logische Definitionen sind möglich. Die spezifizierte Breite wird von einem Register auf dem Chip 4 an einen Steuerspeicher 1200 in der Ex-Out-Schnittstelle 226 der Kachel übergeben. 12 zeigt zwei solcher gepaarten Kacheln, TID00 und TID01. Die Ex-Out-Schnittstelle 226 weist Puffer auf zur Aufnahme des niederwertigsten Wortes (LSW) und des höchstwertigen Wortes (MSW). In diesem Zusammenhang besteht jedes Wort aus 32 Bits. Das niederwertigste Wort ist direkt mit einem Eingang eines Breitensteuermultiplexers 1202 verbunden. Der Ausgang des Multiplexers ist mit den entsprechenden Querleitungen des Austauschbusses 34 verbunden, wobei die Querleitungen der Ausgabeleitung für diese bestimmte Kachel entsprechen. Wenn die Übertragungsbreite auf 32 Bits eingestellt ist, werden die Breitensteuermultiplexer 1202 so eingestellt, dass sie Eingaben von den jeweiligen LSWs der gepaarten Kacheln empfangen, um dadurch zu ermöglichen, dass die Kacheln des Paares gleichzeitig ein entsprechendes 32-Bit-Wort senden.
  • Wenn ein Mitglied des Paares ein 64-Bit-Wort senden möchte, wird der Breitensteuermultiplexer 1202 der benachbarten Kachel so eingestellt, dass er die höchstwertige Wortausgabe von der sendenden Kachel empfängt und diese an den Ausgang des Multiplexers weiterleitet. Dies bewirkt, dass das höchstwertige Wort der 64-Bit-Ausgabe von der sendenden Kachel auf die Querleitungen des Austauschbusses platziert wird, der den benachbarten Kacheln zugeordnet ist (die zu diesem Zeitpunkt daran gehindert sing, etwas zu senden). Der Klarheit halber ist die MUX-Steuerleitung von dem Breitensteuerungs-Flag in Speicher 1200 der sendenden Kachel TID00 mit dem Steuereingang des Multiplexers 1202 der benachbarten (nicht sendenden) Kachel TID01 als verbunden gezeigt. In ähnlicher Weise hat die benachbarte Kachel TID01 auch eine MUX-Steuerleitung, die von ihrem Steuerspeicher 1200 mit dem Eingang des Breitensteuermultiplexers 1202 seiner gepaarten Kachel verbunden ist, obwohl dies aus Gründen der Klarheit in 12 nicht gezeigt ist.
  • Es wird nun Bezug genommen auf 13, um einen Empfang mit doppelter Breite unter Verwendung von gepaarten Kacheln zu erläutern. Die gepaarten Kacheln in 13 sind mit TID03 und TID04 bezeichnet, obwohl es leicht zu verstehen ist, dass diese Funktionalität in Kombination mit der Sendefunktionalität mit doppelter Breite verwendet werden kann, so dass eine Kachel wie TID00 beispielsweise auch die für TID03 gezeigte Funktionalität aufweisen könnte. Doppelter Empfang wird erreicht, indem die eingangsseitigen Austauschressourcen eines Nachbarn für die Dauer einer Übertragung gemeinsam genutzt werden. Bei der Konfiguration für den Empfang mit doppelter Breite kann jede Kachel eines Kachelpaars die eingehenden Daten abfragen oder ignorieren. Wenn beide sich für eine Stichprobe entscheiden, werden sie die gleichen eingehenden Daten sehen. Der Empfang mit doppelter Breite wird in Zusammenarbeit mit der benachbarten Kachel über den zuvor beschriebenen INCOMING_FORMAT-Wert aktiviert, der angibt, ob die eingehenden Daten 32 Bit oder 64 Bit umfassen. Der Wert des eingangsseitigen Multiplexers 210 der primären Kachel des Kachelpaares muss auf die Kachel-ID der sendenden Kachel gesetzt werden. Der „Empfangseingang“ des eingangsseitigen Multiplexers 210 der sekundären Kachel innerhalb des Kachelpaares muss auf die Kachel-ID der anderen Kachel innerhalb des sendenden Paares gesetzt werden. Es ist zu beachten, dass in diesem Fall die „sendende“ Kachel des sendenden Kachelpaares (zum Beispiel TID01) eigentlich nicht sendet, sondern ihr höchstwertiges Wort zur Verwendung der Austauschressourcen der Kachel TID00 geliefert hat. Somit müssen die eingangsseitigen Multiplexer 210 der Kacheln des empfangenden Kachelpaares jeweils mit den Querleitungen verbunden werden, auf denen die einzelnen Wörter des Übertragungsausgangs mit doppelter Breite des sendenden Paares angeordnet sind.
  • Es sei angemerkt, dass in einigen Ausführungsbeispielen, auch wenn die eingangsseitigen Multiplexer 210 so geschaltet sind, dass sie gleichzeitig auf ihre jeweiligen Querleitungen der Austauschstruktur hören, dies nicht notwendigerweise bedeutet, dass die eingangsseitigen Werte an den Kacheln des empfangenden Kachelpaares zeitgleich empfangen werden, aufgrund von unterschiedlichen Laufzeiten zwischen der Austauschstruktur und einzelnen Kacheln. Es gibt also drei Möglichkeiten, die in einem empfangenden Kachelpaar berücksichtigt werden müssen.
  • In einer ersten Möglichkeit sollen die beiden eingangsseitigen Busse der Ex_In-Schnittstelle unabhängig behandelt werden (keine Kachel im Kachelpaar nimmt an einem Empfang mit doppelter Breite teil).
  • Gemäß der zweiten Möglichkeit wird der lokale eingangsseitige Austauschbus verwendet, um die frühe Komponente eines doppelt breiten Elements zu übertragen (und diese Komponente sollte jetzt verzögert sein). Dies bedeutet, dass der Bus des Nachbarn dazu verwendet wird, die nicht frühe Komponente desselben doppelt breiten Elements zu übertragen.
  • Gemäß der dritten Möglichkeit wird der lokale eingangsseitige Vermittlungsbus verwendet, um die nicht frühe Komponente eines doppelt breiten Elements zu übertragen. Dies impliziert, dass der Bus des Nachbarn dazu verwendet wurde, die frühe Komponente desselben Objekts mit doppelter Breite zu übertragen (und daher sollte die frühe Datenkomponente auf dem Bus des Nachbarn verzögert werden).
  • 13 zeigt eine Schaltung 1300, die diese Szenarien unter Verwendung der Multiplexer 1302 und 1304 behandelt. Es ist zu beachten, dass die Schaltung 1300 am Eingang jeder Kachel des empfangenden Kachelpaares dupliziert ist, jedoch aus Gründen der Klarheit nur am Eingang von TID03 gezeigt wird.
  • Die Steuerung des Multiplexers erfolgt durch die eingangsseitige Formatsteuerung, die von einem Register an eine Ex_In-Schnittstelle 224 geliefert wird. Wenn die Kachel TID03 in einem 32-Bit-Modus arbeiten soll, steuert sie den Multiplexer 1302 so, dass er das 32-Bit-Wort am oberer Eingang des Multiplexers in 13 über eine Pipeline-Stufe 306 und einen Steuerpuffer 1308 weiterleitet.
  • Wenn die empfangenden Kacheln paarweise arbeiten, wird der Multiplexer 1302 so gesteuert, dass er seinen oberen Eingang blockiert und zulässt, dass das niederwertigste Wort vom unteren Eingang zur Pipeline-Stufe 1306 durchgeleitet wird. Im nächsten Zyklus wird das höchstwertige Wort ausgewählt, um durch den Multiplexer 1304 in den Steuerpuffer 1308 geleitet zu werden, zusammen mit dem niederwertigsten Wort, das durch die Pipeline-Stufe 1306 getaktet wurde. Der Steuerpuffer 1308 kann entscheiden, ob das 64-Bit-Wort empfangen wird oder nicht. Es ist zu beachten, dass gemäß der Logik das 64-Bit-Wort gleichzeitig an der benachbarten Kachel (TID04) empfangen wird. In einigen Fällen möchten beide Kacheln möglicherweise den gleichen 64-Bit-Wert lesen, während aber in anderen Fällen eine der Kacheln diesen ignorieren möchte.
  • Es sei angemerkt, dass es Ausführungsbeispielen geben kann, bei denen das LSW und das MSW einer 64-Bit-Übertragung gleichzeitig an ihren gepaarten Empfängerkacheln empfangen werden können, wobei in diesem Fall die relative Verzögerung der Pipeline-Stufe 1306 nicht erforderlich wäre.
  • Hier wurde ein neues Computer-Paradigma beschrieben, das im Zusammenhang mit Wissensmodellen für maschinelles Lernen besonders effektiv ist. Es wird eine Architektur bereitgestellt, in der Zeitbestimmtheit wie in einer Austauschphase eines BSP-Paradigmas verwendet wird, um sehr große Datenmengen effizient zu verarbeiten. Während bestimmte Ausführungsbeispiele beschrieben worden sind, können andere Anwendungen und Variationen der offenbarten Techniken für einen Fachmann offensichtlich sein, sobald die Offenbarung berücksichtigt wird. Der Umfang der vorliegenden Offenbarung ist nicht durch die beschriebenen Ausführungsbeispielen beschränkt, sondern nur durch die beigefügten Ansprüche.

Claims (22)

  1. Computer, umfassend: eine Vielzahl von Verarbeitungseinheiten, von denen jede einen Befehlsspeicher, der ein lokales Programm enthält, eine Ausführungseinheit, die das lokale Programm ausführt, einen Datenspeicher zum Speichern von Daten; eine Eingangsschnittstelle mit einer Gruppe von Eingabeleitungen und eine Ausgangsschnittstelle mit einer Gruppe von Ausgabeleitungen aufweist; eine Schaltstruktur, die mit jeder der Verarbeitungseinheiten durch die jeweilige Gruppe von Ausgabeleitungen verbunden ist und die mit den jeweiligen Verarbeitungseinheiten durch die jeweiligen Eingabeleitungen über eine durch jede Verarbeitungseinheit steuerbare Umschaltschaltung verbindbar ist; ein Synchronisationsmodul betreibbar zum Erzeugen eines Synchronisationssignals, um den Computer so zu steuern, dass er zwischen einer Rechenphase und einer Austauschphase umschaltet, wobei die Verarbeitungseinheiten ausgestaltet sind, um ihre lokalen Programme gemäß einem gemeinsamen Takt auszuführen, wobei die lokalen Programme so ausgestaltet sind, dass in der Austauschphase mindestens eine Verarbeitungseinheit einen Sendebefehl von ihrem lokalen Programm ausführt, um zu einer Sendezeit ein Datenpaket auf seine Gruppe von Ausgabeleitungen zu übertragen, wobei das Datenpaket für mindestens eine Empfängerverarbeitungseinheit bestimmt ist, aber keine Zielidentifizierung aufweist, und wobei die Empfängerverarbeitungseinheit zu einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl aus ihrem lokalen Programm ausführt, um ihre Umschaltschaltung so zu steuern, dass ihre Gruppe von Eingabeleitungen mit der Schaltstruktur verbunden wird, um das Datenpaket zu einer Empfangszeit zu empfangen, wobei die Sendezeit, die Schaltzeit und die Empfangszeit in Bezug auf das Synchronisationssignal von dem gemeinsamen Takt bestimmt sind.
  2. Computer nach Anspruch 1, wobei der Sendebefehl explizit eine Sendeadresse definiert, die einen Ort im Datenspeicher identifiziert, von dem aus das Datenpaket gesendet werden soll.
  3. Computer nach Anspruch 1, wobei keine Sendeadresse explizit in dem Sendebefehl definiert ist und das Datenpaket von einer Sendeadresse gesendet wird, die in einem durch den Sendebefehl implizit definierten Register definiert ist.
  4. Computer nach Anspruch 3, wobei das lokale Programm einen Sendeadressen-Aktualisierungsbefehl zum Aktualisieren der Sendeadresse in dem impliziten Register aufweist.
  5. Computer nach einem der vorhergehenden Ansprüche, wobei die Sendezeit eine bekannte Anzahl von Taktzyklen nach der Sendezeit ist, zu der der Befehl ausgeführt wird.
  6. Computer nach einem der vorhergehenden Ansprüche, wobei die Umschaltschaltung einen Multiplexer mit einem mit seiner Verarbeitungseinheit verbundenen Ausgangssatz von Ausgabeleitungen und mehreren mit der Schaltstruktur verbundenen Sätzen von Eingabeleitungen aufweist, wodurch einer der mehreren Sätze von Eingabeleitungen als von der Verarbeitungseinheit gesteuert ausgewählt ist.
  7. Computer nach einem der vorhergehenden Ansprüche, wobei die Empfängerverarbeitungseinheit ausgestaltet ist, um das Datenpaket zu empfangen und es in den Datenspeicher an einem Speicherplatz zu laden, der durch einen Speicherzeiger identifiziert ist.
  8. Computer nach Anspruch 7, wobei der Speicherzeiger automatisch inkrementiert wird, nachdem jedes Datenpaket in den Datenspeicher geladen wurde.
  9. Computer nach Anspruch 7, wobei das lokale Programm in der Empfängerverarbeitungseinheit einen Speicherzeiger-Aktualisierungsbefehl enthält, der den Speicherzeiger aktualisiert.
  10. Computer nach einem der vorhergehenden Ansprüche, wobei der Sendebefehl eine Anzahl von zu sendenden Datenpaketen identifiziert, wobei jedem Datenpaket eine andere Sendezeit zugeordnet ist.
  11. Computer nach Anspruch 6, wobei einer der Sätze von Eingabeleitungen mit einem Null-Eingang verbunden ist.
  12. Computer nach einem der vorhergehenden Ansprüche, wobei die Empfängerverarbeitungseinheit dieselbe Verarbeitungseinheit ist wie die Verarbeitungseinheit, die einen Sendebefehl zu einem früheren Zeitpunkt ausgeführt hat, wodurch dieselbe Verarbeitungseinheit ausgestaltet ist, um ein Datenpaket zu senden und dieses Datenpaket zu einem späteren Zeitpunkt zu empfangen.
  13. Computer nach einem der vorhergehenden Ansprüche, wobei mehrere Verarbeitungseinheiten ausgestaltet sind, um jeweilige Sendebefehle zum Senden entsprechender Datenpakete auszuführen, und wobei zumindest einige der Datenpakete für keine Empfängerverarbeitungseinheiten bestimmt sind.
  14. Computer nach einem der vorhergehenden Ansprüche, wobei mindestens zwei der Verarbeitungseinheiten in einem Sendepaar zusammenwirken, wobei ein erstes Datenpaket von einer ersten Verarbeitungseinheit des Paares über ihren Ausgangssatz von Verbindungsleitungen übertragen wird, und ein zweites Datenpaket von der ersten Verarbeitungseinheit des Paares über den Ausgangssatz von Verbindungsleitungen der zweiten Verarbeitungseinheit des Paares übertragen wird, um eine Übertragung mit doppelter Breite zu bewirken.
  15. Computer nach einem der vorhergehenden Ansprüche, wobei mindestens zwei der Verarbeitungseinheiten als ein empfangendes Paar arbeiten, wobei jede Verarbeitungseinheit des Paares ihre Umschaltungsschaltung steuert, um ihren jeweiligen Eingangssatz von Leitungen mit der Schaltstruktur zu verbinden, um entsprechende Datenpakete von jeweiligen Kacheln eines sendenden Paares zu empfangen.
  16. Verfahren zum Berechnen einer Funktion in einem Computer mit: einer Vielzahl von Verarbeitungseinheiten, von denen jede einen Befehlsspeicher, der ein lokales Programm enthält, eine Ausführungseinheit zum Ausführen des lokalen Programms, einen Datenspeicher zum Speichern von Daten, eine Eingangsschnittstelle mit einer Gruppe von Eingabeleitungen und eine Ausgangsschnittstelle mit einer Gruppe von Ausgabeleitungen aufweist; einer Schaltstruktur, die mit jeder der Verarbeitungseinheiten durch die jeweilige Gruppe von Ausgabeleitungen verbunden ist und mit jeder der Verarbeitungseinheiten durch ihre jeweiligen Eingabeleitungen über eine durch jede Verarbeitungseinheit steuerbare Umschaltschaltung verbindbar ist; und einem Synchronisationsmodul, das eingerichtet ist, um ein Synchronisationssignal zu erzeugen, um den Computer zu steuern, um zwischen einer Rechenphase und einer Austauschphase umzuschalten, wobei das Verfahren umfasst: die Verarbeitungseinheiten führen ihre lokalen Programme in der Rechenphase gemäß einem gemeinsamen Takt aus, wobei in der Austauschphase mindestens eine Verarbeitungseinheit einen Sendebefehl von ihrem lokalen Programm ausführt, um zu einer Sendezeit ein Datenpaket auf seine Gruppe von Ausgabeleitungen zu übertragen, wobei das Datenpaket für mindestens eine Empfängerverarbeitungseinheit bestimmt ist, aber keine Zielidentifizierung aufweist, und die Empfängerverarbeitungseinheit führt bei einer vorbestimmten Schaltzeit einen Schaltsteuerbefehl von ihrem lokalen Programm aus, um die Umschaltschaltung so zu steuern, dass sie ihre Gruppe von Eingabeleitungen mit der Schaltstruktur verbindet, um das Datenpaket zu einer Empfangszeit zu empfangen, wobei die Sendezeit, die Schaltzeit und die Empfangszeit von dem gemeinsamen Takt in Bezug auf das Synchronisationssignal bestimmt sind.
  17. Verfahren nach Anspruch 16, wobei die Funktion in Form des statischen Graphen bereitgestellt wird, der mehrere miteinander verbundene Knoten umfasst, wobei jeder Knoten durch ein Codelet der lokalen Programme implementiert wird.
  18. Verfahren nach Anspruch 17, wobei in der Rechenphase jedes Codelet Daten verarbeitet, um ein Ergebnis zu erzeugen, wobei einige der Ergebnisse nicht für eine nachfolgende Rechenphase erforderlich sind und von keiner Empfängerverarbeitungseinheit empfangen werden.
  19. Verfahren nach einem der Ansprüche 16 bis 18, wobei die Datenpakete in der Austauschphase zwischen Verarbeitungseinheiten über die Schaltstruktur und die Umschaltschaltung übertragen werden.
  20. Verfahren nach einem der Ansprüche 16 bis 19, wobei jede Verarbeitungseinheit dem Synchronisationsmodul anzeigt, dass ihre eigene Rechenphase abgeschlossen ist, und wobei das Synchronisationssignal von dem Synchronisationsmodul erzeugt wird, wenn alle Verarbeitungseinheiten angezeigt haben, dass ihre eigene Rechenphase beendet ist, um die Austauschphase zu beginnen.
  21. Verfahren nach Anspruch 17, wobei der Graph eine Maschinenlernfunktion darstellt.
  22. Verfahren nach einem der Ansprüche 16 bis 21, wobei Datenpakete in der Austauschphase pipelineartig durch die Schaltstruktur durch eine Folge von temporären Speichern übertragen werden, wobei jeder Speicher ein Datenpaket für einen Zyklus des gemeinsamen Takts speichert.
DE102018126001.6A 2017-10-20 2018-10-19 Synchronisation in einem Multi-Kachel-Verarbeitungsarray Pending DE102018126001A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GB1717295.8 2017-10-20
GBGB1717295.8A GB201717295D0 (en) 2017-10-20 2017-10-20 Synchronization in a multi-tile processing array
GB1816892.2A GB2569430B (en) 2017-10-20 2018-10-17 Synchronization in a multi-tile processing array
GB1816892.2 2018-10-17

Publications (1)

Publication Number Publication Date
DE102018126001A1 true DE102018126001A1 (de) 2019-04-25

Family

ID=60481682

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018126001.6A Pending DE102018126001A1 (de) 2017-10-20 2018-10-19 Synchronisation in einem Multi-Kachel-Verarbeitungsarray

Country Status (9)

Country Link
US (1) US10936008B2 (de)
JP (1) JP6722251B2 (de)
KR (1) KR102167059B1 (de)
CN (1) CN109697185B (de)
CA (1) CA3021450C (de)
DE (1) DE102018126001A1 (de)
FR (1) FR3072801B1 (de)
GB (2) GB201717295D0 (de)
TW (1) TWI708186B (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11455190B2 (en) 2016-02-05 2022-09-27 Sas Institute Inc. Implicit status in many task computing
GB2569275B (en) * 2017-10-20 2020-06-03 Graphcore Ltd Time deterministic exchange
GB2580165B (en) 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
US11704270B2 (en) 2019-03-27 2023-07-18 Graphcore Limited Networked computer with multiple embedded rings
GB201904263D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer
GB201904266D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with embedded rings
GB201904267D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with multiple embedded rings
GB201904265D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A partitionable networked computer
JP7338354B2 (ja) * 2019-09-20 2023-09-05 富士通株式会社 情報処理装置,情報処理システム及び通信管理プログラム
CN113222126B (zh) * 2020-01-21 2022-01-28 上海商汤智能科技有限公司 数据处理装置、人工智能芯片
US11531637B2 (en) 2020-03-26 2022-12-20 Graphcore Limited Embedding rings on a toroid computer network
US11336383B2 (en) * 2020-06-24 2022-05-17 Mellanox Technologies, Ltd. Packet scheduling system with desired physical transmission time for packets
GB2608180A (en) * 2021-06-25 2022-12-28 Graphcore Ltd Control of data send from a multi-processor device

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5434861A (en) 1989-02-02 1995-07-18 Pritty; David Deterministic timed bus access method
EP0429733B1 (de) * 1989-11-17 1999-04-28 Texas Instruments Incorporated Multiprozessor mit Koordinatenschalter zwischen Prozessoren und Speichern
US5408646A (en) 1991-03-29 1995-04-18 International Business Machines Corp. Multipath torus switching apparatus
US5734826A (en) 1991-03-29 1998-03-31 International Business Machines Corporation Variable cyclic redundancy coding method and apparatus for use in a multistage network
JP3501305B2 (ja) 1993-08-04 2004-03-02 サン・マイクロシステムズ・インコーポレイテッド 相互接続制御装置及び方法
US5541921A (en) * 1994-12-06 1996-07-30 National Semiconductor Corporation Isochronous serial time division multiplexer
GB2303274B (en) * 1995-07-11 1999-09-08 Fujitsu Ltd Switching apparatus
CN101510840A (zh) * 1999-07-09 2009-08-19 马利布网络有限公司 Tcp/ip以分组为中心的无线传输系统结构
US6876652B1 (en) 2000-05-20 2005-04-05 Ciena Corporation Network device with a distributed switch fabric timing system
US20020165947A1 (en) * 2000-09-25 2002-11-07 Crossbeam Systems, Inc. Network application apparatus
US20040172631A1 (en) 2001-06-20 2004-09-02 Howard James E Concurrent-multitasking processor
US7100021B1 (en) 2001-10-16 2006-08-29 Cisco Technology, Inc. Barrier synchronization mechanism for processors of a systolic array
JP2005032018A (ja) 2003-07-04 2005-02-03 Semiconductor Energy Lab Co Ltd 遺伝的アルゴリズムを用いたマイクロプロセッサ
JP2005167965A (ja) * 2003-11-12 2005-06-23 Matsushita Electric Ind Co Ltd パケット処理方法および装置
US7904905B2 (en) 2003-11-14 2011-03-08 Stmicroelectronics, Inc. System and method for efficiently executing single program multiple data (SPMD) programs
US7673164B1 (en) 2004-12-13 2010-03-02 Massachusetts Institute Of Technology Managing power in a parallel processing environment
US8018849B1 (en) * 2005-03-25 2011-09-13 Tilera Corporation Flow control in a parallel processing environment
US7818725B1 (en) 2005-04-28 2010-10-19 Massachusetts Institute Of Technology Mapping communication in a parallel processing environment
US7577820B1 (en) * 2006-04-14 2009-08-18 Tilera Corporation Managing data in a parallel processing environment
US8194690B1 (en) * 2006-05-24 2012-06-05 Tilera Corporation Packet processing in a parallel processing environment
JP5055942B2 (ja) 2006-10-16 2012-10-24 富士通株式会社 計算機クラスタ
US8181003B2 (en) * 2008-05-29 2012-05-15 Axis Semiconductor, Inc. Instruction set design, control and communication in programmable microprocessor cores and the like
JP5304194B2 (ja) * 2008-11-19 2013-10-02 富士通株式会社 バリア同期装置、バリア同期システム及びバリア同期装置の制御方法
US8571021B2 (en) * 2009-06-10 2013-10-29 Microchip Technology Incorporated Packet based data transmission with reduced data size
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
JP5568048B2 (ja) 2011-04-04 2014-08-06 株式会社日立製作所 並列計算機システム、およびプログラム
JP2013069189A (ja) 2011-09-26 2013-04-18 Hitachi Ltd 並列分散処理方法および並列分散処理システム
US8990497B2 (en) * 2012-07-02 2015-03-24 Grayskytech, LLC Efficient memory management for parallel synchronous computing systems
US9116738B2 (en) 2012-11-13 2015-08-25 International Business Machines Corporation Method and apparatus for efficient execution of concurrent processes on a multithreaded message passing system
JP6317365B2 (ja) * 2012-12-06 2018-04-25 コーヒレント・ロジックス・インコーポレーテッド 同期命令を含む処理システム
US9823864B2 (en) 2014-06-02 2017-11-21 Micron Technology, Inc. Systems and methods for throttling packet transmission in a scalable memory system protocol
US20160164943A1 (en) 2014-12-05 2016-06-09 Qualcomm Incorporated Transport interface for multimedia and file transport
TWI580199B (zh) 2015-12-18 2017-04-21 瑞昱半導體股份有限公司 接收裝置及其封包處理方法
JP6450330B2 (ja) 2016-02-03 2019-01-09 日本電信電話株式会社 並列計算処理装置および並列計算処理方法

Also Published As

Publication number Publication date
GB2569430A (en) 2019-06-19
GB201816892D0 (en) 2018-11-28
TW201928666A (zh) 2019-07-16
US20190121387A1 (en) 2019-04-25
GB2569430B (en) 2021-03-24
JP6722251B2 (ja) 2020-07-15
FR3072801B1 (fr) 2024-01-05
US10936008B2 (en) 2021-03-02
FR3072801A1 (fr) 2019-04-26
GB201717295D0 (en) 2017-12-06
CA3021450A1 (en) 2019-04-20
KR20190044574A (ko) 2019-04-30
JP2019079529A (ja) 2019-05-23
TWI708186B (zh) 2020-10-21
CN109697185A (zh) 2019-04-30
KR102167059B1 (ko) 2020-10-16
CA3021450C (en) 2021-11-02
CN109697185B (zh) 2023-06-20

Similar Documents

Publication Publication Date Title
DE102018126001A1 (de) Synchronisation in einem Multi-Kachel-Verarbeitungsarray
DE102018126005A1 (de) Synchronisation in einer Multi-Kachel-, Multi-Chip-Verarbeitungsanordnung
DE102018126004A1 (de) Synchronisation in einer Multi-Kachel-Verarbeitungsanordnung
DE102018126003A1 (de) Kombinieren von Zuständen mehrerer Threads in einem Multithread-Prozessor
DE3248215C2 (de)
EP3129870B1 (de) Paralles datenverarbeitungsverfahren und vorrichtung basierend auf mehreren grafischen verarbeitungseinheiten
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE60306937T4 (de) Synchronisierung von pipelines in einem datenverarbeitungsgerät
DE102015112202A1 (de) Kombinieren von Pfaden
DE112015004983T5 (de) Parallel-Slice-Prozessor mit einer Lade-Speicher-Umlaufwarteschlange für eine schnelle Freigabe von Einträgen in einer Ausgabewarteschlange
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE112016001836T5 (de) Energieeffiziente Prozessorkernarchitektur für Bildprozessoren
DE112013004770T5 (de) Lese- und -Schreibmaskenaktualisierungsbefehl zur Vektorisierung rekursiver Berechnungen über unabhängige Daten
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE102005021749A1 (de) Verfahren und Vorrichtung zur programmgesteuerten Informationsverarbeitung
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE112012004728T5 (de) Verfahren, Programm und System zur Simulationsausführung
DE102019112353A1 (de) Lade/speicher-befehl
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
DE102017213160B4 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
DE102020101814A1 (de) Effiziente ausführung anhand von aufgabengraphen festgelegter arbeitslasten
DE112013000904T5 (de) Durchführen von Aktualisierungen von Quellcode, der auf einer Vielzahl von Rechenknoten ausgeführt wird
DE102010044531A1 (de) Autonome Speicherarchitektur
DE112016005552T5 (de) Schieberegister mit verringerter Verdrahtungskomplexität
EP3417373A1 (de) Verfahren und vorrichtung zum betreiben eines steuergeräts

Legal Events

Date Code Title Description
R012 Request for examination validly filed