Dispositions

La bibliothèque AMD Vitis™ BLAS offre :

  • Une mise en œuvre rapide accélérée par FPGA des sous-routines standard d'algèbre linéaire (BLAS)
  • Des interfaces software de haut niveau écrites en C, C++ et Python pour une facilité d'utilisation sans configuration hardware supplémentaire
  • Des interfaces hardware de bas niveau écrites en HLS pour plus de flexibilité et de contrôle 
Vitis BLAS Library Chart

Fonctions

La bibliothèque Vitis BLAS comprend les fonctions de fonctionnement de matrice et de vecteur suivantes :

Fonctions pour les opérations de matrice :

  • Multiplication de matrice générale

Fonctions pour les opérations vectorielles :

  • Rechercher la position de l'élément vectoriel
  • Accumuler la magnitude des éléments vectoriels
  • Calculer le produit scalaire de deux vecteurs
  • Calculer un produit vectoriel-scalaire
  • Calculer la norme euclidienne d'un vecteur
  • Échange, Échelle, Copie des vecteurs

Fonctions pour les opérations matrice-vecteur :

  • Multiplication matrice-vecteur générale
  • Multiplication matrice-vecteur générale par bandes
  • Matrice symétrique et multiplication vectorielle
  • Matrice triangulaire et multiplication vectorielle

Types d'implémentation de fonction

La bibliothèque Vitis BLAS fournit trois types de mises en œuvre de fonctions, à savoir les fonctions primitives L1, les fonctions de noyau L2 et les fonctions d'API software L3. Les fonctions primitives L1 peuvent être exploitées par les développeurs de hardware FPGA. Les fonctions du noyau L2 sont construites en intégrant des fonctions primitives L1 et des Data Movers, qui peuvent être appelés par des codes d'hôte avec la bibliothèque Vitis Runtime. Les fonctions API software L3 fournissent des interfaces de fonction C, C++ et Python pour permettre aux développeurs software purs de décharger les opérations de BLAS vers les plateformes AMD sans configuration hardware supplémentaire. Certaines fonctions des trois types sont répertoriées dans le tableau ci-dessous. Notez que la bibliothèque Vitis BLAS ne fournit actuellement aucune fonction s'exécutant sur Versal AI Engine. 

Fonctions de la bibliothèque Vitis BLAS Fonctions primitives L1
amax, amin : position de l'élément de vecteur de recherche
asum : accumule l'amplitude des éléments vectoriels
dot : calcule le produit de point de deux vecteurs
axpy : calcule un produit vectoriel-scalaire et l'ajoute au vecteur
nrm2 : calcule la norme euclidienne d'un vecteur
swap, scal, copy : permute, met à l'échelle ou copie les vecteurs
symv : matrice symétrique et multiplication vectorielle
trmv : matrice triangulaire et multiplication vectorielle
Fonctions du noyau L2
Gemm class : multiplication de matrice générale
Gemv class : multiplication matrice-vecteur générale
Fonctions API du software L3
xfblasCreate : initialise la bibliothèque et crée un descripteur
xfblasFree : libère de la mémoire dans l'appareil FPGA
xfblasGetMatrix : copie une matrice dans la mémoire de l'appareil FPGA vers l'hôte
xfblasExecute : démarre le noyau et attend qu'il ait terminé
Remarque : La liste complète des fonctions API software L3 et l'introduction sont disponibles ici.

Pour connaître les différences détaillée entre les fonctions primitives L1 et du noyau L2, veuillez vous reporter au tableau ci-dessous. 

Fonctions primitives L1

  • Principalement destinées aux développeurs qui souhaitent connaître la logique de mise en œuvre sous-jacente et optimiser les performances ;
  • possèdent toujours des interfaces de flux ;
  • sont normalement implémentées pour un seul module de calcul ;
  • ne peuvent pas être appelées directement par le code hôte.

Fonctions du noyau L2

  • Principalement destiné aux développeurs de code hôte qui connaissent les API de la bibliothèque Vitis Runtime ;
  • dispose toujours d'interfaces mémoire (DDR/HBM) ;
  • formé par le chaînage de fonctions primitives L1 avec certains modules Data Mover ;
  • peut être appelé par l'hôte.

Fonctions API software L3

  • Principalement fournies pour les ingénieurs software purs ;
  • les paramètres de fonction sont indépendants du hardware ;
  • normalement utilisées pour le déploiement ;
  • peut être appelé par l'hôte.

Organisation

La bibliothèque Vitis BLAS fournit trois types de mises en œuvre de fonctions, à savoir les fonctions primitives L1, les fonctions de noyau L2 et les fonctions d'API software L3. Les fonctions primitives L1 peuvent être exploitées par les développeurs de hardware FPGA. Les fonctions du noyau L2 sont construites en intégrant des fonctions primitives L1 et des Data Movers, qui peuvent être appelés par des codes d'hôte avec la bibliothèque Vitis Runtime. Les fonctions API software L3 fournissent des interfaces de fonction C, C++ et Python pour permettre aux développeurs software purs de décharger les opérations de BLAS vers les plateformes AMD sans configuration hardware supplémentaire. Certaines fonctions des trois types sont répertoriées dans le tableau ci-dessous. Notez que la bibliothèque Vitis BLAS ne fournit actuellement aucune fonction s'exécutant sur Versal AI Engine. 

Pour les sous-répertoires L1 :

  • include/hw : les fichiers d'en-tête pour les fonctions primitives
  • tests/hw : les modules supérieurs, y compris les mouvements de données et les fonctions primitives
  • tests/sw : le banc d'essai et prise en charge de l'infrastructure pour l'appel de fonctions primitives

Pour les sous-répertoires L2 :

  • include/hw : les fichiers d'en-tête pour les fonctions du noyau
  • include/sw : les modules hôtes pour appeler les fonctions du noyau
  • tests/hw : contient les Makefiles utilisés pour construire chaque fonction de noyau mise en œuvre

Pour les sous-répertoires L3 :

  • include/sw : fichiers d'en-tête pour les fonctions API software
  • tests/sw : contient les Makefiles utilisés pour tester chaque fonction API software mise en œuvre
Vitis BLAS Library L1 Sub-Directories

Exécution dans la IDE (interface graphique utilisateur) Vitis

Les bibliothèques disponibles dans le référentiel Vitis GitHub peuvent être compilées à l'aide des Makefiles fournis pour les fonctions L2 et L3 comme indiqué ci-dessus ou à l'aide de l'IDE Vitis. Pour pouvoir être utilisée dans l'IDE, la bibliothèque doit d'abord être téléchargée en tant que modèle de bibliothèque, puis un nouveau projet Vitis doit être créé à l'aide du modèle. Vous trouverez plus d'informations sur la création d'applications L2 ou L3 à l'aide du modèle de bibliothèque dans la GUI (interface graphique utilisateur) de Vitis ici.

Ressources