맛비의 독학 (막적기)/Vitis Study

1. Introduction to the Vitis Unified Software Platform

반응형

Vitis (발음 : 바이티스)

 

Objectives

대략 다음 내용을 배울 수 있습니다.

- Vitis plaform acceleration model 을 설명.

- Vitis tool flow 에 대해 이해하기

- 어떻게 HW 가속을 하는지

- HW 가속의 룰을 상기.

 

 

본문

Vitis Acceleration Platform Overview

Vitis Platform 을 먼저 설명하는데,

CPU / FPGA 의 사이는 PCIe 로 물리적으로 연결이 되어 있습니다.

 

위 아래 : User 영역의 Code 와 가속을 위한 Platform 영역으로 나눌 수 있습니다.

 

왼쪽 오른쪽

좌측 :

CPU 의 Host Program 은 C/C++ 로 기술된 API 를 사용합니다. OpenCL 처럼. (하지만 꼭 OpenCL 을 쓰는 것은 아님.)

host program 이 동작하기 위한 Host Processor 는 x86 의 Server 가 될 수 있고, Arm 기반의 embedded platform 이 될 수 있습니다.

XRT/OpenCL API 를 통해 Call 하게 되면, XRT 에서 HW 가속과 Host program 사이의 처리를 담당합니다.

Drivers 를 통해 PCIe 를 사용할 수 있습니다. AXI interface 를 통해 HW 코어를 제어합니다.

 

우측 : PL (Programable Logic) 영역으로 부르며, Hardware-accelerated kernels 이 동작하는 영역입니다.

 

결국 CPU 와 FPGA 간의 Data 를 주고 받는 부분을 이해하는 것이 중요한데,

Global Memory 를 이용합니다.

 

여기서 Global Memory 와 Host Memory 는 Access 여부와 물리적인 위치에서 차이가 있습니다.

 

 

 

굉장히 중요한 그림이 나오는데, 사실 이게 HW 가속기 원리이죠..

1. Host Memory 에서 Global Memory 로 Data 를 전달합니다.

2. Accelerated Function 에서 Global Memory 를 Access 하여 연산을 합니다.

3. 연산 결과를 다시 Global Memory 에 Write 하죠.

4. 그럼 Host memory 로 그 결과를 가져가면 끝입니다.

 

결국. HW 설계 엔지니어는 AXI Interface 를 정확하게 이해하고 있으면 됩니다. 나머지 부분은 다 주어지기 때문에..

 

 

HW Acceleration

CPU 로 하면 Function 을 Serial 하게 처리합니다.

하지만 HW 가속기가 붙게 되면 다음과 같이 HW 의 장점인 Parralel processing 을 이용해서 가속이 가능합니다.

 

 

SW / Hw Build Process

.exe / .xclbin 을 만들어 내면 됩니다. 

Host Program 빌드 과정

 

FPGA Binary 빌드 과정

SW 와 유사하게 하려고, v++ 이란 것을 만들었나보다. 

 

 

Vitis : Unified Software Platform for All Developers

 

 

 

Vitis IDE 는 Eclipse 기반.

 

 

Host Code Execution on Heterogeneous System

1. Powering-up

2. Runtime Initialization

OpenCL APIs :

- Discover Platform / Device

- Create Context

- Command Queue

 

3. Device Configuration

xclbin 을 Host 에서 PCIe 를 통해 FPGA 의 CL 영역에 올립니다.

 

4. Buffer Allocation

예를 들어 다음과 같이 Host Memory 에서 Buf0,1,2 를 사용한다고 하면, FPGA 의 Memory 에 Mirror 형식으로 사용이 가능하다.

5. Writing Data to Global Memory

다음 API 를 통해 Host 메모리의 data 를 FPGA 의 Memory 로 copy 함.

 

6. Running the Accelerators

run 하고 완료되면, Host에 Done 을 전달

7. Reading Data from Global Memory

최종적으로 buf2 의 결과를 읽어가면 된다.

 

 

Hardwre Acceleration

 

결국 FPGA 가 빠르다고 해도, PCIe 를 통한 W/R Performance 를 고려해야한다.

 

 

반응형