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.
- cuda/cccl/headers/include/cub/agent/agent_adjacent_difference.cuh +12 -38
- cuda/cccl/headers/include/cub/agent/agent_batch_memcpy.cuh +16 -40
- cuda/cccl/headers/include/cub/agent/agent_for.cuh +2 -28
- cuda/cccl/headers/include/cub/agent/agent_histogram.cuh +24 -56
- cuda/cccl/headers/include/cub/agent/agent_merge_sort.cuh +12 -38
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_downsweep.cuh +31 -56
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_histogram.cuh +31 -35
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_onesweep.cuh +47 -48
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_upsweep.cuh +39 -42
- cuda/cccl/headers/include/cub/agent/agent_reduce.cuh +33 -60
- cuda/cccl/headers/include/cub/agent/agent_reduce_by_key.cuh +18 -44
- cuda/cccl/headers/include/cub/agent/agent_rle.cuh +26 -55
- cuda/cccl/headers/include/cub/agent/agent_scan.cuh +22 -49
- cuda/cccl/headers/include/cub/agent/agent_scan_by_key.cuh +15 -41
- cuda/cccl/headers/include/cub/agent/agent_segmented_radix_sort.cuh +9 -35
- cuda/cccl/headers/include/cub/agent/agent_select_if.cuh +20 -49
- cuda/cccl/headers/include/cub/agent/agent_sub_warp_merge_sort.cuh +14 -40
- cuda/cccl/headers/include/cub/agent/agent_three_way_partition.cuh +18 -40
- cuda/cccl/headers/include/cub/agent/agent_topk.cuh +0 -2
- cuda/cccl/headers/include/cub/agent/agent_unique_by_key.cuh +20 -46
- cuda/cccl/headers/include/cub/agent/single_pass_scan_operators.cuh +3 -28
- cuda/cccl/headers/include/cub/block/block_adjacent_difference.cuh +7 -31
- cuda/cccl/headers/include/cub/block/block_discontinuity.cuh +10 -34
- cuda/cccl/headers/include/cub/block/block_exchange.cuh +120 -154
- cuda/cccl/headers/include/cub/block/block_histogram.cuh +28 -52
- cuda/cccl/headers/include/cub/block/block_load.cuh +124 -146
- cuda/cccl/headers/include/cub/block/block_load_to_shared.cuh +0 -16
- cuda/cccl/headers/include/cub/block/block_merge_sort.cuh +58 -87
- cuda/cccl/headers/include/cub/block/block_radix_rank.cuh +81 -100
- cuda/cccl/headers/include/cub/block/block_radix_sort.cuh +92 -156
- cuda/cccl/headers/include/cub/block/block_raking_layout.cuh +8 -32
- cuda/cccl/headers/include/cub/block/block_reduce.cuh +21 -46
- cuda/cccl/headers/include/cub/block/block_run_length_decode.cuh +51 -79
- cuda/cccl/headers/include/cub/block/block_scan.cuh +94 -401
- cuda/cccl/headers/include/cub/block/block_shuffle.cuh +10 -34
- cuda/cccl/headers/include/cub/block/block_store.cuh +73 -97
- cuda/cccl/headers/include/cub/block/radix_rank_sort_operations.cuh +2 -29
- cuda/cccl/headers/include/cub/block/specializations/block_histogram_atomic.cuh +5 -29
- cuda/cccl/headers/include/cub/block/specializations/block_histogram_sort.cuh +25 -49
- cuda/cccl/headers/include/cub/block/specializations/block_reduce_raking.cuh +12 -34
- cuda/cccl/headers/include/cub/block/specializations/block_reduce_raking_commutative_only.cuh +10 -34
- cuda/cccl/headers/include/cub/block/specializations/block_reduce_warp_reductions.cuh +3 -27
- cuda/cccl/headers/include/cub/block/specializations/block_scan_raking.cuh +12 -36
- cuda/cccl/headers/include/cub/block/specializations/block_scan_warp_scans.cuh +9 -33
- cuda/cccl/headers/include/cub/config.cuh +2 -26
- cuda/cccl/headers/include/cub/cub.cuh +3 -27
- cuda/cccl/headers/include/cub/detail/array_utils.cuh +2 -26
- cuda/cccl/headers/include/cub/detail/choose_offset.cuh +2 -28
- cuda/cccl/headers/include/cub/detail/detect_cuda_runtime.cuh +3 -27
- cuda/cccl/headers/include/cub/detail/device_double_buffer.cuh +0 -2
- cuda/cccl/headers/include/cub/detail/device_memory_resource.cuh +1 -3
- cuda/cccl/headers/include/cub/detail/fast_modulo_division.cuh +2 -28
- cuda/cccl/headers/include/cub/detail/integer_utils.cuh +0 -2
- cuda/cccl/headers/include/cub/detail/launcher/cuda_driver.cuh +0 -2
- cuda/cccl/headers/include/cub/detail/launcher/cuda_runtime.cuh +0 -2
- cuda/cccl/headers/include/cub/detail/mdspan_utils.cuh +0 -2
- cuda/cccl/headers/include/cub/detail/ptx-json/README.md +7 -12
- cuda/cccl/headers/include/cub/detail/ptx-json/array.h +6 -33
- cuda/cccl/headers/include/cub/detail/ptx-json/json.h +13 -36
- cuda/cccl/headers/include/cub/detail/ptx-json/object.h +9 -38
- cuda/cccl/headers/include/cub/detail/ptx-json/string.h +58 -32
- cuda/cccl/headers/include/cub/detail/ptx-json/value.h +51 -51
- cuda/cccl/headers/include/cub/detail/ptx-json-parser.h +7 -31
- cuda/cccl/headers/include/cub/detail/rfa.cuh +2 -27
- cuda/cccl/headers/include/cub/detail/strong_load.cuh +3 -29
- cuda/cccl/headers/include/cub/detail/strong_store.cuh +3 -29
- cuda/cccl/headers/include/cub/detail/temporary_storage.cuh +2 -9
- cuda/cccl/headers/include/cub/detail/type_traits.cuh +0 -2
- cuda/cccl/headers/include/cub/detail/uninitialized_copy.cuh +6 -31
- cuda/cccl/headers/include/cub/detail/unsafe_bitcast.cuh +2 -25
- cuda/cccl/headers/include/cub/device/device_adjacent_difference.cuh +2 -26
- cuda/cccl/headers/include/cub/device/device_for.cuh +3 -5
- cuda/cccl/headers/include/cub/device/device_histogram.cuh +3 -27
- cuda/cccl/headers/include/cub/device/device_memcpy.cuh +2 -26
- cuda/cccl/headers/include/cub/device/device_merge_sort.cuh +2 -26
- cuda/cccl/headers/include/cub/device/device_partition.cuh +3 -27
- cuda/cccl/headers/include/cub/device/device_radix_sort.cuh +3 -27
- cuda/cccl/headers/include/cub/device/device_reduce.cuh +10 -31
- cuda/cccl/headers/include/cub/device/device_run_length_encode.cuh +3 -27
- cuda/cccl/headers/include/cub/device/device_scan.cuh +16 -34
- cuda/cccl/headers/include/cub/device/device_segmented_radix_sort.cuh +3 -27
- cuda/cccl/headers/include/cub/device/device_segmented_reduce.cuh +3 -27
- cuda/cccl/headers/include/cub/device/device_segmented_sort.cuh +2 -26
- cuda/cccl/headers/include/cub/device/device_select.cuh +3 -27
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_adjacent_difference.cuh +2 -28
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_batch_memcpy.cuh +2 -27
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_copy_mdspan.cuh +0 -2
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_for.cuh +3 -29
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_histogram.cuh +14 -34
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_merge_sort.cuh +5 -30
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_radix_sort.cuh +4 -29
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce.cuh +5 -32
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_by_key.cuh +3 -29
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_deterministic.cuh +2 -29
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_nondeterministic.cuh +1 -2
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_rle.cuh +47 -59
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_scan.cuh +21 -30
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_scan_by_key.cuh +2 -27
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_segmented_sort.cuh +3 -27
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_select_if.cuh +3 -27
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce.cuh +0 -2
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce_by_key.cuh +51 -36
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_three_way_partition.cuh +3 -28
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_topk.cuh +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_transform.cuh +27 -55
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_unique_by_key.cuh +4 -28
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{for_each.cuh → kernel_for_each.cuh} +0 -2
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{histogram.cuh → kernel_histogram.cuh} +149 -157
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{merge_sort.cuh → kernel_merge_sort.cuh} +0 -2
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{radix_sort.cuh → kernel_radix_sort.cuh} +0 -2
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{reduce.cuh → kernel_reduce.cuh} +2 -28
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{scan.cuh → kernel_scan.cuh} +2 -28
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{segmented_reduce.cuh → kernel_segmented_reduce.cuh} +3 -29
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{segmented_sort.cuh → kernel_segmented_sort.cuh} +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{three_way_partition.cuh → kernel_three_way_partition.cuh} +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{transform.cuh → kernel_transform.cuh} +11 -11
- cuda/cccl/headers/include/cub/device/dispatch/kernels/{unique_by_key.cuh → kernel_unique_by_key.cuh} +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_adjacent_difference.cuh +2 -26
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_batch_memcpy.cuh +2 -26
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_for.cuh +2 -28
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_histogram.cuh +6 -26
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge.cuh +2 -26
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge_sort.cuh +5 -31
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_radix_sort.cuh +31 -33
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce.cuh +15 -40
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce_by_key.cuh +2 -26
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_run_length_encode.cuh +2 -28
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan.cuh +20 -44
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan_by_key.cuh +2 -26
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_segmented_sort.cuh +20 -45
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_select_if.cuh +2 -27
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_three_way_partition.cuh +11 -36
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_topk.cuh +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_transform.cuh +2 -27
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_unique_by_key.cuh +14 -40
- cuda/cccl/headers/include/cub/grid/grid_even_share.cuh +3 -27
- cuda/cccl/headers/include/cub/grid/grid_mapping.cuh +3 -27
- cuda/cccl/headers/include/cub/grid/grid_queue.cuh +3 -27
- cuda/cccl/headers/include/cub/iterator/arg_index_input_iterator.cuh +3 -27
- cuda/cccl/headers/include/cub/iterator/cache_modified_input_iterator.cuh +3 -27
- cuda/cccl/headers/include/cub/iterator/cache_modified_output_iterator.cuh +3 -27
- cuda/cccl/headers/include/cub/iterator/tex_obj_input_iterator.cuh +3 -27
- cuda/cccl/headers/include/cub/thread/thread_load.cuh +3 -28
- cuda/cccl/headers/include/cub/thread/thread_operators.cuh +3 -27
- cuda/cccl/headers/include/cub/thread/thread_reduce.cuh +3 -26
- cuda/cccl/headers/include/cub/thread/thread_scan.cuh +3 -29
- cuda/cccl/headers/include/cub/thread/thread_search.cuh +3 -27
- cuda/cccl/headers/include/cub/thread/thread_simd.cuh +0 -2
- cuda/cccl/headers/include/cub/thread/thread_sort.cuh +2 -26
- cuda/cccl/headers/include/cub/thread/thread_store.cuh +3 -27
- cuda/cccl/headers/include/cub/util_allocator.cuh +3 -27
- cuda/cccl/headers/include/cub/util_arch.cuh +3 -29
- cuda/cccl/headers/include/cub/util_cpp_dialect.cuh +2 -26
- cuda/cccl/headers/include/cub/util_debug.cuh +3 -27
- cuda/cccl/headers/include/cub/util_device.cuh +18 -59
- cuda/cccl/headers/include/cub/util_macro.cuh +4 -28
- cuda/cccl/headers/include/cub/util_math.cuh +2 -28
- cuda/cccl/headers/include/cub/util_namespace.cuh +3 -28
- cuda/cccl/headers/include/cub/util_policy_wrapper_t.cuh +3 -27
- cuda/cccl/headers/include/cub/util_ptx.cuh +6 -30
- cuda/cccl/headers/include/cub/util_temporary_storage.cuh +3 -29
- cuda/cccl/headers/include/cub/util_type.cuh +5 -32
- cuda/cccl/headers/include/cub/util_vsmem.cuh +2 -28
- cuda/cccl/headers/include/cub/version.cuh +2 -26
- cuda/cccl/headers/include/cub/warp/specializations/warp_exchange_shfl.cuh +10 -35
- cuda/cccl/headers/include/cub/warp/specializations/warp_exchange_smem.cuh +5 -30
- cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_shfl.cuh +15 -39
- cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_smem.cuh +5 -35
- cuda/cccl/headers/include/cub/warp/specializations/warp_scan_shfl.cuh +22 -46
- cuda/cccl/headers/include/cub/warp/specializations/warp_scan_smem.cuh +3 -27
- cuda/cccl/headers/include/cub/warp/warp_exchange.cuh +2 -26
- cuda/cccl/headers/include/cub/warp/warp_load.cuh +4 -27
- cuda/cccl/headers/include/cub/warp/warp_merge_sort.cuh +2 -26
- cuda/cccl/headers/include/cub/warp/warp_reduce.cuh +3 -22
- cuda/cccl/headers/include/cub/warp/warp_scan.cuh +3 -27
- cuda/cccl/headers/include/cub/warp/warp_store.cuh +4 -27
- cuda/cccl/headers/include/cub/warp/warp_utils.cuh +0 -2
- cuda/cccl/headers/include/cuda/__barrier/barrier.h +1 -1
- cuda/cccl/headers/include/cuda/__barrier/barrier_arrive_tx.h +0 -1
- cuda/cccl/headers/include/cuda/__barrier/barrier_block_scope.h +277 -235
- cuda/cccl/headers/include/cuda/__barrier/barrier_expect_tx.h +0 -1
- cuda/cccl/headers/include/cuda/__driver/driver_api.h +13 -0
- cuda/cccl/headers/include/cuda/__execution/determinism.h +0 -2
- cuda/cccl/headers/include/cuda/__execution/output_ordering.h +0 -2
- cuda/cccl/headers/include/cuda/__functional/maximum.h +25 -7
- cuda/cccl/headers/include/cuda/__functional/minimum.h +25 -7
- cuda/cccl/headers/include/cuda/__functional/minimum_maximum_common.h +52 -0
- cuda/cccl/headers/include/cuda/__functional/proclaim_return_type.h +0 -2
- cuda/cccl/headers/include/cuda/__iterator/counting_iterator.h +13 -4
- cuda/cccl/headers/include/cuda/__iterator/zip_function.h +4 -2
- cuda/cccl/headers/include/cuda/__mdspan/host_device_accessor.h +0 -1
- cuda/cccl/headers/include/cuda/__memcpy_async/cp_async_bulk_shared_global.h +28 -7
- cuda/cccl/headers/include/cuda/__memcpy_async/dispatch_memcpy_async.h +1 -1
- cuda/cccl/headers/include/cuda/__memcpy_async/elect_one.h +52 -0
- cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_async_tx.h +2 -3
- cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_completion.h +1 -7
- cuda/cccl/headers/include/cuda/__memcpy_async/try_get_barrier_handle.h +0 -1
- cuda/cccl/headers/include/cuda/__memory/get_device_address.h +1 -1
- cuda/cccl/headers/include/cuda/__memory/ranges_overlap.h +126 -0
- cuda/cccl/headers/include/cuda/__memory_resource/any_resource.h +898 -0
- cuda/cccl/headers/include/cuda/__memory_resource/device_memory_pool.h +149 -0
- cuda/cccl/headers/include/cuda/__memory_resource/get_property.h +3 -3
- cuda/cccl/headers/include/cuda/__memory_resource/legacy_managed_memory_resource.h +148 -0
- cuda/cccl/headers/include/cuda/__memory_resource/legacy_pinned_memory_resource.h +139 -0
- cuda/cccl/headers/include/cuda/__memory_resource/managed_memory_pool.h +146 -0
- cuda/cccl/headers/include/cuda/__memory_resource/memory_resource_base.h +578 -0
- cuda/cccl/headers/include/cuda/__memory_resource/pinned_memory_pool.h +188 -0
- cuda/cccl/headers/include/cuda/__memory_resource/properties.h +3 -3
- cuda/cccl/headers/include/cuda/__memory_resource/resource.h +37 -3
- cuda/cccl/headers/include/cuda/__numeric/add_overflow.h +13 -3
- cuda/cccl/headers/include/cuda/__numeric/div_overflow.h +150 -0
- cuda/cccl/headers/include/cuda/__numeric/overflow_cast.h +2 -2
- cuda/cccl/headers/include/cuda/__numeric/sub_overflow.h +344 -0
- cuda/cccl/headers/include/cuda/__nvtx/nvtx3.h +0 -6
- cuda/cccl/headers/include/cuda/__ptx/instructions/shfl_sync.h +1 -1
- cuda/cccl/headers/include/cuda/__ptx/pragmas/enable_smem_spilling.h +47 -0
- cuda/cccl/headers/include/cuda/{std/__cuda → __runtime}/api_wrapper.h +3 -3
- cuda/cccl/headers/include/cuda/__stream/get_stream.h +0 -1
- cuda/cccl/headers/include/cuda/{__fwd/barrier_native_handle.h → __stream/internal_streams.h} +17 -15
- cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_ptr.h +2 -2
- cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_value.h +1 -0
- cuda/cccl/headers/include/cuda/__utility/__basic_any/semiregular.h +1 -0
- cuda/cccl/headers/include/cuda/__utility/__basic_any/virtcall.h +2 -1
- cuda/cccl/headers/include/cuda/barrier +42 -16
- cuda/cccl/headers/include/cuda/memory +1 -0
- cuda/cccl/headers/include/cuda/memory_resource +6 -1
- cuda/cccl/headers/include/cuda/numeric +2 -0
- cuda/cccl/headers/include/cuda/pipeline +3 -2
- cuda/cccl/headers/include/cuda/ptx +1 -0
- cuda/cccl/headers/include/cuda/std/__algorithm/unique_copy.h +0 -2
- cuda/cccl/headers/include/cuda/std/__atomic/api/reference.h +1 -1
- cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_derived.h +115 -58
- cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_generated.h +844 -378
- cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_generated_helper.h +12 -5
- cuda/cccl/headers/include/cuda/std/__atomic/functions/host.h +31 -0
- cuda/cccl/headers/include/cuda/std/__atomic/types/small.h +10 -0
- cuda/cccl/headers/include/cuda/std/__atomic/types.h +2 -3
- cuda/cccl/headers/include/cuda/std/__bit/byteswap.h +37 -13
- cuda/cccl/headers/include/cuda/std/__cccl/builtin.h +0 -28
- cuda/cccl/headers/include/cuda/std/__cccl/dialect.h +7 -0
- cuda/cccl/headers/include/cuda/std/__cccl/epilogue.h +10 -0
- cuda/cccl/headers/include/cuda/std/__cccl/exceptions.h +2 -45
- cuda/cccl/headers/include/cuda/std/__cccl/is_non_narrowing_convertible.h +0 -2
- cuda/cccl/headers/include/cuda/std/__cccl/prologue.h +8 -0
- cuda/cccl/headers/include/cuda/std/__chrono/calendar.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/day.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/duration.h +13 -17
- cuda/cccl/headers/include/cuda/std/__chrono/file_clock.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/high_resolution_clock.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/month.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/steady_clock.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/system_clock.h +0 -2
- cuda/cccl/headers/include/cuda/std/__chrono/time_point.h +5 -8
- cuda/cccl/headers/include/cuda/std/__chrono/year.h +0 -2
- cuda/cccl/headers/include/cuda/std/__cmath/error_functions.h +4 -0
- cuda/cccl/headers/include/cuda/std/__cmath/exponential_functions.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/fdim.h +4 -0
- cuda/cccl/headers/include/cuda/std/__cmath/fma.h +4 -0
- cuda/cccl/headers/include/cuda/std/__cmath/fpclassify.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/gamma.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/hyperbolic_functions.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/hypot.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/inverse_hyperbolic_functions.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/inverse_trigonometric_functions.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/isfinite.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/isinf.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/isnan.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/logarithms.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/min_max.h +2 -2
- cuda/cccl/headers/include/cuda/std/__cmath/remainder.h +4 -0
- cuda/cccl/headers/include/cuda/std/__cmath/roots.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/rounding_functions.h +2 -3
- cuda/cccl/headers/include/cuda/std/__cmath/traits.h +4 -0
- cuda/cccl/headers/include/cuda/std/__cmath/trigonometric_functions.h +2 -3
- cuda/cccl/headers/include/cuda/std/__complex/complex.h +0 -6
- cuda/cccl/headers/include/cuda/std/__complex/exponential_functions.h +2 -2
- cuda/cccl/headers/include/cuda/std/__concepts/concept_macros.h +27 -1
- cuda/cccl/headers/include/cuda/std/__concepts/equality_comparable.h +2 -4
- cuda/cccl/headers/include/cuda/std/__exception/cuda_error.h +15 -36
- cuda/cccl/headers/include/cuda/std/__exception/exception_macros.h +93 -0
- cuda/cccl/headers/include/cuda/std/{detail/libcxx/include/stdexcept → __exception/throw_error.h} +3 -3
- cuda/cccl/headers/include/cuda/std/__expected/expected.h +28 -43
- cuda/cccl/headers/include/cuda/std/__expected/unexpected.h +2 -10
- cuda/cccl/headers/include/cuda/std/__format/format_arg_store.h +2 -2
- cuda/cccl/headers/include/cuda/std/__functional/bind.h +6 -6
- cuda/cccl/headers/include/cuda/std/__functional/function.h +2 -6
- cuda/cccl/headers/include/cuda/std/__functional/invoke.h +5 -5
- cuda/cccl/headers/include/cuda/std/__fwd/allocator.h +5 -0
- cuda/cccl/headers/include/cuda/std/__fwd/array.h +2 -2
- cuda/cccl/headers/include/cuda/std/__fwd/char_traits.h +12 -0
- cuda/cccl/headers/include/cuda/std/__fwd/expected.h +46 -0
- cuda/cccl/headers/include/cuda/std/__fwd/get.h +21 -22
- cuda/cccl/headers/include/cuda/std/{detail/libcxx/include/iosfwd → __fwd/ios.h} +5 -10
- cuda/cccl/headers/include/cuda/std/__fwd/mdspan.h +19 -10
- cuda/cccl/headers/include/cuda/std/__fwd/optional.h +2 -2
- cuda/cccl/headers/include/cuda/std/__fwd/reference_wrapper.h +5 -0
- cuda/cccl/headers/include/cuda/std/__fwd/span.h +2 -2
- cuda/cccl/headers/include/cuda/std/__fwd/string.h +7 -0
- cuda/cccl/headers/include/cuda/std/__fwd/string_view.h +18 -0
- cuda/cccl/headers/include/cuda/std/__fwd/tuple.h +3 -0
- cuda/cccl/headers/include/cuda/std/__fwd/unexpected.h +40 -0
- cuda/cccl/headers/include/cuda/std/{__type_traits/is_reference_wrapper.h → __fwd/variant.h} +16 -15
- cuda/cccl/headers/include/cuda/std/__internal/features.h +14 -0
- cuda/cccl/headers/include/cuda/std/__iterator/istream_iterator.h +1 -1
- cuda/cccl/headers/include/cuda/std/__iterator/istreambuf_iterator.h +1 -1
- cuda/cccl/headers/include/cuda/std/__iterator/iter_swap.h +58 -40
- cuda/cccl/headers/include/cuda/std/__iterator/ostream_iterator.h +1 -1
- cuda/cccl/headers/include/cuda/std/__iterator/ostreambuf_iterator.h +1 -1
- cuda/cccl/headers/include/cuda/std/__iterator/reverse_iterator.h +0 -5
- cuda/cccl/headers/include/cuda/std/__limits/numeric_limits.h +4 -18
- cuda/cccl/headers/include/cuda/std/__linalg/conj_if_needed.h +1 -2
- cuda/cccl/headers/include/cuda/std/__linalg/conjugate_transposed.h +0 -2
- cuda/cccl/headers/include/cuda/std/__linalg/conjugated.h +0 -2
- cuda/cccl/headers/include/cuda/std/__linalg/scaled.h +0 -4
- cuda/cccl/headers/include/cuda/std/__linalg/transposed.h +0 -5
- cuda/cccl/headers/include/cuda/std/__mdspan/concepts.h +3 -10
- cuda/cccl/headers/include/cuda/std/__mdspan/extents.h +4 -15
- cuda/cccl/headers/include/cuda/std/__mdspan/layout_left.h +4 -4
- cuda/cccl/headers/include/cuda/std/__mdspan/layout_right.h +4 -4
- cuda/cccl/headers/include/cuda/std/__mdspan/layout_stride.h +2 -4
- cuda/cccl/headers/include/cuda/std/__mdspan/mdspan.h +3 -3
- cuda/cccl/headers/include/cuda/std/__mdspan/submdspan_helper.h +1 -1
- cuda/cccl/headers/include/cuda/std/__memory/allocator_arg_t.h +1 -0
- cuda/cccl/headers/include/cuda/std/__memory/allocator_traits.h +6 -12
- cuda/cccl/headers/include/cuda/std/__memory/construct_at.h +1 -5
- cuda/cccl/headers/include/cuda/std/__memory/is_sufficiently_aligned.h +7 -2
- cuda/cccl/headers/include/cuda/std/__memory/uninitialized_algorithms.h +1 -0
- cuda/cccl/headers/include/cuda/std/__memory/uses_allocator.h +5 -0
- cuda/cccl/headers/include/cuda/std/__new/allocate.h +5 -0
- cuda/cccl/headers/include/cuda/{__barrier/barrier_native_handle.h → std/__new/device_new.h} +9 -24
- cuda/cccl/headers/include/cuda/std/__new_ +1 -0
- cuda/cccl/headers/include/cuda/std/__optional/optional.h +5 -4
- cuda/cccl/headers/include/cuda/std/__optional/optional_ref.h +4 -4
- cuda/cccl/headers/include/cuda/std/__random/linear_congruential_engine.h +1 -1
- cuda/cccl/headers/include/cuda/std/__random/philox_engine.h +562 -0
- cuda/cccl/headers/include/cuda/std/__random/seed_seq.h +204 -0
- cuda/cccl/headers/include/cuda/std/__random_ +2 -0
- cuda/cccl/headers/include/cuda/std/__ranges/concepts.h +7 -19
- cuda/cccl/headers/include/cuda/std/__ranges/movable_box.h +2 -4
- cuda/cccl/headers/include/cuda/std/__ranges/owning_view.h +5 -4
- cuda/cccl/headers/include/cuda/std/__ranges/repeat_view.h +1 -1
- cuda/cccl/headers/include/cuda/std/__string/string_view.h +5 -5
- cuda/cccl/headers/include/cuda/std/__tuple_dir/apply.h +82 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/get.h +122 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/sfinae_helpers.h +0 -160
- cuda/cccl/headers/include/cuda/std/__tuple_dir/structured_bindings.h +123 -129
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tie.h +55 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple.h +457 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_cat.h +158 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_constraints.h +286 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_element.h +7 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_leaf.h +452 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_like.h +1 -2
- cuda/cccl/headers/include/cuda/std/__type_traits/is_comparable.h +78 -0
- cuda/cccl/headers/include/cuda/std/__type_traits/is_convertible.h +1 -1
- cuda/cccl/headers/include/cuda/std/__type_traits/is_fully_bounded_array.h +47 -0
- cuda/cccl/headers/include/cuda/std/__type_traits/is_swappable.h +0 -2
- cuda/cccl/headers/include/cuda/std/__utility/in_place.h +4 -24
- cuda/cccl/headers/include/cuda/std/__utility/integer_sequence.h +0 -2
- cuda/cccl/headers/include/cuda/std/__utility/pair.h +20 -20
- cuda/cccl/headers/include/cuda/std/__utility/rel_ops.h +0 -2
- cuda/cccl/headers/include/cuda/std/__variant/bad_variant_access.h +74 -0
- cuda/cccl/headers/include/cuda/std/__variant/comparison.h +207 -0
- cuda/cccl/headers/include/cuda/std/__variant/get.h +192 -0
- cuda/cccl/headers/include/cuda/std/__variant/hash.h +82 -0
- cuda/cccl/headers/include/cuda/std/__variant/sfinae_helpers.h +89 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant.h +250 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant_access.h +70 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant_base.h +683 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant_constraints.h +135 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant_match.h +126 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant_traits.h +184 -0
- cuda/cccl/headers/include/cuda/std/__variant/variant_visit.h +225 -0
- cuda/cccl/headers/include/cuda/std/__variant/visit.h +148 -0
- cuda/cccl/headers/include/cuda/std/array +1 -1
- cuda/cccl/headers/include/cuda/std/atomic +1 -1
- cuda/cccl/headers/include/cuda/std/bitset +2 -10
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/__config +6 -6
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/algorithm +1 -4
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/chrono +3 -6
- cuda/cccl/headers/include/cuda/std/functional +1 -1
- cuda/cccl/headers/include/cuda/std/initializer_list +8 -0
- cuda/cccl/headers/include/cuda/std/inplace_vector +6 -5
- cuda/cccl/headers/include/cuda/std/iterator +1 -1
- cuda/cccl/headers/include/cuda/std/numbers +0 -2
- cuda/cccl/headers/include/cuda/std/ratio +2 -2
- cuda/cccl/headers/include/cuda/std/span +2 -2
- cuda/cccl/headers/include/cuda/std/string_view +24 -42
- cuda/cccl/headers/include/cuda/std/tuple +18 -1
- cuda/cccl/headers/include/cuda/std/type_traits +0 -1
- cuda/cccl/headers/include/cuda/std/variant +8 -1
- cuda/cccl/headers/include/nv/target +2 -6
- cuda/cccl/headers/include/thrust/detail/adjacent_difference.inl +15 -2
- cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.h +0 -2
- cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.h +0 -1
- cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.h +0 -1
- cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.h +0 -2
- cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.h +0 -2
- cuda/cccl/headers/include/thrust/detail/allocator/no_throw_allocator.h +0 -2
- cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.h +0 -2
- cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.h +0 -2
- cuda/cccl/headers/include/thrust/detail/allocator_aware_execution_policy.h +0 -4
- cuda/cccl/headers/include/thrust/detail/binary_search.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/complex/arithmetic.h +2 -7
- cuda/cccl/headers/include/thrust/detail/complex/c99math.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/catrig.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/catrigf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/ccosh.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/ccoshf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/cexp.h +2 -7
- cuda/cccl/headers/include/thrust/detail/complex/cexpf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/clog.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/clogf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/cproj.h +2 -7
- cuda/cccl/headers/include/thrust/detail/complex/csinh.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/csinhf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/csqrt.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/csqrtf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/ctanh.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/ctanhf.h +2 -8
- cuda/cccl/headers/include/thrust/detail/complex/math_private.h +2 -8
- cuda/cccl/headers/include/thrust/detail/config/device_system.h +2 -0
- cuda/cccl/headers/include/thrust/detail/config/host_system.h +2 -0
- cuda/cccl/headers/include/thrust/detail/config/namespace.h +0 -1
- cuda/cccl/headers/include/thrust/detail/contiguous_storage.h +0 -2
- cuda/cccl/headers/include/thrust/detail/contiguous_storage.inl +0 -2
- cuda/cccl/headers/include/thrust/detail/copy.h +0 -2
- cuda/cccl/headers/include/thrust/detail/copy.inl +14 -4
- cuda/cccl/headers/include/thrust/detail/copy_if.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/count.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/equal.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/execute_with_allocator.h +4 -5
- cuda/cccl/headers/include/thrust/detail/extrema.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/fill.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/find.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/for_each.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/functional/actor.h +2 -5
- cuda/cccl/headers/include/thrust/detail/functional/operators.h +2 -5
- cuda/cccl/headers/include/thrust/detail/gather.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/generate.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/get_iterator_value.h +0 -2
- cuda/cccl/headers/include/thrust/detail/inner_product.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/internal_functional.h +1 -0
- cuda/cccl/headers/include/thrust/detail/logical.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/malloc_and_free.h +13 -1
- cuda/cccl/headers/include/thrust/detail/merge.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/mismatch.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/overlapped_copy.h +0 -4
- cuda/cccl/headers/include/thrust/detail/partition.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/random_bijection.h +0 -2
- cuda/cccl/headers/include/thrust/detail/range/head_flags.h +0 -2
- cuda/cccl/headers/include/thrust/detail/range/tail_flags.h +0 -2
- cuda/cccl/headers/include/thrust/detail/raw_reference_cast.h +0 -6
- cuda/cccl/headers/include/thrust/detail/reduce.inl +21 -3
- cuda/cccl/headers/include/thrust/detail/reference.h +27 -3
- cuda/cccl/headers/include/thrust/detail/remove.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/replace.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/reverse.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/scan.inl +21 -3
- cuda/cccl/headers/include/thrust/detail/scatter.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/sequence.inl +13 -1
- cuda/cccl/headers/include/thrust/detail/set_operations.inl +13 -1
- cuda/cccl/headers/include/thrust/detail/sort.inl +13 -1
- cuda/cccl/headers/include/thrust/detail/static_assert.h +0 -2
- cuda/cccl/headers/include/thrust/detail/static_map.h +0 -3
- cuda/cccl/headers/include/thrust/detail/swap_ranges.inl +13 -1
- cuda/cccl/headers/include/thrust/detail/tabulate.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/temporary_array.h +0 -4
- cuda/cccl/headers/include/thrust/detail/temporary_array.inl +0 -1
- cuda/cccl/headers/include/thrust/detail/temporary_buffer.h +14 -3
- cuda/cccl/headers/include/thrust/detail/transform_reduce.inl +13 -1
- cuda/cccl/headers/include/thrust/detail/transform_scan.inl +13 -1
- cuda/cccl/headers/include/thrust/detail/trivial_sequence.h +0 -2
- cuda/cccl/headers/include/thrust/detail/tuple_meta_transform.h +0 -2
- cuda/cccl/headers/include/thrust/detail/type_traits/is_call_possible.h +2 -7
- cuda/cccl/headers/include/thrust/detail/type_traits/is_commutative.h +0 -2
- cuda/cccl/headers/include/thrust/detail/type_traits/is_thrust_pointer.h +0 -4
- cuda/cccl/headers/include/thrust/detail/type_traits/pointer_traits.h +0 -4
- cuda/cccl/headers/include/thrust/detail/uninitialized_copy.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/uninitialized_fill.inl +14 -2
- cuda/cccl/headers/include/thrust/detail/unique.inl +21 -3
- cuda/cccl/headers/include/thrust/detail/vector_base.h +0 -2
- cuda/cccl/headers/include/thrust/detail/vector_base.inl +0 -2
- cuda/cccl/headers/include/thrust/execution_policy.h +10 -9
- cuda/cccl/headers/include/thrust/functional.h +0 -2
- cuda/cccl/headers/include/thrust/iterator/detail/device_system_tag.h +9 -4
- cuda/cccl/headers/include/thrust/iterator/detail/host_system_tag.h +8 -4
- cuda/cccl/headers/include/thrust/iterator/detail/iterator_adaptor_base.h +0 -1
- cuda/cccl/headers/include/thrust/iterator/detail/iterator_category_with_system_and_traversal.h +0 -1
- cuda/cccl/headers/include/thrust/iterator/detail/iterator_facade_category.h +0 -1
- cuda/cccl/headers/include/thrust/iterator/detail/minimum_system.h +0 -1
- cuda/cccl/headers/include/thrust/iterator/detail/tagged_iterator.h +0 -1
- cuda/cccl/headers/include/thrust/iterator/detail/tuple_of_iterator_references.h +2 -6
- cuda/cccl/headers/include/thrust/iterator/transform_input_output_iterator.h +0 -1
- cuda/cccl/headers/include/thrust/iterator/transform_iterator.h +0 -2
- cuda/cccl/headers/include/thrust/mr/allocator.h +0 -2
- cuda/cccl/headers/include/thrust/mr/device_memory_resource.h +9 -4
- cuda/cccl/headers/include/thrust/mr/disjoint_pool.h +10 -10
- cuda/cccl/headers/include/thrust/mr/disjoint_sync_pool.h +0 -2
- cuda/cccl/headers/include/thrust/mr/disjoint_tls_pool.h +0 -2
- cuda/cccl/headers/include/thrust/mr/fancy_pointer_resource.h +0 -2
- cuda/cccl/headers/include/thrust/mr/host_memory_resource.h +8 -4
- cuda/cccl/headers/include/thrust/mr/memory_resource.h +0 -2
- cuda/cccl/headers/include/thrust/mr/new.h +0 -2
- cuda/cccl/headers/include/thrust/mr/polymorphic_adaptor.h +0 -2
- cuda/cccl/headers/include/thrust/mr/pool.h +10 -10
- cuda/cccl/headers/include/thrust/mr/pool_options.h +4 -6
- cuda/cccl/headers/include/thrust/mr/sync_pool.h +0 -2
- cuda/cccl/headers/include/thrust/mr/tls_pool.h +0 -2
- cuda/cccl/headers/include/thrust/mr/validator.h +0 -2
- cuda/cccl/headers/include/thrust/per_device_resource.h +13 -1
- cuda/cccl/headers/include/thrust/random/detail/discard_block_engine.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/linear_congruential_engine.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/linear_congruential_engine_discard.h +2 -9
- cuda/cccl/headers/include/thrust/random/detail/linear_feedback_shift_engine.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/linear_feedback_shift_engine_wordmask.h +2 -9
- cuda/cccl/headers/include/thrust/random/detail/mod.h +2 -9
- cuda/cccl/headers/include/thrust/random/detail/normal_distribution.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/normal_distribution_base.h +2 -7
- cuda/cccl/headers/include/thrust/random/detail/random_core_access.h +2 -9
- cuda/cccl/headers/include/thrust/random/detail/subtract_with_carry_engine.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/uniform_int_distribution.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/uniform_real_distribution.inl +0 -2
- cuda/cccl/headers/include/thrust/random/detail/xor_combine_engine.inl +0 -2
- cuda/cccl/headers/include/thrust/random/discard_block_engine.h +0 -2
- cuda/cccl/headers/include/thrust/random/linear_congruential_engine.h +0 -2
- cuda/cccl/headers/include/thrust/random/linear_feedback_shift_engine.h +0 -2
- cuda/cccl/headers/include/thrust/random/normal_distribution.h +0 -2
- cuda/cccl/headers/include/thrust/random/subtract_with_carry_engine.h +0 -2
- cuda/cccl/headers/include/thrust/random/uniform_int_distribution.h +0 -2
- cuda/cccl/headers/include/thrust/random/uniform_real_distribution.h +0 -2
- cuda/cccl/headers/include/thrust/random/xor_combine_engine.h +0 -2
- cuda/cccl/headers/include/thrust/random.h +0 -2
- cuda/cccl/headers/include/thrust/system/cpp/detail/execution_policy.h +15 -11
- cuda/cccl/headers/include/thrust/system/cpp/detail/memory.inl +2 -7
- cuda/cccl/headers/include/thrust/system/cpp/memory.h +0 -1
- cuda/cccl/headers/include/thrust/system/cpp/memory_resource.h +0 -2
- cuda/cccl/headers/include/thrust/system/cpp/pointer.h +0 -2
- cuda/cccl/headers/include/thrust/system/cpp/vector.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/adjacent_difference.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/copy.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/copy_if.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/core/agent_launcher.h +2 -9
- cuda/cccl/headers/include/thrust/system/cuda/detail/core/triple_chevron_launch.h +4 -32
- cuda/cccl/headers/include/thrust/system/cuda/detail/core/util.h +2 -9
- cuda/cccl/headers/include/thrust/system/cuda/detail/count.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/cross_system.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/dispatch.h +23 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/equal.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/error.inl +2 -11
- cuda/cccl/headers/include/thrust/system/cuda/detail/execution_policy.h +2 -0
- cuda/cccl/headers/include/thrust/system/cuda/detail/extrema.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/fill.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/find.h +0 -5
- cuda/cccl/headers/include/thrust/system/cuda/detail/for_each.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/gather.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/generate.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/iter_swap.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/make_unsigned_special.h +2 -8
- cuda/cccl/headers/include/thrust/system/cuda/detail/malloc_and_free.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/memory.inl +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/merge.h +2 -26
- cuda/cccl/headers/include/thrust/system/cuda/detail/mismatch.h +7 -142
- cuda/cccl/headers/include/thrust/system/cuda/detail/parallel_for.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/partition.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/per_device_resource.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/reduce.h +0 -5
- cuda/cccl/headers/include/thrust/system/cuda/detail/reduce_by_key.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/remove.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/replace.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/reverse.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/scan.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/scan_by_key.h +0 -3
- cuda/cccl/headers/include/thrust/system/cuda/detail/scatter.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/set_operations.h +3 -5
- cuda/cccl/headers/include/thrust/system/cuda/detail/sort.h +8 -10
- cuda/cccl/headers/include/thrust/system/cuda/detail/temporary_buffer.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/transform.h +0 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/transform_reduce.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/detail/transform_scan.h +0 -2
- cuda/cccl/headers/include/thrust/system/cuda/detail/uninitialized_copy.h +1 -7
- cuda/cccl/headers/include/thrust/system/cuda/detail/uninitialized_fill.h +2 -7
- cuda/cccl/headers/include/thrust/system/cuda/detail/unique.h +0 -3
- cuda/cccl/headers/include/thrust/system/cuda/detail/unique_by_key.h +0 -4
- cuda/cccl/headers/include/thrust/system/cuda/error.h +2 -11
- cuda/cccl/headers/include/thrust/system/cuda/memory.h +2 -6
- cuda/cccl/headers/include/thrust/system/cuda/memory_resource.h +2 -9
- cuda/cccl/headers/include/thrust/system/cuda/pointer.h +2 -7
- cuda/cccl/headers/include/thrust/system/cuda/vector.h +2 -6
- cuda/cccl/headers/include/thrust/system/detail/bad_alloc.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/errno.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/error_category.inl +0 -4
- cuda/cccl/headers/include/thrust/system/detail/error_code.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/error_condition.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/adjacent_difference.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/adjacent_difference.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/binary_search.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/binary_search.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/copy.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/copy.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/copy_if.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/copy_if.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/count.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/count.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/equal.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/equal.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/extrema.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/extrema.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/fill.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/find.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/find.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/for_each.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/gather.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/gather.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/generate.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/inner_product.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/inner_product.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/logical.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/memory.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/memory.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/merge.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/merge.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/mismatch.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/mismatch.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/partition.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/partition.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/per_device_resource.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/reduce.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/reduce.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/reduce_by_key.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/reduce_by_key.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/remove.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/remove.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/replace.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/replace.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/reverse.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/reverse.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/scalar/binary_search.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/scalar/binary_search.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/scan.h +26 -12
- cuda/cccl/headers/include/thrust/system/detail/generic/scan_by_key.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/scan_by_key.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/scatter.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/scatter.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/select_system.h +0 -1
- cuda/cccl/headers/include/thrust/system/detail/generic/set_operations.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/set_operations.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/shuffle.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/shuffle.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/sort.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/sort.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/swap_ranges.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/swap_ranges.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/tabulate.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/tabulate.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/tag.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/temporary_buffer.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/temporary_buffer.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/transform.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/transform_reduce.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/transform_reduce.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/transform_scan.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/transform_scan.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_copy.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_copy.inl +2 -4
- cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_fill.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_fill.inl +0 -3
- cuda/cccl/headers/include/thrust/system/detail/generic/unique.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/unique.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/unique_by_key.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/generic/unique_by_key.inl +0 -2
- cuda/cccl/headers/include/thrust/system/detail/internal/decompose.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/adjacent_difference.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/assign_value.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/binary_search.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/copy.h +76 -5
- cuda/cccl/headers/include/thrust/system/detail/sequential/copy_backward.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/copy_if.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/extrema.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/find.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/for_each.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/general_copy.h +0 -3
- cuda/cccl/headers/include/thrust/system/detail/sequential/get_value.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/insertion_sort.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/iter_swap.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/malloc_and_free.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/merge.h +78 -6
- cuda/cccl/headers/include/thrust/system/detail/sequential/partition.h +0 -4
- cuda/cccl/headers/include/thrust/system/detail/sequential/reduce.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/reduce_by_key.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/remove.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/scan.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/scan_by_key.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/set_operations.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/sort.h +67 -6
- cuda/cccl/headers/include/thrust/system/detail/sequential/stable_merge_sort.h +310 -11
- cuda/cccl/headers/include/thrust/system/detail/sequential/stable_primitive_sort.h +78 -5
- cuda/cccl/headers/include/thrust/system/detail/sequential/stable_radix_sort.h +543 -7
- cuda/cccl/headers/include/thrust/system/detail/sequential/trivial_copy.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/unique.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/sequential/unique_by_key.h +0 -2
- cuda/cccl/headers/include/thrust/system/detail/system_error.inl +0 -2
- cuda/cccl/headers/include/thrust/system/error_code.h +0 -4
- cuda/cccl/headers/include/thrust/system/omp/detail/adjacent_difference.h +5 -25
- cuda/cccl/headers/include/thrust/system/omp/detail/assign_value.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/binary_search.h +5 -25
- cuda/cccl/headers/include/thrust/system/omp/detail/copy.h +40 -29
- cuda/cccl/headers/include/thrust/system/omp/detail/copy_if.h +11 -28
- cuda/cccl/headers/include/thrust/system/omp/detail/count.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/default_decomposition.h +26 -28
- cuda/cccl/headers/include/thrust/system/omp/detail/equal.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/execution_policy.h +18 -13
- cuda/cccl/headers/include/thrust/system/omp/detail/extrema.h +5 -25
- cuda/cccl/headers/include/thrust/system/omp/detail/fill.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/find.h +5 -25
- cuda/cccl/headers/include/thrust/system/omp/detail/for_each.h +47 -30
- cuda/cccl/headers/include/thrust/system/omp/detail/gather.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/generate.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/get_value.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/inner_product.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/iter_swap.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/logical.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/malloc_and_free.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/merge.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/mismatch.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/partition.h +26 -31
- cuda/cccl/headers/include/thrust/system/omp/detail/per_device_resource.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/pragma_omp.h +2 -26
- cuda/cccl/headers/include/thrust/system/omp/detail/reduce.h +35 -27
- cuda/cccl/headers/include/thrust/system/omp/detail/reduce_by_key.h +13 -28
- cuda/cccl/headers/include/thrust/system/omp/detail/reduce_intervals.h +56 -28
- cuda/cccl/headers/include/thrust/system/omp/detail/remove.h +26 -31
- cuda/cccl/headers/include/thrust/system/omp/detail/replace.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/reverse.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/scan.h +176 -17
- cuda/cccl/headers/include/thrust/system/omp/detail/scan_by_key.h +8 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/scatter.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/sequence.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/set_operations.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/sort.h +213 -28
- cuda/cccl/headers/include/thrust/system/omp/detail/swap_ranges.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/tabulate.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/temporary_buffer.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/transform.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/transform_reduce.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/transform_scan.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/uninitialized_copy.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/uninitialized_fill.h +2 -15
- cuda/cccl/headers/include/thrust/system/omp/detail/unique.h +21 -30
- cuda/cccl/headers/include/thrust/system/omp/detail/unique_by_key.h +17 -29
- cuda/cccl/headers/include/thrust/system/omp/memory.h +51 -9
- cuda/cccl/headers/include/thrust/system/omp/memory_resource.h +3 -7
- cuda/cccl/headers/include/thrust/system/omp/pointer.h +3 -7
- cuda/cccl/headers/include/thrust/system/omp/vector.h +3 -6
- cuda/cccl/headers/include/thrust/system/system_error.h +0 -2
- cuda/cccl/headers/include/thrust/system/tbb/detail/adjacent_difference.h +4 -25
- cuda/cccl/headers/include/thrust/system/tbb/detail/assign_value.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/binary_search.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/copy.h +38 -29
- cuda/cccl/headers/include/thrust/system/tbb/detail/copy_if.h +91 -24
- cuda/cccl/headers/include/thrust/system/tbb/detail/count.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/equal.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/execution_policy.h +17 -13
- cuda/cccl/headers/include/thrust/system/tbb/detail/extrema.h +4 -25
- cuda/cccl/headers/include/thrust/system/tbb/detail/fill.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/find.h +4 -25
- cuda/cccl/headers/include/thrust/system/tbb/detail/for_each.h +47 -28
- cuda/cccl/headers/include/thrust/system/tbb/detail/gather.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/generate.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/get_value.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/inner_product.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/iter_swap.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/logical.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/malloc_and_free.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/merge.h +254 -29
- cuda/cccl/headers/include/thrust/system/tbb/detail/mismatch.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/partition.h +25 -31
- cuda/cccl/headers/include/thrust/system/tbb/detail/per_device_resource.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/reduce.h +95 -29
- cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_by_key.h +345 -28
- cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_intervals.h +4 -26
- cuda/cccl/headers/include/thrust/system/tbb/detail/remove.h +32 -42
- cuda/cccl/headers/include/thrust/system/tbb/detail/replace.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/reverse.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/scan.h +265 -30
- cuda/cccl/headers/include/thrust/system/tbb/detail/scan_by_key.h +7 -17
- cuda/cccl/headers/include/thrust/system/tbb/detail/scatter.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/sequence.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/set_operations.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/sort.h +244 -32
- cuda/cccl/headers/include/thrust/system/tbb/detail/swap_ranges.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/tabulate.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/temporary_buffer.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/transform.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/transform_reduce.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/transform_scan.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/uninitialized_copy.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/uninitialized_fill.h +2 -15
- cuda/cccl/headers/include/thrust/system/tbb/detail/unique.h +23 -33
- cuda/cccl/headers/include/thrust/system/tbb/detail/unique_by_key.h +16 -29
- cuda/cccl/headers/include/thrust/system/tbb/memory.h +52 -24
- cuda/cccl/headers/include/thrust/system/tbb/memory_resource.h +4 -22
- cuda/cccl/headers/include/thrust/system/tbb/pointer.h +4 -22
- cuda/cccl/headers/include/thrust/system/tbb/vector.h +4 -21
- cuda/cccl/headers/include/thrust/transform.h +14 -3
- cuda/cccl/headers/include/thrust/type_traits/integer_sequence.h +0 -4
- cuda/cccl/headers/include/thrust/type_traits/is_contiguous_iterator.h +0 -1
- cuda/cccl/headers/include/thrust/type_traits/is_operator_less_or_greater_function_object.h +0 -4
- cuda/cccl/headers/include/thrust/type_traits/is_operator_plus_function_object.h +0 -4
- cuda/cccl/headers/include/thrust/type_traits/is_trivially_relocatable.h +0 -4
- cuda/cccl/headers/include/thrust/universal_allocator.h +8 -0
- cuda/cccl/headers/include/thrust/universal_vector.h +9 -0
- cuda/cccl/headers/include/thrust/zip_function.h +2 -28
- cuda/compute/__init__.py +4 -0
- cuda/compute/_bindings.pyi +26 -3
- cuda/compute/_bindings_impl.pyx +143 -1
- cuda/compute/algorithms/__init__.py +9 -5
- cuda/compute/algorithms/_sort/__init__.py +23 -0
- cuda/compute/algorithms/{_merge_sort.py → _sort/_merge_sort.py} +10 -10
- cuda/compute/algorithms/{_radix_sort.py → _sort/_radix_sort.py} +9 -58
- cuda/compute/algorithms/_sort/_segmented_sort.py +288 -0
- cuda/compute/algorithms/_sort/_sort_common.py +52 -0
- cuda/compute/cu12/_bindings_impl.cpython-313-aarch64-linux-gnu.so +0 -0
- cuda/compute/cu12/cccl/libcccl.c.parallel.so +0 -0
- cuda/compute/cu13/_bindings_impl.cpython-313-aarch64-linux-gnu.so +0 -0
- cuda/compute/cu13/cccl/libcccl.c.parallel.so +0 -0
- cuda_cccl-0.3.4.dist-info/METADATA +78 -0
- {cuda_cccl-0.3.2.dist-info → cuda_cccl-0.3.4.dist-info}/RECORD +830 -867
- cuda/cccl/headers/include/cuda/__memory_resource/resource_ref.h +0 -652
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/tuple +0 -1365
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/variant +0 -2144
- cuda/cccl/headers/include/thrust/detail/integer_math.h +0 -113
- cuda/cccl/headers/include/thrust/system/detail/adl/adjacent_difference.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/assign_value.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/binary_search.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/copy.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/copy_if.h +0 -52
- cuda/cccl/headers/include/thrust/system/detail/adl/count.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/equal.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/extrema.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/fill.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/find.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/for_each.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/gather.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/generate.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/get_value.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/inner_product.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/iter_swap.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/logical.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/malloc_and_free.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/merge.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/mismatch.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/partition.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/per_device_resource.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/reduce.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/reduce_by_key.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/remove.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/replace.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/reverse.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/scan.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/scan_by_key.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/scatter.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/sequence.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/set_operations.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/sort.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/swap_ranges.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/tabulate.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/temporary_buffer.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/transform.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/transform_reduce.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/transform_scan.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/uninitialized_copy.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/uninitialized_fill.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/unique.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/adl/unique_by_key.h +0 -51
- cuda/cccl/headers/include/thrust/system/detail/generic/scan.inl +0 -85
- cuda/cccl/headers/include/thrust/system/detail/sequential/copy.inl +0 -119
- cuda/cccl/headers/include/thrust/system/detail/sequential/merge.inl +0 -145
- cuda/cccl/headers/include/thrust/system/detail/sequential/sort.inl +0 -116
- cuda/cccl/headers/include/thrust/system/detail/sequential/stable_merge_sort.inl +0 -356
- cuda/cccl/headers/include/thrust/system/detail/sequential/stable_primitive_sort.inl +0 -124
- cuda/cccl/headers/include/thrust/system/detail/sequential/stable_radix_sort.inl +0 -586
- cuda/cccl/headers/include/thrust/system/omp/detail/copy.inl +0 -74
- cuda/cccl/headers/include/thrust/system/omp/detail/copy_if.inl +0 -59
- cuda/cccl/headers/include/thrust/system/omp/detail/default_decomposition.inl +0 -65
- cuda/cccl/headers/include/thrust/system/omp/detail/for_each.inl +0 -87
- cuda/cccl/headers/include/thrust/system/omp/detail/memory.inl +0 -93
- cuda/cccl/headers/include/thrust/system/omp/detail/partition.inl +0 -102
- cuda/cccl/headers/include/thrust/system/omp/detail/reduce.inl +0 -78
- cuda/cccl/headers/include/thrust/system/omp/detail/reduce_by_key.inl +0 -65
- cuda/cccl/headers/include/thrust/system/omp/detail/reduce_intervals.inl +0 -103
- cuda/cccl/headers/include/thrust/system/omp/detail/remove.inl +0 -87
- cuda/cccl/headers/include/thrust/system/omp/detail/sort.inl +0 -265
- cuda/cccl/headers/include/thrust/system/omp/detail/unique.inl +0 -71
- cuda/cccl/headers/include/thrust/system/omp/detail/unique_by_key.inl +0 -75
- cuda/cccl/headers/include/thrust/system/tbb/detail/copy.inl +0 -73
- cuda/cccl/headers/include/thrust/system/tbb/detail/copy_if.inl +0 -136
- cuda/cccl/headers/include/thrust/system/tbb/detail/for_each.inl +0 -91
- cuda/cccl/headers/include/thrust/system/tbb/detail/memory.inl +0 -94
- cuda/cccl/headers/include/thrust/system/tbb/detail/merge.inl +0 -327
- cuda/cccl/headers/include/thrust/system/tbb/detail/partition.inl +0 -98
- cuda/cccl/headers/include/thrust/system/tbb/detail/reduce.inl +0 -137
- cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_by_key.inl +0 -400
- cuda/cccl/headers/include/thrust/system/tbb/detail/remove.inl +0 -87
- cuda/cccl/headers/include/thrust/system/tbb/detail/scan.inl +0 -312
- cuda/cccl/headers/include/thrust/system/tbb/detail/sort.inl +0 -295
- cuda/cccl/headers/include/thrust/system/tbb/detail/unique.inl +0 -71
- cuda/cccl/headers/include/thrust/system/tbb/detail/unique_by_key.inl +0 -75
- cuda_cccl-0.3.2.dist-info/METADATA +0 -42
- {cuda_cccl-0.3.2.dist-info → cuda_cccl-0.3.4.dist-info}/WHEEL +0 -0
- {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
|