제공되는 항목

AMD Vitis™ 그래프 라이브러리는 다음을 제공합니다.

  • 다양한 사용 사례에서 그래프 분석의 빠른 FPGA 가속 구현
  • 추가 하드웨어 구성 없이도 쉽게 사용할 수 있도록 C, C++로 작성된 고수준 소프트웨어 인터페이스
  • 더 뛰어난 유연성과 제어를 위해 HLS로 작성된 로우레벨 하드웨어 인터페이스 
AMD Vitis Graph Library Provisions Diagram

기능

현재 Vitis 그래프 라이브러리에는 그래프 알고리즘 구현을 위한 다음과 같은 함수가 포함되어 있습니다.

  • 유사성 분석을 위한 함수
    • 코사인 유사도, 자카드 유사도, K-최근접 이웃
  • 중심성 분석을 위한 함수
    • PageRank
  • 경로 탐색을 위한 함수
    • 단일 소스 최단 경로, 다중 소스 최단 경로, 최소 스패닝 트리 및 예상 직경
  • 연결 분석을 위한 함수
    • 약하게 연결된 성분과 강하게 연결된 성분
  • 커뮤니티 탐지를 위한 함수
    • Louvain Modularity(22.1부터 Louvain API로 대규모 그래프 지원 가능), 라벨 전파 및 삼각형 수
  • 검색을 위한 함수
    • 너비 우선 탐색 및 2홉 검색
  • 그래프 형식을 위한 함수
    • 번호 다시 매기기, 각도 계산, CSR과 CSC 간 형식 변환

함수 구현 유형

Vitis 그래프 라이브러리는 L1 프리미티브 함수, L2 커널 함수 및 L3 소프트웨어 API 함수라는 세 가지 유형의 함수 구현을 제공합니다. L1 프리미티브 함수는 FPGA 하드웨어 개발자가 활용할 수 있습니다. L2 커널 함수는 L1 프리미티브 함수와 데이터 무버를 통합하여 구축되며, Vitis 런타임 라이브러리를 통해 호스트 코드로 호출할 수 있습니다. L3 소프트웨어 API 함수는 순수 소프트웨어 개발자가 추가 하드웨어 관련 구성 없이 그래프 작업을 AMD 플랫폼으로 오프로드할 수 있도록 C++ 함수 인터페이스를 제공합니다. 세 가지 유형의 일부 함수가 아래 표에 나와 있습니다. 현재 Vitis 그래프 라이브러리는 Versal AI Engine에서 실행되는 함수를 제공하지 않습니다. 

Vitis 그래프 라이브러리 함수 L1 프리미티브 함수
denseSimilarity: 밀집 그래프의 유사도 함수
generalSimilarity: 밀집 및 희소 행렬을 모두 지원하는 유사도 함수
sortTopK: 입력 데이터의 상위 K에 대한 정렬 함수
sparseSimilarity: 희소 그래프의 유사도 함수
L2 커널 함수
bfsImpl: 너비 우선 탐색 알고리즘
calcuDegree: 각도 계산 알고리즘
connectedComponentImpl: 연결 성분 계산 알고리즘
convertCsrCsc: Csr과 Csc 간 그래프 형식 변환 
labelPropagation: 라벨 전파 알고리즘
pageRankTop: pagerank 알고리즘 
참고: 전체 L2 커널 함수 목록 및 소개는 여기에서 확인할 수 있습니다.
L3 소프트웨어 API 함수
opBFS 클래스: 너비 우선 탐색 알고리즘
opSCC 클래스: 강하게 연결된 성분 계산
opTriangleCount 클래스: 삼각형 수 계산 
참고: 전체 L3 소프트웨어 API 함수 목록 및 소개는 여기에서 확인할 수 있습니다.

L1 프리미티브 함수와 L2 커널 함수의 자세한 차이점은 아래 표를 참조하세요. 

L1 프리미티브 함수

  • 주로 기본 구현 로직을 알고 성능 최적화를 수행하고자 하는 하드웨어에 능통한 개발자를 위해 제공됩니다.
  • 항상 스트림 인터페이스가 있습니다.
  • 일반적으로 단일 계산 모듈에 대해 구현됩니다.
  • 호스트 코드로 직접 호출할 수 없습니다.

L2 커널 함수

  • 주로 Vitis 런타임 라이브러리 API를 알고 있는 호스트 코드 개발자를 위해 제공됩니다.
  • 항상 메모리(DDR/HBM) 인터페이스를 가지고 있습니다.
  • 일부 데이터 무버 모듈과 함께 L1 프리미티브 함수를 체인화하여 형성됩니다.
  • 호스트 호출이 가능합니다.

L3 소프트웨어 API 함수

  • 주로 순수 소프트웨어 엔지니어를 위해 제공됩니다.
  • 함수 파라미터는 하드웨어에 독립적입니다.
  • 일반적으로 배포에 사용됩니다.
  • 호스트 호출이 가능합니다.

조직

세 가지 유형의 구현은 GitHub의 해당 L1, L2 및 L3 디렉토리에 구성되어 있습니다. 아래 다이어그램에는 Vitis 그래프 라이브러리의 주요 구성이 나와 있으며, 각 구성은 애플리케이션 개발의 각기 다른 단계와 관련이 있습니다.

L1 하위 디렉토리:

  • include/hw: 프리미티브 함수용 헤더 파일
  • tests/hw/kernel: 데이터 무버 및 프리미티브 함수를 포함한 상위 모듈
  • tests/hw/host: 프리미티브 함수 호출을 위한 테스트 벤치 및 인프라 지원
  • tests/hw/Makefile: 프리미티브 함수를 빌드하고 실행하는 데 사용

L2 하위 디렉토리:

  • include/hw: 커널 함수용 헤더 파일
  • tests/hw/kernel: 각 커널 함수에 대한 함수 래퍼
  • tests/hw/host: 컴파일된 커널 함수를 호출하기 위한 호스트 모듈
  • tests/hw/Makefile: 커널 함수를 빌드하고 실행하는 데 사용

L3 하위 디렉토리:

  • include/sw: 소프트웨어 API 함수용 헤더 파일
  • tests/Makefile: 소프트웨어 API 함수를 빌드하고 실행하는 데 사용
AMD Vitis Graph Library Directories Diagram

Vitis GUI에서 실행

Vitis GitHub 리포지토리에서 사용 가능한 라이브러리는 위에서 소개한 L2 및 L3 함수용 Makefile이나 Vitis IDE를 사용하여 컴파일할 수 있습니다. IDE에서 라이브러리를 사용하려면 먼저 라이브러리 템플릿으로 다운로드한 다음 템플릿을 사용하여 새 Vitis 프로젝트를 생성해야 합니다. Vitis GUI에서 라이브러리 템플릿을 사용하여 L2 또는 L3 애플리케이션을 생성하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

리소스