The use of SIMD is becoming increasingly important with modern CPUs. The SIMD instruction sets are being improved: new instructions are added as well as performance improvements relative to the scalar instructions. The next generations of CPUs will double the vector width. Neglecting SIMD in high-performance code thus becomes more expensive, compared to the theoretical performance of CPUs.
The use of SIMD instructions is not easy. C/C++ compilers support some extensions to ease development for SSE and AVX. Commonly intrinsics are the available extension of choice. Intrinsics basically map every SIMD instruction to a C function. The use of these intrinsics leads to code which is hard to read and maintain in addition to making portability to other vector units complicated.
Vc: Vector Classes¶Vc is a free software library to ease explicit vectorization of C++ code. It has an intuitive API and provides portability between different compilers and compiler versions as well as portability between different vector instruction sets. Thus an application written with Vc can be compiled for
- SSE2 up to SSE4.2
- SSE4a, XOP, FMA4, and FMA
- Scalar (fallback which works everywhere)
- XeonPhi (MIC) support is coming up
The git repository of Vc is available at git://code.compeng.uni-frankfurt.de/vc and also mirrored at http://gitorious.org/vc/vc. Tarballs of releases can be found on the Files page. A tarball of the current master branch is available from gitorious
Communication¶There exist two mailinglists:
- Subprojects: Vc Benchmarks
- Defect: 7 open / 37
- Feature: 13 open / 21
- Support: 0 open / 0
- Unit Test: 0 open / 2
- Benchmark: 0 open / 0
- Test Setup: 0 open / 8