Metal的簡短旅程 <- Metal

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容