大约 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 去完成。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
大约 Apple Metal API 一些想法的更多相关文章
- 关于 Apple Metal API 的一些想法
在看完 Metal 的开发文档后,除了官方所宣称的一些优点外(比如说更容易理解和使用的 API,更直接和精细的硬件控制,减少 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经 ...
- JDK的第三个LTS版本JDK17来了
目录 简介 JDK17中的新特性 语言上的新特性 核心库的优化 支持新的平台 预览特性 其他改动 总结 简介 2021年9月JDK17发布了,JDK17是最新的一个LTS版本.所谓LTS版本就是可以得 ...
- 剖析虚幻渲染体系(13)- RHI补充篇:现代图形API之奥义与指南
目录 13.1 本篇概述 13.1.1 本篇内容 13.1.2 概念总览 13.1.3 现代图形API特点 13.2 设备上下文 13.2.1 启动流程 13.2.2 Device 13.2.3 Sw ...
- iOS开发——Metal教程
Metal Swift教程 学习使用苹果GPU加速3D绘图的新API:Metal! 在iOS 8里,苹果发布了一个新的接口叫做Metal,它是一个支持GPU加速3D绘图的API. Meta ...
- iOS 8 Metal Swift教程(一) :开始学习
在本篇教程中,你将应用到3D图形中的一系列矩阵变换,并会学习到如下内容: 如何使用模型(model),视图(view)以及投影变换(projection transformations). 如何使用矩 ...
- [Apple开发者帐户帮助]六、配置应用服务(4)创建MusicKit标识符和私钥
要与Apple Music服务进行通信,您将使用MusicKit私钥对一个或多个开发人员令牌进行签名. 首先注册音乐标识符以识别您的应用.为使用Apple Music API的每个应用注册音乐标识符. ...
- iOS 13-Sign In with Apple
最近了解了iOS 13新增功能之Sign In with Apple,Sign In with Apple是跨平台的,可以支持iOS.macOS.watchOS.tvOS.JS.本文主要内容为Sign ...
- 主流的 API 架构
1. RPC:调用另一个系统的函数 2. SOAP:使数据作为服务可用 3. REST:使数据作为资源可用 4. GraphQL:仅请求所需要的数据 1. RPC:调用另一个系统的函数 远程过程调用是 ...
- Flink整合面向用户的数据流SDKs/API(Flink关于弃用Dataset API的论述)
动机 Flink提供了三种主要的sdk/API来编写程序:Table API/SQL.DataStream API和DataSet API.我们认为这个API太多了,建议弃用DataSet API,而 ...
随机推荐
- Windows下用Mingw编译Boost.Regex库
下载Boost库,解压. 定位到regex库文件夹下. GCC所对应的MAKEFILE为gcc.mak 进入命令提示符下,输入make -f gcc.mak 这是如果直接按回车执行的话,会出现错误: ...
- 一个与Log4j相关的死锁(转)
这个死锁的原因:一个动作需要两个临界对象.静态同步方法,就是一个临界对象.这种场景,静态同步方法每次只能有一个线程持有.如果存在另一个临界对象,静态同步方法中也需要获取这个临界对象.即一个动作需要两个 ...
- zabbix 获取jvm session信息
zabbix:/root# java -jar /root/cmdline-jmxclient-0.10.3.jar - 121x:5566 "Catalina:type=Manager,c ...
- Problem K: Yikes -- Bikes!
http://acm.upc.edu.cn/problem.php?id=2780 昨天做的题,没过……!!!伤心……题意:给你n个单位,n-1组关系,让你单位换算……解题思路:Floyd算法自己听别 ...
- Jetty:配置JSP支持
选择JSP实现 从Jetty-9.2開始,使用Apache Jasper作为默认JSP容器实现.在前面的版本号中使用的是Glassfish Jasper,在后面的版本号中也能够继续使用它. Jetty ...
- VC,一条会被鼠标移动的直线
对话框中的小红线可以被移动的 一.类名是 CBinarizationDlg 二.定义两个变量BOOL m_flag;int nPos;在构造函数初始化m_flag = false;nPos=256;三 ...
- [置顶] Asp.Net---css样式的使用方式
Css样式的使用大致分为三种 咱们先来看看一张总括图 1 使用连接的形式调用 有两种发方式调用: A 使用link标签 将样式规则写在.Css的样式文档中,再以<link>标签引入 如 ...
- [置顶] Vim用正则表达式进行批量修改
vim可以设置 magic 这个东西, magic就是设置哪些元字符要加反斜杠哪些不用加的. 简单来说: magic(\m):除了 $ . * ^ 之外其他元字符都要加反斜杠. nomagic(\M) ...
- JSCapture实现屏幕捕捉
JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库. 能够随意在浏览器或者桌面视频进行截图, JSCapture 使用 getUserMedia 来实现屏幕捕获. 当前 ...
- linux中vsftpd配置文件详解
vsftpd配置文件采用“#”作为注释符,以“#”开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的“=”两边不要留有空格.对于每个配置命令,在配置文件中还列出了相关的配置说明 ...