Disposiciones

AMD Vitis™ BLAS Library proporciona:

  • Una rápida implementación acelerada por FPGA de BLAS (Basic Linear Algebra Subroutines, subrutinas básicas de álgebra lineal).
  • Interfaces de software de alto nivel escritas en C, C++ y Python para la facilidad de uso sin ninguna configuración de hardware adicional.
  • Interfaces de hardware de bajo nivel escritas en HLS para mayor flexibilidad y control 
Vitis BLAS Library Chart

Funciones

Vitis BLAS Library incluye las siguientes funciones de operación de matriz y vector:

Funciones para operaciones matriciales:

  • Multiplicación matricial general

Funciones para operaciones vectoriales:

  • Búsqueda de posición de elementos vectoriales
  • Acumula la magnitud de los elementos vectoriales
  • Calcula el producto punto de dos vectores
  • Calcula un producto vectorial-escalar
  • Calcula la norma euclidiana de un vector
  • Intercambia, escala y copia vectores

Funciones para operaciones de matriz-vector:

  • Multiplicación de matriz-vector general
  • Multiplicación de matriz banda-vector general
  • Multiplicación simétrica de matriz y vector
  • Multiplicación triangular de matriz y vector

Tipos de implementación de funciones

Vitis BLAS Library proporciona tres tipos de implementaciones de funciones, a saber, las funciones primitivas L1, las funciones de kernel L2 y las funciones de API de software L3. Las funciones primitivas L1 pueden ser aprovechadas por los desarrolladores de hardware de FPGA. Las funciones de kernel L2 se construyen mediante la integración de funciones primitivas L1 y motores de datos, que pueden ser llamados por códigos de host con Vitis Runtime Library. Las funciones de API de software L3 proporcionan interfaces de función C, C++ y Python para permitir a los desarrolladores de software puro descargar operaciones de BLAS a plataformas AMD sin configuraciones adicionales relacionadas con el hardware. Algunas funciones de los tres tipos se enumeran en la tabla siguiente. Ten en cuenta que Vitis BLAS Library actualmente no brinda ninguna función que se ejecute en Versal AI Engine. 

Funciones de Vitis BLAS Library Funciones primitivas L1
amax, amin: busca la posición de los elementos vectoriales
asum: acumula la magnitud de los elementos vectoriales
dot: calcula el producto punto de dos vectores
axpy: calcula un producto vectorial-escalar y lo agrega al vector
nrm2: calcula la norma euclidiana de un vector
swap, scal, copy: intercambia, escala y copia vectores
symv: multiplicación simétrica de matriz y vector
trmv: multiplicación triangular de matriz y vector
Funciones de kernel L2
Clase Gemm: multiplicación matricial general
Clase Gemv: multiplicación de matriz-vector general
Funciones de API de software L3
xfblasCreate: inicializa la biblioteca y crea un handle
xfblasFree: libera memoria en el dispositivo FPGA
xfblasGetMatrix: copia una matriz en la memoria del dispositivo FPGA del host
xfblasExecute: inicia el kernel y espera hasta que termine
Nota: La lista completa de las funciones de API de software L3 y su presentación se pueden encontrar aquí.

Para conocer en detalle las diferencias entre las funciones primitivas L1 y las funciones de kernel L2 consulte la tabla de abajo. 

Funciones primitivas L1

  • Principalmente para desarrolladores expertos en hardware que desean conocer la lógica de implementación subyacente y realizar optimizaciones de rendimiento.
  • Siempre tienen interfaces de stream.
  • Normalmente, se aplican en un único módulo de informática.
  • No se las puede llamar directamente mediante el código de host.

Funciones de kernel L2

  • Principalmente para desarrolladores de códigos de host que conocen las API de Vitis Runtime Library.
  • Siempre tienen interfaces de memoria (DDR [double-data rate, tasa de datos doble]/HBM [high bandwidth memory, memoria de alto ancho de banda]).
  • Se forman encadenando las funciones primitivas L1 con algunos módulos de motores de datos.
  • Se pueden llamar desde el host.

Funciones de API de software L3

  • Principalmente para ingenieros de software puro.
  • Los parámetros de función son independientes del hardware.
  • Normalmente, se utilizan para la implementación.
  • Se pueden llamar desde el host.

Organización

Vitis BLAS Library proporciona tres tipos de implementaciones de funciones, a saber, las funciones primitivas L1, las funciones de kernel L2 y las funciones de API de software L3. Las funciones primitivas L1 pueden ser aprovechadas por los desarrolladores de hardware de FPGA. Las funciones de kernel L2 se construyen mediante la integración de funciones primitivas L1 y motores de datos, que pueden ser llamados por códigos de host con Vitis Runtime Library. Las funciones de API de software L3 proporcionan interfaces de función C, C++ y Python para permitir a los desarrolladores de software puro descargar operaciones de BLAS a plataformas AMD sin configuraciones adicionales relacionadas con el hardware. Algunas funciones de los tres tipos se enumeran en la tabla siguiente. Ten en cuenta que Vitis BLAS Library actualmente no brinda ninguna función que se ejecute en Versal AI Engine. 

Para los subdirectorios L1:

  • include/hw: archivos de encabezado para las funciones primitivas
  • tests/hw: módulos superiores incluidos los motores de datos y las funciones primitivas
  • tests/sw: banco de prueba y compatibilidad de la infraestructura para acceder a las funciones primitivas

Para los subdirectorios L2:

  • include/hw: archivos de encabezado para las funciones de kernel
  • include/sw: módulos host para llamar a las funciones del kernel
  • tests/hw: contiene los archivos Make usados para construir cada función del kernel implementada

Para los subdirectorios L3:

  • include/sw: archivos de encabezado para las funciones de API de software
  • tests/sw: contiene los archivos Make usados para probar cada función de API implementada
Vitis BLAS Library L1 Sub-Directories

Ejecución en Vitis IDE

Las bibliotecas disponibles en el repositorio de Vitis GitHub se pueden compilar utilizando los archivos Make proporcionados para las funciones L2 y L3 como se presentó anteriormente o el IDE (Integrated Design Environment, entorno de diseño integrado) de Vitis. Para usar la biblioteca en el IDE, primero debe descargarse como una plantilla de biblioteca y, luego, se debe crear un nuevo proyecto de Vitis usando la plantilla. Se puede encontrar más información sobre la creación de aplicaciones L2 o L3 usando la plantilla de biblioteca en la GUI (graphical user interface, interfaz gráfica de usuario) de Vitis aquí.

Recursos