-
Diese Anmeldung beansprucht den Vorteil der vorläufigen Patentanmeldung Nr. 62/719,911, angemeldet am 20. August 2018, die hierdurch hierin unter Bezugnahme in ihrer Gesamtheit aufgenommen ist.
-
Stand der Technik
-
Dies betrifft integrierte Schaltkreise und genauer programmierbare integrierte Schaltkreise in einer Hardware-Beschleunigungsplattform.
-
Programmierbare integrierte Schaltkreise sind ein Typ von integriertem Schaltkreis, der von einem Benutzer programmiert werden kann, um eine gewünschte benutzerdefinierte Logikfunktion zu implementieren. In einem typischen Szenario verwendet ein Logikdesigner computerunterstützte Designwerkzeuge, um einen benutzerdefinierten Logikschaltkreis zu konstruieren. Wenn der Designprozess abgeschlossen ist, erzeugen die computerunterstützten Designwerkzeuge Konfigurationsdaten. Die Konfigurationsdaten werden in Arbeitsspeicherelemente auf einem programmierbaren integrierten Schaltkreis geladen, um die Vorrichtung zu konfigurieren, um die Funktionen des benutzerdefinierten Logikschaltkreises durchzuführen. Programmierbare Vorrichtungen können zur gemeinsamen Verarbeitung in Massendatenanwendungen, schnellen Datenanwendungen oder Hochleistungsrechenanwendungen (HPC-Anwendungen) verwendet werden. Programmierbare Vorrichtungen können zum Beispiel in Anwendungsbeschleunigungsaufgaben in einem Rechenzentrum verwendet werden und können während einer Rechenzentrumoperation neu programmiert werden, um unterschiedliche Aufgaben durchzuführen. Durch das Auslagern von rechenintensiven Aufgaben von einem Hostprozessor auf hochparallele Beschleunigungsressourcen auf einer programmierbaren Vorrichtung (manchmal als Coprozessor oder Beschleunigungsprozessor bezeichnet) wird der Hostprozessor freigegeben, um andere kritische Verarbeitungsaufgaben durchzuführen. Die Verwendung von programmierbaren Vorrichtungen als Hardwarebeschleuniger kann deshalb bei der Lieferung von verbesserten Geschwindigkeiten, verbesserter Latenz, Leistungseffizienz und Flexibilität für durchgehendes Cloudrechnen, Vernetzen, Speichern, künstliche Intelligenz, autonomes Fahren, virtuelle Realität, erweiterte Realität, Gaming und andere datenzentrierte Anwendungen helfen.
-
In diesem Zusammenhang ergeben sich die hierin beschriebenen Ausführungsformen.
-
Figurenliste
-
- 1 ist ein Diagramm eines veranschaulichenden Systems mit einem Hostprozessor, der an einen programmierbaren Beschleunigungs-Coprozessor gekoppelt ist, nach einer Ausführungsform.
- 2 ist ein Diagramm eines veranschaulichenden programmierbaren integrierten Schaltkreises nach einer Ausführungsform.
- 3 ist ein Diagramm eines Systems, in dem der Hostprozessor über einen Pfad mit hoher Latenz an den programmierbaren Beschleunigungs-Coprozessor gekoppelt ist.
- 4 ist ein Diagramm eines veranschaulichenden Systems, in dem der Hostprozessor an eine programmierbare doppelreihige Beschleunigungs-Arbeitsspeichermodul-Karte (Beschleunigungs-DIMM-Karte) gekoppelt ist, nach einer Ausführungsform.
- 5 ist ein Diagramm einer veranschaulichenden programmierbaren Beschleuniger-DIMM-Karte nach einer Ausführungsform.
- 6 ist ein Ablaufdiagramm von veranschaulichenden Schritten zum Betreiben der in 4 und 5 gezeigten programmierbaren Beschleuniger-DIMM-Karte nach einer Ausführungsform.
- 7 ist ein Diagramm, das die Rechenzeit verschiedener Aufgaben zeigt, die vom System von 4 durchgeführt werden können, nach einer Ausführungsform.
-
Ausführliche Beschreibung
-
Die vorliegenden Ausführungsformen betreffen ein System, in dem ein Hostprozessor (z. B. eine Zentralverarbeitungseinheit oder CPU) an eine programmierbare Beschleunigungsvorrichtung gekoppelt ist, die auf einer doppelreihigen Arbeitsspeichermodul(DIMM)-Karte gebildet ist. Die DIMM-Karte kann auch verschiedene Arten von Arbeitsspeichervorrichtungen enthalten, die nicht auf dynamischen Arbeitsspeicher mit wahlfreiem Zugriff (DRAM) beschränkt sind und an die programmierbare Beschleunigungsvorrichtung gekoppelt sind und auf die von dieser zugegriffen wird.
-
Der Hostprozessor weist eine Master-Arbeitsspeichersteuerung auf, die mit der DIMM-Karte über einen niedrigen Latenzpfad kommuniziert. Da der Kommunikationspfad zwischen dem Hostprozessor und der DIMM-Karte latenzempfindlich ist, kann die DIMM-Karte eine Slave-Arbeitsspeichersteuerung aufweisen, die über eine Schnittstelle an die Master-Arbeitsspeichersteuerung auf der CPU unter Verwendung eines Protokolls mit doppelter Datenrate (DDR), wie des transaktionalen DDR(DDR-T)-Protokolls oder eines beliebigen nichtflüchtigen Arbeitsspeicherprotokolls, ankoppelt. In diesem Beispiel werden Rechenoperationen, die am Arbeitsspeicher in der DIMM-Karte durchgeführt werden müssen, codiert und an die programmierbare Beschleunigungsvorrichtung als DDR-T-Transaktionen gesandt. Da auf den Arbeitsspeicher auf der DIMM-Karte unter Verwendung der programmierbaren Beschleunigungsvorrichtung zugegriffen wird, kann eine beliebige Arbeitsspeicherschnittstelle unter Verwendung programmierbarer Eingabe-Ausgabe(EA)-Komponenten auf der programmierbaren Vorrichtung implementiert werden, während die Schnittstelle der CPU als DDR-T beibehalten wird.
-
Das Auslagern von rechnerisch intensiven Funktionen auf die Beschleuniger-DIMM-Karte ist oft aufgrund der hoch parallelen Natur der programmierbaren Vorrichtung effizienter als ein natives Durchführen dieser Funktionen auf der Host-CPU. Die algorithmische Logik in der programmierbaren Beschleunigungsvorrichtung kann auf eine bestimmte Anwendung oder Datenzugriffsmuster maßgeschneidert werden, die von der aktuellen Arbeitslast verwendet werden. Beispielsweise werden Minimal-/Maximal- oder andere statistische Operationen an großen Mengen von sequenziellen Daten üblicherweise am besten unter Verwendung der programmierbaren Beschleunigervorrichtung durchgeführt, ohne den Arbeitsspeicher-Zwischenspeicher auf der Host-CPU selbst zu belasten.
-
Es ist für Fachleute ersichtlich, dass die vorliegenden Ausführungsbeispiele ohne einige oder alle dieser spezifischen Details ausgeführt werden können. In anderen Fällen wurden wohlbekannte Vorgänge nicht im Detail beschrieben, um die vorliegenden Ausführungsformen nicht unnötig zu verschleiern.
-
1 ist ein Diagramm eines veranschaulichenden Systems mit einem Hostprozessor, der an einen programmierbaren Beschleunigungs-Coprozessor gekoppelt ist. Wie in 1 gezeigt enthält das System 10 einen Hostprozessor wie Hostprozessor 12, Arbeitsspeicher wie Hauptarbeitsspeicher 14, der mit dem Hostprozessor 12 verbunden ist, und einen Coprozessor wie Coprozessor 100, auf den eine oder mehrere rechenintensive Aufgaben vom Hostprozessor 12 ausgelagert werden können.
-
Der Hostprozessor 12 kann zum Beispiel eine Zentralverarbeitungseinheit (CPU), ein Mikroprozessor, ein Mikrocontroller oder eine Grafikverarbeitungseinheit (GPU) sein, der bzw. die als eine anwendungsspezifische integrierte SchaltkreisVorrichtung (ASIC-Vorrichtung) oder eine anwendungsspezifische Standardprodukt-Vorrichtung (ASSP-Vorrichtung) implementiert ist. Der Hostprozessor 12 (manchmal als eine Host-CPU oder einfach CPU bezeichnet) kann einen oder mehrere Verarbeitungskerne 20 zum Verarbeiten von Anweisungen eines Computerprogramms enthalten. Jeder Prozessorkern 20 kann eine Steuereinheit 22, Register 24, eine arithmetisch-logische Einheit (ALU) 26 und einen zugehörigen Arbeitsspeicher-Zwischenspeicher 28 enthalten.
-
Die Steuereinheit 22 kann für ein Arrangieren der Gesamtoperation des Kerns 20 verantwortlich sein und kann Schaltkreise zum Abrufen von Anweisungen, die in einem Programmarbeitsspeicher gespeichert sind, zum Decodieren der abgerufenen Anweisungen und nachfolgenden Aussenden der decodierten Anweisungen zur Ausführung enthalten. Bei Bedarf kann die arithmetisch-logische Einheit 26 verwendet werden, um arithmetische und logische/boolesche Operationen an den Daten durchzuführen, wie sie in den Anweisungen angegeben sind. Die Ergebnisse der ausgeführten Operationen können zurück in den Arbeitsspeicher gespeichert werden. Die Register 24 können einen temporären Hochgeschwindigkeitsspeicher für Sonderzwecke für Kern 20 bereitstellen. Die Register 24 können Anweisungsregister zum Speichern der aktuell ausgeführten Anweisung, Datenregister zum Speichern von Daten, die darauf warten, verarbeitet zu werden, oder von Daten, die aus dem aktuellen Prozess resultieren, Adressregister, Statusregister, Programmzustandsregister usw. enthalten.
-
Arbeitsspeicher-Zwischenspeicher 28 ist ein kleinerer und schnellerer Arbeitsspeicher, der Kopien von Daten aus kürzlich oder häufig verwendeten Hauptarbeitsspeicherpositionen speichert, sodass nachfolgende Anforderungen vom Prozessor schneller bedient werden können als ein Abrufen der Daten aus dem Hauptarbeitsspeicher (d. h., einem relativ zeitraubenden Prozess). Im Beispiel von 1 kann die CPU 12 auch einen Zwischenspeicher 30 enthalten, der in der Gesamthierarchie unter dem Zwischenspeicher 28 sitzt und optional von zwei oder mehr CPU-Kernen 20 gemeinsam genutzt werden kann.
-
Der Hauptarbeitsspeicher 14 bezeichnet physischen Arbeitsspeicher, auf den die CPU 12 direkt zugreifen kann. Der Hauptarbeitsspeicher 14 ist herkömmlicherweise unter Verwendung flüchtiger Arbeitsspeicherkomponenten, wie dynamischem Arbeitsspeicher mit wahlfreiem Zugriff (DRAM) implementiert. Der Hauptarbeitsspeicher (auch manchmal als primärer Speicher bezeichnet) wird von externen Massenspeichervorrichtungen wie Plattenlaufwerken, optischen Laufwerken und Bandlaufwerken unterschieden. Die CPU 12 kann nur Daten manipulieren, die im Hauptarbeitsspeicher 14 gespeichert sind. Deshalb muss jedes Programm, das ausgeführt wird, oder jede Datei, auf die zugegriffen wird, aus der externen Massenspeichervorrichtung in den Hauptarbeitsspeicher 14 kopiert werden. Die Speichermenge im Hauptarbeitsspeicher 14 bestimmt, wie viele Programme zu einem beliebigen Zeitpunkt ausgeführt werden können, und die Datenmenge, die dem Programm leicht zur Verfügung gestellt werden kann.
-
Der Coprozessor 100 kann eine programmierbare integrierte Schaltkreisvorrichtung oder eine programmierbare Logikvorrichtung sein. Beispiele programmierbarer Logikvorrichtungen enthalten programmierbare Anordnungslogik (PALs), programmierbare Logikanordnungen (PLAs), feldprogrammierbare Logikanordnungen (FPLAs), elektrisch programmierbare Logikvorrichtungen (EPLDs), elektrisch löschbare programmierbare Logikvorrichtungen (EEPLDs), Logikzellenanordnungen (LCAs), komplexe programmierbare Logikvorrichtungen (CPLDs) und feldprogrammierbare Gatearrays (FPGAs), um nur einige zu nennen. Hierin werden Konfigurationen als ein Beispiel beschrieben, in denen der Coprozessor 100 als ein FPGA implementiert ist.
-
2 zeigt, wie die Vorrichtung 100 (z. B. ein feldprogrammierbarer integrierter Gatearray-Schaltkreischip) eine zweidimensionale Anordnung von funktionalen Blöcken enthalten kann, die Logikanordnungsblöcke (LABs) 110 und andere funktionale Blöcke, wie Arbeitsspeicherblöcke mit wahlfreiem Zugriff (RAM-Blöcke) 130 und digitale Signalverarbeitungsblöcke (DSP-Blöcke) 120, enthalten. Funktionale Blöcke wie die LABs 110 können kleinere programmierbare Bereiche (z. B. Logikelemente, konfigurierbare Logikblöcke oder adaptive Logikmodule) enthalten, die Eingangssignale empfangen und benutzerdefinierte Funktionen an den Eingangssignalen durchführen, um Ausgangssignale zu erzeugen. Die LABs 110 können auch in größere programmierbare Bereiche gruppiert werden, die manchmal als Logiksektoren bezeichnet werden, die individuell von entsprechenden Logiksektorverwaltungen verwaltet und konfiguriert werden. Die Gruppierung der programmierbaren Logikressourcen auf der Vorrichtung 100 in Logiksektoren, Logikanordnungsblöcke, Logikelemente oder adaptive Logikmodule ist nur illustrativ. Im Allgemeinen kann die Vorrichtung 100 funktionale Logikblöcke einer beliebigen geeigneten Größe und eines beliebigen geeigneten Typs enthalten, die in Übereinstimmung mit einer beliebigen geeigneten Logikressourcenhierarchie organisiert sein können.
-
Die programmierbare Logikvorrichtung 100 kann programmierbare Arbeitsspeicherelemente enthalten. In die Arbeitsspeicherelemente können unter Verwendung von Eingabe-Ausgabe-Elementen (EAEs) 102 Konfigurationsdaten (auch Programmierdaten oder Konfigurationsbitstrom genannt) geladen werden. Nach dem Laden stellen die Arbeitsspeicherelemente jeweils ein entsprechendes statisches Steuersignal bereit, das den Betrieb eines assoziierten funktionalen Blocks (z. B. der LABs 110, des DSP 120, des RAM 130 oder der Eingabe-Ausgabe-Elemente 102) steuert.
-
In einem typischen Szenario werden die Ausgaben der geladenen Arbeitsspeicherelemente an die Gatter von Metall-Oxid-Halbleitertransistoren in einem funktionalen Block angelegt, um bestimmte Transistoren ein- oder auszuschalten und dadurch die Logik im funktionalen Block einschließlich der Leitungspfade zu konfigurieren. Programmierbare Logikschaltkreiselemente, die auf diese Weise gesteuert werden können, enthalten Teile von Multiplexern (z. B. Multiplexer, die zum Bilden von Leitungspfaden in Zwischenverbindungsschaltkreisen verwendet werden), Nachschlagetabellen, Logikanordnungen, AND-, OR-, NAND- und NOR-Logikgatter, Durchgangsgatter usw.
-
Die Arbeitsspeicherelemente können beliebige geeignete flüchtige und/oder nichtflüchtige Arbeitsspeicherstrukturen wie Direktzugriffsarbeitsspeicher(RAM)-Zellen, Sicherungen, Antisicherungen, programmierbare Direktzugriffsarbeitsspeicher-Zellen, maskenprogrammierte und laserprogrammierte Strukturen, Kombinationen dieser Strukturen usw. verwenden. Da Konfigurationsdaten während der Programmierung in die Arbeitsspeicherelemente geladen werden, werden die Arbeitsspeicherelemente manchmal als Konfigurationsarbeitsspeicher, Konfigurations-Direktzugriffsarbeitsspeicher (CRAM) oder programmierbare Arbeitsspeicherelemente bezeichnet. Die programmierbare Logikvorrichtung (PLD) 100 kann ausgelegt sein, ein benutzerdefiniertes Schaltkreisdesign zu implementieren. Der Konfigurations-RAM kann zum Beispiel so programmiert sein, dass die LABs 110, der DSP 120 und der RAM 130, programmierbare Zwischenverbindungsverschaltung (z. B. vertikale Kanäle 140 und horizontale Kanäle 150) und die Eingabe-Ausgabe-Elemente 102 die Implementierung des Schaltkreisdesigns bilden.
-
Darüber hinaus kann die programmierbare Logikvorrichtung Eingabe-Ausgabe-Elemente (EAEs) 102 zum Steuern von Signalen von der Vorrichtung 100 weg und zum Empfangen von Signalen von anderen Vorrichtungen aufweisen. Die Eingabe-Ausgabe-Elemente 102 können parallele Eingabe-Ausgabe-Verschaltung, serielle Daten-Sende-Empfänger-Verschaltung, differenzielle Empfänger- und Sender-Verschaltung oder eine andere Verschaltung enthalten, die verwendet wird, um einen integrierten Schaltkreis mit einem anderen integrierten Schaltkreis zu verbinden.
-
Die Vorrichtung 100 kann auch eine programmierbare Zwischenverbindungsverschaltung in Form von vertikalen Leitkanälen 140 (d. h. Zwischenverbindungen, die entlang einer vertikalen Achse der PLD 100 gebildet sind) und horizontalen Leitkanälen 150 (d. h. Zwischenverbindungen, die entlang einer horizontalen Achse der PLD 100 gebildet sind) enthalten, wobei jeder Leitkanal mindestens eine Spur enthält, um mindestens eine Leitung zu leiten. Falls gewünscht kann die Zwischenverbindungsverschaltung Pipelineelemente enthalten und auf die in diesen Pipelineelementen gespeicherten Inhalte kann während des Betriebs zugegriffen werden. Ein Programmierschaltkreis kann zum Beispiel Lese- und Schreibzugriff auf ein Pipelineelement bieten.
-
Es ist anzumerken, dass andere Leittopologien abgesehen von der in 1 gezeigten Topologie der Zwischenverbindungsverschaltung im Geltungsbereich der vorliegenden Erfindung enthalten sein sollen. Beispielsweise kann die Leittopologie Leitungen enthalten, die diagonal verlaufen oder die horizontal und vertikal entlang unterschiedlicher Teile ihrer Erstreckung verlaufen sowie Leitungen, die im Fall von dreidimensionalen integrierten Schaltkreisen auf die Vorrichtungsebene senkrecht stehen, und der Treiber einer Leitung kann sich an einem anderen Punkt befinden als an einem Ende einer Leitung. Die Leittopologie kann globale Leitungen enthalten, die im Wesentlichen die gesamte PLD 100 umspannen, teilweise globale Leitungen, wie Leitungen, die einen Teil der PLD 100 umspannen, gestaffelte Leitungen einer bestimmten Länge, kleinere lokale Leitungen oder eine beliebige andere geeignete Zwischenverbindungsressourcenanordnung.
-
Im Allgemeinen kann die Kombination der programmierbaren Logik (z. B. der LABs 110 und anderer konfigurierbarer Logikkomponenten) und der programmierbaren Leitverschaltung (z. B. der vertikalen Leitkanäle 140 und der nhorizontale Leitkanäle 150) auf der Vorrichtung 100 als „Softlogik“ bezeichnet werden. Softlogik, wie Softlogik 190 auf der programmierbaren Vorrichtung 100 kann ausgelegt sein, einen oder mehrere Hardware(HW)-Beschleuniger wie HW-Beschleunigungseinheiten 192 zu implementieren, um dabei zu helfen, die Leistung des Hostprozessors 12 zu beschleunigen. Als solcher konfiguriert, wird der Coprozessor 100 manchmal als ein Hardware-Beschleuniger bezeichnet. Als Beispiele können die HW-Beschleunigungseinheiten 192 auf dem Coprozessor 100 verwendet werden, um eine Vielfalt von Funktionen zu beschleunigen, die unter anderem enthalten können: Verschlüsselung/Entschlüsselung, Komprimierung/Dekomprimierung, schnelle Fourier-Transformationen, Videocodierung/-decodierung, faltende neuronale Netze (CNN), Firewalls, Domänennamensdienste (DNS), Lastenausgleich, zwischenspeichernde Netzwerkadressenübersetzung (NAT) und andere geeignete Netzwerkpaketverarbeitungsanwendungen, um nur einige zu nennen.
-
3 ist ein Diagramm eines Systems 10, das Hardwarebeschleunigungsressourcen einsetzt. Wie in 3 gezeigt, ist die Host-CPU 12 über einen Pfad 301 an eine doppelreihige Hauptarbeitsspeichermodul(DIMM)-Komponente 14 gekoppelt. Insbesondere kann die CPU 12 eine Arbeitsspeichersteuerung 302 zum Ankoppeln an ein Hauptarbeitsspeicher-DIMM 14 unter Verwendung von Schnittstellen mit doppelter Datenrate (DDR) wie DDR-Typ-3 (DDR3) oder DDR-Typ-4 (DDR4) enthalten. Die Host-CPU 12 ist auch an eine externe Massenspeichervorrichtung wie Massenspeichervorrichtung 306 gekoppelt. Die CPU 12 kann (zum Beispiel) eine Ethernet-Steuerung 304 zum Ankoppeln an den Massenspeicher 306 enthalten. Im Allgemeinen könnte die Steuerung 304 auch die Universal-Serial-Bus(USB)-Schnittstelle, Serial-AT-Attachment(SATA)-Schnittstelle oder andere Alt-Computerbusschnittstellenstandards unterstützen.
-
Die CPU 12 kann ferner über einen Pfad 309 an die Beschleunigungs-FPGA-Vorrichtung 100 gekoppelt sein. Die FPGA-Vorrichtung 100 kann ausgelegt sein, Beschleunigungs-Hardwareressourcen für die Host-CPU 12 bereitzustellen. Die CPU 12 kann (zum Beispiel) eine Peripheral-Component-Interconnect-Express(PCIe)-Steuerung 308 oder eine kohärente Punkt-zu-Punkt-Zwischenverbindungssteuerung wie die von INTEL Corporation entwickelte UltraPath-Interconnect(UPI)-Steuerung 308 enthalten. Das FPGA 100 kann auch eine entsprechende Steuerung 310 (z. B. eine PCIe-Steuerung, eine UPI-Steuerung usw.) zum Ankoppeln an die Steuerung 308 enthalten.
-
Das FPGA 100 kann ferner externe Eingabe-Ausgabe(EA)-Blöcke wie externe EA-Blöcke 312 enthalten. Die externen EA-Blöcke 312 können breite parallele Schnittstellen wie externe Arbeitsspeicherschnittstellen (EMIF) oder generischere Schnittstellen wie GPIO- (Eingabe-Ausgabe für Universalzwecke) oder LVDS-Schnittstellen (differenzielle Niederspannungs-Signalgebung) unterstützen. Externe Arbeitsspeicherschnittstellen, die von den Blöcken 312 unterstützt werden, können Schnittstellen mit doppelter Datenrate (DDR) wie DDR-Typ-3 (DDR3), Niedrigenergie-DDR3 (LPDDR3), DDR-Typ-4 (DDR4), Niedrigenergie-DDR4 (LPDDR4), DDR-Typ-5 (DDR5), Grafik-DDRx, Schnittstellen mit vierfacher Datenrate (QDR), eine Open-NAND-Flash-Schnittstelle (ONFI) oder andere geeignete Schnittstellen zum Kommunizieren mit dem Arbeitsspeicher 314 enthalten, auf die das FPGA 100 zugreifen kann. Die Blöcke 312 können deshalb Arbeitsspeichersteuerungen zum Unterstützen einer breiten Vielfalt von externen Arbeitsspeicherprotokollen enthalten.
-
Eine Berechnung in herkömmlichen von-Neumann-Computerarchitekturen involviert üblicherweise ein Bewegen von Daten und Programmcode aus dem Arbeitsspeicher in die CPU-Register (z. B. die Register 24 in 1) und nachfolgendes Speichern der Ergebnisse zurück in den Arbeitsspeicher. Man betrachte im Beispiel von 3 ein Szenario, in dem die CPU 12 auf verschlüsselte Daten auf der Massenspeichervorrichtung 306 zugreifen muss. In dieser Situation würde die CPU 12 die verschlüsselten Daten von der gewünschten Position im Massenspeicher 306 abrufen und die abgerufenen Daten zur Entschlüsselung zum Beschleuniger-FPGA 100 leiten müssen. Die entschlüsselten Daten werden dann im Arbeitsspeicher 314 gespeichert (siehe einen Datenfluss, wie er durch den gepunkteten Pfad 350 angezeigt wird). Damit die CPU 12 auf diese Daten zugreift, müssen die entschlüsselten Daten danach durch die CPU 12 geleitet werden und im Hauptarbeitsspeicher-DIMM 14 gespeichert werden (siehe einen Datenfluss, wie er durch den gepunkteten Pfad 352 angezeigt wird). An diesem Punkt kann die CPU 12 schließlich über die DDR-Zwischenverbindung 301 auf die entschlüsselten Daten zugreifen.
-
Die Energie und Kosten zum Leiten von Daten zum und vom Arbeitsspeicher auf diese Weise könnten berechtigt sein, falls die Rechenzeit, die nativ auf der CPU 12 durchgeführt wird, relativ groß ist. Viele aufkommenden Anwendungen wie Datenanalyse, maschinelles Lernen, arbeitsspeicherinterne Datenbanken und unstrukturierte Datenbanken involvieren jedoch nur relativ kleine Rechenoperationen und erfüllen diesen Energieausgleich deshalb nicht.
-
Wie im Beispiel von 3 gezeigt, könnte ein Datentransfer über die PCIe/UPI-Schnittstelle 309 Hunderte von Millisekunden dauern, wohingegen ein Datentransfer über die DDR-Schnittstelle 301 nur Hunderte von Nanosekunden dauern könnte. Da die Transfergeschwindigkeit der Schnittstelle 301 so viel schneller als die der Schnittstelle 309 ist, wird der Pfad 301 hierin manchmal als ein Pfad mit „niedriger Latenz“ bezeichnet, wohingegen der Pfad 309 hierin manchmal als ein Pfad mit „hoher Latenz“ bezeichnet wird. Falls der Pfad mit hoher Latenz 309 zum Beispiel 500 ms benötigt und der Pfad mit niedriger Latenz 300 ns benötigt, würde der Pfad mit hoher Latenz 309 1667 Mal langsamer (z. B. 500 m/300 n = 5000) als der Pfad mit niedriger Latenz 301 sein, rein veranschaulichend. Im Allgemeinen kann die Latenz über den Pfad mit hoher Latenz 309 mindestens 10 Mal, mindestens 20 Mal, 20-100 Mal, 100-1000 Mal, 1000-5000 Mal oder mehr als 5000 Mal größer als die Latenz über den Pfad mit niedriger Latenz 301 sein.
-
Nach einer Ausführungsform wird ein verbessertes System bereitgestellt, in dem die Beschleunigungsverschaltung als Teil der DIMM-Karte gebildet ist, um vom Pfad mit niedriger Latenz zu profitieren, der die Host-CPU mit der DIMM-Karte verbindet. Das Erweitern der herkömmlichen von-Neumann-Architektur, um zusätzlich zu einem einfachen Abrufen von Daten kleine Berechnungen im Hauptarbeitsspeicherpfad zu ermöglichen, führt zu wesentlichen Verbesserungen in Bezug auf die verbrauchte Energie pro Recheneinheit.
-
4 ist ein Diagramm eines veranschaulichenden Systems, in dem die Host-CPU 12 an eine programmierbare Beschleuniger-DIMM-Karte 410 gekoppelt ist. Die CPU 12 kann weiterhin über eine PCIe/UPI-Anbindung 309 an den Beschleunigungs-Coprozessor 100 gekoppelt sein, aber zusätzliche programmierbare Beschleunigungsressourcen, wie ein FPGA-Chip, können innerhalb des Arbeitsspeicher-DIMM 410 integriert sein. Die CPU 12 kann innerhalb eines CPU-Steckplatzes auf der Leiterplatine 400 (z. B. einer gedruckten Leiterplatine oder einer Hauptplatine) installiert sein. Das Beschleuniger-FPGA 100 kann innerhalb eines PCIe-Schlitzes oder eines anderen CPU-Steckplatzes auf der Leiterplatine 400 installiert sein. Das Beschleuniger-DIMM 410 kann innerhalb eines herkömmlichen Arbeitsspeicher-DIMM-Schlitzes 402 auf der Leiterplatine 400 installiert sein. Wie durch ihre Bezeichnung angedeutet, kann die Beschleuniger-DIMM-Karte 410 den herkömmlichen DIMM-Formfaktor aufweisen. Auf diese Weise konfiguriert, muss das Hauptplatinendesign nicht geändert werden.
-
Die Host-CPU 12 verwendet die chipinterne Arbeitsspeichersteuerung 302 (die manchmal als die „Master“-Arbeitsspeichersteuerung bezeichnet wird), um mit der Beschleuniger-DIMM-Karte 410 unter Verwendung eines transaktionsbasierten Protokolls, wie dem Transaktions-DDR(DDR-T)-Protokoll als Beispiel, zu kommunizieren. Im Gegensatz zu typischen DDRx-Protokollen, die erwarten, dass Ergebnisse innerhalb eines endlichen Zeitraums im Gleichschritt an die CPU zurückgegeben werden, kann das DDR-T-Protokoll als Teil einer programmierbaren Beschleunigervorrichtung einfacher zu implementieren sein und verlangt weniger strenge Rückgaberichtlinien, wenn Transaktionen auf etwas unbefristetere Art verarbeitet werden können. Dieses Beispiel, in dem die programmierbare Beschleunigervorrichtung unter Verwendung des DDR-T-Protokolls mit der CPU kommuniziert, ist nur veranschaulichend. Im Allgemeinen kann die CPU unter Verwendung eines beliebigen nichtflüchtigen Arbeitsspeicherprotokolls (z. B. eines beliebigen NVDIMM-Protokolls) mit der programmierbaren Beschleunigervorrichtung kommunizieren. Auf hoher Ebene erteilt die Master-Arbeitsspeichersteuerung 302 Anforderungen an das Beschleuniger-DIMM 310 und wartet auf entsprechende Antworten.
-
Details der Beschleuniger-DIMM-Karte 410 sind in 5 gezeigt. Wie in 5 gezeigt kann das Beschleuniger-DIMM 410 eine andere programmierbare Vorrichtung 100' (z. B. ein FPGA) enthalten, die an mehrere Arbeitsspeichervorrichtungen 514 gekoppelt ist. Die Vorrichtung 100' kann der Art von programmierbarem integriertem Schaltkreis ähnlich sein, der in Verbindung mit 2 gezeigt und beschrieben ist. Insbesondere kann die Vorrichtung 100' auch mit einer Arbeitsspeichersteuerung 502, einem Anforderungs-Decodier/Leitschaltkreis wie dem/der AnforderungsDecodierer/-Leiteinheit 504, der Steuerverschaltung 506 und einer oder mehreren Hardware-Beschleunigungseinheiten 508 versehen sein.
-
Die Arbeitsspeichersteuerung 302 innerhalb der Vorrichtung 100' antwortet auf die von der Master-Arbeitsspeichersteuerung auf der Host-CPU empfangenen Anforderungen und wird deshalb hierin manchmal als die „Slave-Arbeitsspeichersteuerung“ bezeichnet. Die Slave-Arbeitsspeichersteuerung 502 kann ausgelegt sein, die empfangene Anforderung in Übereinstimmung mit einem vorbestimmten Kommunikationsprotokoll (z. B. dem DDR-T-Protokoll) zu interpretieren und die Anforderungen in ein Format zu übersetzen, das der Decodierer 504 verstehen kann. Beispielsweise kann die Slave-Arbeitsspeichersteuerung 502 (die manchmal als eine DDR-Slave-Steuerung bezeichnet wird) verwendet werden, um Signale in Pakete zu übersetzen. Dieses Beispiel, in dem der DDR-Slave 502 das DDR-T-Protokoll unterstützt, ist nur veranschaulichend. Im Allgemeinen kann die Slave-Arbeitsspeichersteuerung 502 ausgelegt sein, ein beliebiges transaktionsbasiertes Schnittstellenprotokoll, andere DDR-Technologien wie DDRx, LPDDRx und GDDRx, QDR-Technologien, NVDIMM-Protokolle und/oder andere Hauptarbeitsspeicher-EA-Standards zu unterstützen.
-
Der Anforderungsdecodierer 504 (der manchmal auch als eine Anforderungsleiteinheit bezeichnet wird) ist ausgelegt, Anforderungspakete von der Slave-Arbeitsspeichersteuerung 502 zu empfangen. Im Allgemeinen kann es mindestens zwei verschiedene Arten von Anforderungspaketen geben, die am Decodierer 504 empfangen werden können: (1) Leseanforderungen und (2) Schreibanforderungen.
-
Als Reaktion auf das Empfangen einer Leseanforderung decodiert der Decodierer 504 die Leseanforderung und untersucht die Adressinformationen in der decodierten Leseanforderung, um zu ermitteln, ob die Leseanforderung an die Steuerverschaltung 506, an eine ausgewählte der HW-Beschleunigungseinheiten 508 oder direkt an eine andere Komponente innerhalb des Chips 100' oder an den Arbeitsspeicher 514 (z. B. über den Umgehungspfad 516) zu leiten ist. Für Leseanforderungen, bei denen eine Antwort erforderlich ist, verfolgt der Decodierer 504 auch jede erteilte Leseanforderung nach, um sicherzustellen, dass eine entsprechende Antwort, wie gelesene Daten, zurück zur Master-Arbeitsspeichersteuerung auf der Host-CPU zurückgesendet wird.
-
Als Reaktion auf das Empfangen einer Schreibanforderung decodiert der Decodierer 504 die Schreibanforderung und untersucht die Adressinformationen in der decodierten Schreibanforderung, um zu ermitteln, ob die Leseanforderung an die Steuerverschaltung 506, an eine ausgewählte der HW-Beschleunigungseinheiten 508 oder direkt an eine andere Komponente innerhalb des Chips 100' oder an den Arbeitsspeicher 514 (z. B. über den Umgehungspfad 516) zu leiten ist. Für Schreibvorgänge leitet der Decodierer 504 die Schreibanforderung weiter und verfolgt ihren Fortschritt bis zum Abschluss (d. h., der Decodierer 504 überwacht den Schreibabschluss). Wenn der Schreibvorgang abgeschlossen ist, kann eine entsprechende Antwort zurück zur Master-Arbeitsspeichersteuerung auf der Host-CPU gesendet werden oder auch nicht.
-
Die Steuerverschaltung 506 (manchmal als Steuerinfrastruktur bezeichnet) kann ausgelegt sein, um zu arrangieren, wie Daten von den HW-Beschleunigungseinheiten 508 verarbeitet werden, um mit der programmierbaren Vorrichtung assoziierte Fehler zu überwachen, um alle erkannten Fehler zu bedienen und auch um Statusinformationen zu überwachen (als Beispiele). Insbesondere kann die Steuerinfrastruktur 506 den Fluss und die Verarbeitung von Daten sowohl beim Eintritt und Austritt der Hardware-Beschleunigungsressourcen lenken. Wie bereits in 1 erwähnt, können die Hardware-Beschleunigungseinheiten 508 programmierbare Softlogik auf dem FPGA 100' sein, von denen jede individuell konfiguriert sein kann, um eine beliebige gewünschte Benutzerfunktion zu unterstützen. Beispielhafte Funktionen, die von diesen Hardware-Beschleunigungsressourcen implementiert werden können, enthalten benutzerdefinierte Komprimierung/Dekomprimierung, Verschlüsselung/Entschlüsselung, Codierung/Decodierung, Anpassungsfunktionen, andere nicht standardmäßige Algorithmen und/oder andere geeignete Rechenfunktionen, die auf die in die FPGA-Vorrichtung 100' eingehenden Daten und/oder diese verlassenden Daten angewandt werden können.
-
Die programmierbare Vorrichtung 100' auf der Beschleuniger-DIMM-Karte 410 kann Eingabe-Ausgabe(E/A)-Komponenten 510 zum Ankoppeln an eine beliebige Art von Arbeitsspeichervorrichtungen 514 enthalten. Arten von externen Arbeitsspeicherschnittstellen, die unter Verwendung der EA-Blöcke 510 unterstützt werden könnten, können enthalten: nichtflüchtige Arbeitsspeicherschnittstellen wie die von INTEL Corporation entwickelte 3D-XPoint-Technologie und andere nichtflüchtige DIMM-Technologien; flüchtige Arbeitsspeicherschnittstellen wie Schnittstellen mit doppelter Datenrate (DDRx), Niedrigenergie-DDR(LPDDRx)-Schnittstellen, Schnittstellen mit vierfacher Datenrate (QDR), Open-NAND-Flash-Schnittstelle (ONFI) und JEDECs gestapelte DRAM-Schnittstelle für Arbeitsspeicher mit hoher Bandbreite (HBM); PCIe-basierte Arbeitsspeicherschnittstellen; Ethernet-basierte Arbeitsspeicherschnittstellen; und/oder andere geeignete Schnittstellen zum Kommunizieren mit externem Arbeitsspeicher. Falls gewünscht kann das FGPA 100' auch interne Arbeitsspeicherblöcke mit wahlfreiem Zugriff enthalten, die manchmal auch als eingebettete statische Arbeitsspeicherblöcke mit wahlfreiem Zugriff (eSRAM) oder „Massen“-RAM-Blöcke bezeichnet werden. Diese Massen-RAM-Blöcke können viel größer und dichter als die Kernarbeitsspeicherblöcke sein (z. B. die RAM-Blöcke 130 in 1).
-
6 ist ein Ablaufdiagramm von veranschaulichenden Schritten zum Betreiben der in 4 und 5 gezeigten programmierbaren Beschleuniger-DIMM-Karte 410. Bei Schritt 600 kann die DIMM-Beschleunigerkarte 410 eine Anforderung (z. B. eine Leseanforderung oder eine Schreibanforderung) von der Master-Arbeitsspeichersteuerung 302 der CPU empfangen.
-
Bei Schritt 602 kann die Slave-Arbeitsspeichersteuerung 502 auf dem DIMM 410 verwendet werden, um die empfangene Anforderung in ein geeignetes Format zu übersetzen, das vom/von der assoziierten Anforderungsdecodierer/-Leiteinheit 504 verstanden werden kann. Die DDR-Slavesteuerung 502 kann zum Beispiel die empfangenen Signale in ein Paketformat organisieren.
-
Bei Schritt 604 kann der Anforderungsdecodierer 504 verwendet werden, um die von der Slave-Steuerung 502 empfangenen übersetzten Anforderungen zu decodieren und die decodierte Lese/Schreibanforderung über die programmierbare Eingabe-Ausgabe-Verschaltung 510 zur Steuerungsinfrastruktur 506, zu den Hardware-Beschleunigungsressourcen auf dem FPGA 100' (z. B. an eine oder oder mehrere HW-Beschleunigungseinheiten 508) oder direkt an den externen Arbeitsspeicher 514 oder eine andere periphere Komponente leiten.
-
Bei Schritt 606 (der optional gleichzeitig mit den Schritten 502 und 504 stattfinden kann) kann die Steuerverschaltung 506 verwendet werden, um zu arrangieren, wie Daten innerhalb der programmierbaren Vorrichtung 100' verarbeitet werden. Beispielsweise kann die Steuerverschaltung 506 sowohl eingehende als auch/oder ausgehende Datenflüsse lenken.
-
Falls die erteilte Anforderung eine Beschleunigung erfordert, können eine oder mehrere der Hardwarebeschleunigungseinheiten 508 verwendet werden, um eine oder mehrere benutzerdefinierte Beschleunigungsfunktionen (z. B. Komprimierung/Dekomprimierung, Verschlüsselung/Entschlüsselung, Codierung/Decodierung, Anpassungsfunktionen, andere geeignete Rechenfunktionen usw.) bei Schritt 608 durchzuführen.
-
Bei Schritt 610 können die verarbeiteten Daten dann in Hauptarbeitsspeicherkomponenten wie den Arbeitsspeichervorrichtungen 514 innerhalb des Beschleunigungs-DIMM 410 gespeichert werden. Die Arbeitsspeichervorrichtungen 514 können ein beliebiger Typ von flüchtigem Arbeitsspeicher (z. B. DDRx-Arbeitsspeicher, LPDDRx-Arbeitsspeicher, eingebetteter SRAM, JEDECs Hochbandbreiten-DRAM usw.), nichtflüchtigem Arbeitsspeicher (z. B. 3D-XPoint-Arbeitsspeicher von INTEL, Flashspeicher, Phasenwechselspeicher, resistiver Arbeitsspeicher mit wahlfreiem Zugriff usw.) und andere geeignete Arten von Arbeitsspeicher sein, die intern oder extern zum Chip 100' innerhalb des Beschleuniger-DIMM 410 enthalten sein können. Bei Schritt 612 können gelesene Daten optional zurück zur Host-CPU gesandt werden.
-
Auf diese Weise konfiguriert und betrieben, verbessert die Aufnahme von Beschleunigungsverschaltung in der DIMM-Karte/im DIMM-Schlitz die Energieeffizienz von Anwendungen, die relativ zur Arbeitsspeicherkommunikationslatenz eine niedrige Rechenzeit aufweisen. 7 ist ein Diagramm, das die Rechenzeit verschiedener Aufgaben zeigt, die vom System von 4 durchgeführt werden können. Man betrachte beispielsweise ein Szenario, in dem die Host-CPU 12 eine Aufgabe berechnen muss, die eine Dauer Tx brauchen würde, wenn sie nativ auf der Host-CPU selbst durchgeführt würde (siehe Abschnitt 702 in 7). Falls die Host-CPU 12 die Aufgabe an das Beschleuniger-FPGA 100 auslagern würde, das über die Verbindung 309 mit hoher Latenz (z. B. eine PCIe-, UPI- oder andere Alt-Schnittstelle) verbunden ist, würde die Gesamtzeit, die zum Abschluss der Aufgabe benötigt würde, gleich der Umlauf-Transportverzögerung Ty zum Durchlaufen des Pfads mit hoher Latenz 309 plus der Beschleunigungsrechenverzögerung Ta sein, die die Beschleunigungsressourcen auf dem FPGA 100 benötigen, um die ausgelagerte Aufgabe durchzuführen. Es ist anzumerken, dass, obwohl die Beschleunigungsrechner-Ta kleiner als die native CPU-Rechenverzögerung Tx sein könnte, die kombinierte Gesamtzeit von (Ta+Ty) Tx überschreiten kann, wenn Tx nicht viel größer oder gar geringer als Ty ist (siehe Abschnitt 704 in 7).
-
In derartigen Situationen könnte die Host-CPU 12 stattdessen die Aufgabe an die Beschleuniger-DIMM-Karte 410 auslagern, die über eine Verbindung mit niedriger Latenz 301 angebunden ist (z. B. eine Hauptarbeitsspeicherschnittstelle wie eine DDRx-, LPDDRx- oder DDR-T-Schnittstelle). Falls dies der Fall ist, würde die Gesamtzeit, die zum Abschluss der Aufgabe benötigt würde, gleich der Umlauf-Transportverzögerung Tz zum Durchlaufen des Pfads mit niedriger Latenz 301 plus der Beschleunigungsrechenverzögerung Ta sein, die die Beschleunigungsressourcen auf dem FPGA 100' benötigen, um die ausgelagerte Aufgabe durchzuführen. Da hier die DIMM-Karten-Tansportverzögerung Tz wesentlich geringer als die PCIe-Transportverzögerung Ty ist, kann die kombinierte Gesamtzeit von (Tz+Ty) tatsächlich geringer als die native CPU-Rechenverzögerung Tx sein (siehe Abschnitt 706 in 7). In diesem Fall würde es sinnvoll sein, dass die Host-CPU die Aufgabe an die Beschleunigungs-DIMM-Karte auslagert. Wie bereits oben in Verbindung mit 4 beschrieben, ist Tz üblicherweise mindestens einige Größenordnungen kleiner als Ty (z. B. kann Tz mindestens 10 Mal, 100 Mal, 1000 Mal, 10 Tausend Mal, 100 Tausend Mal oder gar Millionen Mal kleiner als Ty sein).
-
Darüber hinaus kann das Hinzufügen von Beschleunigungsressourcen im Hauptarbeitsspeicherpfad dem System zusätzliche Merkmale wie Inline-Komprimierung und Kryptografie-Fähigkeit bereitstellen. Die Verwendung der programmierbaren Vorrichtung 100' in der DIMM-Karte kann auch helfen, eine breitere Palette von Arbeitsspeichertechnologien zu unterstützen, die andernfalls nicht nativ und direkt von der Host-CPU unterstützt würden. Es besteht auch kein Bedarf zur Aktualisierung des Designs der Host-CPU (d. h., die auf der Host-CPU implementierte Arbeitsspeicherschnittstelle kann konstant und unabhängig von der auf der Beschleuniger-DIMM-Karte 410 implementierten Arbeitsspeichertechnologie bleiben). Der Einsatz einer Beschleunigungs-DIMM-Karte kann in vielen Anwendungen technologische Verbesserungen bringen. Ein Beispiel ist bei Arbeitsspeicherrechenanwendungen. Man betrachte beispielsweise ein Szenario, in dem die Host-CPU einen Minimalwert unter einer Million Datensätze für ein bestimmtes Feld aus 32 Bytes finden muss. Um diese Aufgabe durchzuführen, würde die Host-CPU 32 Millionen Bytes mit Daten abrufen und analysieren müssen. Mit der FPGA-Beschleunigungskarte könnte die Host-CPU eine Anweisung an die im DDR-DIMM-Steckplatz sitzende Beschleunigungskarte senden. Das FPGA in der Beschleunigungskarte könnte programmiert sein, um diese datenintensive Aufgabe durchzuführen, und würde bei Abschluss das Endergebnis zur CPU zurückgeben, was nur einige Bytes von Daten sein würde.
-
Ein weiteres Beispiel betrifft Datenbankbeschleunigungsanwendungen. Man betrachte eine Delta-Zusammenführungsanwendung für eine SAP-HANA-Datenbankarchitektur. Wenn Datensätze hinzugefügt oder gelöscht werden, muss die Datenbank eine bestimmte Änderungsliste pflegen. Die Hauptdatenbank wird nicht aktualisiert, da es eine Reihe von Abfragen gibt, die bedient werden müssen. Die Datenbank kann als zwei Kopien gespeichert werden (z. B. als eine goldene Datenbank und eine Bezugsdatenbank). Die goldene Datenbank könnte verwendet werden, um eingehende Anforderungen zu bedienen und eine Delta-Zusammenführungsänderungsliste zu pflegen. Die Bezugsdatenbank könnte mit der Delta-Zusammenführungsänderungsliste aktualisiert werden. Danach kann die goldene Datenbank geändert werden, um mit der Bezugsdatenbank übereinzustimmen. Von diesem Punkt an bedient die goldene Datenbank neue Anforderungen, während die Bezugsdatenbank mit der Änderungsliste aktualisiert wird. Derartige Vorgänge könnten zur Beschleunigungs-DIMM-Karte ausgelagert werden und vor der Host-CPU versteckt werden, um eine verbesserte Betriebstauglichkeit bereitzustellen.
-
Ein weiteres Beispiel betrifft Datenanalytikbeschleunigungsanwendungen. Man betrachte einen Cluster-Algorithmus wie den K-Means-Clusteralgorithmus. Falls die Host-CPU ermitteln muss, zu welchem Cluster in einer Vielzahl von Clustern ein bestimmter Datenpunkt gehört, könnte die FPGA-Beschleunigungs-DIMM-Karte verwendet werden, um den Clusteralgorithmus auszuführen und das resultierende Cluster zur Host-CPU zurückzugeben.
-
Ein weiteres Beispiel betrifft Speichererweiterungsanwendungen. Man betrachte ein Szenario, in dem eine Host-CPU mit nur einem DIMM-Schlitz nur X-GB an Speicher beherbergen kann. Mit einer DIMM-FPGA-Beschleunigungskarte könnten mehrere Instanzen von X-GB untergebracht werden, was die Menge des für die Host-CPU zugänglichen Arbeitsspeichers effektiv vergrößern würde (siehe z. B. 5, in der das Beschleunigungs-DIMM 410 mehrere Arbeitsspeichervorrichtungen 514 enthalten kann).
-
Ein weiteres Beispiel betrifft Hochfrequenzhandelsanwendungen. FPGA 100' auf der DIMM-Beschleunigungskarte enthält EA-Komponenten zum Anbinden an Ethernet-, PCIe- und andere Alt-EA-Anschlüsse. Im Beispiel von 4 könnte das Beschleunigungs-DIMM 410 direkt über die Verbindung 450 mit einem anderen Beschleuniger-FPGA 100 verbunden sein, um die CPU vollständig zu umgehen. Die Verbindung 450 könnte eine PCIe-Anbindung sein (als Beispiel). Eine Ethernet-Verbindung könnte verwendet werden, um Marktdaten aufzunehmen und Schwankungen an der Börse könnten analysiert und in einem mit dem FPGA 100' assoziierten Arbeitsspeicher gespeichert werden. Wenn Bedingungsauslöser erfüllt sind, könnte das Beschleuniger-DIMM die Host-CPU benachrichtigen, dass ein bestimmtes Ereignis eingetreten ist. Die direkte Arbeitsspeicherzugriffsfunktion (DMA-Funktion), wobei der Hauptarbeitsspeicher auf der DIMM-Karte 450 unabhängig von der Host-CPU zugänglich ist, kann ebenfalls unterstützt werden, was dabei helfen könnte, die erweiterten Speicherfähigkeiten des Hauptarbeitsspeichers in der Beschleunigungs-DIMM-Karte richtig zu nutzen, während die gesamte Arbeitsspeicherhierarchie umgangen wird und etwaige unerwünschte Kontamination/unterwünschtes Flattern verhindert wird.
-
Wie oben bereits beschrieben, kann die Beschleunigungs-DIMM-Karte programmiert werden, um eine breite Vielfalt von Bedarfsdiensten bereitzustellen. Beim Bau von CPUs werden bestimmte Verschlüsselungs- und Komprimierungsstandards eingesetzt, die nicht optional sind. Mit der Beschleunigungs-FPGA-DIMM-Karte kann das DIMM-interne FPGA 100' dynamisch neu programmiert oder neu konfiguriert werden, um einen beliebigen Typ von Verschlüsselung, Komprimierung, Codierung oder einen anderen nicht standardmäßigen Algorithmus zu unterstützen. In allen dieser Beispiele reduziert die Verwendung der Beschleunigungs-DIMM-Karte 410 den Energieverbrauch, verbessert die Computerleistung und erhöht die Betriebseffizienz für das gesamte System. Die Beschleuniger-FPGA-DIMM-Karte 410 kann auch PCIe-/UPI-Anschlüsse frei machen, um mehr CPUs anzubinden, was die CPU-Dichte in Rechenzentren weiter erhöhen kann.
-
Obwohl die Verfahren der Operationen in einer bestimmten Reihenfolge beschrieben wurden, sollte klar sein, dass andere Operationen zwischen den beschriebenen Operationen durchgeführt werden können, die beschriebenen Operationen angepasst werden können, sodass sie zu leicht unterschiedlichen Zeitpunkten stattfinden oder die beschriebenen Operationen können in einem System verteilt werden, was das Auftreten der Verarbeitungsoperationen zu verschiedenen Intervallen ermöglicht, die mit der Verarbeitung assoziiert sind, solange die Verarbeitung der überlagerten Operationen auf eine gewünschte Weise durchgeführt wird.
-
Beispiele:
-
Die folgenden Beispiele betreffen weitere Ausführungsformen.
-
Beispiel 1 ist eine Karte, umfassend: einen programmierbaren integrierten Schaltkreis mit Softlogik, die ausgelegt ist, als Hardwarebeschleunigungsressourcen zu arbeiten, wobei die Karte einen Formfaktor eines doppelreihigen Arbeitsspeichermoduls (DIMM) aufweist, wobei der programmierbare integrierte Schaltkreis Anforderungen von einer Host-Zentralverarbeitungseinheit (CPU) empfängt und wobei mindestens einige der empfangenen Anforderungen zu den Hardwarebeschleunigungsrekursen zur Beschleunigung geleitet werden; und Arbeitsspeicher, der an den programmierbaren integrierten Schaltkreis gekoppelt ist.
-
Beispiel 2 ist die Karte von Beispiel 1, wobei der programmierbare integrierte Schaltkreis über eine Hauptarbeitsspeicherschnittstelle an die Host-CPU gekoppelt ist.
-
Beispiel 3 ist die Karte von Beispiel 2, wobei die Hauptarbeitsspeicherschnittstelle eine Schnittstelle mit doppelter Datenrate (DDR) umfasst.
-
Beispiel 4 it die Karte von Beispiel 3, wobei die Hauptarbeitsspeicherschnittstelle eine Transaktions-DDR(DDR-T)-Schnittstelle oder eine nichtflüchtige doppelreihige Arbeitsspeichermodul(NVDIMM)-Schnittstelle umfasst.
-
Beispiel 5 ist die Karte von einem der Beispiele 2-5, wobei die Host-CPU über eine Prozessorschnittstelle an einen anderen Prozessor gekoppelt ist und wobei Datentransfers über die Hauptarbeitsspeicherschnittstelle schneller als Datentransfers über die Prozessorschnittstelle sind. Beispiel 6 ist die Karte von Beispiel 5, wobei die Datentransfers über die Hauptarbeitsspeicherschnittstelle mindestens ein Tausendmal schneller als die Datentransfers über die Prozessorschnittstelle sind.
-
Beispiel 7 ist die Karte von einem der Beispiele 1-6, wobei der Arbeitsspeicher nichtflüchtigen Arbeitsspeicher und/oder flüchtigen Arbeitsspeicher umfasst.
-
Beispiel 8 ist die Karte von einem der Beispiele 1-7, wobei der programmierbare integrierte Schaltkreis ferner umfasst: eine Arbeitsspeichersteuerung, die ausgelegt ist, die von der Host-CPU empfangenen Anforderungen zu übersetzen; und einen Anforderungsdecodierer, der ausgelegt ist, die übersetzten Anforderungen zu decodieren und die decodierten Anforderungen an ein geeignetes Ziel innerhalb der Karte zu leiten.
-
Beispiel 9 ist die Karte von Beispiel 8, wobei der programmierbare integrierte Schaltkreis ferner Steuerverschaltung umfasst, die ausgelegt ist, den Fluss von Daten in den und aus dem programmierbaren integrierten Schaltkreis zu arrangieren.
-
Beispiel 10 ist die Karte von Beispiel 9, wobei der programmierbare integrierte Schaltkreis ferner Eingabe-Ausgabe-Komponenten umfasst, die ausgelegt sind, über Schnittstellen an unterschiedliche Arten von peripheren Vorrichtungen zu koppeln, die auf der Karte gebildet sind oder extern zur Karte sind.
-
Beispiel 11 ist ein Verfahren zum Betreiben einer Computerkarte, umfassend: mit der Computerkarte, Empfangen einer Anforderung von einer Host-Zentralverarbeitungseinheit (CPU), wobei die Computerkarte einen Formfaktor eines doppelreihigen Arbeitsspeichermoduls (DIMM) aufweist; Verwenden von Hardware-Beschleunigungsressourcen in der Computerkarte, um zumindest einige der empfangenen Anforderungen zu verarbeiten und um entsprechende verarbeitete Daten zu generieren; und Speichern der verarbeiteten Daten in einen Arbeitsspeicher in der Computerkarte.
-
Beispiel 12 ist das Verfahren von Beispiel 11, ferner umfassend ein Übersetzen der empfangenen Anforderungen in Pakete unter Verwendung einer Arbeitsspeichersteuerung auf der Computerkarte. Beispiel 13 ist das Verfahren von Beispiel 12, ferner umfassend: mit einem Decodierer auf der Computerkarte, Decodieren der übersetzten, von der Arbeitsspeichersteuerung empfangenen Anforderungen und Leiten der decodierten Anforderungen an eine geeignete Position in der Computerkarte.
-
Beispiel 14 ist das Verfahren von einem der Beispiele 11-13, wobei das Verwenden der Hardware-Beschleunigungsressourcen in der Computerkarte, um zumindest einige der empfangenen Anforderungen zu verarbeiten, ein Verwenden der Hardware-Beschleunigungsressourcen umfasst, um eine benutzerdefinierte Funktion durchzuführen, die aus der Gruppe ausgewählt ist, die besteht aus: Komprimierung/Dekomprimierung, Verschlüsselung/Entschlüsselung Codierung/Decodierung, und Übereinstimmung.
-
Beispiel 15 ist das Verfahren von einem der Beispiele 12-13, ferner umfassend: mit der Arbeitsspeichersteuerung auf der Computerkarte, Senden einer Antwort zurück zur Host-CPU.
-
Beispiel 16 ist ein System, umfassend: einen Hostprozessor, der eine Master-Arbeitsspeichersteuerung enthält; und eine doppelreihige Beschleunigungs-Arbeitsspeichermodul(DIMM)-Karte, die über eine Hauptarbeitsspeicherschnittstelle mit dem Hostprozessor verbunden ist, wobei die Beschleunigungs-DIMM-Karte eine Slave-Arbeitsspeichersteuerung zum Kommunizieren mit der Master-Arbeitsspeichersteuerung enthält, wobei der Hostprozessor betreibbar ist, eine Aufgabe zur Beschleunigungs-DIMM-Karte auszulagern, um Rechenleistung auf dem Hostprozessor freizumachen, und wobei die Beschleunigungs-DIMM-Karte Arbeitsspeicher zum Speichern von mit der ausgelagerten Aufgabe assoziierten Daten enthält.
-
Beispiel 17 ist das System von Beispiel 16, ferner umfassend einen Coprozessor, der über eine zusätzliche Schnittstelle mit einer ersten Latenz mit dem Hostprozessor verbunden ist, wobei die HauptArbeitsspeicherschnittstelle eine zweite Latenz zeigt, die zumindest zehnmal geringer als die erste Latenz ist.
-
Beispiel 18 ist das System von Beispiel 17, wobei die Beschleunigungs-DIMM-Karte direkt über einen Umgehungspfad mit dem Coprozessor verbunden ist. Beispiel 19 ist das System eines der Beispiele 16-18, wobei die Hauptarbeitsspeicherschnittstelle eine Schnittstelle auf Basis doppelter Datenrate (DDR) umfasst.
-
Beispiel 20 ist das System von Beispiel 19, wobei der Arbeitsspeicher auf der Beschleunigungs-DIMM-Karte nichtflüchtigen Arbeitsspeicher umfasst.
-
Beispielsweise können alle optionalen Merkmale der oben beschriebenen Einrichtung in Bezug das hierin beschriebene Verfahren oder den hierin beschriebenen Prozess implementiert werden. Das Vorstehende ist lediglich veranschaulichend für die Prinzipien dieser Offenbarung und verschiedene Modifikationen können von Fachleuten vorgenommen werden. Die vorstehenden Ausführungsformen können einzeln oder in beliebiger Kombination implementiert werden.