ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Intel ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ISPC 1.31 (Implicit SPMD Program Compiler), ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ SPMD (Single Program, Multiple Data), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΌΠΈ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ BSD. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Π² Linux, Windows, macOS lan FreeBSD.
Program C karo ekstensi SPMD diklumpukake kanggo eksekusi ing unit komputasi SIMD sing diwenehake dening CPU lan GPU, sing ngidini sampeyan nggunakake mekanisme vektorisasi SIMD tanpa optimasi tingkat rendah lan panggunaan eksplisit instruksi SIMD ing kode kasebut. Kanggo nulis fungsi parallelizabel, sintaksis lan idiom sing akrab saka basa C digunakake - fungsi SPMD langsung berinteraksi karo fungsi lan struktur sing ditulis ing C/C++. Debugger sing wis ana bisa digunakake kanggo debug program.
ISPC nggunakake infrastruktur LLVM minangka backend kanggo nggawe kode lan optimasi. x86 (SSE2, SSE4, AVX, AVX2, AVX512) lan ARM (NEON) instruksi vektor didhukung, uga petungan offloading kanggo sisih GPU (Intel Gen9 lan Xe). Ing arsitektur kanthi pamblokiran vektor SSE ngolah 4 unsur sekaligus, panggunaan ISPC ndadekake bisa nggayuh percepatan eksekusi program kanthi kaping 3 utawa luwih, lan ing arsitektur kanthi blok vektor AVX ngolah 8 unsur sekaligus, akselerasi bisa tekan 5- 6 kaping. Kajaba iku, saliyane ukuran blok vektor, skala uga ditindakake kanthi eksekusi ing inti prosesor sing beda.
Inovasi utama sing ditambahake ing versi ISPC 1.31:
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° 64-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ little-endian Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ PowerPC (ppc64le). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ±ΠΎΡΠΊΠ° Π΄Π»Ρ POWER ISA 2.7 (POWER8+) Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ VSX (Vector Scalar Extension).
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΠ±ΠΎΡΠΎΡΠ½ΡΠ΅ ΡΠ΅Π»ΠΈ avx10.2nvl-x4, avx10.2nvl-x8, avx10.2nvl-x16, avx10.2nvl-x32 ΠΈ avx10.2nvl-x64, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ AVX10.2 (Advanced Vector Extensions) ΠΈ APX (Advanced Performance Extensions) Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Intel Nova Lake.
- Π Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΎΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ Π²ΡΠ±ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ ΡΠ΅Π»Π΅ΠΉ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ AMX (avx512spr, avx512gnr, avx10.2dmr) ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ AMX (Advanced Matrix Extensions) Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ CPU.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠΏΡΠΈΡ Β«βopt=disable-apxΒ» Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ x86 APX (egpr, ndd, push2pop2, ppx, ccmp, cf, nf, zu ΠΈ jmpabs), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ APX ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ ΡΠ΅Π»ΡΡ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ avx10.2dmr ΠΈ avx10.2nvl.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ (Β«balancedΒ») ΠΈ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΡΠΉ (Β«aggressiveΒ») ΡΠ΅ΠΆΠΈΠΌΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡ Β«βopt=fast-mathΒ» ΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΡΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
- Π ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
erf, erfc (ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΠ°ΡΡΡΠ°), expm1 (ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Β«exp(x)-1Β»), log1p (Β«log(1+x)Β»), sinh, cosh ΠΈ tanh (Π³ΠΈΠΏΠ΅ΡΠ±ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠ½ΡΡ, ΠΊΠΎΡΠΈΠ½ΡΡ ΠΈ ΡΠ°Π½Π³Π΅Π½Ρ). ΠΠΎΠ²ΡΡΠ΅Π½Π° ΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ asin, acos, atan ΠΈ log. - ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 32-Π±ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ (shuffles) Π΄Π»Ρ ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΠ΅Π»ΠΈ avx2-i32x16 ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ popcnt Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ avx2-i8x32, avx512skx-x32 ΠΈ avx512skx-x64.
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ LLVM ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½ Π΄ΠΎ Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅ΠΉΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π²Π΅ΡΠΊΠΈ 23.
Source: opennet.ru
