1. 程式人生 > 實用技巧 >異構系統架構標準——HSA

異構系統架構標準——HSA

https://blog.csdn.net/u010945683/article/details/46377241

前幾天看到一則新聞AMD發新Carrizo處理器http://digi.tech.qq.com/a/20150603/009450.htm。這是第一個完整支援HSA1.0標準的產品。因為當時HSA是新生標準,沒有進入市場的產品,因此對於這個標準以前只知道是關於異構計算的,沒有過多的探究。這次借這個機會深入瞭解一下。

異構初窺

在異構系統架構(Heterogeneous System Architecture,簡稱HSA)上進行並行運算的異構計算(Heterogeneous Computing)技術從上世紀80年代產生,是並行/分佈計算領域裡的熱點之一。

常見的計算單元有很多,例如CPU(中央處理器)、GPU(圖形處理器)、協處理器、DSP(訊號處理器)、ASIC(專用積體電路)、FPGA(現場可程式設計門陣列)。我們都知道諸如CPU主要應對的是邏輯密集運算,而GPU則是用於複雜數學運算,今天數量越來越多的主流應用要求兼具高效能和低功耗的素質,平行計算是達成目標的唯一途徑。但是,當前的CPU和GPU是分立設計的處理器,不能高效率地協同工作,編寫同時運行於CPU和GPU的程式也是相當麻煩。由於CPU和GPU擁有獨立的地址空間,應用程式不得不明確地控制資料在CPU和GPU之間的流動,CPU程式碼通過系統呼叫向GPU傳送任務,此類系統呼叫一般由GPU驅動程式管理,而驅動程式本身又受到其他排程程式管理。這麼多的環節造成了很大的呼叫開銷,以至於,只有在任務所需處理的資料規模足夠大,任務的平行計算量足夠大時,這樣的呼叫開銷才是划算的,因此很容易遇到計算瓶頸。HSA的提出就是為了應對如今日益複雜的計算要求,把同一個平臺上分立的處理單元緊密整合成為不斷演進單顆處理器(SOC)。下圖就是HSA基金會的成員,可以看到其中有許多重量級的參與者,有軟體供應商(ORACLE)、IP核供應商(ARM),也有半導體制造公司(TI),還有電子自動化設計一類的公司(Synopsys、Cadence

),以及一些著名高校。

HSA系統架構

1.0標準對HSA架構的系統的特徵進行了描述,其中包含一些必須有的特徵,也有一部分可以由廠商自己決定是否加入的,下面是對於HSA系統最基本特徵的描述:

  • 共享虛擬記憶體
  • 快取連結域(包括主CPU、計算核心以及內聯I/O匯流排)
  • 記憶體定址扁平化
  • 一致的系統位元組順序
  • 在所有HSA架構的系統元件(最小至原子級的部件)中基於記憶體的訊號和同步的基本單元
  • 原子級的記憶體操作
  • HSA系統時間戳(提供HSA系統中的同一視角)
  • 硬體層面上使用者模式的佇列擁有任務級的低延遲排程
  • AQL(Architected Queuing Language)介面
  • 核心排程
  • 最大延遲可保證的搶佔式核心切換
  • 核心錯誤報告機制(與主CPU相同詳細級別)
  • 核心除錯基礎架構
  • HSA平臺拓撲
  • 支援影象操作

HSA平臺架構

下面只對其中小部分Requirement具體描述。

拓撲結構

下圖是HSA架構的一個簡單示例,只有一個節點,包含核心和儲存資源。


如果是一個更復雜的HSA系統,其中有一系列的主CPU、核心以及分佈在多個系統元件的五個HSA儲存節點,那麼它的整體拓撲結構就如下圖所示。

對於複雜的HSA系統,為了隨機的新增或者移除部件,系統必須提供一種識別和通知機制,使得HSA執行環境和軟體可以不斷列舉各個部件,以更新整個拓撲結構,同時也為了能在部件被識別的同時,得到各個部件的特性。HSA需要如下圖一樣的結構,用以描述整個系統中的Agent佇列。

Architected Queuing Language

一個遵循HSA標準的系統應該為核心排程提供命令介面。這個命令介面就是AQL(Architected Queuing Language)。AQL使各個核心得以建立自己的命令資料包,並將其加入佇列。AQL也支援核心依照AQL格式輸入命令。AQL定義了一下幾種資料包型別。

  • 供應商自定義資料包
  • 無效資料包

當整個佇列初始化或read_index在增加時,資料包格式會被設定為無效。

  • 核心排程資料包
  • 代理排程資料包
  • Barrier-AND資料包

這個資料包可以被代理加入佇列中,用以延遲處理後面的資料包。

  • Barrier-OR資料包

這個資料包可以被代理加入佇列中,用以延遲處理後面的資料包。

傳送的資料包型別在AQL資料頭描述。

影象操作

遵循標準的平臺應該視情況為HSA軟體提供定義和使用影象物件的能力(支援一維至三維影象)。影象的格式只能從預先定義的格式裡面選擇。核心可以通過一個不透明的“指標”對影象的值進行操作。這個指標被HSA執行環境建立且只針對某一個核心。一個影象物件可以被設定為只讀/只寫/可讀可寫。除此之外,影象還有以下額外的要求。

  • 影象被HSA平臺建立,可能被從全域性段裡複製的資料初始化。初始化後,影象結構不再保留在全域性段的引用,同時資料不再被儲存在全域性段內。
  • 一個影象物件只能被一個核心使用,且這個核心在影象被建立時就應該宣告。
  • 影象資料只能通過介面訪問。
  • 影象資料的儲存佈局應該按定義的實現,並且對於在同一個HSA平臺上的不同Agent不必相同。
  • 影象不佔用共享虛擬記憶體的地址空間。這樣做的結果就是必須通過介面訪問。
  • 影象操作對於被HSA平臺定義的記憶體排序沒有影響。
  • 當影象的讀寫屬性(只讀/只寫/可讀可寫)被修改後,指定的核心不會改變。
  • 當只讀/只寫的影象資料被寫/讀後結果不保證。

APU發展史

為了達到上面提到的融合加速的目的,AMD公司提出了APU概念。從最初宣佈到最終釋出,APU花了足足四年半的光陰,看似簡單的CPU、GPU整合為何如此費力?原因就是這不簡單。如果只是做另一種整合顯示卡,那是再容易不過了,但是要把CPU、GPU兩種不同的計算單元有機地融合到一顆晶片中,還要發揮二者各自的最高效率,出色地完成序列和平行計算任務,就需要在方方面面保證它們倆的和諧共處,包括各自適當的規模、超高的電晶體整合度、先進的晶片製造工藝、高速的互聯匯流排架構、共享低延遲的記憶體模式、適當的成本、足夠的程式設計與軟體支援,等等。正是在這些方面經歷了深入的探索之後,AMD才最終完成了APU,繪就了一張巨集偉藍圖。

為了達到這個目標,AMD將整個計劃分為了四步:第一步,物理整合,CPU、GPU整合到單獨一顆晶片上;第二步,平臺優化,融合互連增強CPU、GPU之間的互動能力;第三步,架構整合,實現CPU、GPU記憶體統一定址;第四步,架構和系統整合,從硬體到軟體完全實現異構計算支援。

2011年的Llano就代表著第一步,2012年的Trinity則是第二步,第三步則是2013年底的Kaveri,而如今的第四步將由Carrizo邁出。

參考資料:

AMD 和異構系統架構(HSA),http://mt.sohu.com/20150326/n410358764.shtml

http://www.amd.com/Documents/ISSCC-presentation-CN.pdf

CPU和GPU真融合 APU異構系統架構解析,http://www.pcpop.com/doc/0/911/911103_all.shtml

HSA-SysArch-1.01,http://download.csdn.net/detail/u010945683/8780611