橫桿開關插圖

在一個API中高效共用FPGA資源

構建蝶形橫桿開關以解決 FPGA 中的資源分享問題

共用資源 問題

FPGA 卡通常具有許多高性能記憶體和 I/O 介面。

在PCIe卡上共用FPGA的資源圖示

大型 FPGA,如英特爾的 Stratx 10 和 Agilex 系列,具有廣泛的 I/O 介面。BittWare通過提供QSFP,PCIe,卡上DDR4和GDDR6記憶體和擴展埠等功能來提供使用這些卡。我們也有採用封裝上HBM2的FPGA的卡。

訪問所有這些介面並不簡單,尤其是在需要在多個內核之間共用資源的情況下。FPGA 除了基本記憶體控制器外,沒有內置緩存或仲裁邏輯 — 仲裁是用戶的責任。

我們對共用資源問題 的解決方案

在 FPGA 邏輯 中 建立交叉 開關

oneAPI 徽標

我們使用英特爾 ® oneAPI 構建了一個蝶形交叉開關。

  • 通過使用 oneAPI(一種高級工具)而不是低級 RTL,我們獲得了一個 易於配置 的解決方案, 該解決方案可輕鬆 針對不同用途進行優化
  • 我們瞄準了 520N-MX 卡;該代碼可以使用oneAPI在其他BittWare卡上使用
帶有 Stratix10 PCIe 卡的橫杆開關圖示

在多個內核和多個介面之間共用連接的一種解決方案是交叉開關。當然,這可以使用FPGA本地程式設計進行創建。但是,如果我們使用像 oneAPI 這樣的高級程式設計語言,我們可以輕鬆地根據所需的連接數量和介面寬度對其進行優化以盡可能高效。

BittWare Butterfly Crossbar Switch是在我們的 520N-MX卡上開發的,該卡具有HBM2記憶體和多個網路埠。

 

為什麼要使用橫杆?

橫杆是排列在矩陣中的開關的集合。它 減少了 一組輸入/輸出之間所需的 連接

不帶橫杆的多路複用器圖示

沒有 開關:

多路複用器:所有輸入/輸出互連。

帶橫杆的多路複用器示意圖

帶橫杆開關

交換機使用較少的連接路由信號。

在 FPGA 中,更少的連接 = 更簡單佈線、更高的時鐘 頻率和 更好的 性能

有多種類型的交叉開關

兩個例子是全橫杆和蝶形:

全橫杆開關圖示

全橫杆:

矩陣等於輸入數乘以輸出數。

帶橫杆的多路複用器示意圖

蝴蝶橫桿

矩陣大小為 N x log2(N) / 2,其中 N 是輸入數。

我們之所以選擇 Butterfly ,是因為它使用的 FPGA 資源更少。但是,在某些情況下,它可能會降低輸送量。

更多詳情:

BittWare的蝴蝶橫桿開關

橫杆開關圖示
  • 示例:8 個輸入到 8 個輸出橫杆
  • 港口路由 0-2 和 2-3 上的衝突示例
  • 仲裁使用簡單的乒乓球方案,但如果需要,可以輕鬆實施更複雜的方案
播放視頻
按兩下圖像以動畫顯示埠路由 0-2 和 2-3 上的範例衝突。

在這個蝶形橫桿的例子中,8個輸入僅使用12個開關就路由到8個輸出。每個開關有兩個輸入和兩個輸出。數據直接路由或切換到相反的路由。

如果只切換一條路徑,則輸出端可能會出現衝突,交換機必須仲裁誰有權訪問該路徑。仲裁預設使用簡單的乒乓球方案,但如果需要,可以輕鬆實施更複雜的方案。

使用進階設計工具(oneAPI DPC++)

通過使用高級語言 (DPC++),可以針對特定應用要求定製交叉開關,例如:

  • 並行內核(輸入埠)的數量
  • 數據路徑的寬度
  • 同一設計中的多個不同橫杆

這允許針對資源優化設計。通過消除對始終處於活動狀態的內置通用開關的需求,將功率保持在最低水準。

使用 oneAPI 工具(DPC++ 和 SYCL)

  • 每個交叉開關都是一組唯一的開關內核
  • 交換機通過 SYCL 管道連接,以創建具有所需埠數的橫杆
  • 每個開關的寬度隱含在所需的數據類型中
  • 埠數必須為2的冪
    • 未使用的埠在合成過程中得到優化
  • 數據類型必須繼承包含目標資訊的交換機元數據結構
  • 埠使用 SYCL 管道方法訪問,根據需要阻塞或非阻塞
Crossbar 開關內核圖示

在 DPC++ 中使用橫杆

帶註釋的交叉條碼塊

BittWare橫桿開關的三個示例用例

網路處理 |HBM2 的內核共用 |分散式圖處理

用例 1:

網路處理

在一個 API 中與 IO 介面通信

oneAPI 抽象了主機和 FPGA 之間的介面。具有外部 I/O 的介面(例如圖中的 QSFP)也使用 oneAPI I/O 管道進行抽象。這允許將設計擴展到支援oneAPI的多個BittWare FPGA卡。

多卡橫杆網路圖示
Crossbar 網路處理圖示

交叉開關可用於將數據包定向到網路埠或從網路埠定向數據包。在這裡,對 DCP++ 代碼的一個小修改將仲裁更改為在網路數據包邊界上。

FPGA卡網口

用例 2:

HBM2 的內核共用

(以乙太坊區塊鏈挖礦為例)

使用交叉開關,我們可以優化需要共用訪問 HBM2 記憶體通道的內核。

一個用例是挖掘乙太坊。

  • 挖掘具有競爭力性能的乙太坊需要多個並行內核,每個內核都可以訪問稱為DAG的大型(目前為4.5 GB)記憶體空間。
  • 乙太坊挖礦的瓶頸是記憶體頻寬,因此封裝上的 HBM2 非常適合大小和頻寬要求。

英特爾 Stratix 10 MX FPGA 具有 32 個獨立的 HBM2 記憶體埠。

  • 每個埠的峰值輸送量為12.8 GB/秒。

  • 每個埠只能訪問 512 MB 記憶體

  • 共 16 GB

但是,FPGA沒有內置開關,而且高級工具不會自動連接或仲裁多個埠。

我們的橫杆開關可以解決這些問題以提高性能。

帶有 Stratix 10 MX 插圖的 520 卡

共用 8 個 HBM 記憶體的範例

沒有 橫杆:使用多路複用方法的大量路由(無仲裁)。

不帶橫杆的內核共享圖示

我們的蝶形橫桿開關減少了佈線,並增加了仲裁以提高性能。

Crossbar 內核共享框圖

用例 3:

分散式圖處理

  • 大型圖形需要分佈在多個FPGA上的大量記憶體資源。
  • 交叉開關是在本地內核和關閉設備之間進行通信的優雅解決方案。
  • 圖形處理有很多應用
    • 生物學、社交媒體、金融等等
橫條圖處理圖示

結論

  • FPGA 具有獨特的 功能 ,可能很複雜且 難以 有效使用。
  • BittWare的Butterfly Crossbar Switch IP提供了一種在多個記憶體或IO介面之間提供共用訪問的簡單方法,簡化了其中一些複雜性。
  • DPC++等高級語言允許針對不同的用例輕鬆定製此類IP。

請求原始程式碼

您可以通過填寫此表格來請求BittWare蝴蝶橫桿開關。我們的銷售團隊將與您聯繫,以完成後續步驟,以接受許可協定並設置登錄以下載代碼。

*”表示必填欄位

姓名*
請檢查這是一封有效的電子郵件,因為PDF將使用此地址發送。
位址和城市*