Navigation Chart

Main Navigation

Page Content

Vc: portable, zero-overhead SIMD library for C++

Vc Logo

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

  • AVX
  • SSE2 up to SSE4.2 or SSE4a
  • Scalar (fallback which works everywhere)
  • MIC (for Vc 1.0)
  • NEON (in development)

Development happens at code.compeng.uni-frankfurt.de. You can find an issue tracker, wiki and forums there.

Publications:

Communication

There exist two mailinglists for users and developers of Vc.

A channel on the freenode IRC network is reserved for discussions on Vc: ##vc on freenode (via SSL)

License

Vc is released under the LGPL 3. Since Vc is a template library this gives you a lot of freedom. For the details you can take a look at the Licensing FAQ of Eigen which is a C++ template library released under the LGPL 3 or GPL 2.

To Navigation Chart
empty

Bottom of Page