ISPC 1.8.0 is released! We have quite a few updates in this release. You are welcome to try and leave your feedback. Details about the release are in release notes quoted below.

Download page:

=== v1.8.0 === (16 October 2014)

A major new version of ISPC, which introduces experimental support for NVPTX
target, brings numerous improvements to our KNC (Xeon Phi) support, introduces
debugging support on Windows and fixes several bugs. We also ship experimental
build for Sony PlayStation4 target in this release. Binaries for all platforms
are based on LLVM 3.5.

Note that MacOS binaries are build for MacOS 10.9 Mavericks. Linux binaries are
compatible with kernel 2.6.32 (ok for RHEL6) and later.

More details:

* Experimental NVPTX support is available for users of our binary distribution
  on Linux only at the moment. MacOS and Windows users willing to experiment
  with this target are welcome to build it from source. Note that GPU imposes
  some limitation on ISPC language, which are discussed in corresponding section
  of ISPC User's Guide. Implementation of NVPTX support was done by our
  contributor Evghenii Gaburov.

* KNC support was greatly extended in knc.h header file. Beyond new features
  there are stability fixes and changes for icc 15.0 compatibility. Stdlib
  prefetch functions were improved to map to KNC vector prefetches.

* PS4 experimental build is Windows to PS4 cross compiler, which disables arch
  and cpu selection (which are preset to PS4 hardware).

* Debug info support on Windows (compatible with VS2010, VS2012 and VS2013).

* Critical bug fix, which caused code generation for incorrect target, despite
  explicit target switches, under some conditions.

* Stability fix of the bug, which caused print() function to execute under
  all-off mask under some conditions.

ISPC 1.7.0 is released! You are welcome to try and leave your feedback. Details about the release are in release notes quoted below.

Download page:

=== v1.7.0 === (18 April 2014)

A major new version of ISPC with several language and library extensions and
fixes in debug info support. Binaries for all platforms are based on patched
version on LLVM 3.4. There also performance improvements beyond switchover to
LLVM 3.4.

The list of language and library changes:

* Support for varying types in exported functions was added. See documentation
  for more details.

* get_programCount() function was moved from stdlib.ispc to
  examples/util/util.isph, which needs to be included somewhere in your
  project, if you want to use it.

* Library functions for saturated arithmetic were added. add/sub/mul/div
  operations are supported for signed and unsigned 8/16/32/64 integer types
  (both uniform and varying).

* The algorithm for selecting overloaded function was extended to cover more
  types of overloading. Handling of reference types in overloaded functions was
  fixed. The rules for selecting the best match were changed to match C++,
  which requires the function to be the best match for all parameters. In
  ambiguous cases, a warning is issued, but it will be converted to an error
  in the next release.

* Explicit typecasts between any two reference types were allowed.

* Implicit cast of pointer to const type to void* was disallowed.

The list of other notable changes is:

* Number of fixes for better debug info support.

* Memory corruption bug was fixed, which caused rare but not reproducible
  compile time fails.

* Alias analysis was enabled (more aggressive optimizations are expected).

* A bug involving inaccurate handling of "const" qualifier was fixed. As a
  result, more "const" qualifiers may appear in .h files, which may cause
  compilation errors.

Post has attachment
This poster will be presented on forthcoming GPU Technology Conference. Stop by if you are going to attend the conference!

Note forthcoming experimental CUDA support in ISPC.

Post has attachment
Posting on behalf of Evghenii Gaburov, an ISPC contributor, who works on GPU support:

I am pleased to announce that ISPC poster has been accepted to the GPU Technology Conference this year in San Jose, CA (  If you are attending the conference, please stop by our stand during poster showcase and reception on Monday, March 24 between 4-6pm.  After the conference, the poster will be available online at GTC web-page.

The poster present a new addition to ISPC: NVIDIA Kepler GPU support (currently in the experimental phase), and shows its relative performance compared to other hardware with the aim to demonstrate that ISPC can offer portability of performance across CPU, GPU and XeonPhi.

An interesting article studying RabbitCT benchmark (medical imaging application) on modern x86 hardware (SSE, AVX, AVX2 and KNC instruction set). Section 8 compares generated code performance versus intrinsic implementation. ISPC version has pretty impressive results.

Also the study of gather implementations in different architectures is quite interesting and I would recommend reading it if you are tuning code for AVX2 and/or KNC.

ISPC 1.6.0 is released! The focus in the version was on improved performance and stability, but we also have 3 new targets and several language and library extensions. You are welcome to try and leave your feedback.

Download page:

=== v1.6.0 === (19 December 2013)

A major new version of ISPC with major improvements in performance and stability. Linux and MacOS binaries are based on patched version of LLVM 3.3, while Windows version is based on LLVM 3.4rc3. LLVM 3.4 significantly improves stability on Win32 platform, so we've decided not to wait for official LLVM 3.4 release.

The list of the most significant changes is:
* New avx1-i32x4 target was added. It may play well for you, if you are focused on integer computations or FP unit in your hardware is 128 bit wide.
* Support for calculations in double precision was extended with two new targets avx1.1-i64x4 and avx2-i64x4.
* Language support for overloaded operators was added.
* New library shift() function was added, which is similar to rotate(), but is non-circular.
* The language was extended to accept 3 dimensional tasking - a syntactic sugar, which may facilitate programming of some tasks.
* Regression, which broke --opt=force-aligned-memory is fixed.

If you are not using pre-built binaries, you may notice the following changes:
* VS2012/VS2013 are supported.
* (with -b switch) can build LLVM for you on any platform now  (except MacOS 10.9, but we know about the problem and working on it). This is a preferred way to build LLVM for ISPC, as all required patches for better performance and stability will automatically apply.
* LLVM 3.5 (current trunk) is supported.

There are also multiple fixes for better performance and stability, most
notable are:
* Fixed performance problem for x2 targets.
* Fixed a problem with incorrect vzeroupper insertion on AVX target on Win32.

Some time ago we've announced clang-format and clang-modernize tools adoption, but this transition haven't happened yet. I'd like to give an update to those who are interested. We still planning to start using these tools project-wide, but we've faced a number of difficulties.

First, clang-format is actively developing tool, which means... that it's often broken in the trunk. We tried clang-format from 3.3 release and found out that it's not handling many nested ifdefs properly. In the time frame of evaluation trunk version was basically crashing. We reported this bug, but seems that it was well known before our report and it's already fixed. Second, we'd like to stick to some released version and as long as 3.3 is not working for us, we are looking forward 3.4 release.

Moving to C++11 compilation also appeared to be a bit more painful, than we've expected (given that we have to support Windows, Linux and Mac with different toolchains). Also Apple added some pain with changing default C++ library and starting distributing library headers  with XCode instead of OS in MacOS 10.9 & XCode 5.

So, we are planning to get back to clang-format and clang-modernize adoption after 3.4 release.

Right now we are supporting builds with LLVM 3.1-3.5, which seems a bit too much. We've been asked to keep 3.2 support, as NVidia CUDA toolchain is based on LLVM 3.2 and people would to have 3.2 support for experiments. We also keep finding performance regressions due to changes in LLVM and having around working 3.2 helps in performance analysis. So we are going to drop 3.1 support, but keep 3.2+. Any volunteers to do a clean up? Patches are welcome!

Post has attachment

Post has attachment
If you are new to ISPC and looking for an overview, I would recommend you to start from the foils presented by +James Brodman and +Matt Walsh on Siggraph 2013.   
Here's a link to download:
Wait while more posts are being loaded