歡迎光臨
每天分享高質量文章

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)。    

  • 它需要識別計算任務中各子任務的並行性需求型別;

  • 它需要使具有不同計算型別的計算資源能相互協調運行

  • 它既要開發應用問題中的並行性,更要開發應用問題中的異構性,即追求計算資源所具有的計算型別與它所執行的任務(或子任務)型別之間的匹配性

  • 它追求的最終標的是使計算任務的執行具有最短時間


        可見,異構計算技術是一種使計算任務的並行性型別(代碼型別)與機器能有效支持的計算型別(即機器能力)最匹配、最能充分利用各種計算資源的並行和分佈計算技術。異構計算處理過程本質上可分為三個階段:


  1. 並行性檢測階段。並行性檢測不是異構計算特有的,同構計算也需要經歷這一階段,可用並行和分佈計算中的常規方法加以處理。

  2. 並行性特征(型別)析取階段。並行性特征析取階段是異構計算特有的,這一階段的主要工作是估計應用中每個任務的計算型別引數,包括映射及對任務間通信代價的考慮。

  3. 任務映射和調度階段,也稱為資源分配階段。主要確定每個任務(或子任務)應該映射到哪台機器上執行以及何時開始執行。

 

        從用戶來看,上述的異步計算處理過程可用兩種方法來實現:


        第一種是用戶指導法,即由用戶用顯式的編譯器命令指導編譯器完成對應用代碼型別分析及有關任務的分解等工作,這是一種顯式開發異構性和並行性方法,較易於實現,但對用戶有一定要求,需將異構計算思想融入用戶程式中。這是當前主流採用的方法,我們所知的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技術和方案,前期詳細分享過<從高性能計算(HPC)技術演變解析方案、生態和行業發展趨勢>分析,並整理成電子書,請點擊“閱讀原文”鏈接查閱。


高端職位信息共享


技術熱文推薦:

溫馨提示:
請搜索“ICT_Architect”“掃一掃”二維碼關註公眾號,點擊原文鏈接獲取更多HPC技術資料

求知若渴, 虛心若愚—Stay hungry, Stay foolish

赞(0)

分享創造快樂