22 KiB
Changelog for hipCUB
Full documentation for hipCUB is available at https://rocm.docs.amd.com/projects/hipCUB/en/latest/.
hipCUB 4.6.0 for ROCm 10.0
Added
- Return value checks for assorted locations in the codebase that were previously missing.
Fixed
- DeviceSegmentedRadixSort test failure when using hipMallocManaged with size 0.
- Fixed uninitialized automatic variable bug in BlockReduce.
Upcoming changes
- CCCL 2.8.x compatibility is deprecated. hipCUB and rocThrust will be brought forward to CCCL 3.0.x compatibility in an upcoming version.
hipCUB 4.5.0 for ROCm 7.14
Added
- gfx1250 support
Upcoming changes
- CCCL 2.8.x compatibility is deprecated. hipCUB and rocThrust will be brought forward to CCCL 3.0.x compatibility in an upcoming version.
Since last release ROCm 7.12
Optimizations
- Reduced build times for unit tests.
Resolved issues
- Fixed more memory leak issues with some unit tests.
hipCUB-4.3.0 for ROCm 7.12
Added
- Added
generate_resource_spec.cppto the test directory. It is now built as a new target by CMake. It generates the resource spec file required by CTest when running tests in parallel.
Changed
- Updated the documentation on how to run hipCUB tests on multiple GPUs in parallel.
Removed
- Removed the
GenerateResourceSpec.cmakescript - it is replaced by the addedgenerate_resource_spec.cppcode mentioned above.
hipCUB-4.2.0 for ROCm 7.2
Resolved issues
- Fixed memory leak issues with some unit tests.
hipCUB-4.1.0 for ROCm 7.1
Added
-
Exposed Thread-level reduction API
hipcub::ThreadReduce. -
Added
::hipcub::extents, with limited parity to C++23'sstd::extents. Onlystatic extentsis supported;dynamic extentsis not. Helper structs have been created to perform computations on::hipcub::extentsonly when the backend is rocPRIM. For the CUDA backend, similar functionality exists. -
Added
projects/hipcub/hipcub/include/hipcub/backend/rocprim/util_mdspan.hppto support::hipcub::extents. -
Added
::hipcub::ForEachInExtentsAPI. -
Added
hipcub::DeviceTransform::Transformandhipcub::DeviceTransform::TransformStableArgumentAddresses. -
hipCUB and its dependency rocPRIM have been moved into the new rocm-libraries "monorepo" repository (https://github.com/ROCm/rocm-libraries). This repository contains a number of ROCm libraries that are frequently used together.
- The repository migration requires a few changes to the way that hipCUB fetches library dependencies.
- CMake build option
ROCPRIM_FETCH_METHODmay be set to one of the following:PACKAGE- (default) searches for a preinstalled packaged version of the dependency. If it is not found, the build will fall back using optionDOWNLOAD, below.DOWNLOAD- downloads the dependency from the rocm-libraries repository. If git >= 2.25 is present, this option uses a sparse checkout that avoids downloading more than it needs to. If not, the whole monorepo is downloaded (this may take some time).MONOREPO- this options is intended to be used if you are building hipCUB from within a copy of the rocm-libraries repository that you have cloned (and therefore already contains rocPRIM). When selected, the build will try find the dependency in the local repository tree. If it cannot be found, the build will attempt to use git to perform a sparse-checkout of rocPRIM. If that also fails, it will fall back to using theDOWNLOADoption described above.
-
Added a new CMake option
-DUSE_SYSTEM_LIBto allow tests to be built from installedhipCUBprovided by the system.
Removed
- Removed
TexRefInputIterator, which was removed from CUB after CCCL's 2.6.0 release. This API should have already been removed, but somehow it remained and was not tested. - Deprecated
hipcub::ConstantInputIterator, userocprim::constant_iteratororrocthrust::constant_iteratorinstead. - Deprecated
hipcub::CountingInputIterator, userocprim::counting_iteratororrocthrust::counting_iteratorinstead. - Deprecated
hipcub::DiscardOutputIterator, userocprim::discard_iteratororrocthrust::discard_iteratorinstead. - Deprecated
hipcub::TransformInputIterator, userocprim::transform_iteratororrocthrust::transform_iteratorinstead. - Deprecated
hipcub::AliasTemporaries, which is considered to be internal API. Moved it to detail namespace. - Deprecated almost all functions in
projects/hipcub/hipcub/include/hipcub/backend/rocprim/util_ptx.hpp. - Deprecated hipCUB macros:
HIPCUB_MAX,HIPCUB_MIN,HIPCUB_QUOTIENT_FLOOR,HIPCUB_QUOTIENT_CEILING,HIPCUB_ROUND_UP_NEARESTandHIPCUB_ROUND_DOWN_NEAREST.
Changed
- Changed include headers to avoid relative includes that have slipped in.
- Changed
CUDA_STANDARDfor tests intest/hipcub, due to C++17 APIs such asstd::exclusive_scanis used in some tests. Still useCUDA_STANDARD 14fortest/extra. - Changed
CCCL_MINIMUM_VERSIONto2.8.2to align with CUB. - Changed
cmake_minimum_requiredfrom3.16to3.18, in order to supportCUDA_STANDARD 17as a valid value. - Add support for large num_items
DeviceScan,DevicePartitionandReduce::{ArgMin, ArgMax}. - Added tests for large num_items.
- The previous dependency-related build option
DEPENDENCIES_FORCE_DOWNLOADhas been renamedEXTERNAL_DEPS_FORCE_DOWNLOADto differentiate it from the new rocPRIM dependency option described above. It's behaviour remains the same - it forces non-ROCm dependencies (Google Benchmark and Google Test) to be downloaded instead of searching for existing installed packages. This option defaults toOFF.
Known issues
- The '__half' template specializations of Simd operators are currently disabled due to possible build issues with PyTorch.
hipCUB-4.0.0 for ROCm 7.0
Added
- Added a new cmake option,
BUILD_OFFLOAD_COMPRESS. When hipCUB is build with this option enabled, the--offload-compressswitch is passed to the compiler. This causes the compiler to compress the binary that it generates. Compression can be useful in cases where you are compiling for a large number of targets, since this often results in a large binary. Without compression, in some cases, the generated binary may become so large symbols are placed out of range, resulting in linking errors. The newBUILD_OFFLOAD_COMPRESSoption is set toONby default. - Added single pass operators in
agent/single_pass_scan_operators.hppwhich contains the following API:BlockScanRunningPrefixOpScanTileStatusScanTileStateReduceByKeyScanTileStateTilePrefixCallbackOp
- Added gfx950 support.
- Added an overload of
BlockScan::InclusiveScanthat accepts an initial value to seed the scan. - Added an overload of
WarpScan::InclusiveScanthat accepts an initial value to seed the scan. UnrolledThreadLoad,UnrolledCopy, andThreadLoadVolatilePointerwere added to align hipCUB with CUB.ThreadStoreVolatilePtrand theIterateThreadStorestruct were added to align hipCUB with CUB.- Added
hipcub::InclusiveScanInitfor CUB parity. - Additional Unit Tests for:
- block_exchange
- block_merge_sort
- block_radix_rank
- block_radix_sort
- block_reduce
- block_shuffle
Removed
- The AMD GPU targets
gfx803andgfx900are no longer built by default. If you would like to build for these architectures, please specify them explicitly in theAMDGPU_TARGETScmake option. - Deprecated
hipcub::AsmThreadLoadis removed, usehipcub::ThreadLoadinstead. - Deprecated
hipcub::AsmThreadStoreis removed, usehipcub::ThreadStoreinstead. - Deprecated
BlockAdjacentDifference::FlagHeads,BlockAdjacentDifference::FlagTailsandBlockAdjacentDifference::FlagHeadsAndTailshave been removed. - This release removes support for custom builds on gfx940 and gfx941.
- Removed C++14 support, only C++17 is supported.
Changed
- The NVIDIA backend now requires CUB, Thrust, and libcu++ 2.7.0. If they aren't found, they will be downloaded from the NVIDIA CCCL repository.
- Updated
thread_loadandthread_storeto align hipCUB with CUB. - All kernels now have hidden symbol visibility. All symbols now have inline namespaces that include the library version, (for example, hipcub::HIPCUB_300400_NS::symbol instead of hipcub::symbol), letting the user link multiple libraries built with different versions of hipCUB.
- Modified the broadcast kernel in warp scan benchmarks. The reported performance may be different to previous versions.
- The
hipcub::detail::accumulator_tin rocPRIM backend has been changed to utiliserocprim::accumulator_t. - The usage of
rocprim::invoke_result_binary_op_thas been replaced withrocprim::accumulator_t.
Resolved issues
- Fixed an issue where
Sort(keys, compare_op, valid_items, oob_default)inblock_merge_sort.hppwould not fill in elements that are out of range (items aftervalid_items) withoob_default. - Fixed an issue where
ScatterToStripedFlaggedinblock_exhange.hppwas calling the wrong function.
Known issues
BlockAdjacentDifference::FlagHeads,BlockAdjacentDifference::FlagTailsandBlockAdjacentDifference::FlagHeadsAndTailshave been removed from hipCUB's CUB backend. They were already deprecated as of version 2.12.0 of hipCUB and they were removed from CCCL (CUB) as of CCCL's 2.6.0 release.BlockScan::InclusiveScanfor the NVIDIA backend does not compute the block aggregate correctly when passing an initial value parameter. This behavior is not matched by the AMD backend.
Upcoming Changes
BlockAdjacentDifference::FlagHeads,BlockAdjacentDifference::FlagTailsandBlockAdjacentDifference::FlagHeadsAndTailswere deprecated as of version 2.12.0 of hipCUB, and will be removed from the rocPRIM backend in a future release for the next ROCm major version (ROCm 7.0.0).
hipCUB-3.4.0 for ROCm 6.4.0
Added
- Added regression tests to
rtest.py. These tests recreate scenarios that have caused hardware problems in past emulation environments. Usepython rtest.py [--emulation|-e|--test|-t]=regressionto run these tests. - Added extended tests to
rtest.py. These tests are extra tests that did not fit the criteria of smoke and regression tests. These tests will take much longer to run relative to smoke and regression tests. Usepython rtest.py [--emulation|-e|--test|-t]=extendedto run these tests. - Added
ForEach,ForEachN,ForEachCopy,ForEachCopyNandBulkfunctions to have parity with CUB. - Added the
hipcub::CubVectortype for CUB parity. - Added
--emulationoption forrtest.py- Unit tests can be run with
[--emulation|-e|--test|-t]=<test_name>
- Unit tests can be run with
- Added
DeviceSelect::FlaggedIfand its inplace overload. - Added CUB macros missing from hipCUB:
HIPCUB_MAX,HIPCUB_MIN,HIPCUB_QUOTIENT_FLOOR,HIPCUB_QUOTIENT_CEILING,HIPCUB_ROUND_UP_NEARESTandHIPCUB_ROUND_DOWN_NEAREST. - Added
hipcub::AliasTemporariesfunction for CUB parity.
Changed
- Removed usage of
std::unary_functionandstd::binary_functionintest_hipcub_device_adjacent_difference.cpp - Changed the subset of tests that are run for smoke tests such that the smoke test will complete with faster run-time and to never exceed 2GB of vram usage. Use
python rtest.py [--emulation|-e|--test|-t]=smoketo run these tests. - The
rtest.pyoptions have changed.rtest.pyis now run with at least either--test|-tor--emulation|-e, but not both options. - The NVIDIA backend now requires CUB, Thrust and libcu++ 2.5.0. If it is not found it will be downloaded from the NVIDIA CCCL repository.
- Changed the C++ version from 14 to 17. C++14 will be deprecated in the next major release.
Known issues
- When building on Windows using HIP SDK for ROCm 6.4,
hipMallocreturnshipSuccesseven when the size passed to it is too large and the allocation fails. Because of this, limits have been set for the maximum test case sizes for some unit tests such as HipcubDeviceRadixSort's SortKeysLargeSizes .
hipCUB 3.3.0 for ROCm 6.3.0
Added
- Support for large indices in
hipcub::DeviceSegmentedReduce::*has been added, with the exception ofDeviceSegmentedReduce::Arg*. Although rocPRIM's backend provides support for all reduce variants, CUB does not support large indices inDeviceSegmentedReduce::Arg*. For this reason, large index support is not available forhipcub::DeviceSegmentedReduce::Arg*.
Changed
- Changed the default value of
rmake.py -atodefault_gpus. This is equivalent togfx906:xnack-,gfx1030,gfx1100,gfx1101,gfx1102,gfx1151,gfx1200,gfx1201. - The NVIDIA backend now requires CUB, Thrust, and libcu++ 2.3.2.
Resolved issues
- Fixed an issue in
rmake.pywhere the list storing cmake options would contain individual characters instead of a full string of options. - Fixed an issue where
config.hppwas not included in all hipCUB headers, resulting in build errors.
hipCUB-3.2.0 for ROCm 6.2.0
Added
-
Add
DeviceCopyfunction to have parity with CUB. -
In the rocPRIM backend, added
enum WarpExchangeAlgorithm, which is used as the new optional template argument forWarpExchange.- The potential values for the enum are
WARP_EXCHANGE_SMEMandWARP_EXCHANGE_SHUFFLE. WARP_EXCHANGE_SMEMstands for the previous algorithm, whileWARP_EXCHANGE_SHUFFLEperforms the exchange via shuffle operations.WARP_EXCHANGE_SHUFFLEdoes not require any pre-allocated shared memory, but theItemsPerThreadmust be a divisor ofWarpSize.
- The potential values for the enum are
-
Added
tuple.hppwhich defines templateshipcub::tuple,hipcub::tuple_element,hipcub::tuple_element_tandhipcub::tuple_size. -
Added new overloaded member functions to
BlockRadixSortandDeviceRadixSortthat expose adecomposerargument. Keys of a custom type (key_type) can be sorted via these overloads, if an appropriate decomposer is passed. The decomposer has to implementoperator(const key_type&)which returns ahipcub::tupleof references pointing to members ofkey_type. -
On AMD GPUs (using the HIP backend), it is possible to issue hipCUB API calls inside of hipGraphs, with several exceptions:
- CachingDeviceAllocator
- GridBarrierLifetime
- DeviceSegmentedRadixSort
- DeviceRunLengthEncode Currently, these classes rely on one or more synchronous calls to function correctly. Because of this, they cannot be used inside of hipGraphs.
Changed
- The NVIDIA backend now requires CUB, Thrust and libcu++ 2.2.0. If it is not found it will be downloaded from the NVIDIA CCCL repository.
Fixed
- Fixed the derivation for the accumulator type for device scan algorithms in the rocPRIM backend being different compared to CUB. It now derives the accumulator type as the result of the binary operator.
debug_synchronoushas been deprecated in hipCUB-2.13.2, and it no longer has any effect. With this release, passingdebug_synchronousto the device functions results in a deprecation warning both at runtime and at compile time.- The synchronization that was previously achievable by passing
debug_synchronous=truecan now be achieved at compile time by setting theCUB_DEBUG_SYNC(or higher debug level) or theHIPCUB_DEBUG_SYNCpreprocessor definition. - The compile time deprecation warnings can be disabled by defining the
HIPCUB_IGNORE_DEPRECATED_APIpreprocessor definition.
- The synchronization that was previously achievable by passing
hipCUB-3.1.0 for ROCm 6.1.0
Changes
- CUB backend references CUB and Thrust version 2.1.0
- Updated the
HIPCUB_HOST_WARP_THREADSmacro definition to matchhost_warp_sizechanges from rocPRIM 3.0 - Implemented
__int128_tand__uint128_tsupport forradix_sort
Fixes
- Build issues with
rmake.pyon Windows when using Visual Studio 2017 15.8 or later (due to a breaking fix with extended aligned storage)
Additions
- Interface
DeviceMemcpy::Batchedfor batched memcpy from rocPRIM and CUB
hipCUB-3.0.0 for ROCm 6.0.0
Changes
- Removed
DOWNLOAD_ROCPRIM- You can force rocPRIM to download using
DEPENDENCIES_FORCE_DOWNLOAD
- You can force rocPRIM to download using
hipCUB-2.13.2 for ROCm 5.7.0
Changes
- CUB backend references CUB and Thrust version 2.0.1.
- Fixed
DeviceSegmentedReduce::ArgMinandDeviceSegmentedReduce::ArgMaxby returning the segment-relative index instead of the absolute one - Fixed
DeviceSegmentedReduce::ArgMinfor inputs where the segment minimum is smaller than the value returned for empty segments; an equivalent fix is applied toDeviceSegmentedReduce::ArgMax
Known issues
debug_synchronousno longer works on the CUDA platform; useCUB_DEBUG_SYNCinsteadDeviceReduce::Sumdoesn't compile on the CUDA platform for mixed extended-floating-point or floating-point InputT and OutputT typesDeviceHistogram::HistogramEvenfails on CUDA platform for[LevelT, SampleIteratorT] = [int, int].DeviceHistogram::MultiHistogramEvenfails on CUDA platform for[LevelT, SampleIteratorT] = [int, int/unsigned short/float/double]and[LevelT, SampleIteratorT] = [float, double]
hipCUB-2.13.1 for ROCm 5.5.0
Additions
- Benchmarks for
BlockShuffle,BlockLoad, andBlockStore
Changes
- The CUB backend references CUB and Thrust version 1.17.2
- Improved benchmark coverage for:
BlockScanby addingExclusiveScanBlockRadixSortby addingSortBlockedToStripedWarpScanby addingBroadcast
- Removed references to, and workarounds for, the deprecated hcc
Known issues
BlockRadixRankMatchis currently broken for the rocPRIM backendBlockRadixRankMatchwith a warp size that does not divide exactly by the block size is broken for the CUB backend
hipCUB-2.13.0 for ROCm 5.4.0
Additions
- CMake functionality improves build parallelism for the test suite that splits compilation units by function or parameters
- New overload for
BlockAdjacentDifference::SubtractLeftPartialTile, which takes a predecessor item
Changes
- Improved build parallelism of the test suite by splitting up large compilation units for
DeviceRadixSort,DeviceSegmentedRadixSort, andDeviceSegmentedSort - The CUB backend references CUB and Thrust version 1.17.1
Known issues
BlockRadixRankMatchis currently broken for the rocPRIM backendBlockRadixRankMatchwith a warp size that does not divide exactly by the block size is broken for the CUB backend
hipCUB-2.12.0 for ROCm 5.3.0
Additions
UniqueByKeydevice algorithmSubtractLeft,SubtractLeftPartialTile,SubtractRight, andSubtractRightPartialTileoverload inBlockAdjacentDifference- The old overloads (
FlagHeads,FlagTails,FlagHeadsAndTails) are deprecated
- The old overloads (
DeviceAdjacentDifferencealgorithm- Extended benchmark suite of
DeviceHistogram,DeviceScan,DevicePartition,DeviceReduce,DeviceSegmentedReduce,DeviceSegmentedRadixSort,DeviceRadixSort,DeviceSpmv,DeviceMergeSort, andDeviceSegmentedSort
Changes
- Obsolete type traits defined in
util_type.hpp; use the standard library equivalents instead - CUB backend references CUB and Thrust version 1.16.0
DeviceRadixSortnum_itemsparameter type is now templated instead of being an int- If an integral type with a maximum size of 4 bytes is passed (an int), the former logic applies;
otherwise, the algorithm uses a larger indexing type that makes it possible to sort input data over
2^{32}elements
- If an integral type with a maximum size of 4 bytes is passed (an int), the former logic applies;
otherwise, the algorithm uses a larger indexing type that makes it possible to sort input data over
hipCUB-2.11.1 for ROCm 5.2.0
Additions
- Packages for tests and benchmark executables on all supported operating systems using CPack
hipCUB-2.11.0 for ROCm 5.1.0
Additions
- Device segmented sort
WarpMergeSort,WarpMask, and thread sort from CUB 1.15.0 are supported in hipCUB- Device three-way partition
Changes
device_scananddevice_segmented_scan:inclusive_scannow uses theinput-typeasaccumulator-type;exclusive_scanusesinitial-value-type.- This changes the behavior of:
- Small-size input types with large-size output types (e.g., short input, int output)
- Low-res input with high-res output (e.g., float input, double output)
- This changes the behavior of:
- Block merge sort no longer supports non-power of two block sizes
Known issues
- Grid unit test hangs on HIP for Windows
hipCUB-2.10.13 for ROCm 5.0.0
Fixes
- Added missing includes to
hipcub.hpp
Additions
- Bfloat16 support to test cases (
device_reduceanddevice_radix_sort) - Device merge sort
- Block merge sort
- API update to CUB 1.14.0
Changes
- The
SetupNVCC.cmakeautomatic target selector selects all of the capabilities for all available cards with the NVIDIA backend
hipCUB-2.10.12 for ROCm 4.5.0
Additions
- Initial HIP on Windows support
Changes
- Packaging changed to a development package (named
hipcub-devfor.debpackages andhipcub-develfor.rpmpackages). Because hipCUB is a header-only library, there is no runtime package. To aid in the transition, the development package sets theprovidesfield tohipcub, so existing packages that are dependent on hipCUB can continue to work. Thisprovidesfeature is introduced as a deprecated feature because it will be removed in a future ROCm release.
hipCUB-2.10.11 for ROCm 4.4.0
Additions
- gfx1030 support added
- AddressSanitizer build option
Fixes
BlockRadixRankunit test failure
hipCUB-2.10.10 for ROCm 4.3.0
Additions
DiscardOutputIteratorto backend header
hipCUB-2.10.9 for ROCm 4.2.0
Additions
- Support for
TexObjInputIteratorandTexRefInputIterator - Support for
DevicePartition
Changes
- The minimum CMake version required is now 3.10.2
- The CUB backend has been updated to 1.11.0
Fixes
- Benchmark build
- NVCC build
hipCUB-2.10.8 for ROCm 4.1.0
Added
- Support for
DiscardOutputIterator
hipCUB-2.10.7 for ROCm 4.0.0
- No changes
hipCUB-2.10.6 for ROCm 3.10
- No changes
hipCUB-2.10.5 for ROCm 3.9.0
- No changes
hipCUB-2.10.4 for ROCm 3.8.0
- No changes
hipCUB-2.10.3 for ROCm 3.7.0
- No changes
hipCUB-2.10.2 for ROCm 3.6.0
- No changes
hipCUB-2.10.1 for ROCm 3.5.0
Additions
- Improved tests with fixed and random seeds for test data
Changes
- Switched to hip-clang as default compiler
- CMake searches for rocPRIM locally first and, if not found, downloads it from GitHub
Deprecations
- HCC build
Known issues
- The following unit test failures (due to issues in ROCclr runtime) have been observed:
BlockDiscontinuityBlockExchangeBlockHistogramBlockRadixSortBlockReduceBlockScan