FPGA를 이용해서 사용자의 응용 분야에 대한 연산 가속기를 만드는 방법이 그동안 많이 발전해 왔습니다. 더 이상 HDL 언어로 low-level에서 작성하지 않더라도

  • High-level Synthesis (HLS) 또는
  • OpenCL 등을 통해

high-level 언어로 내 workload를 작성하고 이를 가볍게(예전에 비하면야 아주 잘 번역되니까 가볍게 할 수 있겠죠) FPGA에 올릴 수 있습니다. 그렇게 되다보니 FPGA 칩을 클라우드 서버에 왕창 들여놓고 이를 고객이 프로그래밍해서 쓸 수 있도록 환경을 제공하는 사업도 흥하고 있는 것 같아 보여요. 얼마나 흥하는지야 잘 모르겠지만...

딥러닝 분야에서도 FPGA HW 가속기를 연구하는 분들은 HLS를 통해서 아키텍처를 빠르게 (HDL로 하나하나 만드는 것보다는 빠르겠죠) 만들어내서 제안한 구조 정당성, 효율성을 보여주시더군요. 저도 그렇게 하고 싶습니다. 라고 말만 한게 몇 년째인지...

FPGA 가속기 설계 언어와 High Level Synthesis

  • (System)Verilog
    장인이라면 모듈 하나하나 만들(든 장인이니까 잘 만들어둔 거 재활용하든)겠지만

  • OpenCL
    GPU만이 아니라 FPGA에서도 OpenCL로 작성한 커널을 돌릴 수 있나 보더라고요. 다만 커널에 최적화된다 해도 데이터패스를 맘대로 만드는 데 한계가 있을 것 같고 (뇌피셜입니다, 뭣도 몰라요) 이는 연산 뿐 아니라 데이터 전송도 주요 bottleneck이 되는 딥러닝 가속기에서 한계가 되겠습니다.

  • HLS
    C/C++로 아키텍처 및 데이터패스 (아키텍처에 포함되지 않나) 설계를 직접 하면 좋은 모습 보여줄 수 있겠죠. ASIC 버전에 버금갈지도..

하고 싶은 일

  • HLS로는 컨트롤러, 데이터패스 준비

  • 내부 연산기는 HDL로 작성한 버전으로 바꿔치기
    AXI 인터페이스 같은 것 없이 순수 입출력 포트를 내보내고, 별도로 손수 만든 HDL 버전 연산기와 연결하고 싶습니다.

다른 사람들은 잘만 하던데 왜 난 잘 안 되는지...

+ Recent posts