在上一篇文章《什么是GPU?GPU有什么用?》曾提及可编程着色器,可编程着色器关于 3D 游戏的设计者来说可谓有巨大的长处,不过一起也给 GPU 工程师带来了一些和 CPU 相似的风趣的问题。因需求发送指令(instruction)运转,解码(decode)和履行指令(execute)进程必不可少,而着色器代码中判别句子和循环句子也会引起履行次第的小问题等等。这意味着着色器中心现已能成为一个小型的核算引擎去履行任何的编程使命,虽然不如 CPU 那么灵敏多变,但也能履行有用的、非图形相关的使命。
GPU 核算
而现在使用 GPU 核算的使命根本都是高度并行的——一起履行很多小型的数学核算,所以当时其发展方向是机器学习(machine learning)和核算机视觉(computer vision)。跟着 GPU 核算扩展的范畴越来越大,效果也会跟着越发重要,它就能成为和 CPU 并排的同伴而不再是 CPU 隶属的一个部件。
在 2015 年 10 月 ARM 发布最新的 SoC 时顺带还有 CoreLink CCI-550,它的效果便是将 CPU、GPU、主存储器和各种内存缓冲区衔接在一起。新的 GPU 代号为 Mimir,能够从高速缓存内存里直接获取数据,甚至在 CPU 履行改变时,GPU 无需经过主存储器就能取得和 CPU 相同的数据。CCI-550 也答应 CPU 和 GPU 同享相同的内存,无需在 CPU 和 GPU 的缓冲区之间仿制数据。
一致着色器(Unified shaders)和 Vulkan
OpenGL ES 3.0(或附近的 DirectX 版别) 比照 OpenGL ES 2.0 最大的改变便是一致着色器。检查 Mali-470 的模型图,就能发现兼容 OpenGL ES 2.0 的 GPU 有两种类型的着色器,别离称作“极点(Vertex Processor)”和“片段(Fragment Processor)”,便是之前介绍过的极点着色器和片段着色器。Mali-470 有 1 个极点着色器和 4 个片段着色器,而检查 Mali-T860 的模型图就会发现它支撑 16 个能作为极点着色器或片段着色器的一致着色器,此前着色器可能会闲暇的状况被消除了。
2016 年 2 月发布的 3D 图形 API——Vulkan 是另一个要点,它带来了两个重要的立异。一是经过下降驱动程序的耗费和进步 CPU 多线程使用率,带来明显的功能提高;二是为桌面体系、移动体系和操控台供给了一个一致的 API。Vulkan 现支撑 Windows 7/8/10、SteamOS、Android 和部分 Linux 发行版,首款支撑 Vulkan 的 Android 机器是三星的 Galaxy S7。
电源问题
不同于 PC 上的显卡,它们具有大的电扇、杂乱的冷却体系,部分有需求的还会直接供电,智能手机和平板上的 GPU 体积无法和这些显卡比较。加上智能手机的 GPU 由电池供电,所以与桌面级的显卡比较,这些移动版的 GPU 不能很多的耗费动力,更要操控热量的发出。但是作为顾客的咱们肯定是期望它能有更强的图形功能,所以关于移动版 GPU 工程师来说,最大的应战不是支撑最新的 3D API,而是更高的图形功能与发热、能耗之间怎么到达一个平衡。
总结
回忆一下这次两篇文章的要点:移动 3D 图形根据三角形,模型进行移动、缩放是对三角形的极点进行处理;GPU 里边的可编程履行单元被称为着色器中心,游戏开发者能够编写根据着色器中心的代码;极点着色器处理完后,交由片段着色器转换为一个个像素,终究送到像素着色器设置色彩;3D 游戏开发者能够根据需求编程自在调用极点着色器和片段着色器;GPU 并行处理的特性让其十分合适用于机器学习和核算机视觉。