제공되는 항목

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

  • BLAS(Standard Basic Linear Algebra Subroutines)의 빠른 FPGA 가속 구현
  • 추가 하드웨어 구성 없이도 쉽게 사용할 수 있도록 C, C++ 및 Python으로 작성된 고수준 소프트웨어 인터페이스
  • 더 뛰어난 유연성과 제어를 위해 HLS로 작성된 로우레벨 하드웨어 인터페이스 
Vitis BLAS Library Chart

기능

Vitis BLAS 라이브러리에는 다음과 같은 행렬 및 벡터 연산 함수가 포함되어 있습니다.

행렬 연산을 위한 함수:

  • 일반 행렬곱

벡터 연산을 위한 함수:

  • 벡터 요소 위치 검색
  • 벡터 요소 크기 누적
  • 두 벡터의 점곱 계산
  • 벡터-스칼라 곱 계산
  • 벡터의 유클리드 노름 계산
  • 벡터 교환, 크기 조정, 복사

행렬-벡터 연산을 위한 함수:

  • 일반 행렬-벡터곱
  • 일반 띠행렬-벡터곱
  • 대칭 행렬과 벡터 곱셈
  • 삼중 대각 행렬과 벡터 곱셈

함수 구현 유형

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

Vitis BLAS 라이브러리 함수 L1 프리미티브 함수
amax, amin: 벡터 요소 위치 검색
asum: 벡터 요소 크기 누적
dot: 두 벡터의 점곱 계산
axpy: 벡터 스칼라 곱을 계산하고 벡터에 더함
nrm2: 벡터의 유클리드 노름 계산
swap, scal, copy: 벡터 교환, 크기 조정 또는 복사
symv: 대칭 행렬과 벡터 곱셈
trmv: 삼중 대각 행렬과 벡터 곱셈
L2 커널 함수
Gemm class: 일반 행렬곱
Gemv class: 일반 행렬-벡터곱
L3 소프트웨어 API 함수
xfblasCreate: 라이브러리를 초기화하고 핸들을 생성
xfblasFree: FPGA 디바이스의 메모리 공간 확보
xfblasGetMatrix: FPGA 디바이스 메모리의 행렬을 호스트에 복사
xfblasExecute: 커널을 시작하고 완료될 때까지 대기
참고: 전체 L3 소프트웨어 API 함수 목록 및 소개는 여기에서 확인할 수 있습니다.

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

L1 프리미티브 함수

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

L2 커널 함수

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

L3 소프트웨어 API 함수

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

조직

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

L1 하위 디렉토리:

  • include/hw: 프리미티브 함수용 헤더 파일
  • tests/hw: 데이터 무버 및 프리미티브 함수를 포함한 상위 모듈
  • tests/sw: 프리미티브 함수 호출을 위한 테스트 벤치 및 인프라 지원

L2 하위 디렉토리:

  • include/hw: 커널 함수용 헤더 파일
  • include/sw: 커널 함수 호출을 위한 호스트 모듈
  • tests/hw: 구현된 각 커널 함수 빌드에 사용되는 Makefile을 포함

L3 하위 디렉토리:

  • include/sw: 소프트웨어 API 함수용 헤더 파일
  • tests/sw: 구현된 각 소프트웨어 API 함수 테스트에 사용되는 Makefile을 포함
Vitis BLAS Library L1 Sub-Directories

Vitis IDE에서 실행

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

리소스