ispcis a compiler for a variant of the C programming language, with extensions for “single program, multiple data “(SPMD) programming. Under the SPMD model, the programmer writes a program that generally appears to be a regular serial program, though the execution model is actually that a number ofprogram instancesexecute in parallel on the hardware. (See theispc documentationfor more details and examples that illustrate this concept.)
ispccompiles a C-based SPMD programming language to run on the SIMD units of CPUs and the Intel Xeon Phi ™ architecture; it frequently provides a 3x or more speedup on CPUs with 4-wide vector SSE units and 5x-6x on CPUs with 8-wide AVX vector units, without any of the difficulty of writing intrinsics code. Parallelization across multiple cores is also supported byispc, making it possible to write programs that achieve performance improvement that scales by both number of cores and vector unit size.
There are a few key principles in the design ofispc:
- To build a small set of extensions to the C language that would deliver excellent performance to performance-oriented programmers who want to run SPMD programs on the CPU.
- To provide a thin abstraction layer between the programmer and the hardware — in particular, to have an execution and data model where the programmer can cleanly reason about the mapping of their source program to compiled assembly language and the underlying hardware.
- To make it possible to harness the computational power of SIMD vector units without the extremely low-programmer-productivity activity of directly writing intrinsics.
- To explore opportunities from close coupling between C / C application code and SPMDispccode running on the same processor — to have lightweight function calls between the two languages and to share data directly via pointers without copying or reformatting.
ispcis an open source compiler with a BSD license. It uses the remarkable LLVM Compiler Infrastructurefor back-end code generation and optimization and ishosted on github. It supports Windows, Mac, and Linux, with both x 86 and x 86 – 64 targets. It currently supports the SSE2, SSE4, AVX1, AVX2, AVX 512, and Xeon Phi “Knight’s Corner” instruction sets.
ispcsupport is provided provided through github issues and theIntel SPMD Compiler Users Forum.