All Versions
27
Latest Version
Avg Release Cycle
91 days
Latest Release
1351 days ago

Changelog History
Page 2

  • v10.2.aarch64sbsa

    October 04, 2019
  • v10.1

    January 29, 2019
  • v10.1.update2

    July 04, 2019
  • v10.1.update1

    March 25, 2019
  • v1.11.0-rc1 Changes

    November 23, 2020

    Summary

    ๐Ÿ›  Thrust 1.11.0 is a major release providing bugfixes and performance enhancements. It includes a new sort algorithm that provides up to 2x more performance from thrust::sort when used with certain key types and hardware. The new thrust::shuffle algorithm has been tweaked to improve the randomness of the output. Our CMake package and build system continue to see improvements with better add_subdirectory support, installation rules, status messages, and other features that make Thrust easier to use from CMake projects. The release includes several other bugfixes and modernizations, and received updates from 12 contributors.

    ๐Ÿ†• New Features

    • ๐ŸŽ NVIDIA/cub#204: New implementation for thrust::sort on CUDA when using 32/64-bit numeric keys on Pascal and up (SM60+). This improved radix sort algorithm provides up to 2x more performance. Thanks for Andy Adinets for this contribution.
    • โšก๏ธ #1310, #1312: Various tuple-related APIs have been updated to use variadic templates. Thanks for Andrew Corrigan for these contributions.
    • #1297: Optionally add install rules when included with CMake's add_subdirectory. Thanks to Kai Germaschewski for this contribution.

    ๐Ÿ› Bug Fixes

    • ๐Ÿ‘ #1309: Fix thrust::shuffle to produce better quality random distributions. Thanks to Rory Mitchell and Daniel Stokes for this contribution.
    • #1337: Fix compile-time regression in transform_inclusive_scan and transform_exclusive_scan.
    • #1306: Fix binary search middle calculation to avoid overflows. Thanks to Richard Barnes for this contribution.
    • #1314: Use size_t for the index type parameter in thrust::tuple_element. Thanks to Andrew Corrigan for this contribution.
    • ๐Ÿ— #1329: Fix runtime error when copying an empty thrust::device_vector in MSVC Debug builds. Thanks to Ben Jude for this contribution.
    • ๐Ÿ“ฆ #1323: Fix and add test for cmake package install rules. Thanks for Keith Kraus and Kai Germaschewski for testing and discussion.
    • #1338: Fix GCC version checks in thrust::detail::is_pod implementation. Thanks to Anatoliy Tomilov for this contribution.
    • ๐Ÿ›  #1289: Partial fixes for Clang 10 as host/c++ compiler. Exposed an nvcc bug that will be fixed in a future version of the CUDA Toolkit (NVBug 3136307).
    • #1272: Fix ambiguous iter_swap call when using thrust::partition with STL containers. Thanks to Isaac Deutsch for this contribution.
    • โšก๏ธ #1281: Update our bundled FindTBB.cmake module to support latest MSVC.
    • ๐Ÿ“ฆ #1298: Use semantic versioning rules for our CMake package's compatibility checks. Thanks to Kai Germaschewski for this contribution.
    • ๐Ÿ“ฆ #1300: Use FindPackageHandleStandardArgs to print standard status messages when our CMake package is found. Thanks to Kai Germaschewski for this contribution.
    • ๐Ÿšš #1320: Use feature-testing instead of a language dialect check for thrust::remove_cvref. Thanks to Andrew Corrigan for this contribution.
    • ๐Ÿ—„ #1319: Suppress GPU deprecation warnings.

    Other Enhancements

    • ๐Ÿšš NVIDIA/cub#213: Removed some tuning policies for unsupported hardware (<SM35).
    • โšก๏ธ References to the old Github repository and branch names were updated.
      • Github's thrust/cub repository is now NVIDIA/cub
      • Development has moved from the master branch to the main branch.
  • v1.10.0 Changes

    September 16, 2020

    Summary

    Thrust 1.10.0 is the major release accompanying the NVIDIA HPC SDK 20.9 release. It drops support for C++03, GCC < 5, Clang < 6, and MSVC < 2017. It also overhauls CMake support. Finally, we now have a Code of Conduct for contributors: https://github.com/thrust/thrust/blob/main/CODE_OF_CONDUCT.md

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿ‘ C++03 is no longer supported.
    • ๐Ÿ‘ GCC < 5, Clang < 6, and MSVC < 2017 are no longer supported.
    • C++11 is deprecated. Using this dialect will generate a compile-time warning. These warnings can be suppressed by defining THRUST_IGNORE_DEPRECATED_CPP_DIALECT or THRUST_IGNORE_DEPRECATED_CPP_11. Suppression is only a short term solution. We will be dropping support for C++11 in the near future.
    • Asynchronous algorithms now require C++14.
    • ๐Ÿ‘ CMake < 3.15 is no longer supported.
    • 0๏ธโƒฃ The default branch on GitHub is now called main.
    • Allocator and vector classes have been replaced with alias templates.

    ๐Ÿ†• New Features

    • โœ… #1159: CMake multi-config support, which allows multiple combinations of host and device systems to be built and tested at once. More details can be found here: https://github.com/thrust/thrust/blob/main/CONTRIBUTING.md#multi-config-cmake-options
    • ๐Ÿ”จ CMake refactoring:
      • Added install targets to CMake builds.
      • Added support for CUB tests and examples.
      • Thrust can be added to another CMake project by calling add_subdirectory with the Thrust source root (see #976).
        An example can be found here: https://github.com/thrust/thrust/blob/main/examples/cmake/add_subdir/CMakeLists.txt
      • CMake < 3.15 is no longer supported.
      • Dialects are now configured through target properties. A new THRUST_CPP_DIALECT option has been added for single config mode. Logic that modified CMAKE_CXX_STANDARD and CMAKE_CUDA_STANDARD has been eliminated.
      • Testing related CMake code has been moved to testing/CMakeLists.txt
      • Example related CMake code has been moved to examples/CMakeLists.txt
      • Header testing related CMake code has been moved to cmake/ThrustHeaderTesting.cmake
      • CUDA configuration CMake code has been moved to to cmake/ThrustCUDAConfig.cmake.
      • Now we explicitly include(cmake/*.cmake) files rather than searching CMAKE_MODULE_PATH - we only want to use the ones in the repo.
    • thrust::transform_input_output_iterator, a variant of transform iterator adapter that works as both an input iterator and an output iterator. The given input function is applied after reading from the wrapped iterator while the output function is applied before writing to the wrapped iterator. Thanks to Trevor Smith for this contribution.

    Other Enhancements

    • ๐Ÿ“š Contributor documentation: https://github.com/thrust/thrust/blob/main/CONTRIBUTING.md
    • Code of Conduct: https://github.com/thrust/thrust/blob/main/CODE_OF_CONDUCT.md. Thanks to Conor Hoekstra for this contribution.
    • ๐Ÿ‘Œ Support for all combinations of host and device systems.
    • ๐Ÿ‘ C++17 support.
    • #1221: Allocator and vector classes have been replaced with alias templates. Thanks to Michael Francis for this contribution.
    • #1186: Use placeholder expressions to simplify the definitions of a number of algorithms. Thanks to Michael Francis for this contribution.
    • #1170: More conforming semantics for scan algorithms:
      • Follow P0571's guidance regarding intermediate types.
      • https://wg21.link/P0571
      • The accumulator's type is now:
        • The type of the user-supplied initial value (if provided), or
        • The input iterator's value type if no initial value.
      • Follow C++ standard guidance for default binary operator type.
      • https://eel.is/c++draft/exclusive.scan#1
      • Thrust binary/unary functors now specialize a default void template parameter.
        Types are deduced and forwarded transparently.
      • Updated the scan's default binary operator to the new thrust::plus<> specialization.
      • The thrust::intermediate_type_from_function_and_iterators helper is no longer needed and has been removed.
    • #1255: Always use cudaStreamSynchronize instead of cudaDeviceSynchronize if the execution policy has a stream attached to it. Thanks to Rong Ou for this contribution.
    • โœ… #1201: Tests for correct handling of legacy and per-thread default streams. Thanks to Rong Ou for this contribution.

    ๐Ÿ› Bug Fixes

    • #1260: Fix thrust::transform_inclusive_scan with heterogeneous types. Thanks to Rong Ou for this contribution.
    • ๐Ÿ”€ #1258, NVC++ FS #28463: Ensure the CUDA radix sort backend synchronizes before returning; otherwise, copies from temporary storage will race with destruction of said temporary storage.
    • #1264: Evaluate CUDA_CUB_RET_IF_FAIL macro argument only once. Thanks to Jason Lowe for this contribution.
    • #1262: Add missing <stdexcept> header.
    • #1250: Restore some THRUST_DECLTYPE_RETURNS macros in async test implementations.
    • โœ… #1249: Use std::iota in CUDATestDriver::target_devices. Thanks to Michael Francis for this contribution.
    • โœ… #1244: Check for macro collisions with system headers during header testing.
    • ๐Ÿšš #1224: Remove unnecessary SFINAE contexts from asynchronous algorithms.
    • #1190: Make out_of_memory_recovery test trigger faster.
    • #1187: Elminate superfluous iterators specific to the CUDA backend.
    • ๐Ÿ›  #1181: Various fixes for GoUDA.
      Thanks to Andrei Tchouprakov for this contribution.
    • #1178, #1229: Use transparent functionals in placeholder expressions, fixing issues with thrust::device_reference and placeholder expressions and thrust::find with asymmetric equality operators.
    • #1153: Switch to placement new instead of assignment to construct items in uninitialized memory. Thanks to Hugh Winkler for this contribution.
    • #1050: Fix compilation of asynchronous algorithms when RDC is enabled.
    • #1042: Correct return type of thrust::detail::predicate_to_integral from bool to IntegralType. Thanks to Andreas Hehn for this contribution.
    • #1009: Avoid returning uninitialized allocators. Thanks to Zhihao Yuan for this contribution.
    • #990: Add missing <thrust/system/cuda/memory.h> include to <thrust/system/cuda/detail/malloc_and_free.h>. Thanks to Robert Maynard for this contribution.
    • โš  #966: Fix spurious MSVC conversion with loss of data warning in sort algorithms. Thanks to Zhihao Yuan for this contribution.
    • โž• Add more metadata to mock specializations for testing iterator in testing/copy.cu.
    • โž• Add missing include to shuffle unit test.
    • Specialize thrust::wrapped_function for void return types because MSVC is not a fan of the pattern return static_cast<void>(expr);.
    • ๐Ÿ—„ Replace deprecated tbb/tbb_thread.h with <thread>.
    • ๐Ÿ›  Fix overcounting of initial value in TBB scans.
    • ๐Ÿ‘‰ Use thrust::advance instead of += for generic iterators.
    • Wrap the OMP flags in -Xcompiler for NVCC
    • Extend ASSERT_STATIC_ASSERT skip for the OMP backend.
    • โž• Add missing header caught by tbb.cuda configs.
    • ๐Ÿ›  Fix "unsafe API" warnings in examples on MSVC: s/fopen/fstream/
    • ๐Ÿ›  Various C++17 fixes.
  • v1.9.10 Changes

    May 16, 2020

    Summary

    ๐Ÿš€ Thrust 1.9.10 is the release accompanying the NVIDIA HPC SDK 20.5. It adds CMake support for compilation with NVC++ and a number of minor bug fixes for NVC++. It also adds CMake find_package support.

    ๐Ÿ†• New Features

    • ๐Ÿ“ฆ #1130: CMake find_package support. This is significant because there is a legacy FindThrust.cmake script authored by a third party in widespread use in the community which has a bug in how it parses Thrust version numbers which will cause it to incorrectly parse 1.9.10. This script only handles the first digit of each part of the Thrust version number correctly: for example, Thrust 17.17.17 would be interpreted as Thrust 1.1.1701717. You can find directions for using the new CMake find_package support and migrating away from the legacy FindThrust.cmake here
    • #1129: Added thrust::detail::single_device_tls_caching_allocator, a convenient way to get an MR caching allocator for device memory, which is used by NVC++.

    Other Enhancements

    • ๐Ÿ”จ #1129: Refactored RDC handling in CMake to be a global option and not create two targets for each example and test.

    ๐Ÿ› Bug Fixes

    • #1129: Fix the legacy thrust::return_temporary_buffer API to support passing a size. This was necessary to enable usage of Thrust caching MR allocators with synchronous Thrust algorithms. This change has allowed NVC++โ€™s C++17 Parallel Algorithms implementation to switch to use Thrust caching MR allocators for device temporary storage, which gives a 2x speedup on large multi-GPU systems such as V100 and A100 DGX where cudaMalloc is very slow.
    • #1128: Respect CUDA_API_PER_THREAD_DEFAULT_STREAM. Thanks to Rong Ou for this contribution.
    • ๐Ÿšš #1131: Fix the one-policy overload of thrust::async::copy to not copy the policy, resolving use-afer-move issues.
    • #1145: When cleaning up type names in unittest::base_class_name, only call std::string::replace if we found the substring we are looking to replace.
    • #1139: Don't use cxx::__demangle in NVC++.
    • #1102: Don't use thrust::detail::normal_distribution_nvcc for Feta because it uses erfcinv, a non-standard function that Feta doesn't have.
  • v1.9.10-1 Changes

    July 27, 2020

    Summary

    ๐Ÿš€ Thrust 1.9.10-1 is the minor release accompanying the NVIDIA HPC SDK 20.7 release and the CUDA Toolkit 11.1 release.

    ๐Ÿ› Bug Fixes

    • ๐Ÿ—„ #1214, NVBug 200619442: Stop using std::allocator APIs deprecated in C++17.
    • #1216, NVBug 200540293: Make thrust::optional work with Clang when used with older libstdc++.
    • ๐Ÿ‘ #1207, NVBug 200618218: Don't force C++14 with older compilers that don't support it.
    • #1218: Wrap includes of <memory> and <algorithm> to avoid circular inclusion with NVC++.
  • v1.9.9 Changes

    May 16, 2020

    Summary

    ๐Ÿš€ Thrust 1.9.9 adds support for NVC++, which uses Thrust to implement GPU-accelerated C++17 Parallel Algorithms. thrust::zip_function and thrust::shuffle were also added. As of this release, C++03, C++11, GCC < 5, Clang < 6, and MSVC < 2017 are deprecated. Starting with the upcoming 1.10.0 release, C++03 support will be dropped entirely. All other deprecated platforms will be dropped in the near future.

    ๐Ÿ’ฅ Breaking Changes

    • #1082: Thrust now checks that it is compatible with the version of CUB found in your include path, generating an error if it is not. If you are using your own verison of CUB, it may be too old. It is recommended to simply delete your own version of CUB and use the version of CUB that comes with Thrust.
    • #1089 C++03 and C++11 are deprecated. Using these dialects will generate a compile-time warning. These warnings can be suppressed by defining THRUST_IGNORE_DEPRECATED_CPP_DIALECT (to suppress C++03 and C++11 deprecation warnings) or THRUST_IGNORE_DEPRECATED_CPP11 (to suppress C++11 deprecation warnings). Suppression is only a short term solution. We will be dropping support for C++03 in the 1.10.0 release and C++11 in the near future.
    • #1089: GCC < 5, Clang < 6, and MSVC < 2017 are deprecated. Using these compilers will generate a compile-time warning. These warnings can be suppressed by defining THRUST_IGNORE_DEPRECATED_COMPILER. Suppression is only a short term solution. We will be dropping support for these compilers in the near future.

    ๐Ÿ†• New Features

    • #1086: Support for NVC++ aka "Feta". The most significant change is in how we use __CUDA_ARCH__. Now, there are four macros that must be used:
      • THRUST_IS_DEVICE_CODE, which should be used in an if statement around device-only code.
      • THRUST_INCLUDE_DEVICE_CODE, which should be used in an #if preprocessor directive inside of the if statement mentioned in the prior bullet.
      • THRUST_IS_HOST_CODE, which should be used in an if statement around host-only code.
      • THRUST_INCLUDE_HOST_CODE, which should be used in an #if preprocessor directive inside of the if statement mentioned in the prior bullet.
    • #1085: thrust::shuffle. Thanks to Rory Mitchell for this contribution.
    • #1029: thrust::zip_function, a facility for zipping functions that take N parameters instead of a tuple of N parameters as thrust::zip_iterator does. Thanks to Ben Jude for this contribution.
    • #1068: thrust::system::cuda::managed_memory_pointer, a universal memory strongly typed pointer compatible with the ISO C++ Standard Library.

    Other Enhancements

    • โœ… #1029: Thrust is now built and tested with NVCC warnings treated as errors.
    • ๐Ÿ‘ #1029: MSVC C++11 support.
    • ๐Ÿ—„ #1029: THRUST_DEPRECATED abstraction for generating compile-time deprecation warning messages.
    • #1029: thrust::pointer<T>::pointer_to(reference).
    • โœ… #1070: Unit test for thrust::inclusive_scan with a user defined types. Thanks to Conor Hoekstra for this contribution.

    ๐Ÿ› Bug Fixes

    • #1088: Allow thrust::replace to take functions that have non-const operator().
    • #1094: Add missing constexpr to par_t constructors. Thanks to Patrick Stotko for this contribution.
    • #1077: Remove __device__ from CUDA MR-based device allocators to fix obscure "host function called from host device function" warning that occurs when you use the new Thrust MR-based allocators.
    • #1029: Remove inconsistently-used THRUST_BEGIN/END_NS macros.
    • #1029: Fix C++ dialect detection on newer MSVC.
    • #1029 Use _Pragma/__pragma instead of #pragma in macros.
    • #1029: Replace raw __cplusplus checks with the appropriate Thrust macros.
    • #1105: Add a missing <math.h> include.
    • #1103: Fix regression of thrust::detail::temporary_allocator with non-CUDA back ends.
    • #1111: Use Thrust's random number engine instead of std::s in device code.
    • ๐Ÿ—„ #1108: Get rid of a GCC 9 warning about deprecated generation of copy ctors.
  • v1.9.8

    February 29, 2020