原文https://developer.apple.com/documentation/metal/a_brief_tour_of_metal
Metal 简明教程
学习Metal GPU编程的基础知识
概览
Metal 提供底层和低功耗的方式去访问图形处理单元(GPU).
开发一个优秀的Metal app 使用GPU 高效 理解 软件和硬件交互?
GPU 编程基础
GPU 是一个强大的硬件单元 包含很多的处理核心 远多于CPU所包含的核心.
单独说 每一个GPU 核心 比CPU的处理容量要少. 然而, GPU 能够收集处理大量的数据通过分发 工作负载 在 多核之间.
这基础的硬件不同 导致 每一个处理器 适合处理 不同的任务. GPU 适合大量并行计算任务 ,比如渲染成千上万的像素点在一帧 或者是 执行一个成千上万的元素的数组的计算任务.
下面的代码展示一个简单的GPU 函数计算函数(comupte_function
) ,这个函数输入两个buffer (inputA
,inputB
) 和 存储单个输出buffer(bufferC)的结果.
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 Shading Language
才能写GPU 执行函数(着色器),但是你需要metal 框架来指定GPU 可用的资源和 GPU中心的命令.
下面的 简单的metal系统 图像简化图 ,数据流进入流出GPU . 函数和资源被编码合并成 命令.
该命令会被提交到GPU 和被GPU 执行.
GPU渲染的结果或者 写入到其他的资源集合中, 这是一个可选的 发送到 显示.
更多信息 查看 基础组件