給CPU直接開掛!從OpenPOWER的CAPI+FPGA看第二代異構計算
什么是異構計算?可能在很多人看來感覺高深莫測,我們可以先用一個比喻來簡單的解釋一下。比如在做簡單的整數算數時,知道算法口訣的人,心算即可,但遇到比較復雜的算數問題時,就得需要一個計算器了,但在這個運算過程中,一些簡單的計算可以提前由心算完成再輸入計算器,比如計算“(5+2)÷26”,可能我們直接就輸入“7÷26”了。又或者是完全交給計算器進行計算,但這也需要人腦控制手指進行計算器的數值輸入,此時你的大腦與計算器就構成了完成這道數學計算任務的“異構計算系統”。
?
日常生活中最常見的異構計算——人腦+計算器
就像你的大腦的結構與計算器完全不一樣,異構計算,顧名思義就是在系統內參與計算的執行單元在指令集架構(ISA, Instruction Set Architectures)層面是不同的。最為典型的例子,就是通用計算圖形處理器(GPGPU,General-Purpose computing on Graphics Processing Units),與現場可編程門陣列 (FPGA,Field-Programmable Gate Array)。從嚴格意義上講,ISA相同,只是處理核心大小同的組合,并不算是異構計算,比如英特爾的x86處理器+MIC(集成眾核加速器),以及ARM處理器的big.LITTLE大小核心的混合設計。
異構計算簡史
為什么要用異構計算,想想開頭的例子就清楚了,如果人腦就是主流的通用處理器的話,那么異構計算就是為這個處理器額外配備的“計算器”,用來執行更高復雜度的計算或應用,而這種復雜度主要指的就是超大規模的并行處理,對于更擅長串行處理的CPU來說是一個極大的互補。
異構計算的概念本身其實并不新鮮,最早可以追溯到30年前(在某些定義中,則是以指令集的處理模式來區分異構,但基本上已并非是主流概念),可要談到異構計算的真正崛起,則要從2001年用GPU實現通用矩陣計算開始,而標志性事件發生在2005年,GPU終于在執行LU分解(用于解線性方程組)的性能方面戰勝了CPU,從那之后,基于GPU的大規模并行計算方案開始嶄露頭角。
?
CPU+GPGPU是目前最為知名的異構計算組合,也是第一代異構計算的典型代表
2007年,NVIDIA推出了專門用于簡化GPU應用編程的統一計算設備架構(CUDA,Compute Unified Device Architecture),它標志著GPU的通用計算應用開發開始走向易用、成熟。時至今日,GPU+CPU的異構計算系統已經越來越多的出現在高性能計算系統(HPC),大大彌補了CPU在浮點運算方面的能力。
當然,在GPGPU之前其實還有多種芯片在向通用計算領域邁進,其中之一就是FPGA,它是最可匹敵于GPGPU的異構計算技術。
?
2012年英特爾發布的Atom E6x5C嵌入式處理器,就已經在單Socket封裝上整合了Altera的FPGA,但這個FPGA的主要任務不是計算,而是針對不同應用場景的I/O定制化與指定的信號處理,很難用于通用場合
FPGA于1985年誕生,很快就開始嘗試在通用計算領域的運用,可以說比GPGPU的出現還要早。GPGPU所擅長的浮點運算,FPGA同樣也在積極參與,但成果遠沒有GPGPU顯著(看看超級計算機全球TOP500的排名配置就知道了),而在整數型運算方面,雖然FPGA更有優勢,可惜那時的計算量除非個別應用,普遍并不大,CPU自己就能搞定,所以FPGA加速更多用于細分應用市場,應用規模相對來說并不大。不過,隨著物聯網、大數據、人工智能、機器學習等新興的大規模數據處理需求的不斷涌現,現在它的機會要來了,而且底層互聯 技術也比當前的異構系統更為先進,它就是由OpenPOWER CAPI所開辟的新一代異構計算平臺,主打CAPI+FPGA的組合。
而在我看來,它們其實是開啟了第二代異構計算的時代。
FPGA如何為應用加速?
從第一款FPGA芯片于1985年由Xilinx(賽靈思)正式推出至今,已經有30年歷史,它是在可編程陣列邏輯(PAL,Programmable Array Logic)、通用陣列邏輯(GAL,Generic Array Logic)、復雜可編程邏輯器件(CPLD,Complex Programmable Logic Device) 等技術的基礎上進一步發展的產物。與CPU不同的是,它的邏輯是硬件可編程的,而CPU則是通過軟件編程來執行相應的計算,和專用集成電路(ASIC,Application Specific Integrated Circuit)相比,它又相當于一種半成品的邏輯芯片,ASIC則是針對某類應用進行專門的固化設計,以達到最優的性能。
從字面意思上就可以想像得到FPGA是一個可隨意定制內部邏輯的陣列,并且可以在用戶現場進行即時編程修改內部的硬件邏輯,這一點是CPU和ASIC都無法做到的。要想明白FPGA的原理,的確需要一定的數字電路基礎,在此只做簡要的介紹,以解釋為什么FPGA可以在某些工作上比CPU更為出色。
?
FPGA的內部主要是由用于實現硬件邏輯的邏輯塊(LB,Logic Block)、負責LB互聯的內部互聯交換節點(IS,Interconnection Switch)以及負責輸入輸出的I/O Block組成,它們都是可編程的,而隨著技術的進步,FPGA芯片里也越來越多的集成相關的固定器件與硬核(IP)電路,如乘法器、數字信號處理器(Digital Signal Processor)等,以進一步加速相關的運算,并完善相關的功能(比如I/O)
?
?
LB是FPGA內的基本邏輯單元,是FPGA可實現邏輯編程的基礎,而在LB中最常用的邏輯編程器件就是查找表(LUT,Look Up Table,又稱直譯表),通過編程它可以實現輸入與輸出的直接對應關系,從而實現了輸入與輸出的硬邏輯,在應用時,直接根據輸入的值,通過LUT給出相應的輸出值。輸入的組合根據輸入端口數量而定,比如4個端口就可實現16種輸入組合(2的4次方),而一個LB可以包含有多個LUT,實現更復雜的邏輯組合
FPGA的內部總體架構,主要是由實現硬件邏輯的邏輯塊(LB)、負責LB互聯的內部互聯交換節點(IS)以及負責輸入輸出的I/O Block組成。由于幾乎所有的邏輯電路都是通過不同門電路的組合來實現的,所以FPGA其實就是提供了數量眾多的門電路,讓用戶用硬件描述語言(HDL,Hardware Description Language)自行設計它們各自的邏輯狀態與相互之間的邏輯關系,從而讓被編程的FPGA變成為某種專用芯片,所以說FPGA是ASIC的半成品,不無道理。
事實上,FPGA在早期的一個重要的用途就是為了更好的設計ASIC,畢竟等ASIC生產出來再實驗的成本太大,而通過FPGA可以提供進行復雜的邏輯測試,來驗證ASIC的設計,并進行反復的優化,當邏輯優化到相當水平后,再以更為直接的邏輯實現方法形成ASIC電路,以達到更好的性能。但隨著FPGA自身的性能、能力與可實現邏輯的復雜度的不斷提升,已經逐漸可以直接代替一些中等規模的ASIC來使用,并在整體功耗上,保持對CPU的明顯優勢。
在國內率先開發CAPI+FPGA加速卡解決方案的恒揚科技股份有限公司,大數據采集與分析產品經理張軍這樣形容FPGA,“FPGA就是一張白紙,(最終的邏輯電路)想畫什么完全由設計師決定,而 CPU或者等其他軟件編程的器件就像鉛筆畫素描畫(已經有了框架),設計師是在上面涂色彩。” 事實上,FPGA可以實現怎樣的能力,主要就取決于它所提供的門電路的規模。
現在主流的FPGA內部均采用了SRAM編程方式(SRAM本身就是一個邏輯部件可用于LUT,而SRAM晶體管可用于內部互聯鏈路的選通組合),可以實現快速的硬件編程,并能無限次的重復使用。雖然SRAM的特性決定了關機后內部邏輯組合就會消失,但基于SRAM的編程在每次開機時都可以從外部的Flash芯片即時加載FPGA配置文章,加載(編程)速度為毫秒級,所以完全不影響使用。在處理性能上,由于FPGA的邏輯實現是通過硬件編程來獲得,所以開發人員可以將指定的算法邏輯,直接以FPGA內部不同門電路的硬邏輯組合來實現,而且現在越來越多的FPGA內部都增加了固化的乘法器、DSP等處理單元,進一步加快了相關運算的處理速度。
從某種角度上說,FPGA內部其實并沒有所謂的“計算”,最終結果幾乎是“電路直給”,因此執行效率就大幅提高。當然,由于采用的是通用的門電路組合,在某些效率上FPGA仍然不及ASIC極致,但是可重復更新內部邏輯的靈活性,再加上在固定算法上遠高于CPU的效率,讓FPGA在應用領域迅速得到重視。然而需要指出的是,用FPGA的門電路實現整數運算邏輯,要比實現浮點運算邏輯簡單得多,所以FPGA的加速優勢也更多的體現在整數性運算,而整數運算正是當前主流企業級應用的主要運算方式,而這也是為什么GPGPU更多的用于浮點運算領域(如HPC),FPGA更多用于整數加速領域的一大原因。
?
賽靈思總結的,目前FPGA相對于主流的x86處理器,在某些領域里的加速比,以及目前數據中心里可用到FPGA加速的領域,可以說80-90%的大規模并行密集應用都可以被FPGA加速,尤其是以整數應用為主。當然,并不是說FPGA不能用于浮點運算,但相對來說,整數型加速對于FPGA更容易實現,相對于GPGPU也有更明顯的優勢。另外,請注意很多IT基礎設施的底層信息處理方面,如安全、加密、網絡加速、鍵值存儲也在FPGA的應用范疇之內,其“實用性”顯然比GPGPU更為廣泛
但是,傳統的FPGA加速設計,均是以I/O總線與CPU平臺相連,比如常見的PCIe,在系統內部以一個I/O設備存在,所以在實際的應用中,對于應用開發者本身來說仍然有較大的難度。這次CAPI的出現,則從根本上解決了這個難題,從而以FPGA的加速優勢得以獲得更充分的發揮。
- 第 1 頁:給CPU直接開掛!從OpenPOWER的CAPI+FPGA看第二代異構計算
- 第 2 頁:OpenPOWER CAPI簡介
- 第 3 頁:第二代異構計算與未來應用愿景
本文導航
非常好我支持^.^
(1) 100%
不好我反對
(0) 0%
相關閱讀:
- [電子說] Blackwell GB100能否在超級計算機和AI市場保持領先優勢? 2023-10-24
- [電子說] 3線串行數據通訊EEPROM的使用 2023-10-23
- [電子說] 浩辰軟件深耕CAD領域 致力于成為行業標桿企業 2023-10-23
- [電子說] SymPy:四行代碼秒解微積分 2023-10-21
- [電子說] 強固型智慧工廠解決方案:BOXER-6406-AND 2023-10-21
- [電子說] 飛秒激光器在醫學上的應用 2023-10-21
- [電子說] TCP/IP協議和OPC協議的區別 2023-10-20
- [電子說] 機器視覺系統的基本原理 機器視覺技術的發展現狀和應用 2023-10-19
( 發表人:郭婷 )