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.
ispc
compiles a C-based SPMD programming language to run on the SIMD units of
CPUs and GPUs; it frequently provides a 3x or more speedup on architectures
with 4-wide vector SSE units and 5x-6x on architectures 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 and GPU.
-
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, macOS, and Linux as a host operating system and also capable
to target Android, iOS, and PS4/PS5. It currently supports multiple flavours
of x86 (SSE2, SSE4, AVX, AVX2, and AVX512), ARM (NEON), and Intel® GPU
architectures (Gen9 and Xe family).
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 x86 SSE2, SSE4, AVX, AVX2, and AVX512, as well as ARM NEON and recent Intel® GPUs. -
Portability across operating systems: Microsoft Windows, macOS, Linux, and FreeBSD are all supported by
ispc
. -
Debugging with standard tools:
ispc
programs can be debugged with standard debuggers.
You can download the official release binaries from the latest release page. Choose the appropriate version for your operating system and architecture.
Linux users can install ispc
using the Snap Store:
snap install ispc
ispc
is distributed as part of the Intel® oneAPI. You can install it from the
corresponding repositories for DEB-based and RPM-based Linux distributions.
Follow the instructions below:
DEB-based Linux (Ubuntu, Debian, etc.) First, download the key to the system keyring:
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
Next, add the signed entry to apt sources and configure the APT client to use the Intel repository:
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
Update the package list and install ispc
:
sudo apt-get update
sudo apt-get install intel-oneapi-ispc
The installation location is inside the /opt/intel/
directory. To use ispc
,
either use the full path /opt/intel/oneapi/ispc/latest/bin/ispc
or add the
bin
directory to your PATH
:
source /opt/intel/oneapi/ispc/latest/env/vars.sh
Thanks to community support, ispc
is also available through a variety of
package managers on multiple operating systems.
To install ispc
on Windows, you can download the latest release as zip
archive from
the latest release page.
Then you need to unpack that to some directory. It is user's responsibility to
set-up permissions for this directory according to the principle of least
privilege.
Moreover, ispc
depends on run-time components of Visual C++ (DLLs). These
libraries can be installed with Microsoft Visual C++ Redistributable package.
Instruction to install them can be found
here.
Latest ispc
binaries corresponding to main
branch can be downloaded from
Appveyor for
Linux
and
Windows
See also additional documentation
and additional performance information. If
you have a bug report and have a question, you are welcome to open an
issue or start a
discussion on GitHub.