Bereitstellungen

Die AMD Vitis™ Graph-Bibliothek bietet:

  • Eine schnelle FPGA-beschleunigte Implementierung von Graphenanalysen in einer Vielzahl von Anwendungsfällen
  • In C/C++ geschriebene High-Level-Softwareschnittstellen für einfache Bedienung ohne zusätzliche Hardwarekonfigurationen
  • In HLS geschriebene Low-Level-Hardwareschnittstellen für mehr Flexibilität und Kontrolle 
AMD Vitis Graph Library Provisions Diagram

Funktionen

Derzeit umfasst die Vitis Graph-Bibliothek die folgenden Funktionen für die Implementierung des Graphenalgorithmus:

  • Funktionen für die Ähnlichkeitsanalyse
    • Kosinus-Ähnlichkeit, Jaccard-Ähnlichkeit, Nächste-Nachbarn-Klassifikation
  • Funktionen für die Zentralitätsanalyse
    • PageRank
  • Funktionen für die Ermittlung von Pfaden
    • Single Source Shortest Path (SSSP), Multi-Source Shortest Path (MSSP), minimaler Spannbaum und geschätzter Durchmesser
  • Funktionen für die Konnektivitätsanalyse
    • Schwach verbundene Komponenten und stark verbundene Komponenten.
  • Funktionen für die Erkennung der Gemeinschaftsstruktur
    • Louvain-Modularität (ab 22.1 unterstützt die Louvain-API große Graphen), Label-Propagierung und Dreieckszahl.
  • Funktionen für die Suche
    • Breitensuche und 2-Hop-Suche.
  • Funktionen für das Graphenformat
    • Umnummerierung, Gradberechnung und Formatkonvertierung zwischen CSR und CSC.

Funktionsimplementierungsarten

Die Vitis Graph-Bibliothek bietet drei Arten von Funktionsimplementierungen, nämlich primitive L1-Funktionen, L2-Kernel-Funktionen und L3-Software-API-Funktionen. Primitive L1-Funktionen können von FPGA-Hardwareentwicklern genutzt werden. L2-Kernel-Funktionen werden durch die Integration von primitiven L1-Funktionen und Data Movers erstellt, die durch Host-Codes mit der Vitis Laufzeitbibliothek aufgerufen werden können. L3-Software-API-Funktionen stellen C++-Funktionsschnittstellen bereit. Mit ihnen können reine Softwareentwickler Graph-Vorgänge ohne zusätzliche hardwarebezogene Konfigurationen auf AMD Plattformen auslagern. Einige Funktionen der drei Implementierungsarten sind in der folgenden Tabelle aufgeführt. Beachten Sie, dass die Vitis Graph-Bibliothek derzeit keine Funktionen bereitstellt, die auf Versal AI Engine ausgeführt werden können. 

Funktionen der Vitis Graph-Bibliothek Primitive L1-Funktionen
denseSimilarity: Ähnlichkeitsfunktion für Graphen mit hoher Dichte
generalSimilarity: Ähnlichkeitsfunktion, die sowohl Graphen mit hoher als auch mit geringer Dichte unterstützt
sortTopK: Sortierfunktion für die obersten K der Eingabedaten
sparseSimilarity: Ähnlichkeitsfunktion für Graphen mit geringer Dichte
L2-Kernel-Funktionen
bfsImpl: Algorithmus für die Breitensuche
calcuDegree: Algorithmus zur Gradberechnung
connectedComponentImpl: Berechnungsalgorithmus für verbundene Komponenten
convertCsrCsc: Konvertiert das Graphenformat zwischen CSR und CSC 
labelPropagation: Algorithmus für die Label-Propagierung
pageRankTop: PageRank-Algorithmus 
Hinweis: Die vollständige Liste und eine Einführung in die L2-Kernel-Funktionen finden Sie hier
L3-Software-API-Funktionen
opBFS class: Algorithmus für die Breitensuche
opSCC class: Berechnung stark verbundener Komponenten
opTriangleCount class: Zählt die Dreiecke 
Hinweis: Die vollständige Liste und eine Einführung in die L3-Software-API-Funktionen finden Sie hier.

Die detaillierte Unterscheidung zwischen den primitiven L1-Funktionen und L2-Kernel-Funktionen finden Sie in der folgenden Tabelle. 

Primitive L1-Funktionen

  • Diese werden vornehmlich für Hardware-versierte Entwickler bereitgestellt, die die zugrunde liegende Implementierungslogik kennenlernen und Performance-Optimierungen vornehmen möchten.
  • Sie enthalten stets Stream-Schnittstellen.
  • Sie werden in der Regel für ein einzelnes Berechnungsmodul implementiert.
  • Sie können nicht direkt vom Host-Code aufgerufen werden.

L2-Kernel-Funktionen

  • Diese werden vornehmlich für Host-Code-Entwickler bereitgestellt, die sich mit APIs der Vitis Laufzeitbibliothek auskennen.
  • Sie verfügen stets über Speicherschnittstellen (DDR/HBM).
  • Sie werden gebildet durch Verkettung primitiver L1-Funktionen mit einigen Data-Mover-Modulen.
  • Sie können vom Host aufgerufen werden.

L3-Software-API-Funktionen

  • Diese werden vornehmlich für reine Softwareingenieure bereitgestellt.
  • Die Funktionsparameter sind von der Hardware unabhängig.
  • Sie werden in der Regel für die Bereitstellung verwendet.
  • Sie können vom Host aufgerufen werden.

Organisation

Die drei Implementierungstypen sind in den entsprechenden Verzeichnissen L1, L2 und L3 in GitHub organisiert. Das folgende Diagramm zeigt den grundlegenden Aufbau der Vitis Graph-Bibliothek, jeweils für eine andere Phase der Anwendungsentwicklung.

Für L1-Unterverzeichnisse:

  • include/hw: Header-Dateien für primitive Funktionen
  • tests/hw/kernel: Oberste Module einschließlich Data Movers und primitive Funktionen
  • tests/hw/host: Testbench und Infrastrukturunterstützung zum Aufrufen primitiver Funktionen
  • tests/hw/Makefile: Wird zum Erstellen und Ausführen primitiver Funktionen verwendet

Für L2-Unterverzeichnisse:

  • include/hw: Header-Dateien für Kernel-Funktionen
  • tests/hw/kernel: Funktions-Wrapper für jede Kernel-Funktion
  • tests/hw/host: Host-Module zum Aufrufen kompilierter Kernel-Funktionen
  • tests/hw/Makefile: Wird zum Erstellen und Ausführen von Kernel-Funktionen verwendet

Für L3-Unterverzeichnisse:

  • include/sw: Header-Dateien für Software-API-Funktionen
  • tests/Makefile: Wird für das Erstellen und Ausführen von Software-API-Funktionen verwendet
AMD Vitis Graph Library Directories Diagram

Ausführung in Vitis GUI

Die im Vitis GitHub-Repository verfügbaren Bibliotheken können entweder mit den bereitgestellten Makefiles für L2- und L3-Funktionen (wie oben beschrieben) oder mit der Vitis IDE kompiliert werden. Um die Bibliothek in der IDE verwenden zu können, müssen Sie sie zunächst als Bibliotheksvorlage herunterladen. Anschließend müssen Sie mithilfe der Vorlage ein neues Vitis Projekt erstellen. Weitere Informationen zum Erstellen von L2- oder L3-Anwendungen mithilfe der Bibliotheksvorlage in der Vitis GUI finden Sie hier.

Ressourcen