天天看點

[gdc20]ISPC in UnrealEngine4ISPCISPC的應用案例ISPC能做的和不能做的ISPC在UnrealEngine4中的應用reference

[gdc20]ISPC in UnrealEngine4ISPCISPC的應用案例ISPC能做的和不能做的ISPC在UnrealEngine4中的應用reference

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化的工作,也取得了不錯的進展。

[gdc20]ISPC in UnrealEngine4ISPCISPC的應用案例ISPC能做的和不能做的ISPC在UnrealEngine4中的應用reference

這裡是chaos ispc on和off的對比,ispc都有一定的性能提升;

[gdc20]ISPC in UnrealEngine4ISPCISPC的應用案例ISPC能做的和不能做的ISPC在UnrealEngine4中的應用reference

動畫子產品也是。

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)

繼續閱讀