HPC高性能計算知識:異構並行計算
當摩爾定律還是行業的鐵律時,計算機編程幾乎一直都是串列的,絕大多數的程序只存在一個進程或線程。大家還過著「我寫個程序,性能達不到就睡個覺,等硬體工藝刷新硬體性能,性能就達標了」的美好生活。2003年以後因為工藝達到了瓶頸,你光「睡覺」是不行了。異構並行計算作為重要技術之一承擔起了技術變革的重任。
異構並行計算的本質是把任務分發給不同架構的硬體計算單元(比如說CPU、GPU、FPGA等),讓他們各司其職,同步工作。如同平時工作,把業務中不同類型的任務分給不同的計算資源執行。
從軟體的角度來講,異構並行計算框架是讓軟體開發者高效地開發異構並行的程序,充分使用計算平台資源。從硬體角度來講,一方面,多種不同類型的計算單元通過更多時鐘頻率和內核數量提高計算能力,另一方面,各種計算單元通過技術優化(如GPU從底層架構支持通用計算,通過分支預測、原子運算、動態並行、統一定址、NIC直接訪問顯存等能力)提高執行效率。
異構計算(Heterogeneous Computing)在80年代中期就已產生,其定義更加寬泛。異構計算主要是指使用不同類型指令集和體系架構的計算單元組成系統的計算方式。常見的計算單元類別包括CPU、GPU等協處理器、DSP、ASIC、FPGA等。一個異構計算平台往往包含使用不同指令集架構(ISA)的處理器。
在HPC異構並行計算架構應用技術中,通常分為通用架構並行和專用架構並行。通用架構並分為同構多核並行(X86 CPU多核並行計算和非X86 CPU多核並行計算)和異構眾核並行(CPU+GPU異構協同計算和CPU+MIC異構協同計算);專用架構並行主要是指CPU+FPGA異構協同計算。
從更廣義的角度來講,不同計算平台的各個層次上都存在異構現象,除硬體層的指令集、互聯、內存層次之外,軟體層中應用二進位介面、API、語言特性底層實現等的不同,對於上層應用和服務而言,都是異構的。異構並行計算框架有個非常重要的特徵就是能夠幫助開發者屏蔽底層硬體差異,能讓軟體平台自適應未來硬體的演進。概括來說,理想的異構計算具有如下的一些要素:
它所使用的計算資源具有多種類型的計算能力,如SIMD、MIMD、向量、標量、專用等。
其中,晶元硬體定義了單指令單數據(SISD)、單指令多數據流(SIMD)、多指令單數據(MISD)和多指令多數據(MIMD)四個並行級別,此外,MIMD還分單程序多數據(SPMD)和多程序多數據(MPMD)。
它需要識別計算任務中各子任務的並行性需求類型;
它需要使具有不同計算類型的計算資源能相互協調運行;
它既要開發應用問題中的並行性,更要開發應用問題中的異構性,即追求計算資源所具有的計算類型與它所執行的任務(或子任務)類型之間的匹配性;
它追求的最終目標是使計算任務的執行具有最短時間。
可見,異構計算技術是一種使計算任務的並行性類型(代碼類型)與機器能有效支持的計算類型(即機器能力)最匹配、最能充分利用各種計算資源的並行和分布計算技術。異構計算處理過程本質上可分為三個階段:
並行性檢測階段。並行性檢測不是異構計算特有的,同構計算也需要經歷這一階段,可用並行和分布計算中的常規方法加以處理。
並行性特徵(類型)析取階段。並行性特徵析取階段是異構計算特有的,這一階段的主要工作是估計應用中每個任務的計算類型參數,包括映射及對任務間通信代價的考慮。
任務映射和調度階段,也稱為資源分配階段。主要確定每個任務(或子任務)應該映射到哪台機器上執行以及何時開始執行。
從用戶來看,上述的非同步計算處理過程可用兩種方法來實現:
第一種是用戶指導法,即由用戶用顯式的編譯器命令指導編譯器完成對應用代碼類型分析及有關任務的分解等工作,這是一種顯式開發異構性和並行性方法,較易於實現,但對用戶有一定要求,需將異構計算思想融入用戶程序中。這是當前主流採用的方法,我們所知的CUDA(Computing Unified Device Architecture) 、OpenCL都是採用用戶指導法。
另一種是編譯器指導法,需將異構思想融入編譯器中,然後由具有「異構智能」的編譯器自動完成應用代碼類型分析、任務分解、任務映射及調度等工作,即實現自動異構計算。這是一種隱式開發異構性和並行性方法,是異構計算追求的終極目標,但難度很大,對編譯器要求很高。NVIDIA已經開始部分嘗試編譯器指導法,當然,基於CUDA Core的同構特徵,也可以認為其做的是同構自動調度。
異構計算按提供計算類型多樣性的形式來看,可分為系統異構計算SHC(System Heterogeneous Computing) 和網路異構計算NHC(Network Heterogeneous Computing) 兩大類。SHC以單機多處理器形式提供多種計算類型,而NHC則以網路連接的多計算機形式提供多種計算類型。用於HPC的計算系統(如IBM RoadRunner等)屬於NHC;當前熱門的CUDA、OpenCL都屬於SHC的範疇。
隨著深度神經網路為代表的深度學習盛行,從圖像識別到自然語言處理、自動駕駛等,似乎大家遇上了問題都會思考:「能否依靠AI來解決?」對於深度神經網路訓練來說,通常網路越深,需要的訓練時間越長。一次訓練使用單X86 CPU來做,可能需要一年,使用8核CPU來做,也需要一個半月到兩個月,但是使用單GPU來做,只需要一周,但是一周對實際生產來說已經非常慢了,大家希望一天兩天、甚至是幾個小時訓練就能夠得到結果。在部署的時候,計算平台通常是X86或ARM,提高其計算性能對用戶的使用體驗非常重要。基於這些原因,深度學習應用領域應用對異構並行計算領域非常關注。
另外,雲計算的興起,數量繁多的雲服務不再單純地追求處理速度,而是在同時處理大量數據以及在可忍受的時間內提供服務方面有更多訴求。這些訴求與CPU對單個任務快速響應的特徵並不一致,迫切需要微結構與CPU不同的加速設備協助完成,在這方面,異構並行計算天然支持不同硬體資源,充分發揮不同硬體的特點,有著非常巨大的優勢。
異構並行計算作為當前性能提升,需求滿足的重要法寶之一,可以想見在對於時延、性能、功耗都有著非常嚴格或者說苛刻的要求的通信領域,或者講究用戶體驗的終端領域都有非常重要的地位。
※HPC高性能計算知識:計算架構演進
※白話智能合約與區塊鏈技術
TAG:架構師技術聯盟 |