iOS文档翻译

Metal的简短旅程 <- Metal

2017-09-03  本文已影响9人  raingu24

学习Metal中的GPU编程基础。

概览

Metal提供了对GPU的低层级和低能耗的访问入口。开发高效使用GPU的Metal应用的关键是理解底层软件和硬件的整体交互。

GPU 编程基础

GPU是强大的硬件单元,它包含很多处理核心(远多于CPU)。单独来说,每个GPU核心的处理能力小于CPU核心。但是,GPU可以通过把大量的数据分配到它的多个核心中进行整体处理。

这些基础硬件的差异使得每个处理器适合于不同的任务。GPU特别适合于大量的平行处理任务,例如在一个frame中渲染成千上万的的像素,或者执行一个有成千上万元素的数组的相同计算。

下面的例子展示了一个简单的GPU函数(compute_function)。该函数添加两个输入缓存元素(inputA、inputB),并用一个输出缓存(outputC)来存储结果。

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中,这个操作被声明在循环中并顺序执行。在GPU中,这个操作被分配到它的多个核心中并平行计算。

基础Metal概念

前面的这个例子代码是一个完成的Metal GPU函数。你只需要Metal绘制语言来写GPU-可执行函数,但是你需要Metal框架来指定GPU可访问资源和以GPU为中心的命令。

下面的简单的Metal系统框图阐述了进出GPU的数据流。函数和资源被编码进合并命令,然后它被发送到GPU执行。来自GPU的记过被渲染或写入到另一组资源,它被选择的发送给显示器。

更多信息,参看 基础概念(Fundamental Components)。

上一篇下一篇

猜你喜欢

热点阅读