Skip to content

Releases: root-project/veccore

VecCore 0.8.2

22 Nov 14:24
v0.8.2
f61e583
Compare
Choose a tag to compare

VecCore 0.8.2 is here!

What's Changed

  • Adapt to CMake policy CMP0146, FindCUDA.cmake removed (#25)
  • Disable std::simd backend when compiling with libc++ since their implementation is incomplete (#27)
  • Switch to C++17 as baseline C++ standard
  • Require CMake 3.16 or later, mark up to 3.30 as supported
  • Add support for Nvidia HPC Toolkit Compiler, GCC 15, and Clang 19
  • Drop math functions benchark compiled with -ffast-math
  • Fix memory leak in Julia set benchmark
  • Update builtin version of Vc to 1.4.5
  • Update bundled version of GoogleTest to 1.15.2 and Google benchmark to 1.9.0
  • Update scripts to build/test VecCore with CTest
  • Fix various compiler warnings from newer compiler versions

Full Changelog: v0.8.1...v0.8.2

VecCore 0.8.1

17 Mar 10:12
6b3e574
Compare
Choose a tag to compare

VecCore 0.8.1 is a patch release with a few minor fixes/improvements:

  • Update minimum required CMake version to 3.16
  • Mark all Mask{Empty,Full} as VECCORE_ATT_HOST_DEVICE
  • Avoid including SIMD headers when compiling with nvcc

VecCore 0.8.0

02 Jul 16:24
v0.8.0
e16e128
Compare
Choose a tag to compare

VecCore 0.8.0 adds a new backend based on GCC 11's implementation of std::experimental::simd, which is part of the experimental support for data parallel types in C++20. More details about it can be found on the release notes, and documentation is available at https://en.cppreference.com/w/cpp/experimental/simd/simd.

This backend offers the best of both Vc and UME::SIMD, as it performs well in most cases, from SSE2 up to AVX512. It is also recommended and performs better than both Vc and UME::SIMD on ARM/ARM64. However, it does require a recent version of GCC or Clang and requires compiling code in C++20 mode. The recommended way to use this backend is via the SIMDNative VecCore backend, which will map all vector types to their native SIMD types depending on what flags are enabled at compile time. A templated SIMDArray<N> backend is provided in order to offer fixed size support, but is not yet recommended as performance is not as good as with SIMDNative.

The version of Vc included with VecCore has been updated to the latest release, 1.4.2.

The online documentation has also been improved.

Support for compiling tests with Intel's DPC++ compiler has been added, and the continuous integration infrastructure has been expanded. GitHub Actions, and GitLab CI configurations now test various architectures.

VecCore 0.7.0

19 Jan 14:50
v0.7.0
cc9f37c
Compare
Choose a tag to compare

VecCore 0.7.0 adds new target for generating Doxygen documentation, as well as some bug fixes and other improvements listed below:

  • New build target to generate Doxygen documentation (available at https://root-project.github.io/veccore)
  • Support for Vc on ARM architecture, including ARM-based Macs
  • Moved VecCore implementation from custom type aliases for scalars to standard types
  • Type aliases still provided for backward compatibility, but standard types like float, double, and integer types from <cstdint> header should be preferred
  • Migrated tests and benchmarks away from deprecated interfaces
  • New vecCore::Load() interface returning a value to replace deprecated vecCore::FromPtr()
  • Fixed ReduceMin()/ReduceMax() on CUDA
  • Namespace math:: is now inline, so one can use, e.g. vecCore::Sin(x) instead of vecCore::math::Sin(x)
  • Several improvements to tests and continuous integration, addition of GitHub Actions
  • New nbody example

VecCore 0.6.0

09 Jul 13:30
v0.6.0
5f5ff69
Compare
Choose a tag to compare

VecCore 0.6.0 contains improvements to both performance and stability. The main highlights are listed below:

  • Windows is now a supported operating system
  • The builtin version of Vc has been updated to Vc 1.4.1
  • The required version of CMake has been updated to 3.9
  • Tests and benchmarks have been improved/optimized
  • New functions have been added: IsNegative() and Rsqrt()
  • Generic math functions now used when performance/accuracy of backend functions is not good
  • VecCore headers can now be used directly from the source directory
  • Continuous integration now has much wider coverage
    • Operating Systems: Windows, Mac OS X, and Linux
    • Architectures: arm, arm64, ppc64, x86_64 (from sse2 up to avx512)
    • Compilers:
      • GCC 5.4, 6.5, 7.3, 8.3, 9.1
      • Clang 5.0, 6.0, 7.1, 8.0, 9.0
      • Intel C/C++ Compiler 18, 19
      • Microsoft Visual Studio 16

VecCore 0.5.2

15 Nov 08:20
v0.5.2
7d557c2
Compare
Choose a tag to compare

This minor release includes the following changes:

  • Support for Vc 1.4.0 (introduces some API breakage, please refer to the release notes for more information)
  • Extra fixes to avoid warnings from Vc

Git Log

  • Guilherme Amadio (7):
    - Drop unused argc and argv parameters in newton.cc
    - Use Double_v for math function benchmarks
    - Fix VcVector backend for breakage introduced in Vc 1.4.0
    - Build builtin Vc with all warnings disabled
    - Abort CI build if ctest_configure() step fails
    - Suppress -Wshadow warnings coming from Vc headers

VecCore 0.5.1

23 Sep 18:04
d6d39fe
Compare
Choose a tag to compare

This is a minor update relative to VecCore 0.5.0. The main changes are

  • Specializations of vecCore::NumericLimits now use standard types (i.e. int instead of int32_t, etc)
  • A few false positive warnings about conditionally uninitialized variables have been fixed

VecCore 0.5.0

28 Aug 11:40
49ee302
Compare
Choose a tag to compare

This release of VecCore contains many changes from several contributors. For users upgrading from VecCore 0.4.2, here are some important changes to keep in mind:

  • Several improvements have been made to the implementation of math functions
  • Two new examples, for Julia and Newton fractals have been added
  • Google benchmark has been integrated to allow monitoring of math function performance
  • The built-in version of Vc has been updated to 1.3.3 (latest release)
  • VecCore now defines CMake imported targets so that dependent projects can automatically get compile definitions, include directories, and libraries to link against with a simple target_link_libraries(mylib VecCore::VecCore).
  • Load/Store specializations for both UME::SIMD and Vc backends have been added for improved performance

For more details, please refer to the shorlog below.

Git Log

  • Aldo Miranda Aguilar (1):
    - Fix for cubic root function. Cubic root added to unit tests.

  • Arif Ahmed (5):
    - Add benchmark for math functions
    - Add benchmarks for binary math functions
    - Use generic implementation for Abs and CopySign for UME::SIMD backend
    - Add TGamma function
    - Avoid slow implementations of math functions

  • Ben Morgan (2):
    - Add imported target for UMESIMD
    - Add imported target for VecCore

  • Guilherme Amadio (45):
    - Add explicit BUILD_TESTING option to CMakeLists.txt
    - Avoid inheriting warnings from Vc in VecCore
    - Add GD include directories to mandelbrot target
    - Add linking directory for GD to mandelbrot target
    - Use GD as imported target to inherit right properties
    - Update required version of CMake to 3.6
    - Use C-style I/O in julia fractal benchmark
    - Use newer Ubuntu 17.10 image for GitLab CI
    - Update README
    - Update LICENSE file
    - Bump version of Vc to 1.3.3
    - Include lighter headers and fit formatting
    - Fix new write_png() for when gdlib is not found and fix formatting
    - Build benchmarks on Travis and GitLab CI
    - Build with GD support on GitLab CI
    - Add load/store specialization for UME::SIMD backend
    - Add load/store specialization for Vc backend
    - Add imported target for VecCore only once
    - Use inline function to avoid unused warning
    - Use modern CMake constructs for VecCore build system
    - Set VecCore_FOUND to true in VecCoreConfig.cmake
    - Validate component names for VecCore
    - Add Trunc() to tested math functions
    - Use CTest with a CMake script to test VecCore
    - Fix builtin Vc when building with GCC 4.x
    - Rename and move timer header so it is not distributed
    - Import Google Benchmark
    - Add Trunc() function to UMESimd backend
    - Add test case for Load/Store API in VecCore
    - Loop over elements for generic implementation of math functions
    - Update math function specializations in Vc backend
    - Update math function specializations in UME::SIMD backend
    - Improve VecCore testing of math functions
    - Simplify benchmarks of math functions
    - Add math benchmarks compiled with -ffast-math
    - Properly deal with enabled backends in math benchmark
    - Disable Trunc() benchmark that is broken in Vc
    - Accept TARGET_ISA from environment in cmake/TestVecCore.cmake
    - Empty binary directory before each test build
    - Fix parallel build with builtins enabled
    - Use parallel builds with CTest
    - Use C++ headers in gtest, C headers break with ICC
    - Fix gbench compilation with ICC by using std::log
    - Prevent installation of gbench
    - Version 0.5.0

  • Xavier Valls (1):
    - Added a Julia set benchmark

  • Dmitry Sorokin (1):
    - Add Newton fractal benchmark (#5)

VecCore 0.4.2

11 Aug 07:30
v0.4.2
dd3ebdc
Compare
Choose a tag to compare

This release of VecCore contains the following changes:

  • Support for architectures other than x86_64 with the scalar backend.
    This means that code written with VecCore can now be compiled on ARM,
    PPC, and other architectures. When specific backends for NEON, etc,
    are added, the code will automatically benefit from vectorization.

  • Improve portability by using posix_memalign() instead of _mm_malloc()
    to allocate aligned memory. Users can use functions AlignedAlloc() and
    AlignedFree() from VecCore/Utilities.h header.

  • Added Convert() function to the API, to allow safe conversion between
    SIMD vectors of same number of elements, but different types.

  • Added a new benchmark: Mandelbrot fractal.

  • Bug fix: avoid installation of test targets.

VecCore 0.4.1

31 May 13:22
v0.4.1
73b002b
Compare
Choose a tag to compare

This release addresses the problem of lack of support for HTTPS in CMake in some systems, as well as some bugs in the build system of VecCore (e.g. in FindUMESIMD.cmake, which was simplified), and adds some new API functions. The new functions are:

  • EarlyReturnMaxLength(): Takes a variable and a maximum length for which it should return true when checking for a possible early return.
  • Lowest() and Highest() for integer types were added to vecCore::NumericLimits.
  • ReduceAdd(), ReduceMin(), and ReduceMax(): Takes a SIMD vector and return the sum/min/max within the vector as a scalar.

The CMake command line is now recorded for the user's reference with RecordCmdLine.cmake, added by Philippe Canal (@pcanal).