/ / Za akých podmienok vykonáva kompilátor .NET JIT automatickú vektorizáciu? - .net, vektorizácia, simd, auto-vektorizácia, ryujit

Za akých podmienok vykoná kompilátor .NET JIT automatickú vektorizáciu? - .net, vektorizácia, simd, auto-vektorizácia, ryujit

Nový kompilátor RyuJIT niekedy generuje vektorové (SIMD) pokyny procesora a kedy?

Bočná poznámka: Systém.Oblasť názvov Numerics obsahuje typy, ktoré umožňujú explicitné používanie vektorových operácií, ktoré môžu alebo nemusia generovať pokyny SIMD v závislosti na verzii CPU, CLR, verzii JITer, či už sa kompilujú priamo na natívny kód alebo nie. Táto otázka je konkrétne o tom, kedy nevektorový kód (napr. C # alebo F #) bude produkovať pokyny SIMD.

odpovede:

10 pre odpoveď č. 1

Generovanie SIMD kódov v RuyJIT je prísneobmedzené na typy v priestore názvov System.Numerics.Vectors. Univerzálna podpora SIMD bude vyžadovať veľmi dôležitú revíziu CLR, pretože takýto kód môže byť efektívny len vtedy, ak sú SIMD premenné správne zarovnané. Minimálne 16 pre SSE2 až 32 pre AVX2 až 64 pre nadchádzajúci AVX-512.

To je ďaleko hneď, 32-bit CLR môže lenzarovnanie na 4, 64-bitová verzia na 8. "Prirodzené" zarovnanie pre resp 32bitový a 64bitový kód. Požadované zmeny budú mať vplyv na každú časť CLR, zberač odpadu a trieda nakladač vpredu. Neexistuje žiadny bzučanie o takej veľkej zmene, ktorá sa zvažuje. A žiadny náznak toho, že to bolo uvedené v projekte CoreCLR, by bola najviditeľnejšou cieľovou verziou.

Ak chcete využiť výhodu SIMD nad aktuálnou podporou v systéme System.Numerics.Vectors, potom to urobte pomocou kompilátora C ++ pomocou rozšírenia jazyka C ++ / CLI alebo C ++ / CX na interop.