比特韋爾
點播網路研討會

BittWare和英特爾的標誌
oneAPI 徽標和PCIe卡

使用英特爾 ® oneAPI™ 透過 FPGA 實現高性能計算加速

加入BittWare和英特爾,我們將關注以FPGA為重點的oneAPI™。我們將看一個真實的2D FFT加速示例,它利用Intel® Stratix® 10 MX,包括BittWare的520N-MX卡上的HBM2記憶體。

你將學到什麼

視頻文字記錄

(馬庫斯)

感謝您參加我們的網路研討會,該網路研討會將介紹英特爾的 oneAPI,重點介紹使用 FPGA 實現高性能計算加速。首先,請允許我簡要介紹一下我們的演講者以及他們將涵蓋的內容。

首先是BittWare的Craig Petrie。他的職業生涯始於Nallatech的FPGA工程師,目前擔任BittWare的營銷副總裁。他將解釋FPGA如何與HPC配合,以及一些BittWare卡和我們對oneAPI的支援。      

接下來,我們將聽取英特爾的 David Clarke 的演講。他是一名技術銷售專家,將概述英特爾的生態系統、軟體和平臺,以便更好地利用 FPGA 的強大功能,特別是通過引入更簡單的軟體驅動開發流程。

然後,Maurizio Paolini將解釋為什麼英特爾要引入oneAPI。他是一名現場應用工程師,在 Altera 工作了 20 多年,在英特爾收購 Altera 後,他開始專注於雲和企業加速。他將解釋 oneAPI 如何通過簡化開發以實現跨多個架構的加速來解決程式設計挑戰。         

最後,我們將聽取BittWare首席系統工程師Richard Chamberlain的意見。Richard在OpenCL中為BittWare的FPGA卡創建了原始的2D FFT演示,現在已經移植到oneAPI,因此他將分享結果的細節。

請注意,2D FFT代碼可根據要求在BittWare網站的資源部分獲得。

現在,如果您在我們的一個直播時段觀看此內容,您將希望在主要演講之後與我們的小組成員一起為問答環節做好準備。要現在或在問答期間提出問題,請查找問題面板,輸入您的問題,我將在大約 30 分鐘的問答環節中將其提交給我們的面板。

好了,讓我們從 Craig Petrie 的 HPC 概述開始。

(克雷格)

好的,謝謝馬庫斯。

對於那些不熟悉BittWare的人來說,我們實際上是Molex兩次收購的產物。

第一個是 2016 年的 Nallatech 集團,在英國加利福尼亞州設有辦事處。第二個是2018年的BittWare,總部位於新罕布希爾州康科德。兩家公司在2018年合併,並更名為Molex公司BittWare。

綜合起來,我們在各個市場擁有 30 年的 FPGA 專業知識。我們是英特爾合作夥伴聯盟計劃的一部分,在過去 20 年中開發了採用每一代 Altera 和英特爾 FPGA 的高端 FPGA 加速器。

另一個值得強調的獨特賣點是,我們是大型 Molex 集團公司的一部分,擁有內部製造和全球物流。

具體來說,我們是數據通信和專業解決方案集團(DSS)的一個部門。

這使我們能夠將我們的 FPGA 專業知識和先進產品與 Molex 全球品牌的規模和影響力相結合。

因此,BittWare是唯一一家能夠滿足企業級資格認證、驗證、生命週期和支援要求的臨界品質的FPGA卡和系統產品供應商。

BittWare支援許多英特爾FPGA設備。然而,為了這個技術研討會的目的,我們將重點介紹兩個旗艦BittWare產品。

第一個是 520 系列,它支援英特爾的 Stratix 10 GX、NX 和 MX。

MX 變體具有 16GB 封裝記憶體 HBM2 記憶體,是我們今天演示的目標卡,它使用 oneAPI。

OpenCL 通過我們新的板級支援包原生支援它,支援PCI Express Gen 3的16個通道、所有16 GB的HBM2記憶體,甚至 I/O 管道,允許通過QSFP28網路埠使用低延遲、高頻寬和確定性的卡到卡串行連接來擴展應用程式。

BittWare的520系列OpenCL可程式設計加速器已經成功地部署在公共領域的兩台超級電腦上。

請查看這些文章和視頻以瞭解更多資訊。

我們將瞄準的第二款產品是採用英特爾 Agilex FPGA 的全新旗艦加速器。

BittWare 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 的伺服器和邊緣平臺相容。

BittWare的FPGA加速產品旨在解決四個主要應用領域:計算、網路、存儲和感測器處理,涵蓋數據中心、雲基礎設施和網路邊緣空間。

這些應用領域中工作負載的 FPGA 價值主張非常強大,並且每年都在不斷增強,許多客戶現在採用 AI 和機器學習推理技術來提高性能,同時降低總擁有成本。

我們現在想做的是提供一些關於計算密集型工作負載的顏色,這些工作負載可以在BittWare基於Intel的FPGA加速器上加速。

具體來說,就是那些使用高級工具(如 OpenCL 和 oneAPI)的那些工具。

為此,我們將利用BittWare網站,該網站為每個主要應用領域提供專門的登錄頁面。

每個頁面都有豐富的資訊,包括客戶案例研究、白皮書、參考設計和視頻。

好。因此,讓我們首先進入計算登錄頁面。所以,我就點擊這裡。

因此,根據我們的經驗,使用 FPGA 加速高性能計算工作負載的客戶幾乎總是在構建異構平臺。這是一個以多種互補技術協同工作為特色的平臺。示例包括 x86(基於 CPU)、GPGPU 和 SmartNIC。

FPGA 有助於提高整體應用性能,同時也提供工作負載靈活性和節能運行。

對於那些不太熟悉 FPGA 技術或可能來自面向軟體的背景的人來說,確定您的應用是否會從 FPGA 加速中受益可能會非常令人生畏。

我們在此著陸頁上嘗試做的是為客戶提供一些指導,以幫助他們做出決定。

這裡有很多內容。

因此,如果您在網路研討會後有機會,那麼我建議您花一些時間更詳細地探索登錄頁面和內容。

好。因此,對於能夠將其應用歸結為一組獨特特性的客戶來說,可以快速確定是否應該將 FPGA 用於您的應用。

我們將其提煉為五個應用屬性,其中 FPGA 非常適合。

因此,如果您可以勾選這些特性中的一個或多個方框,那麼您可能應該更詳細地探索使用 FPGA。

好。因此,我們看到的第一個特徵是應用程式本質上是高度並行的。也就是說,您可以同時執行多個計算計算。

考慮到元件的粒度和並行特性,FPGA 非常適合這種情況。

第二種情況是記憶體訪問模式對緩存不友好。如果您使用的是微處理器或 GPGPU,它們將具有固定的記憶體層次結構。另一方面,FPGA 允許客戶構建完全自定義的記憶體層次結構。因此,如果您的應用程式需要非標準的東西,它們是更好的選擇。

第三個屬性是使用 CPU 或 GPGPU 中本機不支援的數據類型。

因此,如果客戶使用的是程式設計應用程式,並且說雙精度浮點,那麼您可能應該只使用 GPGPU 來解決此類問題。

另一方面,如果您在較低級別的算術中工作,例如位級、模式匹配或某種不尋常的整數計算,甚至可能是超越的單精度浮點,那麼 FPGA 是您考慮的有力候選者。

第四個更明顯:如果您的應用需要低延遲或確定性操作,那麼在這種情況下,FPGA 是理想的候選者。

我們在這裡列出的第五個用例是,我們看到客戶需要某種外部 I/O 的介面。它可以有多種形狀和大小。這可能包括協定或我們的行業標準,例如乙太網或 NVMe。

FPGA 還可以與自定義或專有介面通信。在這些情況下,FPGA I/O 是高度可定製的,因為大多數 FPGA 引腳與協議無關。因此,在這些情況下,FPGA 是一個非常好的候選者。

好。有了這個概述,我現在想把 David 和 Maurizio 交給大家,讓他們介紹一下英特爾公司和 oneAPI 工具。大衛,交給你了。

 (大衛)

謝謝克雷格。大家好,我叫大衛·克拉克。我是英特爾的技術銷售專家,負責推動 FPGA 加速進入雲和企業。

英特爾在從邊緣到數據中心的許多市場的計算和數據處理方面有著悠久的歷史,涵蓋金融服務行業、人工智慧、機器學習、科學研究和高性能計算等。

傳統上以其 CPU 血統而聞名的英特爾購買了 Altera,以利用 FPGA 作為一項技術。

正如我們所提到的,高性能計算是一個不僅容易利用 CPU 而且採用 FPGA 的市場,因為它具有獨特的優勢,無論是用於深度流水線計算、即時在線低延遲確定性處理,還是高度並行數學函數的加速,同時提供每瓦性能 TCO 優勢。

但是,將新技術引入市場是很困難的,這取決於以下三個標準之一:

  • 新技術是解決當今任何標準技術都無法解決的給定問題的唯一解決方案。
  • 收益如此之大,以至於可以容忍投資、僱用或重新培訓資源。
  • 當較小的增量收益非常非常容易實現時,它們很有吸引力。

到目前為止,FPGA 一直是一種只有某些應用和市場才能使用的技術,因為傳統上它需要使用 RTL 專業語言或專業資源進行開發流程。

最終目標始終是能夠利用 FPGA 在雲和企業中的優勢,通過不需要 FPGA 本身知識的開發流程。該流程允許內部已有的資源以FPGA為目標,而無需投資或再培訓。從根本上使軟體工程師能夠設計硬體,使 FPGA 成為面向非傳統 FPGA 市場和應用的開發人員、合作夥伴、系統整合商和客戶可用的技術。

英特爾及其合作夥伴生態系統(如BittWare)提供了一系列市場就緒的平臺,再加上英特爾oneAPI的出現,提供了一種方法,允許非FPGA使用者接受FPGA,利用其獨特的能力來解決計算挑戰,並提供改變遊戲規則的加速,最終使用非硬體開發資源可以採用的流程。

為了瞭解更多資訊,我現在將把你交給 Maurizio,他是英特爾的加速專家工程師之一,他將告訴你更多關於 oneAPI 的資訊。謝謝。

(茅利齊奧)

謝謝大衛。英特爾為什麼要推出 oneAPI?

在當今的 HPC 環境中,有多種硬體架構可用於運行工作負載:CPU、GPU、FPGA 和專用加速器。對架構多樣性的推動來自工作負載多樣性。沒有一種架構最適合每個工作負載,因此需要混合使用多種架構,以便在所有可能的情況下最大限度地提高性能。

但是,使用異構架構會帶來很大的負擔。首先,每種以數據為中心的硬體都需要使用不同的語言和工具進行程式設計。這意味著需要為不同的平臺維護單獨的代碼庫,並且跨平臺重用代碼變得不可能。此外,每個平臺都有自己的一套工具,用於編譯、分析和調試代碼。

這意味著為每個平臺開發軟體需要單獨的投資,幾乎沒有能力重用這些工作來針對不同的架構。

oneAPI 旨在解決此問題。它提供了一個統一的程式設計模型,簡化了跨不同架構的開發。

借助 oneAPI 程式設計模型,開發人員可以使用相同的語言和庫針對不同的硬體平臺,並且可以使用同一組調試和性能分析工具在不同平臺上開發和優化代碼。例如,他們可以通過 Vtune 分析器獲取主機和加速器的運行時數據。

跨平臺和硬體架構使用相同的語言使原始程式碼更易於重用。即使將代碼移動到其他平臺時仍需要特定於平台的優化,也不再需要代碼翻譯。使用通用語言和工具集可以加快對新開發人員的培訓速度,加快調試速度,並最終提高工作效率。

oneAPI 語言是數據並行 C++。這是一種高級語言,專為並行程式設計效率而設計,並基於 C++ 語言以實現廣泛的相容性。

DPC++ 不是專有語言。它的發展是由一個開放的跨行業倡議推動的。它的起點是SYCL,由行業財團Khronos Group開發;

語言增強是由一個社區項目推動的,英特爾積極為該專案做出貢獻,通過擴展解決語言差距。

英特爾 oneAPI 產品包括一個基於 LLVM 編譯器技術的 DPC++ 編譯器,並利用了英特爾在編譯器開發方面的多年經驗。

它還包括一個原始程式碼到原始程式碼的相容性工具,以説明將 CUDA 轉換為 DPC++。

現在,為FPGA編譯代碼時的主要問題之一是編譯時間。將 DPC++ 代碼轉換為時序閉合 FPGA 設計所需的後端編譯過程可能需要數小時才能完成。因此,FPGA 開發流程經過量身定製,可最大限度地減少完整編譯運行。

本幻燈片演示了 FPGA 開發流程。 

流程的第一步是功能驗證,其中使用測試台檢查代碼的正確性。這是在開發平臺上使用模擬實現的,其中針對FPGA的代碼在CPU上編譯和執行。當發現錯誤並需要修復時,這允許更快的周轉時間。標準 CPU 除錯器(如 Intel 發行版 GDB)可用於此目的。

功能驗證完成後,將通過編譯器生成的報告執行靜態性能分析。報告包括識別設計中的記憶體、數據流和其他性能瓶頸所需的所有資訊,以及解決上述瓶頸的優化技術建議。此外,它們還提供目標FPGA設計的面積和時序估計。

只有在靜態分析結果令人滿意后,才能進行完整編譯。請注意,編譯器可以根據請求將分析邏輯插入到生成的硬體中。分析邏輯為記憶體和管道訪問生成動態分析數據,Vtune 性能分析器稍後可以使用這些數據來識別無法以任何其他方式發現的數據模式相關瓶頸。

要開始在 FPGA 上使用 oneAPI,需要三個元件:

  • 英特爾 oneAPI 基礎工具套件
  • 面向 oneAPI 的英特爾 FPGA 附加元件 Base Toolkit
  • 以及用於所用卡的板級支援包(或 BSP)

oneAPI 元件可以從英特爾網站下載,而 BSP 則由卡供應商提供。

對於想要瞭解更多關於 FPGA 上的 oneAPI 的人,都可以獲得大量資源。首先,英特爾 oneAPI DPC++ 規範可在英特爾網站上找到,其中包括英特爾 oneAPI 程式設計指南和英特爾 oneAPI DPC++ FPGA 優化指南。

然後,可以從 Github 網站下載一組豐富的教程,這些教程涵蓋了該語言的多個功能,並與可在 oneAPI 工具鏈中使用的代碼片段結合在一起。

此外,全面的參考設計,高性能,適用於多個重點領域,如財務、資料庫加速、壓縮等。

最後,英特爾提供的培訓。這些是以講師為主導的全天和半天培訓,安排在不同的 GEO 上。

英特爾還提供 Jupyter 筆記本模組,這些模組可連接到英特爾開發雲上的 Jupyter 實驗室,供有興趣按照自己的節奏學習並在受控環境中使用代碼的使用者使用。

最後,有一本書可以在 Springer 網站上找到,並以 PDF 格式免費下載或購買平裝本。

現在,請理查。

(理查)

這個FFT 2D案例研究針對的是BittWare 520N-MX加速卡。520N-MX 是一款PCIe板,採用英特爾的 Stratix 10 MX FPGA,集成了 HBM2 記憶體。HBM2 的高頻寬可加速記憶體密集型應用。本演示文稿說明瞭如何使用片上 HBM 記憶體和 oneAPI 工具流程實現 2D FFT 的最大性能。

2D FFT 被選為此用例,因為它是一個記憶體受限的問題。特別是,選擇的大型 2D FFT 太大而無法容納在本地 FPGA 記憶體中,因此強制計算依賴於 HBM 頻寬。

在本演示文稿中,我們將說明如何最好地優化 HBM 記憶體訪問模式,使其盡可能高效。

Stratix 10 MX 有 16 個 HBM 記憶體,每個記憶體有 2 個偽埠,所有埠均可獨立尋址。設備頂部有 16 個記憶體組,底部有 16 個記憶體組。每個埠的最大頻寬為 12.8 GB/s,此處使用的速度等級為 -2 設備的總理論性能為 409 GB/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存取器類型訪問該緩衝區類型。

緩衝區的位置是通過訪問器屬性提供的。在這裡,我們使用 buffer location 屬性指向 HBM 記憶體 0 of 32。屬性ID是指每個記憶體組在元件的電路板支援包中顯示的順序。

佇列將主機程式連接到單個設備。使用生成的句柄,可以將 SYCL 任務(在本例中為單個任務內核)提交到佇列。這也是可以添加任何特定於介面的屬性的地方。

在此設計中,我們將輸入數據條帶化到多個 HBM 記憶體上,每個 HBM 介面都有一個專用於 1D FFT。這在FPGA計算和記憶體頻寬之間創造了良好的平衡。每個 FFT 都設計為完全流水線,峰值輸送量約為 40 GFlops/秒。

一維FFT的輸出被放置到本地緩衝區中。在這裡,我們存儲了足夠多的數據行,因此我們可以為 HBM 創建足夠大的突發,以保持良好的輸送量。這個簡化的動畫說明瞭在這種設計中如何實現轉彎。它顯示了在寫回 HBM 時,如何使用臨時存儲在本地片上記憶體中的 8 行數據來啟用 8 個字的突發。在實踐中,並行執行 16 個 FFT,緩衝 64 行結果。

在第二級中,需要轉置多個一維FFT的輸出。這不是在整個映射上執行此操作,而是作為主管道的一部分執行。每個 FFT 的輸出必須寫入所有其他 HBM bank。這需要從每個輸出緩衝區多次訪問所有 HBM 記憶體,從而導致管道中出現氣泡,從而降低性能。由於訪問是線性的,我們可以利用FPGA中豐富的寄存器來創建專用的移位寄存器。

代碼示例對此進行了說明,該示例僅使用 FPGA 寄存器創建了一個完全流水線的滑動視窗。每個列輸出都會延遲,以便每個時鐘週期僅在每個 HBM 上創建一次更新。最後,再次重複整個過程,最終圖像現在以與原始圖像相同的方向在多個 HBM 上條帶化。

將代碼移植到 DPC++ 后,我們應該做的第一件事是測試代碼在功能上是否正確。

所有英特爾和BittWare的例子都可以構建為模擬,允許內核代碼在本地處理器上運行。對於 2D FFT 示例,我們只需鍵入 make fpga_emu(用於 FPGA 仿真的“EMU”)。運行模擬可執行檔可以在幾秒鐘內驗證設計的功能。

以下是使用 Python 顯示輸入和轉換圖像的 2D FFT 的範例輸出。驗證設計功能后,下一個任務是檢查流水線效率和資源使用方式。

這是通過以 FPGA 為目標來完成的,但在初始設計分析完成後暫停。要生成報告,我們鍵入“make report”。這將需要幾分鐘才能完成,所以這是我們之前運行的一個。

首先,我們檢查內核的流水線是否成功。我們正在尋找一個 1 的啟動間隔,或者換句話說,一個完全流水線的內核。接下來,我們檢查所需的資源。如果一切看起來都不錯,我們就可以針對 FPGA 進行編譯。這將需要幾個小時。

正在創建一個包含FPGA二進位檔的新可執行檔。運行此可執行檔后,我們現在可以看到在 FPGA 上運行 FFT 內核所花費的時間。

要使 Vtune 能夠分析 FPGA 內核,只需使用 -XS 配置文件編譯 oneAPI FPGA 可執行檔即可。這會自動將性能計數器添加到FPGA設計中,然後Vtune可以在運行應用程式後使用這些計數器來檢索統計資訊。

要對 FPGA 進行性能分析,您可以通過選擇 CPU/FPGA 交互選項來選擇正確的加速器配置。選擇包含FPGA設計的主機可執行檔FAT二進位檔,然後啟動可執行檔。這將運行設計並從主機和 FPGA 收集分析資訊。

在摘要頁面上,我們可以看到應用程式的整體計時器以及運行FPGA內核所用時間的近似值。

選擇平臺會給出一個事件時程表,顯示卸載的FPGA內核如何適應應用的配置檔。

放大 FPGA,您可以看到 FPGA 內核所有內部和外部記憶體介面的配置文件資訊。這提供了有關內核與外部記憶體交互的關鍵資訊。將滑鼠懸停在其中一個記憶體配置檔上可提供有關全域記憶體頻寬、存儲數、內核缺數據的頻率、佔用率、內核處理該數據的時間百分比以及空閒時間(內核無所事事的時間百分比)的資訊。

從這些報告中,我們可以快速確定哪些記憶體訪問需要進一步關注。

這裏採用的方法是該演算法的眾多有效實現之一。在我看來,這就是為什麼高級工具對於現代 FPGA 開發如此重要的原因。

借助英特爾的 oneAPI 設計流程,可以快速試驗不同的設計,使軟體工程師能夠快速評估將代碼卸載到 FPGA 對性能的影響。

(馬庫斯)

好。謝謝你,Richard,對 oneAPI 的演示。這是馬庫斯再次讓我們為問答做好準備。

我想簡要地總結一下主要演講,再次指出,我們很高興作為BittWare,支援oneAPI和我們的520N-MX和HBM2的卡。如果你想瞭解更多關於Richard剛才向你展示的2D FFT演示的信息,我們在BittWare網站上有一份白皮書,可以在參考資料部分找到。

該白皮書上還有一個請求表單,用於獲取此演示的原始程式碼。

好。所以,如果你有一個問題,有些問題已經進來了,但是,如果你現在有一個問題要問我們的小組成員,應該有一個問題圖示或文本面板來輸入你的問題,我會把它們放到小組中。所以,你要輸入你的問題,我會向小組提出來,他們會通過語音回答。

所以,我將在這裡切換到我的問答螢幕。好。克雷格,你能看到我的問答屏幕並聽到我的......嗎?

(克雷格)

是的,我可以。

(馬庫斯)

好。所以,第一個問題。