Basic Buffers

当向顶点着色器传递数据过多(大于 4096 字节)时, setVertexBytes:length:atIndex: 方法不允许使用,应该使用 setVertexBytes:length:atIndex: 方法提高性能。
这时,参数应该是 MTLBuffer类型,可以被 GPU 访问的内存。
_vertexBuffer.contents 方法返回可以被 CPU 访问的内存接口,即这块儿内存被 CPU 和 GPU 共享。

Basic Texturing

MTLPixelFormatBGRA8Unorm 的像素格式。

2D 纹理的坐标

Reading a texel is also known as sampling

Hello Compute

data-parallel computations using the GPU.

在 GPU 发展历史中,并行处理的架构一直没有变化,而处理核心的可编程特性越来越强。这使得 GPU 从 fixed-function pipeline 转向 programmable pipeline,也使得通用 GPU 编程 (GPGPU) 变得可行。

一个 MTLComputePipelineState 对象可以直接由一个 kernel function 生成。

 // Create a compute kernel function
id <MTLFunction> kernelFunction = [defaultLibrary newFunctionWithName:@"grayscaleKernel"];
// Create a compute kernel
_computePipelineState = [_device newComputePipelineStateWithFunction:kernelFunction

把图像分块并行处理

    // Set the compute kernel's thread group size of 16x16_threadgroupSize = MTLSizeMake(16, 16, 1);// Calculate the number of rows and columsn of thread groups given the width of our input image.//   Ensure we cover the entire image (or more) so we process every pixel._threadgroupCount.width  = (_inputTexture.width  + _threadgroupSize.width -  1) / _threadgroupSize.width;_threadgroupCount.height = (_inputTexture.height + _threadgroupSize.height - 1) / _threadgroupSize.height;// Since we're only dealing with a 2D data set, set depth to 1_threadgroupCount.depth = 1;[computeEncoder dispatchThreadgroups:_threadgroupCountthreadsPerThreadgroup:_threadgroupSize];

CPU and GPU Synchronization

CPU 和 GPU 是两个异步的处理器,但是它们共享缓存,因此需要在并行的同时避免同时读写数据。

在上图中,每一帧中,CPU 和 GPU 不会同时工作,虽然避免了同时读写数据,但是降低了性能。

在上图中,CPU 和 GPU 会同时读写相同的数据,引起竞争。

可以用多个缓冲区来达到提高性能和避免数据同时读写的问题。CPU 和 GPU 不同时读写相同的缓冲区。
当 GPU 执行完 command buffer 后,会调用这个 handler

 [commandBuffer addCompletedHandler:^(id<MTLCommandBuffer> buffer)
{dispatch_semaphore_signal(block_sema);
}];

LOD with Function Specialization

level of detail (LOD)

细节越逼真,消耗的资源越多。因此要在性能和细节的丰富度之间做权衡。

if(highLOD)
{// Render high-quality model
}
else if(mediumLOD)
{// Render medium-quality model
}
else if(lowLOD)
{// Render low-quality model
}

但是使用 GPU 写出上面的代码的话,性能不高。GPU 可以并行的指令数依赖于为函数分配的寄存器数目。GPU 编译器需要为函数分配可能用到的最大数目寄存器,即使有些分支永远不可能执行。因此,分支语句显著增加了需要的寄存器数目,并显著降低了 GPU 的并行数目

转载于:https://www.cnblogs.com/huahuahu/p/ping-guo-de-Metal-gong-cheng.html

苹果的 Metal 工程相关推荐

  1. tkinter要安装吗 苹果_建造存10万斤的苹果保鲜冷库安装工程要考虑哪些因素?...

    现在水果的价格居高不下但是建造水果保鲜冷库的造价却不高,了解冷库造价之前要先了解一下保鲜冷库安装工程造价的影响因素,拿储存10万斤的苹果冷库安装工程为例,首先要确定苹果保鲜冷库建造地址,然后确定苹果保 ...

  2. 苹果新Metal API实测:四倍完爆OpenGL ES

    这几年,图形API领域十分热闹.首先是AMD Mantle,虽仅支持自家GCN架构显卡,但开创了访问硬件底层.提高执行效率的先河.微软DirectX 12与其有异曲同工之妙,而且兼容所有厂商硬件,走得 ...

  3. 苹果再下一盘很大的棋?Metal优化作用及影响浅析

    苹果再下一盘很大的棋?Metal优化作用及影响浅析 来源:3vsheji.com作者:火石发布时间:06-24 WWDC大会上,大部分网友关注的多是iOS 8的新功能新界面,但这是苹果的开发者大会,苹 ...

  4. 看苹果Metal支持c++开发

    今年五月份开始,苹果的Metal图形接口悄悄开始支持C++开发. 笔者对此表示高度赞誉,类似于macBook pro回归支持了HDMI,非常务实的做法. 当然metal 支持c++开发的影响非常深远. ...

  5. 吴恩达Drive.ai因经营困难“卖身”苹果

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 作者 | Juli Clover等 编译 | 夕颜 来源 | AI科技大本营(ID:rgznai100 ...

  6. 苹果地图副总裁_也许,苹果汽车的到来只是早晚问题

    文/小米 这两天,一篇苹果向加州机动车辆管理局提交的报告,再次引起了大家对苹果造车的热议,该报告内容为:"一辆自动驾驶模式下的苹果测试车辆在准备从基弗路向南并入劳伦斯高速公路时遭遇追尾.一辆 ...

  7. 苹果开发者_苹果,你的开发者文档写得烂透了

    作者丨小智 策划丨赵钰莹 苹果的 App Store 审核之严格,大家都有所耳闻.但在苹果公司的平台上写代码,似乎却不是那么一件令人身心愉快的事儿.本文主人公 Chris Krycho 是一位前端开发 ...

  8. 使用Metal打造令人惊叹的游戏效果

    苹果最新推出的Metal框架支持GPU硬件加速.高级3D图形渲染以及大数据并行运算.且提供了先进而精简的API来确保框架的细粒度(fine-grain),并且在组织架构.程序处理.图形呈现.运算指令以 ...

  9. iOS 8 Metal Swift教程 :开始学习

    (via:泰然网,译者:Hero Kingsley) 学习使用苹果GPU加速3D绘图的新API:Metal! 在iOS 8里,苹果发布了一个新的接口叫做Metal,它是一个支持GPU加速3D绘图的AP ...

最新文章

  1. 男神女神配——alpha阶段总结
  2. 一步一步写算法(之图结构)
  3. 为什么智能车竞赛没有清华学生参加比赛呢?
  4. scala面向对象之trait
  5. .NET Core的文件系统[3]:由PhysicalFileProvider构建的物理文件系统
  6. 成功解决没有tf.nn.rnn_cell属性
  7. BZOJ4974 字符串大师(kmp)
  8. 统计、可视化两不误,多达19种可视化技能你一定要掌握~~
  9. HarmonyOS之AI能力·通用文字识别技术
  10. Cloud Fiori Launchpad
  11. 微基准测试进入Java 9
  12. zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)
  13. error lnk2001: mysql_使用mysql时的链接错误 | 学步园
  14. 时间复杂度(3):排序算法的时间复杂度 空间复杂度 总结
  15. Spark安装及配置详细步骤
  16. FPGA电梯控制系统
  17. 新加坡政府开放数据门户网站
  18. android 点击接口回调,带你了解Android接口回调机制
  19. 关于ZIGBEE的CC2530+RFX2401C协议栈的修改
  20. 四、子弹类的创建,飞机子弹发射与无用子弹的销毁(雷霆战机)

热门文章

  1. php用重写算出圆柱体的体积,圆柱的体积
  2. C#返回mysql查询结果_c#查询MySQL是怎么接收返回结果的
  3. 服了,为什么100M宽带还这么卡?
  4. 【干货】网管的三个重要服务:AAA、NTP和SYSLOG
  5. 西北农林科技大学与陕西师范大学计算机,这所大学有点“惨”,本身是“双一流”高校,却被说成野鸡大学...
  6. python最基础_python的最基础的知识点
  7. 如何熟悉一个系统?(内含知识大图)
  8. 关于计算机三个人的英语对话,关于三个人的英语对话
  9. 转化百分比_小秘诀教你如何快速提升大众点评访客转化率!
  10. 数据库技术mysql能干什么_MySQL外键有什么作用