BittWare
온디맨드 웨비나

비트웨어 및 인텔 로고
oneAPI 로고 및 PCIe 카드

인텔® oneAPI™를 사용하여 FPGA를 통한 고성능 컴퓨팅 가속화 달성

비트웨어와 인텔과 함께 FPGA에 중점을 둔 oneAPI™를 살펴봅니다. 비트웨어의 520N-MX 카드에 HBM2 메모리를 포함한 인텔® 스트라틱스® 10 MX를 활용한 실제 2D FFT 가속 사례를 살펴볼 것입니다.

학습 내용

  • oneAPI™가 어떻게 통합 프로그래밍 모델과 더 쉬운 소프트웨어형 FPGA 개발을 제공하는지 알아보세요.
  • BittWare의 2D FFT 백서에 사용된 실제 코드 (코드 다운로드 가능 )와 개발에 도움이 되는 Vtune™ 같은 툴에 대해 살펴보세요.
  • 비트웨어의 IA-840F와 같은 차세대 인텔 애자일렉스™ 기반 카드에 대해 알아보세요.
  • 오리지널 라이브 이벤트의 Q&A를 들어보세요.
비디오 대본

(Marcus)

FPGA를 사용한 고성능 컴퓨팅 가속에 중점을 둔 인텔의 oneAPI를 다루는 웨비나에 참여해 주셔서 감사합니다. 발표자와 발표 내용을 간단히 소개하는 것으로 시작하겠습니다.

먼저 비트웨어의 크레이그 페트리입니다. 그는 Nallatech에서 FPGA 엔지니어로 커리어를 시작했으며 현재 BittWare의 마케팅 부사장으로 재직하고 있습니다. 그는 FPGA가 HPC에 어떻게 적용되는지, 그리고 일부 BittWare 카드와 oneAPI에 대한 지원을 설명할 것입니다.      

다음으로 인텔의 David Clarke의 이야기를 들어보겠습니다. 기술 영업 전문가인 그는 인텔의 에코시스템, 소프트웨어 및 플랫폼에 대한 개요를 통해 특히 소프트웨어 중심의 개발 흐름을 보다 쉽게 도입함으로써 FPGA의 성능을 더 잘 활용할 수 있는 방법에 대해 설명합니다.

그런 다음 마우리치오 파올리니가 인텔이 oneAPI를 도입하는 이유를 설명합니다. 그는 Altera에서 20년 이상 근무한 현장 애플리케이션 엔지니어로, 인텔이 Altera를 인수한 후 클라우드 및 엔터프라이즈 가속화에 집중하기 위해 자리를 옮겼습니다. 그는 oneAPI가 여러 아키텍처에서 가속화를 위한 개발을 보다 쉽게 지원함으로써 프로그래밍 문제를 해결하는 방법을 설명할 예정입니다.         

마지막으로 BittWare의 수석 시스템 엔지니어인 Richard Chamberlain의 이야기를 들어보겠습니다. Richard는 BittWare의 FPGA 카드를 위해 OpenCL로 원래 2D FFT 데모를 만들었으며, 현재 oneAPI로 포팅하여 그 결과에 대한 자세한 내용을 공유할 예정입니다.

2D FFT 코드는 요청 시 BittWare 웹사이트의 리소스 섹션에서 다운로드할 수 있습니다.

이제 라이브 슬롯 중 하나에서 이 방송을 시청하고 계신다면 메인 프레젠테이션이 끝난 후 패널들과 함께하는 Q&A 세션에 참여하실 준비를 하셔야 합니다. 지금 질문하시거나 Q&A 중에 질문 패널을 찾아 질문을 입력하시면 약 30분 후 질의응답 세션에서 패널에게 질문이 전달될 것입니다.

크레이그 페트리의 HPC 개요부터 시작하겠습니다.

(크레이그)

네, 감사합니다.

비트웨어에 대해 잘 모르시는 분들을 위해 설명하자면, 비트웨어는 사실 몰렉스가 인수한 두 개의 회사에서 만든 제품입니다.

첫 번째는 2016년 미국 캘리포니아에 본사를 둔 날라테크 그룹이었습니다. 두 번째는 2018년 뉴햄프셔주 콩코드에 본사를 둔 BittWare였습니다. 두 회사는 2018년에 합병되어 Molex의 자회사인 BittWare로 브랜드가 변경되었습니다.

다양한 시장에서 30년간 축적한 FPGA 전문 지식을 바탕으로 다양한 제품을 개발했습니다. 당사는 인텔 파트너 얼라이언스 프로그램의 일원으로 지난 20년간 모든 세대의 알테라 및 인텔 FPGA를 탑재한 하이엔드 FPGA 가속기를 개발해 왔습니다.

강조할 만한 또 다른 독특한 판매 포인트는 자체 제조 및 글로벌 물류를 갖춘 대규모 Molex 그룹에 속해 있다는 사실입니다.

구체적으로, 우리는 데이터 통신 및 특수 솔루션 그룹 또는 DSS의 한 부서입니다.

이를 통해 당사의 FPGA 전문 지식과 첨단 제품을 Molex 글로벌 브랜드의 규모 및 범위와 결합할 수 있습니다.

따라서 비트웨어는 엔터프라이즈급 인증, 검증, 수명 주기 및 지원 요구 사항을 충족할 수 있는 유일한 FPGA 카드 및 시스템 제품 공급업체입니다.

BittWare는 많은 인텔 FPGA 디바이스를 지원합니다. 하지만 이 기술 워크샵에서는 두 가지 주력 BittWare 제품에 초점을 맞출 예정입니다.

첫 번째는 인텔의 Stratix 10 GX, NX 및 MX를 지원하는 520 시리즈입니다.

16GB의 온패키지 HBM2 메모리가 탑재된 MX 버전은 오늘 데모에서 다루게 될 카드이며, oneAPI를 사용합니다.

새로운 보드 지원 패키지를 통해 OpenCL을 기본적으로 지원하며, 16레인의 PCI Express Gen 3, 16기가바이트의 HBM2 메모리, I/O 파이프까지 지원하므로 QSFP28 네트워크 포트를 통해 낮은 지연 시간, 높은 대역폭, 결정론적 카드 간 직렬 연결을 사용하여 애플리케이션을 확장할 수 있습니다.

비트웨어의 OpenCL 프로그래밍 가능 가속기 520 시리즈가 퍼블릭 도메인의 슈퍼컴퓨터 두 대에 성공적으로 배포되었습니다.

자세한 내용은 다음 글과 동영상을 참조하세요.

두 번째로 타겟팅할 제품은 인텔 애자일렉스 FPGA를 탑재한 새로운 플래그십 가속기입니다.

비트웨어 IA-840f는 현재 인텔에서 제공하는 Agilex FPGA 중 가장 큰 크기를 자랑합니다. 첫 유닛은 7월에 출하될 예정입니다.

초기 도구 흐름은 VHHL과 Verilog를 기반으로 합니다. 하지만 올해 말에는 oneAPI에 대한 지원도 도입할 예정입니다.

IA-840f는 520N 시리즈와 동일한 엔터프라이즈급 DNA를 공유합니다. 그러나 Agilex P-Tile 하드 IP를 통한 PCIe Gen 4 x16 레인 지원을 포함하여 모든 주요 인터페이스가 개선되었습니다. IA-840f는 액티브, 패시브, 심지어 액체 냉각 옵션까지 갖춘 GPU 크기의 PCIe 카드입니다. GPU가 탑재된 거의 모든 서버 및 엣지 플랫폼과 호환됩니다.

비트웨어의 FPGA 가속 제품은 데이터 센터, 클라우드 인프라, 에지 오브 네트워크 공간을 아우르는 컴퓨팅, 네트워크, 스토리지, 센서 처리의 네 가지 주요 애플리케이션 영역을 처리하도록 설계되었습니다.

이러한 애플리케이션 영역의 워크로드에 대한 FPGA 가치 제안은 매년 강력해지고 있으며, 현재 많은 고객이 성능을 강화하는 동시에 총 소유 비용을 절감하기 위해 AI 및 머신 러닝 추론 기술을 채택하고 있습니다.

지금부터 소개할 내용은 BittWare의 인텔 기반 FPGA 가속기에서 가속화할 수 있는 컴퓨팅 집약적인 워크로드에 대해 설명하고자 합니다.

특히 OpenCL과 같은 높은 수준의 도구를 사용하는 경우, 이 경우에는 oneAPI를 사용합니다.

이를 위해 각 주요 애플리케이션 영역에 대한 전용 랜딩 페이지가 있는 BittWare 웹사이트를 활용합니다.

각 페이지에는 고객 사례 연구, 백서, 참조 설계, 동영상 등 다양한 정보가 포함되어 있습니다.

그럼 먼저 컴퓨팅 랜딩 페이지로 이동해 보겠습니다. 여기를 클릭하겠습니다.

따라서 경험상 고성능 컴퓨팅 워크로드를 가속화하기 위해 FPGA를 사용하는 고객은 거의 항상 이기종 플랫폼을 구축하고 있습니다. 이기종 플랫폼은 상호 보완적인 여러 기술이 함께 작동하는 플랫폼입니다. 예를 들어 x86(CPU 기반), GPGPU, SmartNIC 등이 있습니다.

FPGA는 전반적인 애플리케이션 성능에 기여할 뿐만 아니라 워크로드 유연성과 에너지 효율적인 운영도 제공합니다.

FPGA 기술에 익숙하지 않거나 소프트웨어 중심적인 배경을 가진 사람이라면 애플리케이션이 FPGA 가속화의 이점을 누릴 수 있는지 여부를 판단하는 것이 상당히 어려울 수 있습니다.

이 랜딩 페이지에서는 고객이 이러한 결정을 내릴 수 있도록 몇 가지 지침을 제공하려고 노력했습니다.

여기에는 많은 콘텐츠가 있습니다.

따라서 웨비나가 끝난 후 기회가 된다면 시간을 내서 랜딩 페이지와 콘텐츠를 자세히 살펴보는 것이 좋습니다.

따라서 애플리케이션을 뚜렷한 특성으로 요약할 수 있는 고객이라면 애플리케이션에 FPGA를 사용해야 하는지 여부를 빠르게 결정할 수 있습니다.

FPGA가 잘 어울리는 5가지 애플리케이션 속성으로 압축해 보았습니다.

따라서 이러한 특성 중 하나 또는 여러 가지에 해당되는 항목에 체크 표시를 할 수 있다면 FPGA를 더 자세히 살펴봐야 합니다.

첫 번째 특징은 애플리케이션이 본질적으로 매우 병렬적인 경우입니다. 즉, 여러 계산을 동시에 수행할 수 있는 경우입니다.

디바이스의 세분성과 병렬 특성을 고려할 때 FPGA는 여기에 적합합니다.

두 번째는 메모리 액세스 패턴이 캐시 친화적이지 않은 경우입니다. 마이크로프로세서나 GPGPU를 사용하는 경우 고정된 메모리 계층구조를 갖게 됩니다. 반면 FPGA는 고객이 완전히 맞춤형 메모리 계층 구조를 구성할 수 있습니다. 따라서 애플리케이션에 비표준이 필요한 경우 더 나은 옵션입니다.

세 번째 속성은 CPU나 GPGPU에서 기본적으로 지원되지 않는 데이터 유형을 사용하는 경우입니다.

따라서 고객이 배정밀도 부동 소수점을 프로그래밍하는 애플리케이션을 사용하는 경우, 이러한 종류의 문제를 해결하기 위해 GPGPU를 사용하는 것이 좋습니다.

반면에 비트 수준, 패턴 매칭, 비정상적인 정수 계산 또는 초월적인 단정밀도 부동 소수점 등 낮은 수준의 연산에서 작업하는 경우 FPGA를 고려할 수 있습니다.

네 번째는 조금 더 분명합니다. 애플리케이션에 짧은 지연 시간 또는 결정론적 작동이 필요한 경우 FPGA가 이러한 상황에서 이상적인 후보입니다.

여기에 나열한 다섯 번째 사용 사례는 고객이 어떤 종류의 외부 I/O에 대한 인터페이스가 필요한 경우입니다. 이는 다양한 형태와 크기로 나타날 수 있습니다. 여기에는 프로토콜이나 이더넷 또는 NVMe와 같은 업계 표준이 포함될 수 있습니다.

FPGA는 맞춤형 또는 독점 인터페이스와도 통신할 수 있습니다. 이러한 상황에서는 대부분의 FPGA 핀이 프로토콜에 구애받지 않으므로 FPGA I/O를 고도로 맞춤화할 수 있습니다. 따라서 FPGA는 이러한 상황에서 매우 좋은 후보입니다.

좋아요. 개요를 마치면 이제 David와 Maurizio에게 인텔과 oneAPI 도구에 대한 소개를 부탁드리겠습니다. 데이비드입니다.

 (David)

크레이그 감사합니다. 안녕하세요, 저는 David Clarke입니다. 저는 인텔의 기술 영업 전문가로서 클라우드 및 엔터프라이즈에 FPGA 가속화를 추진하는 업무를 담당하고 있습니다.

인텔은 금융 서비스 산업, 인공 지능, 머신 러닝, 과학 연구, 고성능 컴퓨팅 등 엣지부터 데이터센터에 이르기까지 다양한 시장에서 컴퓨팅 및 데이터 처리 분야에서 오랜 역사를 가지고 있습니다.

전통적으로 CPU의 명가로 알려진 인텔은 FPGA 기술을 활용하기 위해 알테라를 인수했습니다.

앞서 언급했듯이 고성능 컴퓨팅은 CPU뿐만 아니라 딥 파이프라인 컴퓨팅, 실시간 인라인 저지연 결정론적 처리, 고도로 병렬화된 수학 함수의 가속화와 와트당 성능(TCO) 이점 등 FPGA의 고유한 이점을 쉽게 활용할 수 있는 시장입니다.

그러나 새로운 기술을 시장에 도입하는 것은 어려운 일이며 다음 세 가지 기준 중 하나에 따라 달라집니다:

  • 새로운 기술은 오늘날의 표준 기술로는 해결할 수 없는 특정 문제에 대한 유일한 해결책입니다.
  • 그 혜택이 너무 커서 투자, 채용, 리소스 재교육이 용인됩니다.
  • 작은 점진적 혜택은 달성하기가 매우 쉬울 때 매력적입니다.

지금까지 FPGA는 RTL 전문 언어 또는 전문 리소스를 사용한 개발 흐름이 필요했기 때문에 특정 애플리케이션과 시장에서만 접근할 수 있는 기술이었습니다.

궁극적인 목표는 항상 FPGA 자체에 대한 지식이 없어도 개발 흐름을 통해 클라우드와 엔터프라이즈에서 FPGA의 이점을 활용할 수 있도록 하는 것이었습니다. 이미 사내에 있는 리소스를 투자나 재교육 없이 FPGA를 대상으로 할 수 있는 흐름입니다. 기본적으로 소프트웨어 엔지니어가 하드웨어를 설계할 수 있도록 지원하여 개발자, 파트너, 시스템 통합자 및 비 전통적인 FPGA 시장과 애플리케이션을 아우르는 고객이 FPGA를 사용할 수 있는 기술로 만들 수 있습니다.

인텔과 비트웨어와 같은 파트너 에코시스템은 다양한 시장 지원 플랫폼을 제공하며, 인텔 oneAPI의 등장과 함께 비 FPGA 사용자들이 FPGA의 고유한 기능을 활용하여 컴퓨팅 과제를 해결하고 획기적인 가속화를 제공할 수 있는 방법론을 제공하고, 마침내 하드웨어가 아닌 개발 리소스에서도 채택할 수 있는 플로우를 사용할 수 있도록 합니다.

이제 인텔의 가속 전문 엔지니어 중 한 명인 마우리치오가 oneAPI에 대해 자세히 설명해 드리겠습니다. 감사합니다.

(마우리치오)

감사합니다. 인텔이 oneAPI를 도입하는 이유는 무엇인가요?

오늘날의 HPC 환경에서는 워크로드 실행을 위해 여러 가지 하드웨어 아키텍처를 사용할 수 있습니다: CPU, GPU, FPGA 및 특수 가속기 등이 있습니다. 아키텍처의 다양성은 워크로드의 다양성에서 비롯됩니다. 모든 워크로드에 가장 적합한 단일 아키텍처는 없으므로 가능한 모든 시나리오에서 성능을 극대화하려면 여러 아키텍처를 혼합해야 합니다.

하지만 이기종 아키텍처를 사용하면 상당한 부담이 따릅니다. 우선, 각 종류의 데이터 중심 하드웨어를 서로 다른 언어와 도구를 사용하여 프로그래밍해야 합니다. 즉, 플랫폼마다 별도의 코드 베이스를 유지 관리해야 하며, 플랫폼 간에 코드를 재사용하는 것이 불가능해집니다. 게다가 각 플랫폼에는 코드 컴파일, 분석 및 디버깅을 위한 자체 도구 세트가 함께 제공됩니다.

즉, 각 플랫폼에 맞는 소프트웨어를 개발하려면 별도의 투자가 필요하며, 해당 작업을 다른 아키텍처에 맞게 재사용할 수 있는 기능이 거의 또는 전혀 없습니다.

oneAPI는 이 문제를 해결하기 위해 설계되었습니다. 다양한 아키텍처에서 개발을 간소화하는 통합 프로그래밍 모델을 제공합니다.

oneAPI 프로그래밍 모델을 사용하면 개발자는 동일한 언어와 라이브러리로 다양한 하드웨어 플랫폼을 타겟팅할 수 있으며, 동일한 디버그 및 성능 분석 도구 세트를 사용하여 다양한 플랫폼에서 코드를 개발하고 최적화할 수 있습니다. 예를 들어, Vtune 프로파일러를 통해 호스트와 가속기 전반에서 런타임 데이터를 얻을 수 있습니다.

여러 플랫폼과 하드웨어 아키텍처에서 동일한 언어를 사용하면 소스 코드를 더 쉽게 재사용할 수 있습니다. 코드를 다른 플랫폼으로 옮길 때 플랫폼별 최적화가 여전히 필요한 경우에도 더 이상 코드 번역이 필요하지 않습니다. 또한 공통 언어와 도구 세트를 사용하면 신규 개발자를 더 빠르게 교육하고 디버그를 더 빠르게 수행할 수 있으며, 결국 생산성이 향상됩니다.

oneAPI 언어는 데이터 병렬 C++입니다. 이는 병렬 프로그래밍 생산성을 위해 설계된 고급 언어이며, 광범위한 호환성을 위해 C++ 언어를 기반으로 합니다.

DPC++는 독점 언어가 아닙니다. 개방형 업계 간 이니셔티브에 의해 개발이 추진되고 있습니다. 그 출발점은 업계 컨소시엄인 크로노스 그룹에서 개발 중인 SYCL입니다;

언어 개선은 인텔이 확장 프로그램을 통해 언어의 격차를 해소하는 데 적극적으로 기여하는 커뮤니티 프로젝트에 의해 주도되고 있습니다.

인텔 oneAPI 제품에는 LLVM 컴파일러 기술을 기반으로 하고 인텔의 다년간의 컴파일러 개발 경험을 활용한 DPC++ 컴파일러가 포함되어 있습니다.

또한 소스 코드와 소스 코드 간 호환성 툴이 포함되어 있어 CUDA를 DPC++로 변환하는 데 도움이 됩니다.

이제 FPGA용 코드를 컴파일할 때 가장 큰 문제 중 하나는 컴파일 시간입니다. DPC++ 코드를 해당 코드가 지정한 하드웨어 아키텍처를 구현하는 타이밍 폐쇄형 FPGA 설계로 변환하는 데 필요한 백엔드 컴파일 프로세스는 완료하는 데 몇 시간이 걸릴 수 있습니다. 따라서 전체 컴파일 실행을 최소화하도록 FPGA 개발 흐름이 조정되었습니다.

이 슬라이드는 FPGA 개발 흐름을 보여줍니다. 

흐름의 첫 번째 단계는 테스트 벤치를 사용하여 코드의 정확성을 검사하는 기능 검증입니다. 이는 개발 플랫폼에서 에뮬레이션을 사용하여 이루어지며, 여기서 FPGA를 대상으로 하는 코드가 CPU에서 컴파일되고 실행됩니다. 따라서 버그를 발견하고 수정해야 할 때 훨씬 더 빠른 처리 시간을 확보할 수 있습니다. 이를 위해 표준 CPU 디버거(예: GDB용 인텔 배포)를 사용할 수 있습니다.

기능 검증이 완료되면 컴파일러에서 생성된 보고서를 통해 정적 성능 분석이 수행됩니다. 보고서에는 설계의 메모리, 데이터 흐름 및 기타 성능 병목 현상을 식별하는 데 필요한 모든 정보와 병목 현상을 해결하기 위한 최적화 기법에 대한 제안이 포함됩니다. 또한 대상 FPGA에 대한 설계의 면적 및 타이밍 추정치도 제공합니다.

정적 분석 결과가 만족스러운 경우에만 전체 컴파일을 수행할 수 있습니다. 컴파일러는 생성된 하드웨어에 요청 시 프로파일링 로직을 삽입할 수 있습니다. 프로파일링 로직은 메모리 및 파이프 액세스에 대한 동적 프로파일링 데이터를 생성하여 나중에 다른 방법으로는 발견할 수 없는 데이터 패턴 의존적 병목 현상을 식별하기 위해 Vtune 성능 분석기에서 사용할 수 있습니다.

FPGA에서 oneAPI로 작업을 시작하려면 세 가지 구성 요소가 필요합니다:

  • 인텔 oneAPI 기본 툴킷
  • oneAPI 기본 툴킷을 위한 인텔 FPGA 애드온
  • 그리고 사용 중인 카드에 대한 보드 지원 패키지(또는 BSP)

oneAPI 구성 요소는 인텔 사이트에서 다운로드할 수 있으며, BSP는 카드 공급업체에서 제공합니다.

FPGA의 oneAPI에 대해 자세히 알아보고자 하는 분들을 위해 다양한 리소스를 제공합니다. 우선, 인텔 oneAPI 프로그래밍 가이드와 인텔 oneAPI DPC++ FPGA 최적화 가이드가 포함된 인텔 웹 사이트에서 인텔 oneAPI DPC++ 사양을 확인할 수 있습니다.

그런 다음 Github 사이트에서 언어의 여러 기능을 다루는 다양한 튜토리얼을 다운로드할 수 있으며, oneAPI 툴체인에서 사용할 수 있는 코드 스니펫과 함께 제공됩니다.

또한 금융, 데이터베이스 가속, 압축 등과 같은 여러 중점 분야를 위한 고성능의 본격적인 레퍼런스 디자인도 제공합니다.

마지막으로 인텔에서 제공하는 교육입니다. 이 교육은 강사 주도의 종일 및 반나절 교육으로, 여러 GEO에 걸쳐 일정이 잡혀 있습니다.

인텔은 또한 관심 있는 사람들이 자신의 속도에 맞춰 학습하고 통제된 환경에서 코드를 가지고 놀 수 있도록 인텔 개발자 클라우드의 Jupyter 랩에 연결할 수 있는 Jupyter 노트북 모듈을 제공합니다.

마지막으로 스프링거 웹사이트에서 PDF 형식으로 무료로 다운로드하거나 페이퍼백으로 구매할 수 있는 책이 있습니다.

이제 리처드에게 넘어가겠습니다.

(Richard)

이 FFT 2D 사례 연구는 BittWare 520N-MX 가속기 카드를 대상으로 합니다. 520N-MX는 HBM2 메모리가 통합된 인텔의 Stratix 10 MX FPGA가 탑재된 PCIe 보드입니다. HBM2의 높은 대역폭을 통해 메모리 바운드 애플리케이션을 가속화할 수 있습니다. 이 프레젠테이션에서는 온칩 HBM 메모리와 oneAPI 도구 흐름을 사용하여 2D FFT의 성능을 극대화하는 방법을 설명합니다.

이 사용 사례에서는 메모리에 제한이 있는 문제이므로 2D FFT가 선택되었습니다. 특히 큰 2D FFT는 로컬 FPGA 메모리에 넣기에는 너무 커서 계산이 HBM 대역폭에 의존할 수밖에 없었습니다.

이 프레젠테이션에서는 HBM 메모리 액세스 패턴을 최대한 효율적으로 최적화하는 방법을 설명합니다.

Stratix 10 MX에는 각각 2개의 의사 포트가 있는 16개의 HBM 메모리가 있으며, 모두 독립적으로 주소 지정이 가능합니다. 장치 상단에는 16개의 메모리 뱅크가 있고 하단에는 16개의 메모리가 있습니다. 각 포트의 최대 대역폭은 12.8GB/s이며, 여기에 사용된 속도 등급 -2 디바이스의 총 이론적 성능은 409GB/s입니다.

2D FFT는 이미지의 행에 일련의 1D FFT를 사용한 다음 이미지의 열에 1D FFT를 사용하여 계산할 수 있습니다.

변환을 생성하려면 원본 이미지에 대해 두 번의 패스가 필요합니다. 모든 SDRAM 메모리는 메모리 액세스가 연속적이지 않으면 성능이 저하됩니다. 행 주소 지정에서 열 주소 지정으로 이동하는 경우(코너 턴이라고도 함)에는 SDRAM 메모리에서 행을 점프해야 하므로 전체 성능이 저하됩니다.

코너 회전이 성능에 미치는 영향을 측정하기 위해 간단한 테스트 애플리케이션을 만들었습니다.

이 그래프는 이 2D FFT 예제에서 관찰된 데이터 액세스 패턴에 대한 버스트 크기가 평균 읽기/쓰기 대역폭에 미치는 영향을 보여줍니다. 그래프는 단일 HBM 의사 채널의 성능을 나타냅니다.

고려할 수 있는 두 가지 메모리 구성이 있으며, 각각 고유한 장점이 있습니다. 동일한 HBM에 대한 읽기 및 쓰기를 사용하면 하나의 FFT를 일괄적으로 구현할 수 있지만 전체 성능에서 약간의 비용이 발생합니다. 파란색 선이 이를 나타냅니다.

또는 빨간색 선으로 표시된 별도의 입력 및 출력 HBM 뱅크를 사용하면 대역폭이 크게 향상되지만 사용 가능한 대역폭을 완전히 활용하려면 여러 2D FFT를 배치 또는 파이프라인으로 연결해야 합니다.

이 예제에서는 512바이트의 버스트 크기를 선택했는데, 이는 중간 결과 캐싱을 위해 로컬 FPGA 메모리를 덜 필요로 하면서도 거의 최적의 성능을 제공하기 때문입니다.

2D FFT 예제는 원래 인텔 FPGA OpenCL 컴파일러를 사용하여 프로그래밍되었으며, 이 데모를 위해 oneAPI로 포팅되었습니다. 커널 코드는 두 소프트웨어 흐름 간에 크게 변경되지 않았으며 최적화 프래그마에 대한 기본적인 변경만 필요했습니다. 파이프라이닝 및 병렬화 기술은 동일하게 유지되었습니다.

DPC++는 SYCL을 기반으로 구축되었으며, 호스트와 커널 바이너리에 대해 두 개의 별개의 흐름을 사용하는 대신 SYCL 구문을 사용하여 호스트 코드와 커널 코드를 분리합니다. 호스트 코드와 커널 코드를 서로 다른 컴파일러로 컴파일하는 대신 단일 컴파일이 수행됩니다.

OpenCL의 또 다른 변경 사항은 FAT 바이너리를 생성하는 것으로, 이제 FPGA 이미지가 실행 파일에 포함됩니다.

다음 섹션에서는 이 애플리케이션 포트에서 사용되는 DPC++ 및 SYCL 구조에 대해 간략하게 설명합니다.

애플리케이션에 특정 가속기 유형에 대한 핸들을 부여하는 셀렉터를 통해 FPGA, CPU, GPU 등의 장치에 액세스할 수 있습니다. 그런 다음 이 핸들은 SYCL이 대상 장치와의 통신에 사용하는 대기열을 생성하는 데 사용됩니다.

이 코드 예시는 FPGA 하드웨어 또는 디바이스의 에뮬레이션을 타겟팅하는 방법을 설명합니다. FPGA 컴파일에는 많은 시간이 소요될 수 있으므로 에뮬레이션이 중요합니다.

DPC++는 SYCL 버퍼와 접근자를 사용하여 호스트 및 커널 애플리케이션 모두에서 액세스할 수 있는 메모리를 설명합니다. 이 예제 코드는 배열에서 버퍼 유형으로 데이터를 복사한 다음 SYCL 접근자 유형을 사용하여 액세스합니다.

버퍼의 위치는 접근자 프로퍼티를 통해 제공됩니다. 여기서는 버퍼 위치 속성을 사용하여 32개 중 HBM 메모리 0을 가리키고 있습니다. 속성 ID는 디바이스의 보드 지원 패키지에 각 메모리 뱅크가 표시되는 순서를 나타냅니다.

큐는 호스트 프로그램을 단일 장치에 연결합니다. 생성된 핸들을 사용하여 SYCL 작업(이 경우 단일 작업 커널)을 대기열에 제출할 수 있습니다. 또한 인터페이스별 속성을 추가할 수 있는 곳이기도 합니다.

이 설계에서는 각 HBM 인터페이스 전용 1D FFT를 사용하여 입력 데이터를 여러 HBM 메모리에 걸쳐 스트라이핑합니다. 이를 통해 FPGA 컴퓨팅과 메모리 대역폭 간의 균형이 잘 맞습니다. 각 FFT는 최대 처리량이 초당 약 40GFlops인 완전 파이프라인으로 설계되었습니다.

1D FFT의 출력은 로컬 버퍼에 배치됩니다. 여기에는 충분한 데이터 행이 저장되므로 처리량을 유지할 수 있을 만큼 충분히 큰 버스트를 HBM에 생성할 수 있습니다. 이 단순화된 애니메이션은 실제로 이 설계에서 코너 회전이 어떻게 이루어지는지 보여줍니다. 로컬 온칩 메모리에 임시로 저장된 8줄의 데이터를 사용하여 HBM에 다시 쓸 때 8단어 버스트를 구현하는 방법을 보여줍니다. 실제로는 16개의 FFT가 병렬로 수행되고 64행의 결과가 버퍼링됩니다.

두 번째 단계에서는 여러 1D FFT의 출력을 변환해야 합니다. 이 작업은 전체 이미지에서 수행하는 것이 아니라 메인 파이프라인의 일부로 수행됩니다. 각 FFT의 출력은 다른 모든 HBM 뱅크에 기록되어야 합니다. 이렇게 하면 각 출력 버퍼에서 모든 HBM 메모리로 여러 번 액세스해야 하므로 파이프라인에 버블이 발생하여 성능이 저하됩니다. 액세스가 선형적이므로 FPGA의 풍부한 레지스터를 활용하여 전용 시프트 레지스터를 만들 수 있습니다.

코드 예시에서는 FPGA 레지스터만 사용하여 완전한 파이프라인 슬라이딩 창을 생성하는 방법을 설명합니다. 각 열 출력은 지연되어 매 클록 사이클마다 한 번씩만 각 HBM에 대한 업데이트를 생성합니다. 마지막으로 전체 프로세스가 다시 반복되어 최종 이미지가 원본 이미지와 동일한 방향으로 여러 HBM에 걸쳐 스트라이프 처리됩니다.

코드를 DPC++로 포팅한 후 가장 먼저 해야 할 일은 코드가 기능적으로 올바른지 테스트하는 것입니다.

모든 인텔 및 비트웨어 예제는 로컬 프로세서에서 커널 코드를 실행할 수 있는 에뮬레이션용으로 빌드할 수 있습니다. 2D FFT 예제의 경우 make fpga_emu(FPGA 에뮬레이션의 경우 "EMU")를 입력하기만 하면 됩니다. 에뮬레이션 실행 파일을 실행하면 몇 초 만에 설계의 기능을 검증할 수 있습니다.

다음은 입력 및 변환된 이미지를 표시하기 위해 Python을 사용한 2D FFT의 출력 예시입니다. 설계의 기능이 검증되면 다음 작업은 파이프라인 효율성과 리소스 사용량을 확인하는 것입니다.

이 작업은 FPGA를 타겟팅하지만 초기 설계 분석이 완료되면 일시 중지하는 방식으로 수행됩니다. 보고서를 작성하려면 "make report"를 입력합니다. 완료하는 데 몇 분 정도 걸리므로 앞서 실행한 것을 보여드리겠습니다.

먼저 커널의 파이프라이닝이 성공했는지 확인합니다. 시작 간격이 1, 즉 완전히 파이프라인된 커널을 찾고 있습니다. 다음으로 필요한 리소스를 확인합니다. 모든 것이 정상으로 보이면 FPGA를 위해 컴파일할 수 있습니다. 이 작업에는 몇 시간이 걸립니다.

FPGA 바이너리가 포함된 새 실행 파일이 생성됩니다. 이 실행 파일을 실행하면 이제 FPGA에서 FFT 커널을 실행하는 데 걸리는 시간을 확인할 수 있습니다.

Vtune이 FPGA 커널을 프로파일링할 수 있도록 하려면 -XS 프로파일을 사용하여 oneAPI FPGA 실행 파일을 컴파일하면 됩니다. 이렇게 하면 Vtune이 애플리케이션을 실행한 후 통계를 검색하는 데 사용할 수 있는 성능 카운터가 FPGA 설계에 자동으로 추가됩니다.

FPGA를 프로파일링하려면 CPU/FPGA 상호 작용 옵션을 선택하여 올바른 가속기 구성을 선택합니다. FPGA 설계가 포함된 호스트 실행 파일 FAT 바이너리를 선택하고 실행 파일을 시작합니다. 그러면 설계가 실행되고 호스트와 FPGA에서 프로파일링 정보가 수집됩니다.

요약 페이지에서 애플리케이션의 전체 타이머와 FPGA 커널을 실행하는 데 걸리는 대략적인 시간을 확인할 수 있습니다.

플랫폼을 선택하면 오프로드된 FPGA 커널이 애플리케이션의 프로파일에 어떻게 들어맞는지 보여주는 이벤트 일정이 표시됩니다.

FPGA를 확대하면 FPGA 커널의 모든 내부 및 외부 메모리 인터페이스에 대한 프로파일 정보를 볼 수 있습니다. 이는 커널과 외부 메모리의 상호 작용에 관한 중요한 정보를 제공합니다. 메모리 프로파일 중 하나를 마우스로 가리키면 전역 메모리 대역폭, 스토어 수, 커널의 데이터 부족 빈도, 점유율, 커널이 해당 데이터를 처리하는 시간 비율, 유휴 시간(커널이 아무것도 하지 않는 시간 비율)에 관한 정보가 제공됩니다.

이러한 보고서를 통해 추가 주의가 필요한 메모리 액세스를 신속하게 파악할 수 있습니다.

여기에 사용된 접근 방식은 이 알고리즘에 대한 많은 유효한 구현 중 하나입니다. 그렇기 때문에 최신 FPGA 개발에는 높은 수준의 툴이 매우 중요합니다.

다양한 설계를 빠르게 실험할 수 있는 인텔의 oneAPI 설계 흐름을 통해 소프트웨어 엔지니어는 코드를 FPGA로 오프로드할 때 성능에 미치는 영향을 빠르게 측정할 수 있습니다.

(Marcus)

알겠습니다. oneAPI 데모에 감사드립니다, Richard. Marcus가 다시 Q&A를 준비합니다.

메인 프레젠테이션을 간략하게 마무리하면서 다시 한 번 말씀드리지만, 유니티는 BittWare로서 520N-MX와 같은 카드에 HBM2를 탑재한 하나의 API를 지원하게 되어 기쁘다는 점을 다시 한 번 말씀드리고 싶습니다. Richard가 방금 보여드린 2D FFT 데모에 대한 자세한 정보가 필요하신 경우, BittWare 웹사이트의 리소스 섹션에서 백서를 확인하실 수 있습니다.

백서에는 이 데모의 소스 코드를 받을 수 있는 요청 양식도 있습니다.

질문이 있으시면 이미 몇 가지 질문이 들어왔지만 지금 패널에게 질문이 있으시면 질문 아이콘이나 텍스트 패널에 질문을 입력하시면 제가 패널에게 질문을 전달하겠습니다. 따라서 질문을 입력하면 제가 패널에게 질문을 음성으로 전달하고 패널이 음성으로 답변할 것입니다.

이제 Q&A 화면으로 이동하겠습니다. 알았어요 크레이그, 내 Q&A 화면이 보이고 내 말이 들리나요?

(크레이그)

네, 할 수 있습니다.

(Marcus)

좋아요. 첫 번째 질문입니다.