Skip to content
Intel SPMD Program Compiler
C++ LLVM M4 Python Yacc CMake Other
Branch: master
Clone or download

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benchmarks Adding popcnt benchmark Apr 22, 2020
builtins avx2-i8x32 target - functional, but perfomance need more work May 4, 2020
cmake Add include search path for cross targets on Linux May 29, 2020
contrib [vim] Adding new and delete for allocation May 4, 2016
docker Fedora dockerfile uses required CMake version May 11, 2020
docs Fix examples in "Array Types" section of doucmentation Jun 1, 2020
examples Printing warning for export with pointer to varying Apr 29, 2020
llvm_patches Patch for 1767 need to be applied for LLVM 9.0 as well May 29, 2020
scripts [WASM] Enable WASM in Appveyor builds with "latest" LLVM (Win & Linux) ( May 6, 2020
src Fix print for varying bools. Jun 1, 2020
tests Fix print for varying bools. Jun 1, 2020
tests_errors Fix for #1331 : Failing gracefully when type-casting is not possible … Aug 15, 2018
utils/lit Enable using 'cat' command in lit tests Dec 2, 2019
.appveyor-clean-cache.txt Clean Appveyor cache for #1767 May 30, 2020
.appveyor.yml [WASM] Enable WASM in Appveyor builds with "latest" LLVM (Win & Linux) ( May 6, 2020
.clang-format Applied clang-format 8.0 Jan 31, 2019
.gitignore Windows support Nov 5, 2013
.gitmodules Add submodule: Google Benchmark Mar 12, 2020
.travis.yml check_format.sh update May 21, 2020
CMakeLists.txt Adding ISPC_X86_ENABLED macro clening up __arm__/__aarch64__ definitions May 21, 2020
LICENSE.txt Copyright line without the date Apr 22, 2020
README.md Naming adjustments Apr 21, 2020
SECURITY.md Created SECURITY.md Apr 22, 2020
alloy.py Adding option to disable asserts in LLVM build (#1757) May 18, 2020
bitcode2cpp.py Change i386 to i686 in x86 triple. May 29, 2020
check_env.py Fix CMake version checking in check_env.py Mar 29, 2020
check_format.sh check_format.sh update May 21, 2020
check_isa.cpp Removing AVX1.1 (IvyBridge) targets. (#1532) Jul 21, 2019
common.py Update parse.yy not to use depricated derictive, will require bison 3.0. Sep 30, 2019
doxygen.cfg Bumping version to 1.14.0dev Apr 24, 2020
fail_db.txt Remove tests from fail_db.txt, which should not run at all Mar 2, 2020
perf.ini Updated failed tests on win in fail_db and reduced scale for stencil … Dec 18, 2018
perf.py Add new targets to scripts May 1, 2020
run_tests.py [WASM] Enable tests (#1750) May 6, 2020
stdlib.ispc --opt=disable-zmm switch Apr 23, 2020
stdlib2cpp.py Transition to Python3, closes #1471 Jul 29, 2019
test_static.cpp [WASM] Enable tests (#1750) May 6, 2020
third-party-programs.txt License update Apr 21, 2020
tt_dump_read.py Transition to Python3, closes #1471 Jul 29, 2019

README.md

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

Intel® Implicit SPMD Program Compiler (Intel® ISPC)

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, Linux, and FreeBSD 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.