Releases: VcDevel/Vc
Releases · VcDevel/Vc
Vc 1.2.0
Vc 1.2.0 contains API cleanups and bug fixes.
User Changelog
- Improved documentation, especially on
SimdArray<T, N>
- Rewritten
Vector<T>
andSimdArray<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
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
forSimdArray
. - 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
, andVector::exponent
. They are replaced by their non-member counterpartsVc::copysign
,Vc::isnegative
, andVc::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
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 genericSimdArray<T, N>
class template allowing you to build vector objects of arbitrary width. Thus, to get the oldsfloat_v
type back you'd write
using sfloat_v = Vc::SimdArray<float, Vc::short_v::size()>;
.
Note thatSimdArray
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 asVc::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 templateVc::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. UseVc::vector
and/orVc::array
as alternatives tostd::vector
and
std::array
to get an additional subscript overload acceptingVc::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
- 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)