我是做GPU编译器的,说一下GPU编译器需要做的内容。
1.对新的语言特性的支持
例如从dx11到dx12的支持,之前dx的中间语言是dxbc,后来换到了dxil
对vulkan的spirv的支持,
之前还有对opengl的支持,甚至更老的还有对arb的支持。
2.对硬件的支持
GPU的硬件更新了,可能添加了新的指令,有了更高效的指令,编译器需要将源码翻译到新的指令。
或者架构调整,一些细节方面也需要编译器的支持
3.与driver的交互
游戏中会有texture之类的资源贴到模型上,这样我们看到的才是一个真实的物体.
资源在GPU的memory中放置的位置由driver指定,后续会通过GPU指令采样然后加载到模型上,而采样的资源是需要driver事先传递给编译器的。
另外driver也会升级,例如从wddm2.0到wddm3.0
这个过程中driver的架构调整后很可能编译器也要细微的做一些调整。
4.性能调优
实际上GPU编译器是online的,是driver的一部分,只有在游戏运行的时候才会由driver调用编译器去编译shader. 游戏启动的一部分时间是编译器在编译shader。 也因为编译器运行在driver里面,不仅对编译的时间要求高,还对编译编译出的指令要求高。
编译时间是CPU在运行编译程序,所以叫CPU时间。而编译出的指令是运行在GPU上的,所以叫GPU时间。GPU编译的性能指标就是CPU时间加上GPU时间做到最小。
这一点与通常我们用的静态编译器不同,静态编译器可以执行多次优化,但gpu编译器如果执行多次优化会占用过多的CPU时间,但是如果优化的效果不够好,又会导致过多GPU时间。所以如何提升编译器的性能也是一个比较难的问题。
5. 上面的只是对shader语言编译器的支持,如果还用GPU加速AI的话还有对opencl的支持.
实际上CS shader也是用来做计算的。不过大家做计算的好像都用的opencl和cuda。
另外推荐一本很好的体系结构的书籍,作者是2017年体系结构方面的图灵奖得主。建议直接看英文原版的,最新的第六版还没有中文翻译。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有