一般來說,除了CPU,其他平臺通常都不是圖靈完備的,需要和CPU一起協作來完成工作任務的處理。在本書中,我們約定如下:
- 如果一個任務由CPU執行,我們稱之爲軟件執行;
- 如果一個任務(或任務的一部分)由協處理器、GPU、FPGA或ASIC執行,我們可以統稱之爲硬件“加速”執行;
- 如果一個任務,至少分爲兩個部分,一部分在CPU的軟件執行,另一部分在協處理器、GPU、FPGA或ASIC硬件執行,並且這兩者之間需要相互通信和協作,那我們可以稱此任務是軟硬件協作來完成。
以基於CPU+GPU的異構計算架構爲例。CUDA是NVIDIA創建的並行計算平臺和應用程序編程接口(API)模型。CUDA允許軟件開發人員使用具有支持CUDA功能的圖形處理單元(GPU)進行通用處理。CUDA平臺是一個軟件層,可直接訪問GPU的虛擬指令集和並行計算元素,以執行計算內核。
如圖 2.6,CPU視角的CUDA的簡單處理流程如下:
- CPU順序執行任務,結束後把數據保存在CPU的內存中;
- 將待處理的數據從CPU內存複製到GPU內存(圖中的①處理);
- CPU指示GPU工作,配置並啓動CUDA內核(圖中的②處理);
- 多個CUDA內核並行執行,來處理準備好的數據(圖中的③處理);
- 處理完成後,將處理結果複製回CPU的內存(圖中的④處理);
- CPU把GPU的結果繼續進行後續處理,並繼續後續的工作。
圖 2.6 CUDA處理流程
注意:在GPU工作期間,CPU處於空閒狀況,也可以把這段時間利用起來,用於處理其他工作任務。
如圖 2.7所示,我們按照在軟件運行的部分任務和在硬件運行的部分任務之間的關係來把軟硬件協作分爲兩類:
- 平行的軟硬件協作,如CUDA,像線程間通信或服務器/客戶端的交互,雖然雙方可能有主動(Master)和從動(Slave)的區別,但本質上是一個相互平等的交互。
- 而垂直的軟硬件協作,如分層的網絡協議棧或很多大規模分層系統的上下層之間的服務調用,是下層封裝技術實現細節,提供接口供上層調用,以此下層給上層提供服務。
圖 2.7 平行和垂直的軟硬件協作
平行模式和垂直模式本質上是一樣的,一方面雙方各自完成自己的工作,另一方面雙方通過交互達到交換數據和信息的目的,最終實現軟硬件平臺間的工作協作。而區別主要在於邏輯上的調用關係,垂直模式主要是基於下一層提供的服務來完成本層的功能,然後再爲上一層提供服務;而水平模式則兩者是相互調用、相互協作。
新技術層出不窮並且快速迭代,對雲計算硬件架構形成巨大挑戰。該如何根本性地解決這一挑戰?看這本《軟硬件融合》,解決方案全有了。