2020GDC上,ispc也是intel重点推进的技术,这里是在ue中的应用。
ISPC是 Implicit SPMD(single program multiple data) Program Compiler的缩写。
可以理解为这是一个面向cpu的shader。
ispc的是一个脚本,然后要ispc compiler编译一下,然后再build到c++代码中(相比gpu shader这步在build pipeline上的操作稍微麻烦一点)
相比传统手写sse,avx代码来说,有这样的好处:
另外ispc还提供了一个并行执行的model,希望提供一个类似cuda执行的模式,不过目前这个可能还发挥场景有限。
语法上非常类似c语言,多了一些关键字,vscode中都有了ispc的compiler和syntax highlight支持。
目前UnrealEngine4中在使用的包括texture compression,lightmass中的embree;
前面聊过的world of tanks中的履带模拟也用了ispc做了优化;
以及中提到的在物理模块的chaos以及动画方面的使用,相比非simd以及手写的低端simd有不错的性能优势。
ISPC在于生成较好的simd指令,但是处理data layout不是ispc能做的。
所以data oriented design依旧是非常重要的。
目前在4.23中ispc可以开始使用,也使用了intel的texture compress;
本次gdc中,intel和epic在chaos和animation模块做了ispc化的工作,也取得了不错的进展。
这里是chaos ispc on和off的对比,ispc都有一定的性能提升;