Intel published the latest version of their compiler, ISPC 1.24 (Implicit SPMD Program Compiler). This compiler provides assembly of SI code with extensions to support the SPMD (Single Program, Multiple Data) parallel programming method. The project code is written in C++ and distributed under the BSD license. ISPC is supported on Linux, Windows, MacOS, Linux, FreeBSD, Android, iOS, and PS4/PS5.
ISPC compiles SI programs with SPMD extensions for execution on SIMD (Single Instruction, Multiple Data) computing blocks provided by CPUs and GPUs. This allows for the use of SIMD vectorization mechanisms in programs without the need for low-level optimization or explicit SIMD instruction usage. Parallelized functions are written using the familiar syntax of the SI language. SPMD function data can be integrated with C/C++ applications and interact directly with their functions and structures. Debugging programs can be done with existing debuggers.
The compiler uses the LLVM infrastructure for code generation and optimization. It leverages vector instructions from X86 (SSE2, SSE4, AVX, AVX2, AVX512) and ARM (Neon), as well as offloading calculations to GPUs (Intel Gen9 and XE). On architectures with SSE vector units processing 4 elements at a time, ISPC can accelerate program execution by 3 or more times. For architectures with AVX vector units processing 8 elements at a time, acceleration can reach 5-6 times. This scaling is achieved not only by the vector unit size but also by executing on different processor cores.
The key updates in ISPC 1.24 include:
- Added support for template specialization using unified whole and listed values as template parameters with the “uniform” sign.
- Introduction of the DOT function for various numeric types and int16, utilizing AVX instructions VNNI and AVX512-VNN.
- Macros for number constraints have been added.
- New target platforms supported: AVX2VNNI-I32X4, AVX2VNI-I32X8, AVX2VNI