Disposiciones

AMD Vitis™ Graph Library proporciona:

  • una rápida implementación acelerada por FPGA de análisis de gráficos en una variedad de casos de uso;
  • interfaces de software de alto nivel escritas en C/C++ para facilitar su uso sin ninguna configuración de hardware adicional; e
  • Interfaces de hardware de bajo nivel escritas en HLS para mayor flexibilidad y control 
AMD Vitis Graph Library Provisions Diagram

Funciones

Actualmente Vitis Graph Library incluye las siguientes funciones para las implementaciones del algoritmo gráfico:

  • Funciones para el análisis de similitud
    • Similitud coseno, similitud de Jaccard y K-vecino más cercano.
  • Funciones para el análisis de centralidad
    • PageRank.
  • Funciones para la búsqueda de rutas
    • Ruta más corta de fuente única, ruta más corta de fuentes múltiples, árbol de expansión mínimo y diámetro estimado.
  • Funciones para el análisis de conectividad
    • Componentes débilmente conectados y componentes conectados de forma fuerte.
  • Funciones para la detección comunitaria
    • Modularidad de Louvain (a partir de la versión 22.1, la API de Louvain es compatible con gráficos a gran escala), propagación de etiquetas y recuento de triángulos.
  • Funciones de búsqueda
    • Búsqueda en amplitud y búsqueda de doble salto.
  • Funciones de formato gráfico
    • Renumeración, cálculo de grado y conversión de formato entre CSR y CSC.

Tipos de implementación de funciones

Vitis Graph Library proporciona tres tipos de implementaciones de funciones, a saber, funciones primitivas L1, funciones de kernel L2 y 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++ para permitir a los desarrolladores de software puro descargar operaciones gráficas 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 Graph Library actualmente no brinda ninguna función que se ejecute en Versal AI Engine. 

Funciones de Vitis Graph Library Funciones primitivas L1
denseSimilarity: función de similitud para el gráfico de densidad
generalSimilarity: función de similitud compatible con el gráfico de densidad y disperso
sortTopK: función de clasificación para el top K de los datos de entrada
sparseSimilarity: función de similitud para el gráfico disperso
Funciones de kernel L2
bfsImpl: algoritmo de búsqueda primero en amplitud
calcuDegree: algoritmo de cálculo de grado
connectedComponentImpl: algoritmo de cálculo de componentes conectados
convertCsrCsc: convertir formato de gráfico entre CSR y CSC 
labelPropagation: algoritmo de propagación de etiquetas
pageRankTop: algoritmo pagerank 
Nota: la lista completa de las funciones de kernel L2 y su presentación se pueden encontrar aquí.
Funciones de API de software L3
Clase opBFS: algoritmo de búsqueda primero en amplitud
Clase opSCC class: cálculo de componentes fuertemente conectados
Clase opTriangleCount class: recuento de la cantidad de triángulos 
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

Los tres tipos de implementaciones se organizan en sus correspondientes directorios L1, L2 y L3 en GitHub. El siguiente diagrama muestra la organización principal de Vitis Graph Library, cada una relacionada con una etapa diferente del desarrollo de aplicaciones.

Para los subdirectorios L1:

  • include/hw: archivos de encabezado para las funciones primitivas
  • tests/hw/kernel: módulos superiores incluidos los motores de datos y las funciones primitivas
  • tests/hw/host: banco de prueba y compatibilidad de la infraestructura para acceder a las funciones primitivas
  • tests/hw/Makefile: se utiliza para crear y ejecutar funciones primitivas

Para los subdirectorios L2:

  • include/hw: archivos de encabezado para las funciones de kernel
  • tests/hw/kernel: contenedor de funciones para cada función de kernel
  • tests/hw/host: módulos de host para llamar a las funciones compiladas de kernel
  • tests/hw/Makefile: se utiliza para crear y ejecutar funciones de kernel

Para los subdirectorios L3:

  • include/sw: archivos de encabezado para las funciones de API de software
  • tests/Makefile: se utiliza para crear y ejecutar funciones de API de software
AMD Vitis Graph Library Directories Diagram

Ejecución en la GUI de Vitis

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