Skip to content
Intel SPMD Program Compiler
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
builtins Adding avx2-i32x4 target Jul 18, 2019
cmake Fixed ospray build: relocation R_X86_64_PC32 against symbol stdout@@G… May 15, 2019
contrib [vim] Adding new and delete for allocation May 4, 2016
docker Updated llvm default version in docker files Apr 23, 2019
docs #1484 : Adding static intialization for varying. Jun 27, 2019
examples Removed KNC/KNL generic targets Jun 27, 2019
llvm_patches Fix for #1499 Jun 7, 2019
ptxtools Applied clang-format 8.0 Jan 31, 2019
scripts Added script to patch/build LLVM and ISPC Jan 30, 2019
src Adding avx2-i32x4 target Jul 18, 2019
tests Fixing noinline.ispc lit test for Mac Jul 17, 2019
tests_errors Fix for #1331 : Failing gracefully when type-casting is not possible … Aug 15, 2018
utils/lit Initial lit infrastructure Dec 10, 2018
.appveyor-clean-cache.txt Clean appveyour cache after dockers update Jun 8, 2019
.appveyor.yml Generate static link in appveyor builds Jun 26, 2019
.clang-format Applied clang-format 8.0 Jan 31, 2019
.gitignore Windows support Nov 5, 2013
.travis.yml Use Ubuntu 16.04 for LLVM 8.0 in travis Apr 3, 2019
CMakeLists.txt Adding avx2-i32x4 target Jul 18, 2019
LICENSE.txt Update LLVM license 2018->2019 Apr 19, 2019
Makefile Moved lex.ll and parse.yy to src folder Jan 15, 2019
README.md Fixed links to appveyor builds in Readme Jun 27, 2019
alloy.py Adding avx2-i32x4 target Jul 18, 2019
bitcode2cpp.py Added Cmake support Oct 18, 2018
check_env.py Fixing typos in check_env.py Nov 16, 2018
check_format.sh Ignore deleted files when checking format Jun 27, 2019
check_isa.cpp AARCH64 : Modifying checks and ensuring compatible isa/arch combinati… May 9, 2019
common.py exit by default for error() - prevents not specifying second argument Jan 16, 2019
doxygen.cfg Bumping development version to 1.11.1dev Apr 20, 2019
fail_db.txt Fail_db update for Windows. Jul 17, 2019
perf.ini Updated failed tests on win in fail_db and reduced scale for stencil … Dec 18, 2018
perf.py Adding avx2-i32x4 target Jul 18, 2019
run_tests.py Adding avx2-i32x4 target Jul 18, 2019
stdlib.ispc _fast implementations for rcp and rsqrt. (#1485) May 24, 2019
stdlib2cpp.py Python build compatible on both python 2 and 3 Jan 10, 2012
test_static.cpp Applied clang-format 8.0 Jan 31, 2019
test_static_cuda.cpp Applied clang-format 8.0 Jan 31, 2019
test_static_nvptx.cpp Applied clang-format 8.0 Jan 31, 2019
tt_dump_read.py tt_dump_read.py import bux fixed Jul 21, 2014

README.md

TravisCI build status (Linux) Appveyor build status (Windows)

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, AVX, AVX2, and AVX512 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, AVX2, and AVX512.

  • Portability across operating systems: Microsoft Windows, macOS, and Linux are all supported by ispc.

  • Debugging with standard tools: ispc programs can be debugged with standard debuggers.

Additional Resources

Prebuilt ispc binaries for Windows, macOS and Linux can be downloaded from the ispc downloads page. Latest ispc binaries corresponding to master branch can be downloaded from Appveyor for Linux and Windows See also additional documentation and additional performance information.

You can’t perform that action at this time.