Resources

Overview

ispc is 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
of program instances execute in parallel on the hardware.
(See the ispc documentation for
more details and examples that illustrate this concept.)

ispc compiles 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 by ispc, 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 of ispc:

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 SPMD ispc code 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.

ispc is an open source compiler with a
BSD
license. It uses the remarkable
LLVM Compiler Infrastructure for
back-end code generation and optimization and
is hosted on
github. It supports Windows, Mac, and Linux, with both x86
and x86-64 targets. It currently supports the SSE2, SSE4, AVX1,
AVX2, AVX512, and Xeon Phi "Knight's Corner" instruction sets.

(Please note that because ispc is not part of
the Intel
compiler products, support is provided through this community rather than
through Intel Premier Support.)