SPMD рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╣ C рднрд╛рд╖реЗрд╕рд╛рдареА рдЗрдВрдЯреЗрд▓рдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ ISPC 1.26 рдХрдВрдкрд╛рдЗрд▓рд░рдЪреЗ рдкреНрд░рдХрд╛рд╢рди

рдЗрдВрдЯреЗрд▓рдиреЗ ISPC 1.26 (рдЗрдореНрдкреНрд▓рд┐рд╕рд┐рдЯ SPMD рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдВрдкрд╛рдЗрд▓рд░) рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗ SPMD (рд╕рд┐рдВрдЧрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдорд▓реНрдЯрд┐рдкрд▓ рдбреЗрдЯрд╛) рд╕рдорд╛рдВрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╣ C рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрдЪрд╛рдВрд╕рд╣ рд╕рдорд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдЕрдиреЗрдХ рдШрдЯрдирд╛рдВрдЪреНрдпрд╛ рд╕рдорд╛рдВрддрд░ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд▓рд╛ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд. рдкреНрд░рдХрд▓реНрдк рдХреЛрдб C++ рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ BSD рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ. Linux, Windows, macOS рдЖрдгрд┐ FreeBSD рд╡рд░ рдХрд╛рд░реНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддреЗ.

SPMD рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╣ C рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ CPU рдЖрдгрд┐ GPU рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ SIMD рд╕рдВрдЧрдгрдХреАрдп рдпреБрдирд┐рдЯреНрд╕рд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирд╢рд┐рд╡рд╛рдп рдЖрдгрд┐ рдХреЛрдбрдордзреАрд▓ SIMD рд╕реВрдЪрдирд╛рдВрдЪрд╛ рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдкрд░ рди рдХрд░рддрд╛ SIMD рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭреЗрд╢рди рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рд╕рдорд╛рдВрддрд░ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдлрдВрдХреНрд╢рдиреНрд╕ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рд╕реА рднрд╛рд╖реЗрдЪреЗ рдкрд░рд┐рдЪрд┐рдд рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЖрдгрд┐ рдореБрд╣рд╛рд╡рд░реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд - SPMD рдлрдВрдХреНрд╢рдиреНрд╕ рдереЗрдЯ C/C++ рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕ рдЖрдгрд┐ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддрд╛рдд. рд╡рд┐рджреНрдпрдорд╛рди рдбреАрдмрдЧрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

ISPC рдХреЛрдб рдЬрдирд░реЗрд╢рди рдЖрдгрд┐ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирд╕рд╛рдареА рдмреЕрдХрдПрдВрдб рдореНрд╣рдгреВрди LLVM рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рд╡рд╛рдкрд░рддреЗ. x86 (SSE2, SSE4, AVX, AVX2, AVX512) рдЖрдгрд┐ ARM (NEON) рд╡реЗрдХреНрдЯрд░ рд╕реВрдЪрдирд╛ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд, рддрд╕реЗрдЪ GPU рдмрд╛рдЬреВрд▓рд╛ (Intel Gen9 рдЖрдгрд┐ Xe) рдСрдлрд▓реЛрдбрд┐рдВрдЧ рдЧрдгрдирд╛. рдПрдХрд╛рд╡реЗрд│реА 4 рдШрдЯрдХрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгрд╛рд▒реНрдпрд╛ SSE рд╡реНрд╣реЗрдХреНрдЯрд░ рдмреНрд▓реЙрдХреНрд╕рдЪреНрдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╡рд░, ISPC рдЪрд╛ рд╡рд╛рдкрд░ 3 рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рд╣реВрди рдЕрдзрд┐рдХ рд╡реЗрд│рд╛ рдкреНрд░реЛрдЧреНрд░реЕрдо рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди рдкреНрд░рд╡реЗрдЧ рдорд┐рд│рд╡рдгреЗ рд╢рдХреНрдп рдХрд░рддреЗ рдЖрдгрд┐ AVX рд╡реНрд╣реЗрдХреНрдЯрд░ рдмреНрд▓реЙрдХреНрд╕рдЪреНрдпрд╛ рдПрдХрд╛ рд╡реЗрд│реА 8 рдШрдЯрдХрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╡рд░, рдкреНрд░рд╡реЗрдЧ 5- рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрддреЛ. 6 рд╡реЗрд│рд╛ рд╢рд┐рд╡рд╛рдп, рд╡реЗрдХреНрдЯрд░ рдмреНрд▓реЙрдХрдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░рд╡рд░ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░реВрди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рджреЗрдЦреАрд▓ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

ISPC рдЖрд╡реГрддреНрддреА 1.26 рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗрд▓реЗ рдкреНрд░рдореБрдЦ рдирд╡рдХрд▓реНрдкрдирд╛:

  • ARM рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рд╕рдорд░реНрдерди:
    • "--arch=arm" рдзреНрд╡рдЬрд╛рдЪреЗ рд╡рд░реНрддрди рдмрджрд▓рд▓реЗ рдЖрд╣реЗ, рдЬреЗ рдЖрддрд╛ ARMv8 (32-рдмрд┐рдЯ) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, ARMv7 рд╢реА рдирд╛рд╣реА (8-рдмрд┐рдЯ рдореЛрдбрдордзреНрдпреЗ ARMv64 рд╕рд╛рдареА, "--arch=aarch64" рдзреНрд╡рдЬ рдЕрдЬреВрдирд╣реА рд╡рд╛рдкрд░рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ).
    • ARMv7 Cortex-a9 рдЖрдгрд┐ Cortex-a15 рдкреНрд░реЛрд╕реЗрд╕рд░рд╕рд╛рдареА рд╕рдорд░реНрдерди рдмрдВрдж рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрд╣реЗ.
    • рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрелрел, рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПренрео, рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрелрезреж, рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрелреиреж рдкреНрд░реЛрд╕реЗрд╕рд░, рддрд╕реЗрдЪ рдирд╡реАрди рдЕтАНреЕрдкрд▓ рдПрдЖрд░рдПрдо рдкреНрд░реЛрд╕реЗрд╕рд░рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдорд░реНрдерди.
    • рдирд╡реАрди рдмрд┐рд▓реНрдб рд▓рдХреНрд╖реНрдпреЗ рдЬреЛрдбрд▓реА: neon-i16x16 рдЖрдгрд┐ neon-i8x32.
    • ARM SDOT рдЖрдгрд┐ UDOT рд╡реЗрдХреНрдЯрд░ рд╕реВрдЪрдирд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.
    • рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, ARMv8 рдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕рд░рд╛рд╕рд░реА резрей% рдиреЗ рд╡рд╛рдврд▓реЗ рдЖрд╣реЗ.
  • рдПрдХ рдирд╡реАрди рдкреНрд░рдХрд╛рд░рдЪреЗ рдмрд┐рд▓реНрдб рдЯрд╛рд░реНрдЧреЗрдЯреНрд╕ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд - "рдЬреЗрдиреЗрд░рд┐рдХ", рдЬреЗ рдХрдВрдкрд╛рдпрд▓рд░рдЪреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓рд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рдирд╡реАрди рдмрд┐рд▓реНрдб рдЯрд╛рд░реНрдЧреЗрдЯреНрд╕ рдЬреЛрдбрдгреЗ рд╕реЛрдкреЗ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдХреНрд╖рдорддрд╛рдВрд╕рд╛рдареА рдмреЗрд╕ рдЯрд╛рд░реНрдЧреЗрдЯреНрд╕рдирд╛ рд╕рдорд░реНрдерди рджреЗрдгреЗ рд╣реА рдХрд▓реНрдкрдирд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪреНрдпрд╛ рд╡рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирд╕рд╣ рдЯрд╛рд░реНрдЧреЗрдЯреНрд╕ рд╕рд╣рдЬрдкрдгреЗ рддрдпрд╛рд░ рдХрд░рддрд╛ рдпреЗрддрд╛рдд. рдПрдЖрд░рдПрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рд╕рдорд░реНрдерди рд╕рд╛рдорд╛рдиреНрдп рд▓рдХреНрд╖реНрдпреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рд┐рдЪ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ.
  • "-O1" рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдореЛрдбрдордзреНрдпреЗ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдбрдЪрд╛ рдЖрдХрд╛рд░ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рдЬрдирд░реЗрдЯрд░рдиреЗ рддреНрдпрд╛рдЪреЗ рд▓реВрдк рдЖрдгрд┐ рдлрдВрдХреНрд╢рди рдЕрдирд░реЛрд▓рд┐рдВрдЧ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдмрд┐рд▓реНрдЯ-рдЗрди рдлрдВрдХреНрд╢рдиреНрд╕ count_leading_zeros рдЖрдгрд┐ count_trailing_zeros рд╕рд╛рдареА рд╕реБрдзрд╛рд░рд┐рдд рдХреЛрдб рдЬрдирд░реЗрд╢рди, рддрд╕реЗрдЪ рдлрдВрдХреНрд╢рдиреНрд╕рдордзреВрди рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдкрд░рдд рдХрд░рддрд╛рдирд╛ рдЖрдгрд┐ int8/int16 рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╣ рдбреЗрдЯрд╛ рд╕реЗрд╡реНрд╣ рдХрд░рддрд╛рдирд╛ рдХрд┐рдВрд╡рд╛ рд▓реЛрдб рдХрд░рддрд╛рдирд╛.
  • "--enable-llvm-intrinsics" рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реЗ, LLVM рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕рд╕рд╛рдареА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдорд░реНрдерди.
  • LLVM рдЯреВрд▓рдЪреЗрди рдкреЕрдЪреЗрд╕рд╕рд╣ рдЖрд╡реГрддреНрддреА резрео.рез.рео рдордзреНрдпреЗ рдЕрдкрдбреЗрдЯ рдХреЗрд▓реЗ. ISPC рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ LLVM рдЖрд╡реГрддреНрддреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдореЕрдХреНрд░реЛ рдЬреЛрдбрд▓реЗ.
  • рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╡рд░ рдЪреЗрддрд╛рд╡рдгреА рдкреНрд░рд┐рдВрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ "__attribute__((deprecated))" рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ.
  • рдмрд┐рд▓реНрдб рдЯрд╛рд░реНрдЧреЗрдЯ avx512knl-x16 (KNL) рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реЗ.
  • macOS рдЖрдгрд┐ iOS рд╕рд╛рдареА рд▓рдХреНрд╖реНрдп рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреА рдХрд┐рдорд╛рди рд╕рдорд░реНрдерд┐рдд рдЖрд╡реГрддреНрддреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА "--darwin-version-min" рдкрд░реНрдпрд╛рдп рдЬреЛрдбрд▓рд╛.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛