大约 Apple Metal API 一些想法

看后 Metal 的开发文档后,除了官方所宣称的一些长处外(比方说更easy理解和使用的
API。更直接和精细的硬件控制,降低 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经验看来,下面一些方面更让人兴奋。

更方便和友好的多线程 GPU 渲染支持

GLES 的设计,全部东西都必须跟一个 GL Context 绑定。由 GL Context 内部所控制的状态机驱使,而 GL Context 又跟单个线程本身紧密绑定在一起,导致非常难支持构建一个良好的多线程 GPU 渲染架构,Chrome 的解决的方法是在 GL 之上构建了一套 GL Context 的 Proxy 机制,Proxy GL Context 同意多个线程创建不同的实例。而每一个 Proxy GL Context 内部使用一个 Command Buffer 跟真正的 GL Context 进行通讯和保持同步。

而 Metal 在设计时就考虑了怎样更好地支持多 CPU 线程同一时候“使用“ GPU,它的 Command Queue/Command Buffer 的模型尽管有点类似 Chrome 的 Proxy 机制。不同的 CPU 线程能够 Encode Commands 到不同的 Command Buffer,然后放入同一个 Queue 里面等待 GPU 的真正运行。

可是 Metal 的这样的内建的支持当然比 Chrome 在 GL 上面的封装来的更方便,易用和高效,也没有那么多限制。

GPU 渲染和计算的无缝整合(Rendering and Compute)

尽管 GLES 未来也会支持 Compute Shader,可是是否能做到 Metal 这样无缝的衔接(包含 Command 的运行和资源的共享)就比較难说了。

统一的资源内存管理模型,同意 CPU 直接訪问 Metal Resource (Buffer/Texture) 的存储内存。并设定了明白的 CPU/GPU 同步时机

尽管 GLES 3 能够通过 Pixel Buffer Object 支持一块 GPU 控制的内存可供 CPU 直接訪问,可是毕竟限制太多,用途有限(另外也因为 GLES 本身缺少良好的多线程支持)。而 Android 的 GraphicsBuffer 系统/硬件兼容性问题成堆。性能參差不齐。没有明白的 CPU/GPU 同步时机,也仅仅能用于特定场景。

简而言之。Metal 让 CPU/GPU 之间的协作更紧密和高效,同意 CPU 通过许多其他方式,使用更灵活 GPU。我们投入了大量的其他任务的 GPU 去完成。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-11-14 12:39:11

大约 Apple Metal API 一些想法的相关文章

关于 Apple Metal API 的一些想法

在看完 Metal 的开发文档后,除了官方所宣称的一些优点外(比如说更容易理解和使用的 API,更直接和精细的硬件控制,减少 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经验看来,以下一些方面更让人兴奋. 更方便和友好的多线程 GPU 渲染支持 GLES 的设计,所有东西都必须跟一个 GL Context 绑定,由 GL Context 内部所控制的状态机驱使,而 GL Context 又跟单个线程本身紧密绑定在一起,导致很难支持构建一个良好的多线程 GPU 渲染架构

Metal API随着iOS 10与macOS 10.12新引入的Tessellation特性

Tessellation--中文一般译作"细分曲面",一般用于将由少量顶点构成的面生成细节度更高的面.这其中的原理是将一个三角形或四边形,由GPU根据我们编程的控制点生成规则,自动生成更多的顶点,然后将这些顶点根据一定规则生成更多的三角形.这么一来,我们可以在3D游戏中在远处的敌人使用低模也能做出精细度较高的模型出来了,而且也省顶点数据传输带宽. 在Metal API中,通过tessellation绘制出的图形所走的渲染流水线会与通过传统的顶点着色器所走的渲染流水线会有所不同.Meta

Apple Watch API的功能

1.IWatch 的API 2.API的功能 3.通讯机制 4.UI 1.watch的API及功能 WatchKit 框架 WKInterfaceController 生命周期 //初始化watch的UI,生成对应的controller,并且响应init方法 - (instancetype)initWithContext:(id)context://加载数据或者更新当前Controller添加的interface objects //显示当前加载的UI时 - (void)willActivate

GPU通用计算API的变迁和趋势

原文链接 在高性能计算.机器学习等现代应用领域中,GPU(Graphics Processing Unit)是占统治地位的计算引擎.GPU从早期的固化逻辑实现.到可编程.到今天的通用计算架构(GPGPU),其应用接口(API)随着功能和通用性的提升而变得越来越灵活和高效. 1. 图形渲染:DirectX 和 OpenGL 早期的GPU有浑名显卡也不冤枉.从软件角度来说,其逻辑架构基本上就是图形的三角形坐标变换.顶点照明.像素着色等一系列功能.因为逻辑固化.功能单纯,应用程序通过驱动接口可以直接执

iOS开发——Metal教程

Metal Swift教程 学习使用苹果GPU加速3D绘图的新API:Metal! 在iOS 8里,苹果发布了一个新的接口叫做Metal,它是一个支持GPU加速3D绘图的API. Metal和OpenGL ES相似,它也是一个底层API,负责和3D绘图硬件交互.它们之间的不同在于,Metal不是跨平台的.与之相反的,它设计的在苹果硬件上运行得极其高效,与OpenGL ES相比,它提供了更快的速度和更低的开销. 在这篇教程里,你将会获得亲身的经历,使用Metal和Swift来创建一个有基本脉络的应

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

转 GCD

GCD 深入理解:第一部分 本文翻译自 http://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 原作者:Derek Selander 译者:@nixzhu 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两

GCD - 多线程

什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispatch 作为 Apple 的一个库,为并发代码在多核硬件(跑 iOS 或 OS X )上执行提供有力支持.它具有以下优点: 1.GCD 能通过推迟昂贵计算任务,并在后台运行它们改善应用的响应性能. 2.GCD 提供一个易于使用的并发模型而不仅仅只是锁和线程,以帮助我们避开并发陷阱. 3.GCD 具有在常见模式(例如单例),用更高性能的原语优化你的代码. GCD 术语 Serial vs. Concurrent 串

一个iOS开发者对tvOS SDK的初探

http://www.cocoachina.com/ios/20151001/13652.html 作者:Chris Wagner原文地址:tvOS SDK: An iOS Developer’s Initial Impressions 在Walter Isaacson编写的<Steve Jobs>的最后一章中,Steve说过“我最终实现并让它拥有了你们能想象到的最简单的用户界面”.当时他指的就是Apple TV. Steve不幸离世已经过去很久了,但是人们一直翘首以盼着这款产品.就在昨天20