採用英特爾敏捷 ® FPGA 的 IA-440i PCIe 加速器
IA-440i 400G + PCIe Gen5 單寬卡 緊湊型 400G 卡,具有 Agilex 的強大功能 英特爾敏捷x 7 I 系列 FPGA 針對應用進行了優化
當演算法包括「轉彎」時,具有 HBM2 記憶體的 FPGA 比 GPU 晶片更快。這是因為FPGA可以將轉角操作與計算重疊,從延遲的角度來看,它“免費”。我們使用2D FFT演示該技術,並在下面提供原始程式碼。為了保持“公平”,該代碼使用 GPU 也支持的數據類型。FPGA 可以輕鬆處理任何數據類型。
BittWare之前使用英特爾的OpenCL編譯器為FPGA創建了一個2D FFT內核。現在,我們重寫了該代碼,以利用英特爾的 oneAPI 程式設計模型,特別是其 DPC++ 程式設計語言。我們在 520N-MX 卡上實現了類似的性能。英特爾正在推廣 oneAPI 作為需要 GPU 或 FPGA 加速的應用程式的最佳工具鏈。
2D FFT經常出現在FPGA IP庫中,因此程式師通常不是自己實現的。然而,並行硬體上 2D FFT 的常見實現策略涉及“轉彎”或“數據轉置”步驟,這會對 CPU 和 GPU 造成主要的性能瓶頸。
我們在此演示中強調的見解是,FPGA實現可以與計算並行執行數據轉置,從延遲的角度來看,它幾乎“免費”。
GPU 無法執行相同的操作,因為 GPU 架構在 GPU 內部沒有足夠的記憶體來管道中間結果,而無需接觸 HBM2/GDDR6 記憶體。
我們不會在同一時鐘周期內啟動16個1D FFT。相反,我們將它們的起點錯開一個複雜的元素。這樣做允許我們將 1D FFT 結果流線到拐角轉彎邏輯中。
我們需要等待四個 1D FFT 的輸出,以便能夠以 32 位元組塊將轉置數據寫入 HBM。
BittWare的開發團隊使用RTL(Verilog和VHDL),HLS(主要是C++),OpenCL和現在的DPC++。 我們之前發佈過一份 比較RTL和HLS的白皮書。這個專案是我們第一次有機會將OpenCL與DPC++進行比較。
我們很高興地報告,從 FPGA 的 OpenCL 代碼遷移到 FPGA 的 DPC++ 很容易。FPGA和HBM2封裝記憶體的適配與OpenCL版本非常相似。 在主機上移動數據非常簡單。我們甚至從NumPy調用了我們的2D FFT內核,我們從未嘗試過使用OpenCL版本。
我們使用512個M20K記憶體(MX2100的12.5%)。
為 FPGA 實現的 FFT 長度通常在比特流編譯時設置。
我們實現了自己的1D FFT(而不是使用某人的FPGA IP庫)。1D FFT 是基數 2 並且完全流水線。它不在位。
2D FFT 性能將始終受到 HBM2 頻寬的限制。因此,我們的重點是找到一種演算法,使我們能夠最大化HBM2頻寬。這也意味著我們可以使用 HBM2 頻寬基準測試來準確估計 FFT 性能。
批次 1 實現的峰值 HBM2 性能為 291 GB/秒,在同一設備中有兩個獨立的內核。流水線/批處理時,峰值頻寬可達 337 GB/秒 。
我們很高興能夠快速將我們的 2D FFT 從 OpenCL 版本移植到 oneAPI。雖然優化支援 HBM2 的 FPGA 卡的方法的工作已經完成,但它仍然為基於 OpenCL 的使用者提供了一條極好的途徑,可以在 BittWare 硬體上遷移到 oneAPI,同時將影響降至最低。
在 FPGA 上使用 HBM2 在某些應用中具有一些顯著的優勢,例如我們在這裡看到的。如果您正在尋找有關我們提供的代碼的更多資訊,請使用下面的表格與我們聯繫以查詢可用性,或了解有關BittWare的 520N-MX FPGA卡 的更多資訊。
您可以通過填寫此表單來請求開源 TAR 檔。 您將收到的代碼具有開原始圖例。
我們將OneAPI 2D FFT編譯成一個Linux動態連結的共享物件庫。只需鍵入「cmake .」即可創建該庫。
我們從一個簡單的 NumPy 腳本調用該庫,該腳本創建一些輸入數據,然後驗證或繪製輸出。鍵入「python runfft.py」以查看圖形。
上述軟體在 Centos 8 上使用英特爾 OneAPI 工具 Beta 10 版本進行了測試,使用 BittWare 520N-MX 卡託管 MX2100 FPGA。該卡發佈的OpenCL板支援包還允許OneAPI工作
“*”表示必填欄位
IA-440i 400G + PCIe Gen5 單寬卡 緊湊型 400G 卡,具有 Agilex 的強大功能 英特爾敏捷x 7 I 系列 FPGA 針對應用進行了優化