一般說來,異構計算的核心目的是解決特定應用場景下算力不足的問題,并且大幅度提升整體系統的計算性能。在整體架構上,它的分層邏輯從應用場景出發,通過上層的需求來定義下層的功能,而每一層是對特定功能的抽象與封裝。在定義每一層功能時,要達到以下幾個目標:
各層職責單一
層間邊界清晰
層內功能實現獨立
靈活易擴展
基于上述目標,將一個異構計算的系統抽象為五層(如下圖所示),自下而上分別是:1)DSA設備層(DSA Device Layer),2)DSA操作層 (DSA Operating Layer),3)計算引擎層(Scheduling Operating Layer),4)應用服務層(Application Service Layer)和5)業務開發層 (Business Development Layer),詳述如下。
圖異構計算系統抽象模型一、DSA設備層
DSA設備層代表的是執行異構計算的DSA處理器以及集成了該處理器的硬件設備,例如,以DPU或GPU為處理器的異構計算設備。異構計算設備需要具備以下兩個核心能力:1)提供支持專用計算操作的指令集(Instruction Set),2)CPU或其他DSA設備的標準通信接口,如PCIe數據傳輸標準。
二、DSA操作層
DSA操作層是對DSA處理器的指令集的管理以及基礎開發平臺的整合,該層完成了對硬件資源的抽象,從而使上層軟件對底層設備透明;DSA操作層是對DSA設備層計算設備的抽象和計算資源的封裝,是軟件與硬件、邏輯與物理的邊界。它基于如DPU芯片等DSA處理器提供的指令集,以更加抽象和編程友好的方式對上層提供了異構計算開發和訪問的軟件接口、以及設備監控管理的接口。該層內部有四個必要的模塊,分別是設備驅動器,指令集管理器,資源訪問接口,開發和管理平臺。
- 設備驅動器:設備驅動器是硬件設備的軟件抽象,它基于操作系統標準的驅動框架及PCIe協議,實現了對計算設備的物理訪問,主要包括設備處理器的指令執行和設備存儲的讀寫。
- 指令集管理器:指令管理器的作用是對計算設備所提供的指令集進行統一管理,通過對指令集的封裝及組合,提供更加友好的編程接口。
- 資源訪問接口:基于設備驅動器和指令集管理器的功能,該模塊完成對整個計算資源訪問的抽象和封裝,它以編程接口的方式對上層提供資源訪問入口,服務于上層計算邏輯和控制邏輯的執行。
- 開發和管理平臺:除了上述運行時所需的能力外,還需要針對開發人員提供友好的編程工具,如指令集編譯工具、監控管理工具、日志工具、異構計算卡模擬器等。
三、計算引擎層
計算引擎層是對計算邏輯的封裝,為上層提供通用的計算能力。與DSA操作層的對計算資源封裝不同,計算引擎層是對計算邏輯的封裝,它基于DSA操作層提供的資源訪問接口,根據上層應用層軟件對算力的需求,提供了可復用的算子集合及執行接口。
算子抽象
算子定義為實現某一特定功能或算法的函數或獨立的服務,它是對計算邏輯的抽象。例如,根據指定條件對數據進行過濾的函數可以是一個算子,稱它為“過濾算子”。在標準的數據庫軟件中,它的算子有Scan, Join, GroupBy等,而在網絡處理軟件中,特有的算子會是以BSD Socket,NVMe等標準服務的形式呈現。由于異構計算的“異構”特性,每個算子在不同設備上的具體實現有所不同,所以針對每一個支持的算子,都要有多種不同設備平臺上的實現,如ScanOnDPU、ScanOnGPU。
計算優化器
異構計算追求的是計算性能的提升,相應的需要一個計算優化器來對上層的計算請求做優化。它的基本策略是根據應用場景、上下文、數據規模等因素來動態的選擇最優的算子實現進行計算。
四、應用服務層
應用服務層是數據處理的應用服務軟件,也是算力的需求側。應用服務層代表具有通用功能的軟件系統,這些軟件系統可以利用計算引擎提供的算子進行異構計算,從而達到計算性能提升的目的。常見的應用層軟件系統有分布式計算領域的Spark, Flink, Hadoop;數據庫領域的PostgreSQL, MySQL;分布式網絡中的gPRC,Network Gateway,Nginx;以及存儲服務中的Ceph等等,基本上通用服務型的系統都屬于該層的范疇。
在實際開發中,針對應用服務層中的軟件,需要解決以下幾個關鍵問題:
- 性能瓶頸的識別:通常應用軟件的性能瓶頸會在高并發、大吞吐的情況下出現,這些瓶頸一般源于CPU計算資源的競爭、CPU計算性能的不足、網絡傳輸的延遲以及磁盤I/O的延遲等。識別出應用軟件的性能瓶頸是算力卸載的第一步。
- 異構計算的有效性邊界:在定位到軟件的性能瓶頸后,需要從中識別出哪些是可以通過異構計算來解決的。通常,CPU成為瓶頸的原因會有兩類,一類是算力的問題,另一類是算法的問題。針對算力的問題,可以通過異構計算來解決,而算法的問題則不然。
- 算子的高效調用:算子是異構計算的執行單元,只有把算子集成到應用軟件的執行路徑中,算力卸載才算完成。考慮到性能的優化,還需要根據實際情況優化算子的執行策略,例如,數據在主機端與設備端內存之間的數據拷貝策略、各算子執行序列的編排策略等等。
- 應用軟件的向前兼容性:在整合應用軟件與異構計算的算子時,要確保應用軟件的向前兼容性,以保證應用服務層的軟件迭代對正在運行的上層業務系統是透明的,從而提高整個架構的穩定性與可維護性。
五、業務開發層
業務開發層是在某特定領域的業務系統。業務開發層是最貼近實際業務場景的軟件系統,通常它是針對某個特定行業的具體業務需求定制的軟件系統,如金融行業的交易系統,互聯網行業的數據分析系統等等。整個異構計算架構本質上就是解決業務層的性能瓶頸問題,所以在實際開發過程中,應該從業務端出發,尋找要解決的根本問題,然后驅動整個異構系統的構建。同時,整體架構也要保證底層構建對具體的業務系統完全透明,達到對各行業業務軟件系統的無縫支撐和業務邏輯開發的隔離。
-
DPU
+關注
關注
0文章
358瀏覽量
24182
發布評論請先 登錄
相關推薦
評論