컴퓨터 비전, AI 머신 러닝, 5G 등의 첨단 기술들은 복잡한 알고리즘으로 구현된다. 이러한 알고리즘을 실행하는 하드웨어를 개발할 때 일일이 하드웨어 기술 언어(HDL)로 코딩할 경우, 개발 기간이 길어진다. 상위수준 언어(HLL)로 기술한 알고리즘 디자인을 RTL(Register Transfer Level)로 구현하는 상위수준 합성(HLS)을 활용하면 이 기간을 2~3배 줄일 수 있다.
첨단 기술 구현 알고리즘, 계속 복잡해지고 있어
HLS, HLL로 기술한 알고리즘 디자인 RTL로 구현
캐타펄트 HLS, RTL 신속 생성해 HW 개발 간소화
컴퓨터 비전, AI 머신 러닝, 5G 등의 첨단 기술들은 복잡한 알고리즘으로 구현된다. 이러한 알고리즘을 실행하는 하드웨어를 개발할 때 일일이 하드웨어 기술 언어(HDL)인 VHDL, Verilog로 코딩할 경우, 알고리즘의 복잡성과 어려움으로 그 기간이 길어질 수밖에 없다.
가령 딥 러닝으로 영상을 처리할 경우 많은 산술연산과 메모리 액세스가 요구된다. 수만에서 수십만의 연산과 메모리 액세스를 하드웨어로 구조화하고 수작업으로 코딩하는 것은 어려운 일이다.
상위수준 합성, 즉 HLS(High-Level Synthesis)는 이러한 문제를 해결하는 방법의 하나다. 추상화 수준이 높은 C, C++, SystemC 등의 상위수준 언어(HLL)로 기술한 알고리즘 디자인을 RTL(Register Transfer Level)로 구현하는 것이다.
▲ 멘토, 지멘스 비즈니스 이준석 차장 [사진=이수민 기자]
멘토, 지멘스 비즈니스에서 HLS 엔지니어로 근무하고 있는 이준석 차장을 만나 실제 하드웨어 개발에 HLS를 활용하는 방법, 그리고 상위수준 언어로 RTL 하드웨어를 구현하는 ‘캐타펄트(Catapult) HLS’ 플랫폼에 관해 물었다.
Q. 멘토의 캐타펄트는 어떤 플랫폼입니까?
A. HLS는 C, C++, SystemC와 같은 추상화 수준이 높은 언어로 기술한 알고리즘 디자인을 RTL 하드웨어로 합성하는 것입니다. 그리고 캐타펄트는 상위수준 언어를 입력으로 RTL을 구현하는 플랫폼입니다.
Q. 캐타펄트는 어떻게 상위수준 언어로 RTL을 구현합니까?
A. 상위수준 언어로 된 모든 디자인을 HLS를 이용해서 바로 RTL로 변환할 수 있는 건 아닙니다. 예를 들어 H.264나 VP9과 같은 멀티미디어 비디오 코덱의 경우 레퍼런스 소스 코드가 공개되어 있습니다. 이 코드를 바로 입력으로 넣는 것이 아니라 하드웨어로 합성이 가능한 형태로 변경해줘야 합니다. 최적화된 RTL 하드웨어를 얻고자 한다면 하드웨어 아키텍처가 고려된 C++ 디자인이 필요합니다.
캐타펄트는 합성 가능한 상위수준 언어로 된 디자인이 입력되면 그 코드를 분석합니다. 설계자가 동작 주파수, 클럭, 리셋, 사용할 메모리의 종류와 같은 하드웨어 제약사항을 툴에 적용하면 캐타펄트는 이에 따라 RTL을 구현합니다. 이 과정에서 레이턴시와 쓰루풋 설계 사양을 만족하기 위해 파이프라이닝, 루프 언롤링과 같은 아키텍처링을 옵션으로 진행할 수 있습니다.
Q. 캐타펄트 HLS는 RTL 생성 시간을 어떻게 단축합니까?
A. 캐타펄트는 VHDL, Verilog와 같은 하드웨어 기술 언어로 모든 동작을 하나하나 기술할 필요가 없어, 설계자는 기술하고자 하는 알고리즘의 핵심 기능에만 집중할 수 있습니다.
예를 들어 매우 복잡한 메모리 액세스가 있는 구조의 경우, HLS를 이용하며 필요한 크기만큼의 배열을 선언하고, 이를 연산하는 것으로 기술하고, 나머지는 캐타펄트에서 제공하는 플로를 적용하면 하드웨어 RTL을 얻을 수 있습니다. 하드웨어 기술 언어로 이를 전부 설계해야 한다면 설계 사양에 따라 메모리에 접근하는 방식과 그 구조를 정하고 이에 맞춘 설계를 해야 하므로 개발 기간이 많이 소요됩니다.
캐타펄트를 도입한 국내외 고객들의 사례를 종합해 봤을 때, 수작업 코딩방식보다 HLS를 이용했을 때 개발 기간이 평균 2배에서 최대 3배까지 단축되는 것으로 나타났습니다.
또한, 캐타펄트는 생성한 RTL을 검증할 때 C, C++, SystemC로 기술한 테스트 벤치를 그대로 사용할 수 있습니다. 소프트웨어로 기술한 테스트 벤치로 하드웨어 시뮬레이션이 가능한 것입니다. 이와 같은 캐타펄트의 검증 플로를 이용해서 다양한 검증 입력을 이용하여 충분한 테스트를 진행하면 버그 없는 RTL 생성이 가능합니다.
Q. AI가 널리 쓰이면서 AI 가속기 분야가 빠르게 성장하고 있습니다. 해당 제품 개발 프로젝트에서 캐타펄트가 유용할 것 같은데요.
A. AI 가속기 생태계에서 알고리즘은 빈번하게 수정되며, 성능 사양이 변경될 수도 있고, 목표로 하는 플랫폼에 대한 통합이 설계 일정 후반부에 가서 바뀔 수도 있습니다. 또한, 설계팀은 전력, 성능, 면적 등 3가지 관점에서 절충을 모색하게 되는데, 이를 만족하기 위해서 하드웨어 RTL을 다시 코딩해야 하는 때도 있습니다.
설계 조건의 수정으로 인해 디자인이 변경될 경우, 설계 및 검증 프로세스 전체를 다시 시작해야 합니다. 이는 생산 일정상 허용되지 않는 불가피한 지연을 발생시키고, 보다 나은 하드웨어 구조를 모색하고 개발할 기회를 놓치게 만듭니다.
캐타펄트는 상위수준 합성 플로를 이용해서 AI 머신 러닝 가속기를 설계 및 검증하고 시스템에 연결하는 플랫폼 자체를 제공합니다. 이는 C++과 같은 상위수준 언어로 기술된 디자인으로부터 생성되는 하드웨어를 전력, 프로세스, 기술에 최적화된 RTL로 구현할 수 있도록 하고 또 검증할 수 있도록 지원합니다. 빠른 구현을 위해 수학연산, DSP, 영상처리 라이브러리도 제공합니다.
멘토가 보유하고 있는 AI 머신 러닝 툴킷은 픽셀 파이프라이닝 비디오 프로세싱, 2D 컨볼루션과 같은 실제적이고 이미 검증된 가속기 기반 레퍼런스 디자인을 제공합니다. 따라서 재구성 가능한 C++/SystemC IP 소스 코드, 문서, 테스트 벤치, 스크립트가 포함되어 있습니다. 이를 활용하면 AI 프로젝트를 빠르게 진행할 수 있습니다.
Q. 어떤 직무의 엔지니어에게 캐타펄트가 유용할 것 같습니까?
A. 캐타펄트는 사실 현직에 계신 RTL 엔지니어분들에게 가장 유용합니다. 상위수준 언어로 RTL을 만들 수 있다고 하면 RTL 엔지니어분들께선 미래에 자신의 일자리가 사라질 것이라며 걱정하는 경우가 많습니다. 현실은 그렇지 않습니다. 디자인하는 언어의 추상화 수준이 높을 뿐, 오랜 RTL 개발 경력을 쌓은 RTL 엔지니어의 하드웨어 구조 분석력과 이해력은 HLS를 활용했을 때 결과물의 최적화 수준을 높입니다.
만약 어떤 연산 블록 내에서 루프가 중첩되고, 여러 메모리 액세스를 읽고 쓰기를 반복하는 연산으로 이어지는 설계가 있다고 가정해 봅시다. 이때 하드웨어적인 메모리 아키텍처를 고려한 HLS 설계가 된다면 적은 메모리로 설계 사양을 쉽게 만족할 것입니다. 그렇지 않다면 불필요한 메모리를 더 많이 사용하게 되어 전체적으로 칩 크기에 대한 비용이 늘어날 것입니다. 또한, 상위수준 언어로 기술함에 따라 설계 기간이 단축되고 그만큼 검증에 필요한 시간을 많이 늘려 보다 완성도 있는 RTL 하드웨어 설계가 가능할 것입니다.
소프트웨어 엔지니어에게도 유용합니다. 핵심 기능구현에 있어서 소프트웨어 엔지니어의 자유도가 훨씬 높고 보다 유연한 구조로 설계를 진행할 수 있습니다. 개발 일정 중간에 설계 변경이 발생하더라도 빠르게 대응할 수 있습니다. 약간의 하드웨어적인 지식까지 함께 갖춘 엔지니어라면 하드웨어 측면의 최적화도 상당한 수준으로 구현할 수 있습니다.
좋은 알고리즘을 갖고 있지만, 하드웨어 RTL을 모르기 때문에 할 수 없이 소프트웨어에만 머물러 있는 개발자가 많습니다. 그런 분들께서 캐타펄트를 활용한다면 손쉽게 개발하는 소프트웨어를 하드웨어 RTL을 생성해서 검증까지 완벽하게 진행할 수 있습니다.
RTL 개발을 외주로 맡겨야만 했던 소프트웨어 알고리즘 회사에서는 직접 하드웨어를 다룰 수 있게 되며, 이에 대한 경쟁력도 확보할 수 있습니다. 캐타펄트는 소프트웨어 및 하드웨어 엔지니어 모두에게 큰 도움이 됩니다.