Disposições

A Biblioteca de grafos do AMD Vitis™ fornece:

  • Uma rápida implementação acelerada de FPGA de análise de grafos em uma variedade de casos de uso
  • Interfaces de software de alto nível escritas em C/C++ 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 
AMD Vitis Graph Library Provisions Diagram

Funções

Atualmente, a Biblioteca de grafos do Vitis inclui as seguintes funções para as implementações do algoritmo de grafo:

  • Funções para Análise de similaridade
    • Cosine Similarity, Jaccard Similarity, K-nearest Neighbor
  • Funções para Análise de centralidade
    • PageRank
  • Funções para Pathfinding
    • Single Source Shortest Path, Multi-Source Shortest Path, Minimum Spanning Tree e Diâmetro estimado
  • Funções para Análise de conectividade
    • Componentes fracamente conectados e componentes fortemente conectados.
  • Funções para Detecção de comunidade
    • Louvain Modularity (De 22.1, a API Louvain pode suportar grafos de grande escala), Propagação de etiquetas e Contagem de triângulos.
  • Funções para Pesquisa
    • Breadth First Search e 2-Hop Search.
  • Funções para Formato de grafo
    • Renumeração, Cálculo de grau e Conversão de formato entre CSR e CSC.

Tipos de implementação de função

A Biblioteca de grafos do Vitis fornece três tipos de implementações de função, 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++ para permitir que desenvolvedores de software puro descarreguem operações de grafos 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 de grafos do Vitis atualmente não fornece nenhuma função em execução no Versal AI Engine. 

Funções da Biblioteca de grafos do Vitis Funções primitivas L1
denseSimilarity: função de similaridade para grafo denso
generalSimilarity: função de similaridade que suporta grafo denso e esparso
sortTopK: função de classificação para o K superior dos dados de entrada
sparseSimilarity: função de similaridade para grafo esparso
Funções do kernel L2
bfsImpl: algoritmo de breadth-first searc
calcuDegree: algoritmo de cálculo de grau
connectedComponentImpl: algoritmo de cálculo de componente conectado
convertCsrCsc: converte o formato de grafo entre Csr e Csc 
labelPropagation: o algoritmo de propagação de rótulos
pageRankTop: algoritmo pagerank 
Nota: A lista completa de funções do kernel L2 e a introdução podem ser encontradas aqui
Funções da API de software L3
opBFS class: algoritmo de pesquisa de bread-fist
opSCC class: cálculo de componente fortemente conectado
opTriangleCount class: contagem do número de triângulos 
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

Os três tipos de implementações são organizados em seus diretórios L1, L2 e L3 correspondentes no Github. O diagrama abaixo mostra a principal organização da Biblioteca de grafos do Vitis, cada uma relacionada a um estágio diferente do desenvolvimento de aplicações.

Para subdiretórios L1:

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

Para subdiretórios L2:

  • include/hw: os arquivos de cabeçalho para funções do kernel
  • tests/hw/kernel: um wrapper de função para cada função do kernel
  • tests/hw/host: os módulos de host para chamar funções compiladas do kernel
  • tests/hw/Makefile: usado para criar e executar funções do kernel

Para subdiretórios L3:

  • include/sw: os arquivos de cabeçalho para funções da API de software
  • tests/Makefile: usado para criar e executar funções da API de software
AMD Vitis Graph Library Directories Diagram

Execução na GUI do Vitis

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.