學(xué)習(xí)Metal中的GPU編程基礎(chǔ)。
概覽
Metal提供了對GPU的低層級和低能耗的訪問入口。開發(fā)高效使用GPU的Metal應(yīng)用的關(guān)鍵是理解底層軟件和硬件的整體交互。
GPU 編程基礎(chǔ)
GPU是強大的硬件單元,它包含很多處理核心(遠多于CPU)。單獨來說,每個GPU核心的處理能力小于CPU核心。但是,GPU可以通過把大量的數(shù)據(jù)分配到它的多個核心中進行整體處理。
這些基礎(chǔ)硬件的差異使得每個處理器適合于不同的任務(wù)。GPU特別適合于大量的平行處理任務(wù),例如在一個frame中渲染成千上萬的的像素,或者執(zhí)行一個有成千上萬元素的數(shù)組的相同計算。
下面的例子展示了一個簡單的GPU函數(shù)(compute_function)。該函數(shù)添加兩個輸入緩存元素(inputA、inputB),并用一個輸出緩存(outputC)來存儲結(jié)果。
using namespace metal;
kernel void
compute_function(constant float *inputA [[buffer(0)]],
constant float *inputB [[buffer(1)]],
device float *outputC [[buffer(2)]],
uint index [[thread_position_in_grid]])
{
outputC[index] = inputA[index] + inputB[index];
}
在CPU中,這個操作被聲明在循環(huán)中并順序執(zhí)行。在GPU中,這個操作被分配到它的多個核心中并平行計算。
基礎(chǔ)Metal概念
前面的這個例子代碼是一個完成的Metal GPU函數(shù)。你只需要Metal繪制語言來寫GPU-可執(zhí)行函數(shù),但是你需要Metal框架來指定GPU可訪問資源和以GPU為中心的命令。
下面的簡單的Metal系統(tǒng)框圖闡述了進出GPU的數(shù)據(jù)流。函數(shù)和資源被編碼進合并命令,然后它被發(fā)送到GPU執(zhí)行。來自GPU的記過被渲染或?qū)懭氲搅硪唤M資源,它被選擇的發(fā)送給顯示器。

更多信息,參看 基礎(chǔ)概念(Fundamental Components)。