본 과정은 High Level Synthesis Programming의 세부과정을 배울 것이며 이 과정은 학부생 4학년, 혹은 대학원 1학년에 해당합니다.
본 과정은 C언어와 논리 회로에 대한 이해를 갖추고 있다는 전제 하에 수업을 진행하며, 디지털 시스템 디자인(설계) 및 컴퓨터조직(컴퓨터구조)를 수료하고 있으면 더 좋습니다.
해당 수업에서는 이런 것들을 배웁니다.
해당 수업에서는 이런 것들은 배우지 않습니다.
본 강의는 HLS의 사용자 지향의 코스이며, HLS 도구 개발자들을 위해 의도된 강의가 아니 때문입니다.
최근 2년 간의 칩 트렌드를 보면, 많은 칩이 생산되었고, 많은 칩들의 그들만의 커스텀 가속화를 탑재하고 있습니다.
들이 그 예시이며, 전부 사용자화를 통해 적은 영역과 파워를 소모하며 고성능을 냅니다.
하지만, 이러한 사용자화는 굉장히 높은 비용을 수반합니다.
수백만 달러의 비용이 발생하며, 공정의 집적도에 따라 그 비용은 기하급수적으로 비용이 증가하기에, 디자인과정을 자동화시킬 필요가 있습니다.
디자인적 수고를 덜기 위해서 HLS 혹은 High Level Synthesis 둘을 사용하기로 약속했습니다.
이는 C++이나 OpenCl 같은 하이레벨 언어로 작성이 가능하며, 자동으로 미세공정을 정의해주고, RTL(register-transfer level) 디자인을 생성해줍니다.
이는 과감하게 디자인 비용을 줄여줄 뿐만 아니라(시간, 돈 등), 시장으로의 진출 또한 빠르게 만들어줍니다.
이런 장점 때문에, 학계에서 HLS툴을 사용하는 빈도가 굉장히 늘고 있습니다. 실제로 인텔, 엔비디아, 구글에서 많은 성공사례(적용사례)를 보여주고 있습니다.
다음 사례는 Matrix-vector multification(행렬곱)에 대한 코드입니다.
HLS는 기존의 C언어 기반의 코드를 그대로 사용가능하고, 단자 #pragma라는 코드를 추가함으로서 간단하게 최적화를 진행해 20줄 내외의 코드로 작성이 가능합니다.
다만, 코드를 작성하는 스타일이 HLS 툴의 자체적인 최적화에 영향을 미칠 수 있는데, 이에 대해선 수업에서 다룰 예정입니다.
하지만, Verilog같은 전통적인 HDL 언어로 작성하게 될 경우, 인터페이스를 정의하는데만 수천 줄의 코드가 필요하고, 다른 부분에서 또 수천줄의 코드를 필요로 합니다.
결과적으로, HLS는 사용자화에 있어 획기적으로 개발시간을 줄여줍니다.
그렇다면, HDL로 작성된 것에 비해 HLS로 작성된 코드의 성능이 뒤떨어지는 것이 아니냐?는 의문이 들 수 있습니다.
하지만, 최근의 HLS 컴파일러에 이르러서는 이는 사실이라 할 수 없습니다.
DCT(2D discrete cosign transform) 연산에 대한 설계에서의 비교를 따르면,
HLS tool을 사용한 프로그래머가 사용한 영역(LUT등)이나 자원은 비슷하게 사용하면서, 2배는 빠르게 프로그램을 실행할 수 있었습니다.
개발하는데 걸리는 시간 또한, HLS tool을 사용한 사용자가 3분의 2정도의 시간밖에 걸리지 않았다고 나옵니다.
why?
개발속도에서 HLS tool이 월등한, 개발해야하는 코드의 줄 수가 훨씬 짧게 때문이라 설명이 가능합니다.
뿐만 아니라 프로그램의 성능조차도 hls가 월등한데, 이는 HLS에서 해주는 High level에서의 최적화가 사용자가 직접하는 최적화보다 월등하기 때문이라 설명됩니다.
우리가 수업에서 사용할 소프트웨어는 xilinx vitis software platform 입니다.
이 소프트웨어는 application level의 코드를 가져와 가속기로 변환합니다. Vitis는 그 외에도 다양한 개발툴을 지원하는데, emulate, analyze, debug 모두를 지원합니다.
우리가 가장 자주 사용할 도구는 vitis의 High-Level syntehsis routine 입니다만, 모든 software stack을 사용하긴 할 겁니다.
Xilinx Vitis HLS는 실제로 Vivado HLS의 후속작이고, 자일링스는 이름을 2020년에 바꿨습니다.
C, C++, openCL언어에 대해서 컴파일, 시뮬레이트, 디버깅하며, RTL code를 생성해줍니다.
우리가 지금 Vitis의 HLS를 사용하는 까닭은 가장 인기 있는 HLS 툴이기 때문이고, 2018년도의 조사에 따르면 3분의 1정도의 학술지가 Vivado HLS(이름이 바뀌기 전의 Vitis HLS)로 작성되었습니다.
이는 큰 점유율이며, 2등과는 꽤 격차가 큽니다.
그래서 확실한 것은 Vitis HLS 툴이 근래에 들어 학계에서 가장 인기 있는 HLS툴이라고 할 수 있습니다.
우리가 수업에서 사용할 플랫폼은 Amazon Web Service의 f1 instance를 사용할 것입니다.
인스턴스명인 F1의 f는 fpga 혹은 field programmable gate arrays를 의미합니다.
aws는 클라우드 컴퓨터 서비스이며, 사용자는 번거롭게 자가소유의 서버를 직접 관리할 필요 없이 손쉽게 fpga를 탑재하고 있는 원격 서버 컴퓨터를 사용할 수 있습니다.
사용자는 이를 이용해서 실제 fpga를 탑재한 컴퓨터에서 사용자의 소프트웨어(fpga 커널 소프트웨어)를 구동해볼 수 있습니다. 우리는 이를 통해 생성한 회로의 에뮬레이션, 디버깅, 성능분석을 해볼 것입니다.
HLS를 이용해서 설계를 하는 이유는 위에서 언급했는데, 회로를 설계하는데 있어 HLS를 사용하는 장치로 어째서 FPGA를 사용하는지에 대해 알아보겠습니다.
HLS(high-level synthesis)로 ASIC(application-Specific Integrated Circuit)을 직접 만들면 되는 것 아닌가?에 대한 의문이 드는데, 이는 맞는 말이지만 실제로 회로를 제작하는데에는 보통 몇달은 걸릴 뿐더러, 비용도 굉장히 비싸서 이를 고려하면 asic에 대한 시뮬레이션만 진행이 가능합니다.
그에 반해, fpga는 회로에 대해 synthesize하고 reprogramming 하는 것이 고작 몇 시간 안에 가능하기에, 한번 회로를 직접 실행해보고 다른 의견을 얻는 것이 가능합니다.
또한 HLS를 연구하는 목적 자체에 FPGA의 특성이 부합하는 것도 이유 중 하나입니다. 이후 fpga의 특징에 대해서 더 자세하게 배울 예정입니다.
저희가 수업에서 사용할 교재의 이름은 Parallel Programming for FPGAS 혹은 짧게는 HLS Book라 불리는 책으로, 해당 링크에서 무료로 전체 책을 다운받을 수 있습니다.
최영규 교수님을 비롯한 작성자는 이 책의 저자이신 Ryan Kastner, Janarbek Matai, Stephen Neuendorffer 분들에게 이 책을 무료로 배포해주신 것에 대한 감사를 표합니다.
최영규 교수님께서는 AWS korea로부터 이 수업을 하는 것에 대한 지원을 받으셨습니다.또한, 이 환경을 세팅하는데 도움을 주신 김정한, 원유훈 님께 감사를 표합니다.
이 코스는 상단의 4분들과 협력을 하고 있습니다.
마지막으로 인하대의 전인성분께, 슬라이스 자료를 모아주신 것에 대한 감사를 표하겠습니다.