Metal语法
Metal Syntax
Metal语法从C++14派生而来 支持其中的大部分特效(部分特性如lambda等不支持)
同时在C++的基础上增加了部分的矩阵等GPU编程常用特性的支持。
Vector向量类型
基础类型+数字后缀: 1. float4 四维向量
假设用float4向量来表示rgba的一个像素
float4 pixel(1.0,2.0,3.0,4.0)
pixel.a = 1.0 pixel.r = 2.0 pixel.g = 3.0 pixel.b = 4.0
pixel.ar = float2(1.0, 2.0);
2.
Metal函数类型
函数前缀声明关键字表明metal函数的类型 Metal框架的支持功能有两个 并行计算compute和渲染
vertex和fragment都是渲染函数
1. kernel 并行计算函数
2. vertex 顶点渲染函数
3. fragment 线段渲染函数
计算Metal线程id
为什么异构计算的速度远远超过cpu执行呢
因为GPU运行时是以多线程在执行任务
以图像为例 异构计算处理一张宽高都为100的图片
GPU会生成10000个线程 每个线程负责处理一个像素
CPU则不太可能这样做 这是由他们不同的构造决定的Metal的线程分为不同的group 每个group中有一定数目的线程
要计算出当前线程的操作对象在整个图中的坐标 可以用以下公式
gid是group在整个grid中的坐标 tid是线程在当前group中的坐标
threads_per_group 是每个group中线程的数目
kernel void fusionTest(texture2d input [[texture(0)]],
uint2 gid [[threadgroup_position_in_grid]],
uint2 tid [[thread_position_in_threadgroup]],
uint2 threads_per_group [[threads_per_threadgroup]])
{
// 计算线程id
uint2 pos = (uint2)((gid * threads_per_group) + tid);
float4 data(0.0, 0.5, 2.0, 3.0);
input.write(data ,pos);
}
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 六步搭建ES6语法环境
- SpringBoot中YAML语法及几个注意点说明
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- MySQL|MySQL 存储过程语法及实例
- WebSocket|WebSocket 语法解析
- 灵感迸发
- Objective-c
- 深入浅出JavaScript8章节第01章语法
- 初中英语语法第一课(语法到底是个什么玩意儿())