Disposições

A Biblioteca AMD Vitis™ BLAS fornece:

  • Uma rápida implementação acelerada por FPGA das Standard Basic Linear Algebra Subroutines (BLAS)
  • Interfaces de software de alto nível escritas em C, C++ e Python para facilitar o uso sem nenhuma configuração de hardware adicional
  • Interfaces de hardware de baixo nível escritas em HLS para maior flexibilidade e controle 
Vitis BLAS Library Chart

Funções

A Biblioteca Vitis BLAS inclui as seguintes funções de operação de matriz e vetor:

Funções para operações de matriz:

  • Multiplicação geral da matriz

Funções para operações de vetor:

  • Pesquisar posição do elemento vetorial
  • Acumular a magnitude de elementos vetoriais
  • Calcular o produto escalar de dois vetores
  • Calcular um produto escalar de vetores
  • Calcular a norma Euclidiana de um vetor
  • Trocar, dimensionar, copiar vetores

Funções para operações de matriz-vetor:

  • Multiplicação geral de matriz-vetor
  • Multiplicação escalonada geral de matriz-vetor
  • Multiplicação simétrica de vetor e matriz
  • Multiplicação triangular de vetor e matriz

Tipos de implementação de função

A Biblioteca Vitis BLAS fornece três tipos de implementações de funções, a saber, funções primitivas L1, funções do kernel L2 e funções da API de software L3. As funções primitivas L1 podem ser aproveitadas pelos desenvolvedores de hardware da FPGA. As funções do kernel L2 são criadas pela integração das funções primitivas L1 e movimentadores de dados, que podem ser chamados por códigos de host com a Biblioteca de tempo de execução do Vitis. As funções da API de software L3 fornecem interfaces de função C, C++ e Python para permitir que desenvolvedores de software puro descarreguem operações BLAS para plataformas AMD sem configurações adicionais relacionadas ao hardware. Algumas funções dos três tipos estão listadas na tabela abaixo. Observe que a Biblioteca Vitis BLAS atualmente não fornece nenhuma função em execução no Versal AI Engine. 

Funções da Biblioteca Vitis BLAS Funções primitivas L1
amax, amin: pesquisa a posição do elemento vetorial
asum: acumula a magnitude de elementos vetoriais
dot: calcula o produto escalar de dois vetores
axpy: calcula um produto escalar de vetor e adiciona ao vetor
nrm2: calcula a norma Euclidiana de um vetor
swap, scal, copy: vetores de trocar, dimensionar ou copiar
symv: multiplicação simétrica de vetor e matriz
trmv: multiplicação triangular de vetor e matriz
Funções do kernel L2
Gemm class: multiplicação geral da matriz
Gemv class: multiplicação geral de vetor-matriz
Funções da API de software L3
xfblasCreate: inicializa a biblioteca e cria um handle
xfblasFree: libera memória no dispositivo FPGA
xfblasGetMatrix: copia uma matriz na memória do dispositivo FPGA para o host
xfblasExecute: inicia o kernel e aguarda até que ele termine
Nota: A lista completa de funções da API de software L3 e a introdução podem ser encontradas aqui.

Para a diferenciação detalhada das funções das primitivas L1 e funções do kernel L2, consulte a tabela abaixo. 

Funções primitivas L1

  • Fornecidas principalmente para desenvolvedores experientes em hardware que desejam conhecer a lógica de implementação subjacente e fazer otimizações de desempenho;
  • Sempre têm interfaces de fluxo;
  • Normalmente implementadas para um único módulo de computação;
  • não podem ser chamadas diretamente pelo código do host;

Funções do kernel L2

  • Fornecidas principalmente para desenvolvedores de código de host que conhecem as APIs da Biblioteca de tempo de execução do Vitis;
  • Sempre têm interfaces de memória (DDR/HBM);
  • Formadas pelo encadeamento das funções primitivas L1 com alguns módulos de movimentadores de dados;
  • Pode ser chamado pelo host;

Funções da API de software L3

  • Fornecidas principalmente para o engenheiro de software puro;
  • Os parâmetros de função são independentes do hardware;
  • Normalmente usadas para implantação;
  • Pode ser chamado pelo host;

Organização

A Biblioteca Vitis BLAS fornece três tipos de implementações de funções, a saber, funções primitivas L1, funções do kernel L2 e funções da API de software L3. As funções primitivas L1 podem ser aproveitadas pelos desenvolvedores de hardware da FPGA. As funções do kernel L2 são criadas pela integração das funções primitivas L1 e movimentadores de dados, que podem ser chamados por códigos de host com a Biblioteca de tempo de execução do Vitis. As funções da API de software L3 fornecem interfaces de função C, C++ e Python para permitir que desenvolvedores de software puro descarreguem operações BLAS para plataformas AMD sem configurações adicionais relacionadas ao hardware. Algumas funções dos três tipos estão listadas na tabela abaixo. Observe que a Biblioteca Vitis BLAS atualmente não fornece nenhuma função em execução no Versal AI Engine. 

Para subdiretórios L1:

  • include/hw: os arquivos de cabeçalho para funções primitivas
  • tests/hw: os principais módulos, incluindo movimentadores de dados e funções primitivas
  • tests/sw: o suporte ao testbench e infraestrutura para chamar funções primitivas

Para subdiretórios L2:

  • include/hw: os arquivos de cabeçalho para funções do kernel
  • include/sw: os módulos de host para chamar as funções do kernel
  • tests/hw: contém os Makefiles usados para criar cada função do kernel implementada

Para subdiretórios L3:

  • include/sw: os arquivos de cabeçalho para funções da API de software
  • tests/sw: contém os Makefiles usados para testar cada função da API de software implementada
Vitis BLAS Library L1 Sub-Directories

Execução no Vitis IDE

As bibliotecas disponíveis no repositório GitHub do Vitis podem ser compiladas usando os Makefiles fornecidos para funções L2 e L3, conforme apresentado acima, ou o Vitis IDE. Para usar a biblioteca no IDE, ela deve ser baixada como um modelo de biblioteca no início e, em seguida, um novo projeto do Vitis deve ser criado usando o modelo. Mais informações sobre como criar aplicativos L2 ou L3 usando o modelo de biblioteca na GUI do Vitis podem ser encontradas aqui.

Recursos