cuda-cccl 0.3.1__cp310-cp310-manylinux_2_24_aarch64.whl → 0.3.2__cp310-cp310-manylinux_2_24_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cuda-cccl might be problematic. Click here for more details.

Files changed (185) hide show
  1. cuda/cccl/headers/include/cub/agent/agent_histogram.cuh +354 -572
  2. cuda/cccl/headers/include/cub/block/block_adjacent_difference.cuh +6 -8
  3. cuda/cccl/headers/include/cub/block/block_discontinuity.cuh +24 -14
  4. cuda/cccl/headers/include/cub/block/block_exchange.cuh +5 -0
  5. cuda/cccl/headers/include/cub/block/block_histogram.cuh +4 -0
  6. cuda/cccl/headers/include/cub/block/block_load.cuh +4 -0
  7. cuda/cccl/headers/include/cub/block/block_radix_rank.cuh +1 -0
  8. cuda/cccl/headers/include/cub/block/block_reduce.cuh +1 -0
  9. cuda/cccl/headers/include/cub/block/block_scan.cuh +12 -2
  10. cuda/cccl/headers/include/cub/block/block_store.cuh +3 -2
  11. cuda/cccl/headers/include/cub/detail/mdspan_utils.cuh +34 -30
  12. cuda/cccl/headers/include/cub/detail/ptx-json-parser.h +1 -1
  13. cuda/cccl/headers/include/cub/device/device_for.cuh +118 -40
  14. cuda/cccl/headers/include/cub/device/device_reduce.cuh +6 -7
  15. cuda/cccl/headers/include/cub/device/device_segmented_reduce.cuh +12 -13
  16. cuda/cccl/headers/include/cub/device/device_transform.cuh +122 -91
  17. cuda/cccl/headers/include/cub/device/dispatch/dispatch_merge.cuh +2 -3
  18. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce.cuh +4 -3
  19. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_deterministic.cuh +1 -1
  20. cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce.cuh +4 -5
  21. cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce_by_key.cuh +0 -1
  22. cuda/cccl/headers/include/cub/device/dispatch/dispatch_topk.cuh +3 -5
  23. cuda/cccl/headers/include/cub/device/dispatch/dispatch_transform.cuh +13 -5
  24. cuda/cccl/headers/include/cub/device/dispatch/kernels/for_each.cuh +72 -37
  25. cuda/cccl/headers/include/cub/device/dispatch/kernels/transform.cuh +22 -27
  26. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_transform.cuh +61 -70
  27. cuda/cccl/headers/include/cub/thread/thread_reduce.cuh +24 -17
  28. cuda/cccl/headers/include/cub/warp/warp_load.cuh +6 -6
  29. cuda/cccl/headers/include/cub/warp/warp_reduce.cuh +7 -2
  30. cuda/cccl/headers/include/cub/warp/warp_scan.cuh +7 -3
  31. cuda/cccl/headers/include/cub/warp/warp_store.cuh +1 -0
  32. cuda/cccl/headers/include/cuda/__barrier/barrier_block_scope.h +19 -0
  33. cuda/cccl/headers/include/cuda/__cccl_config +1 -0
  34. cuda/cccl/headers/include/cuda/__cmath/fast_modulo_division.h +3 -74
  35. cuda/cccl/headers/include/cuda/__cmath/mul_hi.h +146 -0
  36. cuda/cccl/headers/include/cuda/__complex/get_real_imag.h +0 -4
  37. cuda/cccl/headers/include/cuda/__device/arch_id.h +176 -0
  38. cuda/cccl/headers/include/cuda/__device/arch_traits.h +239 -317
  39. cuda/cccl/headers/include/cuda/__device/attributes.h +4 -3
  40. cuda/cccl/headers/include/cuda/__device/compute_capability.h +171 -0
  41. cuda/cccl/headers/include/cuda/__device/device_ref.h +0 -10
  42. cuda/cccl/headers/include/cuda/__device/physical_device.h +1 -26
  43. cuda/cccl/headers/include/cuda/__event/event.h +26 -26
  44. cuda/cccl/headers/include/cuda/__event/event_ref.h +5 -5
  45. cuda/cccl/headers/include/cuda/__event/timed_event.h +9 -7
  46. cuda/cccl/headers/include/cuda/__fwd/devices.h +4 -4
  47. cuda/cccl/headers/include/cuda/__iterator/constant_iterator.h +46 -31
  48. cuda/cccl/headers/include/cuda/__iterator/strided_iterator.h +79 -47
  49. cuda/cccl/headers/include/cuda/__iterator/tabulate_output_iterator.h +59 -36
  50. cuda/cccl/headers/include/cuda/__iterator/transform_input_output_iterator.h +79 -49
  51. cuda/cccl/headers/include/cuda/__iterator/transform_iterator.h +74 -48
  52. cuda/cccl/headers/include/cuda/__iterator/transform_output_iterator.h +80 -55
  53. cuda/cccl/headers/include/cuda/__iterator/zip_common.h +2 -12
  54. cuda/cccl/headers/include/cuda/__iterator/zip_iterator.h +15 -19
  55. cuda/cccl/headers/include/cuda/__iterator/zip_transform_iterator.h +59 -60
  56. cuda/cccl/headers/include/cuda/__mdspan/host_device_accessor.h +127 -60
  57. cuda/cccl/headers/include/cuda/__mdspan/host_device_mdspan.h +178 -3
  58. cuda/cccl/headers/include/cuda/__mdspan/restrict_accessor.h +38 -8
  59. cuda/cccl/headers/include/cuda/__mdspan/restrict_mdspan.h +67 -1
  60. cuda/cccl/headers/include/cuda/__memory/ptr_in_range.h +93 -0
  61. cuda/cccl/headers/include/cuda/__memory_resource/get_memory_resource.h +4 -4
  62. cuda/cccl/headers/include/cuda/__memory_resource/properties.h +44 -0
  63. cuda/cccl/headers/include/cuda/__memory_resource/resource.h +1 -1
  64. cuda/cccl/headers/include/cuda/__memory_resource/resource_ref.h +4 -6
  65. cuda/cccl/headers/include/cuda/__nvtx/nvtx3.h +2 -1
  66. cuda/cccl/headers/include/cuda/__runtime/ensure_current_context.h +5 -4
  67. cuda/cccl/headers/include/cuda/__stream/stream.h +8 -8
  68. cuda/cccl/headers/include/cuda/__stream/stream_ref.h +17 -16
  69. cuda/cccl/headers/include/cuda/__utility/in_range.h +65 -0
  70. cuda/cccl/headers/include/cuda/cmath +1 -0
  71. cuda/cccl/headers/include/cuda/devices +3 -0
  72. cuda/cccl/headers/include/cuda/memory +1 -0
  73. cuda/cccl/headers/include/cuda/std/__algorithm/equal_range.h +2 -2
  74. cuda/cccl/headers/include/cuda/std/__algorithm/find.h +1 -1
  75. cuda/cccl/headers/include/cuda/std/__algorithm/includes.h +2 -4
  76. cuda/cccl/headers/include/cuda/std/__algorithm/lower_bound.h +1 -1
  77. cuda/cccl/headers/include/cuda/std/__algorithm/make_projected.h +7 -15
  78. cuda/cccl/headers/include/cuda/std/__algorithm/min_element.h +1 -1
  79. cuda/cccl/headers/include/cuda/std/__algorithm/minmax_element.h +1 -2
  80. cuda/cccl/headers/include/cuda/std/__algorithm/partial_sort_copy.h +2 -2
  81. cuda/cccl/headers/include/cuda/std/__algorithm/upper_bound.h +1 -1
  82. cuda/cccl/headers/include/cuda/std/__cccl/algorithm_wrapper.h +36 -0
  83. cuda/cccl/headers/include/cuda/std/__cccl/builtin.h +46 -49
  84. cuda/cccl/headers/include/cuda/std/__cccl/execution_space.h +6 -0
  85. cuda/cccl/headers/include/cuda/std/__cccl/host_std_lib.h +52 -0
  86. cuda/cccl/headers/include/cuda/std/__cccl/memory_wrapper.h +36 -0
  87. cuda/cccl/headers/include/cuda/std/__cccl/numeric_wrapper.h +36 -0
  88. cuda/cccl/headers/include/cuda/std/__cmath/isnan.h +3 -2
  89. cuda/cccl/headers/include/cuda/std/__complex/complex.h +3 -2
  90. cuda/cccl/headers/include/cuda/std/__complex/literals.h +14 -34
  91. cuda/cccl/headers/include/cuda/std/__complex/nvbf16.h +2 -1
  92. cuda/cccl/headers/include/cuda/std/__complex/nvfp16.h +4 -3
  93. cuda/cccl/headers/include/cuda/std/__concepts/invocable.h +2 -2
  94. cuda/cccl/headers/include/cuda/std/__cstdlib/malloc.h +3 -2
  95. cuda/cccl/headers/include/cuda/std/__functional/bind.h +10 -13
  96. cuda/cccl/headers/include/cuda/std/__functional/function.h +5 -8
  97. cuda/cccl/headers/include/cuda/std/__functional/invoke.h +71 -335
  98. cuda/cccl/headers/include/cuda/std/__functional/mem_fn.h +1 -2
  99. cuda/cccl/headers/include/cuda/std/__functional/reference_wrapper.h +3 -3
  100. cuda/cccl/headers/include/cuda/std/__functional/weak_result_type.h +0 -6
  101. cuda/cccl/headers/include/cuda/std/__fwd/allocator.h +13 -0
  102. cuda/cccl/headers/include/cuda/std/__fwd/char_traits.h +13 -0
  103. cuda/cccl/headers/include/cuda/std/__fwd/complex.h +13 -4
  104. cuda/cccl/headers/include/cuda/std/__fwd/mdspan.h +23 -0
  105. cuda/cccl/headers/include/cuda/std/__fwd/pair.h +13 -0
  106. cuda/cccl/headers/include/cuda/std/__fwd/string.h +22 -0
  107. cuda/cccl/headers/include/cuda/std/__fwd/string_view.h +14 -0
  108. cuda/cccl/headers/include/cuda/std/__internal/features.h +0 -5
  109. cuda/cccl/headers/include/cuda/std/__internal/namespaces.h +21 -0
  110. cuda/cccl/headers/include/cuda/std/__iterator/iterator_traits.h +5 -5
  111. cuda/cccl/headers/include/cuda/std/__mdspan/extents.h +7 -1
  112. cuda/cccl/headers/include/cuda/std/__mdspan/mdspan.h +53 -39
  113. cuda/cccl/headers/include/cuda/std/__memory/allocator.h +3 -3
  114. cuda/cccl/headers/include/cuda/std/__memory/construct_at.h +1 -3
  115. cuda/cccl/headers/include/cuda/std/__optional/optional_base.h +1 -0
  116. cuda/cccl/headers/include/cuda/std/__ranges/compressed_movable_box.h +892 -0
  117. cuda/cccl/headers/include/cuda/std/__ranges/movable_box.h +2 -2
  118. cuda/cccl/headers/include/cuda/std/__type_traits/is_primary_template.h +7 -5
  119. cuda/cccl/headers/include/cuda/std/__type_traits/result_of.h +1 -1
  120. cuda/cccl/headers/include/cuda/std/__utility/pair.h +0 -5
  121. cuda/cccl/headers/include/cuda/std/bitset +1 -1
  122. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/__config +15 -12
  123. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/variant +11 -9
  124. cuda/cccl/headers/include/cuda/std/inplace_vector +4 -4
  125. cuda/cccl/headers/include/cuda/std/numbers +5 -0
  126. cuda/cccl/headers/include/cuda/std/string_view +146 -11
  127. cuda/cccl/headers/include/cuda/stream_ref +5 -0
  128. cuda/cccl/headers/include/cuda/utility +1 -0
  129. cuda/cccl/headers/include/nv/target +7 -2
  130. cuda/cccl/headers/include/thrust/allocate_unique.h +1 -1
  131. cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.h +309 -33
  132. cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.h +151 -4
  133. cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.h +60 -3
  134. cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.h +45 -3
  135. cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.h +31 -6
  136. cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.h +29 -16
  137. cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.h +41 -4
  138. cuda/cccl/headers/include/thrust/detail/allocator/value_initialize_range.h +42 -4
  139. cuda/cccl/headers/include/thrust/detail/complex/ccosh.h +3 -3
  140. cuda/cccl/headers/include/thrust/detail/internal_functional.h +1 -1
  141. cuda/cccl/headers/include/thrust/detail/memory_algorithms.h +1 -1
  142. cuda/cccl/headers/include/thrust/detail/temporary_array.h +1 -1
  143. cuda/cccl/headers/include/thrust/detail/type_traits.h +1 -1
  144. cuda/cccl/headers/include/thrust/device_delete.h +18 -3
  145. cuda/cccl/headers/include/thrust/device_free.h +16 -3
  146. cuda/cccl/headers/include/thrust/device_new.h +29 -8
  147. cuda/cccl/headers/include/thrust/host_vector.h +1 -1
  148. cuda/cccl/headers/include/thrust/iterator/tabulate_output_iterator.h +5 -2
  149. cuda/cccl/headers/include/thrust/mr/disjoint_pool.h +1 -1
  150. cuda/cccl/headers/include/thrust/mr/pool.h +1 -1
  151. cuda/cccl/headers/include/thrust/system/cuda/detail/find.h +13 -115
  152. cuda/cccl/headers/include/thrust/system/cuda/detail/mismatch.h +8 -2
  153. cuda/cccl/headers/include/thrust/type_traits/is_contiguous_iterator.h +7 -7
  154. cuda/compute/__init__.py +2 -0
  155. cuda/compute/_bindings.pyi +43 -1
  156. cuda/compute/_bindings_impl.pyx +156 -7
  157. cuda/compute/algorithms/_scan.py +108 -36
  158. cuda/compute/algorithms/_transform.py +32 -11
  159. cuda/compute/cu12/_bindings_impl.cpython-310-aarch64-linux-gnu.so +0 -0
  160. cuda/compute/cu12/cccl/libcccl.c.parallel.so +0 -0
  161. cuda/compute/cu13/_bindings_impl.cpython-310-aarch64-linux-gnu.so +0 -0
  162. cuda/compute/cu13/cccl/libcccl.c.parallel.so +0 -0
  163. cuda/compute/iterators/__init__.py +2 -0
  164. cuda/compute/iterators/_factories.py +28 -0
  165. cuda/compute/iterators/_iterators.py +206 -1
  166. cuda/compute/numba_utils.py +2 -2
  167. cuda/compute/typing.py +2 -0
  168. {cuda_cccl-0.3.1.dist-info → cuda_cccl-0.3.2.dist-info}/METADATA +1 -1
  169. {cuda_cccl-0.3.1.dist-info → cuda_cccl-0.3.2.dist-info}/RECORD +171 -175
  170. cuda/cccl/headers/include/thrust/detail/algorithm_wrapper.h +0 -37
  171. cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.inl +0 -371
  172. cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.inl +0 -242
  173. cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.inl +0 -137
  174. cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.inl +0 -99
  175. cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.inl +0 -68
  176. cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.inl +0 -86
  177. cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.inl +0 -79
  178. cuda/cccl/headers/include/thrust/detail/allocator/value_initialize_range.inl +0 -98
  179. cuda/cccl/headers/include/thrust/detail/device_delete.inl +0 -52
  180. cuda/cccl/headers/include/thrust/detail/device_free.inl +0 -47
  181. cuda/cccl/headers/include/thrust/detail/device_new.inl +0 -61
  182. cuda/cccl/headers/include/thrust/detail/memory_wrapper.h +0 -40
  183. cuda/cccl/headers/include/thrust/detail/numeric_wrapper.h +0 -37
  184. {cuda_cccl-0.3.1.dist-info → cuda_cccl-0.3.2.dist-info}/WHEEL +0 -0
  185. {cuda_cccl-0.3.1.dist-info → cuda_cccl-0.3.2.dist-info}/licenses/LICENSE +0 -0
@@ -65,7 +65,7 @@ _CCCL_CONCEPT __movable_box_object = move_constructible<_Tp> && is_object_v<_Tp>
65
65
  // whenever we can apply any of these optimizations for both the copy assignment and the move assignment
66
66
  // operator.
67
67
  template <class _Tp>
68
- [[nodiscard]] _CCCL_API constexpr bool __doesnt_need_empty_state() noexcept
68
+ [[nodiscard]] _CCCL_API _CCCL_CONSTEVAL bool __doesnt_need_empty_state() noexcept
69
69
  {
70
70
  if constexpr (copy_constructible<_Tp>)
71
71
  {
@@ -92,7 +92,7 @@ template <class _Tp>
92
92
  // Hence, when the _Tp doesn't have an assignment operator, we can't risk making it a potentially-overlapping
93
93
  // subobject because of the above, and we don't use [[no_unique_address]] in that case.
94
94
  template <class _Tp>
95
- [[nodiscard]] _CCCL_API constexpr bool __can_use_no_unique_address() noexcept
95
+ [[nodiscard]] _CCCL_API _CCCL_CONSTEVAL bool __can_use_no_unique_address() noexcept
96
96
  {
97
97
  if constexpr (copy_constructible<_Tp>)
98
98
  {
@@ -70,7 +70,7 @@ using __select_traits = conditional_t<__is_primary_cccl_template<_Iter>::value,
70
70
  #else // ^^^ _CCCL_COMPILER(NVRTC) ^^^ / vvv !_CCCL_COMPILER(NVRTC) vvv
71
71
 
72
72
  // We also need to respect what the user is defining to std::iterator_traits
73
- # if defined(__GLIBCXX__)
73
+ # if _CCCL_HOST_STD_LIB(LIBSTDCXX)
74
74
  // libstdc++ uses `is_base_of`
75
75
  template <class _Iter, bool>
76
76
  inline constexpr bool __is_primary_std_template_impl =
@@ -83,13 +83,15 @@ inline constexpr bool __is_primary_std_template_impl<_Iter, true> = true;
83
83
  template <class _Iter>
84
84
  struct __is_primary_std_template : bool_constant<__is_primary_std_template_impl<_Iter, is_pointer_v<_Iter>>>
85
85
  {};
86
- # elif defined(_LIBCPP_VERSION)
86
+ # elif _CCCL_HOST_STD_LIB(LIBCXX)
87
+
87
88
  // libc++ uses the same mechanism than we do with __primary_template
88
89
  template <class _Traits>
89
90
  using __test_for_primary_std_template = enable_if_t<_IsSame<_Traits, typename _Traits::__primary_template>::value>;
90
91
  template <class _Iter>
91
- using __is_primary_std_template = _IsValidExpansion<__test_for_primary_template, ::std::iterator_traits<_Iter>>;
92
- # elif defined(_MSVC_STL_VERSION) || defined(_IS_WRS)
92
+ using __is_primary_std_template = _IsValidExpansion<__test_for_primary_std_template, ::std::iterator_traits<_Iter>>;
93
+
94
+ # elif _CCCL_HOST_STD_LIB(STL)
93
95
  // On MSVC we must check for the base class because `_From_primary` is only defined in C++20
94
96
  template <class _Iter, bool>
95
97
  inline constexpr bool __is_primary_std_template_impl =
@@ -102,7 +104,7 @@ inline constexpr bool __is_primary_std_template_impl<_Iter, true> = true;
102
104
  template <class _Iter>
103
105
  struct __is_primary_std_template : bool_constant<__is_primary_std_template_impl<_Iter, is_pointer_v<_Iter>>>
104
106
  {};
105
- # endif // _MSVC_STL_VERSION || _IS_WRS
107
+ # endif // ^^^ _CCCL_HOST_STD_LIB(STL) ^^^
106
108
 
107
109
  template <class _Iter, class _OtherTraits>
108
110
  using __select_traits =
@@ -33,7 +33,7 @@ template <class _Callable>
33
33
  class result_of;
34
34
 
35
35
  template <class _Fp, class... _Args>
36
- class CCCL_DEPRECATED _CCCL_TYPE_VISIBILITY_DEFAULT result_of<_Fp(_Args...)> : public __invoke_of<_Fp, _Args...>
36
+ class CCCL_DEPRECATED _CCCL_TYPE_VISIBILITY_DEFAULT result_of<_Fp(_Args...)> : public invoke_result<_Fp, _Args...>
37
37
  {};
38
38
 
39
39
  template <class _Tp>
@@ -61,11 +61,6 @@
61
61
  #include <cuda/std/__utility/piecewise_construct.h>
62
62
  #include <cuda/std/cstddef>
63
63
 
64
- // Provide compatibility between `std::pair` and `cuda::std::pair`
65
- #if !_CCCL_COMPILER(NVRTC)
66
- # include <utility>
67
- #endif // !_CCCL_COMPILER(NVRTC)
68
-
69
64
  #include <cuda/std/__cccl/prologue.h>
70
65
 
71
66
  _CCCL_BEGIN_NAMESPACE_CUDA_STD
@@ -653,7 +653,7 @@ _CCCL_API constexpr void __throw_if_out_of_range(size_t __pos, const char* __msg
653
653
  }
654
654
 
655
655
  template <>
656
- _CCCL_API inline void __throw_if_out_of_range<0>(size_t __pos, const char* __msg)
656
+ _CCCL_API inline void __throw_if_out_of_range<0>(size_t, const char* __msg)
657
657
  {
658
658
  ::cuda::std::__throw_out_of_range(__msg);
659
659
  }
@@ -184,19 +184,22 @@ extern "C++" {
184
184
  // NVRTC has a bug that prevented the use of delegated constructors, as it did not accept execution space annotations.
185
185
  // This creates a whole lot of boilerplate that we can avoid through a macro (see nvbug3961621)
186
186
  # if _CCCL_COMPILER(NVRTC, <, 12, 6)
187
- # define _LIBCUDACXX_DELEGATE_CONSTRUCTORS(__class, __baseclass, ...) \
188
- using __base = __baseclass<__VA_ARGS__>; \
189
- _CCCL_TEMPLATE(class... _Args) \
190
- _CCCL_REQUIRES(is_constructible_v<__base, _Args...>) \
191
- _CCCL_API constexpr __class(_Args&&... __args) noexcept(is_nothrow_constructible_v<__base, _Args...>) \
192
- : __base(::cuda::std::forward<_Args>(__args)...) \
193
- {} \
194
- _CCCL_HIDE_FROM_ABI constexpr __class() noexcept = default;
187
+ # define _LIBCUDACXX_DELEGATE_CONSTRUCTORS(__class, __baseclass, ...) \
188
+ using __base = __baseclass<__VA_ARGS__>; \
189
+ _CCCL_TEMPLATE(class... _Args) \
190
+ _CCCL_REQUIRES(::cuda::std::is_constructible_v<__base, _Args...>) \
191
+ _CCCL_API constexpr __class(_Args&&... __args) noexcept( \
192
+ ::cuda::std::is_nothrow_constructible_v<__base, _Args...>) \
193
+ : __base(::cuda::std::forward<_Args>(__args)...) \
194
+ {} \
195
+ _CCCL_HIDE_FROM_ABI constexpr __class() noexcept(::cuda::std::is_nothrow_default_constructible_v<__base>) = \
196
+ default;
195
197
  # else // ^^^ workaround ^^^ / vvv no workaround vvv
196
- # define _LIBCUDACXX_DELEGATE_CONSTRUCTORS(__class, __baseclass, ...) \
197
- using __base = __baseclass<__VA_ARGS__>; \
198
- using __base::__base; \
199
- _CCCL_HIDE_FROM_ABI constexpr __class() noexcept = default;
198
+ # define _LIBCUDACXX_DELEGATE_CONSTRUCTORS(__class, __baseclass, ...) \
199
+ using __base = __baseclass<__VA_ARGS__>; \
200
+ using __base::__base; \
201
+ _CCCL_HIDE_FROM_ABI constexpr __class() noexcept(::cuda::std::is_nothrow_default_constructible_v<__base>) = \
202
+ default;
200
203
  # endif // ^^^ no workaround ^^^
201
204
 
202
205
  #endif // __cplusplus
@@ -563,7 +563,7 @@ struct __variant
563
563
  class... _OtherVariants,
564
564
  enable_if_t<(_Remaining != 0) && (_CurrentVariant == 0), int> = 0>
565
565
  _CCCL_API inline _CCCL_VISIBILITY_HIDDEN static constexpr size_t
566
- __get_runtime_index(const _Variant& __v, const _OtherVariants&... __vs) noexcept
566
+ __get_runtime_index(const _Variant& __v, const _OtherVariants&...) noexcept
567
567
  {
568
568
  return __v.__impl_.index();
569
569
  }
@@ -574,7 +574,7 @@ struct __variant
574
574
  class... _OtherVariants,
575
575
  enable_if_t<(_Remaining != 0) && (_CurrentVariant != 0), int> = 0>
576
576
  _CCCL_API inline _CCCL_VISIBILITY_HIDDEN static constexpr size_t
577
- __get_runtime_index(const _Variant& __v, const _OtherVariants&... __vs) noexcept
577
+ __get_runtime_index(const _Variant&, const _OtherVariants&... __vs) noexcept
578
578
  {
579
579
  return __get_runtime_index<_Remaining, _CurrentVariant - 1>(__vs...);
580
580
  }
@@ -995,9 +995,10 @@ class _CCCL_TYPE_VISIBILITY_DEFAULT __ctor : public __dtor<_Traits>
995
995
  {
996
996
  if (__index == _CurrentIndex)
997
997
  {
998
- __construct_at(::cuda::std::addressof(__access::__base::__get_alt<_CurrentIndex>(__lhs.__as_base())),
999
- in_place,
1000
- __access::__base::__get_alt<_CurrentIndex>(::cuda::std::forward<_Rhs>(__rhs).__as_base()).__value);
998
+ ::cuda::std::__construct_at(
999
+ ::cuda::std::addressof(__access::__base::__get_alt<_CurrentIndex>(__lhs.__as_base())),
1000
+ in_place,
1001
+ __access::__base::__get_alt<_CurrentIndex>(::cuda::std::forward<_Rhs>(__rhs).__as_base()).__value);
1001
1002
  return;
1002
1003
  }
1003
1004
  __generic_construct_impl(
@@ -1010,9 +1011,10 @@ class _CCCL_TYPE_VISIBILITY_DEFAULT __ctor : public __dtor<_Traits>
1010
1011
  {
1011
1012
  if (__index == 0)
1012
1013
  {
1013
- __construct_at(::cuda::std::addressof(__access::__base::__get_alt<0>(__lhs.__as_base())),
1014
- in_place,
1015
- __access::__base::__get_alt<0>(::cuda::std::forward<_Rhs>(__rhs).__as_base()).__value);
1014
+ ::cuda::std::__construct_at(
1015
+ ::cuda::std::addressof(__access::__base::__get_alt<0>(__lhs.__as_base())),
1016
+ in_place,
1017
+ __access::__base::__get_alt<0>(::cuda::std::forward<_Rhs>(__rhs).__as_base()).__value);
1016
1018
  return;
1017
1019
  }
1018
1020
  // We already checked that every variant has a value, so we should never reach this line
@@ -1027,7 +1029,7 @@ protected:
1027
1029
  template <size_t _Ip, class _Tp, class... _Args>
1028
1030
  _CCCL_API inline static _Tp& __construct_alt(__alt<_Ip, _Tp>& __a, _Args&&... __args)
1029
1031
  {
1030
- __construct_at(::cuda::std::addressof(__a), in_place, ::cuda::std::forward<_Args>(__args)...);
1032
+ ::cuda::std::__construct_at(::cuda::std::addressof(__a), in_place, ::cuda::std::forward<_Args>(__args)...);
1031
1033
  return __a.__value;
1032
1034
  }
1033
1035
 
@@ -1525,8 +1525,8 @@ public:
1525
1525
  _CCCL_API constexpr iterator
1526
1526
  erase(const_iterator __cfirst, const_iterator __clast) noexcept(is_nothrow_move_assignable_v<_Tp>)
1527
1527
  {
1528
- const iterator __first = (iterator) __cfirst;
1529
- const iterator __last = (iterator) __clast;
1528
+ const iterator __first = this->begin() + (__cfirst - this->begin());
1529
+ const iterator __last = this->begin() + (__clast - this->begin());
1530
1530
  const iterator __end = this->end();
1531
1531
  if (__first == __last)
1532
1532
  {
@@ -1736,7 +1736,7 @@ public:
1736
1736
  }
1737
1737
  }
1738
1738
 
1739
- _CCCL_API constexpr inplace_vector(const size_type __count, const _Tp& __value)
1739
+ _CCCL_API constexpr inplace_vector(const size_type __count, const _Tp&)
1740
1740
  : __base()
1741
1741
  {
1742
1742
  if (__count > 0)
@@ -1973,7 +1973,7 @@ public:
1973
1973
 
1974
1974
  _CCCL_TEMPLATE(class _Range)
1975
1975
  _CCCL_REQUIRES(::cuda::std::ranges::__container_compatible_range<_Range, _Tp>)
1976
- _CCCL_API constexpr iterator insert_range(const_iterator __cpos, _Range&& __range)
1976
+ _CCCL_API constexpr iterator insert_range(const_iterator, _Range&& __range)
1977
1977
  {
1978
1978
  if (::cuda::std::ranges::begin(__range) != ::cuda::std::ranges::end(__range))
1979
1979
  {
@@ -26,6 +26,9 @@
26
26
 
27
27
  #include <cuda/std/__cccl/prologue.h>
28
28
 
29
+ _CCCL_DIAG_PUSH
30
+ _CCCL_DIAG_SUPPRESS_NVHPC(inexact_fp_conversion)
31
+
29
32
  _CCCL_BEGIN_NAMESPACE_CUDA_STD
30
33
 
31
34
  template <class _Tp>
@@ -336,6 +339,8 @@ inline constexpr double phi = __numbers<double>::__phi();
336
339
 
337
340
  _CCCL_END_NAMESPACE_CUDA_STD
338
341
 
342
+ _CCCL_DIAG_POP
343
+
339
344
  #include <cuda/std/__cccl/epilogue.h>
340
345
 
341
346
  #endif // _CUDA_STD_NUMBERS
@@ -24,6 +24,9 @@
24
24
  #include <cuda/std/__cstddef/types.h>
25
25
  #include <cuda/std/__functional/hash.h>
26
26
  #include <cuda/std/__functional/unary_function.h>
27
+ #include <cuda/std/__fwd/allocator.h>
28
+ #include <cuda/std/__fwd/char_traits.h>
29
+ #include <cuda/std/__fwd/string.h>
27
30
  #include <cuda/std/__fwd/string_view.h>
28
31
  #include <cuda/std/__iterator/access.h>
29
32
  #include <cuda/std/__iterator/bounded_iter.h>
@@ -49,16 +52,19 @@
49
52
  #include <cuda/std/__type_traits/is_trivially_constructible.h>
50
53
  #include <cuda/std/__type_traits/is_trivially_copyable.h>
51
54
  #include <cuda/std/__type_traits/remove_cvref.h>
52
- #include <cuda/std/__type_traits/remove_reference.h>
53
55
  #include <cuda/std/__type_traits/type_identity.h>
54
56
  #include <cuda/std/__utility/declval.h>
55
57
  #include <cuda/std/detail/libcxx/include/stdexcept>
56
58
  #include <cuda/std/limits>
57
59
  #include <cuda/std/version>
58
60
 
61
+ // todo: find a way to get rid of these includes
59
62
  #if !_CCCL_COMPILER(NVRTC)
60
- # include <string_view>
61
- #endif // !_CCCL_COMPILER(NVRTC)
63
+ # include <string> // for std::basic_string operator<<
64
+ # if __cpp_lib_string_view >= 201606L
65
+ # include <string_view> // for std::basic_string_view operator<<
66
+ # endif // __cpp_lib_string_view >= 201606L
67
+ #endif // __cpp_lib_string_view >= 201606L
62
68
 
63
69
  #include <cuda/std/__cccl/prologue.h>
64
70
 
@@ -75,13 +81,65 @@ inline constexpr bool __cccl_is_string_view_v<const volatile _Tp> = __cccl_is_st
75
81
  template <class _CharT, class _Traits>
76
82
  inline constexpr bool __cccl_is_string_view_v<basic_string_view<_CharT, _Traits>> = true;
77
83
 
84
+ template <class _Tp>
85
+ inline constexpr bool __cccl_is_std_string_v = false;
86
+ #if !_CCCL_COMPILER(NVRTC)
87
+ template <class _CharT, class _Traits, class _Alloc>
88
+ inline constexpr bool __cccl_is_std_string_v<::std::basic_string<_CharT, _Traits, _Alloc>> = true;
89
+ #endif // !_CCCL_COMPILER(NVRTC)
90
+
91
+ template <class _Tp>
92
+ inline constexpr bool __cccl_is_std_string_view_v = false;
93
+ #if __cpp_lib_string_view >= 201606L
94
+ template <class _CharT, class _Traits>
95
+ inline constexpr bool __cccl_is_std_string_view_v<::std::basic_string_view<_CharT, _Traits>> = true;
96
+ #endif // __cpp_lib_string_view >= 201606L
97
+
78
98
  template <class _Range, class _CharT, class _Traits>
79
99
  _CCCL_CONCEPT __cccl_has_basic_sv_conv_operator =
80
100
  _CCCL_REQUIRES_EXPR((_Range, _CharT, _Traits), remove_cvref_t<_Range>& __d)(
81
101
  (__d.operator ::cuda::std::basic_string_view<_CharT, _Traits>()));
82
102
 
103
+ template <class _Range, class _CharT, class _Traits>
104
+ _CCCL_CONCEPT __cccl_basic_sv_compatible_range_check_traits = _CCCL_REQUIRES_EXPR((_Range, _CharT, _Traits)) //
105
+ ( //
106
+ typename(typename _Range::traits_type), //
107
+ requires(is_same_v<typename _Range::traits_type, _Traits>) //
108
+ );
109
+
110
+ template <class _Range, class _CharT, class _Traits>
111
+ _CCCL_CONCEPT __cccl_basic_sv_compatible_range_check_traits_std_ext =
112
+ #if !_CCCL_COMPILER(NVRTC)
113
+ _CCCL_REQUIRES_EXPR((_Range, _CharT, _Traits)) //
114
+ ( //
115
+ typename(typename _Range::traits_type), //
116
+ requires(is_same_v<typename _Range::traits_type, ::std::char_traits<_CharT>>), //
117
+ requires(is_same_v<_Traits, ::cuda::std::char_traits<_CharT>>) //
118
+ );
119
+ #else // ^^^ !_CCCL_COMPILER(NVRTC) ^^^ / vvv _CCCL_COMPILER(NVRTC) vvv
120
+ true;
121
+ #endif // ^^^ _CCCL_COMPILER(NVRTC) ^^^
122
+
123
+ template <class _Range, class _CharT, class _Traits>
124
+ _CCCL_CONCEPT __cccl_basic_sv_compatible_range = _CCCL_REQUIRES_EXPR((_Range, _CharT, _Traits)) //
125
+ ( //
126
+ requires(::cuda::std::ranges::contiguous_range<_Range>), //
127
+ requires(::cuda::std::ranges::sized_range<_Range>), //
128
+ requires(is_same_v<::cuda::std::ranges::range_value_t<_Range>, _CharT>), //
129
+ requires(!(__cccl_is_string_view_v<remove_cvref_t<_Range>>
130
+ && __cccl_basic_sv_compatible_range_check_traits<_Range, _CharT, _Traits>) ), //
131
+ requires(!is_convertible_v<_Range, const _CharT*>), //
132
+ requires(!__cccl_has_basic_sv_conv_operator<_Range, _CharT, _Traits>), //
133
+ requires(!(__cccl_is_std_string_v<remove_cvref_t<_Range>>
134
+ && (__cccl_basic_sv_compatible_range_check_traits<_Range, _CharT, _Traits>
135
+ || __cccl_basic_sv_compatible_range_check_traits_std_ext<_Range, _CharT, _Traits>) )), //
136
+ requires(!(__cccl_is_std_string_view_v<remove_cvref_t<_Range>>
137
+ && (__cccl_basic_sv_compatible_range_check_traits<_Range, _CharT, _Traits>
138
+ || __cccl_basic_sv_compatible_range_check_traits_std_ext<_Range, _CharT, _Traits>) )) //
139
+ );
140
+
83
141
  template <class _CharT, class _Traits>
84
- class basic_string_view
142
+ class _CCCL_TYPE_VISIBILITY_DEFAULT basic_string_view
85
143
  {
86
144
  public:
87
145
  using traits_type = _Traits;
@@ -146,17 +204,54 @@ public:
146
204
  _CCCL_ASSERT((__end - __begin) >= 0, "string_view::string_view(iterator, sentinel) received invalid range");
147
205
  }
148
206
 
207
+ #if !_CCCL_COMPILER(NVRTC)
208
+ _CCCL_TEMPLATE(class _Traits2 = _Traits, class _Alloc)
209
+ _CCCL_REQUIRES(is_same_v<_Traits2, char_traits<_CharT>>)
210
+ _CCCL_HOST_API constexpr basic_string_view(
211
+ const ::std::basic_string<_CharT, ::std::char_traits<_CharT>, _Alloc>& __sv) noexcept
212
+ : __data_{__sv.data()}
213
+ , __size_{__sv.size()}
214
+ {}
215
+
216
+ template <class _Alloc>
217
+ _CCCL_HOST_API constexpr basic_string_view(const ::std::basic_string<_CharT, _Traits, _Alloc>& __sv) noexcept
218
+ : __data_{__sv.data()}
219
+ , __size_{__sv.size()}
220
+ {}
221
+ #endif // !_CCCL_COMPILER(NVRTC)
222
+
223
+ #if __cpp_lib_string_view >= 201606L
224
+ _CCCL_TEMPLATE(class _Traits2 = _Traits)
225
+ _CCCL_REQUIRES(is_same_v<_Traits2, char_traits<_CharT>>)
226
+ _CCCL_HOST_API constexpr basic_string_view(::std::basic_string_view<_CharT> __s) noexcept
227
+ : __data_{__s.data()}
228
+ , __size_{__s.size()}
229
+ {}
230
+
231
+ _CCCL_HOST_API constexpr basic_string_view(::std::basic_string_view<_CharT, _Traits> __s) noexcept
232
+ : __data_{__s.data()}
233
+ , __size_{__s.size()}
234
+ {}
235
+ #endif // __cpp_lib_string_view >= 201606L
236
+
149
237
  _CCCL_TEMPLATE(class _Range)
150
- _CCCL_REQUIRES(
151
- (!is_same_v<remove_cvref_t<_Range>, basic_string_view>) _CCCL_AND ::cuda::std::ranges::contiguous_range<_Range>
152
- _CCCL_AND ::cuda::std::ranges::sized_range<_Range> _CCCL_AND
153
- is_same_v<::cuda::std::ranges::range_value_t<_Range>, _CharT> _CCCL_AND(!is_convertible_v<_Range, const _CharT*>)
154
- _CCCL_AND(!__cccl_has_basic_sv_conv_operator<_Range, _CharT, _Traits>))
238
+ _CCCL_REQUIRES(__cccl_basic_sv_compatible_range<_Range, _CharT, _Traits>)
155
239
  _CCCL_API explicit constexpr basic_string_view(_Range&& __r)
156
240
  : __data_{::cuda::std::ranges::data(__r)}
157
241
  , __size_{::cuda::std::ranges::size(__r)}
158
242
  {}
159
243
 
244
+ // msvc has problems with constructing a string view from another string view using the from ranges constructor,
245
+ // so we define the constructor ourselves
246
+ #if _CCCL_COMPILER(MSVC)
247
+ _CCCL_TEMPLATE(class _OtherTraits)
248
+ _CCCL_REQUIRES((!is_same_v<_Traits, _OtherTraits>) )
249
+ _CCCL_API explicit constexpr basic_string_view(const basic_string_view<_CharT, _OtherTraits>& __other)
250
+ : __data_{__other.data()}
251
+ , __size_{__other.size()}
252
+ {}
253
+ #endif // _CCCL_COMPILER(MSVC)
254
+
160
255
  [[nodiscard]] _CCCL_API constexpr const_iterator begin() const noexcept
161
256
  {
162
257
  return const_iterator{__data_};
@@ -698,6 +793,20 @@ public:
698
793
  return __lhs.compare(__rhs) >= 0;
699
794
  }
700
795
 
796
+ #if __cpp_lib_string_view >= 201606L
797
+ _CCCL_TEMPLATE(class _Traits2 = _Traits)
798
+ _CCCL_REQUIRES(is_same_v<_Traits2, char_traits<_CharT>>)
799
+ _CCCL_HOST_API constexpr operator ::std::basic_string_view<_CharT>() const noexcept
800
+ {
801
+ return ::std::basic_string_view<_CharT>{__data_, __size_};
802
+ }
803
+
804
+ _CCCL_HOST_API constexpr operator ::std::basic_string_view<_CharT, _Traits>() const noexcept
805
+ {
806
+ return ::std::basic_string_view<_CharT, _Traits>{__data_, __size_};
807
+ }
808
+ #endif // ^^^ __cpp_lib_string_view >= 201606L ^^^
809
+
701
810
  private:
702
811
  enum class __assume_valid
703
812
  {
@@ -725,6 +834,23 @@ _CCCL_TEMPLATE(class _Range)
725
834
  _CCCL_REQUIRES(::cuda::std::ranges::contiguous_range<_Range>)
726
835
  _CCCL_HOST_DEVICE basic_string_view(_Range&&) -> basic_string_view<::cuda::std::ranges::range_value_t<_Range>>;
727
836
 
837
+ #if !_CCCL_COMPILER(NVRTC)
838
+ template <class _CharT, class _Alloc>
839
+ _CCCL_HOST basic_string_view(::std::basic_string<_CharT, ::std::char_traits<_CharT>, _Alloc>)
840
+ -> basic_string_view<_CharT>;
841
+
842
+ template <class _CharT, class _Traits, class _Alloc>
843
+ _CCCL_HOST basic_string_view(::std::basic_string<_CharT, _Traits, _Alloc>) -> basic_string_view<_CharT, _Traits>;
844
+ #endif // !_CCCL_COMPILER(NVRTC)
845
+
846
+ #if __cpp_lib_string_view >= 201606L
847
+ template <class _CharT>
848
+ _CCCL_HOST basic_string_view(::std::basic_string_view<_CharT>) -> basic_string_view<_CharT>;
849
+
850
+ template <class _CharT, class _Traits>
851
+ _CCCL_HOST basic_string_view(::std::basic_string_view<_CharT, _Traits>) -> basic_string_view<_CharT, _Traits>;
852
+ #endif // __cpp_lib_string_view >= 201606L
853
+
728
854
  // operator <<
729
855
 
730
856
  #if !_CCCL_COMPILER(NVRTC)
@@ -732,14 +858,23 @@ template <class _CharT>
732
858
  _CCCL_HOST_API ::std::basic_ostream<_CharT>&
733
859
  operator<<(::std::basic_ostream<_CharT>& __os, basic_string_view<_CharT> __str)
734
860
  {
735
- return __os << ::std::basic_string_view<_CharT>{__str.data(), __str.size()};
861
+ # if __cpp_lib_string_view >= 201606L
862
+ return __os << ::std::basic_string_view<_CharT, ::std::char_traits<_CharT>>{__str};
863
+ # else // ^^^ __cpp_lib_string_view >= 201606L ^^^ / vvv __cpp_lib_string_view < 201606L vvv
864
+ return __os
865
+ << ::std::basic_string<_CharT, ::std::char_traits<_CharT>, ::std::allocator<_CharT>>{__str.data(), __str.size()};
866
+ # endif // ^^^ __cpp_lib_string_view < 201606L ^^^
736
867
  }
737
868
 
738
869
  template <class _CharT, class _Traits>
739
870
  _CCCL_HOST_API ::std::basic_ostream<_CharT, _Traits>&
740
871
  operator<<(::std::basic_ostream<_CharT, _Traits>& __os, basic_string_view<_CharT, _Traits> __str)
741
872
  {
742
- return __os << ::std::basic_string_view<_CharT, _Traits>{__str.data(), __str.size()};
873
+ # if __cpp_lib_string_view >= 201606L
874
+ return __os << ::std::basic_string_view<_CharT, _Traits>{__str};
875
+ # else // ^^^ __cpp_lib_string_view >= 201606L ^^^ / vvv __cpp_lib_string_view < 201606L vvv
876
+ return __os << ::std::basic_string<_CharT, _Traits, ::std::allocator<_CharT>>{__str.data(), __str.size()};
877
+ # endif // ^^^ __cpp_lib_string_view < 201606L ^^^
743
878
  }
744
879
  #endif // !_CCCL_COMPILER(NVRTC)
745
880
 
@@ -48,6 +48,11 @@ private:
48
48
  # pragma system_header
49
49
  #endif // no system header
50
50
 
51
+ #if !defined(CCCL_IGNORE_DEPRECATED_STREAM_REF_HEADER)
52
+ _CCCL_WARNING("The <cuda/stream_ref> header is deprecated and will be removed in the next major release. The \
53
+ contents were moved to <cuda/stream>. To ignore this message, define CCCL_IGNORE_DEPRECATED_STREAM_REF_HEADER.")
54
+ #endif // !CCCL_IGNORE_DEPRECATED_STREAM_REF_HEADER
55
+
51
56
  #include <cuda/__stream/get_stream.h>
52
57
  #include <cuda/__stream/stream_ref.h>
53
58
 
@@ -21,6 +21,7 @@
21
21
  # pragma system_header
22
22
  #endif // no system header
23
23
 
24
+ #include <cuda/__utility/in_range.h>
24
25
  #include <cuda/__utility/static_for.h>
25
26
  #include <cuda/std/utility>
26
27
 
@@ -67,10 +67,11 @@ constexpr base_int_t sm_100_bit = 1 << 17;
67
67
  constexpr base_int_t sm_103_bit = 1 << 19;
68
68
  constexpr base_int_t sm_110_bit = 1 << 20;
69
69
  constexpr base_int_t sm_120_bit = 1 << 21;
70
+ constexpr base_int_t sm_121_bit = 1 << 22;
70
71
  constexpr base_int_t all_devices =
71
72
  sm_35_bit | sm_37_bit | sm_50_bit | sm_52_bit | sm_53_bit | sm_60_bit | sm_61_bit | sm_62_bit | sm_70_bit | sm_72_bit
72
73
  | sm_75_bit | sm_80_bit | sm_86_bit | sm_87_bit | sm_89_bit | sm_90_bit | sm_100_bit | sm_103_bit | sm_110_bit
73
- | sm_120_bit;
74
+ | sm_120_bit | sm_121_bit;
74
75
 
75
76
  // Store a set of targets as a set of bits
76
77
  struct _NV_BITSET_ATTRIBUTE target_description
@@ -105,6 +106,7 @@ enum class sm_selector : base_int_t
105
106
  sm_103 = 103,
106
107
  sm_110 = 110,
107
108
  sm_120 = 120,
109
+ sm_121 = 121,
108
110
  };
109
111
 
110
112
  constexpr base_int_t toint(sm_selector a)
@@ -134,12 +136,14 @@ constexpr base_int_t bitexact(sm_selector a)
134
136
  : toint(a) == 103 ? sm_103_bit
135
137
  : toint(a) == 110 ? sm_110_bit
136
138
  : toint(a) == 120 ? sm_120_bit
139
+ : toint(a) == 121 ? sm_121_bit
137
140
  : 0;
138
141
  }
139
142
 
140
143
  constexpr base_int_t bitrounddown(sm_selector a)
141
144
  {
142
- return toint(a) >= 120 ? sm_120_bit
145
+ return toint(a) >= 121 ? sm_121_bit
146
+ : toint(a) >= 120 ? sm_120_bit
143
147
  : toint(a) >= 110 ? sm_110_bit
144
148
  : toint(a) >= 103 ? sm_103_bit
145
149
  : toint(a) >= 100 ? sm_100_bit
@@ -222,6 +226,7 @@ constexpr sm_selector sm_100 = sm_selector::sm_100;
222
226
  constexpr sm_selector sm_103 = sm_selector::sm_103;
223
227
  constexpr sm_selector sm_110 = sm_selector::sm_110;
224
228
  constexpr sm_selector sm_120 = sm_selector::sm_120;
229
+ constexpr sm_selector sm_121 = sm_selector::sm_121;
225
230
 
226
231
  using detail::is_exactly;
227
232
  using detail::provides;
@@ -16,10 +16,10 @@
16
16
  #endif // no system header
17
17
  #include <thrust/detail/allocator/allocator_traits.h>
18
18
  #include <thrust/detail/memory_algorithms.h>
19
- #include <thrust/detail/memory_wrapper.h>
20
19
  #include <thrust/detail/raw_pointer_cast.h>
21
20
  #include <thrust/detail/type_deduction.h>
22
21
 
22
+ #include <cuda/std/__cccl/memory_wrapper.h>
23
23
  #include <cuda/std/utility>
24
24
 
25
25
  THRUST_NAMESPACE_BEGIN