cuda-cccl 0.3.0__cp312-cp312-manylinux_2_24_aarch64.whl → 0.3.2__cp312-cp312-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/cooperative/__init__.py +7 -1
- cuda/cccl/cooperative/experimental/__init__.py +21 -5
- cuda/cccl/headers/include/cub/agent/agent_adjacent_difference.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_batch_memcpy.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_for.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_histogram.cuh +354 -572
- cuda/cccl/headers/include/cub/agent/agent_merge.cuh +23 -21
- cuda/cccl/headers/include/cub/agent/agent_merge_sort.cuh +21 -3
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_downsweep.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_histogram.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_onesweep.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_radix_sort_upsweep.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_rle.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_scan.cuh +5 -1
- cuda/cccl/headers/include/cub/agent/agent_scan_by_key.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_segmented_radix_sort.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_select_if.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_sub_warp_merge_sort.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_three_way_partition.cuh +2 -5
- cuda/cccl/headers/include/cub/agent/agent_unique_by_key.cuh +22 -5
- cuda/cccl/headers/include/cub/block/block_adjacent_difference.cuh +6 -8
- cuda/cccl/headers/include/cub/block/block_discontinuity.cuh +24 -14
- cuda/cccl/headers/include/cub/block/block_exchange.cuh +5 -0
- cuda/cccl/headers/include/cub/block/block_histogram.cuh +4 -0
- cuda/cccl/headers/include/cub/block/block_load.cuh +4 -0
- cuda/cccl/headers/include/cub/block/block_radix_rank.cuh +4 -2
- cuda/cccl/headers/include/cub/block/block_radix_sort.cuh +4 -2
- cuda/cccl/headers/include/cub/block/block_reduce.cuh +1 -0
- cuda/cccl/headers/include/cub/block/block_scan.cuh +12 -2
- cuda/cccl/headers/include/cub/block/block_store.cuh +3 -2
- cuda/cccl/headers/include/cub/detail/device_memory_resource.cuh +1 -0
- cuda/cccl/headers/include/cub/detail/mdspan_utils.cuh +34 -30
- cuda/cccl/headers/include/cub/detail/ptx-json-parser.h +1 -1
- cuda/cccl/headers/include/cub/device/device_for.cuh +118 -40
- cuda/cccl/headers/include/cub/device/device_reduce.cuh +6 -7
- cuda/cccl/headers/include/cub/device/device_segmented_reduce.cuh +170 -260
- cuda/cccl/headers/include/cub/device/device_transform.cuh +122 -91
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_merge.cuh +6 -7
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_radix_sort.cuh +2 -11
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce.cuh +12 -29
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_deterministic.cuh +2 -7
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_nondeterministic.cuh +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_segmented_sort.cuh +2 -3
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce.cuh +4 -5
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce_by_key.cuh +0 -1
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_topk.cuh +3 -5
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_transform.cuh +13 -5
- cuda/cccl/headers/include/cub/device/dispatch/kernels/for_each.cuh +72 -37
- cuda/cccl/headers/include/cub/device/dispatch/kernels/reduce.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/kernels/scan.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/kernels/segmented_reduce.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/kernels/transform.cuh +22 -27
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_adjacent_difference.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_batch_memcpy.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_for.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_histogram.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge_sort.cuh +8 -0
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_radix_sort.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce_by_key.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_run_length_encode.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan_by_key.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_segmented_sort.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_three_way_partition.cuh +2 -5
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_transform.cuh +61 -70
- cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_unique_by_key.cuh +10 -0
- cuda/cccl/headers/include/cub/thread/thread_reduce.cuh +24 -17
- cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_shfl.cuh +3 -2
- cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_smem.cuh +3 -2
- cuda/cccl/headers/include/cub/warp/specializations/warp_scan_shfl.cuh +2 -2
- cuda/cccl/headers/include/cub/warp/warp_load.cuh +6 -6
- cuda/cccl/headers/include/cub/warp/warp_reduce.cuh +7 -2
- cuda/cccl/headers/include/cub/warp/warp_scan.cuh +7 -3
- cuda/cccl/headers/include/cub/warp/warp_store.cuh +1 -0
- cuda/cccl/headers/include/cuda/__algorithm/common.h +1 -1
- cuda/cccl/headers/include/cuda/__algorithm/copy.h +1 -1
- cuda/cccl/headers/include/cuda/__algorithm/fill.h +1 -1
- cuda/cccl/headers/include/cuda/__barrier/barrier_block_scope.h +19 -0
- cuda/cccl/headers/include/cuda/__cccl_config +1 -0
- cuda/cccl/headers/include/cuda/__cmath/fast_modulo_division.h +3 -74
- cuda/cccl/headers/include/cuda/__cmath/mul_hi.h +146 -0
- cuda/cccl/headers/include/cuda/__complex/get_real_imag.h +0 -4
- cuda/cccl/headers/include/cuda/__device/all_devices.h +46 -143
- cuda/cccl/headers/include/cuda/__device/arch_id.h +176 -0
- cuda/cccl/headers/include/cuda/__device/arch_traits.h +247 -323
- cuda/cccl/headers/include/cuda/__device/attributes.h +174 -123
- cuda/cccl/headers/include/cuda/__device/compute_capability.h +171 -0
- cuda/cccl/headers/include/cuda/__device/device_ref.h +27 -49
- cuda/cccl/headers/include/cuda/__device/physical_device.h +100 -96
- cuda/cccl/headers/include/cuda/__driver/driver_api.h +105 -3
- cuda/cccl/headers/include/cuda/__event/event.h +27 -26
- cuda/cccl/headers/include/cuda/__event/event_ref.h +5 -5
- cuda/cccl/headers/include/cuda/__event/timed_event.h +10 -7
- cuda/cccl/headers/include/cuda/__fwd/devices.h +44 -0
- cuda/cccl/headers/include/cuda/__fwd/zip_iterator.h +9 -0
- cuda/cccl/headers/include/cuda/__iterator/constant_iterator.h +46 -31
- cuda/cccl/headers/include/cuda/__iterator/strided_iterator.h +79 -47
- cuda/cccl/headers/include/cuda/__iterator/tabulate_output_iterator.h +59 -36
- cuda/cccl/headers/include/cuda/__iterator/transform_input_output_iterator.h +79 -49
- cuda/cccl/headers/include/cuda/__iterator/transform_iterator.h +74 -48
- cuda/cccl/headers/include/cuda/__iterator/transform_output_iterator.h +80 -55
- cuda/cccl/headers/include/cuda/__iterator/zip_common.h +148 -0
- cuda/cccl/headers/include/cuda/__iterator/zip_iterator.h +21 -137
- cuda/cccl/headers/include/cuda/__iterator/zip_transform_iterator.h +592 -0
- cuda/cccl/headers/include/cuda/__mdspan/host_device_accessor.h +127 -60
- cuda/cccl/headers/include/cuda/__mdspan/host_device_mdspan.h +178 -3
- cuda/cccl/headers/include/cuda/__mdspan/restrict_accessor.h +38 -8
- cuda/cccl/headers/include/cuda/__mdspan/restrict_mdspan.h +67 -1
- cuda/cccl/headers/include/cuda/__memory/ptr_in_range.h +93 -0
- cuda/cccl/headers/include/cuda/__memory_resource/get_memory_resource.h +4 -4
- cuda/cccl/headers/include/cuda/__memory_resource/properties.h +44 -0
- cuda/cccl/headers/include/cuda/__memory_resource/resource.h +1 -1
- cuda/cccl/headers/include/cuda/__memory_resource/resource_ref.h +4 -6
- cuda/cccl/headers/include/cuda/__nvtx/nvtx3.h +2 -1
- cuda/cccl/headers/include/cuda/__runtime/ensure_current_context.h +9 -7
- cuda/cccl/headers/include/cuda/__stream/stream.h +8 -8
- cuda/cccl/headers/include/cuda/__stream/stream_ref.h +18 -16
- cuda/cccl/headers/include/cuda/__utility/basic_any.h +1 -1
- cuda/cccl/headers/include/cuda/__utility/in_range.h +65 -0
- cuda/cccl/headers/include/cuda/algorithm +1 -1
- cuda/cccl/headers/include/cuda/cmath +1 -0
- cuda/cccl/headers/include/cuda/devices +13 -0
- cuda/cccl/headers/include/cuda/iterator +1 -0
- cuda/cccl/headers/include/cuda/memory +1 -0
- cuda/cccl/headers/include/cuda/std/__algorithm/equal_range.h +2 -2
- cuda/cccl/headers/include/cuda/std/__algorithm/find.h +1 -1
- cuda/cccl/headers/include/cuda/std/__algorithm/includes.h +2 -4
- cuda/cccl/headers/include/cuda/std/__algorithm/lower_bound.h +1 -1
- cuda/cccl/headers/include/cuda/std/__algorithm/make_projected.h +7 -15
- cuda/cccl/headers/include/cuda/std/__algorithm/min_element.h +1 -1
- cuda/cccl/headers/include/cuda/std/__algorithm/minmax_element.h +1 -2
- cuda/cccl/headers/include/cuda/std/__algorithm/partial_sort_copy.h +2 -2
- cuda/cccl/headers/include/cuda/std/__algorithm/upper_bound.h +1 -1
- cuda/cccl/headers/include/cuda/std/__bit/countl.h +8 -1
- cuda/cccl/headers/include/cuda/std/__bit/countr.h +2 -2
- cuda/cccl/headers/include/cuda/std/__bit/reference.h +11 -11
- cuda/cccl/headers/include/cuda/std/__cccl/algorithm_wrapper.h +36 -0
- cuda/cccl/headers/include/cuda/std/__cccl/builtin.h +46 -49
- cuda/cccl/headers/include/cuda/std/__cccl/execution_space.h +6 -0
- cuda/cccl/headers/include/cuda/std/__cccl/host_std_lib.h +52 -0
- cuda/cccl/headers/include/cuda/std/__cccl/memory_wrapper.h +36 -0
- cuda/cccl/headers/include/cuda/std/__cccl/numeric_wrapper.h +36 -0
- cuda/cccl/headers/include/cuda/std/__chrono/duration.h +16 -16
- cuda/cccl/headers/include/cuda/std/__chrono/steady_clock.h +5 -5
- cuda/cccl/headers/include/cuda/std/__chrono/system_clock.h +5 -5
- cuda/cccl/headers/include/cuda/std/__cmath/isnan.h +3 -2
- cuda/cccl/headers/include/cuda/std/__complex/complex.h +3 -2
- cuda/cccl/headers/include/cuda/std/__complex/literals.h +14 -34
- cuda/cccl/headers/include/cuda/std/__complex/nvbf16.h +2 -1
- cuda/cccl/headers/include/cuda/std/__complex/nvfp16.h +4 -3
- cuda/cccl/headers/include/cuda/std/__concepts/invocable.h +2 -2
- cuda/cccl/headers/include/cuda/std/__cstdlib/malloc.h +3 -2
- cuda/cccl/headers/include/cuda/std/__floating_point/fp.h +1 -1
- cuda/cccl/headers/include/cuda/std/__functional/bind.h +10 -13
- cuda/cccl/headers/include/cuda/std/__functional/function.h +5 -8
- cuda/cccl/headers/include/cuda/std/__functional/invoke.h +71 -335
- cuda/cccl/headers/include/cuda/std/__functional/mem_fn.h +1 -2
- cuda/cccl/headers/include/cuda/std/__functional/reference_wrapper.h +3 -3
- cuda/cccl/headers/include/cuda/std/__functional/weak_result_type.h +0 -6
- cuda/cccl/headers/include/cuda/std/__fwd/allocator.h +13 -0
- cuda/cccl/headers/include/cuda/std/__fwd/char_traits.h +13 -0
- cuda/cccl/headers/include/cuda/std/__fwd/complex.h +13 -4
- cuda/cccl/headers/include/cuda/std/__fwd/mdspan.h +23 -0
- cuda/cccl/headers/include/cuda/std/__fwd/pair.h +13 -0
- cuda/cccl/headers/include/cuda/std/__fwd/string.h +22 -0
- cuda/cccl/headers/include/cuda/std/__fwd/string_view.h +14 -0
- cuda/cccl/headers/include/cuda/std/__internal/features.h +0 -5
- cuda/cccl/headers/include/cuda/std/__internal/namespaces.h +21 -0
- cuda/cccl/headers/include/cuda/std/__iterator/iterator_traits.h +5 -5
- cuda/cccl/headers/include/cuda/std/__mdspan/extents.h +7 -1
- cuda/cccl/headers/include/cuda/std/__mdspan/mdspan.h +53 -39
- cuda/cccl/headers/include/cuda/std/__memory/allocator.h +3 -3
- cuda/cccl/headers/include/cuda/std/__memory/construct_at.h +1 -3
- cuda/cccl/headers/include/cuda/std/__optional/optional_base.h +1 -0
- cuda/cccl/headers/include/cuda/std/__ranges/compressed_movable_box.h +892 -0
- cuda/cccl/headers/include/cuda/std/__ranges/movable_box.h +2 -2
- cuda/cccl/headers/include/cuda/std/__tuple_dir/make_tuple_types.h +23 -1
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_like.h +4 -0
- cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_like_ext.h +4 -0
- cuda/cccl/headers/include/cuda/std/__type_traits/is_primary_template.h +7 -5
- cuda/cccl/headers/include/cuda/std/__type_traits/result_of.h +1 -1
- cuda/cccl/headers/include/cuda/std/__utility/pair.h +0 -5
- cuda/cccl/headers/include/cuda/std/bitset +1 -1
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/__config +15 -12
- cuda/cccl/headers/include/cuda/std/detail/libcxx/include/variant +11 -9
- cuda/cccl/headers/include/cuda/std/inplace_vector +4 -4
- cuda/cccl/headers/include/cuda/std/numbers +5 -0
- cuda/cccl/headers/include/cuda/std/string_view +155 -13
- cuda/cccl/headers/include/cuda/std/version +1 -4
- cuda/cccl/headers/include/cuda/stream_ref +5 -0
- cuda/cccl/headers/include/cuda/utility +1 -0
- cuda/cccl/headers/include/nv/target +7 -2
- cuda/cccl/headers/include/thrust/allocate_unique.h +1 -1
- cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.h +309 -33
- cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.h +151 -4
- cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.h +60 -3
- cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.h +45 -3
- cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.h +31 -6
- cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.h +29 -16
- cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.h +41 -4
- cuda/cccl/headers/include/thrust/detail/allocator/value_initialize_range.h +42 -4
- cuda/cccl/headers/include/thrust/detail/complex/ccosh.h +3 -3
- cuda/cccl/headers/include/thrust/detail/integer_math.h +3 -20
- cuda/cccl/headers/include/thrust/detail/internal_functional.h +1 -1
- cuda/cccl/headers/include/thrust/detail/memory_algorithms.h +1 -1
- cuda/cccl/headers/include/thrust/detail/temporary_array.h +1 -1
- cuda/cccl/headers/include/thrust/detail/type_traits.h +1 -1
- cuda/cccl/headers/include/thrust/device_delete.h +18 -3
- cuda/cccl/headers/include/thrust/device_free.h +16 -3
- cuda/cccl/headers/include/thrust/device_new.h +29 -8
- cuda/cccl/headers/include/thrust/host_vector.h +1 -1
- cuda/cccl/headers/include/thrust/iterator/iterator_traits.h +11 -0
- cuda/cccl/headers/include/thrust/iterator/tabulate_output_iterator.h +5 -2
- cuda/cccl/headers/include/thrust/mr/disjoint_pool.h +1 -1
- cuda/cccl/headers/include/thrust/mr/pool.h +1 -1
- cuda/cccl/headers/include/thrust/system/cuda/detail/copy.h +33 -0
- cuda/cccl/headers/include/thrust/system/cuda/detail/find.h +13 -115
- cuda/cccl/headers/include/thrust/system/cuda/detail/mismatch.h +8 -2
- cuda/cccl/headers/include/thrust/type_traits/is_contiguous_iterator.h +7 -7
- cuda/cccl/parallel/experimental/__init__.py +21 -74
- cuda/compute/__init__.py +79 -0
- cuda/{cccl/parallel/experimental → compute}/_bindings.pyi +43 -1
- cuda/{cccl/parallel/experimental → compute}/_bindings_impl.pyx +157 -8
- cuda/{cccl/parallel/experimental → compute}/algorithms/_histogram.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/algorithms/_merge_sort.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/algorithms/_radix_sort.py +3 -3
- cuda/{cccl/parallel/experimental → compute}/algorithms/_reduce.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/algorithms/_scan.py +112 -40
- cuda/{cccl/parallel/experimental → compute}/algorithms/_segmented_reduce.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/algorithms/_three_way_partition.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/algorithms/_transform.py +36 -15
- cuda/{cccl/parallel/experimental → compute}/algorithms/_unique_by_key.py +2 -2
- cuda/compute/cu12/_bindings_impl.cpython-312-aarch64-linux-gnu.so +0 -0
- cuda/{cccl/parallel/experimental → compute}/cu12/cccl/libcccl.c.parallel.so +0 -0
- cuda/compute/cu13/_bindings_impl.cpython-312-aarch64-linux-gnu.so +0 -0
- cuda/{cccl/parallel/experimental → compute}/cu13/cccl/libcccl.c.parallel.so +0 -0
- cuda/{cccl/parallel/experimental → compute}/iterators/__init__.py +2 -0
- cuda/{cccl/parallel/experimental → compute}/iterators/_factories.py +36 -8
- cuda/{cccl/parallel/experimental → compute}/iterators/_iterators.py +206 -1
- cuda/{cccl/parallel/experimental → compute}/numba_utils.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/struct.py +2 -2
- cuda/{cccl/parallel/experimental → compute}/typing.py +2 -0
- cuda/coop/__init__.py +8 -0
- cuda/{cccl/cooperative/experimental → coop}/_nvrtc.py +3 -2
- cuda/{cccl/cooperative/experimental → coop}/_scan_op.py +3 -3
- cuda/{cccl/cooperative/experimental → coop}/_types.py +2 -2
- cuda/{cccl/cooperative/experimental → coop}/_typing.py +1 -1
- cuda/{cccl/cooperative/experimental → coop}/block/__init__.py +6 -6
- cuda/{cccl/cooperative/experimental → coop}/block/_block_exchange.py +4 -4
- cuda/{cccl/cooperative/experimental → coop}/block/_block_load_store.py +6 -6
- cuda/{cccl/cooperative/experimental → coop}/block/_block_merge_sort.py +4 -4
- cuda/{cccl/cooperative/experimental → coop}/block/_block_radix_sort.py +6 -6
- cuda/{cccl/cooperative/experimental → coop}/block/_block_reduce.py +6 -6
- cuda/{cccl/cooperative/experimental → coop}/block/_block_scan.py +7 -7
- cuda/coop/warp/__init__.py +9 -0
- cuda/{cccl/cooperative/experimental → coop}/warp/_warp_merge_sort.py +3 -3
- cuda/{cccl/cooperative/experimental → coop}/warp/_warp_reduce.py +6 -6
- cuda/{cccl/cooperative/experimental → coop}/warp/_warp_scan.py +4 -4
- {cuda_cccl-0.3.0.dist-info → cuda_cccl-0.3.2.dist-info}/METADATA +1 -1
- {cuda_cccl-0.3.0.dist-info → cuda_cccl-0.3.2.dist-info}/RECORD +275 -276
- cuda/cccl/cooperative/experimental/warp/__init__.py +0 -9
- cuda/cccl/headers/include/cub/device/dispatch/dispatch_advance_iterators.cuh +0 -111
- cuda/cccl/headers/include/thrust/detail/algorithm_wrapper.h +0 -37
- cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.inl +0 -371
- cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.inl +0 -242
- cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.inl +0 -137
- cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.inl +0 -99
- cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.inl +0 -68
- cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.inl +0 -86
- cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.inl +0 -79
- cuda/cccl/headers/include/thrust/detail/allocator/value_initialize_range.inl +0 -98
- cuda/cccl/headers/include/thrust/detail/device_delete.inl +0 -52
- cuda/cccl/headers/include/thrust/detail/device_free.inl +0 -47
- cuda/cccl/headers/include/thrust/detail/device_new.inl +0 -61
- cuda/cccl/headers/include/thrust/detail/memory_wrapper.h +0 -40
- cuda/cccl/headers/include/thrust/detail/numeric_wrapper.h +0 -37
- cuda/cccl/parallel/experimental/.gitignore +0 -4
- cuda/cccl/parallel/experimental/cu12/_bindings_impl.cpython-312-aarch64-linux-gnu.so +0 -0
- cuda/cccl/parallel/experimental/cu13/_bindings_impl.cpython-312-aarch64-linux-gnu.so +0 -0
- /cuda/{cccl/parallel/experimental → compute}/_bindings.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/_caching.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/_cccl_interop.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/_utils/__init__.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/_utils/protocols.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/_utils/temp_storage_buffer.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/algorithms/__init__.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/cccl/.gitkeep +0 -0
- /cuda/{cccl/parallel/experimental → compute}/iterators/_zip_iterator.py +0 -0
- /cuda/{cccl/parallel/experimental → compute}/op.py +0 -0
- /cuda/{cccl/cooperative/experimental → coop}/_caching.py +0 -0
- /cuda/{cccl/cooperative/experimental → coop}/_common.py +0 -0
- {cuda_cccl-0.3.0.dist-info → cuda_cccl-0.3.2.dist-info}/WHEEL +0 -0
- {cuda_cccl-0.3.0.dist-info → cuda_cccl-0.3.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
|
|
2
|
-
#
|
|
3
|
-
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
4
|
-
|
|
5
|
-
from cuda.cccl.cooperative.experimental.warp._warp_merge_sort import merge_sort_keys
|
|
6
|
-
from cuda.cccl.cooperative.experimental.warp._warp_reduce import reduce, sum
|
|
7
|
-
from cuda.cccl.cooperative.experimental.warp._warp_scan import exclusive_sum
|
|
8
|
-
|
|
9
|
-
__all__ = ["exclusive_sum", "reduce", "sum", "merge_sort_keys"]
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
// SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
3
|
-
|
|
4
|
-
#pragma once
|
|
5
|
-
|
|
6
|
-
#include <cub/config.cuh>
|
|
7
|
-
|
|
8
|
-
#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
|
|
9
|
-
# pragma GCC system_header
|
|
10
|
-
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
|
|
11
|
-
# pragma clang system_header
|
|
12
|
-
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
|
|
13
|
-
# pragma system_header
|
|
14
|
-
#endif // no system header
|
|
15
|
-
|
|
16
|
-
#include <cuda/std/__type_traits/integral_constant.h>
|
|
17
|
-
#include <cuda/std/__type_traits/void_t.h>
|
|
18
|
-
#include <cuda/std/__utility/declval.h>
|
|
19
|
-
|
|
20
|
-
CUB_NAMESPACE_BEGIN
|
|
21
|
-
|
|
22
|
-
namespace detail
|
|
23
|
-
{
|
|
24
|
-
template <typename T, typename U, typename = void>
|
|
25
|
-
struct has_plus_operator : ::cuda::std::false_type
|
|
26
|
-
{};
|
|
27
|
-
|
|
28
|
-
template <typename T, typename U>
|
|
29
|
-
struct has_plus_operator<T, U, ::cuda::std::void_t<decltype(::cuda::std::declval<T>() + ::cuda::std::declval<U>())>>
|
|
30
|
-
: ::cuda::std::true_type
|
|
31
|
-
{};
|
|
32
|
-
|
|
33
|
-
template <typename T, typename U>
|
|
34
|
-
constexpr bool has_plus_operator_v = has_plus_operator<T, U>::value;
|
|
35
|
-
|
|
36
|
-
// Helper function that advances a given iterator only if it supports being advanced by the given offset
|
|
37
|
-
template <typename IteratorT, typename OffsetT>
|
|
38
|
-
CUB_RUNTIME_FUNCTION _CCCL_VISIBILITY_HIDDEN _CCCL_FORCEINLINE IteratorT
|
|
39
|
-
advance_iterators_if_supported(IteratorT iter, [[maybe_unused]] OffsetT offset)
|
|
40
|
-
{
|
|
41
|
-
if constexpr (has_plus_operator_v<IteratorT, OffsetT>)
|
|
42
|
-
{
|
|
43
|
-
// If operator+ is valid, advance the iterator.
|
|
44
|
-
return iter + offset;
|
|
45
|
-
}
|
|
46
|
-
else
|
|
47
|
-
{
|
|
48
|
-
// Otherwise, return iter unmodified.
|
|
49
|
-
return iter;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
template <typename T, typename U, typename = void>
|
|
54
|
-
struct has_add_assign_operator : ::cuda::std::false_type
|
|
55
|
-
{};
|
|
56
|
-
|
|
57
|
-
template <typename T, typename U>
|
|
58
|
-
struct has_add_assign_operator<T,
|
|
59
|
-
U,
|
|
60
|
-
::cuda::std::void_t<decltype(::cuda::std::declval<T&>() += ::cuda::std::declval<U>())>>
|
|
61
|
-
: ::cuda::std::true_type
|
|
62
|
-
{};
|
|
63
|
-
|
|
64
|
-
template <typename T, typename U>
|
|
65
|
-
constexpr bool has_add_assign_operator_v = has_add_assign_operator<T, U>::value;
|
|
66
|
-
|
|
67
|
-
// Helper function that advances a given iterator only if it supports being advanced by the given offset
|
|
68
|
-
template <typename IteratorT, typename OffsetT>
|
|
69
|
-
CUB_RUNTIME_FUNCTION _CCCL_VISIBILITY_HIDDEN _CCCL_FORCEINLINE void
|
|
70
|
-
advance_iterators_inplace_if_supported(IteratorT& iter, [[maybe_unused]] OffsetT offset)
|
|
71
|
-
{
|
|
72
|
-
if constexpr (has_add_assign_operator_v<IteratorT, OffsetT>)
|
|
73
|
-
{
|
|
74
|
-
// If operator+ is valid, advance the iterator.
|
|
75
|
-
iter += offset;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Helper function that checks whether all of the given iterators support the + operator with the given offset
|
|
80
|
-
template <typename OffsetT, typename... Iterators>
|
|
81
|
-
CUB_RUNTIME_FUNCTION _CCCL_VISIBILITY_HIDDEN _CCCL_FORCEINLINE bool
|
|
82
|
-
all_iterators_support_plus_operator(OffsetT /*offset*/, Iterators... /*iters*/)
|
|
83
|
-
{
|
|
84
|
-
if constexpr ((has_plus_operator_v<Iterators, OffsetT> && ...))
|
|
85
|
-
{
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
else
|
|
89
|
-
{
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Helper function that checks whether all of the given iterators support the + operator with the given offset
|
|
95
|
-
template <typename OffsetT, typename... Iterators>
|
|
96
|
-
CUB_RUNTIME_FUNCTION _CCCL_VISIBILITY_HIDDEN _CCCL_FORCEINLINE bool
|
|
97
|
-
all_iterators_support_add_assign_operator(OffsetT /*offset*/, Iterators... /*iters*/)
|
|
98
|
-
{
|
|
99
|
-
if constexpr ((has_add_assign_operator_v<Iterators, OffsetT> && ...))
|
|
100
|
-
{
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
else
|
|
104
|
-
{
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
} // namespace detail
|
|
110
|
-
|
|
111
|
-
CUB_NAMESPACE_END
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 NVIDIA Corporation
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
#pragma once
|
|
18
|
-
|
|
19
|
-
#include <thrust/detail/config.h>
|
|
20
|
-
|
|
21
|
-
#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
|
|
22
|
-
# pragma GCC system_header
|
|
23
|
-
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
|
|
24
|
-
# pragma clang system_header
|
|
25
|
-
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
|
|
26
|
-
# pragma system_header
|
|
27
|
-
#endif // no system header
|
|
28
|
-
|
|
29
|
-
// When a compiler uses Thrust as part of its implementation of Standard C++
|
|
30
|
-
// algorithms, a cycle of included files may result when Thrust code tries to
|
|
31
|
-
// use a standard algorithm. Having a macro that is defined only when Thrust
|
|
32
|
-
// is including an algorithms-related header gives the compiler a chance to
|
|
33
|
-
// detect and break the cycle of includes.
|
|
34
|
-
|
|
35
|
-
#define THRUST_INCLUDING_ALGORITHMS_HEADER
|
|
36
|
-
#include <algorithm>
|
|
37
|
-
#undef THRUST_INCLUDING_ALGORITHMS_HEADER
|
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2008-2018 NVIDIA Corporation
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
#pragma once
|
|
18
|
-
|
|
19
|
-
#include <thrust/detail/config.h>
|
|
20
|
-
|
|
21
|
-
#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
|
|
22
|
-
# pragma GCC system_header
|
|
23
|
-
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
|
|
24
|
-
# pragma clang system_header
|
|
25
|
-
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
|
|
26
|
-
# pragma system_header
|
|
27
|
-
#endif // no system header
|
|
28
|
-
#include <thrust/detail/allocator/allocator_traits.h>
|
|
29
|
-
#include <thrust/detail/memory_wrapper.h>
|
|
30
|
-
#include <thrust/detail/type_deduction.h>
|
|
31
|
-
#include <thrust/detail/type_traits/is_call_possible.h>
|
|
32
|
-
|
|
33
|
-
#include <cuda/std/limits>
|
|
34
|
-
|
|
35
|
-
#include <new>
|
|
36
|
-
|
|
37
|
-
THRUST_NAMESPACE_BEGIN
|
|
38
|
-
namespace detail
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
// std::allocator's member functions are deprecated in C++17 and removed in
|
|
42
|
-
// C++20, so we can't just use the generic implementation for allocator_traits
|
|
43
|
-
// that calls the allocator's member functions.
|
|
44
|
-
// Instead, specialize allocator_traits for std::allocator and defer to
|
|
45
|
-
// std::allocator_traits<std::allocator> and let the STL do whatever it needs
|
|
46
|
-
// to for the current c++ version. Manually forward the calls to suppress
|
|
47
|
-
// host/device warnings.
|
|
48
|
-
template <typename T>
|
|
49
|
-
struct allocator_traits<std::allocator<T>> : public std::allocator_traits<std::allocator<T>>
|
|
50
|
-
{
|
|
51
|
-
private:
|
|
52
|
-
using superclass = std::allocator_traits<std::allocator<T>>;
|
|
53
|
-
|
|
54
|
-
public:
|
|
55
|
-
using allocator_type = typename superclass::allocator_type;
|
|
56
|
-
using value_type = typename superclass::value_type;
|
|
57
|
-
using pointer = typename superclass::pointer;
|
|
58
|
-
using const_pointer = typename superclass::const_pointer;
|
|
59
|
-
using void_pointer = typename superclass::void_pointer;
|
|
60
|
-
using const_void_pointer = typename superclass::const_void_pointer;
|
|
61
|
-
using difference_type = typename superclass::difference_type;
|
|
62
|
-
using size_type = typename superclass::size_type;
|
|
63
|
-
using propagate_on_container_swap = typename superclass::propagate_on_container_swap;
|
|
64
|
-
using propagate_on_container_copy_assignment = typename superclass::propagate_on_container_copy_assignment;
|
|
65
|
-
using propagate_on_container_move_assignment = typename superclass::propagate_on_container_move_assignment;
|
|
66
|
-
|
|
67
|
-
// std::allocator_traits added this in C++17, but thrust::allocator_traits defines
|
|
68
|
-
// it unconditionally.
|
|
69
|
-
using is_always_equal =
|
|
70
|
-
typename eval_if<allocator_traits_detail::has_is_always_equal<allocator_type>::value,
|
|
71
|
-
allocator_traits_detail::nested_is_always_equal<allocator_type>,
|
|
72
|
-
::cuda::std::is_empty<allocator_type>>::type;
|
|
73
|
-
|
|
74
|
-
// std::allocator_traits doesn't provide these, but
|
|
75
|
-
// thrust::detail::allocator_traits does. These used to be part of the
|
|
76
|
-
// std::allocator API but were deprecated in C++17.
|
|
77
|
-
using reference = typename thrust::detail::pointer_traits<pointer>::reference;
|
|
78
|
-
using const_reference = typename thrust::detail::pointer_traits<const_pointer>::reference;
|
|
79
|
-
|
|
80
|
-
template <typename U>
|
|
81
|
-
using rebind_alloc = std::allocator<U>;
|
|
82
|
-
template <typename U>
|
|
83
|
-
using rebind_traits = allocator_traits<std::allocator<U>>;
|
|
84
|
-
|
|
85
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
86
|
-
_CCCL_HOST_DEVICE static pointer allocate(allocator_type& a, size_type n)
|
|
87
|
-
{
|
|
88
|
-
return superclass::allocate(a, n);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
92
|
-
_CCCL_HOST_DEVICE static pointer allocate(allocator_type& a, size_type n, const_void_pointer hint)
|
|
93
|
-
{
|
|
94
|
-
return superclass::allocate(a, n, hint);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
98
|
-
_CCCL_HOST_DEVICE static void deallocate(allocator_type& a, pointer p, size_type n) noexcept
|
|
99
|
-
{
|
|
100
|
-
superclass::deallocate(a, p, n);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
104
|
-
template <typename U, typename... Args>
|
|
105
|
-
_CCCL_HOST_DEVICE static void construct(allocator_type& a, U* p, Args&&... args)
|
|
106
|
-
{
|
|
107
|
-
superclass::construct(a, p, THRUST_FWD(args)...);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
111
|
-
template <typename U>
|
|
112
|
-
_CCCL_HOST_DEVICE static void destroy(allocator_type& a, U* p) noexcept
|
|
113
|
-
{
|
|
114
|
-
superclass::destroy(a, p);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
118
|
-
_CCCL_HOST_DEVICE static size_type max_size(const allocator_type& a)
|
|
119
|
-
{
|
|
120
|
-
return superclass::max_size(a);
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
namespace allocator_traits_detail
|
|
125
|
-
{
|
|
126
|
-
|
|
127
|
-
__THRUST_DEFINE_IS_CALL_POSSIBLE(has_member_allocate_with_hint_impl, allocate)
|
|
128
|
-
|
|
129
|
-
template <typename Alloc>
|
|
130
|
-
class has_member_allocate_with_hint
|
|
131
|
-
{
|
|
132
|
-
using pointer = typename allocator_traits<Alloc>::pointer;
|
|
133
|
-
using size_type = typename allocator_traits<Alloc>::size_type;
|
|
134
|
-
using const_void_pointer = typename allocator_traits<Alloc>::const_void_pointer;
|
|
135
|
-
|
|
136
|
-
public:
|
|
137
|
-
using type = typename has_member_allocate_with_hint_impl<Alloc, pointer(size_type, const_void_pointer)>::type;
|
|
138
|
-
static const bool value = type::value;
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
template <typename Alloc>
|
|
142
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_allocate_with_hint<Alloc>::value,
|
|
143
|
-
typename allocator_traits<Alloc>::pointer>
|
|
144
|
-
allocate(Alloc& a,
|
|
145
|
-
typename allocator_traits<Alloc>::size_type n,
|
|
146
|
-
typename allocator_traits<Alloc>::const_void_pointer hint)
|
|
147
|
-
{
|
|
148
|
-
return a.allocate(n, hint);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
template <typename Alloc>
|
|
152
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_allocate_with_hint<Alloc>::value,
|
|
153
|
-
typename allocator_traits<Alloc>::pointer>
|
|
154
|
-
allocate(Alloc& a, typename allocator_traits<Alloc>::size_type n, typename allocator_traits<Alloc>::const_void_pointer)
|
|
155
|
-
{
|
|
156
|
-
return a.allocate(n);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
__THRUST_DEFINE_IS_CALL_POSSIBLE(has_member_construct1_impl, construct)
|
|
160
|
-
|
|
161
|
-
template <typename Alloc, typename T>
|
|
162
|
-
struct has_member_construct1 : has_member_construct1_impl<Alloc, void(T*)>
|
|
163
|
-
{};
|
|
164
|
-
|
|
165
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
166
|
-
template <typename Alloc, typename T>
|
|
167
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_construct1<Alloc, T>::value> construct(Alloc& a, T* p)
|
|
168
|
-
{
|
|
169
|
-
a.construct(p);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
173
|
-
template <typename Alloc, typename T>
|
|
174
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_construct1<Alloc, T>::value> construct(Alloc&, T* p)
|
|
175
|
-
{
|
|
176
|
-
::new (static_cast<void*>(p)) T();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
__THRUST_DEFINE_IS_CALL_POSSIBLE(has_member_construct2_impl, construct)
|
|
180
|
-
|
|
181
|
-
template <typename Alloc, typename T, typename Arg1>
|
|
182
|
-
struct has_member_construct2 : has_member_construct2_impl<Alloc, void(T*, const Arg1&)>
|
|
183
|
-
{};
|
|
184
|
-
|
|
185
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
186
|
-
template <typename Alloc, typename T, typename Arg1>
|
|
187
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_construct2<Alloc, T, Arg1>::value>
|
|
188
|
-
construct(Alloc& a, T* p, const Arg1& arg1)
|
|
189
|
-
{
|
|
190
|
-
a.construct(p, arg1);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
194
|
-
template <typename Alloc, typename T, typename Arg1>
|
|
195
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_construct2<Alloc, T, Arg1>::value>
|
|
196
|
-
construct(Alloc&, T* p, const Arg1& arg1)
|
|
197
|
-
{
|
|
198
|
-
::new (static_cast<void*>(p)) T(arg1);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
__THRUST_DEFINE_IS_CALL_POSSIBLE(has_member_constructN_impl, construct)
|
|
202
|
-
|
|
203
|
-
template <typename Alloc, typename T, typename... Args>
|
|
204
|
-
struct has_member_constructN : has_member_constructN_impl<Alloc, void(T*, Args...)>
|
|
205
|
-
{};
|
|
206
|
-
|
|
207
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
208
|
-
template <typename Alloc, typename T, typename... Args>
|
|
209
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_constructN<Alloc, T, Args...>::value>
|
|
210
|
-
construct(Alloc& a, T* p, Args&&... args)
|
|
211
|
-
{
|
|
212
|
-
a.construct(p, THRUST_FWD(args)...);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
216
|
-
template <typename Alloc, typename T, typename... Args>
|
|
217
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_constructN<Alloc, T, Args...>::value>
|
|
218
|
-
construct(Alloc&, T* p, Args&&... args)
|
|
219
|
-
{
|
|
220
|
-
::new (static_cast<void*>(p)) T(THRUST_FWD(args)...);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
__THRUST_DEFINE_IS_CALL_POSSIBLE(has_member_destroy_impl, destroy)
|
|
224
|
-
|
|
225
|
-
template <typename Alloc, typename T>
|
|
226
|
-
struct has_member_destroy : has_member_destroy_impl<Alloc, void(T*)>
|
|
227
|
-
{};
|
|
228
|
-
|
|
229
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
230
|
-
template <typename Alloc, typename T>
|
|
231
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_destroy<Alloc, T>::value> destroy(Alloc& a, T* p)
|
|
232
|
-
{
|
|
233
|
-
a.destroy(p);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
237
|
-
template <typename Alloc, typename T>
|
|
238
|
-
inline _CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_destroy<Alloc, T>::value> destroy(Alloc&, T* p)
|
|
239
|
-
{
|
|
240
|
-
p->~T();
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
__THRUST_DEFINE_IS_CALL_POSSIBLE(has_member_max_size_impl, max_size)
|
|
244
|
-
|
|
245
|
-
template <typename Alloc>
|
|
246
|
-
class has_member_max_size
|
|
247
|
-
{
|
|
248
|
-
using size_type = typename allocator_traits<Alloc>::size_type;
|
|
249
|
-
|
|
250
|
-
public:
|
|
251
|
-
using type = typename has_member_max_size_impl<Alloc, size_type()>::type;
|
|
252
|
-
static const bool value = type::value;
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
template <typename Alloc>
|
|
256
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_max_size<Alloc>::value, typename allocator_traits<Alloc>::size_type>
|
|
257
|
-
max_size(const Alloc& a)
|
|
258
|
-
{
|
|
259
|
-
return a.max_size();
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
template <typename Alloc>
|
|
263
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_max_size<Alloc>::value,
|
|
264
|
-
typename allocator_traits<Alloc>::size_type>
|
|
265
|
-
max_size(const Alloc&)
|
|
266
|
-
{
|
|
267
|
-
using size_type = typename allocator_traits<Alloc>::size_type;
|
|
268
|
-
return ::cuda::std::numeric_limits<size_type>::max();
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
template <typename Alloc>
|
|
272
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<has_member_system<Alloc>::value, typename allocator_system<Alloc>::type&>
|
|
273
|
-
system(Alloc& a)
|
|
274
|
-
{
|
|
275
|
-
// return the allocator's system
|
|
276
|
-
return a.system();
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
template <typename Alloc>
|
|
280
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<!has_member_system<Alloc>::value, typename allocator_system<Alloc>::type>
|
|
281
|
-
system(Alloc&)
|
|
282
|
-
{
|
|
283
|
-
// return a copy of a value-initialized system
|
|
284
|
-
return typename allocator_system<Alloc>::type();
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
} // namespace allocator_traits_detail
|
|
288
|
-
|
|
289
|
-
template <typename Alloc>
|
|
290
|
-
_CCCL_HOST_DEVICE typename allocator_traits<Alloc>::pointer
|
|
291
|
-
allocator_traits<Alloc>::allocate(Alloc& a, typename allocator_traits<Alloc>::size_type n)
|
|
292
|
-
{
|
|
293
|
-
struct workaround_warnings
|
|
294
|
-
{
|
|
295
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
296
|
-
static _CCCL_HOST_DEVICE typename allocator_traits<Alloc>::pointer
|
|
297
|
-
allocate(Alloc& a, typename allocator_traits<Alloc>::size_type n)
|
|
298
|
-
{
|
|
299
|
-
return a.allocate(n);
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
|
|
303
|
-
return workaround_warnings::allocate(a, n);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
template <typename Alloc>
|
|
307
|
-
_CCCL_HOST_DEVICE typename allocator_traits<Alloc>::pointer allocator_traits<Alloc>::allocate(
|
|
308
|
-
Alloc& a, typename allocator_traits<Alloc>::size_type n, typename allocator_traits<Alloc>::const_void_pointer hint)
|
|
309
|
-
{
|
|
310
|
-
return allocator_traits_detail::allocate(a, n, hint);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
template <typename Alloc>
|
|
314
|
-
_CCCL_HOST_DEVICE void allocator_traits<Alloc>::deallocate(
|
|
315
|
-
Alloc& a, typename allocator_traits<Alloc>::pointer p, typename allocator_traits<Alloc>::size_type n) noexcept
|
|
316
|
-
{
|
|
317
|
-
struct workaround_warnings
|
|
318
|
-
{
|
|
319
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
320
|
-
static _CCCL_HOST_DEVICE void deallocate(
|
|
321
|
-
Alloc& a, typename allocator_traits<Alloc>::pointer p, typename allocator_traits<Alloc>::size_type n) noexcept
|
|
322
|
-
{
|
|
323
|
-
return a.deallocate(p, n);
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
return workaround_warnings::deallocate(a, p, n);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
template <typename Alloc>
|
|
331
|
-
template <typename T>
|
|
332
|
-
_CCCL_HOST_DEVICE void allocator_traits<Alloc>::construct(allocator_type& a, T* p)
|
|
333
|
-
{
|
|
334
|
-
return allocator_traits_detail::construct(a, p);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
template <typename Alloc>
|
|
338
|
-
template <typename T, typename Arg1>
|
|
339
|
-
_CCCL_HOST_DEVICE void allocator_traits<Alloc>::construct(allocator_type& a, T* p, const Arg1& arg1)
|
|
340
|
-
{
|
|
341
|
-
return allocator_traits_detail::construct(a, p, arg1);
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
template <typename Alloc>
|
|
345
|
-
template <typename T, typename... Args>
|
|
346
|
-
_CCCL_HOST_DEVICE void allocator_traits<Alloc>::construct(allocator_type& a, T* p, Args&&... args)
|
|
347
|
-
{
|
|
348
|
-
return allocator_traits_detail::construct(a, p, THRUST_FWD(args)...);
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
template <typename Alloc>
|
|
352
|
-
template <typename T>
|
|
353
|
-
_CCCL_HOST_DEVICE void allocator_traits<Alloc>::destroy(allocator_type& a, T* p) noexcept
|
|
354
|
-
{
|
|
355
|
-
return allocator_traits_detail::destroy(a, p);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
template <typename Alloc>
|
|
359
|
-
_CCCL_HOST_DEVICE typename allocator_traits<Alloc>::size_type allocator_traits<Alloc>::max_size(const allocator_type& a)
|
|
360
|
-
{
|
|
361
|
-
return allocator_traits_detail::max_size(a);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
template <typename Alloc>
|
|
365
|
-
_CCCL_HOST_DEVICE typename allocator_system<Alloc>::get_result_type allocator_system<Alloc>::get(Alloc& a)
|
|
366
|
-
{
|
|
367
|
-
return allocator_traits_detail::system(a);
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
} // namespace detail
|
|
371
|
-
THRUST_NAMESPACE_END
|