Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Intel SPMD Program Compiler
C++ LLVM Python Cuda C Makefile Other

Merge pull request #1001 from aguskov/master

Fixed alloy.py exiting on Windows
latest commit 93a7c14e95
@dbabokin dbabokin authored
Failed to load latest commit information.
builtins Some codestyle changes
contrib Vim syntax support for operators
docs Typo fix
examples Merge pull request #979 from Vsevolod-Livinskij/knc_header_long_int
llvm_patches Update 3_5_win_coff_debug_info.patch
ptxtools remove std::vector in favor of std::initializor_list in GPUTargets.h
tests Added structure alignment in headers; extended the test system to sup…
tests_errors Choose type for integer literals to match the target mask size (if po…
.gitignore Windows support
LICENSE.txt 3.7-related copyright update
Makefile revert disable NVPTX by default in Makefile
README.rst Include AVX2 in supported ISAs
alloy.py Fixed alloy.py exiting on Windows
ast.cpp Add assignments to Uniform as an unsafe thing when checking to run wi…
ast.h Copyright update
bitcode2cpp.py correction of --instrument option support
buildall.bat Fix various warnings / build issues on Windows
buildispc.bat Adding new line to error/warning message on Windows and fixing some t…
builtins.cpp Suppressed unneeded bitcode export warnings
builtins.h Suppressed unneeded bitcode export warnings
cbackend.cpp Fix for trunk revision #232397
check_env.py small corrections of test system
check_isa.cpp Typo fix
common.py removed some dead code
ctx.cpp Added explicit types for llvm::GetElementPtrInst::Create()
ctx.h Merge branch 'master' into nvptx_clean_master
decl.cpp added #ifdef ISPC_NVPTX_ENALED ... #endif guards
decl.h Copyright update
doxygen.cfg Bumping version to 1.8.2dev
expr.cpp Adding missing AddressOfExpr::GetLValueType()
expr.h Adding missing AddressOfExpr::GetLValueType()
fail_db.txt removed 180 generic target fails (which do pass now) from 'fail_db.txt'
func.cpp Fixed ISPC debug info generator, added debug tests
func.h Copyright update
ispc.cpp Fix for LLVM trunk (rL232885)
ispc.h Change dll export feature to a switch.
ispc.sln Windows build fix
ispc.vcxproj Windows build fix
lex.ll changed notation, task[Index,Count]_[x,y,z] -> task[Index,Count][1,2,…
llvmutil.cpp wiped out all LLVM 3.1 support
llvmutil.h Added explicit types for llvm::GetElementPtrInst::Create()
main.cpp Change opt help message to be more clear.
module.cpp Fixed ISPC debug info generator, added debug tests
module.h reversed macros LLVM_3_6 to LLVM_3_5+ in .cpp and .h files
opt.cpp Added explicit types for llvm::GetElementPtrInst::Create()
opt.h Copyright update
parse.yy wiped out all LLVM 3.1 support
perf.ini changing of examples
perf.py set 3.4 version of LLVM to alloy.py, perf.py correction
run_tests.py Added structure alignment in headers; extended the test system to sup…
simple.vcxproj Windows: fix some compiler warnings during build
stdlib.ispc Merge branch 'master' into nvptx_clean_master
stdlib2cpp.py Python build compatible on both python 2 and 3
stmt.cpp Merge branch 'master' into nvptx_clean_master
stmt.h Copyright update
sym.cpp Copyright update
sym.h Copyright update
test_static.cpp Added structure alignment in headers; extended the test system to sup…
test_static_cuda.cpp Whitespace and copyright fixes in test_static*.cpp
test_static_nvptx.cpp Whitespace and copyright fixes in test_static*.cpp
tt_dump_read.py tt_dump_read.py import bux fixed
type.cpp changed function mangling to be compatible with NVVM in CUDA7
type.h wiped out all LLVM 3.1 support
util.cpp wiped out all LLVM 3.1 support
util.h Copyright update

README.rst

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.

Something went wrong with that request. Please try again.