============================== Intel(r) SPMD Program Compiler ============================== ``ispc`` is a compiler for a variant of the C programming language, with extensions for `single program, multiple data `_ 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. Overview -------- ``ispc`` compiles a C-based SPMD programming language to run on the SIMD units of CPUs; 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 the 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, and AVX2 instruction sets. Features -------- ``ispc`` provides a number of key features to developers: * Familiarity as an extension of the C programming language: ``ispc`` supports familiar C syntax and programming idioms, while adding the ability to write SPMD programs. * High-quality SIMD code generation: the performance of code generated by ``ispc`` is often close to that of hand-written intrinsics code. * Ease of adoption with existing software systems: functions written in ``ispc`` directly interoperate with application functions written in C/C++ and with application data structures. * Portability across over a decade of CPU generations: ``ispc`` has targets for SSE2, SSE4, AVX (and soon, AVX2). * Portability across operating systems: Microsoft Windows, Mac OS X, and Linux are all supported by ``ispc``. * Debugging with standard tools: ``ispc`` programs can be debugged with standard debuggers (OS X and Linux only). Additional Resources -------------------- Prebuilt ``ispc`` binaries for Windows, OS X and Linux can be downloaded from the `ispc downloads page `_. See also additional `documentation `_ and additional `performance information `_.