Intel published its latest compiler, ISPC 1.31 (Implicit SPMD Program Compiler), which is designed for assembling C code with parallel programming extensions SPMD (Single Program, Multiple Data). This allows for parallel execution of multiple instances of the same program with different sets of input data. The project code is written in C++ and is distributed under the BSD license. ISPC 1.31 supports work on Linux, Windows, macOS, and FreeBSD.
C programs with SPMD extensions are compiled to run on SIMD computational units provided by the CPU and GPU. This enables the use of SIMD vectorization mechanisms without the need for low-level optimizations or explicit use of SIMD instructions in the code. By using familiar syntax and idioms of the C language, ISPC allows for writing parallelizable functions that directly interact with functions and structures written in C/C++. Programs can be debugged using existing debuggers.
ISPC utilizes the LLVM infrastructure as a backend for code generation and optimization. It supports x86 (SSE2, SSE4, AVX, AVX2, AVX512) and ARM (NEON) vector instructions. Additionally, calculations can be offloaded to the GPU side (Intel Gen9 and Xe). ISPC can accelerate program execution by 3 or more times on architectures with SSE vector blocks processing 4 elements at a time, and up to 5-6 times on architectures with AVX vector blocks processing 8 elements at a time. Furthermore, scalability is ensured by execution on different processor cores.
The latest version of ISPC, 1.31, introduces several new features:
- Experimental support for the 64-bit little-endian architecture of PowerPC (ppc64le) has been added, building by default for POWER ISA 2.7 (POWER8+) with VSX extensions.
- New build targets avx10.2nvl-x4, avx10.2nvl-x8, avx10.2nvl-x16, avx10.2