大多数浏览器和
Developer App 均支持流媒体播放。
-
基于 A11 的 Metal 2 - 概览
Metal 2 和 A11 仿生芯片的无缝集成,让您的 app 和游戏的表现和性能达到全新的境界。了解基于 A11 的 Metal 2 中新增的强大 API 功能和 GPU 驱动功能,包括图像块、分块着色、光栅顺序组增强功能、图像块样本覆盖控制和线程组共享。了解 Apple 设计的 A11 GPU 的架构,并看看它为渲染、计算和机器学习技术带来了哪些发展机会。
资源
- Metal
- Metal Feature Set Tables
- Metal Shading Language Specification
- Tailor Your Apps for Apple GPUs and Tile-Based Deferred Rendering
相关视频
WWDC20
Tech Talks
-
下载
为了利用 A11 GPU 的新架构和特性 Metal 2 引入了一系列 新的 API 和着色语言更改 让我们来看一下 A11 上的 Metal 2 究竟有什么新内容吧 Apple 设计 Metal 是为了让 GPU 在架构上能有快速的革新 相应地 Apple 的 GPU 架构 也体现了 Metal 的设计 这种深度且无缝硬件软件结合 为你的图形 计算 机器学习 App 和游戏 带来了令人兴奋的 新的可能性
仅仅在 Metal 问世三年之后 在 WWDC 2017 上 我们就推出了 Metal 2 也就是 Metal 的第二代 基于简洁和精心的设计 Metal 2 使用了更为前沿的方法 来访问 GPU 的能力 比如由 GPU 驱动渲染 让 GPU 可以为自己调度图形工作的负载 进一步提高了效率 且降低了 10 倍的 Draw Call 成本 2015 年 Metal 拓展到支持 Mac 和桌面级 GPU 如今 Metal 2 顺沿 API 更统一地展现其主要特性 而无需考虑底层的 GPU 架构 随着机器学习在 各个领域的兴起 Metal 2 带来了更为广泛且复杂的一系列功能 这些功能的目的在于加速推理运算 以提升性能和效率 Metal 2 还带来了一系列新的优化工具 帮助你能够更专业地接触到 Apple 平台上 GPU 的能力 现在 我们可以展现 Metal 2 的更多 没有在 WWDC 上宣布的功能 Metal 2 包括了一系列强大的新功能 显示了 Apple 设计的 GPU 的独特能力 这个 GPU 集成在我们最新的 A-Series 芯片中 也就是 A11
在我们细致了解 A11 GPU 的架构和特性之前 让我们来回顾一下经典的 GPU 的架构 以及 Tile-based Deferred Rendering Architecture (基于图块的延迟渲染架构) 这是讲点 GPU 架构的简化图 GPU 是一种大规模并行机器 图解中展示的 Vertex Stage(顶点阶段) 和 Fragment Stage(片段阶段) 进行着多次重复和并行运行 另有许多优化的功能 例如 Cache 架构 FIFO 以及 Early Coarse Depth Test(粗略预深度测试) 等等 都未在此图中显示 从根本上来说 经典架构的 GPU 处理基元 并产生深度 颜色 数据缓冲区和纹理 此架构中 一个具有决定性的特性 是 Vertex Stage 的输出 直接提供给 Fragment Stage 让我们来看一看 Tile-based Deferred Rendering Architecture 的架构 它也被称为 TBDR 所有 A-series 的 GPU 都基于 TBDR 架构 TBDR 也对原有的 GPU 架构 做出了一些具有重要意义的改变 第一个主要的不同就是 Vertex Stage 的输出 不再直接提供给 Fragment Stage 不同地 当基元从 Vertex Stage 输出时 它们将被置入对齐屏幕的小图块中 并存储到内存里
这样的改变使得 Vertex Stage 得以与 Fragment Stage 相对的异步运行 当一个渲染通道的 Fragment Stage 运行时 硬件可以在未来的渲染通道并行执行 Vertex Stage 异步运行 Vertex Stage 可以大幅提升性能 Vertex Stage 常常被固定功能硬件大量使用 而 Fragment Stage 在数据和带宽处理领域广泛应用 完全重叠两者使得我们可以 同时使用 GPU 上的所有硬件模块 把基元置入图块使我们 可以在一个图块里处理所有的基元 让我们来看看如何利用这个特性 我们在着色器核心附近的芯片上 置入图块大小 完整分辨率的 深度缓冲器 模版缓冲器和帧缓冲器 我们将这个内存称为 图块内存 图块内存 有三个特性 第一 着色器内核与图块内存之间的带宽 比 GPU 和外部存储之间的带宽 高出许多倍 比例与着色器内核的数目相当 00:04:33.106 --> 00:04:36.109 line:10% 第二 图块内存的访问延迟与
外部存储的访问延迟相比 要低很多倍 最后 图块内存与外部存储相比 大大减少了使用的电量 TBDR 为两种主要的优化使用了这种 低延迟 低能耗 高带宽的内存 首先 这种图块的深度/模版内存使得硬件可以 为不透明的目标 在着色器内核处理之前 生成完整的深度和模板缓冲信息 这样 硬件就可以在输送给着色器内核之前 完全剔除阻塞的片段 如果后面的渲染通道 不需要深度缓冲 那么这种全尺寸深度缓冲就可以 通过无记忆的渲染目标 完全省略 节省了大量的内存 带宽 存储空间和电量 其次 图块内存被用于 在芯片上存储颜色缓冲 混合操作很快 因为不再需要 从外部存储获取全尺寸帧缓冲 当全部图块运行完毕的时候 图块内存只被写入一次 这节省了一大部分的电量和带宽 提高了性能 由于这个内存速度更快 所以现在占用率更高了 有了帧缓冲区读取特性 你可以使用自定义的混合 并启用多种先进的技术 与无记忆的帧缓冲器结合 许多技术 都无需消耗外部存储 所以 即使带宽有限 TBDR 也可以表现出优越的性能 TBDR 消耗更低的电量 这对电池驱动的设备十分重要
我们现在将话题转到 A11 GPU 上面 在 A11 上 我们做出的第一个 GPU 架构的改变是 你可以对你的片段函数中的图块内存上面的数据 进行直接控制 Imageblock 为获取图块内存中的图像数据 提供了优化的通道 你将可以使用对你的 App 有意义的方式 来布置像素 而且仍然可以高效地渲染 Imageblock 是一个图块内存中的 2D 的数据架构 你可以指定它的宽度 高度 深度 和格式 Metal 2 在着色语言中 增加了纹理像素格式 目的是通过打包的数据类型 让你拥有对像素布局的全部控制 第二个主要的架构变化 让你可以同时获取图块内存中 存储的所有像素 图块着色是 Apple A11 GPU 上新的可编程阶段 与渲染通道一起 提供计算功能 图块着色在 Metal 2 中展现了 全新水平的性能和效率 渲染和计算操作现在能以更高的带宽 更低的延迟和更低的能耗 通过图块内存共享数据 图块着色与 Imageblock 紧密结合 你可以分析 Imageblock 的内容 总结内容 存储 Imageblock 的 Mid-scene(进程数据) 甚至修改 Imageblock 的布局 你还可以使用线程组内存 就像一个平常的计算内核一样使用 00:07:45.932 --> 00:07:47.300 line:10% 对于图块着色器来说
线程组内存是持续不断的 任何一个图块的连续调用 都可操作于线程组内存 起始于此前的 图块着色器 留下的值 这同样也适用于 Imageblock 内存 它们在图块和片段的调用之间 连续不断 除此之外 我们想向你介绍 Raster Order Group(光栅扫描顺序组)的高级版本 这个版本支持 Imageblock 和图块着色 并且最终我们拓展了 Metal 的着色语言 赋予你对不同样本的 Imageblock 的全部控制 让我我们来看一组的渲染技术 它们既可以很好地应用新架构的优点 也可以利用 Metal 2 的特性
图块着色 Imageblock 和 Raster Order Group 都是将交错渲染和计算通道 合并到一个组合通道中 延迟渲染和图块前向渲染 都可以用这种方式进行加速 我们先以图块前向的实现为例看一看 你可以先传递几何体来创建片上深度信息 然后运行一个图块着色器 来创建每个图块的最小最大的深度信息 在线程组内存中运行另一个图块着色器 来创建一个剔除光列表 然后运行你的材质着色器 所有操作都可以在一个组合的通道中完成 由于消除了大量的带宽 存储和电量使用 性能得到了提升 这些特性也让 无序透明 多层 Alpha 混合 以及次平面的散射 可以高效地实现 样本覆盖控制 图块着色器 和 Imageblock 提供了更有效的方式来进行 MSAA 的自定义处理 MSAA 的色调映射以及表面聚合 为了显示这些用例都是如何进行加速的 我们为延迟渲染 图块前向 多层 Alpha 混合 以及表面聚合 提供了示例代码
A11 上的 Metal 2 通过引入 Imageblock 图块着色器 Imageblock 样本覆盖控制 和 Raster Order Group 提高了 TBDR 的架构 此外 我们引入了新的 Metal 着色语言的变化 为你提供了全新而高效的机制 来在计算线程和线程组之间共享数据 我们来简单回顾一下 A11 中 上述及其他的特性以及性能提升 我们从 Imageblock 开始吧 Imageblock 是一个在图块内存里的 2D 数据架构 片段函数只能访问其对应位置的 单个像素 然而核心程序则可访问完整的 Imageblock 每个像素可以很复杂 由多个构件组成 且每个构件都可以被追踪到 其本身的像平面 Imageblock 也提供对 GPU 格式转换硬件的 的批量访问 浮点像素将被转换为 目的纹理格式并存储在设备内存中 图块着色器在通道渲染范围内 提供计算能力 图块着色器可以访问完整的 Imageblock 并且就像普通的计算着色器程序一样 它也有线程组内存的支持 与计算着色器程序的线程组内存不同的是 图块着色器的线程组内存 在一个图块的生命周期中持续 正如色彩数据在 Draw 中持续一样 你曾经不能够实用帧缓冲获取特性 在像素尺度下的 Draw 之间 进行沟通 现在你可以使用更广的图块尺度 在图块调度和片段的 Draw Call 之间进行交流 我们现在看一看 A11 是如何令 MSAA 优于前面的几代的 Apple 的 A-series GPU 对于 MSAA 的执行非常高效 当一个片段为非边界片段时 硬件针对每个片段都会进行混合执行 而不是每个样本一次 此外 你可以直接从图块内存处理 并输出到至 Resolve Attachment(处理附件) 并且避免引发多余的内存带宽 通过 Metal 的无记忆渲染 目标特性的使用 你还可以全部消除 MSAA 渲染目标的存储记忆 有了 A11 上的 Metal 2 我们将 MSAA 带到更高的境界 目前我们的 A-series GPU 已经可以对像素进行边界追踪 而 A11 GPU 通过追踪 每一个像素中独特的样本 将追踪拓展至一个更细的粒度 这个硬件提升使拥有多个样本的 App 运行得更快 且不必对 App 做出改变 有了 A11 Metal 2 还赋予你 对元数据追踪的全部控制 包括对 Imageblock 的样本覆盖控制 你还可以将此功能与线程组 Imageblock 及图块着色器合并使用 有了 Imageblock 的样本覆盖控制 你的图块流水线可以修改 GPU 的样本覆盖数据追踪 你还可以随时在渲染通道 使用你自定义的分析算法 分析样本数据 Raster Order Group 让你能够从重叠的片段函数 以提交的顺序访问内存 并且允许片段函数进行交流 这些改进拓展了 Raster Order Group 的功能 首先 A11 展示了 GPU 的内部图块存储 Raster Order Group 使得图块内存更有用 因为你能以可预测的顺序访问它 其次 Raster Order Group 在其他 GPU 上 被限制于每个像素内的一个互斥元中 A11 可以比此细粒度更高 允许极为细小的接触 并且将线程等待访问的频率最小化
现在我们来看一看 Metal 2 是如何在线程和线程组之间 加速数据分享的 Metal 2 的着色语言拓展了原子功能 增加了内存的顺序和尺度属性 这些新添加的功能 提供了线程之间灵活并高效的数据共享方式 在 Metal 2 之前 要想在线程之间进行沟通 需要完成核心程序的执行 并发布一个新的核心程序来消耗 第一个核心程序的线程的输出 在 Metal 2 中 线程组之间 可以直接进行沟通 此外 这些新特性的增加 使得同一个线程组的线程 可以无障碍沟通 并带来性能的提升
在 A11 的 Metal 2 中 我们还增加了一些 重要的特性和功能 在 A11 f16 计算整体上更加准确 这是通过对四舍五入的改进 和最大值处理的改进实现的 A11 还增加了对 Texture Cube Arrays(纹理立方体数列) 的支持 并引入读写纹理功能 有了 A11 采样覆盖数列 也加入了 A-series GPU A11 增加了后深度覆盖特性 并提供了更为灵活的方式来调度计算内核 A11 也增加了对四种尺度变更操作的支持 想了解这些特性的更多细节 请查看 Metal 2 文稿 A11 中对 GPU 有许多 重大的性能提升 对于计算机视觉 图像处理 和机器学习相关的人物 数学性能提高了 2 倍 但这并不是仅有的性能提高之处 我们再回顾一下提高的性能 A11 GPU 的功能 与 A10 GPU 相比 f16 的数学计算和每个时钟周期内的纹理过滤速率提高了 2 倍 请注意 在 A11 上 请尽量在你的着色器上使用 f16 数据类型 使性能获得巨大的提升 我们将 A11 的线程组大小翻倍 从 512 上升到 1K 多个渲染目标的最大范围 从 256 比特提升到 512 比特 线程组的内存大小翻倍 从 16K 提高到 32K 我们还针对反馈操作做出了 重大提升 他们被称为 alpha 检验和丢弃 想了解更多关于 Metal 2 的信息 以及示例代码的链接 请访问开发者网站 developer.apple.com/metal 感谢你的观看
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。