Intel recently released the ISPC 1.25 compiler (Implicit SPMD Program Compiler), which is designed to compile SI code with parallel programming extensions such as SPMD (Single Program, Multiple Data). These extensions allow for parallel execution of multiple copies of a program with different input sets. The project code is written in C++ and is distributed under the BSD license, with support for Linux, Windows, MacOS, and FreeBSD.
ISPC compiles programs with SPMD extensions for execution on computing blocks provided by CPUs and GPUs, enabling the use of SIMD vectorization mechanisms without low-level optimization or explicit use of SIMD instructions in the code. The compiler utilizes the standard syntax and idioms of the SI language for writing parallelized functions, with SPMD functions interacting directly with functions and structures written in C/C++. Existing debuggers can be used for debugging programs compiled with ISPC.
ISPC utilizes the LLVM infrastructure as a backend for code generation and optimization. It supports vector instructions for X86 (SSE2, SSE4, AVX, AVX2, AVX512) and ARM (Neon), as well as offloading computations to GPUs (Intel Gen9 and XE). By processing multiple elements simultaneously, the use of ISPC can significantly accelerate program execution, with potential speedups ranging from 3-6 times depending on the architecture and processor cores.
Some of the key updates in ISPC 1.25 include the ability to declare variables and functions with attributes like “noescape,” “adms_space (n),” “external_only,” and “unmangled” using the “__ATTRIBUTE__” keyword. Support for templates when declaring vectors and arrays has also been added, along with improved code generation for Foreach loops based on AVX2 and AVX512 instruction sets. The compilation of the standard library is now performed at the ISPC assembly stage, reducing assembly time by up to 60%. New assembly targets have been introduced for GPUs like Intel XE2 Battlemage and Lunar Lake, as well as CPUs like Intel Arrowlake, Lunarlake, and Graniterapids.