Git Product home page Git Product logo

ispc's Introduction

Appveyor build status (Windows)

Open in GitHub Codespaces

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 and GPUs; it frequently provides a 3x or more speedup on architectures with 4-wide vector SSE units and 5x-6x on architectures 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 and GPU.

  • 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, macOS, and Linux as a host operating system and also capable to target Android, iOS, and PS4/PS5. It currently supports multiple flavours of x86 (SSE2, SSE4, AVX, AVX2, and AVX512), ARM (NEON), and Intel® GPU architectures (Gen9 and Xe family).

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 x86 SSE2, SSE4, AVX, AVX2, and AVX512, as well as ARM NEON and recent Intel® GPUs.

  • 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.

Installation

Official Release Binaries

You can download the official release binaries from the latest release page. Choose the appropriate version for your operating system and architecture.

Linux (Snap Store)

Linux users can install ispc using the Snap Store:

snap install ispc

Intel® oneAPI Distribution

ispc is distributed as part of the Intel® oneAPI. You can install it from the corresponding repositories for DEB-based and RPM-based Linux distributions. Follow the instructions below:

DEB-based Linux (Ubuntu, Debian, etc.) First, download the key to the system keyring:

wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

Next, add the signed entry to apt sources and configure the APT client to use the Intel repository:

echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list

Update the package list and install ispc:

sudo apt-get update
sudo apt-get install intel-oneapi-ispc

The installation location is inside the /opt/intel/ directory. To use ispc, either use the full path /opt/intel/oneapi/ispc/latest/bin/ispc or add the bin directory to your PATH:

source /opt/intel/oneapi/ispc/latest/env/vars.sh

Other Package Managers

Thanks to community support, ispc is also available through a variety of package managers on multiple operating systems.

Windows

To install ispc on Windows, you can download the latest release as zip archive from the latest release page. Then you need to unpack that to some directory. It is user's responsibility to set-up permissions for this directory according to the principle of least privilege.

Moreover, ispc depends on run-time components of Visual C++ (DLLs). These libraries can be installed with Microsoft Visual C++ Redistributable package. Instruction to install them can be found here.

Additional Resources

Latest ispc binaries corresponding to main branch can be downloaded from Appveyor for Linux and Windows See also additional documentation and additional performance information. If you have a bug report and have a question, you are welcome to open an issue or start a discussion on GitHub.

ispc's People

Contributors

aneshlya avatar dbabokin avatar nurmukhametov avatar ncos avatar deepakrajendrakumaran avatar jbrodman avatar vsevolod-livinskij avatar ifilippov avatar jduprat avatar jzielins avatar hidefromkgb avatar kraszkow avatar shishpan avatar mmp avatar apronin-intel avatar kurapov-peter avatar dmitryryintel avatar inequation avatar nipunn1313 avatar lectem avatar pengtu avatar jiapei100 avatar suluke avatar e3m3 avatar ingowald avatar jeffamstutz avatar zuban32 avatar johshoff avatar petecoup avatar aschrein avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.