我终于在周末完成了一次完整的小跑,为了我自己的乐趣,我决定对照IRIS驱动程序的参考运行来检查时间差。鉴于英特尔驱动程序的质量非常高(并且是我碰巧使用的底层硬件的直接接口),每当我试图调试东西时,我倾向于使用ANV和IRIS作为参考。
两个运行都使用来自MESA的相同的基本检出,因此所有的核心/镓/近红外部分都是相同的。
当我点击TimeDiffs页面时,我的预期是,在大量测试中,Zink的速度会非常慢,在某些情况下可能会达到惊人的程度。
在我深入讨论这个问题之前,作为最后的免责声明,我觉得考虑到目前人们可能会仓促下结论,我需要说的是,我并不是说Zink比本地GL驱动程序更快,只是在某些情况下,我们的性能比我预期的要好得多。
这里首先要注意的是,IRIS在成功完成测试方面远远好于Zink,通过率接近完美的99.4%,而Zink的通过率仅为91%,而且这也是在2500多个测试中的通过率。这一点也很重要,因为timediff只在通过的测试之间进行比较。
也就是说,在处理大量不同的输出时,Zink的代码路径要快得多,而且奇怪的是,还有一堆dmat4测试,尽管它们都使用相同的softfp64路径,因为我的icelake硬件不支持本机64位操作。
我对这里的一些数字持怀疑态度,特别是ext_Transform_Feedback最大数组变化数组的情况,但手动测试甚至更奇怪:
TIME MESA_GLSL_CACHE_DISABLE=TRUE MESA_LOADER_DRIVER_OVERRIDE=ZINK bin/EXT_Transform_Feedback-max-varyings-auto-fboMESA_GLSL_CACHE_DISABLE=TRUE MESA_LOADER_DRIVER_OVERRIDE=ZINK-AUTO-FBO 2.13s用户0.03s系统98%cpu总计2.197
Time MESA_GLSL_CACHE_DISABLE=TRUE MESA_LOADER_DRIVER_OVERRIDE=iris bin/ext_Transform_Feedback-max-varyings-auto-fboMESA_GLSL_CACHE_DISABLE=true MESA_LOADER_DRIVER_OVERRIDE=iris-auto-fbo 301.64s用户0.52s系统99%CPU 5:02.45总计。
我对此没有很好的解释,因为我没有深入研究它,只是推测ANV在处理大量不同的输出方面要好得多。
相比之下,zink在arb_map_buffer_alignment-map-invalidate-range,中会相当果断地被击败,而我们的速度大约慢了150倍。
哎呀。看起来这将是一些工作的目标,因为潜在的应用程序可能会访问该代码路径。
不知何故,在其他一系列fp64测试中,Zink的速度明显较慢(这还不是完整的列表,只有一半多一点)。我感到奇怪的是,Zink在某些fp64情况下表现得更好,但在其他情况下也会更差,但我假设这只是驱动程序之间发生的不同着色器优化的结果,在某些情况下会将它们转移到softfp64代码路径中稍微慢一点的部分。