하나의 API에서 FPGA 리소스의 효율적인 공유

FPGA의 리소스 공유를 해결하기 위한 버터플라이 크로스바 스위치 구축

공유 리소스 문제

FPGA 카드에는 일반적으로 많은 고성능 메모리 및 I/O 인터페이스가 있습니다.

인텔의 Stratx 10 및 Agilex 시리즈와 같은 대형 FPGA에는 다양한 I/O 인터페이스가 있습니다. 비트웨어는 QSFP, PCIe, 온카드 DDR4 및 GDDR6 메모리와 확장 포트와 같은 기능을 제공하여 이러한 기능을 활용하는 카드를 제공합니다. 또한 온패키지 HBM2가 탑재된 FPGA를 갖춘 카드도 있습니다.

특히 여러 커널 간에 리소스를 공유해야 하는 경우 이러한 모든 인터페이스에 액세스하는 것은 간단하지 않습니다. FPGA에는 기본 메모리 컨트롤러 외에 캐시나 중재 로직이 내장되어 있지 않으므로 중재는 사용자의 책임입니다.

공유 리소스 문제에 대한 당사의 솔루션:

크로스바 스위치 만들기 크로스바 스위치 크로스바 스위치 생성

인텔® oneAPI를 사용하여 버터플라이 크로스바 스위치를 구축했습니다.

  • 로우레벨 RTL 대신 하이레벨 도구인 oneAPI를 사용하면 구성하기 쉬운 구성하기 쉬운 쉽게 최적화 쉽게 최적화할 수 있습니다.
  • 우리는 520N-MX 카드를 타겟팅했습니다. 이 코드는 oneAPI를 사용하는 다른 비트웨어 카드에서도 사용할 수 있습니다.

여러 커널과 여러 인터페이스 간에 연결을 공유하는 한 가지 솔루션은 크로스바 스위치입니다. 물론 FPGA 네이티브 프로그래밍을 사용하여 만들 수도 있습니다. 그러나 oneAPI와 같은 고급 프로그래밍 언어를 사용하면 필요한 연결 수와 인터페이스 폭에 따라 최대한 효율적으로 최적화할 수 있습니다.

비트웨어 버터플라이 크로스바 스위치는 HBM2 메모리와 여러 네트워크 포트를 갖춘 520N-MX 카드에서 개발되었습니다.

 

크로스바를 사용하는 이유는 무엇인가요?

크로스바는 매트릭스로 배열된 스위치 모음입니다. 입력/출력 그룹 간에 필요한 연결이 줄어듭니다.

없이 스위치:

멀티플렉서: 모든 입력/출력이 상호 연결됩니다.

크로스바 스위치 포함

더 적은 수의 연결을 사용하여 경로 신호를 전환합니다.

FPGA에서 연결 수가 적을수록 라우팅이 쉬워지고, 클럭 주파수가 높아지며, 성능이 향상됩니다.

크로스바 스위치에는 여러 유형이 있습니다.

두 가지 예는 전체 크로스바와 버터플라이입니다:

전체 크로스바:

행렬은 입력 수에 출력 수를 곱한 값과 같습니다.

버터플라이 크로스바

행렬 크기는 N x log2(N)/2이며, 여기서 N은 입력의 개수입니다.

버터플라이를 선택한 이유는 FPGA 리소스를 덜 사용하기 때문입니다. 하지만 경우에 따라 처리량이 감소할 수 있습니다.

자세한 내용을 확인하세요:

비트웨어의 버터플라이 크로스바 스위치

  • 예: 8 입력 - 8 출력 크로스바
  • 포트 경로 0-2 및 2-3의 충돌 예시
  • 중재는 간단한 핑퐁 방식을 사용하지만, 필요한 경우 보다 정교한 방식을 쉽게 구현할 수 있습니다.
비디오 재생
이미지를 클릭하면 포트 경로 0-2 및 2-3의 예제 충돌에 애니메이션이 적용됩니다.

이 버터플라이 크로스바 예시에서는 단 12개의 스위치로 8개의 입력을 8개의 출력으로 라우팅합니다. 각 스위치에는 2개의 입력과 2개의 출력이 있습니다. 데이터는 바로 라우팅되거나 반대 경로로 전환됩니다.

경로가 하나만 전환된 경우 출력에서 충돌이 발생할 수 있으며, 스위치에서 경로에 액세스할 수 있는 사람을 중재해야 합니다. 중재는 기본적으로 간단한 핑퐁 방식을 사용하지만, 필요한 경우 더 정교한 방식을 쉽게 구현할 수 있습니다.

하이레벨 디자인 툴 사용(oneAPI DPC++)

하이레벨 언어(DPC++)를 활용하여 크로스바 스위치를 특정 애플리케이션 요구 사항에 맞게 조정할 수 있습니다:

  • 병렬 커널 수(입력 포트)
  • 데이터 경로의 너비
  • 동일한 디자인에 여러 개의 서로 다른 크로스바

이를 통해 리소스에 맞게 설계를 최적화할 수 있습니다. 항상 활성화된 내장형 일반 스위치가 필요하지 않으므로 전력을 최소한으로 유지합니다.

oneAPI 도구 사용(DPC++ 및 SYCL)

  • 각 크로스바 스위치는 고유한 스위치 커널 그룹입니다.
  • 스위치는 SYCL 파이프를 통해 연결되어 필요한 포트 수를 가진 크로스바를 생성합니다.
  • 각 스위치의 너비는 필요한 데이터 유형에서 암시됩니다.
  • 포트 수는 2의 거듭제곱이어야 합니다.
    • 사용하지 않는 포트는 합성 중에 최적화되어 제거됩니다.
  • 데이터 유형은 대상 정보가 포함된 스위치 메타데이터 구조를 상속해야 합니다.
  • 포트는 필요에 따라 차단 또는 비차단 SYCL 파이프 방법을 사용하여 액세스합니다.

DPC++에서 크로스바 사용

비트웨어 크로스바 스위치의 세 가지 사용 사례 예시

네트워크 처리 | HBM2의 커널 공유 | 분산 그래프 처리

사용 사례 1:

네트워크 처리

oneAPI에서 IO 인터페이스와 대화하기

oneAPI는 호스트와 FPGA 간의 인터페이스를 추상화합니다. 외부 I/O(예: 다이어그램의 QSFP)와의 인터페이스도 oneAPI I/O 파이프를 사용하여 추상화됩니다. 이를 통해 설계를 oneAPI를 지원하는 여러 BittWare FPGA 카드로 확장할 수 있습니다.

크로스바 스위치는 네트워크 포트로 패킷을 보내거나 받는 데 사용할 수 있습니다. 여기서 DCP++ 코드를 약간 수정하면 네트워크 패킷 경계에서 중재가 이루어지도록 변경됩니다.

사용 사례 2:

HBM2의 커널 공유

(이더리움 블록체인 채굴 예시)

크로스바 스위치를 사용하면 HBM2 메모리 채널에 대한 액세스를 공유해야 하는 커널을 최적화할 수 있습니다.

이에 대한 한 가지 사용 사례는 이더리움 채굴입니다.

  • 경쟁력 있는 성능으로 이더리움을 채굴하려면 각각 DAG라는 대용량(현재 4.5GB) 메모리 공간에 액세스할 수 있는 여러 개의 병렬 커널이 필요합니다.
  • 이더리움 채굴의 병목 현상은 메모리 대역폭이므로 온-패키지 HBM2는 크기와 대역폭 요구 사항 모두에 매우 적합합니다.

인텔 스트라틱스 10 MX FPGA에는 32개의 독립적인 HBM2 메모리 포트가 있습니다.

  • 각 포트의 최대 처리량은 초당 12.8GB입니다.

  • 각 포트는 512MB의 메모리만 액세스할 수 있습니다.

  • 총 16GB바이트

그러나 FPGA에는 스위치가 내장되어 있지 않으며, 고급 도구는 여러 포트를 자동으로 연결하거나 조정하지 않습니다.

크로스바 스위치는 이러한 문제를 해결하여 성능을 향상시킬 수 있습니다.

8개의 HBM 메모리 공유 예시

크로스바 없음: 멀티플렉싱 방식을 사용하는 다수의 경로(중재 없음).

버터플라이 크로스바 스위치는 라우팅을 줄이고 중재를 추가하여 성능을 향상시킵니다.

사용 사례 3:

분산 그래프 처리

  • 큰 그래프에는 여러 FPGA에 분산된 상당한 메모리 리소스가 필요합니다.
  • 크로스바 스위치는 커널 로컬과 오프 디바이스 간의 통신을 위한 우아한 솔루션입니다.
  • 그래프 처리에는 다양한 응용 분야가 있습니다.
    • 생물학, 소셜 미디어, 금융 등 다양한 분야

결론

  • FPGA는 복잡하고 효율적으로 사용하기 어려울 수 있는 고유한 기능을 가지고 있습니다.
  • 비트웨어의 버터플라이 크로스바 스위치 IP는 여러 메모리 또는 IO 인터페이스 간에 공유 액세스를 제공할 수 있는 간단한 방법을 제공하여 이러한 복잡성을 간소화합니다.
  • DPC++와 같은 고급 언어를 사용하면 이러한 IP를 다양한 사용 사례에 맞게 쉽게 사용자 지정할 수 있습니다.

소스 코드 요청하기

이 양식을 작성하여 비트웨어 버터플라이 크로스바 스위치를 요청할 수 있습니다. 라이선스 계약에 동의하고 코드를 다운로드하기 위한 로그인을 설정하는 다음 단계를 위해 영업팀에서 연락을 드릴 것입니다.

"*"는 필수 필드를 나타냅니다.

이름*
이 주소를 사용하여 PDF가 전송되므로 이 이메일이 활성 이메일인지 확인하세요.
주소 및 도시*