Intel áááş ááá°ááŽááąáŹ ááááŻááááşá instance ááťáŹá¸á á˝áŹááᯠááá°ááŽááąáŹ input data áĄá áŻáśááźááˇáş áĄááźááŻááşááŻááşááąáŹááşáááŻááşá áąáááˇáş C code ááᯠSPMD (Single Program, Multiple Data) parallel programming extensions ááťáŹá¸ááźááˇáş á áŻá ááşá¸áááş ISPC 1.26 (Implicit SPMD Program Compiler) ááᯠááŻááşááąááŹá¸ááŤáááşá áááąáŹááťááşááŻááşááᯠC++ ááźááˇáş ááąá¸ááŹá¸ááŹá¸ááźáŽá¸ BSD áááŻááşá ááşáĄáąáŹááşáá˝ááş ááźááˇáşááąááŹá¸áááşá Linuxá Windowsá macOS áážááˇáş FreeBSD áá˝ááş áĄááŻááşááŻááşáááş ááśáˇáááŻá¸ááąá¸áááşá
SPMD áááŻá¸ááťá˛áˇáážáŻááťáŹá¸ááŤáážáááąáŹ C ááááŻááááşááťáŹá¸ááᯠCPU áážááˇáş GPU áážááąá¸ááąáŹááşááąáŹ SIMD áá˝ááşááťááşáážáŻáá°áá áşááťáŹá¸áá˝ááş ááŻááşááąáŹááşáááşáĄáá˝ááş á áŻá ááşá¸ááŹá¸ááźáŽá¸á áĄáááˇáşááááˇáşááąáŹáááŻáááŻááąáŹááşá¸áá˝ááşáĄáąáŹááşááźáŻááŻááşááźááşá¸ááťáŹá¸áážááˇáş SIMD áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ááᯠááááťááźááşááŹá¸á á˝áŹáĄááŻáśá¸ááźáŻááźááşá¸ááážááᲠSIMD vectorization ááášáááŹá¸ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻáá˝ááˇáşááąá¸áááşá Parallelizable functions ááťáŹá¸áááŻááąá¸áááşá C language á áááşá¸áážáŽá¸ááąáŹ syntax áážááˇáş idioms ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻáááş - SPMD ááŻááşááąáŹááşááťááşááťáŹá¸áááş C/C++ áá˝ááşááąá¸ááŹá¸ááŹá¸ááąáŹ functions ááťáŹá¸áážááˇáş structures ááťáŹá¸áážááˇáş áááŻááşáááŻááş áĄááźááşáĄáážááşáááşááąáŹááşáážáŻáážááááşá ááááŻááááşááťáŹá¸ááᯠáĄáážáŹá¸áážáŹáááş áážáááźáŽá¸ááŹá¸ áĄáážáŹá¸áážáŹááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻáááŻááşáááşá
ISPC áááş LLVM áĄááźáąááśáĄááąáŹááşáĄáĄáŻáśáĄáŹá¸ ááŻááşááŻááşááŻááşááźááşá¸áážááˇáş áááŻáááŻááąáŹááşá¸áá˝ááşáĄáąáŹááşááźáŻááŻááşááźááşá¸áĄáá˝ááş ááąáŹááşáá˝ááşáá˝ááş áĄááŻáśá¸ááźáŻáááşá x86 (SSE2á SSE4á AVXá AVX2á AVX512) áážááˇáş ARM (NEON) vector áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸ááŹá¸ááźáŽá¸ GPU áááş (Intel Gen9 áážááˇáş Xe) áááŻáˇ áá˝ááşááťááşáážáŻááťáŹá¸ááᯠoffloading ááŻááşááŹá¸áááşá SSE vector blocks ááťáŹá¸ááźááˇáş áá áşááźáááşááťážááş element 4 ááŻááᯠprocessing ááŻááşááŹá¸ááąáŹ architectures áá˝ááşá ISPC áááŻáĄááŻáśá¸ááźáŻááźááşá¸áááş program execution acceleration ááᯠ3 ááźáááş áááŻáˇáááŻááş áááŻáˇáááşáááŻááĄáąáŹááşááźááşáááŻááşá áąáááşá áážááˇáş AVX vector blocks ááťáŹá¸ááźááˇáş áá áşááźáááşááťážááş element 8 ááŻááᯠprocessing ááŻááşááąáŹ áĄáážáááşáĄááŻááşáááş 5- áááŻáˇááąáŹááşáážááááŻááşáááşá á ááźáááşá áááŻáˇáĄááźááşá vector block ááĄáá˝ááşáĄá áŹá¸áĄááźááşá ááá°ááŽááąáŹááááŻáááşáᏠcores ááťáŹá¸ááąáŤáşáá˝ááşááŻááşááąáŹááşááźááşá¸ááźááˇáşá ááąá¸ááťá˛áˇááźááşá¸áááŻááąááťáŹá áąáááşá
ISPC ááŹá¸áážááşá¸ 1.26 áá˝ááş áááˇáşáá˝ááşá¸ááŹá¸ááąáŹ áĄááá ááŽáá˝ááşáááşá¸áá áşáážáŻááťáŹá¸-
- ARM ááááŻááŹáĄáá˝ááş áááŻáááŻááąáŹááşá¸áá˝ááşááąáŹ ááśáˇáááŻá¸áážáŻ-
- "--arch=arm" áĄááśá áĄááźáŻáĄáá°ááᯠááźáąáŹááşá¸áá˛áá˛áˇááźáŽá¸á ááᯠARMv8 (32-áá áş) ááááŻááŹáážááˇáş áááşáá˝ááşááąáááˇáş ARMv7 (8-bit ááŻááşáá˝ááş ARMv64 áĄáá˝ááşá "--arch=aarch64" áĄááśááᯠáááşáááşáĄááŻáśá¸ááźáŻáááˇáşáááş)á
- ARMv7 Cortex-a9 áážááˇáş Cortex-a15 ááááŻáááşááŹááťáŹá¸áĄáá˝ááş ááśáˇáááŻá¸áážáŻááᯠáááşáááŻááşá¸áááŻááşááŤááźáŽá
- Cortex-a55á Cortex-a78á Cortex-a510á Cortex-a520 ááááŻáááşááŹááťáŹá¸áĄááźááş Apple ARM ááááŻáááşááŹáĄáá áşááťáŹá¸áĄáá˝ááş ááśáˇáááŻá¸áážáŻ áááşáááˇáşááŹá¸áááşá
- áĄáá áşáááˇáşáá˝ááşá¸ááŹá¸ááąáŹ áááşááąáŹááşáážáŻáá áşáážááşááťáŹá¸- ááŽáá˝ááş-i16x16 áážááˇáş ááŽáá˝ááş-i8x32á
- ARM SDOT áážááˇáş UDOT vector áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ááᯠáĄááźáąááśá ááŻááşááąáŹááşááťááşááťáŹá¸áĄáá˝ááş ááśáˇáááŻá¸áážáŻ áááşááąáŹááşá¸áááˇáşááŹá¸ááŤáááşá
- áááŻáááŻááąáŹááşá¸áá˝ááşáĄáąáŹááş ááŻááşááąáŹááşááźáŽá¸ááźáŽá ARMv8 áĄáá˝ááş á á˝ááşá¸ááąáŹááşáááşáááş ááťááşá¸ááťážáĄáŹá¸ááźááˇáş 13% áááŻá¸ááŹáááşá
- áááşááąáŹááşáážáŻáá áşáážááş áĄááťááŻá¸áĄá áŹá¸áĄáá áşááᯠáááˇáşáá˝ááşá¸ááŹá¸áááş - "ááąáá°ááť" áááş compiler á áĄáá˝ááşá¸áááŻááşá¸ááááŻááŹááᯠáĄááąáŹááşá¸ááŻáśá¸ááźá áşáĄáąáŹááşááŻááşááźáŽá¸ áááşááąáŹááşáážáŻáá áşáážááşáĄáá áşááťáŹá¸ áááşááąáŤááşá¸áááˇáşááźááşá¸ááᯠáááŻá¸áážááşá¸á áąáááşá áĄááŻááşááŽááŹáááş ááááťááąáŹ ááŹáˇááşáá˛á á˝ááşá¸áááşááťáŹá¸áĄáá˝ááş áĄááźáąááśáá áşáážááşááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸áááşááźá áşááźáŽá¸á ááááťááąáŹ áááŻáááŻááąáŹááşá¸áá˝ááşáĄáąáŹááşááŻááşááąáŹááşáááŻááşáááˇáş áá áşáážááşááťáŹá¸ááᯠáĄáá˝ááşááá° áááşááąáŹááşáááŻááşáááşá ARM ááááŻááŹáĄáá˝ááş ááśáˇáááŻá¸áážáŻáááş ááąáá°ááťáá áşáážááşááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááźááşá¸áááŻáˇ ááźáąáŹááşá¸ááŹá¸áááşá
- "-O1" áááŻáááŻááąáŹááşá¸áá˝ááşáĄáąáŹááşááŻááşááąáŹááşáážáŻááŻááşáá˝ááş ááááşááŻááşááĄáá˝ááşáĄá áŹá¸ááᯠááťážáąáŹáˇááťáááşáĄáá˝ááş ááŻááşááŻááşááŻááşáá°áááş áááşá¸ááá˝ááşá¸áááşáážááˇáş ááŻááşááąáŹááşááťááşááᯠááźááşáá˝ááˇáşáááş ááťáááşáážáááŹá¸áááşá Built-in ááŻááşááąáŹááşááťááş count_leading_zeros áážááˇáş count_trailing_zeros áĄáá˝ááş áááŻáááŻááąáŹááşá¸áá˝ááşááąáŹ ááŻááşááŻááşááŻááşááźááşá¸áĄááźááş ááŻááşááąáŹááşááťááşááťáŹá¸ááž áá˝á˛áˇá ááşá¸ááŻáśááťáŹá¸ááᯠááźááşááąá¸áááˇáşáĄááŤáážááˇáş int8/int16 áĄááťááŻá¸áĄá áŹá¸ááťáŹá¸ááźááˇáş ááąááŹááᯠááááşá¸áááşá¸ááźááşá¸ áááŻáˇáááŻááş áááşáááˇáşáĄááŤáá˝ááş áááŻáááŻááąáŹááşá¸áá˝ááşááŹááŤáááşá
- "--enable-llvm-intrinsics" áĄááśááᯠáááşáážááşááźááşá¸ááźááˇáş áá˝ááˇáşááŹá¸áááˇáş LLVM áááşáááŻááşáááŻááşá¸áĄáá˝ááş ááśáˇáááŻá¸áážáŻ áááŻá¸ááťá˛áˇááŹá¸áááşá
- LLVM toolchain ááᯠááŹááąá¸áážáŻááťáŹá¸ááźááˇáş ááŹá¸áážááşá¸ 18.1.8 áááŻáˇ áĄááşááááşááŻááşááŹá¸áááşá ISPC áá˝ááşáĄááŻáśá¸ááźáŻáááˇáş LLVM ááŹá¸áážááşá¸áááŻáážáŹáá˝áąáááş áááşááááŻááᯠáááˇáşááŹá¸áááşá
- ááŻááşááąáŹááşááťááşááᯠááąáŤáşááąáŹáĄá፠áááááąá¸ááťááşááᯠááááˇáşááŻááşáááşáĄáá˝ááş "__attribute__((áááşáááŻááşá¸ááŹá¸áááş))" áááşáá˝ážááşá¸ááťááşááᯠáĄááŻáśá¸ááźáŻáááş áá˝ááˇáşááźáŻááŹá¸áááşá
- áááşááąáŹááşáážáŻáá áşáážááş avx512knl-x16 (KNL) ááᯠáááşáážáŹá¸áá˛áˇáááşá
- macOS áážááˇáş iOS áĄáá˝ááş áá áşáážááşááááşááąáŹááşá¸á áĄáááşá¸ááŻáśá¸ ááśáˇáááŻá¸ááąá¸ááŹá¸ááąáŹ ááŹá¸áážááşá¸ááᯠáááşáážááşáááş "--darwin-version-min" áá˝áąá¸á ááŹááᯠáááˇáşááŹá¸áááşá
source: opennet.ru
