Выпуск компилятора ISPC 1.31, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Intel для языка Π‘ΠΈ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ SPMD

Компания Intel ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° компилятор ISPC 1.31 (Implicit SPMD Program Compiler), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для сборки ΠΊΠΎΠ΄Π° Π½Π° языкС Π‘ΠΈ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования SPMD (Single Program, Multiple Data), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… экзСмпляров ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Π‘++ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Π² Linux, Windows, macOS ΠΈ FreeBSD.

Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ SPMD ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для выполнСния Π½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ… SIMD, прСдоставляСмых CPU ΠΈ GPU, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ SIMD Π±Π΅Π· Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈ явного примСнСния Π² ΠΊΠΎΠ΄Π΅ SIMD-инструкций. Для написания распараллСливаСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ синтаксис ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΡ‹ языка Π‘ΠΈ β€” SPMD-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с функциями ΠΈ структурами, написанными Π½Π° C/C++. Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ.

Π’ качСствС бэкСнда для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ISPC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ инфраструктура LLVM. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ инструкции x86 (SSE2, SSE4, AVX, AVX2, AVX512) ΠΈ ARM (NEON), Π° Ρ‚Π°ΠΊΠΆΠ΅ вынос вычислСний Π½Π° сторону GPU (Intel Gen9 ΠΈ Xe). На Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… с Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ SSE, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎ 4 элСмСнта Π·Π° Ρ€Π°Π·, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ISPC Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ускорСния выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² 3 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·, Π° Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… с Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ AVX, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎ 8 элСмСнтов Π·Π° Ρ€Π°Π·, ускорСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 5-6 Ρ€Π°Π·. ΠŸΡ€ΠΈ этом ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСтся Π·Π° счёт выполнСния Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… процСссорных ядрах.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² вСрсии 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.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры | ProHoster