VS2019 16.2: 新版本对游戏性能的优化( 四 )

在AVX架构下优化循环

下面的一个例子 , 展示了一个测试两个vector是否偏离一定程度的函数实现 。

在16.2中 , 开发团队优化了代码生成 , 使之可以借助硬件加速来实现优化 。 我们来看看反汇编代码 , 左边是16.0版本生成的反汇编 , 右边是16.2生成的反汇编:

从上图可以看到 , 在旧版本16.0中 , 编译器识别到了Reduction Loop , 但是却没有进行矢量化操作 , 而是就地全部展开 。 而新版本16.2中 , 编译器识别到了Reduction Loop并对其进行了矢量化 , 而且使用了horizontal add指令进行求和操作 , 从而使生成的代码更加紧凑而且性能更优 。

在单个vector元素上识别intrinsics

新版本编译器可以在单个最底层元素上优化vector intrinsics 。

下面的一个例子 , 是计算平方反比的一个函数实现 。 这个函数来自虚幻引擎的数学计算库 。 它在虚幻引擎中 , 主要用来渲染大部分的游戏对象 。

推荐阅读