A portable C++ library providing SIMD vector types for explicit data-parallel programming with zero-overhead abstractions.
Vc is a C++ library that provides portable SIMD vector types for explicit data-parallel programming. It enables developers to write code that efficiently utilizes CPU SIMD instructions (like SSE, AVX) by expressing parallelism through intuitive vector types, overcoming limitations of compiler auto-vectorization. The library offers zero-overhead abstractions that map directly to hardware instructions, ensuring high performance across different compilers and instruction sets.
C++ developers working on performance-critical applications such as scientific computing, game engines, physics simulations, or any domain requiring efficient data-parallel operations on CPUs. It's particularly useful for those who need portable SIMD code without resorting to low-level intrinsics.
Developers choose Vc because it provides a portable, intuitive, and zero-overhead way to write explicit SIMD code in C++, avoiding the verbosity and non-portability of compiler intrinsics. Its type-based approach to parallelism integrates naturally with C++ semantics, making it easier to write and maintain high-performance vectorized code across different hardware targets.
SIMD Vector Classes for C++
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides a consistent interface across compilers (GCC, clang, ICC, MSVC) and SIMD instruction sets like SSE and AVX, reducing hardware-specific code and ensuring cross-platform compatibility.
Designed to map directly to hardware SIMD instructions without runtime penalties, offering efficiency comparable to low-level intrinsics, as emphasized in the library's philosophy.
Uses operator overloading and standard semantics, making vectorized code more readable and maintainable than verbose intrinsics, as demonstrated in the scalar product example with float_v types.
Supports scalar execution for systems without SIMD hardware, allowing code to run unchanged, which enhances robustness and gradual migration paths.
The library is no longer actively developed, with the README stating it's in maintenance mode and recommending std-simd, leading to potential bugs and lack of modern feature support.
Key instruction sets like AVX-512 and ARM NEON are marked as in development or dropped, limiting performance on newer CPUs and making it less future-proof.
Requires CMake and specific compiler flags (e.g., -march) for optimal performance, which adds complexity compared to simpler auto-vectorization or direct intrinsic usage.
Documentation is generated via Doxygen and spread across multiple versioned releases, potentially making it harder to find cohesive, up-to-date guidance for current use.