|
| 1 | +# Vc: portable, zero-overhead SIMD library for C++ |
| 2 | + |
| 3 | +The use of SIMD is becoming increasingly important with modern CPUs. The SIMD |
| 4 | +instruction sets are being improved: new instructions are added as well as |
| 5 | +performance improvements relative to the scalar instructions. The next |
| 6 | +generations of CPUs will double the vector width. Neglecting SIMD in |
| 7 | +high-performance code thus becomes more expensive, compared to the theoretical |
| 8 | +performance of CPUs. |
| 9 | + |
| 10 | +The use of SIMD instructions is not easy. C/C++ compilers support some |
| 11 | +extensions to ease development for SSE and AVX. Commonly intrinsics are the |
| 12 | +available extension of choice. Intrinsics basically map every SIMD instruction |
| 13 | +to a C function. The use of these intrinsics leads to code which is hard to read |
| 14 | +and maintain in addition to making portability to other vector units |
| 15 | +complicated. |
| 16 | + |
| 17 | +Vc is a free software library to ease explicit vectorization of C++ code. It has |
| 18 | +an intuitive API and provides portability between different compilers and |
| 19 | +compiler versions as well as portability between different vector instruction |
| 20 | +sets. Thus an application written with Vc can be compiled for |
| 21 | + |
| 22 | +* AVX |
| 23 | +* SSE2 up to SSE4.2 or SSE4a |
| 24 | +* Scalar (fallback which works everywhere) |
| 25 | +* MIC (for Vc 1.0) |
| 26 | +* NEON (in development) |
| 27 | + |
| 28 | + |
| 29 | +## Build Requirements |
| 30 | + |
| 31 | +cmake >= 2.8.3 |
| 32 | + |
| 33 | +C++11 Compiler: |
| 34 | + |
| 35 | +* GCC >= 4.6 |
| 36 | +* clang >= 3.2 |
| 37 | +* ICC >= 13 |
| 38 | +* Visual Studio >= 2012 |
| 39 | + |
| 40 | + |
| 41 | +## Building and Installing Vc |
| 42 | + |
| 43 | +* Create a build directory: |
| 44 | + |
| 45 | +```sh |
| 46 | +$ mkdir build |
| 47 | +$ cd build |
| 48 | +``` |
| 49 | + |
| 50 | +* Call cmake with the relevant options: |
| 51 | + |
| 52 | +```sh |
| 53 | +$ cmake -DCMAKE_INSTALL_PREFIX=/opt/Vc -DBUILD_TESTING=OFF <srcdir> |
| 54 | +``` |
| 55 | + |
| 56 | +* Build and install: |
| 57 | + |
| 58 | +```sh |
| 59 | +$ make -j16 |
| 60 | +$ make install |
| 61 | +``` |
| 62 | + |
| 63 | + |
| 64 | +## Publications |
| 65 | + |
| 66 | +* [M. Kretz and V. Lindenstruth, "Vc: A C++ library for explicit |
| 67 | + vectorization", Software: Practice and Experience, |
| 68 | + 2011.](http://dx.doi.org/10.1002/spe.1149) |
| 69 | +* [M. Kretz, "Efficient Use of Multi- and Many-Core Systems with Vectorization |
| 70 | + and Multithreading", University of Heidelberg, |
| 71 | + 2009.](http://code.compeng.uni-frankfurt.de/attachments/13/Diplomarbeit.pdf) |
| 72 | + |
| 73 | + |
| 74 | +## Communication |
| 75 | + |
| 76 | +A channel on the freenode IRC network is reserved for discussions on Vc: |
| 77 | +[##vc on freenode](irc://chat.freenode.net:6665/##vc) |
| 78 | +([via SSL](ircs://chat.freenode.net:7000/##vc)) |
| 79 | + |
| 80 | + |
| 81 | +## License |
| 82 | + |
| 83 | +Vc is released under the LGPL 3. Since Vc is a template library this gives you |
| 84 | +a lot of freedom. For the details you can take a look at the [Licensing FAQ of |
| 85 | +Eigen](http://eigen.tuxfamily.org/index.php?title=Licensing_FAQ) which is a C++ |
| 86 | +template library released under the LGPL 3 or GPL 2. |
0 commit comments