Vc: A C++ library for explicit vectorization
12 Dec 2011
This is the pre-peer reviewed version of the following article: Kretz, M. and Lindenstruth, V. (2011), Vc: A C++ library for explicit vectorization. Software: Practice and Experience. doi: 10.1002/spe.1149, which has been published in final form at http://dx.doi.org/10.1002/spe.1149
It is an established trend that CPU development employs Moore’s Law to improve in parallelism much more than in scalar execution speed. This results in MIMD and SIMD enhancements, of which the MIMD developments have received the focus of library research and development in recent years. To make use of the latest hardware improvements, SIMD must receive a stronger focus of API research and development since the computational power can no longer be neglected and often auto-vectorizing compilers cannot generate the necessary SIMD code, as will be shown in this paper. Nowadays, the SIMD capabilities are sufficiently significant to warrant vectorization of algorithms requiring more conditional execution than was originally expected for SSE to handle. The Vc library (http://compeng.uni-frankfurt.de/?vc) was designed to support developers in the creation of portable vectorized code. Its capabilities and performance have been thoroughly tested. Vc provides portability of the source code, allowing full utilization of the hardware’s SIMD capabilities, without introducing any overhead.