cuda-cccl 0.3.2__cp313-cp313-manylinux_2_24_aarch64.whl → 0.3.4__cp313-cp313-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 (911) hide show
  1. cuda/cccl/headers/include/cub/agent/agent_adjacent_difference.cuh +12 -38
  2. cuda/cccl/headers/include/cub/agent/agent_batch_memcpy.cuh +16 -40
  3. cuda/cccl/headers/include/cub/agent/agent_for.cuh +2 -28
  4. cuda/cccl/headers/include/cub/agent/agent_histogram.cuh +24 -56
  5. cuda/cccl/headers/include/cub/agent/agent_merge_sort.cuh +12 -38
  6. cuda/cccl/headers/include/cub/agent/agent_radix_sort_downsweep.cuh +31 -56
  7. cuda/cccl/headers/include/cub/agent/agent_radix_sort_histogram.cuh +31 -35
  8. cuda/cccl/headers/include/cub/agent/agent_radix_sort_onesweep.cuh +47 -48
  9. cuda/cccl/headers/include/cub/agent/agent_radix_sort_upsweep.cuh +39 -42
  10. cuda/cccl/headers/include/cub/agent/agent_reduce.cuh +33 -60
  11. cuda/cccl/headers/include/cub/agent/agent_reduce_by_key.cuh +18 -44
  12. cuda/cccl/headers/include/cub/agent/agent_rle.cuh +26 -55
  13. cuda/cccl/headers/include/cub/agent/agent_scan.cuh +22 -49
  14. cuda/cccl/headers/include/cub/agent/agent_scan_by_key.cuh +15 -41
  15. cuda/cccl/headers/include/cub/agent/agent_segmented_radix_sort.cuh +9 -35
  16. cuda/cccl/headers/include/cub/agent/agent_select_if.cuh +20 -49
  17. cuda/cccl/headers/include/cub/agent/agent_sub_warp_merge_sort.cuh +14 -40
  18. cuda/cccl/headers/include/cub/agent/agent_three_way_partition.cuh +18 -40
  19. cuda/cccl/headers/include/cub/agent/agent_topk.cuh +0 -2
  20. cuda/cccl/headers/include/cub/agent/agent_unique_by_key.cuh +20 -46
  21. cuda/cccl/headers/include/cub/agent/single_pass_scan_operators.cuh +3 -28
  22. cuda/cccl/headers/include/cub/block/block_adjacent_difference.cuh +7 -31
  23. cuda/cccl/headers/include/cub/block/block_discontinuity.cuh +10 -34
  24. cuda/cccl/headers/include/cub/block/block_exchange.cuh +120 -154
  25. cuda/cccl/headers/include/cub/block/block_histogram.cuh +28 -52
  26. cuda/cccl/headers/include/cub/block/block_load.cuh +124 -146
  27. cuda/cccl/headers/include/cub/block/block_load_to_shared.cuh +0 -16
  28. cuda/cccl/headers/include/cub/block/block_merge_sort.cuh +58 -87
  29. cuda/cccl/headers/include/cub/block/block_radix_rank.cuh +81 -100
  30. cuda/cccl/headers/include/cub/block/block_radix_sort.cuh +92 -156
  31. cuda/cccl/headers/include/cub/block/block_raking_layout.cuh +8 -32
  32. cuda/cccl/headers/include/cub/block/block_reduce.cuh +21 -46
  33. cuda/cccl/headers/include/cub/block/block_run_length_decode.cuh +51 -79
  34. cuda/cccl/headers/include/cub/block/block_scan.cuh +94 -401
  35. cuda/cccl/headers/include/cub/block/block_shuffle.cuh +10 -34
  36. cuda/cccl/headers/include/cub/block/block_store.cuh +73 -97
  37. cuda/cccl/headers/include/cub/block/radix_rank_sort_operations.cuh +2 -29
  38. cuda/cccl/headers/include/cub/block/specializations/block_histogram_atomic.cuh +5 -29
  39. cuda/cccl/headers/include/cub/block/specializations/block_histogram_sort.cuh +25 -49
  40. cuda/cccl/headers/include/cub/block/specializations/block_reduce_raking.cuh +12 -34
  41. cuda/cccl/headers/include/cub/block/specializations/block_reduce_raking_commutative_only.cuh +10 -34
  42. cuda/cccl/headers/include/cub/block/specializations/block_reduce_warp_reductions.cuh +3 -27
  43. cuda/cccl/headers/include/cub/block/specializations/block_scan_raking.cuh +12 -36
  44. cuda/cccl/headers/include/cub/block/specializations/block_scan_warp_scans.cuh +9 -33
  45. cuda/cccl/headers/include/cub/config.cuh +2 -26
  46. cuda/cccl/headers/include/cub/cub.cuh +3 -27
  47. cuda/cccl/headers/include/cub/detail/array_utils.cuh +2 -26
  48. cuda/cccl/headers/include/cub/detail/choose_offset.cuh +2 -28
  49. cuda/cccl/headers/include/cub/detail/detect_cuda_runtime.cuh +3 -27
  50. cuda/cccl/headers/include/cub/detail/device_double_buffer.cuh +0 -2
  51. cuda/cccl/headers/include/cub/detail/device_memory_resource.cuh +1 -3
  52. cuda/cccl/headers/include/cub/detail/fast_modulo_division.cuh +2 -28
  53. cuda/cccl/headers/include/cub/detail/integer_utils.cuh +0 -2
  54. cuda/cccl/headers/include/cub/detail/launcher/cuda_driver.cuh +0 -2
  55. cuda/cccl/headers/include/cub/detail/launcher/cuda_runtime.cuh +0 -2
  56. cuda/cccl/headers/include/cub/detail/mdspan_utils.cuh +0 -2
  57. cuda/cccl/headers/include/cub/detail/ptx-json/README.md +7 -12
  58. cuda/cccl/headers/include/cub/detail/ptx-json/array.h +6 -33
  59. cuda/cccl/headers/include/cub/detail/ptx-json/json.h +13 -36
  60. cuda/cccl/headers/include/cub/detail/ptx-json/object.h +9 -38
  61. cuda/cccl/headers/include/cub/detail/ptx-json/string.h +58 -32
  62. cuda/cccl/headers/include/cub/detail/ptx-json/value.h +51 -51
  63. cuda/cccl/headers/include/cub/detail/ptx-json-parser.h +7 -31
  64. cuda/cccl/headers/include/cub/detail/rfa.cuh +2 -27
  65. cuda/cccl/headers/include/cub/detail/strong_load.cuh +3 -29
  66. cuda/cccl/headers/include/cub/detail/strong_store.cuh +3 -29
  67. cuda/cccl/headers/include/cub/detail/temporary_storage.cuh +2 -9
  68. cuda/cccl/headers/include/cub/detail/type_traits.cuh +0 -2
  69. cuda/cccl/headers/include/cub/detail/uninitialized_copy.cuh +6 -31
  70. cuda/cccl/headers/include/cub/detail/unsafe_bitcast.cuh +2 -25
  71. cuda/cccl/headers/include/cub/device/device_adjacent_difference.cuh +2 -26
  72. cuda/cccl/headers/include/cub/device/device_for.cuh +3 -5
  73. cuda/cccl/headers/include/cub/device/device_histogram.cuh +3 -27
  74. cuda/cccl/headers/include/cub/device/device_memcpy.cuh +2 -26
  75. cuda/cccl/headers/include/cub/device/device_merge_sort.cuh +2 -26
  76. cuda/cccl/headers/include/cub/device/device_partition.cuh +3 -27
  77. cuda/cccl/headers/include/cub/device/device_radix_sort.cuh +3 -27
  78. cuda/cccl/headers/include/cub/device/device_reduce.cuh +10 -31
  79. cuda/cccl/headers/include/cub/device/device_run_length_encode.cuh +3 -27
  80. cuda/cccl/headers/include/cub/device/device_scan.cuh +16 -34
  81. cuda/cccl/headers/include/cub/device/device_segmented_radix_sort.cuh +3 -27
  82. cuda/cccl/headers/include/cub/device/device_segmented_reduce.cuh +3 -27
  83. cuda/cccl/headers/include/cub/device/device_segmented_sort.cuh +2 -26
  84. cuda/cccl/headers/include/cub/device/device_select.cuh +3 -27
  85. cuda/cccl/headers/include/cub/device/dispatch/dispatch_adjacent_difference.cuh +2 -28
  86. cuda/cccl/headers/include/cub/device/dispatch/dispatch_batch_memcpy.cuh +2 -27
  87. cuda/cccl/headers/include/cub/device/dispatch/dispatch_copy_mdspan.cuh +0 -2
  88. cuda/cccl/headers/include/cub/device/dispatch/dispatch_for.cuh +3 -29
  89. cuda/cccl/headers/include/cub/device/dispatch/dispatch_histogram.cuh +14 -34
  90. cuda/cccl/headers/include/cub/device/dispatch/dispatch_merge_sort.cuh +5 -30
  91. cuda/cccl/headers/include/cub/device/dispatch/dispatch_radix_sort.cuh +4 -29
  92. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce.cuh +5 -32
  93. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_by_key.cuh +3 -29
  94. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_deterministic.cuh +2 -29
  95. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_nondeterministic.cuh +1 -2
  96. cuda/cccl/headers/include/cub/device/dispatch/dispatch_rle.cuh +47 -59
  97. cuda/cccl/headers/include/cub/device/dispatch/dispatch_scan.cuh +21 -30
  98. cuda/cccl/headers/include/cub/device/dispatch/dispatch_scan_by_key.cuh +2 -27
  99. cuda/cccl/headers/include/cub/device/dispatch/dispatch_segmented_sort.cuh +3 -27
  100. cuda/cccl/headers/include/cub/device/dispatch/dispatch_select_if.cuh +3 -27
  101. cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce.cuh +0 -2
  102. cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce_by_key.cuh +51 -36
  103. cuda/cccl/headers/include/cub/device/dispatch/dispatch_three_way_partition.cuh +3 -28
  104. cuda/cccl/headers/include/cub/device/dispatch/dispatch_topk.cuh +0 -1
  105. cuda/cccl/headers/include/cub/device/dispatch/dispatch_transform.cuh +27 -55
  106. cuda/cccl/headers/include/cub/device/dispatch/dispatch_unique_by_key.cuh +4 -28
  107. cuda/cccl/headers/include/cub/device/dispatch/kernels/{for_each.cuh → kernel_for_each.cuh} +0 -2
  108. cuda/cccl/headers/include/cub/device/dispatch/kernels/{histogram.cuh → kernel_histogram.cuh} +149 -157
  109. cuda/cccl/headers/include/cub/device/dispatch/kernels/{merge_sort.cuh → kernel_merge_sort.cuh} +0 -2
  110. cuda/cccl/headers/include/cub/device/dispatch/kernels/{radix_sort.cuh → kernel_radix_sort.cuh} +0 -2
  111. cuda/cccl/headers/include/cub/device/dispatch/kernels/{reduce.cuh → kernel_reduce.cuh} +2 -28
  112. cuda/cccl/headers/include/cub/device/dispatch/kernels/{scan.cuh → kernel_scan.cuh} +2 -28
  113. cuda/cccl/headers/include/cub/device/dispatch/kernels/{segmented_reduce.cuh → kernel_segmented_reduce.cuh} +3 -29
  114. cuda/cccl/headers/include/cub/device/dispatch/kernels/{segmented_sort.cuh → kernel_segmented_sort.cuh} +0 -1
  115. cuda/cccl/headers/include/cub/device/dispatch/kernels/{three_way_partition.cuh → kernel_three_way_partition.cuh} +0 -1
  116. cuda/cccl/headers/include/cub/device/dispatch/kernels/{transform.cuh → kernel_transform.cuh} +11 -11
  117. cuda/cccl/headers/include/cub/device/dispatch/kernels/{unique_by_key.cuh → kernel_unique_by_key.cuh} +0 -1
  118. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_adjacent_difference.cuh +2 -26
  119. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_batch_memcpy.cuh +2 -26
  120. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_for.cuh +2 -28
  121. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_histogram.cuh +6 -26
  122. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge.cuh +2 -26
  123. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge_sort.cuh +5 -31
  124. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_radix_sort.cuh +31 -33
  125. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce.cuh +15 -40
  126. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce_by_key.cuh +2 -26
  127. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_run_length_encode.cuh +2 -28
  128. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan.cuh +20 -44
  129. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan_by_key.cuh +2 -26
  130. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_segmented_sort.cuh +20 -45
  131. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_select_if.cuh +2 -27
  132. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_three_way_partition.cuh +11 -36
  133. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_topk.cuh +0 -1
  134. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_transform.cuh +2 -27
  135. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_unique_by_key.cuh +14 -40
  136. cuda/cccl/headers/include/cub/grid/grid_even_share.cuh +3 -27
  137. cuda/cccl/headers/include/cub/grid/grid_mapping.cuh +3 -27
  138. cuda/cccl/headers/include/cub/grid/grid_queue.cuh +3 -27
  139. cuda/cccl/headers/include/cub/iterator/arg_index_input_iterator.cuh +3 -27
  140. cuda/cccl/headers/include/cub/iterator/cache_modified_input_iterator.cuh +3 -27
  141. cuda/cccl/headers/include/cub/iterator/cache_modified_output_iterator.cuh +3 -27
  142. cuda/cccl/headers/include/cub/iterator/tex_obj_input_iterator.cuh +3 -27
  143. cuda/cccl/headers/include/cub/thread/thread_load.cuh +3 -28
  144. cuda/cccl/headers/include/cub/thread/thread_operators.cuh +3 -27
  145. cuda/cccl/headers/include/cub/thread/thread_reduce.cuh +3 -26
  146. cuda/cccl/headers/include/cub/thread/thread_scan.cuh +3 -29
  147. cuda/cccl/headers/include/cub/thread/thread_search.cuh +3 -27
  148. cuda/cccl/headers/include/cub/thread/thread_simd.cuh +0 -2
  149. cuda/cccl/headers/include/cub/thread/thread_sort.cuh +2 -26
  150. cuda/cccl/headers/include/cub/thread/thread_store.cuh +3 -27
  151. cuda/cccl/headers/include/cub/util_allocator.cuh +3 -27
  152. cuda/cccl/headers/include/cub/util_arch.cuh +3 -29
  153. cuda/cccl/headers/include/cub/util_cpp_dialect.cuh +2 -26
  154. cuda/cccl/headers/include/cub/util_debug.cuh +3 -27
  155. cuda/cccl/headers/include/cub/util_device.cuh +18 -59
  156. cuda/cccl/headers/include/cub/util_macro.cuh +4 -28
  157. cuda/cccl/headers/include/cub/util_math.cuh +2 -28
  158. cuda/cccl/headers/include/cub/util_namespace.cuh +3 -28
  159. cuda/cccl/headers/include/cub/util_policy_wrapper_t.cuh +3 -27
  160. cuda/cccl/headers/include/cub/util_ptx.cuh +6 -30
  161. cuda/cccl/headers/include/cub/util_temporary_storage.cuh +3 -29
  162. cuda/cccl/headers/include/cub/util_type.cuh +5 -32
  163. cuda/cccl/headers/include/cub/util_vsmem.cuh +2 -28
  164. cuda/cccl/headers/include/cub/version.cuh +2 -26
  165. cuda/cccl/headers/include/cub/warp/specializations/warp_exchange_shfl.cuh +10 -35
  166. cuda/cccl/headers/include/cub/warp/specializations/warp_exchange_smem.cuh +5 -30
  167. cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_shfl.cuh +15 -39
  168. cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_smem.cuh +5 -35
  169. cuda/cccl/headers/include/cub/warp/specializations/warp_scan_shfl.cuh +22 -46
  170. cuda/cccl/headers/include/cub/warp/specializations/warp_scan_smem.cuh +3 -27
  171. cuda/cccl/headers/include/cub/warp/warp_exchange.cuh +2 -26
  172. cuda/cccl/headers/include/cub/warp/warp_load.cuh +4 -27
  173. cuda/cccl/headers/include/cub/warp/warp_merge_sort.cuh +2 -26
  174. cuda/cccl/headers/include/cub/warp/warp_reduce.cuh +3 -22
  175. cuda/cccl/headers/include/cub/warp/warp_scan.cuh +3 -27
  176. cuda/cccl/headers/include/cub/warp/warp_store.cuh +4 -27
  177. cuda/cccl/headers/include/cub/warp/warp_utils.cuh +0 -2
  178. cuda/cccl/headers/include/cuda/__barrier/barrier.h +1 -1
  179. cuda/cccl/headers/include/cuda/__barrier/barrier_arrive_tx.h +0 -1
  180. cuda/cccl/headers/include/cuda/__barrier/barrier_block_scope.h +277 -235
  181. cuda/cccl/headers/include/cuda/__barrier/barrier_expect_tx.h +0 -1
  182. cuda/cccl/headers/include/cuda/__driver/driver_api.h +13 -0
  183. cuda/cccl/headers/include/cuda/__execution/determinism.h +0 -2
  184. cuda/cccl/headers/include/cuda/__execution/output_ordering.h +0 -2
  185. cuda/cccl/headers/include/cuda/__functional/maximum.h +25 -7
  186. cuda/cccl/headers/include/cuda/__functional/minimum.h +25 -7
  187. cuda/cccl/headers/include/cuda/__functional/minimum_maximum_common.h +52 -0
  188. cuda/cccl/headers/include/cuda/__functional/proclaim_return_type.h +0 -2
  189. cuda/cccl/headers/include/cuda/__iterator/counting_iterator.h +13 -4
  190. cuda/cccl/headers/include/cuda/__iterator/zip_function.h +4 -2
  191. cuda/cccl/headers/include/cuda/__mdspan/host_device_accessor.h +0 -1
  192. cuda/cccl/headers/include/cuda/__memcpy_async/cp_async_bulk_shared_global.h +28 -7
  193. cuda/cccl/headers/include/cuda/__memcpy_async/dispatch_memcpy_async.h +1 -1
  194. cuda/cccl/headers/include/cuda/__memcpy_async/elect_one.h +52 -0
  195. cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_async_tx.h +2 -3
  196. cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_completion.h +1 -7
  197. cuda/cccl/headers/include/cuda/__memcpy_async/try_get_barrier_handle.h +0 -1
  198. cuda/cccl/headers/include/cuda/__memory/get_device_address.h +1 -1
  199. cuda/cccl/headers/include/cuda/__memory/ranges_overlap.h +126 -0
  200. cuda/cccl/headers/include/cuda/__memory_resource/any_resource.h +898 -0
  201. cuda/cccl/headers/include/cuda/__memory_resource/device_memory_pool.h +149 -0
  202. cuda/cccl/headers/include/cuda/__memory_resource/get_property.h +3 -3
  203. cuda/cccl/headers/include/cuda/__memory_resource/legacy_managed_memory_resource.h +148 -0
  204. cuda/cccl/headers/include/cuda/__memory_resource/legacy_pinned_memory_resource.h +139 -0
  205. cuda/cccl/headers/include/cuda/__memory_resource/managed_memory_pool.h +146 -0
  206. cuda/cccl/headers/include/cuda/__memory_resource/memory_resource_base.h +578 -0
  207. cuda/cccl/headers/include/cuda/__memory_resource/pinned_memory_pool.h +188 -0
  208. cuda/cccl/headers/include/cuda/__memory_resource/properties.h +3 -3
  209. cuda/cccl/headers/include/cuda/__memory_resource/resource.h +37 -3
  210. cuda/cccl/headers/include/cuda/__numeric/add_overflow.h +13 -3
  211. cuda/cccl/headers/include/cuda/__numeric/div_overflow.h +150 -0
  212. cuda/cccl/headers/include/cuda/__numeric/overflow_cast.h +2 -2
  213. cuda/cccl/headers/include/cuda/__numeric/sub_overflow.h +344 -0
  214. cuda/cccl/headers/include/cuda/__nvtx/nvtx3.h +0 -6
  215. cuda/cccl/headers/include/cuda/__ptx/instructions/shfl_sync.h +1 -1
  216. cuda/cccl/headers/include/cuda/__ptx/pragmas/enable_smem_spilling.h +47 -0
  217. cuda/cccl/headers/include/cuda/{std/__cuda → __runtime}/api_wrapper.h +3 -3
  218. cuda/cccl/headers/include/cuda/__stream/get_stream.h +0 -1
  219. cuda/cccl/headers/include/cuda/{__fwd/barrier_native_handle.h → __stream/internal_streams.h} +17 -15
  220. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_ptr.h +2 -2
  221. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_value.h +1 -0
  222. cuda/cccl/headers/include/cuda/__utility/__basic_any/semiregular.h +1 -0
  223. cuda/cccl/headers/include/cuda/__utility/__basic_any/virtcall.h +2 -1
  224. cuda/cccl/headers/include/cuda/barrier +42 -16
  225. cuda/cccl/headers/include/cuda/memory +1 -0
  226. cuda/cccl/headers/include/cuda/memory_resource +6 -1
  227. cuda/cccl/headers/include/cuda/numeric +2 -0
  228. cuda/cccl/headers/include/cuda/pipeline +3 -2
  229. cuda/cccl/headers/include/cuda/ptx +1 -0
  230. cuda/cccl/headers/include/cuda/std/__algorithm/unique_copy.h +0 -2
  231. cuda/cccl/headers/include/cuda/std/__atomic/api/reference.h +1 -1
  232. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_derived.h +115 -58
  233. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_generated.h +844 -378
  234. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_generated_helper.h +12 -5
  235. cuda/cccl/headers/include/cuda/std/__atomic/functions/host.h +31 -0
  236. cuda/cccl/headers/include/cuda/std/__atomic/types/small.h +10 -0
  237. cuda/cccl/headers/include/cuda/std/__atomic/types.h +2 -3
  238. cuda/cccl/headers/include/cuda/std/__bit/byteswap.h +37 -13
  239. cuda/cccl/headers/include/cuda/std/__cccl/builtin.h +0 -28
  240. cuda/cccl/headers/include/cuda/std/__cccl/dialect.h +7 -0
  241. cuda/cccl/headers/include/cuda/std/__cccl/epilogue.h +10 -0
  242. cuda/cccl/headers/include/cuda/std/__cccl/exceptions.h +2 -45
  243. cuda/cccl/headers/include/cuda/std/__cccl/is_non_narrowing_convertible.h +0 -2
  244. cuda/cccl/headers/include/cuda/std/__cccl/prologue.h +8 -0
  245. cuda/cccl/headers/include/cuda/std/__chrono/calendar.h +0 -2
  246. cuda/cccl/headers/include/cuda/std/__chrono/day.h +0 -2
  247. cuda/cccl/headers/include/cuda/std/__chrono/duration.h +13 -17
  248. cuda/cccl/headers/include/cuda/std/__chrono/file_clock.h +0 -2
  249. cuda/cccl/headers/include/cuda/std/__chrono/high_resolution_clock.h +0 -2
  250. cuda/cccl/headers/include/cuda/std/__chrono/month.h +0 -2
  251. cuda/cccl/headers/include/cuda/std/__chrono/steady_clock.h +0 -2
  252. cuda/cccl/headers/include/cuda/std/__chrono/system_clock.h +0 -2
  253. cuda/cccl/headers/include/cuda/std/__chrono/time_point.h +5 -8
  254. cuda/cccl/headers/include/cuda/std/__chrono/year.h +0 -2
  255. cuda/cccl/headers/include/cuda/std/__cmath/error_functions.h +4 -0
  256. cuda/cccl/headers/include/cuda/std/__cmath/exponential_functions.h +2 -3
  257. cuda/cccl/headers/include/cuda/std/__cmath/fdim.h +4 -0
  258. cuda/cccl/headers/include/cuda/std/__cmath/fma.h +4 -0
  259. cuda/cccl/headers/include/cuda/std/__cmath/fpclassify.h +2 -3
  260. cuda/cccl/headers/include/cuda/std/__cmath/gamma.h +2 -3
  261. cuda/cccl/headers/include/cuda/std/__cmath/hyperbolic_functions.h +2 -3
  262. cuda/cccl/headers/include/cuda/std/__cmath/hypot.h +2 -3
  263. cuda/cccl/headers/include/cuda/std/__cmath/inverse_hyperbolic_functions.h +2 -3
  264. cuda/cccl/headers/include/cuda/std/__cmath/inverse_trigonometric_functions.h +2 -3
  265. cuda/cccl/headers/include/cuda/std/__cmath/isfinite.h +2 -3
  266. cuda/cccl/headers/include/cuda/std/__cmath/isinf.h +2 -3
  267. cuda/cccl/headers/include/cuda/std/__cmath/isnan.h +2 -3
  268. cuda/cccl/headers/include/cuda/std/__cmath/logarithms.h +2 -3
  269. cuda/cccl/headers/include/cuda/std/__cmath/min_max.h +2 -2
  270. cuda/cccl/headers/include/cuda/std/__cmath/remainder.h +4 -0
  271. cuda/cccl/headers/include/cuda/std/__cmath/roots.h +2 -3
  272. cuda/cccl/headers/include/cuda/std/__cmath/rounding_functions.h +2 -3
  273. cuda/cccl/headers/include/cuda/std/__cmath/traits.h +4 -0
  274. cuda/cccl/headers/include/cuda/std/__cmath/trigonometric_functions.h +2 -3
  275. cuda/cccl/headers/include/cuda/std/__complex/complex.h +0 -6
  276. cuda/cccl/headers/include/cuda/std/__complex/exponential_functions.h +2 -2
  277. cuda/cccl/headers/include/cuda/std/__concepts/concept_macros.h +27 -1
  278. cuda/cccl/headers/include/cuda/std/__concepts/equality_comparable.h +2 -4
  279. cuda/cccl/headers/include/cuda/std/__exception/cuda_error.h +15 -36
  280. cuda/cccl/headers/include/cuda/std/__exception/exception_macros.h +93 -0
  281. cuda/cccl/headers/include/cuda/std/{detail/libcxx/include/stdexcept → __exception/throw_error.h} +3 -3
  282. cuda/cccl/headers/include/cuda/std/__expected/expected.h +28 -43
  283. cuda/cccl/headers/include/cuda/std/__expected/unexpected.h +2 -10
  284. cuda/cccl/headers/include/cuda/std/__format/format_arg_store.h +2 -2
  285. cuda/cccl/headers/include/cuda/std/__functional/bind.h +6 -6
  286. cuda/cccl/headers/include/cuda/std/__functional/function.h +2 -6
  287. cuda/cccl/headers/include/cuda/std/__functional/invoke.h +5 -5
  288. cuda/cccl/headers/include/cuda/std/__fwd/allocator.h +5 -0
  289. cuda/cccl/headers/include/cuda/std/__fwd/array.h +2 -2
  290. cuda/cccl/headers/include/cuda/std/__fwd/char_traits.h +12 -0
  291. cuda/cccl/headers/include/cuda/std/__fwd/expected.h +46 -0
  292. cuda/cccl/headers/include/cuda/std/__fwd/get.h +21 -22
  293. cuda/cccl/headers/include/cuda/std/{detail/libcxx/include/iosfwd → __fwd/ios.h} +5 -10
  294. cuda/cccl/headers/include/cuda/std/__fwd/mdspan.h +19 -10
  295. cuda/cccl/headers/include/cuda/std/__fwd/optional.h +2 -2
  296. cuda/cccl/headers/include/cuda/std/__fwd/reference_wrapper.h +5 -0
  297. cuda/cccl/headers/include/cuda/std/__fwd/span.h +2 -2
  298. cuda/cccl/headers/include/cuda/std/__fwd/string.h +7 -0
  299. cuda/cccl/headers/include/cuda/std/__fwd/string_view.h +18 -0
  300. cuda/cccl/headers/include/cuda/std/__fwd/tuple.h +3 -0
  301. cuda/cccl/headers/include/cuda/std/__fwd/unexpected.h +40 -0
  302. cuda/cccl/headers/include/cuda/std/{__type_traits/is_reference_wrapper.h → __fwd/variant.h} +16 -15
  303. cuda/cccl/headers/include/cuda/std/__internal/features.h +14 -0
  304. cuda/cccl/headers/include/cuda/std/__iterator/istream_iterator.h +1 -1
  305. cuda/cccl/headers/include/cuda/std/__iterator/istreambuf_iterator.h +1 -1
  306. cuda/cccl/headers/include/cuda/std/__iterator/iter_swap.h +58 -40
  307. cuda/cccl/headers/include/cuda/std/__iterator/ostream_iterator.h +1 -1
  308. cuda/cccl/headers/include/cuda/std/__iterator/ostreambuf_iterator.h +1 -1
  309. cuda/cccl/headers/include/cuda/std/__iterator/reverse_iterator.h +0 -5
  310. cuda/cccl/headers/include/cuda/std/__limits/numeric_limits.h +4 -18
  311. cuda/cccl/headers/include/cuda/std/__linalg/conj_if_needed.h +1 -2
  312. cuda/cccl/headers/include/cuda/std/__linalg/conjugate_transposed.h +0 -2
  313. cuda/cccl/headers/include/cuda/std/__linalg/conjugated.h +0 -2
  314. cuda/cccl/headers/include/cuda/std/__linalg/scaled.h +0 -4
  315. cuda/cccl/headers/include/cuda/std/__linalg/transposed.h +0 -5
  316. cuda/cccl/headers/include/cuda/std/__mdspan/concepts.h +3 -10
  317. cuda/cccl/headers/include/cuda/std/__mdspan/extents.h +4 -15
  318. cuda/cccl/headers/include/cuda/std/__mdspan/layout_left.h +4 -4
  319. cuda/cccl/headers/include/cuda/std/__mdspan/layout_right.h +4 -4
  320. cuda/cccl/headers/include/cuda/std/__mdspan/layout_stride.h +2 -4
  321. cuda/cccl/headers/include/cuda/std/__mdspan/mdspan.h +3 -3
  322. cuda/cccl/headers/include/cuda/std/__mdspan/submdspan_helper.h +1 -1
  323. cuda/cccl/headers/include/cuda/std/__memory/allocator_arg_t.h +1 -0
  324. cuda/cccl/headers/include/cuda/std/__memory/allocator_traits.h +6 -12
  325. cuda/cccl/headers/include/cuda/std/__memory/construct_at.h +1 -5
  326. cuda/cccl/headers/include/cuda/std/__memory/is_sufficiently_aligned.h +7 -2
  327. cuda/cccl/headers/include/cuda/std/__memory/uninitialized_algorithms.h +1 -0
  328. cuda/cccl/headers/include/cuda/std/__memory/uses_allocator.h +5 -0
  329. cuda/cccl/headers/include/cuda/std/__new/allocate.h +5 -0
  330. cuda/cccl/headers/include/cuda/{__barrier/barrier_native_handle.h → std/__new/device_new.h} +9 -24
  331. cuda/cccl/headers/include/cuda/std/__new_ +1 -0
  332. cuda/cccl/headers/include/cuda/std/__optional/optional.h +5 -4
  333. cuda/cccl/headers/include/cuda/std/__optional/optional_ref.h +4 -4
  334. cuda/cccl/headers/include/cuda/std/__random/linear_congruential_engine.h +1 -1
  335. cuda/cccl/headers/include/cuda/std/__random/philox_engine.h +562 -0
  336. cuda/cccl/headers/include/cuda/std/__random/seed_seq.h +204 -0
  337. cuda/cccl/headers/include/cuda/std/__random_ +2 -0
  338. cuda/cccl/headers/include/cuda/std/__ranges/concepts.h +7 -19
  339. cuda/cccl/headers/include/cuda/std/__ranges/movable_box.h +2 -4
  340. cuda/cccl/headers/include/cuda/std/__ranges/owning_view.h +5 -4
  341. cuda/cccl/headers/include/cuda/std/__ranges/repeat_view.h +1 -1
  342. cuda/cccl/headers/include/cuda/std/__string/string_view.h +5 -5
  343. cuda/cccl/headers/include/cuda/std/__tuple_dir/apply.h +82 -0
  344. cuda/cccl/headers/include/cuda/std/__tuple_dir/get.h +122 -0
  345. cuda/cccl/headers/include/cuda/std/__tuple_dir/sfinae_helpers.h +0 -160
  346. cuda/cccl/headers/include/cuda/std/__tuple_dir/structured_bindings.h +123 -129
  347. cuda/cccl/headers/include/cuda/std/__tuple_dir/tie.h +55 -0
  348. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple.h +457 -0
  349. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_cat.h +158 -0
  350. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_constraints.h +286 -0
  351. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_element.h +7 -0
  352. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_leaf.h +452 -0
  353. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_like.h +1 -2
  354. cuda/cccl/headers/include/cuda/std/__type_traits/is_comparable.h +78 -0
  355. cuda/cccl/headers/include/cuda/std/__type_traits/is_convertible.h +1 -1
  356. cuda/cccl/headers/include/cuda/std/__type_traits/is_fully_bounded_array.h +47 -0
  357. cuda/cccl/headers/include/cuda/std/__type_traits/is_swappable.h +0 -2
  358. cuda/cccl/headers/include/cuda/std/__utility/in_place.h +4 -24
  359. cuda/cccl/headers/include/cuda/std/__utility/integer_sequence.h +0 -2
  360. cuda/cccl/headers/include/cuda/std/__utility/pair.h +20 -20
  361. cuda/cccl/headers/include/cuda/std/__utility/rel_ops.h +0 -2
  362. cuda/cccl/headers/include/cuda/std/__variant/bad_variant_access.h +74 -0
  363. cuda/cccl/headers/include/cuda/std/__variant/comparison.h +207 -0
  364. cuda/cccl/headers/include/cuda/std/__variant/get.h +192 -0
  365. cuda/cccl/headers/include/cuda/std/__variant/hash.h +82 -0
  366. cuda/cccl/headers/include/cuda/std/__variant/sfinae_helpers.h +89 -0
  367. cuda/cccl/headers/include/cuda/std/__variant/variant.h +250 -0
  368. cuda/cccl/headers/include/cuda/std/__variant/variant_access.h +70 -0
  369. cuda/cccl/headers/include/cuda/std/__variant/variant_base.h +683 -0
  370. cuda/cccl/headers/include/cuda/std/__variant/variant_constraints.h +135 -0
  371. cuda/cccl/headers/include/cuda/std/__variant/variant_match.h +126 -0
  372. cuda/cccl/headers/include/cuda/std/__variant/variant_traits.h +184 -0
  373. cuda/cccl/headers/include/cuda/std/__variant/variant_visit.h +225 -0
  374. cuda/cccl/headers/include/cuda/std/__variant/visit.h +148 -0
  375. cuda/cccl/headers/include/cuda/std/array +1 -1
  376. cuda/cccl/headers/include/cuda/std/atomic +1 -1
  377. cuda/cccl/headers/include/cuda/std/bitset +2 -10
  378. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/__config +6 -6
  379. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/algorithm +1 -4
  380. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/chrono +3 -6
  381. cuda/cccl/headers/include/cuda/std/functional +1 -1
  382. cuda/cccl/headers/include/cuda/std/initializer_list +8 -0
  383. cuda/cccl/headers/include/cuda/std/inplace_vector +6 -5
  384. cuda/cccl/headers/include/cuda/std/iterator +1 -1
  385. cuda/cccl/headers/include/cuda/std/numbers +0 -2
  386. cuda/cccl/headers/include/cuda/std/ratio +2 -2
  387. cuda/cccl/headers/include/cuda/std/span +2 -2
  388. cuda/cccl/headers/include/cuda/std/string_view +24 -42
  389. cuda/cccl/headers/include/cuda/std/tuple +18 -1
  390. cuda/cccl/headers/include/cuda/std/type_traits +0 -1
  391. cuda/cccl/headers/include/cuda/std/variant +8 -1
  392. cuda/cccl/headers/include/nv/target +2 -6
  393. cuda/cccl/headers/include/thrust/detail/adjacent_difference.inl +15 -2
  394. cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.h +0 -2
  395. cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.h +0 -1
  396. cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.h +0 -1
  397. cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.h +0 -2
  398. cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.h +0 -2
  399. cuda/cccl/headers/include/thrust/detail/allocator/no_throw_allocator.h +0 -2
  400. cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.h +0 -2
  401. cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.h +0 -2
  402. cuda/cccl/headers/include/thrust/detail/allocator_aware_execution_policy.h +0 -4
  403. cuda/cccl/headers/include/thrust/detail/binary_search.inl +14 -2
  404. cuda/cccl/headers/include/thrust/detail/complex/arithmetic.h +2 -7
  405. cuda/cccl/headers/include/thrust/detail/complex/c99math.h +2 -8
  406. cuda/cccl/headers/include/thrust/detail/complex/catrig.h +2 -8
  407. cuda/cccl/headers/include/thrust/detail/complex/catrigf.h +2 -8
  408. cuda/cccl/headers/include/thrust/detail/complex/ccosh.h +2 -8
  409. cuda/cccl/headers/include/thrust/detail/complex/ccoshf.h +2 -8
  410. cuda/cccl/headers/include/thrust/detail/complex/cexp.h +2 -7
  411. cuda/cccl/headers/include/thrust/detail/complex/cexpf.h +2 -8
  412. cuda/cccl/headers/include/thrust/detail/complex/clog.h +2 -8
  413. cuda/cccl/headers/include/thrust/detail/complex/clogf.h +2 -8
  414. cuda/cccl/headers/include/thrust/detail/complex/cproj.h +2 -7
  415. cuda/cccl/headers/include/thrust/detail/complex/csinh.h +2 -8
  416. cuda/cccl/headers/include/thrust/detail/complex/csinhf.h +2 -8
  417. cuda/cccl/headers/include/thrust/detail/complex/csqrt.h +2 -8
  418. cuda/cccl/headers/include/thrust/detail/complex/csqrtf.h +2 -8
  419. cuda/cccl/headers/include/thrust/detail/complex/ctanh.h +2 -8
  420. cuda/cccl/headers/include/thrust/detail/complex/ctanhf.h +2 -8
  421. cuda/cccl/headers/include/thrust/detail/complex/math_private.h +2 -8
  422. cuda/cccl/headers/include/thrust/detail/config/device_system.h +2 -0
  423. cuda/cccl/headers/include/thrust/detail/config/host_system.h +2 -0
  424. cuda/cccl/headers/include/thrust/detail/config/namespace.h +0 -1
  425. cuda/cccl/headers/include/thrust/detail/contiguous_storage.h +0 -2
  426. cuda/cccl/headers/include/thrust/detail/contiguous_storage.inl +0 -2
  427. cuda/cccl/headers/include/thrust/detail/copy.h +0 -2
  428. cuda/cccl/headers/include/thrust/detail/copy.inl +14 -4
  429. cuda/cccl/headers/include/thrust/detail/copy_if.inl +14 -2
  430. cuda/cccl/headers/include/thrust/detail/count.inl +14 -2
  431. cuda/cccl/headers/include/thrust/detail/equal.inl +14 -2
  432. cuda/cccl/headers/include/thrust/detail/execute_with_allocator.h +4 -5
  433. cuda/cccl/headers/include/thrust/detail/extrema.inl +14 -2
  434. cuda/cccl/headers/include/thrust/detail/fill.inl +14 -2
  435. cuda/cccl/headers/include/thrust/detail/find.inl +14 -2
  436. cuda/cccl/headers/include/thrust/detail/for_each.inl +14 -2
  437. cuda/cccl/headers/include/thrust/detail/functional/actor.h +2 -5
  438. cuda/cccl/headers/include/thrust/detail/functional/operators.h +2 -5
  439. cuda/cccl/headers/include/thrust/detail/gather.inl +14 -2
  440. cuda/cccl/headers/include/thrust/detail/generate.inl +14 -2
  441. cuda/cccl/headers/include/thrust/detail/get_iterator_value.h +0 -2
  442. cuda/cccl/headers/include/thrust/detail/inner_product.inl +14 -2
  443. cuda/cccl/headers/include/thrust/detail/internal_functional.h +1 -0
  444. cuda/cccl/headers/include/thrust/detail/logical.inl +14 -2
  445. cuda/cccl/headers/include/thrust/detail/malloc_and_free.h +13 -1
  446. cuda/cccl/headers/include/thrust/detail/merge.inl +14 -2
  447. cuda/cccl/headers/include/thrust/detail/mismatch.inl +14 -2
  448. cuda/cccl/headers/include/thrust/detail/overlapped_copy.h +0 -4
  449. cuda/cccl/headers/include/thrust/detail/partition.inl +14 -2
  450. cuda/cccl/headers/include/thrust/detail/random_bijection.h +0 -2
  451. cuda/cccl/headers/include/thrust/detail/range/head_flags.h +0 -2
  452. cuda/cccl/headers/include/thrust/detail/range/tail_flags.h +0 -2
  453. cuda/cccl/headers/include/thrust/detail/raw_reference_cast.h +0 -6
  454. cuda/cccl/headers/include/thrust/detail/reduce.inl +21 -3
  455. cuda/cccl/headers/include/thrust/detail/reference.h +27 -3
  456. cuda/cccl/headers/include/thrust/detail/remove.inl +14 -2
  457. cuda/cccl/headers/include/thrust/detail/replace.inl +14 -2
  458. cuda/cccl/headers/include/thrust/detail/reverse.inl +14 -2
  459. cuda/cccl/headers/include/thrust/detail/scan.inl +21 -3
  460. cuda/cccl/headers/include/thrust/detail/scatter.inl +14 -2
  461. cuda/cccl/headers/include/thrust/detail/sequence.inl +13 -1
  462. cuda/cccl/headers/include/thrust/detail/set_operations.inl +13 -1
  463. cuda/cccl/headers/include/thrust/detail/sort.inl +13 -1
  464. cuda/cccl/headers/include/thrust/detail/static_assert.h +0 -2
  465. cuda/cccl/headers/include/thrust/detail/static_map.h +0 -3
  466. cuda/cccl/headers/include/thrust/detail/swap_ranges.inl +13 -1
  467. cuda/cccl/headers/include/thrust/detail/tabulate.inl +14 -2
  468. cuda/cccl/headers/include/thrust/detail/temporary_array.h +0 -4
  469. cuda/cccl/headers/include/thrust/detail/temporary_array.inl +0 -1
  470. cuda/cccl/headers/include/thrust/detail/temporary_buffer.h +14 -3
  471. cuda/cccl/headers/include/thrust/detail/transform_reduce.inl +13 -1
  472. cuda/cccl/headers/include/thrust/detail/transform_scan.inl +13 -1
  473. cuda/cccl/headers/include/thrust/detail/trivial_sequence.h +0 -2
  474. cuda/cccl/headers/include/thrust/detail/tuple_meta_transform.h +0 -2
  475. cuda/cccl/headers/include/thrust/detail/type_traits/is_call_possible.h +2 -7
  476. cuda/cccl/headers/include/thrust/detail/type_traits/is_commutative.h +0 -2
  477. cuda/cccl/headers/include/thrust/detail/type_traits/is_thrust_pointer.h +0 -4
  478. cuda/cccl/headers/include/thrust/detail/type_traits/pointer_traits.h +0 -4
  479. cuda/cccl/headers/include/thrust/detail/uninitialized_copy.inl +14 -2
  480. cuda/cccl/headers/include/thrust/detail/uninitialized_fill.inl +14 -2
  481. cuda/cccl/headers/include/thrust/detail/unique.inl +21 -3
  482. cuda/cccl/headers/include/thrust/detail/vector_base.h +0 -2
  483. cuda/cccl/headers/include/thrust/detail/vector_base.inl +0 -2
  484. cuda/cccl/headers/include/thrust/execution_policy.h +10 -9
  485. cuda/cccl/headers/include/thrust/functional.h +0 -2
  486. cuda/cccl/headers/include/thrust/iterator/detail/device_system_tag.h +9 -4
  487. cuda/cccl/headers/include/thrust/iterator/detail/host_system_tag.h +8 -4
  488. cuda/cccl/headers/include/thrust/iterator/detail/iterator_adaptor_base.h +0 -1
  489. cuda/cccl/headers/include/thrust/iterator/detail/iterator_category_with_system_and_traversal.h +0 -1
  490. cuda/cccl/headers/include/thrust/iterator/detail/iterator_facade_category.h +0 -1
  491. cuda/cccl/headers/include/thrust/iterator/detail/minimum_system.h +0 -1
  492. cuda/cccl/headers/include/thrust/iterator/detail/tagged_iterator.h +0 -1
  493. cuda/cccl/headers/include/thrust/iterator/detail/tuple_of_iterator_references.h +2 -6
  494. cuda/cccl/headers/include/thrust/iterator/transform_input_output_iterator.h +0 -1
  495. cuda/cccl/headers/include/thrust/iterator/transform_iterator.h +0 -2
  496. cuda/cccl/headers/include/thrust/mr/allocator.h +0 -2
  497. cuda/cccl/headers/include/thrust/mr/device_memory_resource.h +9 -4
  498. cuda/cccl/headers/include/thrust/mr/disjoint_pool.h +10 -10
  499. cuda/cccl/headers/include/thrust/mr/disjoint_sync_pool.h +0 -2
  500. cuda/cccl/headers/include/thrust/mr/disjoint_tls_pool.h +0 -2
  501. cuda/cccl/headers/include/thrust/mr/fancy_pointer_resource.h +0 -2
  502. cuda/cccl/headers/include/thrust/mr/host_memory_resource.h +8 -4
  503. cuda/cccl/headers/include/thrust/mr/memory_resource.h +0 -2
  504. cuda/cccl/headers/include/thrust/mr/new.h +0 -2
  505. cuda/cccl/headers/include/thrust/mr/polymorphic_adaptor.h +0 -2
  506. cuda/cccl/headers/include/thrust/mr/pool.h +10 -10
  507. cuda/cccl/headers/include/thrust/mr/pool_options.h +4 -6
  508. cuda/cccl/headers/include/thrust/mr/sync_pool.h +0 -2
  509. cuda/cccl/headers/include/thrust/mr/tls_pool.h +0 -2
  510. cuda/cccl/headers/include/thrust/mr/validator.h +0 -2
  511. cuda/cccl/headers/include/thrust/per_device_resource.h +13 -1
  512. cuda/cccl/headers/include/thrust/random/detail/discard_block_engine.inl +0 -2
  513. cuda/cccl/headers/include/thrust/random/detail/linear_congruential_engine.inl +0 -2
  514. cuda/cccl/headers/include/thrust/random/detail/linear_congruential_engine_discard.h +2 -9
  515. cuda/cccl/headers/include/thrust/random/detail/linear_feedback_shift_engine.inl +0 -2
  516. cuda/cccl/headers/include/thrust/random/detail/linear_feedback_shift_engine_wordmask.h +2 -9
  517. cuda/cccl/headers/include/thrust/random/detail/mod.h +2 -9
  518. cuda/cccl/headers/include/thrust/random/detail/normal_distribution.inl +0 -2
  519. cuda/cccl/headers/include/thrust/random/detail/normal_distribution_base.h +2 -7
  520. cuda/cccl/headers/include/thrust/random/detail/random_core_access.h +2 -9
  521. cuda/cccl/headers/include/thrust/random/detail/subtract_with_carry_engine.inl +0 -2
  522. cuda/cccl/headers/include/thrust/random/detail/uniform_int_distribution.inl +0 -2
  523. cuda/cccl/headers/include/thrust/random/detail/uniform_real_distribution.inl +0 -2
  524. cuda/cccl/headers/include/thrust/random/detail/xor_combine_engine.inl +0 -2
  525. cuda/cccl/headers/include/thrust/random/discard_block_engine.h +0 -2
  526. cuda/cccl/headers/include/thrust/random/linear_congruential_engine.h +0 -2
  527. cuda/cccl/headers/include/thrust/random/linear_feedback_shift_engine.h +0 -2
  528. cuda/cccl/headers/include/thrust/random/normal_distribution.h +0 -2
  529. cuda/cccl/headers/include/thrust/random/subtract_with_carry_engine.h +0 -2
  530. cuda/cccl/headers/include/thrust/random/uniform_int_distribution.h +0 -2
  531. cuda/cccl/headers/include/thrust/random/uniform_real_distribution.h +0 -2
  532. cuda/cccl/headers/include/thrust/random/xor_combine_engine.h +0 -2
  533. cuda/cccl/headers/include/thrust/random.h +0 -2
  534. cuda/cccl/headers/include/thrust/system/cpp/detail/execution_policy.h +15 -11
  535. cuda/cccl/headers/include/thrust/system/cpp/detail/memory.inl +2 -7
  536. cuda/cccl/headers/include/thrust/system/cpp/memory.h +0 -1
  537. cuda/cccl/headers/include/thrust/system/cpp/memory_resource.h +0 -2
  538. cuda/cccl/headers/include/thrust/system/cpp/pointer.h +0 -2
  539. cuda/cccl/headers/include/thrust/system/cpp/vector.h +0 -1
  540. cuda/cccl/headers/include/thrust/system/cuda/detail/adjacent_difference.h +0 -4
  541. cuda/cccl/headers/include/thrust/system/cuda/detail/copy.h +0 -1
  542. cuda/cccl/headers/include/thrust/system/cuda/detail/copy_if.h +0 -4
  543. cuda/cccl/headers/include/thrust/system/cuda/detail/core/agent_launcher.h +2 -9
  544. cuda/cccl/headers/include/thrust/system/cuda/detail/core/triple_chevron_launch.h +4 -32
  545. cuda/cccl/headers/include/thrust/system/cuda/detail/core/util.h +2 -9
  546. cuda/cccl/headers/include/thrust/system/cuda/detail/count.h +0 -2
  547. cuda/cccl/headers/include/thrust/system/cuda/detail/cross_system.h +0 -2
  548. cuda/cccl/headers/include/thrust/system/cuda/detail/dispatch.h +23 -2
  549. cuda/cccl/headers/include/thrust/system/cuda/detail/equal.h +0 -2
  550. cuda/cccl/headers/include/thrust/system/cuda/detail/error.inl +2 -11
  551. cuda/cccl/headers/include/thrust/system/cuda/detail/execution_policy.h +2 -0
  552. cuda/cccl/headers/include/thrust/system/cuda/detail/extrema.h +0 -4
  553. cuda/cccl/headers/include/thrust/system/cuda/detail/fill.h +0 -1
  554. cuda/cccl/headers/include/thrust/system/cuda/detail/find.h +0 -5
  555. cuda/cccl/headers/include/thrust/system/cuda/detail/for_each.h +0 -1
  556. cuda/cccl/headers/include/thrust/system/cuda/detail/gather.h +0 -2
  557. cuda/cccl/headers/include/thrust/system/cuda/detail/generate.h +0 -2
  558. cuda/cccl/headers/include/thrust/system/cuda/detail/iter_swap.h +0 -1
  559. cuda/cccl/headers/include/thrust/system/cuda/detail/make_unsigned_special.h +2 -8
  560. cuda/cccl/headers/include/thrust/system/cuda/detail/malloc_and_free.h +0 -2
  561. cuda/cccl/headers/include/thrust/system/cuda/detail/memory.inl +0 -2
  562. cuda/cccl/headers/include/thrust/system/cuda/detail/merge.h +2 -26
  563. cuda/cccl/headers/include/thrust/system/cuda/detail/mismatch.h +7 -142
  564. cuda/cccl/headers/include/thrust/system/cuda/detail/parallel_for.h +0 -2
  565. cuda/cccl/headers/include/thrust/system/cuda/detail/partition.h +0 -4
  566. cuda/cccl/headers/include/thrust/system/cuda/detail/per_device_resource.h +0 -2
  567. cuda/cccl/headers/include/thrust/system/cuda/detail/reduce.h +0 -5
  568. cuda/cccl/headers/include/thrust/system/cuda/detail/reduce_by_key.h +0 -4
  569. cuda/cccl/headers/include/thrust/system/cuda/detail/remove.h +0 -2
  570. cuda/cccl/headers/include/thrust/system/cuda/detail/replace.h +0 -1
  571. cuda/cccl/headers/include/thrust/system/cuda/detail/reverse.h +0 -4
  572. cuda/cccl/headers/include/thrust/system/cuda/detail/scan.h +0 -4
  573. cuda/cccl/headers/include/thrust/system/cuda/detail/scan_by_key.h +0 -3
  574. cuda/cccl/headers/include/thrust/system/cuda/detail/scatter.h +0 -2
  575. cuda/cccl/headers/include/thrust/system/cuda/detail/set_operations.h +3 -5
  576. cuda/cccl/headers/include/thrust/system/cuda/detail/sort.h +8 -10
  577. cuda/cccl/headers/include/thrust/system/cuda/detail/temporary_buffer.h +0 -2
  578. cuda/cccl/headers/include/thrust/system/cuda/detail/transform.h +0 -1
  579. cuda/cccl/headers/include/thrust/system/cuda/detail/transform_reduce.h +0 -4
  580. cuda/cccl/headers/include/thrust/system/cuda/detail/transform_scan.h +0 -2
  581. cuda/cccl/headers/include/thrust/system/cuda/detail/uninitialized_copy.h +1 -7
  582. cuda/cccl/headers/include/thrust/system/cuda/detail/uninitialized_fill.h +2 -7
  583. cuda/cccl/headers/include/thrust/system/cuda/detail/unique.h +0 -3
  584. cuda/cccl/headers/include/thrust/system/cuda/detail/unique_by_key.h +0 -4
  585. cuda/cccl/headers/include/thrust/system/cuda/error.h +2 -11
  586. cuda/cccl/headers/include/thrust/system/cuda/memory.h +2 -6
  587. cuda/cccl/headers/include/thrust/system/cuda/memory_resource.h +2 -9
  588. cuda/cccl/headers/include/thrust/system/cuda/pointer.h +2 -7
  589. cuda/cccl/headers/include/thrust/system/cuda/vector.h +2 -6
  590. cuda/cccl/headers/include/thrust/system/detail/bad_alloc.h +0 -2
  591. cuda/cccl/headers/include/thrust/system/detail/errno.h +0 -2
  592. cuda/cccl/headers/include/thrust/system/detail/error_category.inl +0 -4
  593. cuda/cccl/headers/include/thrust/system/detail/error_code.inl +0 -2
  594. cuda/cccl/headers/include/thrust/system/detail/error_condition.inl +0 -2
  595. cuda/cccl/headers/include/thrust/system/detail/generic/adjacent_difference.h +0 -2
  596. cuda/cccl/headers/include/thrust/system/detail/generic/adjacent_difference.inl +0 -2
  597. cuda/cccl/headers/include/thrust/system/detail/generic/binary_search.h +0 -2
  598. cuda/cccl/headers/include/thrust/system/detail/generic/binary_search.inl +0 -3
  599. cuda/cccl/headers/include/thrust/system/detail/generic/copy.h +0 -2
  600. cuda/cccl/headers/include/thrust/system/detail/generic/copy.inl +0 -2
  601. cuda/cccl/headers/include/thrust/system/detail/generic/copy_if.h +0 -2
  602. cuda/cccl/headers/include/thrust/system/detail/generic/copy_if.inl +0 -3
  603. cuda/cccl/headers/include/thrust/system/detail/generic/count.h +0 -2
  604. cuda/cccl/headers/include/thrust/system/detail/generic/count.inl +0 -2
  605. cuda/cccl/headers/include/thrust/system/detail/generic/equal.h +0 -2
  606. cuda/cccl/headers/include/thrust/system/detail/generic/equal.inl +0 -2
  607. cuda/cccl/headers/include/thrust/system/detail/generic/extrema.h +0 -2
  608. cuda/cccl/headers/include/thrust/system/detail/generic/extrema.inl +0 -3
  609. cuda/cccl/headers/include/thrust/system/detail/generic/fill.h +0 -2
  610. cuda/cccl/headers/include/thrust/system/detail/generic/find.h +0 -2
  611. cuda/cccl/headers/include/thrust/system/detail/generic/find.inl +0 -2
  612. cuda/cccl/headers/include/thrust/system/detail/generic/for_each.h +0 -2
  613. cuda/cccl/headers/include/thrust/system/detail/generic/gather.h +0 -2
  614. cuda/cccl/headers/include/thrust/system/detail/generic/gather.inl +0 -2
  615. cuda/cccl/headers/include/thrust/system/detail/generic/generate.h +0 -2
  616. cuda/cccl/headers/include/thrust/system/detail/generic/inner_product.h +0 -2
  617. cuda/cccl/headers/include/thrust/system/detail/generic/inner_product.inl +0 -2
  618. cuda/cccl/headers/include/thrust/system/detail/generic/logical.h +0 -2
  619. cuda/cccl/headers/include/thrust/system/detail/generic/memory.h +0 -2
  620. cuda/cccl/headers/include/thrust/system/detail/generic/memory.inl +0 -3
  621. cuda/cccl/headers/include/thrust/system/detail/generic/merge.h +0 -2
  622. cuda/cccl/headers/include/thrust/system/detail/generic/merge.inl +0 -2
  623. cuda/cccl/headers/include/thrust/system/detail/generic/mismatch.h +0 -2
  624. cuda/cccl/headers/include/thrust/system/detail/generic/mismatch.inl +0 -2
  625. cuda/cccl/headers/include/thrust/system/detail/generic/partition.h +0 -2
  626. cuda/cccl/headers/include/thrust/system/detail/generic/partition.inl +0 -2
  627. cuda/cccl/headers/include/thrust/system/detail/generic/per_device_resource.h +0 -2
  628. cuda/cccl/headers/include/thrust/system/detail/generic/reduce.h +0 -2
  629. cuda/cccl/headers/include/thrust/system/detail/generic/reduce.inl +0 -2
  630. cuda/cccl/headers/include/thrust/system/detail/generic/reduce_by_key.h +0 -2
  631. cuda/cccl/headers/include/thrust/system/detail/generic/reduce_by_key.inl +0 -3
  632. cuda/cccl/headers/include/thrust/system/detail/generic/remove.h +0 -2
  633. cuda/cccl/headers/include/thrust/system/detail/generic/remove.inl +0 -2
  634. cuda/cccl/headers/include/thrust/system/detail/generic/replace.h +0 -2
  635. cuda/cccl/headers/include/thrust/system/detail/generic/replace.inl +0 -3
  636. cuda/cccl/headers/include/thrust/system/detail/generic/reverse.h +0 -2
  637. cuda/cccl/headers/include/thrust/system/detail/generic/reverse.inl +0 -2
  638. cuda/cccl/headers/include/thrust/system/detail/generic/scalar/binary_search.h +0 -2
  639. cuda/cccl/headers/include/thrust/system/detail/generic/scalar/binary_search.inl +0 -2
  640. cuda/cccl/headers/include/thrust/system/detail/generic/scan.h +26 -12
  641. cuda/cccl/headers/include/thrust/system/detail/generic/scan_by_key.h +0 -2
  642. cuda/cccl/headers/include/thrust/system/detail/generic/scan_by_key.inl +0 -3
  643. cuda/cccl/headers/include/thrust/system/detail/generic/scatter.h +0 -2
  644. cuda/cccl/headers/include/thrust/system/detail/generic/scatter.inl +0 -2
  645. cuda/cccl/headers/include/thrust/system/detail/generic/select_system.h +0 -1
  646. cuda/cccl/headers/include/thrust/system/detail/generic/set_operations.h +0 -2
  647. cuda/cccl/headers/include/thrust/system/detail/generic/set_operations.inl +0 -2
  648. cuda/cccl/headers/include/thrust/system/detail/generic/shuffle.h +0 -2
  649. cuda/cccl/headers/include/thrust/system/detail/generic/shuffle.inl +0 -2
  650. cuda/cccl/headers/include/thrust/system/detail/generic/sort.h +0 -2
  651. cuda/cccl/headers/include/thrust/system/detail/generic/sort.inl +0 -2
  652. cuda/cccl/headers/include/thrust/system/detail/generic/swap_ranges.h +0 -2
  653. cuda/cccl/headers/include/thrust/system/detail/generic/swap_ranges.inl +0 -3
  654. cuda/cccl/headers/include/thrust/system/detail/generic/tabulate.h +0 -2
  655. cuda/cccl/headers/include/thrust/system/detail/generic/tabulate.inl +0 -2
  656. cuda/cccl/headers/include/thrust/system/detail/generic/tag.h +0 -2
  657. cuda/cccl/headers/include/thrust/system/detail/generic/temporary_buffer.h +0 -2
  658. cuda/cccl/headers/include/thrust/system/detail/generic/temporary_buffer.inl +0 -2
  659. cuda/cccl/headers/include/thrust/system/detail/generic/transform.h +0 -2
  660. cuda/cccl/headers/include/thrust/system/detail/generic/transform_reduce.h +0 -2
  661. cuda/cccl/headers/include/thrust/system/detail/generic/transform_reduce.inl +0 -2
  662. cuda/cccl/headers/include/thrust/system/detail/generic/transform_scan.h +0 -2
  663. cuda/cccl/headers/include/thrust/system/detail/generic/transform_scan.inl +0 -2
  664. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_copy.h +0 -2
  665. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_copy.inl +2 -4
  666. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_fill.h +0 -2
  667. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_fill.inl +0 -3
  668. cuda/cccl/headers/include/thrust/system/detail/generic/unique.h +0 -2
  669. cuda/cccl/headers/include/thrust/system/detail/generic/unique.inl +0 -2
  670. cuda/cccl/headers/include/thrust/system/detail/generic/unique_by_key.h +0 -2
  671. cuda/cccl/headers/include/thrust/system/detail/generic/unique_by_key.inl +0 -2
  672. cuda/cccl/headers/include/thrust/system/detail/internal/decompose.h +0 -2
  673. cuda/cccl/headers/include/thrust/system/detail/sequential/adjacent_difference.h +0 -2
  674. cuda/cccl/headers/include/thrust/system/detail/sequential/assign_value.h +0 -2
  675. cuda/cccl/headers/include/thrust/system/detail/sequential/binary_search.h +0 -2
  676. cuda/cccl/headers/include/thrust/system/detail/sequential/copy.h +76 -5
  677. cuda/cccl/headers/include/thrust/system/detail/sequential/copy_backward.h +0 -2
  678. cuda/cccl/headers/include/thrust/system/detail/sequential/copy_if.h +0 -2
  679. cuda/cccl/headers/include/thrust/system/detail/sequential/extrema.h +0 -2
  680. cuda/cccl/headers/include/thrust/system/detail/sequential/find.h +0 -2
  681. cuda/cccl/headers/include/thrust/system/detail/sequential/for_each.h +0 -2
  682. cuda/cccl/headers/include/thrust/system/detail/sequential/general_copy.h +0 -3
  683. cuda/cccl/headers/include/thrust/system/detail/sequential/get_value.h +0 -2
  684. cuda/cccl/headers/include/thrust/system/detail/sequential/insertion_sort.h +0 -2
  685. cuda/cccl/headers/include/thrust/system/detail/sequential/iter_swap.h +0 -2
  686. cuda/cccl/headers/include/thrust/system/detail/sequential/malloc_and_free.h +0 -2
  687. cuda/cccl/headers/include/thrust/system/detail/sequential/merge.h +78 -6
  688. cuda/cccl/headers/include/thrust/system/detail/sequential/partition.h +0 -4
  689. cuda/cccl/headers/include/thrust/system/detail/sequential/reduce.h +0 -2
  690. cuda/cccl/headers/include/thrust/system/detail/sequential/reduce_by_key.h +0 -2
  691. cuda/cccl/headers/include/thrust/system/detail/sequential/remove.h +0 -2
  692. cuda/cccl/headers/include/thrust/system/detail/sequential/scan.h +0 -2
  693. cuda/cccl/headers/include/thrust/system/detail/sequential/scan_by_key.h +0 -2
  694. cuda/cccl/headers/include/thrust/system/detail/sequential/set_operations.h +0 -2
  695. cuda/cccl/headers/include/thrust/system/detail/sequential/sort.h +67 -6
  696. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_merge_sort.h +310 -11
  697. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_primitive_sort.h +78 -5
  698. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_radix_sort.h +543 -7
  699. cuda/cccl/headers/include/thrust/system/detail/sequential/trivial_copy.h +0 -2
  700. cuda/cccl/headers/include/thrust/system/detail/sequential/unique.h +0 -2
  701. cuda/cccl/headers/include/thrust/system/detail/sequential/unique_by_key.h +0 -2
  702. cuda/cccl/headers/include/thrust/system/detail/system_error.inl +0 -2
  703. cuda/cccl/headers/include/thrust/system/error_code.h +0 -4
  704. cuda/cccl/headers/include/thrust/system/omp/detail/adjacent_difference.h +5 -25
  705. cuda/cccl/headers/include/thrust/system/omp/detail/assign_value.h +2 -15
  706. cuda/cccl/headers/include/thrust/system/omp/detail/binary_search.h +5 -25
  707. cuda/cccl/headers/include/thrust/system/omp/detail/copy.h +40 -29
  708. cuda/cccl/headers/include/thrust/system/omp/detail/copy_if.h +11 -28
  709. cuda/cccl/headers/include/thrust/system/omp/detail/count.h +2 -15
  710. cuda/cccl/headers/include/thrust/system/omp/detail/default_decomposition.h +26 -28
  711. cuda/cccl/headers/include/thrust/system/omp/detail/equal.h +2 -15
  712. cuda/cccl/headers/include/thrust/system/omp/detail/execution_policy.h +18 -13
  713. cuda/cccl/headers/include/thrust/system/omp/detail/extrema.h +5 -25
  714. cuda/cccl/headers/include/thrust/system/omp/detail/fill.h +2 -15
  715. cuda/cccl/headers/include/thrust/system/omp/detail/find.h +5 -25
  716. cuda/cccl/headers/include/thrust/system/omp/detail/for_each.h +47 -30
  717. cuda/cccl/headers/include/thrust/system/omp/detail/gather.h +2 -15
  718. cuda/cccl/headers/include/thrust/system/omp/detail/generate.h +2 -15
  719. cuda/cccl/headers/include/thrust/system/omp/detail/get_value.h +2 -15
  720. cuda/cccl/headers/include/thrust/system/omp/detail/inner_product.h +2 -15
  721. cuda/cccl/headers/include/thrust/system/omp/detail/iter_swap.h +2 -15
  722. cuda/cccl/headers/include/thrust/system/omp/detail/logical.h +2 -15
  723. cuda/cccl/headers/include/thrust/system/omp/detail/malloc_and_free.h +2 -15
  724. cuda/cccl/headers/include/thrust/system/omp/detail/merge.h +2 -15
  725. cuda/cccl/headers/include/thrust/system/omp/detail/mismatch.h +2 -15
  726. cuda/cccl/headers/include/thrust/system/omp/detail/partition.h +26 -31
  727. cuda/cccl/headers/include/thrust/system/omp/detail/per_device_resource.h +2 -15
  728. cuda/cccl/headers/include/thrust/system/omp/detail/pragma_omp.h +2 -26
  729. cuda/cccl/headers/include/thrust/system/omp/detail/reduce.h +35 -27
  730. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_by_key.h +13 -28
  731. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_intervals.h +56 -28
  732. cuda/cccl/headers/include/thrust/system/omp/detail/remove.h +26 -31
  733. cuda/cccl/headers/include/thrust/system/omp/detail/replace.h +2 -15
  734. cuda/cccl/headers/include/thrust/system/omp/detail/reverse.h +2 -15
  735. cuda/cccl/headers/include/thrust/system/omp/detail/scan.h +176 -17
  736. cuda/cccl/headers/include/thrust/system/omp/detail/scan_by_key.h +8 -15
  737. cuda/cccl/headers/include/thrust/system/omp/detail/scatter.h +2 -15
  738. cuda/cccl/headers/include/thrust/system/omp/detail/sequence.h +2 -15
  739. cuda/cccl/headers/include/thrust/system/omp/detail/set_operations.h +2 -15
  740. cuda/cccl/headers/include/thrust/system/omp/detail/sort.h +213 -28
  741. cuda/cccl/headers/include/thrust/system/omp/detail/swap_ranges.h +2 -15
  742. cuda/cccl/headers/include/thrust/system/omp/detail/tabulate.h +2 -15
  743. cuda/cccl/headers/include/thrust/system/omp/detail/temporary_buffer.h +2 -15
  744. cuda/cccl/headers/include/thrust/system/omp/detail/transform.h +2 -15
  745. cuda/cccl/headers/include/thrust/system/omp/detail/transform_reduce.h +2 -15
  746. cuda/cccl/headers/include/thrust/system/omp/detail/transform_scan.h +2 -15
  747. cuda/cccl/headers/include/thrust/system/omp/detail/uninitialized_copy.h +2 -15
  748. cuda/cccl/headers/include/thrust/system/omp/detail/uninitialized_fill.h +2 -15
  749. cuda/cccl/headers/include/thrust/system/omp/detail/unique.h +21 -30
  750. cuda/cccl/headers/include/thrust/system/omp/detail/unique_by_key.h +17 -29
  751. cuda/cccl/headers/include/thrust/system/omp/memory.h +51 -9
  752. cuda/cccl/headers/include/thrust/system/omp/memory_resource.h +3 -7
  753. cuda/cccl/headers/include/thrust/system/omp/pointer.h +3 -7
  754. cuda/cccl/headers/include/thrust/system/omp/vector.h +3 -6
  755. cuda/cccl/headers/include/thrust/system/system_error.h +0 -2
  756. cuda/cccl/headers/include/thrust/system/tbb/detail/adjacent_difference.h +4 -25
  757. cuda/cccl/headers/include/thrust/system/tbb/detail/assign_value.h +2 -15
  758. cuda/cccl/headers/include/thrust/system/tbb/detail/binary_search.h +2 -15
  759. cuda/cccl/headers/include/thrust/system/tbb/detail/copy.h +38 -29
  760. cuda/cccl/headers/include/thrust/system/tbb/detail/copy_if.h +91 -24
  761. cuda/cccl/headers/include/thrust/system/tbb/detail/count.h +2 -15
  762. cuda/cccl/headers/include/thrust/system/tbb/detail/equal.h +2 -15
  763. cuda/cccl/headers/include/thrust/system/tbb/detail/execution_policy.h +17 -13
  764. cuda/cccl/headers/include/thrust/system/tbb/detail/extrema.h +4 -25
  765. cuda/cccl/headers/include/thrust/system/tbb/detail/fill.h +2 -15
  766. cuda/cccl/headers/include/thrust/system/tbb/detail/find.h +4 -25
  767. cuda/cccl/headers/include/thrust/system/tbb/detail/for_each.h +47 -28
  768. cuda/cccl/headers/include/thrust/system/tbb/detail/gather.h +2 -15
  769. cuda/cccl/headers/include/thrust/system/tbb/detail/generate.h +2 -15
  770. cuda/cccl/headers/include/thrust/system/tbb/detail/get_value.h +2 -15
  771. cuda/cccl/headers/include/thrust/system/tbb/detail/inner_product.h +2 -15
  772. cuda/cccl/headers/include/thrust/system/tbb/detail/iter_swap.h +2 -15
  773. cuda/cccl/headers/include/thrust/system/tbb/detail/logical.h +2 -15
  774. cuda/cccl/headers/include/thrust/system/tbb/detail/malloc_and_free.h +2 -15
  775. cuda/cccl/headers/include/thrust/system/tbb/detail/merge.h +254 -29
  776. cuda/cccl/headers/include/thrust/system/tbb/detail/mismatch.h +2 -15
  777. cuda/cccl/headers/include/thrust/system/tbb/detail/partition.h +25 -31
  778. cuda/cccl/headers/include/thrust/system/tbb/detail/per_device_resource.h +2 -15
  779. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce.h +95 -29
  780. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_by_key.h +345 -28
  781. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_intervals.h +4 -26
  782. cuda/cccl/headers/include/thrust/system/tbb/detail/remove.h +32 -42
  783. cuda/cccl/headers/include/thrust/system/tbb/detail/replace.h +2 -15
  784. cuda/cccl/headers/include/thrust/system/tbb/detail/reverse.h +2 -15
  785. cuda/cccl/headers/include/thrust/system/tbb/detail/scan.h +265 -30
  786. cuda/cccl/headers/include/thrust/system/tbb/detail/scan_by_key.h +7 -17
  787. cuda/cccl/headers/include/thrust/system/tbb/detail/scatter.h +2 -15
  788. cuda/cccl/headers/include/thrust/system/tbb/detail/sequence.h +2 -15
  789. cuda/cccl/headers/include/thrust/system/tbb/detail/set_operations.h +2 -15
  790. cuda/cccl/headers/include/thrust/system/tbb/detail/sort.h +244 -32
  791. cuda/cccl/headers/include/thrust/system/tbb/detail/swap_ranges.h +2 -15
  792. cuda/cccl/headers/include/thrust/system/tbb/detail/tabulate.h +2 -15
  793. cuda/cccl/headers/include/thrust/system/tbb/detail/temporary_buffer.h +2 -15
  794. cuda/cccl/headers/include/thrust/system/tbb/detail/transform.h +2 -15
  795. cuda/cccl/headers/include/thrust/system/tbb/detail/transform_reduce.h +2 -15
  796. cuda/cccl/headers/include/thrust/system/tbb/detail/transform_scan.h +2 -15
  797. cuda/cccl/headers/include/thrust/system/tbb/detail/uninitialized_copy.h +2 -15
  798. cuda/cccl/headers/include/thrust/system/tbb/detail/uninitialized_fill.h +2 -15
  799. cuda/cccl/headers/include/thrust/system/tbb/detail/unique.h +23 -33
  800. cuda/cccl/headers/include/thrust/system/tbb/detail/unique_by_key.h +16 -29
  801. cuda/cccl/headers/include/thrust/system/tbb/memory.h +52 -24
  802. cuda/cccl/headers/include/thrust/system/tbb/memory_resource.h +4 -22
  803. cuda/cccl/headers/include/thrust/system/tbb/pointer.h +4 -22
  804. cuda/cccl/headers/include/thrust/system/tbb/vector.h +4 -21
  805. cuda/cccl/headers/include/thrust/transform.h +14 -3
  806. cuda/cccl/headers/include/thrust/type_traits/integer_sequence.h +0 -4
  807. cuda/cccl/headers/include/thrust/type_traits/is_contiguous_iterator.h +0 -1
  808. cuda/cccl/headers/include/thrust/type_traits/is_operator_less_or_greater_function_object.h +0 -4
  809. cuda/cccl/headers/include/thrust/type_traits/is_operator_plus_function_object.h +0 -4
  810. cuda/cccl/headers/include/thrust/type_traits/is_trivially_relocatable.h +0 -4
  811. cuda/cccl/headers/include/thrust/universal_allocator.h +8 -0
  812. cuda/cccl/headers/include/thrust/universal_vector.h +9 -0
  813. cuda/cccl/headers/include/thrust/zip_function.h +2 -28
  814. cuda/compute/__init__.py +4 -0
  815. cuda/compute/_bindings.pyi +26 -3
  816. cuda/compute/_bindings_impl.pyx +143 -1
  817. cuda/compute/algorithms/__init__.py +9 -5
  818. cuda/compute/algorithms/_sort/__init__.py +23 -0
  819. cuda/compute/algorithms/{_merge_sort.py → _sort/_merge_sort.py} +10 -10
  820. cuda/compute/algorithms/{_radix_sort.py → _sort/_radix_sort.py} +9 -58
  821. cuda/compute/algorithms/_sort/_segmented_sort.py +288 -0
  822. cuda/compute/algorithms/_sort/_sort_common.py +52 -0
  823. cuda/compute/cu12/_bindings_impl.cpython-313-aarch64-linux-gnu.so +0 -0
  824. cuda/compute/cu12/cccl/libcccl.c.parallel.so +0 -0
  825. cuda/compute/cu13/_bindings_impl.cpython-313-aarch64-linux-gnu.so +0 -0
  826. cuda/compute/cu13/cccl/libcccl.c.parallel.so +0 -0
  827. cuda_cccl-0.3.4.dist-info/METADATA +78 -0
  828. {cuda_cccl-0.3.2.dist-info → cuda_cccl-0.3.4.dist-info}/RECORD +830 -867
  829. cuda/cccl/headers/include/cuda/__memory_resource/resource_ref.h +0 -652
  830. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/tuple +0 -1365
  831. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/variant +0 -2144
  832. cuda/cccl/headers/include/thrust/detail/integer_math.h +0 -113
  833. cuda/cccl/headers/include/thrust/system/detail/adl/adjacent_difference.h +0 -51
  834. cuda/cccl/headers/include/thrust/system/detail/adl/assign_value.h +0 -51
  835. cuda/cccl/headers/include/thrust/system/detail/adl/binary_search.h +0 -51
  836. cuda/cccl/headers/include/thrust/system/detail/adl/copy.h +0 -51
  837. cuda/cccl/headers/include/thrust/system/detail/adl/copy_if.h +0 -52
  838. cuda/cccl/headers/include/thrust/system/detail/adl/count.h +0 -51
  839. cuda/cccl/headers/include/thrust/system/detail/adl/equal.h +0 -51
  840. cuda/cccl/headers/include/thrust/system/detail/adl/extrema.h +0 -51
  841. cuda/cccl/headers/include/thrust/system/detail/adl/fill.h +0 -51
  842. cuda/cccl/headers/include/thrust/system/detail/adl/find.h +0 -51
  843. cuda/cccl/headers/include/thrust/system/detail/adl/for_each.h +0 -51
  844. cuda/cccl/headers/include/thrust/system/detail/adl/gather.h +0 -51
  845. cuda/cccl/headers/include/thrust/system/detail/adl/generate.h +0 -51
  846. cuda/cccl/headers/include/thrust/system/detail/adl/get_value.h +0 -51
  847. cuda/cccl/headers/include/thrust/system/detail/adl/inner_product.h +0 -51
  848. cuda/cccl/headers/include/thrust/system/detail/adl/iter_swap.h +0 -51
  849. cuda/cccl/headers/include/thrust/system/detail/adl/logical.h +0 -51
  850. cuda/cccl/headers/include/thrust/system/detail/adl/malloc_and_free.h +0 -51
  851. cuda/cccl/headers/include/thrust/system/detail/adl/merge.h +0 -51
  852. cuda/cccl/headers/include/thrust/system/detail/adl/mismatch.h +0 -51
  853. cuda/cccl/headers/include/thrust/system/detail/adl/partition.h +0 -51
  854. cuda/cccl/headers/include/thrust/system/detail/adl/per_device_resource.h +0 -51
  855. cuda/cccl/headers/include/thrust/system/detail/adl/reduce.h +0 -51
  856. cuda/cccl/headers/include/thrust/system/detail/adl/reduce_by_key.h +0 -51
  857. cuda/cccl/headers/include/thrust/system/detail/adl/remove.h +0 -51
  858. cuda/cccl/headers/include/thrust/system/detail/adl/replace.h +0 -51
  859. cuda/cccl/headers/include/thrust/system/detail/adl/reverse.h +0 -51
  860. cuda/cccl/headers/include/thrust/system/detail/adl/scan.h +0 -51
  861. cuda/cccl/headers/include/thrust/system/detail/adl/scan_by_key.h +0 -51
  862. cuda/cccl/headers/include/thrust/system/detail/adl/scatter.h +0 -51
  863. cuda/cccl/headers/include/thrust/system/detail/adl/sequence.h +0 -51
  864. cuda/cccl/headers/include/thrust/system/detail/adl/set_operations.h +0 -51
  865. cuda/cccl/headers/include/thrust/system/detail/adl/sort.h +0 -51
  866. cuda/cccl/headers/include/thrust/system/detail/adl/swap_ranges.h +0 -51
  867. cuda/cccl/headers/include/thrust/system/detail/adl/tabulate.h +0 -51
  868. cuda/cccl/headers/include/thrust/system/detail/adl/temporary_buffer.h +0 -51
  869. cuda/cccl/headers/include/thrust/system/detail/adl/transform.h +0 -51
  870. cuda/cccl/headers/include/thrust/system/detail/adl/transform_reduce.h +0 -51
  871. cuda/cccl/headers/include/thrust/system/detail/adl/transform_scan.h +0 -51
  872. cuda/cccl/headers/include/thrust/system/detail/adl/uninitialized_copy.h +0 -51
  873. cuda/cccl/headers/include/thrust/system/detail/adl/uninitialized_fill.h +0 -51
  874. cuda/cccl/headers/include/thrust/system/detail/adl/unique.h +0 -51
  875. cuda/cccl/headers/include/thrust/system/detail/adl/unique_by_key.h +0 -51
  876. cuda/cccl/headers/include/thrust/system/detail/generic/scan.inl +0 -85
  877. cuda/cccl/headers/include/thrust/system/detail/sequential/copy.inl +0 -119
  878. cuda/cccl/headers/include/thrust/system/detail/sequential/merge.inl +0 -145
  879. cuda/cccl/headers/include/thrust/system/detail/sequential/sort.inl +0 -116
  880. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_merge_sort.inl +0 -356
  881. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_primitive_sort.inl +0 -124
  882. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_radix_sort.inl +0 -586
  883. cuda/cccl/headers/include/thrust/system/omp/detail/copy.inl +0 -74
  884. cuda/cccl/headers/include/thrust/system/omp/detail/copy_if.inl +0 -59
  885. cuda/cccl/headers/include/thrust/system/omp/detail/default_decomposition.inl +0 -65
  886. cuda/cccl/headers/include/thrust/system/omp/detail/for_each.inl +0 -87
  887. cuda/cccl/headers/include/thrust/system/omp/detail/memory.inl +0 -93
  888. cuda/cccl/headers/include/thrust/system/omp/detail/partition.inl +0 -102
  889. cuda/cccl/headers/include/thrust/system/omp/detail/reduce.inl +0 -78
  890. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_by_key.inl +0 -65
  891. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_intervals.inl +0 -103
  892. cuda/cccl/headers/include/thrust/system/omp/detail/remove.inl +0 -87
  893. cuda/cccl/headers/include/thrust/system/omp/detail/sort.inl +0 -265
  894. cuda/cccl/headers/include/thrust/system/omp/detail/unique.inl +0 -71
  895. cuda/cccl/headers/include/thrust/system/omp/detail/unique_by_key.inl +0 -75
  896. cuda/cccl/headers/include/thrust/system/tbb/detail/copy.inl +0 -73
  897. cuda/cccl/headers/include/thrust/system/tbb/detail/copy_if.inl +0 -136
  898. cuda/cccl/headers/include/thrust/system/tbb/detail/for_each.inl +0 -91
  899. cuda/cccl/headers/include/thrust/system/tbb/detail/memory.inl +0 -94
  900. cuda/cccl/headers/include/thrust/system/tbb/detail/merge.inl +0 -327
  901. cuda/cccl/headers/include/thrust/system/tbb/detail/partition.inl +0 -98
  902. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce.inl +0 -137
  903. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_by_key.inl +0 -400
  904. cuda/cccl/headers/include/thrust/system/tbb/detail/remove.inl +0 -87
  905. cuda/cccl/headers/include/thrust/system/tbb/detail/scan.inl +0 -312
  906. cuda/cccl/headers/include/thrust/system/tbb/detail/sort.inl +0 -295
  907. cuda/cccl/headers/include/thrust/system/tbb/detail/unique.inl +0 -71
  908. cuda/cccl/headers/include/thrust/system/tbb/detail/unique_by_key.inl +0 -75
  909. cuda_cccl-0.3.2.dist-info/METADATA +0 -42
  910. {cuda_cccl-0.3.2.dist-info → cuda_cccl-0.3.4.dist-info}/WHEEL +0 -0
  911. {cuda_cccl-0.3.2.dist-info → cuda_cccl-0.3.4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,898 @@
1
+ //===----------------------------------------------------------------------===//
2
+ //
3
+ // Part of the CUDA C++ Core Libraries,
4
+ // under the Apache License v2.0 with LLVM Exceptions.
5
+ // See https://llvm.org/LICENSE.txt for license information.
6
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7
+ // SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
8
+ //
9
+ //===----------------------------------------------------------------------===//
10
+
11
+ #ifndef _CUDA___MEMORY_RESOURCE_ANY_RESOURCE_H
12
+ #define _CUDA___MEMORY_RESOURCE_ANY_RESOURCE_H
13
+
14
+ #include <cuda/std/detail/__config>
15
+
16
+ #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
17
+ # pragma GCC system_header
18
+ #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
19
+ # pragma clang system_header
20
+ #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
21
+ # pragma system_header
22
+ #endif // no system header
23
+
24
+ #include <cuda/__memory_resource/get_property.h>
25
+ #include <cuda/__memory_resource/properties.h>
26
+ #include <cuda/__memory_resource/resource.h>
27
+ #include <cuda/__utility/basic_any.h>
28
+ #include <cuda/std/__concepts/concept_macros.h>
29
+ #include <cuda/std/__utility/forward.h>
30
+ #include <cuda/std/optional>
31
+
32
+ #include <cuda/std/__cccl/prologue.h>
33
+
34
+ _CCCL_BEGIN_NAMESPACE_CUDA_MR
35
+ #ifndef _CCCL_DOXYGEN_INVOKED // Do not document this
36
+
37
+ template <class _Property>
38
+ using __property_result_t _CCCL_NODEBUG_ALIAS = ::cuda::std::__type_call1< //
39
+ ::cuda::std::conditional_t<cuda::property_with_value<_Property>,
40
+ ::cuda::std::__type_quote1<__property_value_t>,
41
+ ::cuda::std::__type_always<void>>,
42
+ _Property>;
43
+
44
+ template <class _Property>
45
+ struct __with_property
46
+ {
47
+ // Return type as a template parameter is a workaround for MSVC treating the function
48
+ // as overloaded even when the template parameter was provided
49
+ template <class _Ty, class _ReturnType = __property_result_t<_Property>>
50
+ _CCCL_PUBLIC_HOST_API static _ReturnType __get_property(const _Ty& __obj)
51
+ {
52
+ if constexpr (!::cuda::std::is_same_v<__property_result_t<_Property>, void>)
53
+ {
54
+ return get_property(__obj, _Property());
55
+ }
56
+ else
57
+ {
58
+ return void();
59
+ }
60
+ }
61
+
62
+ template <class...>
63
+ struct __iproperty : __basic_interface<__iproperty>
64
+ {
65
+ _CCCL_HOST_API friend auto get_property([[maybe_unused]] const __iproperty& __obj, _Property)
66
+ -> __property_result_t<_Property>
67
+ {
68
+ if constexpr (!::cuda::std::is_same_v<__property_result_t<_Property>, void>)
69
+ {
70
+ return ::cuda::__virtcall<&__get_property<__iproperty>>(&__obj);
71
+ }
72
+ else
73
+ {
74
+ return void();
75
+ }
76
+ }
77
+
78
+ _CCCL_TEMPLATE(class _Ty)
79
+ _CCCL_REQUIRES((::cuda::has_property<_Ty, _Property>) )
80
+ using overrides _CCCL_NODEBUG_ALIAS = __overrides_for<_Ty, &__get_property<_Ty>>;
81
+ };
82
+ };
83
+
84
+ template <class _Property>
85
+ using __iproperty = typename __with_property<_Property>::template __iproperty<>;
86
+
87
+ template <class... _Properties>
88
+ using __iproperty_set = ::cuda::__iset<__iproperty<_Properties>...>;
89
+
90
+ // Wrap the calls of the allocate and deallocate member functions
91
+ // because of NVBUG#4967486
92
+ // Needs to keep the _async because of fun windows macros
93
+ template <class _Resource>
94
+ _CCCL_PUBLIC_HOST_API auto
95
+ __allocate_async(_Resource& __mr, ::cuda::stream_ref __stream, size_t __bytes, size_t __alignment)
96
+ -> decltype(__mr.allocate(__stream, __bytes, __alignment))
97
+ {
98
+ return __mr.allocate(__stream, __bytes, __alignment);
99
+ }
100
+
101
+ template <class _Resource>
102
+ _CCCL_PUBLIC_HOST_API auto
103
+ __deallocate_async(_Resource& __mr, ::cuda::stream_ref __stream, void* __pv, size_t __bytes, size_t __alignment)
104
+ -> decltype(__mr.deallocate(__stream, __pv, __bytes, __alignment))
105
+ {
106
+ __mr.deallocate(__stream, __pv, __bytes, __alignment);
107
+ }
108
+
109
+ template <class...>
110
+ struct __ibasic_resource : __basic_interface<__ibasic_resource>
111
+ {
112
+ _CCCL_PUBLIC_HOST_API void* allocate_sync(size_t __bytes, size_t __alignment = alignof(::cuda::std::max_align_t))
113
+ {
114
+ return ::cuda::__virtcall<&__ibasic_resource::allocate_sync>(this, __bytes, __alignment);
115
+ }
116
+
117
+ _CCCL_PUBLIC_HOST_API void
118
+
119
+ deallocate_sync(void* __pv, size_t __bytes, size_t __alignment = alignof(::cuda::std::max_align_t)) noexcept
120
+ {
121
+ return ::cuda::__virtcall<&__ibasic_resource::deallocate_sync>(this, __pv, __bytes, __alignment);
122
+ }
123
+
124
+ template <class _Ty>
125
+ using overrides _CCCL_NODEBUG_ALIAS = __overrides_for<_Ty, &_Ty::allocate_sync, &_Ty::deallocate_sync>;
126
+ };
127
+
128
+ template <class...>
129
+ struct __ibasic_async_resource : __basic_interface<__ibasic_async_resource>
130
+ {
131
+ _CCCL_PUBLIC_HOST_API void* allocate(::cuda::stream_ref __stream, size_t __bytes, size_t __alignment)
132
+ {
133
+ return ::cuda::__virtcall<&__allocate_async<__ibasic_async_resource>>(this, __stream, __bytes, __alignment);
134
+ }
135
+
136
+ _CCCL_PUBLIC_HOST_API void* allocate(::cuda::stream_ref __stream, size_t __bytes)
137
+ {
138
+ return ::cuda::__virtcall<&__allocate_async<__ibasic_async_resource>>(
139
+ this, __stream, __bytes, alignof(::cuda::std::max_align_t));
140
+ }
141
+
142
+ _CCCL_PUBLIC_HOST_API void
143
+ deallocate(::cuda::stream_ref __stream, void* __pv, size_t __bytes, size_t __alignment) noexcept
144
+ {
145
+ return ::cuda::__virtcall<&__deallocate_async<__ibasic_async_resource>>(this, __stream, __pv, __bytes, __alignment);
146
+ }
147
+
148
+ _CCCL_PUBLIC_HOST_API void deallocate(::cuda::stream_ref __stream, void* __pv, size_t __bytes) noexcept
149
+ {
150
+ return ::cuda::__virtcall<&__deallocate_async<__ibasic_async_resource>>(
151
+ this, __stream, __pv, __bytes, alignof(::cuda::std::max_align_t));
152
+ }
153
+
154
+ template <class _Ty>
155
+ using overrides _CCCL_NODEBUG_ALIAS = __overrides_for<_Ty, &__allocate_async<_Ty>, &__deallocate_async<_Ty>>;
156
+ };
157
+
158
+ template <class... _Properties>
159
+ using __iresource _CCCL_NODEBUG_ALIAS = ::cuda::
160
+ __iset<__ibasic_resource<>, __iproperty_set<_Properties...>, ::cuda::__icopyable<>, ::cuda::__iequality_comparable<>>;
161
+
162
+ template <class... _Properties>
163
+ using __iasync_resource _CCCL_NODEBUG_ALIAS = __iset<__iresource<_Properties...>, __ibasic_async_resource<>>;
164
+
165
+ template <class _Property>
166
+ using __try_property_result_t =
167
+ ::cuda::std::conditional_t<!::cuda::std::is_same_v<__property_result_t<_Property>, void>, //
168
+ ::cuda::std::optional<__property_result_t<_Property>>, //
169
+ bool>;
170
+
171
+ template <class _Derived>
172
+ struct __with_try_get_property
173
+ {
174
+ template <class _Property>
175
+ [[nodiscard]] _CCCL_HOST_API friend auto try_get_property(const _Derived& __self, _Property) noexcept
176
+ -> __try_property_result_t<_Property>
177
+ {
178
+ auto __prop = ::cuda::__dynamic_any_cast<const __iproperty<_Property>*>(&__self);
179
+ if constexpr (::cuda::std::is_same_v<__property_result_t<_Property>, void>)
180
+ {
181
+ return __prop != nullptr;
182
+ }
183
+ else if (__prop)
184
+ {
185
+ return get_property(*__prop, _Property{});
186
+ }
187
+ else
188
+ {
189
+ return ::cuda::std::nullopt;
190
+ }
191
+ }
192
+ };
193
+
194
+ template <class... _Properties>
195
+ struct _CCCL_DECLSPEC_EMPTY_BASES any_resource;
196
+
197
+ template <class... _Properties>
198
+ struct _CCCL_DECLSPEC_EMPTY_BASES resource_ref;
199
+
200
+ // `any_synchronous_resource` wraps any given resource that satisfies the required
201
+ // properties. It owns the contained resource, taking care of construction /
202
+ // destruction. This makes it especially suited for use in e.g. container types
203
+ // that need to ensure that the lifetime of the container exceeds the lifetime
204
+ // of the memory resource used to allocate the storage
205
+ template <class... _Properties>
206
+ struct _CCCL_DECLSPEC_EMPTY_BASES any_synchronous_resource
207
+ : __basic_any<__iresource<_Properties...>>
208
+ , __with_try_get_property<any_synchronous_resource<_Properties...>>
209
+ {
210
+ // Inherit constructors from __basic_any
211
+ _LIBCUDACXX_DELEGATE_CONSTRUCTORS(any_synchronous_resource, ::cuda::__basic_any, __iresource<_Properties...>);
212
+
213
+ // any_resource is convertible to any_synchronous_resource
214
+ _CCCL_TEMPLATE(class... _OtherProperties)
215
+ _CCCL_REQUIRES((::cuda::std::__type_set_contains_v<::cuda::std::__type_set<_OtherProperties...>, _Properties...>) )
216
+ any_synchronous_resource(any_resource<_OtherProperties...> __other) noexcept
217
+ : __base(::cuda::std::move(__other.__get_base()))
218
+ {}
219
+
220
+ using default_queries = ::cuda::mr::properties_list<_Properties...>;
221
+
222
+ private:
223
+ static_assert(::cuda::mr::__contains_execution_space_property<_Properties...>,
224
+ "The properties of any_synchronous_resource must contain at least one execution "
225
+ "space "
226
+ "property!");
227
+ using __base::interface;
228
+ };
229
+
230
+ // ``any_resource`` wraps any given resource that satisfies the
231
+ // required properties. It owns the contained resource, taking care of
232
+ // construction / destruction. This makes it especially suited for use in e.g.
233
+ // container types that need to ensure that the lifetime of the container
234
+ // exceeds the lifetime of the memory resource used to allocate the storage
235
+ template <class... _Properties>
236
+ struct _CCCL_DECLSPEC_EMPTY_BASES any_resource
237
+ : __basic_any<__iasync_resource<_Properties...>>
238
+ , __with_try_get_property<any_resource<_Properties...>>
239
+ {
240
+ // Inherit constructors from __basic_any
241
+ _LIBCUDACXX_DELEGATE_CONSTRUCTORS(any_resource, ::cuda::__basic_any, __iasync_resource<_Properties...>);
242
+
243
+ using default_queries = ::cuda::mr::properties_list<_Properties...>;
244
+
245
+ private:
246
+ static_assert(::cuda::mr::__contains_execution_space_property<_Properties...>,
247
+ "The properties of any_resource must contain at least one execution space "
248
+ "property!");
249
+
250
+ template <class...>
251
+ friend struct any_synchronous_resource;
252
+
253
+ using __base::interface;
254
+
255
+ __base& __get_base() noexcept
256
+ {
257
+ return *this;
258
+ }
259
+ };
260
+
261
+ //! @brief Type erased wrapper around a `synchronous_resource` that satisfies \tparam _Properties
262
+ //! @tparam _Properties The properties that any resource wrapped within the `synchronous_resource_ref` needs to satisfy
263
+ template <class... _Properties>
264
+ struct _CCCL_DECLSPEC_EMPTY_BASES synchronous_resource_ref
265
+ : __basic_any<__iresource<_Properties...>&>
266
+ , __with_try_get_property<synchronous_resource_ref<_Properties...>>
267
+ {
268
+ // Inherit constructors from __basic_any
269
+ _LIBCUDACXX_DELEGATE_CONSTRUCTORS(synchronous_resource_ref, ::cuda::__basic_any, __iresource<_Properties...>&);
270
+
271
+ synchronous_resource_ref(const synchronous_resource_ref& __other) noexcept = default;
272
+
273
+ // Allow narrowing conversion from a synchronous_resource_ref with a superset
274
+ // of properties by rebinding to the same underlying object.
275
+ _CCCL_TEMPLATE(class... _OtherProperties)
276
+ _CCCL_REQUIRES((::cuda::std::__type_set_contains_v<::cuda::std::__type_set<_OtherProperties...>, _Properties...>) )
277
+ synchronous_resource_ref(const synchronous_resource_ref<_OtherProperties...>& __other) noexcept
278
+ : __base(const_cast<synchronous_resource_ref<_OtherProperties...>&>(__other).__get_base())
279
+ {}
280
+
281
+ // resource_ref is convertible to synchronous_resource_ref
282
+ _CCCL_TEMPLATE(class... _OtherProperties)
283
+ _CCCL_REQUIRES((::cuda::std::__type_set_contains_v<::cuda::std::__type_set<_OtherProperties...>, _Properties...>) )
284
+ synchronous_resource_ref(resource_ref<_OtherProperties...> __other) noexcept
285
+ : __base(__other.__get_base())
286
+ {}
287
+
288
+ _CCCL_TEMPLATE(class... _OtherProperties)
289
+ _CCCL_REQUIRES((::cuda::std::__type_set_contains_v<::cuda::std::__type_set<_OtherProperties...>, _Properties...>) )
290
+ synchronous_resource_ref& operator=(const synchronous_resource_ref<_OtherProperties...>& __other) noexcept
291
+ {
292
+ __basic_any_access::__cast_to(
293
+ const_cast<synchronous_resource_ref<_OtherProperties...>&>(__other).__get_base(), __get_base());
294
+ return *this;
295
+ }
296
+
297
+ synchronous_resource_ref& operator=(const synchronous_resource_ref& __other) noexcept
298
+ {
299
+ __basic_any_access::__cast_to(const_cast<synchronous_resource_ref&>(__other).__get_base(), __get_base());
300
+ return *this;
301
+ }
302
+
303
+ using default_queries = ::cuda::mr::properties_list<_Properties...>;
304
+
305
+ private:
306
+ static_assert(::cuda::mr::__contains_execution_space_property<_Properties...>,
307
+ "The properties of synchronous_resource_ref must contain at least one execution "
308
+ "space "
309
+ "property!");
310
+
311
+ template <class...>
312
+ friend struct synchronous_resource_ref;
313
+
314
+ using __base::interface;
315
+
316
+ __base& __get_base() noexcept
317
+ {
318
+ return *this;
319
+ }
320
+ };
321
+
322
+ //! @brief Type erased wrapper around a `synchronous_resource` that satisfies \tparam _Properties
323
+ //! @tparam _Properties The properties that any async resource wrapped within the `resource_ref` needs to satisfy
324
+ template <class... _Properties>
325
+ struct _CCCL_DECLSPEC_EMPTY_BASES resource_ref
326
+ : __basic_any<__iasync_resource<_Properties...>&>
327
+ , __with_try_get_property<resource_ref<_Properties...>>
328
+ {
329
+ // Inherit other constructors from __basic_any
330
+ _LIBCUDACXX_DELEGATE_CONSTRUCTORS(resource_ref, ::cuda::__basic_any, __iasync_resource<_Properties...>&);
331
+
332
+ resource_ref(const resource_ref& __other) noexcept = default;
333
+
334
+ // Allow narrowing conversion from a resource_ref with a superset of
335
+ // properties by rebinding to the same underlying object.
336
+ _CCCL_TEMPLATE(class... _OtherProperties)
337
+ _CCCL_REQUIRES((::cuda::std::__type_set_contains_v<::cuda::std::__type_set<_OtherProperties...>, _Properties...>) )
338
+ resource_ref(const resource_ref<_OtherProperties...>& __other) noexcept
339
+ : __base(const_cast<resource_ref<_OtherProperties...>&>(__other).__get_base())
340
+ {}
341
+
342
+ _CCCL_TEMPLATE(class... _OtherProperties)
343
+ _CCCL_REQUIRES((::cuda::std::__type_set_contains_v<::cuda::std::__type_set<_OtherProperties...>, _Properties...>) )
344
+ resource_ref& operator=(const resource_ref<_OtherProperties...>& __other) noexcept
345
+ {
346
+ __basic_any_access::__cast_to(const_cast<resource_ref<_OtherProperties...>&>(__other).__get_base(), __get_base());
347
+ return *this;
348
+ }
349
+
350
+ resource_ref& operator=(const resource_ref& __other) noexcept
351
+ {
352
+ __basic_any_access::__cast_to(const_cast<resource_ref&>(__other).__get_base(), __get_base());
353
+ return *this;
354
+ }
355
+
356
+ using default_queries = ::cuda::mr::properties_list<_Properties...>;
357
+
358
+ private:
359
+ static_assert(::cuda::mr::__contains_execution_space_property<_Properties...>,
360
+ "The properties of resource_ref must contain at least one execution space "
361
+ "property!");
362
+
363
+ template <class...>
364
+ friend struct synchronous_resource_ref;
365
+ template <class...>
366
+ friend struct resource_ref;
367
+
368
+ using __base::interface;
369
+
370
+ __base& __get_base() noexcept
371
+ {
372
+ return *this;
373
+ }
374
+ };
375
+
376
+ _CCCL_TEMPLATE(class... _Properties, class _Resource)
377
+ _CCCL_REQUIRES(mr::synchronous_resource_with<_Resource, _Properties...>)
378
+ synchronous_resource_ref<_Properties...> __as_resource_ref(_Resource& __mr) noexcept
379
+ {
380
+ return synchronous_resource_ref<_Properties...>(__mr);
381
+ }
382
+
383
+ template <class... _Properties>
384
+ synchronous_resource_ref<_Properties...> __as_resource_ref(synchronous_resource_ref<_Properties...> const __mr) noexcept
385
+ {
386
+ return __mr;
387
+ }
388
+
389
+ template <class... _Properties>
390
+ synchronous_resource_ref<_Properties...> __as_resource_ref(resource_ref<_Properties...> const __mr) noexcept
391
+ {
392
+ return __mr;
393
+ }
394
+
395
+ #else // ^^^ !_CCCL_DOXYGEN_INVOKED ^^^ / vvv _CCCL_DOXYGEN_INVOKED vvv
396
+
397
+ enum class _ResourceKind
398
+ {
399
+ _Synchronous,
400
+ _Asynchronous
401
+ };
402
+
403
+ //! @rst
404
+ //! Type erased wrapper around a `resource` or a `synchronous_resource`
405
+ //! --------------------------------------------------------------------
406
+ //!
407
+ //! ``basic_any_resource`` wraps any given :ref:`resource
408
+ //! <libcudacxx-extended-api-memory-resources-resource>` that satisfies the
409
+ //! required properties. It owns the contained resource, taking care of
410
+ //! construction / destruction. This makes it especially suited for use in e.g.
411
+ //! container types that need to ensure that the lifetime of the container
412
+ //! exceeds the lifetime of the memory resource used to allocate the storage
413
+ //!
414
+ //! ``basic_any_resource`` models the ``cuda::std::regular`` concept.
415
+ //! @endrst
416
+ //!
417
+ //! @tparam _Kind Either `_ResourceKind::_Synchronous` for `any_synchronous_resource`, or
418
+ //! `_ResourceKind::_Asynchronous` for `any_resource`.
419
+ //! @tparam _Properties A pack of property types that a memory resource must
420
+ //! provide in order to be storable in instances of this `basic_any_resource`
421
+ //! type.
422
+ //!
423
+ //! @sa any_synchronous_resource
424
+ //! @sa any_resource
425
+ //! @sa synchronous_resource_ref
426
+ //! @sa resource_ref
427
+ template <_ResourceKind _Kind, class... _Properties>
428
+ class basic_any_resource
429
+ {
430
+ public:
431
+ //! @brief Constructs a \c basic_any_resource with no value
432
+ //! @post `has_value()` is `false`
433
+ basic_any_resource() noexcept;
434
+
435
+ //! @brief Move constructs a \c basic_any_resource
436
+ //! @post `has_value()` is `true` if `__other` had a value prior to the move,
437
+ //! and `false` otherwise. `__other.has_value()` is `false`.
438
+ basic_any_resource(basic_any_resource&& __other) noexcept;
439
+
440
+ //! @brief Copy constructs a \c basic_any_resource
441
+ //! @post `has_value()` is the same as `__other.has_value()`.
442
+ basic_any_resource(const basic_any_resource& __other);
443
+
444
+ //! @brief Constructs a \c basic_any_resource from a type that satisfies the
445
+ //! \c resource concept.
446
+ //! and that supports all of the specified properties.
447
+ //! @param __res The resource to be wrapped by the \c basic_any_resource.
448
+ //! @pre \c _Resource is not a specialization of \c basic_any_resource or
449
+ //! \c basic_resource_ref, or a type derived from such.
450
+ //! @pre `synchronous_resource_with<_Resource, _Properties...>` is `true`.
451
+ //! @pre If \c _Kind is \c _ResourceKind::_Asynchronous,
452
+ //! `resource_with<_Resource, _Properties...>` is `true`.
453
+ //! @post `has_value()` is `true`
454
+ template <class _Resource>
455
+ basic_any_resource(_Resource __res);
456
+
457
+ //! @brief Conversion from a type-erased resource with a superset of the
458
+ //! required properties.
459
+ //! @param __res The object to copy from.
460
+ //! @pre \c _OtherKind is equal to either \c _Kind or
461
+ //! \c _ResourceKind::_Asynchronous.
462
+ //! @pre The set `_OtherProperties...` is a superset of `_Properties...`.
463
+ //! @post `has_value()` is equal to `__res.has_value()`
464
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
465
+ basic_any_resource(basic_any_resource<_OtherKind, _OtherProperties...> __res);
466
+
467
+ //! @brief Deep copy from a type-erased resource reference with a superset
468
+ //! of the required properties.
469
+ //!
470
+ //! The object to which \c __res refers is copied into `*this`.
471
+ //! @param __res The reference to copy from.
472
+ //! @pre \c _OtherKind is equal to either \c _Kind or
473
+ //! \c _ResourceKind::_Asynchronous.
474
+ //! @pre The set `_OtherProperties...` is a superset of `_Properties...`.
475
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
476
+ basic_any_resource(basic_resource_ref<_OtherKind, _OtherProperties...> __res);
477
+
478
+ //! @brief Move assigns a \c basic_any_resource
479
+ //! @post `has_value()` is `true` if `__other` had a value prior to the move,
480
+ //! and `false` otherwise.
481
+ //! @post `__other.has_value()` is `false`.
482
+ basic_any_resource& operator=(basic_any_resource&& __other) noexcept;
483
+
484
+ //! @brief Copy assigns a \c basic_any_resource
485
+ //! @post `has_value()` is the same as `__other.has_value()`.
486
+ basic_any_resource& operator=(const basic_any_resource& __other);
487
+
488
+ //! @brief Assigns from a type that satisfies the \c resource concept and that
489
+ //! supports all of the specified properties.
490
+ //! @param __res The resource to be wrapped within the \c basic_any_resource
491
+ //! @pre \c _Resource is not a specialization of \c basic_any_resource or
492
+ //! \c basic_resource_ref, or a type derived from such.
493
+ //! @pre `synchronous_resource_with<_Resource, _Properties...>` is `true`.
494
+ //! @pre If \c _Kind is \c _ResourceKind::_Asynchronous,
495
+ //! `resource_with<_Resource, _Properties...>` is `true`.
496
+ //! @post `has_value()` is `true`
497
+ template <class _Resource>
498
+ basic_any_resource& operator=(_Resource __res);
499
+
500
+ //! @brief Assignment from a type-erased resource with a superset of the
501
+ //! required properties.
502
+ //! @param __res The object to copy from.
503
+ //! @pre \c _OtherKind is equal to either \c _Kind or
504
+ //! \c _ResourceKind::_Asynchronous.
505
+ //! @pre The set `_OtherProperties...` is a superset of `_Properties...`.
506
+ //! @post `has_value()` is equal to `__res.has_value()`.
507
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
508
+ basic_any_resource& operator=(basic_any_resource<_OtherKind, _OtherProperties...> __res);
509
+
510
+ //! @brief Deep copy from a type-erased resource reference with a superset of
511
+ //! the required properties.
512
+ //! @param __res The type-erased resource reference to copy from.
513
+ //! @pre \c _OtherKind is equal to either \c _Kind or
514
+ //! \c _ResourceKind::_Asynchronous.
515
+ //! @pre The set `_OtherProperties...` is a superset of `_Properties...`.
516
+ //! @post `has_value()` is `true`.
517
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
518
+ basic_any_resource& operator=(basic_resource_ref<_OtherKind, _OtherProperties...> __res);
519
+
520
+ //! @brief Equality comparison between two type-erased memory resource
521
+ //! @param __rhs The type-erased resource to compare with `*this`.
522
+ //! @pre \c _OtherKind is equal to either \c _Kind or
523
+ //! \c _ResourceKind::_Asynchronous.
524
+ //! @pre The set `_Properties...` is equal to the set `_OtherProperties...`.
525
+ //! @return `true` if both resources hold objects of the same type and those
526
+ //! objects compare equal, and `false` otherwise.
527
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
528
+ [[nodiscard]] bool operator==(const basic_any_resource<_OtherKind, _OtherProperties...>& __rhs) const;
529
+
530
+ //! @brief Equality comparison between `*this` and a type-erased resource
531
+ //! reference.
532
+ //! @param __rhs The type-erased resource reference to compare with `*this`.
533
+ //! @pre \c _OtherKind is equal to either \c _Kind or
534
+ //! \c _ResourceKind::_Asynchronous.
535
+ //! @pre The set `_Properties...` is equal to the set `_OtherProperties...`.
536
+ //! @return `true` if \c __rhs refers to an object of the same type as that
537
+ //! wrapped by `*this` and those objects compare equal; `false` otherwise.
538
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
539
+ [[nodiscard]] bool operator==(const basic_resource_ref<_OtherKind, _OtherProperties...>& __rhs) const;
540
+
541
+ //! @brief Calls `allocate_sync` on the wrapped object with the specified
542
+ //! arguments.
543
+ //! @pre `has_value()` is `true`.
544
+ //! @return `obj.allocate_sync(__size, __align)`, where `obj` is the wrapped
545
+ //! object.
546
+ [[nodiscard]] void* allocate_sync(size_t __size, size_t __align = alignof(cuda::std::max_align_t));
547
+
548
+ //! @brief Calls `deallocate_sync` on the wrapped object with the specified
549
+ //! arguments.
550
+ //! @pre `has_value()` is `true`.
551
+ //! @pre `__pv` must be a pointer that was previously returned by a call to \c
552
+ //! allocate on the object wrapped by `*this`.
553
+ //! @return `obj.deallocate_sync(__pv, __size, __align)`, where `obj` is the
554
+ //! wrapped object.
555
+ void deallocate_sync(void* __pv, size_t __size, size_t __align = alignof(cuda::std::max_align_t));
556
+
557
+ //! @brief Calls `allocate` on the wrapped object with the specified
558
+ //! arguments.
559
+ //! @pre `_Kind` is `_ResourceKind::_Asynchronous`.
560
+ //! @pre `has_value()` is `true`.
561
+ //! @return `obj.allocate(__stream, __size, __align)`, where `obj` is
562
+ //! the wrapped object.
563
+ //! @warning The returned pointer is not valid until `__stream` has been
564
+ //! synchronized.
565
+ [[nodiscard]] void* allocate(cuda::stream_ref __stream, size_t __size, size_t __align);
566
+
567
+ //! @brief Equivalent to `allocate(__stream, __size,
568
+ //! alignof(::cuda::std::max_align_t))`.
569
+ [[nodiscard]] void* allocate(cuda::stream_ref __stream, size_t __size);
570
+
571
+ //! @brief Calls `deallocate` on the wrapped object with the specified
572
+ //! arguments.
573
+ //! @pre `_Kind` is `_ResourceKind::_Asynchronous`.
574
+ //! @pre `has_value()` is `true`.
575
+ //! @pre `__pv` must be a pointer that was previously returned by a call to
576
+ //! \c allocate on the object wrapped by `*this`.
577
+ //! @return `obj.deallocate(__stream, __pv, __size, __align)`, where
578
+ //! `obj` is the wrapped object.
579
+ void deallocate(cuda::stream_ref __stream, void* __pv, size_t __size, size_t __align);
580
+
581
+ //! @brief Equivalent to `deallocate(__stream, __pv, __size,
582
+ //! alignof(::cuda::std::max_align_t), __stream)`.
583
+ void deallocate(cuda::stream_ref __stream, void* __pv, size_t __size);
584
+
585
+ //! @brief Checks if `*this` holds a value.
586
+ //! @return `true` if `*this` holds a value; `false` otherwise.
587
+ [[nodiscard]] bool has_value() const noexcept;
588
+
589
+ //! @brief Resets `*this` to the empty state.
590
+ //! @post `has_value() == false`
591
+ void reset() noexcept;
592
+
593
+ //! @return A reference to the \c type_info object for the wrapped
594
+ //! resource, or `typeid(void)` if `has_value()` is `false`.
595
+ [[nodiscard]] const cuda::std::type_info& type() const noexcept;
596
+
597
+ //! @brief Forwards a property query to the type-erased object.
598
+ //! @param __res The \c basic_any_resource object
599
+ //! @param __prop The property to query
600
+ //! @pre The type \c _Property is one of the types in the pack
601
+ //! `_Properties...`.
602
+ //! @return The result of calling `get_property(__obj, __prop)`, where `__obj`
603
+ //! is the type-erased object stored in `__res`.
604
+ template <class _Property>
605
+ friend decltype(auto) get_property(const basic_any_resource& __res, _Property __prop) noexcept;
606
+
607
+ //! @brief Attempts to forward a property query to the type-erased object and
608
+ //! returns a _`boolean-testable`_ object that contains the result, if any.
609
+ //!
610
+ //! @tparam _Property
611
+ //! @param __res The \c basic_any_resource object
612
+ //! @param __prop The property to query
613
+ //! @pre `has_value()` is `true`.
614
+ //! @return
615
+ //! Let:
616
+ //! - \c obj be the wrapped object.
617
+ //! - \c ValueType be the associated value type of \c __prop.
618
+ //! - \c ReturnType be \c bool if \c ValueType is \c void. Otherwise,
619
+ //! \c ReturnType is \c cuda::std::optional<ValueType>.
620
+ //! - \c _OtherProperties be the pack of type parameters of the
621
+ //! \c basic_any_resource object that first type-erased \c obj. [_Note:_
622
+ //! `_OtherProperties` is different than `_Properties` when \c *this is
623
+ //! the result of a conversion from a different \c __basic_any type. -- end
624
+ //! note]
625
+ //! .
626
+ //! `try_get_property(__res, __prop)` has type \c ReturnType. If \c _Property
627
+ //! is not in the pack \c _OtherProperties, returns `ReturnType()`.
628
+ //! Otherwise:
629
+ //! - Returns \c true if \c ValueType is \c void.
630
+ //! - Returns `ReturnType(get_property(obj, __prop))` otherwise.
631
+ template <class _Property>
632
+ friend auto try_get_property(const basic_any_resource& __res, _Property __prop) noexcept;
633
+ };
634
+
635
+ //! @brief Type erased wrapper around a reference to an object that satisfies
636
+ //! the \c resource concept and that provides the requested \c _Properties.
637
+ //! @tparam _Properties The properties that any resource wrapped within the
638
+ //! `basic_resource_ref` needs to provide.
639
+ //!
640
+ //! ``basic_resource_ref`` models the ``cuda::std::copyable`` and
641
+ //! ``cuda::std::equality_comparable`` concepts.
642
+ template <_ResourceKind _Kind, class... _Properties>
643
+ class basic_resource_ref
644
+ {
645
+ public:
646
+ //! @brief Copy constructs a \c basic_resource_ref
647
+ //! @post `*this` and `__other` both refer to the same resource object.
648
+ basic_resource_ref(const basic_resource_ref& __other);
649
+
650
+ //! @brief Constructs a \c basic_resource_ref from a reference to a type that
651
+ //! satisfies the \c resource concept and that supports all of the specified
652
+ //! properties.
653
+ //! @param __res The resource reference to be wrapped.
654
+ //! @pre `synchronous_resource_with<_Resource, _Properties...>` is `true`.
655
+ //! @pre If \c _Kind is \c _ResourceKind::_Asynchronous,
656
+ //! `resource_with<_Resource, _Properties...>` is `true`.
657
+ //! @pre If \c __res refers to a specialization of \c basic_any_resource or
658
+ //! a type derived from such, `__res.has_value()` is `true`.
659
+ template <class _Resource>
660
+ basic_resource_ref(_Resource& __res);
661
+
662
+ //! @brief Conversion from type-erased resource reference with a superset
663
+ //! of the required properties.
664
+ //! @param __res The other type-erased resource reference to copy from.
665
+ //! @pre \c _OtherKind is equal to either \c _Kind or
666
+ //! \c _ResourceKind::_Asynchronous.
667
+ //! @pre The set `_OtherProperties...` is a superset of `_Properties...`.
668
+ //! @post `*this` and `__res` both refer to the same resource object.
669
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
670
+ basic_resource_ref(basic_resource_ref<_OtherKind, _OtherProperties...> __res);
671
+
672
+ //! @brief Rebinds `*this` to refer to the object to which `__other` refers.
673
+ //! @post `*this` and `__other` both refer to the same resource object.
674
+ basic_resource_ref& operator=(const basic_resource_ref& __other);
675
+
676
+ //! @brief Rebinds the wrapped reference to an object whose type satisfies the
677
+ //! \c resource concept and that supports all of the specified properties.
678
+ //! @param __res The reference to the resource to be wrapped by the \c
679
+ //! basic_resource_ref.
680
+ //! @pre `synchronous_resource_with<_Resource, _Properties...>` is `true`.
681
+ //! @pre If \c _Kind is \c _ResourceKind::_Asynchronous,
682
+ //! `synchronous_resource_with<_Resource, _Properties...>` is `true`.
683
+ //! @pre If \c __res refers to a specialization of \c basic_any_resource or a
684
+ //! type derived from such, `__res.has_value()` is `true`.
685
+ template <class _Resource>
686
+ basic_resource_ref& operator=(_Resource& __res);
687
+
688
+ //! @brief Rebinds `*this` to refer to the object to which `__other` refers.
689
+ //! @param __res The other type-erased resource reference to copy from.
690
+ //! @pre \c _OtherKind is equal to either \c _Kind or
691
+ //! \c _ResourceKind::_Asynchronous.
692
+ //! @pre The set `_OtherProperties...` is a superset of `_Properties...`.
693
+ //! @post `*this` and `__res` both refer to the same resource object.
694
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
695
+ basic_resource_ref& operator=(basic_resource_ref<_OtherKind, _OtherProperties...> __res);
696
+
697
+ //! @brief Equality comparison between two type-erased resource references.
698
+ //! @param __rhs The other type-erased resource reference.
699
+ //! @pre \c _OtherKind is equal to either \c _Kind or
700
+ //! \c _ResourceKind::_Asynchronous.
701
+ //! @pre The set `_Properties...` is equal to the set `_OtherProperties...`.
702
+ //! @return `true` if both resources refer to objects of the same type and
703
+ //! those objects compare equal. Otherwise, returns `false`.
704
+ template <_ResourceKind _OtherKind, class... _OtherProperties>
705
+ [[nodiscard]] bool operator==(const basic_resource_ref<_OtherKind, _OtherProperties...>& __rhs) const;
706
+
707
+ //! @brief Calls `allocate_sync` on the wrapped reference with the specified
708
+ //! arguments.
709
+ //! @return `obj.allocate_sync(__size, __align)`, where `obj` is the wrapped
710
+ //! reference.
711
+ [[nodiscard]] void* allocate_sync(size_t __size, size_t __align = alignof(cuda::std::max_align_t));
712
+
713
+ //! @brief Calls `deallocate_sync` on the wrapped reference with the specified
714
+ //! arguments.
715
+ //! @pre `__pv` must be a pointer that was previously returned by a call to
716
+ //! \c allocate on the object referenced by `*this`.
717
+ //! @return `obj.deallocate_sync(__pv, __size, __align)`, where `obj` is the
718
+ //! wrapped reference.
719
+ void deallocate_sync(void* __pv, size_t __size, size_t __align = alignof(cuda::std::max_align_t));
720
+
721
+ //! @brief Calls `allocate` on the wrapped reference with the specified
722
+ //! arguments.
723
+ //! @pre `_Kind` is `_ResourceKind::_Asynchronous`.
724
+ //! @return `obj.allocate(__stream, __size, __align)`, where `obj` is
725
+ //! the wrapped reference.
726
+ //! @warning The returned pointer is not valid until `__stream` has been
727
+ //! synchronized.
728
+ [[nodiscard]] void* allocate(cuda::stream_ref __stream, size_t __size, size_t __align);
729
+
730
+ //! @brief Equivalent to `allocate(__stream, __size,
731
+ //! alignof(::cuda::std::max_align_t))`.
732
+ [[nodiscard]] void* allocate(cuda::stream_ref __stream, size_t __size);
733
+
734
+ //! @brief Calls `deallocate` on the wrapped reference with the specified
735
+ //! arguments.
736
+ //! @pre `_Kind` is `_ResourceKind::_Asynchronous`.
737
+ //! @pre `__pv` must be a pointer that was previously returned by a call to \c
738
+ //! allocate on the object referenced by `*this`.
739
+ //! @return `obj.deallocate(__stream, __pv, __size, __align)`, where
740
+ //! `obj` is the wrapped reference.
741
+ void deallocate(cuda::stream_ref __stream, void* __pv, size_t __size, size_t __align);
742
+
743
+ //! @brief Equivalent to `deallocate(__stream, __pv, __size,
744
+ //! alignof(::cuda::std::max_align_t), __stream)`.
745
+ void deallocate(cuda::stream_ref __stream, void* __pv, size_t __size);
746
+
747
+ //! @return A reference to the \c type_info object for the type of the object
748
+ //! to which `*this` refers.
749
+ [[nodiscard]] const cuda::std::type_info& type() const noexcept;
750
+
751
+ //! @brief Forwards a property query to the type-erased reference.
752
+ //! @tparam _Property
753
+ //! @param __res The \c basic_resource_ref object
754
+ //! @param __prop The property to query
755
+ //! @pre \c _Property is a type in `_Properties...`.
756
+ //! @return The result of calling `get_property(__obj, __prop)`, where `__obj`
757
+ //! is the type-erased reference stored in `__res`.
758
+ template <class _Property>
759
+ friend decltype(auto) get_property(const basic_resource_ref& __res, _Property __prop) noexcept;
760
+
761
+ //! @brief Attempts to forward a property query to the type-erased object and
762
+ //! returns a _`boolean-testable`_ object that contains the result, if any.
763
+ //!
764
+ //! @tparam _Property
765
+ //! @param __res The \c any_synchronous_resource object
766
+ //! @param __prop The property to query
767
+ //! @pre `has_value()` is `true`.
768
+ //! @return
769
+ //! Let:
770
+ //! - \c obj be the wrapped reference.
771
+ //! - \c ValueType be the associated value type of \c __prop.
772
+ //! - \c ReturnType be \c bool if \c ValueType is \c void. Otherwise,
773
+ //! \c ReturnType is \c cuda::std::optional<ValueType>.
774
+ //! - \c _OtherProperties be the pack of type parameters of the wrapper type
775
+ //! that first type-erased \c obj. [_Note:_ `_OtherProperties` is
776
+ //! different than `_Properties` when \c *this is the result of an
777
+ //! interface-narrowing conversion. -- end note]
778
+ //! .
779
+ //! `try_get_property(__res, __prop)` has type \c ReturnType. If \c _Property
780
+ //! is not in the pack \c _OtherProperties, returns `ReturnType()`.
781
+ //! Otherwise:
782
+ //! - Returns \c true if \c ValueType is \c void.
783
+ //! - Returns `ReturnType(get_property(obj, __prop))` otherwise.
784
+ template <class _Property>
785
+ friend auto try_get_property(const basic_resource_ref& __res, _Property __prop) noexcept;
786
+ };
787
+
788
+ //! @rst
789
+ //! .. _cudax-memory-resource-any-resource:
790
+ //!
791
+ //! Type erased wrapper around a `synchronous_resource`
792
+ //! ----------------------------------------------------
793
+ //!
794
+ //! ``any_synchronous_resource`` wraps any given :ref:`synchronous_resource
795
+ //! <libcudacxx-extended-api-memory-resources-resource>` that satisfies the
796
+ //! required properties. It owns the contained resource, taking care of
797
+ //! construction / destruction. This makes it especially suited for use in e.g.
798
+ //! container types that need to ensure that the lifetime of the container
799
+ //! exceeds the lifetime of the memory resource used to allocate the storage
800
+ //!
801
+ //! ``any_synchronous_resource`` models the ``cuda::std::regular`` concept.
802
+ //!
803
+ //! @endrst
804
+ template <class... _Properties>
805
+ using any_synchronous_resource = basic_any_resource<_ResourceKind::_Synchronous, _Properties...>;
806
+
807
+ //! @rst
808
+ //! .. _cudax-memory-resource-any-async-resource:
809
+ //!
810
+ //! Type erased wrapper around an `resource`
811
+ //! ----------------------------------------------
812
+ //!
813
+ //! ``any_resource`` wraps any given :ref:`resource
814
+ //! <libcudacxx-extended-api-memory-resources-resource>` that satisfies the
815
+ //! required properties. It owns the contained resource, taking care of
816
+ //! construction / destruction. This makes it especially suited for use in e.g.
817
+ //! container types that need to ensure that the lifetime of the container
818
+ //! exceeds the lifetime of the memory resource used to allocate the storage
819
+ //!
820
+ //! ``any_resource`` models the ``cuda::std::regular`` concept.
821
+ //!
822
+ //! @endrst
823
+ template <class... _Properties>
824
+ using any_resource = basic_any_resource<_ResourceKind::_Asynchronous, _Properties...>;
825
+
826
+ //! @brief Type erased wrapper around a `synchronous_resource` that satisfies \c
827
+ //! _Properties.
828
+ //! @tparam _Properties The properties that any resource wrapped within the
829
+ //! `synchronous_resource_ref` needs to satisfy
830
+ template <class... _Properties>
831
+ using synchronous_resource_ref = basic_resource_ref<_ResourceKind::_Synchronous, _Properties...>;
832
+
833
+ //! @brief Type erased wrapper around a `resource` that satisfies \c
834
+ //! _Properties
835
+ //! @tparam _Properties The properties that any resource wrapped within
836
+ //! the `resource_ref` needs to satisfy
837
+ template <class... _Properties>
838
+ using resource_ref = basic_resource_ref<_ResourceKind::_Asynchronous, _Properties...>;
839
+
840
+ #endif // _CCCL_DOXYGEN_INVOKED
841
+
842
+ //! @rst
843
+ //! .. _cudax-memory-resource-make-any-resource:
844
+ //!
845
+ //! Factory function for `any_synchronous_resource` objects
846
+ //! -------------------------------------------------------
847
+ //!
848
+ //! ``make_any_synchronous_resource`` constructs an :ref:`any_synchronous_resource
849
+ //! <cudax-memory-resource-any-resource>` object that wraps a newly constructed
850
+ //! instance of the given resource type. The resource type must satisfy the
851
+ //! ``cuda::mr::synchronous_resource`` concept and provide all of the properties specified
852
+ //! in the template parameter pack.
853
+ //!
854
+ //! @param __args The arguments used to construct the instance of the resource
855
+ //! type.
856
+ //!
857
+ //! @endrst
858
+ template <class _Resource, class... _Properties, class... _Args>
859
+ auto make_any_synchronous_resource(_Args&&... __args) -> any_synchronous_resource<_Properties...>
860
+ {
861
+ static_assert(::cuda::mr::synchronous_resource<_Resource>,
862
+ "_Resource does not satisfy the cuda::mr::synchronous_resource concept");
863
+ static_assert(::cuda::mr::synchronous_resource_with<_Resource, _Properties...>,
864
+ "The provided _Resource type does not support the requested properties");
865
+ return any_synchronous_resource<_Properties...>{
866
+ ::cuda::std::in_place_type<_Resource>, ::cuda::std::forward<_Args>(__args)...};
867
+ }
868
+
869
+ //! @rst
870
+ //! .. _cudax-memory-resource-make-any-async-resource:
871
+ //!
872
+ //! Factory function for `any_resource` objects
873
+ //! -------------------------------------------------
874
+ //!
875
+ //! ``make_any_resource`` constructs an :ref:`any_resource
876
+ //! <cudax-memory-resource-any-async-resource>` object that wraps a newly
877
+ //! constructed instance of the given resource type. The resource type must
878
+ //! satisfy the ``cuda::mr::resource`` concept and provide all of the
879
+ //! properties specified in the template parameter pack.
880
+ //!
881
+ //! @param __args The arguments used to construct the instance of the resource
882
+ //! type.
883
+ //!
884
+ //! @endrst
885
+ template <class _Resource, class... _Properties, class... _Args>
886
+ auto make_any_resource(_Args&&... __args) -> any_resource<_Properties...>
887
+ {
888
+ static_assert(::cuda::mr::resource<_Resource>, "_Resource does not satisfy the cuda::mr::resource concept");
889
+ static_assert(::cuda::mr::resource_with<_Resource, _Properties...>,
890
+ "The provided _Resource type does not support the requested properties");
891
+ return any_resource<_Properties...>{::cuda::std::in_place_type<_Resource>, ::cuda::std::forward<_Args>(__args)...};
892
+ }
893
+
894
+ _CCCL_END_NAMESPACE_CUDA_MR
895
+
896
+ #include <cuda/std/__cccl/epilogue.h>
897
+
898
+ #endif // _CUDA___MEMORY_RESOURCE_ANY_RESOURCE_H