Skip to content

Releases: VcDevel/Vc

Vc 1.2.0

25 Feb 15:58
Compare
Choose a tag to compare

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

Vc 1.1.0

16 Dec 12:01
Compare
Choose a tag to compare

The Vc 1.1.0 resolves several important issues that remained or were found in Vc 1.0.0.

User Changelog

  • Significant restructuring of the documentation, fixing many issues where the documentation still presented Vc 0.7 API.
  • Implement all math functions supported by Vector for SimdArray.
  • Fix iif to work for builtin types.
  • Reintroduce structured gather and scatter functions/constructors to Vector to restore API compatiblity with Vc 0.7. These functions are all marked as deprecated, suggesting to use the new subscript operators instead. This should ease porting applications from Vc 0.7.
  • Deprecate Vector::copySign, Vector::isNegative, and Vector::exponent. They are replaced by their non-member counterparts Vc::copysign, Vc::isnegative, and Vc::exponent.
  • Fix a few remaining license issues so that everything really says BSD now. This includes a replacement of Vc::array with a fork from libc++ instead of the previous code that was forked from libstdc++.
  • Resolve a few minor OS X compatibility issues.

Developer Changelog

Vc 1.0.0

03 Nov 09:41
Compare
Choose a tag to compare

Changelog

  • AVX (u)int_v is now only one SSE width instead of the full AVX width.
  • AVX2 support added with doubled width for (u)int_v and (u)short_v.
  • Xeon Phi support (Knights Corner). This requires an Intel compiler.
  • Dropped the guarantee of (u)int_v::size() == float_v::size(). Therefore, the
    implicit conversion between int and float vectors present in Vc 0.x is ill-
    formed with 1.0.
  • New simd_cast<T> cast function. It allows arbitrary conversions from one or
    more Vectors/SimdArrays to one or more Vectors/SimdArrays.
  • New simdize<T> expression "vectorizes T". This is still somewhat
    experimental.
  • sfloat_v is gone in favor of a generic SimdArray<T, N> class template allowing you to build vector objects of arbitrary width. Thus, to get the old sfloat_v type back you'd write
    using sfloat_v = Vc::SimdArray<float, Vc::short_v::size()>;.
    Note that SimdArray is not meant to be used as a container, i.e. N should be "small".
  • Besides Vc::Vector<T> you can also now use microarchitecture
    specific types directly, such as Vc::SSE::Vector<T>. This enables you to use SSE
    vectors and AVX vectors in the same translation unit. You should prefer
    SimdArray<T, N> in most cases, though.
  • In Vc 0.x the Vector<T> class template was defined multiple times in
    different namespaces. Now it's a single class template Vc::Vector<T, Abi> with
    aliases in the implementation namespaces. This enables you to write a function
    such as
    template <typename T, typename Abi> void f(Vc::Vector<T, Abi> x),
    which matches any Vc Vector type, whether that's the Scalar implementation or
    an actual SIMD implementation.
  • Gather & scatter received a new interface that is a lot more intuitive and
    flexible. Use Vc::vector and/or Vc::array as alternatives to std::vector and
    std::array to get an additional subscript overload accepting Vc::Vector
    objects as argument to the subscript operator for gather & scatter.
  • Requires C++11. Thus, many older compiler versions and, at least for now,
    MSVC are not supported anymore.
  • Load and store functions default to unaligned memory access. The old default was aligned memory access.

Known issues

  • The documentation is incomplete and outdated.

Vc 0.7.5

26 Aug 13:36
Compare
Choose a tag to compare
  • compilation warnings fixed
  • detect Haswell and Broadwell CPUs (#6)
  • bugfix: AVX::Mask::operator== returned incorrect answers on a few masks
  • more thorough mask testing
  • detect and work around clang 3.6 bug with AVX codegen (#20)
  • subscript workaround for GCC 5.1 and 5.2 (#9)
  • merge vc_compile_for_all_implementations from master, making it more robust
  • fix isfinite usage with ICC (#8)