Vc Versions Save

SIMD Vector Classes for C++

1.4.4

7 months ago

portable SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

DOI

Vc is an open source 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.

Vc 1.4.4 is a bugfix release most notably incorporating fixes for current compiler versions.

User Changelog

Resolved Issues

New Contributors

Full Changelog: https://github.com/VcDevel/Vc/compare/1.4.3...1.4.4

Developer Changelog

1.4.3

1 year ago

portable SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

DOI

Vc is an open source 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.

Vc 1.4.3 is a bugfix release most notably incorporating fixes for current compiler versions.

User Changelog

Resolved Issues

New Contributors

Full Changelog: https://github.com/VcDevel/Vc/compare/1.4.2...1.4.3

Developer Changelog

1.4.2

2 years ago

portable SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

DOI

Vc is an open source 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.

Vc 1.4.2 is a bugfix release most notably incorporating fixes for current compiler versions.

User Changelog

Resolved Issues

  description
optimization Fixed a warning from cmake. (see #276)
optimization Added a missing include for GCC11. (see #275)
optimization Fixed a compilation error with MSVC. (see #272, #277)
optimization Fixed a corner case in the unit tests. (see #262)
optimization Fixed a warning in the unit tests. (see #261)
optimization Fixed a unit test compilation error with clang. (see #260)
optimization Removed the deprecated Vector<T, VectorAbi::Scalar>::reinterpretCast to fix a warning with GCC10. (see #254)
optimization Avoid potentially pessimizing std::move in return statements. (see #258)
optimization Avoid redefinition of bit_scan{forward,reverse} macros. (see #248
optimization Improved performance of simized random access containers.
  Documentation and CI cleanup. (see #222, #223, #251, #259)

Developer Changelog

1.4.1

5 years ago

portable SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

DOI

Vc is an open source 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.

Vc 1.4.1 is a bugfix release most notably incorporating improved codegen on gathers with AVX2 available.

User Changelog

Resolved Issues

                                 description
optimization Gather operations that required implicit multiplication of the index vector (because of gather into an array of structure) will now do a more efficient vector multiplication or, if possible, use a larger stride in the gather instruction to avoid the multiplication (see #214)
bug fixed Internal code cleanup (removal of dead code) to hit fewer compilation corner cases/errors.
bug fixed Buildsystem fixes for i686 and libmvec.

Developer Changelog

1.4.0

5 years ago

portable SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

DOI

Vc is an open source 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.

Vc 1.4.0 is a minor feature release with subtle changes in the interface and the start of an upgrade path to std::experimental::simd.

User Changelog

                                 description
API break Dropped all Intel MIC code. This was not AVX512, but the old KNC implementation. ICC 18 dropped support for the -mmic compile flag. Consequently, I removed the maintenance burden.
API break Vc::simdize<T, N> (with arithmetic T and suitable N) can now be an alias for Vc::Vector<T, Sse>, while AVX(2) is available. In Vc 1.3, this would use Vc::SimdArray<T, N> instead.
API break Fixed conversions from Vc::Vector<T> to Vc::SimdArray<U, Vc::Vector<T>::size()> to be implicit (as the documentation always said).
API break API addition Added Vc::simd<T, Abi> alias that resolves to the corresponding Vc::Vector or Vc::SimdArray type. Most importantly Vc::simd<T, Vc::simd_abi::fixed_size<N>> (alias: Vc::fixed_size_simd<T, N>) will give you (almost) Vc::SimdArray<T, N>. Note that this simd type does not implement the exact same interface as defined in the Parallelism TS v2. Most SimdArray operations return fixed_size_simd now, thus potentially breaking existing code (e.g. by breaking template argument deduction).
API addition Added load_interleaved and store_interleaved to be used with Vc::simdize<T> objects. This enables optimized loads from / stores to an AoS (array of structure) layout into/from structs of Vc vectors. This is currently only optimized for structures T where all data members have equal sizeof.
API addition Added a new constructor to simdized types: Vc::simdize<T>([](size_t n) { ... }) expects the lambda to return objects of type T, which will be placed at the corresponding index n in the resulting object.
API break API addition Vc::simd_for_each and Vc::simd_for_each_n will now vectorize any value_type via Vc::simdize. In Vc 1.3, only arithmetic types were vectorized, everything else used a fall-back to std::for_each. This fallback is removed in Vc 1.4. Consequently, the value_type must work with Vc::simdize.
behavior change bug fixed The sin, cos, and sincos functions now have increased precision at the cost of lower performance (with AVX2, you still get a speedup of ~8 over std::sin and std::cos). There's an option to use libmvec for Vc::sin and Vc::cos, which gives even higher performance for SSE4 and AVX2, but less performance for targets without SSE4 or just AVX.
CMake feature Modernize CMake to simplify usage of Vc in external projects via exported target.
behavior change bug fixed Binary operators are now stricter in the implicit conversions they allow. E.g. simd<int>(0) == 0l is now ill-formed. Because it would require a silent (potentially) narrowing conversion of the right hand side.

Developer Changelog

1.3.3

6 years ago

SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

Vc is an open source 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.

Vc 1.3.3 is a minor bug fix release.

User Changelog

  • Support for AVX2 gather instructions. Thanks to Kay F. Jahnke for the initial patch.
  • Shift optimizations
  • Preliminary support for compiling to non-x86 targets (uses only the Scalar ABI)
  • Resolve failing static assertions, moving the relevant tests to unit tests
  • Fixed is_simd_vector and is_simd_mask traits to consider the ElementType too. Thanks to Kay F. Jahnke.

Developer Changelog

1.3.2

7 years ago

SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

Vc is an open source 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.

Vc 1.3.2 is a small bug fix release.

User Changelog

  • Resolve warnings from GCC 6 about ignored attributes.
  • Support for Kaby Lake detection.

Developer Changelog

1.3.1

7 years ago

SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

Vc is an open source 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.

Vc 1.3.1 contains bug fixes, enables swap on scalar subscripts, and resolves a licensing issue in the examples.

User Changelog

  • swap(v[i], v[j]) did not compile. Vc 1.3.1 overloads the swap function and thus enables swapping scalars into/out of vector and mask objects.
  • The spline example has moved to the new Vc-examples-nonfree repository since it has a license that restricts redistribution.

Developer Changelog

1.3.0

7 years ago

SIMD zero-overhead language license GCC Support Clang Support ICC Support MSVC Support

Vc is an open source 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.

Vc 1.3.0 contains API cleanups, bug fixes, important compiler-specific optimizations & workarounds, and finally supports MSVC again

User Changelog

  • 64-bit MS VisualStudio 2015 support. (See #119 for some of the gory details.)
  • ICC 17 support (#143).
  • GCC 6 support (#125).
  • Workarounds for bad ICC code-gen (#135). Now Vc not only works correctly when compiled with ICC, but also performs as good (or better) as GCC and Clang.
  • Safer and more restrictive subscripting on Vector and Mask. There is a minor source compatibility break involved, since Vector::operator[] returned lvalue references before Vc 1.3 and returns a smart reference (rvalue) now. This change reduces the chance of miscompilation & internal compiler errors and reduces the reliance on non-standard C++ extensions.
  • Support for x32 compilation (like x86_64 but with 32-bit pointers).
  • Added scatter interface to SimdArray (thanks to Kay Jahnke).
  • simd_cast properly works with ADL now (i.e. you don't have to write fully qualified Vc::simd_cast anymore).
  • Added simd_for_each_n (thanks to Hartmut Kaiser).

Developer Changelog

1.2.0

8 years ago

Vc 1.2.0 contains API cleanups and bug fixes.

User Changelog

  • Improved documentation, especially on SimdArray<T, N>
  • Rewritten Vector<T> and SimdArray<T, N> binary operators for more correctness and to follow the latest proposal to the C++ standards committee
  • Fixed trait that queries mutability of callable to simd_for_each
  • A few build system cleanups
  • Improved ICC support

Developer Changelog