Skip to content
This repository

Intel SPMD Program Compiler

Merge pull request #785 from dbabokin/version

Bumping version to 1.7.1dev
latest commit 39cb13a2e4
jbrodman jbrodman authored April 18, 2014
Octocat-spinner-32 builtins Copyright update March 12, 2014
Octocat-spinner-32 contrib Vim syntax support for operators December 19, 2013
Octocat-spinner-32 docs News update April 18, 2014
Octocat-spinner-32 examples 2014. April 10, 2014
Octocat-spinner-32 llvm_patches adding patch for LLVM 3.4 for bug #712 February 13, 2014
Octocat-spinner-32 tests Changing overload rules to match C++ behavior: Emit a warning when th… March 25, 2014
Octocat-spinner-32 tests_errors Choose type for integer literals to match the target mask size (if po… July 23, 2013
Octocat-spinner-32 .gitignore Windows support November 05, 2013
Octocat-spinner-32 LICENSE.txt Release notes, docs update April 18, 2014
Octocat-spinner-32 Makefile support LLVM trunk after r204934 and zlib commits April 01, 2014
Octocat-spinner-32 README.rst Include AVX2 in supported ISAs January 22, 2012
Octocat-spinner-32 alloy.py removing winstuff April 02, 2014
Octocat-spinner-32 ast.cpp Copyright update March 12, 2014
Octocat-spinner-32 ast.h Copyright update March 12, 2014
Octocat-spinner-32 bitcode2cpp.py correction of --instrument option support June 25, 2013
Octocat-spinner-32 buildall.bat Fix various warnings / build issues on Windows December 15, 2011
Octocat-spinner-32 buildispc.bat Adding new line to error/warning message on Windows and fixing some t… May 01, 2013
Octocat-spinner-32 builtins.cpp Copyright update March 12, 2014
Octocat-spinner-32 builtins.h Copyright update March 12, 2014
Octocat-spinner-32 cbackend.cpp Fixing MIC performance issue, which showed up when we switched to April 17, 2014
Octocat-spinner-32 check_env.py small corrections of test system September 23, 2013
Octocat-spinner-32 check_isa.cpp Typo fix October 29, 2013
Octocat-spinner-32 common.py correction of checking tools in testing environment December 26, 2013
Octocat-spinner-32 ctx.cpp adding const to Atomic::Void type March 17, 2014
Octocat-spinner-32 ctx.h Copyright update March 12, 2014
Octocat-spinner-32 decl.cpp adding const to Atomic::Void type March 17, 2014
Octocat-spinner-32 decl.h Copyright update March 12, 2014
Octocat-spinner-32 doxygen.cfg Bumping version to 1.7.1dev April 18, 2014
Octocat-spinner-32 expr.cpp Changing overload rules to match C++ behavior: Emit a warning when th… March 25, 2014
Octocat-spinner-32 expr.h Changing overload rules to match C++ behavior: Emit a warning when th… March 25, 2014
Octocat-spinner-32 fail_db.txt fail_db.txt update on Linux March 18, 2014
Octocat-spinner-32 func.cpp adding const to Atomic::Void type March 17, 2014
Octocat-spinner-32 func.h Copyright update March 12, 2014
Octocat-spinner-32 ispc.cpp Revert trigonometry to stdlib implementation on MIC April 14, 2014
Octocat-spinner-32 ispc.h Bumping version to 1.7.1dev April 18, 2014
Octocat-spinner-32 ispc.sln Migrating to VS solution files to VS2012 February 28, 2014
Octocat-spinner-32 ispc.vcxproj removing winstuff April 02, 2014
Octocat-spinner-32 lex.ll changed notation, task[Index,Count]_[x,y,z] -> task[Index,Count][1,2,… October 24, 2013
Octocat-spinner-32 llvmutil.cpp Fixing MIC performance issue, which showed up when we switched to April 17, 2014
Octocat-spinner-32 llvmutil.h Fixing MIC performance issue, which showed up when we switched to April 17, 2014
Octocat-spinner-32 main.cpp support of LLVM 3.5 November 21, 2013
Octocat-spinner-32 module.cpp Merge pull request #773 from ifilippov/alias_new March 26, 2014
Octocat-spinner-32 module.h Copyright update March 12, 2014
Octocat-spinner-32 opt.cpp Removing alias phases causing segfaults April 17, 2014
Octocat-spinner-32 opt.h Copyright update March 12, 2014
Octocat-spinner-32 parse.yy adding const to Atomic::Void type March 17, 2014
Octocat-spinner-32 perf.ini changing of examples December 10, 2013
Octocat-spinner-32 perf.py set 3.4 version of LLVM to alloy.py, perf.py correction February 13, 2014
Octocat-spinner-32 run_tests.py removing winstuff April 02, 2014
Octocat-spinner-32 simple.vcxproj Windows: fix some compiler warnings during build October 09, 2011
Octocat-spinner-32 stdlib.ispc Removing trailing spaces in stdlib.ispc March 12, 2014
Octocat-spinner-32 stdlib2cpp.py Python build compatible on both python 2 and 3 January 10, 2012
Octocat-spinner-32 stmt.cpp Copyright update March 12, 2014
Octocat-spinner-32 stmt.h Copyright update March 12, 2014
Octocat-spinner-32 sym.cpp Copyright update March 12, 2014
Octocat-spinner-32 sym.h Copyright update March 12, 2014
Octocat-spinner-32 test_static.cpp Copyright update March 12, 2014
Octocat-spinner-32 type.cpp These changes fix problem with debug info in LLVM 3.4 with structs an… April 02, 2014
Octocat-spinner-32 type.h Merge pull request #767 from jbrodman/nomosoa2 March 14, 2014
Octocat-spinner-32 util.cpp Copyright update March 12, 2014
Octocat-spinner-32 util.h Copyright update March 12, 2014
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.