2020-02-27 21:09:45 -08:00
2016-07-08 19:52:22 +03:00
2016-06-18 16:36:41 +02:00
2015-04-22 16:39:11 +03:00
2020-02-27 21:09:45 -08:00
2015-04-22 16:39:11 +03:00
2013-09-23 18:18:48 +04:00
2015-05-28 10:54:59 +03:00
2014-08-06 09:36:47 +04:00
2017-05-09 23:01:40 -04:00
2015-07-09 12:38:58 +03:00
2014-03-12 20:19:16 +04:00
2016-07-08 21:44:59 +03:00
2017-05-09 01:46:33 -04:00
2015-03-11 15:58:36 +03:00
2017-04-27 14:17:47 -04:00
2016-02-12 19:57:34 +03:00
2016-10-05 14:17:14 +03:00
2014-03-12 20:19:16 +04:00
2019-07-14 12:48:50 -07:00
2013-12-10 15:02:58 +04:00
2012-01-22 07:05:47 -08:00
2015-04-22 16:39:11 +03:00
2014-03-12 20:19:16 +04:00

==============================
Intel(r) SPMD Program Compiler
==============================

``ispc`` is a compiler for a variant of the C programming language, with
extensions for `single program, multiple data
<http://en.wikipedia.org/wiki/SPMD>`_ 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 <http://llvm.org>`_ for back-end
code generation and optimization and is `hosted on
github <http://github.com/ispc/ispc/>`_. 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 <http://ispc.github.com/downloads.html>`_.
See also additional
`documentation <http://ispc.github.com/documentation.html>`_ and additional
`performance information <http://ispc.github.com/perf.html>`_.
Description
No description provided
Readme 34 MiB
Languages
C++ 63.5%
LLVM 19.1%
M4 11.6%
Python 4.5%
Makefile 0.5%
Other 0.6%