[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
Vulkan:替代 OpenGL 的下一代图形 API
by Chen Jie of TinyLab.org 2015/3/21
OpenGL 的接班人叫 Vulkan
去年,OpenGL 过时,效率低下的争论红红火火。接着就来了各种替代,性能更是各种 Duang Duang Duang 的超越,比如 AMD 的馒头(Mantle),哦不,地幔;水果的合金(Metal)。。。
作为行业标准的制定者,Khronos 终于站出来,在本月的 GDC 大会上,宣布了 Vulkan,作为 OpenGL 的接班人,性能果然是霸气外漏。Imagination 甚至已经体验过,祭出博文一篇细致说明霸气是怎么漏出来的。
Vulkan 是肿么回事
虽然 Khronos 说 Vulkan 不是一个底层 API,仅是更好抽象了现代的显卡硬件(Vulkan is not “low level” – just a better abstraction of modern hardware)。但事实上 应用开发者 要干的活变多了,这个“底层” API 的印象想掩都掩不住了,所以得靠着图形引擎才能愉快地玩耍吧。
应用开发时,首先“连上” Vulkan,得到 Vulkan Instance,然后从该 Instance 列举出硬件 GPUs。选择一个 GPU,打开为 Device,进一步获得 Device 上的 某个类型 的 某个 Queue。然后就不断准备命令块(Command Buffer),丢到 Queue 中。
应用需要进行资源管理(额,比如 CPU 和 GPU 内存的分配,CPU 分配的内存资源叫 vkCreate,GPU 端的则叫 vkAlloc ):Pipeline,用于同步的 Event …(编不下去了,呵呵),并将操作资源的命令写到 命令块中,丢给 Queue 来处理。
一个简略的说明图如下:
说说 SPIR
IR(Intermediate Representation)可以认为是一种抽象的汇编语言。编译器将 C,C++ 不同前端编成 IR,再映射到具体到 CPU 上。对于 GPU 也是一样的。
不过 GPU 端的指令花样更多,且不像 CPU 指令这样标准化,这些差异性带来驱动开发上的工作量。所以将上层各种调用(OpenGL,Vulkan,OpenCL …)汇聚到 IR,再由驱动来映射到具体的 GPU 汇编,能复用公共部分,解放程序猿(万岁!万岁!!)。
上面这个主意,早有人想到,只是造一种合适的 IR,一直有分歧。比如 Mesa Gallium 驱动框架中,有 TGSI IR;也有人说咱能不能用 LLVM IR;最近 Intel 又在开用了 NIR。
Khronos 作为硬件厂商的联合组织,大概能标准化合适的 IR,期望能成功应用开。
聊聊未来的各位 U 们
异构计算的兴起,使得 CPU 独力计算的局面,变成了 CPU 带领下的计算。CPU 是 Team Leader,大堆的加工任务交给 GPU,丢个 SOP 过去,分分钟就完成了。
另外,CPU 也是有差异的,比如 big.LITTLE 大小核,还比如 它 —— 动态将 RISC 指令优化翻译成 VLIW 的 Tegra K1(Denvor Core)。它的特点是慢热型,需要一段时间的代码动态分析,生成优化的 VLIW 指令块,存到缓存中。热身完成后,再运行原代码,既快又省电。
也许将来,在普通 CPU 带领下的计算中,引入上面这样一个特殊的 CPU,让那些“长存”的程序跑在其上,至完美效率(嗯,我们的原创 idea,转述麻烦说明下)。
如下图:
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |