Vc v1.0.0 Release Notes

Release Date: 2015-11-03 // about 6 years ago
  • ๐Ÿ”„ 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.
    • 0๏ธโƒฃ Load and store functions default to unaligned memory access. The old default was aligned memory access.

    Known issues

    • ๐Ÿ“š The documentation is incomplete and outdated.