-
GEBIET DER OFFENBARUNG
-
Die vorliegende Offenbarung betrifft allgemein Rechen-Engines, und insbesondere Verfahren und Einrichtungen zum Implementieren mehrerer Inferenz-Rechen-Engines.
-
HINTERGRUND
-
In den letzten Jahren sind Rechen-Engines oder Kerne assoziierter Mikroprozessoren eingesetzt worden, um zahlreiche parallele Berechnungsoperationen durchzuführen. Insbesondere können diese Operationen Anwendungen des maschinellen Lernens und der künstlichen Intelligenz (KI) betreffen, und werden typischerweise auf mehreren Rechen-Engines (d. h. Verarbeitungskernen) als parallele Rechen-Threads ausgeführt.
-
Figurenliste
-
- 1 ist ein Blockdiagramm eines beispielhaften ProzessorSystem-on-Chip (Soc), das Ausführungsblöcke integriert, die jeweils mehrere ICEs beinhalten.
- 2 ist ein Blockdiagramm einer beispielhaften Implementierung der Ausführungsblöcke von 1.
- 3 ist ein Blockdiagramm einer beispielhaften Implementierung des Accelerator on Coherent Fabric (Beschleuniger auf kohärentem Fabric) von 2, das in dem Ausführungsblock von 1 enthalten ist.
- 4 ist ein Blockdiagramm einer beispielhaften Implementierung des Advanced-Extensible-Interface-zu-In-Die-Interconnect-Wandlers.
- 5 ist ein Blockdiagramm einer beispielhaften Implementierung des Advanced-Extensible-Interface-Anforderungsannehmers von 4.
- 6 ist ein Blockdiagramm einer beispielhaften Implementierung des Advanced-Extensible-Interface-Anforderungssenders von 4.
- 7 ist ein Blockdiagramm einer beispielhaften Implementierung der In-Die-Interconnect-Schnittstelle von 4.
- 8-9 sind Flussdiagramme, die beispielhafte maschinenlesbare Anweisungen veranschaulichen, die zum Implementieren des AXI2IDI-Wandlers von 3 ausgeführt werden können.
- 10 ist ein Blockdiagramm eines beispielhaften Verarbeitungssystems, das die Anweisungen der 8-9 ausführen kann, um den beispielhaften AXI2IDI-Wandler von 3 zu implementieren.
-
Die Figuren sind nicht maßstabsgetreu. Stattdessen kann die Dicke der Schichten oder Gebiete in den Zeichnungen vergrößert sein. Allgemein werden die gleichen Bezugsziffern durchweg durch die Zeichnung(en) und die begleitende geschriebene Beschreibung verwendet, um sich auf dieselben oder ähnliche Teile zu beziehen.
-
Deskriptoren „erster“, „zweiter“, „dritter“ usw. werden hierin verwendet, wenn mehrere Elemente oder Komponenten identifiziert werden, auf die sich möglicherweise getrennt bezogen wird. Insofern nicht anders basierend auf ihrem Verwendungszusammenhang spezifiziert oder verstanden, sollen derartige Deskriptoren nicht irgendeine Bedeutung von Priorität, physischer Reihenfolge oder Anordnung in einer Liste oder zeitlicher Ordnung zuschreiben, sondern werden lediglich als Bezeichnungen verwendet, um sich zum leichteren Verständnis der offenbarten Beispiele auf mehrere Elemente oder Komponenten getrennt zu beziehen. In manchen Beispielen kann der Deskriptor „erster“ verwendet werden, um sich auf ein Element in der ausführlichen Beschreibung zu beziehen, während sich auf dasselbe Element in einem Anspruch mit einem anderen Deskriptor wie etwa „zweiter“ oder „dritter“ bezogen werden kann. In derartigen Fällen sollte verstanden werden, dass derartige Deskriptoren lediglich zur Vereinfachung des Bezugnehmens auf mehrere Elemente oder Komponenten verwendet werden.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Eine Inferenz-Rechen-Engine (ICE: Inference Compute Engine) ist eine Rechen-Engine, die für Deep-Learning-Neuronalnetzwerk-Inferenz spezialisiert ist. Hierin offenbarte Verfahren und Einrichtungen ermöglichen eine Integration mehrerer ICE-Kerne bei einem System-on-Chip. In solchen Beispielen teilen sich die ICE-Kerne den Systemspeicher mit einem Anwendungstreiber, der auf einem Systemkern (z. B. Intel-Architecture Core) ausgeführt wird, und externen Eingabe/Ausgabe(EA)-Vorrichtungen (z. B. Direct Memory Access (DMA) - Direktspeicherzugriff). In solchen Beispielen wird die Speicherkohärenz zwischen allen Parteien beibehalten. Zusätzlich ermöglichen hierin offenbarte Beispiele einem Softwaremodell, alle ICE-Kerne als eine einzelne Peripheral-Component-Interconnect(PCI)-Vorrichtung zu sehen, während die Fähigkeit beibehalten wird, die Arbeitslast unter einer anderen Anzahl von Kernen (M aus N) aufzuteilen, unterschiedliche Arbeitslasten zu unterschiedlichen Teilsätzen von ICE-Kernen zu geben und die Fähigkeit aufzuweisen, zwischen den verschiedenen ICE-Kernen und zwischen den Kernen und dem Treiber effizient zu synchronisieren.
-
In hierin offenbarten Beispielen sind die ICE-Kerne direkt mit einem Converged Coherency Fabric (Fabric mit konvergierter Kohärenz) als mehrere In-Die-Interconnect(IDI)-Agenten verbunden. Da die Anzahl von IDI-Ports beschränkt ist, können sich 2 oder mehr ICE-Kerne dieselben IDI-Ports teilen. Eine Cache-Kohärenz wird zwischen den ICE-Kernen, Systemarchitektur(Intel Architecture)-Kernen und externen PCI-Vorrichtungen beibehalten. Die ICE-Kerne können einen Last Level Cache (LLC) verwenden, um Daten zu cachen und Daten untereinander oder mit den Systemarchitekturkernen zu teilen. Ein neuer Primary-Scalabe-Fabric(PSF - primäres skalierbares Fabric)-Agent, ICE-Vorrichtungssteuerung (ICEDC), wird eingeführt, um aus einer Softwareperspektive als eine einzelne PCI-Vorrichtung zu dienen, während SW die Fähigkeit gegeben wird, jeden ICE-Kern unabhängig zu steuern, und Synchronisationsverfahren zwischen den ICE-Kernen und zwischen den Kernen und SW zu implementieren.
-
Hierin offenbarte Beispiele beinhalten einen Accelerator-on-Coherent-Fabric(ACF)-Block zum Anpassen von ICE-Kernen an das Converged Coherency Fabric (CCF). Das ACF übersetzt ein Advanced-Extensibe-Interface(AXI)-Protokoll der ICE-Kerne unter Verwendung einer AXI2IDI-Brücke zu einem IDI-Protokoll. Das beispielhafte ACF ermöglicht eine Arbitrierung zwischen zwei oder mehr ICE-Kernen, um zu ermöglichen, dass sich mehrere Kerne einen einzelnen IDI-Port teilen. Das beispielhafte ACF beinhaltet auch einen Leistungsverwaltungsagenten (PMA: Power Management Agent) zum Verwalten von ICE-Leistungszuständen. Die beispielhafte AXI2IDI-Brücke ermöglicht den ICE-Kernen, auf Speicher, speicherabgebildete E/A usw. zuzugreifen.
-
1 ist ein Blockdiagramm eines beispielhaften ProzessorSystem-on-Chip (Soc) 100, das Ausführungsblöcke 102A-F integriert, die jeweils mehrere ICEs beinhalten (siehe 2). Das beispielhafte Prozessor-SoC 100 beinhaltet ein Converged Coherency Fabric 104, das mit den Ausführungsblöcken 102A-F, einem beispielhaften Eingabe/Ausgabe-Vorrichtungssystem 108, einem beispielhaften Speichersystem 112 und beispielhaften Prozessorarchitekturen 116A-B gekoppelt ist.
-
Die beispielhaften Ausführungsblöcke 102A-F hosten jeweils Kombinationen mehrerer spezialisierter Rechen-Engine-Kerne und eine Steuerung zum Anpassen der Rechen-Engine-Kerne an das CCF 104. Die beispielhaften Rechen-Engine-Kerne sind spezialisierte Anweisungsprozessoren (z. B. Anweisungsprozessoren, die speziell für maschinelles Lernen konfiguriert sind, speziell für Data Mining konfiguriert sind, usw.). Wie in 2 veranschaulicht, beinhaltet beispielsweise der beispielhafte Ausführungsblock 102A einen ersten ICE-Kern 202, einen zweiten ICE-Kern 204 und ein beispielhaftes ACF (Accelerator on Coherent Fabric) 206. Das beispielhafte ACF 206 passt die ICE-Kerne 202, 204 an das CCF 104 an. Eine beispielhafte Implementierung des ACF 206 wird in Verbindung mit 3 beschrieben.
-
Die beispielhaften Ausführungsblöcke 102B-F beinhalten die gleichen Komponenten wie der in 2 veranschaulichte Ausführungsblock 102A. Alternativ können die Ausführungsblöcke 102A-F eine beliebige Anzahl und/oder Art von ICE-Kernen oder anderer Arten von Prozessorkernen beinhalten.
-
Die Ausführungsblöcke 102A-F des veranschaulichten Beispiels kommunizieren mit einem Last Level Cache (LLC) des CCF 104 jeweils unter Verwendung eines einzelnen IDI-Ports. Gemäß dem veranschaulichten Beispiel arbitriert das ACF 206 die mehreren Kerne, die über den einzelnen IDI-Port kommunizieren. Ferner arbitriert das ACF 206 verschiedene Taktraten, die durch die Kerne und das CCF verwendet werden. Gemäß dem veranschaulichten Beispiel und wie ferner ausführlich in Verbindung mit 3 beschrieben, arbitriert beispielsweise das beispielhafte ACF 206 die ICE-Kerne 202, 204, die bei einer ersten Taktrate arbeiten (z. B. clk), und das CCF 104, das bei einer zweiten Taktrate arbeitet (z. B. uclk).
-
Das CCF 104 des veranschaulichten Beispiels ist ein Ringnetzwerk von Last-Level-Cache(LLC)-Blöcken 130A-H. Die LLC-Blöcke 130A-H sind über IDI-Ports mit den Ausführungsblöcken 102A-102F und den Prozessorarchitekturen 116A-B verbunden. Die beispielhaften LLC-Blöcke 130A-H und die Prozessorarchitekturen 116A-B sind kommunikativ in einem Ringnetzwerk über mehrere Kohärenz-Engines (CBO) 140A-140I gekoppelt. Die CBO 140A-140I handhaben den Zugriff auf assoziierte LLC-Blöcke 130A-H und erzeugen Transaktionen zurück zu einem Kern oder System-Interconnect. Die CBO 140A-140I gewährleisten auch, dass Transaktionskonflikte zweckmäßig gehandhabt werden. Die beispielhaften CBO 140A-140I enthalten die TOR (Table of Requests - Anforderungstabelle), die alle anstehenden Transaktionen halten.
-
Auf diese Weise teilen sich die ICE-Kerne der Ausführungsblöcke 102A-102F und ein ICE-Treiber, der als eine Anwendung auf einem der Kerne der Prozessorarchitekturen 116A-B ausgeführt werden kann, den Speicher in einer Unified Memory Architecture (vereinheitlichte Speicherarchitektur). Die ICE-Kerne können in den Daten „sehen“, die durch die Kerne der Prozessorarchitekturen 116A-B modifiziert wurden, ungeachtet dessen, ob die Daten gegenwärtig in Kern-Caches, dem Last Level Cache 130A-H gecacht werden oder schon in den Speicher geschrieben sind. ICE-Kerne sehen die Daten, die untereinander geschrieben wurden, und Kerne der Prozessorarchitektur 116A-B sehen, was durch ICE-Kerne geschrieben wurde.
-
Das Teilen des LLC 130A-H weist einen weiteren Vorteil für Implementierungen des maschinellen Lernens und neuronaler Netzwerke auf: eine große Menge der Daten, z. B. die Gewichtungen des neuronalen Netzwerks und das Programm, wird durch mehr als einen der ICE-Kerne verbraucht. Sobald der erste ICE-Kern die Daten liest, werden die Daten aus dem Hauptspeicher gelesen und im LLC 130A-H gecacht. Alle anderen ICE-Kerne werden die Daten direkt aus dem LLC 130A-H lesen und können daher auf Daten mit höherer Bandbreite und niedrigerer Latenz zugreifen, als beim Lesen aus dem Speicher.
-
Das beispielhafte CCF 104 beinhaltet ein beispielhaftes SBO 150 (z. B. SBOX) zum Koppeln des Last Level Cache 130A-H mit einer beispielhaften NCU (Non-Cacheable Unit - nicht cachebare Einheit) 160. Das SBO 150 organisiert den Verkehr zwischen der NCU 160 und dem Ringnetzwerk des LLC 130A-H. Das beispielhafte SBO 150 hält die Reihenfolge des Verkehrs bei, um in gewissen Fällen die Funktionsrichtigkeit zu gewährleisten.
-
Die beispielhafte NCU 160 koppelt das beispielhafte CCF 104 mit dem beispielhaften EA-Vorrichtungssystem 108 und dem beispielhaften Speichersystem 112. Die beispielhafte NCU 160 handhabt anweisungsserialisierende Funktionen und führt jegliche nicht cachebaren Operationen durch. Die beispielhafte NCU 160 ist eine Schaltungsanordnung zum Empfangen von Lade- oder Schreibanforderungen von den Prozessorarchitekturen 116A-B und/oder den Ausführungsblöcken 120A-F und leitet den Befehl zu dem einen des EA-Vorrichtungssystems 108 oder des Speichersystems 112 weiter, um der Anforderung entgegenzukommen.
-
Das beispielhafte EA-Vorrichtungssystem 108 verknüpft das beispielhafte CCF 104 mit externen Vorrichtungen (z. B. Direktspeicherzugriff). Gemäß dem veranschaulichten Beispiel von 1 beinhaltet das EA-Vorrichtungssystem 108 eine beispielhafte ICE-Vorrichtungssteuerung 170, die über ein beispielhaftes Primary Scalable Fabric (PSF) 172 mit dem CCF 104 gekoppelt ist. Die beispielhafte ICE-Vorrichtungssteuerung 170 wird als eine Integriertes-On-Chip-System-Fabric(IOSF)-Vorrichtung implementiert und auf diese kann durch die Kerne der Prozessorarchitekturen 116A-B über ein primäres IOSF-Fabric zugegriffen werden kann, und kann über ein Seitenband-Fabric mit den ICE-Kernen 202, 204 und den ACF-Blöcken 206 der Ausführungsblöcke 102A-F kommunizieren.
-
Die beispielhafte ICE-DC 170 ermöglicht einem ICE-Treiber (der z. B. auf einem Kern der Prozessorarchitekturen 116A-B ausgeführt wird), die verteilten ICE-Kerne 202, 204 als eine einzelne PCI-Vorrichtung zu sehen. Die beispielhafte ICE-DC 170 stellt dem ICE-Treiber eine Schnittstelle für Pro-ICE-Steuerung bereit, um jeden ICE-Kern 202, 204 einzeln einzuschalten, auszuschalten oder zurückzusetzen. Die beispielhafte ICE-DC 170 sendet den Befehl zu dem geeigneten ACF 206, das mit einem ICE-Kern 202, 204 assoziiert ist, der durch das Seitenband gesteuert werden soll. Ferner implementiert die beispielhafte ICE-DC 170 einen oder mehrere Speicherabgebildete-EA(MMIO: Memory Mapped IO)-Bereiche, die dem ICE-Treiber ermöglichen, auf Register der ICE-Kerne 202, 204, des ACF 206 oder der ICE-DC 170 selbst zuzugreifen. Zugänge werden über das primäre IOSF-Fabric zu der ICE-DC 170 gesendet, und die ICE-DC 170 sendet den Zugang über das Seitenband zu dem Ziel-ICE-Kern 202, 204 oder dem ACF 206. Die ICE-DC 170 ist auch zum Blockieren des Zugriffs auf ICE-Kerne 202, 204 verantwortlich, die gegenwärtig ausgeschaltet sind oder zurückgesetzt werden. Zusätzlich beinhaltet die beispielhafte ICE-DC 170 Sätze von Zählern und Semaphore, auf die die ICE-Kerne 202, 204 zugreifen können, und ermöglichen ihnen, den Arbeitsfortschritt zu kommunizieren und sie ohne Beteiligung des ICE-Treibers zu synchronisieren.
-
Das beispielhafte Speichersystem 112 beinhaltet Speicher, auf den über das CCF 104 zugegriffen werden kann. Beispielsweise beinhaltet das Speichersystem 112 Doppeldatenratenspeicher-Direktzugriffsspeicher. Alternativ kann eine beliebige andere Art und/oder Kombination von Speicher oder Speicherung im Speichersystem 112 enthalten sein.
-
Die beispielhafte Prozessorsteuerung 120 beinhaltet mehrere Komponenten zum Steuern des Betriebs des Prozessor-SoC 100. Beispielsweise beinhaltet die Prozessorsteuerung 120 des veranschaulichten Beispiels eine Leistungsverwaltungseinheit zum Steuern der Leistungsnutzung und des Betriebs des Prozessor-SoC 100 und seiner Komponenten.
-
3 ist ein Blockdiagramm einer beispielhaften Implementierung des ACF 206 von 2, das in dem Ausführungsblock 102A (und gleichermaßen in den Ausführungsblöcken 102B-F) von 1 enthalten ist. Das beispielhafte ACF 206 passt die Ausführungsblöcke 102A-F, die mehrere ICE-Kerne 202, 204 aufweisen, an, auf dem CCF 104 zu kommunizieren. Das beispielhafte ACF 206 von 3 beinhaltet ein CCP 302, das eine beispielhafte Seitenband-zu-OCP-Schnittstelle (SB2OCP) 304, eine beispielhafte Glue-Logik 306, beispielhafte Steuerungen 308 und einen beispielhaften AXI2IDI-Wandler 310 beinhaltet.
-
Die beispielhafte SB2OCP 304 stellt eine Schnittstelle zwischen dem Seitenband-Fabric des Prozessor-SoC 100 und einem Open Core Protocol (OCP) der ICE-Kerne 202, 204 bereit. Beispielsweise ermöglicht die SB2OCP 304 einen Zugriff vom Seitenband zu internen Registern der ICE-Kerne 202, 204.
-
Die beispielhafte Glue-Logik 306 verknüpft Interrupts von den ICE-Kernen 202, 204 mit den Prozessorarchitekturen 116A-B. Die Interrupts können verwendet werden, um verschiedene Ereignisse wie etwa Arbeitsabschluss und interne Fehler zu melden. Die beispielhafte Glue-Logik 306 übersetzt die Interrupts in Nachrichten, die über das CCF 104 gesendet werden.
-
Die beispielhaften Steuerungen 308 stellen verschiedene Steuerblöcke für das ACF 206 wie etwa Leistungsverwaltungssteuerungen bereit.
-
Der beispielhafte AXI2IDI-Wandler 310 verwaltet die Schnittstelle der AXI-Schnittstellen der ICE-Kerne 202, 204 mit der IDI-Schnittstelle des CCF 104. Insbesondere verwaltet der AXI2IDI-Wandler 310 die Arbitrierung der mehreren ICE-Kerne zu einem einzelnen IDI-Port (z. B. aufgrund einer beschränkten Anzahl verfügbarer IDI-Ports).
-
4 ist ein Blockdiagramm einer beispielhaften Implementierung des AXI2IDI-Wandlers 310. Der beispielhafte AXI2IDI-Wandler 310 von 4 beinhaltet einen beispielhaften AXI-Anforderungsannehmer 402, einen beispielhaften AXI-Anforderungssender 404, einen beispielhaften Wandler 406 und eine beispielhafte IDI-Schnittstelle 408.
-
Der beispielhafte AXI-Anforderungsannehmer 402 empfängt Anforderungen/Daten von den ICE-Kernen 202, 204. Eine beispielhafte Implementierung des AXI-Anforderungsannehmers 402 wird in Verbindung mit 5 beschrieben.
-
Der beispielhafte AXI-Anforderungssender 402 sendet Anforderungen/Daten zu den beispielhaften ICE-Kernen 202, 204. Eine beispielhafte Implementierung des AXI-Anforderungssenders 404 wird in Verbindung mit 6 beschrieben.
-
Der beispielhafte Wandler 406 des veranschaulichten Beispiels unterhält Daten bezüglich der mehreren Anforderungen/Daten von den ICE-Kernen 202, 204 und der IDI-Schnittstelle 408, um die Reihenfolge und Erfüllung der Anforderungen beizubehalten. Der beispielhafte Wandler 406 beinhaltet einen Trackersteuerblock 420, ein beispielhaftes Adressarray 422, ein beispielhaftes Datenarray 424 und ein beispielhaftes Byte-Array 426.
-
Der beispielhafte Trackersteuerblock 420 speichert Einträge für Anforderungen (z. B. Schreibanforderungen und Leseanforderungen), denen durch die ICE-Kerne 202, 204 und/oder andere Vorrichtungen über die IDI-Schnittstelle 408 entgegengekommen werden sollen. Beispielsweise speichert der beispielhafte Trackersteuerblock 420 AXI-Attribute, AXI-Flusssteuerinformationen, IDI-Attribute und IDI-Flusssteuerinformationen für eine Anforderung.
-
Das beispielhafte Adressarray 422 speichert Adressinformationen (z. B. eine zu beschreibende Adresse oder eine zu lesende Adresse) für die Anforderungen, die in dem beispielhaften Trackersteuerblock 420 gespeichert sind.
-
Das beispielhafte Datenarray 424 speichert Daten, die gelesen wurden oder die geschrieben werden sollen, für die Anforderungen, die in dem beispielhaften Trackersteuerblock 420 gespeichert sind.
-
Das beispielhafte Byte-Array 426 speichert und gibt an, welche Bytes für Schreibanforderungen, die in dem beispielhaften Trackersteuerblock 420 gespeichert sind, geschrieben werden sollen.
-
Der beispielhafte Trackersteuerblock 420, das beispielhafte Adressarray 422, das beispielhafte Datenarray 424 und/oder das beispielhafte Byte-Array 426 können durch eine beliebige Art von Speicher oder Speicherung implementiert werden, wie etwa Direktzugriffsspeicher, Cache-Speicher, Plattenspeicherungsspeicher, Flash-Speicher usw.
-
Die beispielhafte IDI-Schnittstelle 408 verknüpft den AXI2IDI-Wandler 310 mit den IDI-Ports des beispielhaften CCF 104. Eine beispielhafte Implementierung der IDI-Schnittstelle 408 wird in Verbindung mit 7 beschrieben.
-
5 ist ein Blockdiagramm einer beispielhaften Implementierung des beispielhaften AXI-Anforderungsannehmers 402 von 4.
-
Der beispielhafte AXI-Anforderungsannehmer 402 von 5 beinhaltet einen beispielhaften ICE0-Schreibadressen-FIFO(First In First Out-Puffer) 502, einen beispielhaften ICE0-Schreibdaten-FIFO 504, einen beispielhaften ICE1-Schreibadressen-FIFO(First In First Out-Puffer) 506, einen beispielhaften ICE1-Schreibdaten-FIFO 508, einen beispielhaften ICE0-Leseadressen-FIFO 510 und einen beispielhaften ICE1-Leseadressen-FIFO 512. Während der beispielhafte AXI-Anforderungsannehmer 402 eine Schnittstelle mit zwei ICE-Kernen (z. B. ICE-Kern 202 (z. B. ICE0) und ICE-Kern 204 (z. B. ICE1)) bildet, kann der AXI-Anforderungsannehmer 402 mit einer beliebigen Anzahl von ICE-Kernen verknüpft werden, indem Schreibadressen-, Schreibdaten- und Leseadressen-FIFOs für jeden ICE-Kern eingeschlossen werden.
-
Der beispielhafte AXI-Anforderungsannehmer 402 beinhaltet einen beispielhaften AXI-Anforderungsempfänger/-Burster-ICE0-Schreibvorgang 514 zum Kombinieren der Schreibadresse und der Schreibdaten zur Übertragung. Der beispielhafte AXI-Anforderungsannehmer 402 beinhaltet einen beispielhaften AXI-Anforderungsempfänger/-Burster-ICE1-Schreibvorgang 516 zum Kombinieren der Schreibadresse und der Schreibdaten zur Übertragung. Der beispielhafte AXI-Anforderungsannehmer 402 beinhaltet einen beispielhaften AXI-Anforderungsempfänger/-Burster-ICE0-Lesevorgang 518 zum Übertragen der Leseadresse für ICE0. Der beispielhafte AXI-Anforderungsannehmer 402 beinhaltet einen beispielhaften AXI-Anforderungsempfänger/-Burster-ICE1-Lesevorgang 520 zum Kombinieren des Übertragens der Leseadresse zum Übertragen der Leseadresse für ICE1.
-
Der beispielhafte AXI-Anforderungsannehmer 402 beinhaltet einen beispielhaften Vier-zu-Eins-Arbitrierer/Multiplexer 522 zum Arbitrieren zwischen den mehreren Lese- und Schreibanforderungen und Übertragen der Anforderungen von den mehreren ICE-Kernen 202, 204 und Übertragen der Anforderungen zu dem beispielhaften Wandler 406.
-
6 ist ein Blockdiagramm einer beispielhaften Implementierung des beispielhaften AXI-Anforderungssenders 404 von 4. Der beispielhafte AXI-Anforderungssender 404 beinhaltet einen beispielhaften 64-zu-1-Schreibantwort-Multiplexer 602 zum Empfangen von Antwortinformationen vom Wandler 406. Der beispielhafte AXI-Anforderungssender 404 beinhaltet einen beispielhaften ICE0-Schreibantwort-FIFO 604 und einen beispielhaften ICE1-Schreibantwort-FIFO 606 zum Speichern von Antwortinformationen auf Schreibanforderungen von ICE0 bzw. ICE1. Der beispielhafte AXI-Anforderungssender 404 beinhaltet einen beispielhaften 64-zu-1-Leseantwort-Multiplexer 608 zum Empfangen von Daten vom Wandler 406. Der beispielhafte AXI-Anforderungssender 404 beinhaltet einen beispielhaften ICE0-Lesedaten-FIFO 610 und einen beispielhaften ICE1-Lesedaten-FIFO 612 zum Speichern von Antwortinformationen, die auf Leseanforderungen empfangen werden, die ursprünglich von ICE0 bzw. ICE1 gesendet wurden.
-
7 ist ein Blockdiagramm einer beispielhaften Implementierung der IDI-Schnittstelle 408 von 4.
-
Die beispielhafte IDI-Schnittstelle 408 von 7 beinhaltet einen beispielhaften Anforderungs-Scheduler 702, der eine beispielhafte Felderzeugungsnachschlagetabelle 704 und einen beispielhaften 64-zu-1-C2U-Anforderungs-Multiplexer 706 beinhaltet. Der beispielhafte Anforderungs-Scheduler 702 übersetzt Anforderungen von den ICE-Kernen 202, 204 zu Anforderungen, die über die IDI-Schnittstelle gesendet werden sollen.
-
Die beispielhafte IDI-Schnittstelle 408 von 7 beinhaltet einen beispielhaften Daten-Scheduler 708, der einen beispielhaften 64-zu-1-Daten-Header-Multiplexer 710 beinhaltet, der seine Ausgabe zu einem 2-zu-l-Multiplexer 712 bereitstellt, der mit einem Anforderungs-Handler 714 gekoppelt ist.
-
Die beispielhafte IDI-Schnittstelle 408 beinhaltet zusätzlich den Anforderungs-Handler 714. Der Anforderungs-Handler 714 beinhaltet eine beispielhafte Anforderungswarteschlange 716 und einen beispielhaften Sperrungs-Handler 718. Die beispielhafte Anforderungswarteschlange 716 speichert Anforderungen, die von dem beispielhaften CCF 104 empfangen werden, und reiht die Anforderungen in eine Warteschlange ein, bis sie verarbeitet werden können. Der beispielhafte Sperrungs-Handler 718 steuert Sperrungen an Daten während des Lesens oder Schreibens von Daten.
-
Obwohl eine beispielhafte Art und Weise zum Implementieren der Ausführungsblöcke 102A-F von 1 in den 2-7 veranschaulicht ist, können ein/e oder mehrere der in den 2-7 veranschaulichten Elemente, Prozesse und/oder Vorrichtungen kombiniert, geteilt, umgeordnet, weggelassen, eliminiert und/oder auf eine beliebige andere Weise implementiert werden. Ferner können die beispielhaften Blöcke der 1-7 durch Hardware, Software, Firmware und/oder eine beliebige Kombination von Hardware, Software und/oder Firmware implementiert werden. Dementsprechend könnten beliebige der beispielhaften Blöcke der 1-7 und/oder allgemeiner des beispielhaften Prozessor-SoC 100 durch eine oder mehrere analoge oder digitale Schaltungen, Logikschaltungen, programmierbare(n) Prozessor(en), programmierbare Steuerung(en), Grafikverarbeitungseinheit(en) (GPU(s)), Digitalsignalprozessor(en) (DSP(s)), anwendungsspezifische(n) integrierte(e) Schaltkreis(e) (ASIC(s)), programmierbare Logikvorrichtung(en) (PLD(s)) und/oder feldprogrammierbare Logikvorrichtung(en) (FPLD(s)) implementiert werden. Wenn gelesen wird, dass beliebige der Einrichtungs- oder Systemansprüche dieses Patents eine reine Software- und/oder Firmwareimplementierung abdeckt, ist hiermit mindestens einer der beispielhaften Blöcke der 1-7 ausdrücklich so definiert, dass er eine nichtflüchtige computerlesbare Speicherungsvorrichtung oder Speicherungsplatte, wie etwa einen Speicher, eine DVD (Digital Versatile Disk), eine CD (Compact Disk), eine Blue-Ray-Disk usw., einschließlich der Software und/oder Firmware beinhalten. Des Weiteren kann das beispielhafte Prozessor-SoC 100 von 1 ein/en/e oder mehrere Elemente, Prozesse und/oder Vorrichtungen zusätzlich zu den oder anstelle der in 1-7 veranschaulichten beinhalten und/oder kann mehr als eine/s von einer/m beliebigen oder allen der veranschaulichten Elemente, Prozesse und Vorrichtungen beinhalten. Wie hierin verwendet, schließt der Ausdruck „in Kommunikation“, einschließlich Variationen davon, eine direkte Kommunikation und/oder indirekte Kommunikation über eine oder mehrere zwischenliegende Komponenten ein und erfordert keine direkte physische (z. B. verdrahtete) Kommunikation und/oder konstante Kommunikation, sondern beinhaltet stattdessen zusätzlich eine selektive Kommunikation mit periodischen Intervallen, geplanten Intervallen, aperiodischen Intervallen und/oder einmalige Ereignisse.
-
Flussdiagramme, die beispielhafte Hardwarelogik, maschinenlesbare Anweisungen, hardwareimplementierte Zustandsmaschinen und/oder eine beliebige Kombination davon zum Implementieren der Prozessorarchitektur 100 repräsentieren, sind in den 1-7 gezeigt. Die maschinenlesbaren Anweisungen können ein oder mehrere ausführbare Programme oder (ein) Teil(e) eines ausführbaren Programms zur Ausführung durch einen Computerprozessor sein, wie etwa das ACF 206, das in dem beispielhaften Prozessor-SoC 100 gezeigt ist. Das Programm kann in Software umgesetzt sein, die auf einem nichtflüchtigen computerlesbaren Speicherungsmedium gespeichert ist, wie etwa einer CD-ROM, einer Diskette, einer Festplatte, einer DVD, einer Blu-Ray-Disk oder einem mit dem Prozessor-SoC 100 assoziierten Speicher, aber das gesamte Programm und/oder Teile davon könnten alternativ dazu durch eine Vorrichtung, bei der es sich nicht um das Prozessor-SoC 100 handelt, ausgeführt werden und/oder in Firmware oder dedizierter Hardware umgesetzt sein. Obwohl das beispielhafte Programm unter Bezugnahme auf das in den 8-9 veranschaulichte Flussdiagramm beschrieben ist, können ferner alternativ viele andere Verfahren zum Implementieren des beispielhaften Prozessor-SoC 100 verwendet werden. Beispielsweise kann die Reihenfolge der Ausführung der Blöcke geändert werden und/oder manche der beschriebenen Blöcke können geändert, entfernt oder kombiniert werden. Zusätzlich oder alternativ dazu können beliebige oder alle der Blöcke durch eine oder mehrere Hardwareschaltungen (z. B. eine diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, ein FPGA, eine ASIC, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert werden, die so strukturiert sind, dass sie eine entsprechende Operation ohne die Ausführung von Software oder Firmware durchführen.
-
Die hierin beschriebenen maschinenlesbaren Anweisungen können in einem komprimierten Format und/oder einem verschlüsselten Format und/oder einem fragmentierten Format und/oder einem kompilierten Format und/oder einem ausführbaren Format und/oder einem paketisierten Format usw. gespeichert werden. Maschinenlesbare Anweisungen, wie hierin beschrieben, können als Daten (z. B. Teile von Anweisungen, Code, Repräsentationen von Code usw.) gespeichert werden, die zum Erstellen, Herstellen und/oder Erzeugen von maschinenausführbaren Anweisungen genutzt werden können. Beispielsweise können die maschinenlesbaren Anweisungen fragmentiert und auf einer oder mehreren Speicherungsvorrichtungen und/oder Rechenvorrichtungen (z. B. Servern) gespeichert werden. Die maschinenlesbaren Anweisungen können Installation und/oder Modifikation und/oder Anpassung und/oder Aktualisierung und/oder Kombinieren und/oder Ergänzen und/oder Konfigurieren und/oder Entschlüsselung und/oder Dekomprimierung und/oder Entpacken und/oder Verteilung und/oder Neuzuordnung und/oder Kompilierung usw. erfordern, um sie durch eine Rechenvorrichtung und/oder eine andere Maschine direkt lesbar, interpretierbar und/oder ausführbar zu machen. Beispielsweise können die maschinenlesbaren Anweisungen in mehreren Teilen gespeichert werden, die individuell komprimiert, verschlüsselt und auf separaten Rechenvorrichtungen gespeichert sind, wobei die Teile nach ihrer Entschlüsselung, Dekomprimierung und Kombination einen Satz ausführbarer Anweisungen bilden, die ein Programm, wie etwa das hierin beschriebene, implementieren.
-
Bei einem anderen Beispiel können die maschinenlesbaren Anweisungen in einem Zustand gespeichert werden, in dem sie durch einen Computer gelesen werden können, aber einen Zusatz einer Bibliothek (z. B. einer DLL (Dynamic Link Library)), eines SDK (Software Development Kit), einer Anwendungsprogrammierungsschnittstelle (API) usw. erfordern, um die Anweisungen auf einer speziellen Rechenvorrichtung oder anderen Vorrichtung auszuführen. In einem anderen Beispiel müssen die maschinenlesbaren Anweisungen möglicherweise konfiguriert werden (z. B. Einstellungen gespeichert, Daten eingegeben, Netzwerkadressen aufgezeichnet werden usw.), bevor die maschinenlesbaren Anweisungen und/oder das (die) entsprechende(n) Programm(e) vollständig oder teilweise ausgeführt werden können. Somit sollen die offenbarten maschinenlesbaren Anweisungen und/oder das (die) entsprechende(n) Programm(e) derartige maschinenlesbare Anweisungen und/oder Programm(e) ungeachtet des speziellen Formats oder Zustands der maschinenlesbaren Anweisungen und/oder Programm(e) einschließen, wenn sie gespeichert oder anderweitig im Ruhezustand oder im Transit sind.
-
Die hier beschriebenen maschinenlesbaren Anweisungen können durch eine beliebige vergangene, gegenwärtige oder zukünftige Befehlssprache, Skriptsprache, Programmiersprache usw. repräsentiert werden. Zum Beispiel können die maschinenlesbaren Anweisungen unter Verwendung einer beliebigen der folgenden Sprachen repräsentiert werden: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift usw.
-
Wie oben erwähnt, können die beispielhaften Prozesse der 8-9 unter Verwendung von ausführbaren Anweisungen (z. B. computer- und/oder maschinenlesbaren Anweisungen) implementiert werden, die auf einem nichtflüchtigen Computer und/oder maschinenlesbaren Medium gespeichert sind, wie etwa einem Festplattenlaufwerk, einem Flash-Speicher, einem Nurlesespeicher, einer Compact Disk, einer Digital Versatile Disk, einem Cache, einem Direktzugriffsspeicher und/oder einer beliebigen anderen Speicherungsvorrichtung oder Speicherungsplatte, auf der Informationen für eine beliebige Dauer (z. B. für längere Zeiträume, permanent, kurzzeitig, zum temporären Puffern und/oder zum Cachen der Informationen) gespeichert sind. Wie hierin verwendet, wird der Begriff nichtflüchtiges computerlesbares Medium ausdrücklich so definiert, dass er eine beliebige Art von computerlesbarer Speicherungsvorrichtung und/oder Speicherungsplatte beinhaltet und das Propagieren von Signalen ausschließt und Übertragungsmedien ausschließt.
-
„Beinhaltend“ und „umfassend“ (und alle Formen und Zeitformen davon) werden hierin als offene Begriffe verwendet. Wann auch immer ein Anspruch eine beliebige Form von „beinhalten“ und „umfassen“ (z. B. umfasst, beinhaltet, umfassend, beinhaltend, aufweisend usw.) als eine Präambel oder in einer Anspruchsrezitation einer beliebigen Art einsetzt, soll somit verstanden werden, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne außerhalb des Schutzumfangs des entsprechenden Anspruchs oder der entsprechenden Rezitation zu fallen. Wie hierin verwendet, wenn der Ausdruck „mindestens“ als der Übergangsausdruck in zum Beispiel einer Präambel eines Anspruchs verwendet wird, ist er auf die gleiche Art und Weise offen, wie der Begriff „umfassend“ und „beinhaltend“ offen ist. Der Begriff „und/oder“, wenn er zum Beispiel in einer Form wie etwa A, B und/oder C verwendet wird, bezieht sich auf eine beliebige Kombination oder Teilmenge von A, B, C, wie etwa (1) A alleine, (2) B alleine, (3) C alleine, (4) A mit B, (5) A mit C, (6) B mit C und (7) A mit B und mit C. Wie hierin im Zusammenhang der Beschreibung von Strukturen, Komponenten, Gegenständen, Objekten und/oder Dingen verwendet, wird beabsichtigt, dass sich die Phrase „mindestens eines von A und B“ auf Implementierungen bezieht, einschließlich ein beliebiges von (1) mindestens eines von A, (2) mindestens eines von B und (3) mindestens eines von A und mindestens eines von B. Wie hierin im Zusammenhang der Beschreibung von Strukturen, Komponenten, Gegenständen, Objekten und/oder Dingen verwendet, wird gleichermaßen beabsichtigt, dass sich die Phrase „mindestens eines von A oder B“ auf Implementierungen bezieht, einschließlich (1) mindestens eines von A, (2) mindestens eines von B und (3) mindestens eines von A und mindestens eines von B. Wie hierin im Zusammenhang der Beschreibung der Leistungsfähigkeit oder Ausführung von Prozessen, Anweisungen, Handlungen, Aktivitäten und/oder Schritten verwendet, wird beabsichtigt, dass sich die Phrase „mindestens eines von A und B“ auf Implementierungen bezieht, einschließlich ein beliebiges von (1) mindestens eines von A, (2) mindestens eines von B und (3) mindestens eines von A und mindestens eines von B. Wie hierin im Zusammenhang der Beschreibung der Leistungsfähigkeit oder Ausführung von Prozessen, Anweisungen, Handlungen, Aktivitäten und/oder Schritten verwendet, wird gleichermaßen beabsichtigt, dass sich die Phrase „mindestens eines von A oder B“ auf Implementierungen bezieht, einschließlich ein beliebiges von (1) mindestens eines von A, (2) mindestens eines von B und (3) mindestens eines von A und mindestens eines von B.
-
Wie hierin verwendet, schließen Bezüge im Singular (z. B. „ein“, „eine“, „erste/r/s“, „zweite/r/s“ usw.) keine Mehrzahl aus. Der Begriff „eine“ Entität, wie hierin verwendet, bezieht sich auf eine oder mehrere dieser Entität. Die Begriffe „ein“ (oder „eine“), „ein oder mehrere“ und „mindestens ein“ können hierin austauschbar verwendet werden. Obwohl einzeln aufgelistet können ferner mehrere Mittel, Elemente oder Verfahrenshandlungen durch z. B. eine einzige Einheit oder einen einzigen Prozessor implementiert werden. Zusätzlich dazu, obwohl einzelne Merkmale in unterschiedlichen Beispielen oder Ansprüchen enthalten sein können, können diese möglicherweise kombiniert werden, und der Einschluss in verschiedenen Beispielen oder Ansprüchen deutet nicht an, dass eine Kombination von Merkmalen nicht machbar und/oder vorteilhaft ist.
-
Das Programm 800 von 8 ist ein beispielhafter Prozess für den beispielhaften AXI2IDI-Wandler 310 zum Handhaben einer Leseanforderung von einem der ICE-Kerne 202, 204 (z. B. ICE-Kern 202). Der beispielhafte Anforderungsannahmeblock 402 empfängt eine Leseanforderung vom ICE-Kern 202 über AXI (Block 802). Der beispielhafte Wandler 406 weist die Leseanforderung innerhalb des Trackersteuerblocks 402 zu und zeichnet die Leseadresse in dem Adressarray 422 auf (Block 804). Die beispielhafte IDI-Schnittstelle 408 sendet die Anforderung über IDI (z. B. zu dem LLC oder Speicher) (Block 806). Sobald eine Bestätigung empfangen wird, dass die angeforderten Daten gelesen sind, überträgt die beispielhafte IDI-Schnittstelle 408 eine Indikation, dass die Daten bereit sind (z. B. eine GO-Benachrichtigung), zu dem beispielhaften Wandler 406 (Block 808). Die über die IDI-Schnittstelle 408 empfangenen Antwortdaten werden durch den Wandler 406 gespeichert (Block 810). Der beispielhafte Wandler 406 gibt die Leseanforderung von dem beispielhaften Trackersteuerblock frei (Block 812). Der beispielhafte AXI-Anforderungssender 404 überträgt die Daten über AXI zu dem anfordernden ICE-Kern 202 (Block 814).
-
Das Programm 900 von 9 ist ein beispielhafter Prozess für den beispielhaften AXI2IDI-Wandler 310 zum Handhaben einer Schreibanforderung von einem der ICE-Kerne 202, 204 (z. B. ICE-Kern 202). Der beispielhafte Anforderungsannahmeblock 402 empfängt eine Schreibanforderung vom ICE-Kern 202 über AXI (Block 902). Der beispielhafte Wandler 406 weist die Schreibanforderung innerhalb des Trackersteuerblocks 420 zu und zeichnet die Schreibadresse in dem Adressarray 422 und die Schreibdaten in dem beispielhaften Datenarray 424 auf (Block 904). Die beispielhafte IDI-Schnittstelle 408 sendet die Anforderung über IDI (z. B. zu dem LLC oder Speicher) (Block 906). Sobald eine Bestätigung empfangen wird, dass die Zielvorrichtung zum Empfangen von Daten bereit ist, überträgt die beispielhafte IDI-Schnittstelle 408 eine Annahmeindikation (z. B. eine GO-Benachrichtigung) zu dem beispielhaften Wandler 406 (Block 908). Der beispielhafte Wandler 406 sendet dann die Daten über IDI zu dem Ziel (Block 910). Zusätzlich gibt der beispielhafte Wandler 406 die Schreibanforderung von dem Adressarray 422 frei (Block 912). Der beispielhafte AXI-Anforderungssender 404 sendet dann eine Indikation des Status der Schreibanforderung (z. B. erfolgreich, fehlgeschlagen usw.) über die AXI-Schnittstelle zu dem ICE-Kern 212 (Block 914).
-
10 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 1000, die zum Ausführen der Anweisungen der 8-9 strukturiert ist, um den beispielhaften AXI2IDI-Wandler 310 von 3 zu implementieren. Die Prozessorplattform 1000 kann zum Beispiel ein Server, ein Personal Computer, eine Workstation, eine selbstlernende Maschine (z. B. ein neuronales Netzwerk), eine mobile Einrichtung (z. B. ein Mobiltelefon, ein Smartphone, ein Tablet wie etwa ein iPad™), ein Personal Digital Assistant (PDA), ein Internetgerät, ein DVD-Player, ein CD-Player, ein digitaler Videorekorder, ein Blu-Ray-Player, eine Spielekonsole, ein persönlicher Videorekorder, eine Set-Top-Box, ein Headset oder eine andere tragbare Vorrichtung oder eine beliebige andere Art von Rechenvorrichtung sein.
-
Die Prozessorplattform 1000 des veranschaulichten Beispiels beinhaltet einen Prozessor 1012. Der Prozessor 1012 des veranschaulichten Beispiels ist Hardware. Der Prozessor 1012 kann zum Beispiel durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, einen oder mehrere Mikroprozessoren, eine oder mehrere GPUs, DSPs oder Steuerungen von einer beliebigen gewünschten Familie oder einem beliebigen gewünschten Hersteller implementiert werden. Der Hardwareprozessor kann eine halbleiterbasierte (z. B. siliziumbasierte) Vorrichtung sein. In diesem Beispiel implementiert der Prozessor den beispielhaften AXI-Anforderungsannehmer 402, den beispielhaften AXI-Anforderungssender 404, den beispielhaften Wandler 406 und die beispielhafte IDI-Schnittstelle 408.
-
Der Prozessor 1012 des veranschaulichten Beispiels beinhaltet einen lokalen Speicher 1013 (z. B. einen Cache). Der Prozessor 1012 des veranschaulichten Beispiels befindet sich über einen Bus 1018 in Kommunikation mit einem Hauptspeicher, der einen unbeständigen Speicher 1014 und einen beständigen Speicher 1016 beinhaltet. Der unbeständige Speicher 1014 kann durch SDRAM (Synchronous Dynamic Random Access Memory - synchroner dynamischer Direktzugriffsspeicher), DRAM (dynamischer Direktzugriffsspeicher), RDRAM® (RAMBUS® dynamischer Direktzugriffsspeicher) und/oder eine beliebige andere Art von Direktzugriffsspeicher-Vorrichtung implementiert werden. Der beständige Speicher 1016 kann durch Flash-Speicher und/oder eine beliebige andere gewünschte Art von Speichervorrichtung implementiert werden. Ein Zugriff auf den Hauptspeicher 1014, 1016 wird durch eine Speichersteuerung gesteuert.
-
Die Prozessorplattform 1000 des veranschaulichten Beispiels beinhaltet auch eine Schnittstellenschaltung 1020. Die Schnittstellenschaltung 1020 kann durch eine beliebige Art von Schnittstellenstandard implementiert werden, wie etwa eine Ethernet-Schnittstelle, einen USB (Universal Serial Bus), eine Bluetooth®-Schnittstelle, eine Nahfeldkommunikations(NFC)-Schnittstelle und/oder eine PCI-Express-Schnittstelle.
-
Bei dem veranschaulichten Beispiel sind eine oder mehrere Eingabevorrichtungen 1022 mit der Schnittstellenschaltung 1020 verbunden. Die eine oder die mehreren Eingabevorrichtungen 1022 gestatten einem Benutzer, Daten und/oder Befehle in den Prozessor 1012 einzugeben. Die eine oder die mehreren Eingabevorrichtungen können zum Beispiel durch einen Audiosensor, ein Mikrofon, eine Kamera (Standbild oder Video), eine Tastatur, eine Taste, eine Maus, einen Touchscreen, ein Trackpad, einen Trackball, Isopoint und/oder ein Spracherkennungssystem implementiert werden.
-
Eine oder mehrere Ausgabevorrichtungen 1024 sind auch mit der Schnittstellenschaltung 1020 des veranschaulichten Beispiels verbunden. Die Ausgabevorrichtungen 1024 können zum Beispiel durch Anzeigevorrichtungen (z. B. eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhren(CRT)-Anzeige, eine IPS(In-Place Switching)-Anzeige, einen Touchscreen usw.), eine taktile Ausgabevorrichtung, einen Drucker und/oder Lautsprecher implementiert werden. Die Schnittstellenschaltung 1020 des veranschaulichten Beispiels beinhaltet somit typischerweise eine Grafiktreiberkarte, einen Grafiktreiberchip und/oder einen Grafiktreiberprozes sor.
-
Die Schnittstellenschaltung 1020 des veranschaulichten Beispiels beinhaltet auch eine Kommunikationsvorrichtung, wie etwa einen Sender, einen Empfänger, einen Sendeempfänger, ein Modem, ein Haus-Gateway, einen drahtlosen Zugangspunkt und/oder eine Netzwerkschnittstelle zum Ermöglichen des Austauschs von Daten mit externen Maschinen (z. B. Rechenvorrichtungen einer beliebigen Art) über das Netzwerk 1026. Die Kommunikation kann zum Beispiel über eine Ethernet-Verbindung, eine DSL(Digital Subscriber Line)-Verbindung, eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Line-of-Site-System, ein Zellulartelefonsystem usw. stattfinden.
-
Die Prozessorplattform 1000 des veranschaulichten Beispiels beinhaltet auch eine oder mehrere Massenspeicherungsvorrichtungen 1028 zum Speichern von Software und/oder Daten. Beispiele für derartige Massenspeicherungsvorrichtungen 1028 beinhalten Diskettenlaufwerke, Festplatten, CD-Laufwerke, Blu-Ray-Disk-Laufwerke, RAID (Redundant Array of Independent Disks)-Systeme und DVD(Digital Versatile Disk)-Laufwerke.
-
Die maschinenausführbaren Anweisungen 1032 der 8-9 können in der Massenspeicherungsvorrichtung 1028, im unbeständigen Speicher 1014, im beständigen Speicher 1016 und/oder auf einem entfernbaren nichtflüchtigen computerlesbaren Speicherungsmedium, wie etwa einer CD oder DVD, gespeichert werden.
-
Aus dem Vorstehenden versteht sich, dass beispielhafte Verfahren, Einrichtungen und Herstellungsartikel offenbart wurden, die diese Implementierung mehrerer Inferenz-Rechen-Engines (oder anderer Arten spezialisierter Rechen-Engines) in einem System-on-Chip ermöglichen. Beispielsweise ermöglicht ein Accelerator on Coherent Fabric die Verbindung mehrerer Inferenz-Rechen-Engines mit einem Converged Coherency Fabric. Ein derartiges Accelerator on Coherent Fabric ermöglicht den mehreren Rechen-Engines, mit einem Last Level Cache zu kommunizieren, um das Teilen von Daten zwischen den mehreren Inferenz-Rechen-Engines, zwischen den mehreren Inferenz-Rechen-Engines und Prozessorkernen, zwischen den mehreren Inferenz-Rechen-Engines und einem Speichersystem usw. zu ermöglichen. Die offenbarten Verfahren, Einrichtungen und Herstellungsartikel verbessern die Effizienz des Verwendens einer Rechenvorrichtung durch das Ermöglichen des Teilens einer beschränkten Anzahl von In-Die-Interconnect-Ports, während die Zwischenverbindung und der Datenteilung (z. B. Teilen von Werten von einem maschinellen Lernmodell, Deep-Learning-System, neuronalen Netzwerk usw.) zwischen den mehreren Inferenz-Rechen-Engines ermöglicht wird. Die offenbarten Verfahren, Einrichtungen und Herstellungsartikel sind dementsprechend auf eine oder mehrere Verbesserungen der Funktionsweise eines Computers ausgerichtet.
-
Obwohl gewisse beispielhafte Verfahren, Einrichtungen und Herstellungsartikel hier offenbart wurden, ist der Schutzumfang dieses Patents nicht darauf beschränkt. Vielmehr deckt dieses Patent alle Verfahren, Einrichtungen und Herstellungsartikel ab, die angemessen in den Schutzumfang der Ansprüche dieses Patents fallen.
-
Hierin sind beispielhafte Verfahren, Einrichtungen, Systeme und Herstellungsartikel zum Implementieren mehrerer Inferenz-Rechen-Engines offenbart. Weitere Beispiele und Kombinationen davon beinhalten das Folgende:
-
Beispiel 1 beinhaltet eine Einrichtung, die Folgendes umfasst: eine erste Inferenz-Rechen-Engine, eine zweite Inferenz-Rechen-Engine und ein Accelerator on Coherent Fabric (Beschleuniger auf kohärentem Fabric) zum Koppeln der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine zu einem Converged Coherence Fabric (Fabric mit konvergierter Kohärenz) eines System-on-Chip, wobei das Accelerator on Coherent Fabric ausgelegt ist zum Arbitrieren von Anforderungen von der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine, um einen einzelnen In-Die-Interconnect-Port zu nutzen.
-
Beispiel 2 beinhaltet eine Einrichtung wie in Beispiel 1 definiert, die ferner eine dritte Inferenz-Rechen-Engine und eine vierte Inferenz-Rechen-Engine beinhaltet, die mit einem zweiten Accelerator on Coherent Fabric assoziiert sind.
-
Beispiel 3 beinhaltet eine Einrichtung wie in Beispiel 1 definiert, die ferner das Converged Coherence Fabric und ein Eingabe/Ausgabe-Vorrichtungssystem beinhaltet, das kommunikativ über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 4 beinhaltet eine Einrichtung wie in Beispiel 3 definiert, die ferner ein Speichersystem beinhaltet, das über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 5 beinhaltet eine Einrichtung wie in Beispiel 4 definiert, die ferner einen Prozessorkern beinhaltet, der über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 6 beinhaltet eine Einrichtung wie in Beispiel 1 definiert, wobei das Converged Coherence Fabric einen Last Level Cache beinhaltet, der über das Accelerator on Coherent Fabric mit der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine assoziiert ist.
-
Beispiel 7 beinhaltet eine Einrichtung wie in Beispiel 6 definiert, wobei der Last Level Cache über ein Ringnetzwerk mit einem zweiten Last Level Cache gekoppelt ist.
-
Beispiel 8 beinhaltet eine Einrichtung wie in Beispiel 1 definiert, wobei das Accelerator on Coherent Fabric Anforderungen von der ersten Inferenz-Rechen-Engine mit einer ersten Taktrate empfängt und Anforderungen zu dem Converged Coherence Fabric mit einer zweiten Taktrate sendet.
-
Beispiel 9 beinhaltet eine Einrichtung wie in Beispiel 1 definiert, wobei das Accelerator on Coherent Fabric einen Wandler zum Umwandeln von Kommunikationen unter Verwendung eines Advanced-Extensible-Interface-Protokolls zu einem In-Die-Interconnect-Protokoll beinhaltet.
-
Beispiel 10 beinhaltet eine Einrichtung wie in Beispiel 9 definiert, wobei der Wandler einen Advanced-Extensible-Interface-Anforderungsannehmer zum Empfangen von Anforderungen unter Verwendung des Advanced-Extensible-Interface-Protokolls von der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine beinhaltet.
-
Beispiel 11 beinhaltet eine Einrichtung wie in Beispiel 9 definiert, wobei der Wandler einen Advanced-Extensible-Interface-Anforderungssender zum Senden von Anforderungen unter Verwendung des Advanced-Extensible-Interface-Protokolls zu der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine beinhaltet.
-
Beispiel 12 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium, das Anweisungen umfasst, die bei ihrer Ausführung bewirken, dass eine Maschine zumindest Folgendes ausführt: Empfangen, an einem Accelerator on Coherent Fabric, einer ersten Anforderung von einer ersten Inferenz-Rechen-Engine über ein Advanced-Extensible-Interface-Protokoll, Empfangen, an dem Accelerator on Coherent Fabric, einer zweiten Anforderung von einer zweiten Inferenz-Rechen-Engine über das Advanced-Extensible-Interface-Protokoll, Umwandeln, an dem Accelerator on Coherent Fabric, der ersten Anforderung zu einem In-Die-Interconnect-Schnittstellenprotokoll und Übertragen der ersten Anforderung in dem In-Die-Interconnect-Schnittstellenprotokoll zu einem Converged Coherence Fabric.
-
Beispiel 13 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 12 definiert, wobei die Anweisungen bei ihrer Ausführung bewirken, dass die Maschine, an dem Accelerator on Coherent Fabric, die zweite Anforderung zu einem In-Die-Interconnect-Schnittstellenprotokoll umwandelt.
-
Beispiel 14 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 12 definiert, wobei die erste Anforderung eine Anforderung zum Zugreifen auf eine Vorrichtung in einem Eingabe/Ausgabe-Vorrichtungssystem ist, das kommunikativ über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 15 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 14 definiert, wobei die erste Anforderung eine Anforderung zum Zugreifen auf einen Speicher in einem Speichersystem ist, das über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 16 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 15 definiert, wobei die erste Anforderung eine Anforderung zum Kommunizieren mit einem Prozessorkern ist, der über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 17 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 12 definiert, wobei das Converged Coherence Fabric einen Last Level Cache beinhaltet, der über das Accelerator on Coherent Fabric mit der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine assoziiert ist.
-
Beispiel 18 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 17 definiert, wobei der Last Level Cache über ein Ringnetzwerk mit einem zweiten Last Level Cache gekoppelt ist.
-
Beispiel 19 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 12 definiert, wobei das Accelerator on Coherent Fabric Anforderungen von der ersten Inferenz-Rechen-Engine mit einer ersten Taktrate empfängt und Anforderungen zu dem Converged Coherence Fabric mit einer zweiten Taktrate sendet.
-
Beispiel 20 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 12 definiert, wobei das Accelerator on Coherent Fabric einen Wandler zum Umwandeln von Kommunikationen unter Verwendung des Advanced-Extensible-Interface-Protokolls zu einem In-Die-Interconnect-Protokoll beinhaltet.
-
Beispiel 21 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 20 definiert, wobei der Wandler einen Advanced-Extensible-Interface-Anforderungsannehmer zum Empfangen von Anforderungen unter Verwendung des Advanced-Extensible-Interface-Protokolls von der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine beinhaltet.
-
Beispiel 22 beinhaltet mindestens ein nichtflüchtiges computerlesbares Medium wie in Beispiel 20 definiert, wobei der Wandler einen Advanced-Extensible-Interface-Anforderungssender zum Senden von Anforderungen unter Verwendung des Advanced-Extensible-Interface-Protokolls zu der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine beinhaltet.
-
Beispiel 23 beinhaltet ein Verfahren, das Folgendes umfasst: Empfangen, an einem Accelerator on Coherent Fabric, einer ersten Anforderung von einer ersten Inferenz-Rechen-Engine über ein Advanced-Extensible-Interface-Protokoll, Empfangen, an dem Accelerator on Coherent Fabric, einer zweiten Anforderung von einer zweiten Inferenz-Rechen-Engine über das Advanced-Extensible-Interface-Protokoll, Umwandeln, an dem Accelerator on Coherent Fabric, der ersten Anforderung zu einem In-Die-Interconnect-Schnittstellenprotokoll und Übertragen der ersten Anforderung in dem In-Die-Interconnect-Schnittstellenprotokoll zu einem Converged Coherence Fabric.
-
Beispiel 24 beinhaltet ein Verfahren wie in Beispiel 23 definiert, das ferner Umwandeln, an dem Accelerator on Coherent Fabric, der zweiten Anforderung zu einem In-Die-Interconnect-Schnittstellenprotokoll beinhaltet.
-
Beispiel 25 beinhaltet ein Verfahren wie in Beispiel 23 definiert, wobei die erste Anforderung eine Anforderung zum Zugreifen auf eine Vorrichtung in einem Eingabe/Ausgabe-Vorrichtungssystem ist, das kommunikativ über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 26 beinhaltet ein Verfahren wie in Beispiel 25 definiert, wobei die erste Anforderung eine Anforderung zum Zugreifen auf einen Speicher in einem Speichersystem ist, das über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 27 beinhaltet ein Verfahren wie in Beispiel 26 definiert, wobei die erste Anforderung eine Anforderung zum Kommunizieren mit einem Prozessorkern ist, der über das Converged Coherence Fabric mit dem Accelerator on Coherent Fabric gekoppelt ist.
-
Beispiel 28 beinhaltet ein Verfahren wie in Beispiel 23 definiert, wobei das Converged Coherence Fabric einen Last Level Cache beinhaltet, der über das Accelerator on Coherent Fabric mit der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine assoziiert ist.
-
Beispiel 29 beinhaltet ein Verfahren wie in Beispiel 28 definiert, wobei der Last Level Cache über ein Ringnetzwerk mit einem zweiten Last Level Cache gekoppelt ist.
-
Beispiel 30 beinhaltet ein Verfahren wie in Beispiel 23 definiert, wobei das Accelerator on Coherent Fabric Anforderungen von der ersten Inferenz-Rechen-Engine mit einer ersten Taktrate empfängt und Anforderungen zu dem Converged Coherence Fabric mit einer zweiten Taktrate sendet.
-
Beispiel 31 beinhaltet ein Verfahren wie in Beispiel 23 definiert, wobei das Accelerator on Coherent Fabric einen Wandler zum Umwandeln von Kommunikationen unter Verwendung des Advanced-Extensible-Interface-Protokolls zu einem In-Die-Interconnect-Protokoll beinhaltet.
-
Beispiel 32 beinhaltet ein Verfahren wie in Beispiel 31 definiert, wobei der Wandler einen Advanced-Extensible-Interface-Anforderungsannehmer zum Empfangen von Anforderungen unter Verwendung des Advanced-Extensible-Interface-Protokolls von der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine beinhaltet.
-
Beispiel 33 beinhaltet ein Verfahren wie in Beispiel 31 definiert, wobei der Wandler einen Advanced-Extensible-Interface-Anforderungssender zum Senden von Anforderungen unter Verwendung des Advanced-Extensible-Interface-Protokolls zu der ersten Inferenz-Rechen-Engine und der zweiten Inferenz-Rechen-Engine beinhaltet.
-
Die folgenden Ansprüche werden hiermit durch diesen Bezug in die ausführliche Beschreibung aufgenommen, wobei jeder Anspruch alleine als eine separate Ausführungsform der vorliegenden Offenbarung dasteht.