[gdc20]ISPC in UnrealEngine4


2020GDC上,ispc也是intel重点推进的技术,这里是在ue中的应用。

ISPC

ISPC是 Implicit SPMD(single program multiple data) Program Compiler的缩写。
可以理解为这是一个面向cpu的shader。
ispc的是一个脚本,然后要ispc compiler编译一下,然后再build到c++代码中(相比gpu shader这步在build pipeline上的操作稍微麻烦一点)
相比传统手写sse,avx代码来说,有这样的好处:

  • 由编译器来生成效率较高的SIMD代码,程序员这里的工作更像是写c代码,大大减轻了工作量
  • 很好的跨平台,多版本,覆盖了我们熟知的所有操作系统,simd指令集从sse2到avx512,我们写一次代码就可以,然后修改编译器参数来生成(当然指令集是面向float4还是float8的需要我们数据上做一些调整)

另外ispc还提供了一个并行执行的model,希望提供一个类似cuda执行的模式,不过目前这个可能还发挥场景有限。

语法上非常类似c语言,多了一些关键字,vscode中都有了ispc的compiler和syntax highlight支持。

ISPC的应用案例

目前UnrealEngine4中在使用的包括texture compression,lightmass中的embree;
前面聊过的world of tanks中的履带模拟也用了ispc做了优化;
以及中提到的在物理模块的chaos以及动画方面的使用,相比非simd以及手写的低端simd有不错的性能优势。

ISPC能做的和不能做的

ISPC在于生成较好的simd指令,但是处理data layout不是ispc能做的。
所以data oriented design依旧是非常重要的。

ISPC在UnrealEngine4中的应用

目前在4.23中ispc可以开始使用,也使用了intel的texture compress;
本次gdc中,intel和epic在chaos和animation模块做了ispc化的工作,也取得了不错的进展。


这里是chaos ispc on和off的对比,ispc都有一定的性能提升;

[gdc20]ISPC in UnrealEngine4_第1张图片
动画模块也是。

reference

  • Intel ISPC in Unreal Engine 4: A Peek Behind the Curtain (Presented by Intel Corporation)
  • Intel® ISPC User’s Guide
  • Optimizing ‘World of Tanks’: from Laptops to High-End PCs (Presented by Intel Corporation)

你可能感兴趣的:(Engine&Render)