최근에 Brian Bailey는 CPU와 FPGA 지원이라는 두 부분으로 구성된 기사를 작성하는 라운드 테이블을 조직했습니다. . 전문가들은 FPGA와 CPU를 기반으로 하는 시스템 설계의 진화하는 현실에 대해 논의했습니다. 이 토론에서는 디자인 흐름의 최근 개발과 새로운 기술을 사용하여 소프트웨어 개발자가 CPU 및 FPGA 플랫폼의 시장 출시 시간을 단축하는 데 어떻게 도움이 되는지 설명합니다.
소개 인공 지능(AI)에 대한 관심 증가, 연결된 개체(IoT)의 출현, 데이터 센터 가속화 추세를 살펴보면 모두 다음과 같은 질문을 하게 됩니다. 이 세 가지의 공통 분모는 무엇입니까?
소프트웨어 개발자는 이러한 모든 추세의 중심에 있으며 프로그래밍 및 계산을 가속화하려고 합니다. FPGA와 CPU 간의 낮은 통신 대기 시간을 비롯한 최신 기술 혁신과 오늘날 FPGA의 상대적으로 낮은 전력 소비와 결합되어 FPGA 및 CPU 기반 시스템은 원하는 성능을 달성하기 위한 올바른 선택이 되었습니다. 그러나 이러한 융합의 중심에서 소프트웨어 개발자는 FPGA 기술의 근본적인 복잡성으로 인해 어려움을 겪고 있습니다.
지난 몇 년 동안 HLS(고수준 합성) 도구는 오늘날의 시스템 복잡성을 해결하고 시장 출시 시간을 단축하는 측면에서 크게 향상되었습니다. 그러나 HLS 도구는 IP 블록(즉, IP 중심)에 가장 중점을 둡니다. 요구 사항을 충족하기 위해 HLS 도구에서 지원할 수 없는 광범위한 시스템 수준 결정/최적화가 있습니다. 이러한 요구 사항 중 일부에는 소프트웨어 작업과 하드웨어 가속기 간의 올바른 균형 찾기, 파이프라인과 병렬 실행 비교, 원하는 데이터 세분성 달성, 통신 메커니즘 평가 등이 포함됩니다.
이러한 복잡한 시스템을 구축하기 위해 소프트웨어 개발자는 하드웨어와 소프트웨어의 공동 지원을 제공하는 설계 흐름이 필요합니다. 이러한 흐름은 소프트웨어 개발자 흐름과 같은 사용 및 소프트웨어 개발자의 채택을 보증할 만큼 단순해야 합니다. 또한 흐름은 필요한 성능 목표를 달성하는 데 사용할 수 있는 최적화 선택에 대한 통찰력 있는 피드백을 제공해야 합니다. 일부 회사는 최근 하드웨어 설계 흐름의 기술적 세부 사항을 추상화하여 소프트웨어 개발자의 작업을 용이하게 하는 방법을 마련했습니다. 이러한 회사는 ESL 모델 및 해당 응용 프로그램:전자 시스템 수준 설계 및 실제 검증에 설명된 시스템 수준 설계 접근 방식에서 영감을 받았습니다. .
시스템 수준 설계 흐름 방법론 이해 시스템 수준 디자인은 더 높은 추상화 수준 문제에 중점을 둡니다. 더 큰 그림에 집중할 필요가 있지만 실제로 개발되기 전에 다양한 수준의 추상화가 시스템의 여러 부분을 검증, 확인, 개선 및 통합하는 데 사용됩니다. 엔지니어링 커뮤니티에서 사용할 공통 언어에 동의하지 않더라도 대부분의 설계 엔지니어는 알고리즘 수준에서 시작합니다. 설계자는 C/C++/SystemC, MATLAB, Simulink 및 LabVIEW 환경에서 작성된 실행 모델을 생성하여 비기능 및 기능 시스템 사양을 검증합니다. 이러한 고급 언어는 전체 시스템의 동작을 모델링하는 데 사용됩니다.
이 논의의 목적을 위해 우리는 C/C++ 사양을 기반으로 하는 시스템 수준 설계 흐름에 초점을 맞추었습니다(그림 1). 첫 번째 블록은 세 단계로 나뉩니다. 이 단계 중 첫 번째 단계는 C/C++ 코드(함수, 루프 등) 조각이 하드웨어(FPGA)로 이동되는 것으로 간주되는 애플리케이션 프로파일링(즉, 하드웨어-소프트웨어 분할)을 나타냅니다. 다음 단계는 CPU/FPGA 플랫폼(예:ARM53/FPGA, POWER8/FPGA)의 사양과 하드웨어 플랫폼 요소(시스템 클록, 프로세서 캐시, 상호 연결 등)의 구성입니다. 다음 단계는 하드웨어와 소프트웨어(즉, 하드 및/또는 소프트 CPU) 간에 애플리케이션 작업(프로파일된 애플리케이션 기반)을 매핑하고 맨 마지막에 실행 가능한 아키텍처 생성입니다.
그림 1. CPU/FPGA의 일반적인 시스템 수준 설계 흐름 (출처:Space Codesign Systems, Inc.)
그림 1의 두 번째 블록에는 아키텍처 최적화(아키텍처 탐색 또는 성능 검증이라고도 함)가 포함됩니다. 이는 그림 2에 자세히 설명되어 있습니다.
그림 2. 아키텍처 최적화 프로세스 (출처:Space Codesign Systems, Inc.)
아키텍처 최적화 프로세스는 다음 추정치를 처리합니다.
<울>
하드웨어 추정 하드웨어 파티셔닝의 메트릭을 평가합니다(즉, FPGA에서 이동된 C/C++ 코드). 리소스, 성능(예:루프 대기 시간) 및 전력 추정으로 분류할 수 있습니다. 하드웨어 추정은 HLS(고수준 합성) 도구에 의해 구동됩니다.
소프트웨어 추정 CPU(즉, 하드 및/또는 소프트 CPU)에서 실행되는 C/C++ 파티션 코드에 대한 메트릭을 평가합니다. 이 프로세스는 하드웨어 추정 단계를 보완합니다. 성능 측정항목의 예로는 프로세서 부하, 작업 전환 및 캐시 누락이 있습니다.
데이터 전송 추정 하드웨어와 소프트웨어가 통신하는 인터페이스(즉, 메모리 매핑 및 스트리밍 인터페이스) 모델링으로 구성됩니다. 수집된 측정항목의 예로는 버스 성능(예:대기 시간 및 처리량), 대기열 및 메모리 사용량이 있습니다.
이러한 평가는 데이터베이스에 집계되고 시스템 요구 사항이 충족되는지 평가하기 위해 시스템 성능 분석이 개발자에게 제공됩니다. 요구 사항을 충족하는 아키텍처는 아키텍처 구현 프로세스로 진행됩니다. 그렇지 않으면 추가 시스템 수준 최적화 시도가 처리됩니다.
그림 1의 마지막 블록은 특정 물리적 플랫폼에서 실행될 최종 및 완전한 시스템 생성을 위해 Xilinx Vivado 또는 Intel Quartus Prime과 같은 구현 도구를 사용하여 시스템 아키텍처가 비트스트림(FPGA 구현용)으로 변환되는 아키텍처 구현과 관련이 있습니다. 이 단계는 양질의 코드를 생성해야 하며 소프트웨어 개발자에게 투명해야 합니다.
시스템 수준 최적화 아키텍처 최적화를 위한 자동화 도구의 부재는 오랫동안 FPGA 기반 컴퓨팅의 주요 약점으로 인식되어 왔습니다. 이러한 도구의 개발은 관련된 복잡성과 어려움으로 인해 어려웠습니다.
이러한 문제를 설명하기 위해 그림 3은 Zynq-7000 플랫폼에서 구현될 6가지 기능(C/C++ 코드 조각)으로 구성된 이미지 처리 애플리케이션에 대한 아키텍처 탐색 중 일반적인 시스템 수준 최적화 프로세스를 보여줍니다. 여기에서는 플랫폼에서 구현할 수 있는 8가지 잠재적 아키텍처를 나열합니다. 시장 출시 시간이 각 아키텍처의 구현을 허용하지 않기 때문에 구현하기에 가장 적합한 아키텍처를 신속하게 결정해야 합니다. 이러한 일련의 최적화는 숙련된 하드웨어 설계자에게도 어려울 수 있습니다.
그림 3. 파란색으로 표시된 시스템 수준 결정을 통한 아키텍처 탐색 (출처:Space Codesign Systems, Inc.)
SDSoC/SDAccel(Xilinx), Merlin Compiler(Falcon Computing Solutions) 및 SpaceStudio(Space Codesign Systems)와 같은 FPGA 소프트웨어 개발 도구는 시스템 수준 최적화를 달성하면서 FPGA/CPU 시스템 설계에서 소프트웨어 개발자를 지원하는 상용 솔루션입니다. 이러한 도구는 그림 1과 2에 설명된 것과 유사한 흐름을 채택하고 있으며, 이를 통해 서로 다른 접근 방식을 사용하는 차세대 시스템 수준 도구의 존재를 보여줍니다.
SDSoC는 2단계 접근 방식으로 시스템 성능을 추정합니다. 처음에 SDSoC는 하드웨어 기능(HLS 도구에서) 및 대상 물리적 플랫폼 및 해당 통신 인터페이스의 내부 특성화(즉, 데이터 전송)에 대한 대기 시간을 추정합니다. 나중에 이 추정치를 실제 플랫폼에서 실행되는 소프트웨어 전용 버전의 애플리케이션과 비교합니다.
Merlin Compiler는 소스 간 변환을 제안합니다. 소스-소스 변환의 목표는 소프트웨어/알고리즘 개발과 기존 HLS 설계 흐름 간의 설계 추상화 격차를 줄이거나 없애는 것입니다. Merlin 컴파일러는 4개의 pragma를 사용하여 특정 FPGA 디자인을 추론합니다. 명시적 pragma에 의해 트리거되는 네 가지 주요 최적화 외에도 Merlin 컴파일러에는 파이프라인 및 병렬화의 결과를 개선하는 데 도움이 되도록 pragma와 함께 수행되는 다양한 암시적 최적화(즉, 컴파일러의 변환 패스)가 포함되어 있습니다.
SpaceStudio는 각 아키텍처 후보(매핑)에 대해 실행 가능한 가상 플랫폼(VP)을 원활하게 생성합니다. 일반적인 VP는 다양한 버스 모델, 메모리 컨트롤러 및 기타 데이터 주변 장치 모델에 연결된 프로세서 코어 시뮬레이터로 구성됩니다. 특히 애플리케이션에 맞게 조정된 공동 시뮬레이션 환경에서 데이터 전송과 함께 대상 플랫폼을 모델링합니다. 이는 실행 가능한 VP가 애플리케이션의 보다 정확한 성능 예측 및 알고리즘 검증을 가능하게 함을 의미합니다. 또한 하드웨어 기능과 소프트웨어 작업 모두의 비간섭 성능 프로파일링을 위한 모니터링 및 분석 기능을 통합합니다. VP는 하드웨어 추정기를 위해 HLS 도구에 의존하는 반면 하드웨어 매핑 기능의 지연(예:대기 시간)은 시뮬레이션 프로세스의 정확도를 높이기 위해 자동으로 주석이 달립니다. 소프트웨어 개발자는 VP를 검사하여 최적화 작업이 구현되는 방식을 이해할 수 있습니다. 이러한 피드백은 소프트웨어 개발자가 특정 적용 최적화를 위해 의도한 설계를 달성하는 데 도움이 됩니다.
상업 생태계를 보는 한 가지 방법 그림 4는 CPU 및 FPGA의 플랫폼 기반 설계의 전 세계를 끌어들이는 상용 에코시스템의 관점을 제안합니다. 첫 번째(상단) 상자는 알고리즘 수준에서 주요 설계 항목을 나타냅니다. 두 번째 상자는 알고리즘 합성(즉, 알고리즘에서 구현까지)을 지원하는 환경을 포함합니다. 굵게 표시된 도구는 C/C++ 설계 항목을 지원하고 시스템 수준 최적화를 수행합니다. 세 번째 상자는 아키텍처 구현을 달성하는 데 사용되는 도구, 주로 저수준 합성 및 비트스트림 생성을 수행하는 FPGA 공급업체의 도구를 나타냅니다. 그림 하단에는 CPU/FPGA 플랫폼의 예가 나와 있습니다.
그림 4. CPU/FPGA 플랫폼의 상용 에코시스템 (출처:Space Codesign Systems, Inc.)
또한 표 1에는 CPU/FPGA 플랫폼 설계에 사용되는 주요 상용 도구가 나열되어 있습니다.
표 1. 상용 자동화 도구(*참고:이 검토에서 제안된 목록)
결론 궁극적인 목표는 CPU와 FPGA 플랫폼의 개발을 소프트웨어 개발자 커뮤니티와 같은 더 많은 사용자에게 민주화하는 것입니다. 프로그래밍 언어의 비유를 보면 IT 산업에서 프로그래밍 언어가 Python 또는 더 최근에는 Swift와 같은 친숙한 언어로 진화하는 데 50년 이상이 걸렸습니다. FPGA 프로그래밍 산업에서도 유사한 진화 과정이 일어나고 있습니다. HLS 도구의 수용은 시스템 설계자가 승인하는 데 약간의 시간이 걸렸습니다. 오늘날 소프트웨어 개발자를 위한 시스템 수준 솔루션의 출현으로 우리는 새로운 단계에 들어서고 있습니다. SpaceStudio, SDSoC 및 Merlin Compiler와 같은 상용 도구는 이러한 승인 프로세스의 증거입니다. 그러나 CPU와 FPGA 플랫폼을 대상으로 하는 컴파일러에서 완전히 자동화되고 최적화된 프로세스를 갖기 위해서는 아직 해야 할 일이 많이 남아 있습니다.
Guy Bois, Ing., PhD Space Codesign Systems의 창립자이자 Polytechnique Montréal의 소프트웨어 및 컴퓨터 공학과 교수입니다. Guy는 STMicroelectronics, Grass Valley, PMC Sierra, Design Workshops Technologies 및 Cadabra Systems와 같은 업계 리더와 협력하여 많은 R&D 프로젝트에 참여했습니다. 하드웨어/소프트웨어 코드 설계 분야에서 Guy의 연구 전문성은 솔루션의 상용화와 Space Codesign Systems Inc.의 SpaceStudio 시작으로 이어졌습니다.