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都有一定的性能提升;
動畫子產品也是。
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)