Effiziente gemeinsame Nutzung von FPGA-Ressourcen in oneAPI

Aufbau eines Butterfly Crossbar Switches zur Lösung der gemeinsamen Nutzung von Ressourcen in FPGAs

Die geteilte Ressource Problem

FPGA-Karten haben in der Regel viele leistungsstarke Speicher- und I/O-Schnittstellen.

Große FPGAs, wie z.B. die Stratx 10 und Agilex Serie von Intel, verfügen über eine Vielzahl von I/O-Schnittstellen. BittWare bietet Karten an, die diese nutzen, indem sie Funktionen wie QSFPs, PCIe, On-Card-DDR4- und GDDR6-Speicher und Erweiterungsports bereitstellen. Wir haben auch Karten mit FPGAs mit On-Package HBM2.

Der Zugriff auf all diese Schnittstellen ist nicht einfach, insbesondere wenn Ressourcen von mehreren Kernels gemeinsam genutzt werden müssen. FPGAs verfügen über keine eingebaute Cache- oder Arbitrierungslogik, die über grundlegende Speichercontroller hinausgeht - die Arbitrierung liegt in der Verantwortung des Benutzers.

Unsere Lösung für das Problem der geteilten Ressourcen:

Erstellen eines KREUZSCHIENENSCHALTER in FPGA-Logik

Wir haben einen Butterfly Crossbar Switch mit Intel® oneAPI gebaut.

  • Durch die Verwendung von oneAPI, einem High-Level-Tool, anstelle von Low-Level-RTL, erhalten wir eine einfach zu konfigurierende Lösung, die leicht optimiert für verschiedene Anwendungen
  • Wir haben den 520N-MX Karte; der Code kann auch auf anderen BittWare-Karten mit oneAPI verwendet werden

Eine Lösung für die gemeinsame Nutzung der Konnektivität zwischen mehreren Kernels und mehreren Schnittstellen ist ein Crossbar-Switch. Dieser kann natürlich mit der nativen FPGA-Programmierung erstellt werden. Wenn wir jedoch eine High-Level-Programmiersprache wie oneAPI verwenden, können wir ihn leicht optimieren, um so effizient wie möglich zu sein, basierend auf der Anzahl der erforderlichen Verbindungen und der Breite der Schnittstellen.

Der BittWare Butterfly Crossbar Switch wurde auf unserer 520N-MX-Karte entwickelt, die über HBM2-Speicher und mehrere Netzwerkanschlüsse verfügt.

 

Warum einen Querbalken verwenden?

Eine Kreuzschiene ist eine Sammlung von Schaltern, die in einer Matrix angeordnet sind. Sie reduziert die erforderlichen Verbindungen zwischen einer Gruppe von Ein- und Ausgängen.

Ohne Schalter:

Multiplexer: alle Ein- und Ausgänge sind miteinander verbunden.

Mit Crossbar-Schalter

Switches leiten Signale mit weniger Verbindungen weiter.

In einem FPGA sind weniger Verbindungen = einfacheres Routing, höhere Taktfrequenz und bessere Leistung

Es gibt mehrere Arten von Kreuzschienenschaltern

Zwei Beispiele sind der volle Querbalken und der Schmetterling:

Voller Querbalken:

Die Matrix ist gleich der Anzahl der Eingänge multipliziert mit der Anzahl der Ausgänge.

Schmetterling Querbalken

Die Größe der Matrix ist N x log2(N) / 2, wobei N die Anzahl der Eingaben ist.

Wir haben uns für Butterfly entschieden, weil es weniger FPGA-Ressourcen benötigt. Allerdings kann es in einigen Fällen einen geringeren Durchsatz haben.

Weitere Einzelheiten:

BittWare's Butterfly Crossbar Schalter

  • Beispiel: Kreuzschiene mit 8 Eingängen und 8 Ausgängen
  • Beispiel: Zusammenstoß auf den Portrouten 0-2 und 2-3
  • Bei der Schlichtung wird ein einfaches Ping-Pong-Verfahren verwendet, obwohl bei Bedarf auch anspruchsvollere Verfahren leicht umgesetzt werden können.
Video abspielen
Klicken Sie auf das Bild, um den Beispielkonflikt auf den Portrouten 0-2 und 2-3 zu animieren.

In diesem Beispiel einer Schmetterlingskreuzschiene werden 8 Eingänge mit nur 12 Schaltern zu 8 Ausgängen geleitet. Jeder Schalter hat zwei Eingänge und zwei Ausgänge. Die Daten werden direkt durchgeschaltet oder auf den entgegengesetzten Weg umgeschaltet.

Wenn nur ein Pfad geschaltet ist, kann es an einem Ausgang zu einem Konflikt kommen, und der Schalter muss entscheiden, wer Zugang zu diesem Pfad hat. Bei der Arbitrierung wird standardmäßig ein einfaches Ping-Pong-Verfahren verwendet, obwohl bei Bedarf auch anspruchsvollere Verfahren leicht implementiert werden können.

Verwendung von High-Level-Design-Tools (oneAPI DPC++)

Durch die Verwendung von Hochsprachen (DPC++) kann der Crossbar-Switch beispielsweise auf eine bestimmte Anwendungsanforderung zugeschnitten werden:

  • Die Anzahl der parallelen Kerne (Eingangsanschlüsse)
  • Die Breite der Datenpfade
  • Mehrere verschiedene Traversen im gleichen Design

Dies ermöglicht eine ressourcenoptimierte Gestaltung. Der Stromverbrauch wird auf ein Minimum reduziert, da kein ständig aktiver integrierter generischer Schalter erforderlich ist.

Verwendung der oneAPI-Tools (DPC++ und SYCL)

  • Jeder Kreuzschienenschalter ist eine einzigartige Gruppe von Schalterkernen
  • Die Switches werden über SYCL-Pipes verbunden, um eine Kreuzschiene mit der erforderlichen Anzahl von Ports zu bilden.
  • Die Breite der einzelnen Schalter ergibt sich aus den erforderlichen Datentypen
  • Anzahl der Ports muss eine Potenz von 2 sein
    • Ungenutzte Ports werden bei der Synthese wegoptimiert
  • Datentypen müssen eine Switch-Metadatenstruktur mit Zielinformationen erben
  • Der Zugriff auf die Ports erfolgt über SYCL-Pipe-Methoden, je nach Bedarf blockierend oder nicht blockierend

Crossbar in DPC++ verwenden

Drei Beispielanwendungsfälle für den Crossbar Switch von BittWare

Netzwerkverarbeitung | Kernel-Sharing von HBM2 | Verteilte Graphenverarbeitung

Anwendungsfall 1:

Netzwerkverarbeitung

Gespräche mit IO-Schnittstellen in oneAPI

oneAPI abstrahiert die Schnittstelle zwischen dem Host und dem FPGA. Schnittstellen mit externen E/A (wie die QSFPs im Diagramm) werden ebenfalls durch oneAPI E/A-Pipes abstrahiert. Dadurch können Designs auf mehrere BittWare FPGA-Karten, die oneAPI unterstützen, skaliert werden.

Ein Crossbar-Switch kann verwendet werden, um Pakete zu oder von Netzwerkanschlüssen zu leiten. Hier wird durch eine kleine Änderung des DCP++-Codes die Schlichtung an den Grenzen der Netzwerkpakete vorgenommen.

Anwendungsfall 2:

Gemeinsame Nutzung von HBM2 durch den Kernel

(Mit einem Beispiel für Ethereum-Blockchain-Mining)

Mit dem Crossbar Switch können wir Kernel optimieren, die den Zugriff auf HBM2-Speicherkanäle gemeinsam nutzen müssen.

Ein Anwendungsfall dafür ist das Mining von Ethereum.

  • Das Mining von Ethereum mit konkurrenzfähiger Leistung erfordert mehrere parallele Kernel, von denen jeder Zugriff auf einen großen (derzeit 4,5 GB) Speicherbereich namens DAG hat.
  • Der Engpass beim Ethereum-Mining ist die Speicherbandbreite, so dass der integrierte HBM2 sowohl für die Größe als auch für die Bandbreitenanforderungen hervorragend geeignet ist.

Der Intel Stratix 10 MX FPGA verfügt über 32 unabhängige HBM2-Speicherports.

  • Jeder Anschluss hat einen Spitzendurchsatz von 12,8 GBytes/Sek.

  • Jeder Anschluss hat Zugriff auf nur 512 MByte Speicher

  • 16 GBytes insgesamt

Der FPGA hat jedoch keinen eingebauten Switch, und High-Level-Tools können nicht automatisch mehrere Ports verketten oder arbitrieren.

Unser Crossbar Switch kann diese Probleme lösen und die Leistung verbessern.

Beispiel für die gemeinsame Nutzung von 8 HBM-Speichern

Ohne Crossbar: Große Anzahl von Routen mit Multiplexing-Ansatz (keine Arbitrierung).

Unser Butterfly Crossbar Switch reduziert das Routing und erhöht die Arbitrierung für mehr Leistung.

Anwendungsfall 3:

Verteilte Graphenverarbeitung

  • Große Graphen erfordern erhebliche Speicherressourcen, die auf mehrere FPGAs verteilt sind.
  • Der Crossbar-Switch ist eine elegante Lösung für die Kommunikation zwischen lokalen und externen Kernel-Geräten.
  • Graphenverarbeitung hat viele Anwendungen
    • Biologie, Soziale Medien, Finanzen und viele mehr

Schlussfolgerung

  • FPGAs haben einzigartige Fähigkeiten, die komplex und schwierig effizient zu nutzen sein können.
  • Die Butterfly Crossbar Switch IP von BittWare bietet eine einfache Möglichkeit, einen gemeinsamen Zugriff zwischen mehreren Speichern oder IO-Schnittstellen zu ermöglichen und so einige dieser Komplexitäten zu vereinfachen.
  • Hochsprachen wie DPC++ ermöglichen die einfache Anpassung solcher IP an verschiedene Anwendungsfälle.

Anforderung des Quellcodes

Sie können den BittWare Butterfly Crossbar Switch anfordern, indem Sie dieses Formular ausfüllen. Unser Vertriebsteam wird sich mit Ihnen in Verbindung setzen, um die Lizenzvereinbarung zu akzeptieren und ein Login für den Download des Codes einzurichten.

"*" kennzeichnet Pflichtfelder

Name*
Bitte überprüfen Sie, ob diese E-Mail-Adresse aktiv ist, da die PDF-Datei über diese Adresse verschickt wird.
Adresse und Ort*