diff --git a/cub/detail/choose_offset.cuh b/cub/detail/choose_offset.cuh new file mode 100644 index 0000000000..ed703e26c9 --- /dev/null +++ b/cub/detail/choose_offset.cuh @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the NVIDIA CORPORATION nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ******************************************************************************/ + +#pragma once + +#include + +#include +#include + +CUB_NAMESPACE_BEGIN + +namespace detail +{ + +/** + * ChooseOffsetT checks NumItemsT, the type of the num_items parameter, and + * selects the offset type based on it. + */ +template +struct ChooseOffsetT +{ + // NumItemsT must be an integral type (but not bool). + static_assert( + std::is_integral::value && + !std::is_same::type, bool>::value, + "NumItemsT must be an integral type, but not bool"); + + // Unsigned integer type for global offsets. + using Type = typename std::conditional::type; +}; + +} // namespace detail + +CUB_NAMESPACE_END + diff --git a/cub/device/device_adjacent_difference.cuh b/cub/device/device_adjacent_difference.cuh index 56df25329b..c030e6fe43 100644 --- a/cub/device/device_adjacent_difference.cuh +++ b/cub/device/device_adjacent_difference.cuh @@ -27,9 +27,10 @@ #pragma once -#include "../config.cuh" -#include "../util_namespace.cuh" -#include "dispatch/dispatch_adjacent_difference.cuh" +#include +#include +#include +#include #include #include @@ -114,14 +115,7 @@ private: cudaStream_t stream, bool debug_synchronous) { - static_assert( - std::is_integral::value && - !std::is_same::type, bool>::value, - "NumItemsT must be an integral type, but not bool"); - - using OffsetT = std::conditional_t; + using OffsetT = typename detail::ChooseOffsetT::Type; using DispatchT = DispatchAdjacentDifference -#include -#include - -#include "dispatch/dispatch_radix_sort.cuh" -#include "../config.cuh" +#include +#include +#include CUB_NAMESPACE_BEGIN -namespace detail { -/** ChooseOffsetT checks NumItemsT, the type of the num_items parameter, and - * selects the offset type based on it. */ -template -struct ChooseOffsetT -{ - // NumItemsT must be an integral type (but not bool). - static_assert(std::is_integral::value && - !std::is_same::type, bool>::value, - "NumItemsT must be an integral type, but not bool"); - - // Unsigned integer type for global offsets. - using Type = typename std::conditional::type; -}; - -} // namespace detail - /** * \brief DeviceRadixSort provides device-wide, parallel operations for computing a radix sort across a sequence of data items residing within device-accessible memory. ![](sorting_logo.png) * \ingroup SingleModule