cuda-cccl 0.3.0__cp310-cp310-manylinux_2_24_aarch64.whl → 0.3.2__cp310-cp310-manylinux_2_24_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cuda-cccl might be problematic. Click here for more details.
- 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-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- cuda/cccl/parallel/experimental/cu13/_bindings_impl.cpython-310-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,242 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2008-2013 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/advance.h>
|
|
29
|
-
#include <thrust/detail/allocator/allocator_traits.h>
|
|
30
|
-
#include <thrust/detail/copy.h>
|
|
31
|
-
#include <thrust/detail/memory_wrapper.h>
|
|
32
|
-
#include <thrust/detail/type_traits/pointer_traits.h>
|
|
33
|
-
#include <thrust/distance.h>
|
|
34
|
-
#include <thrust/for_each.h>
|
|
35
|
-
#include <thrust/iterator/iterator_traits.h>
|
|
36
|
-
#include <thrust/iterator/zip_iterator.h>
|
|
37
|
-
#include <thrust/tuple.h>
|
|
38
|
-
|
|
39
|
-
THRUST_NAMESPACE_BEGIN
|
|
40
|
-
namespace detail
|
|
41
|
-
{
|
|
42
|
-
namespace allocator_traits_detail
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
template <typename Allocator, typename InputType, typename OutputType>
|
|
46
|
-
struct copy_construct_with_allocator
|
|
47
|
-
{
|
|
48
|
-
Allocator& a;
|
|
49
|
-
|
|
50
|
-
_CCCL_HOST_DEVICE copy_construct_with_allocator(Allocator& a)
|
|
51
|
-
: a(a)
|
|
52
|
-
{}
|
|
53
|
-
|
|
54
|
-
template <typename Tuple>
|
|
55
|
-
inline _CCCL_HOST_DEVICE void operator()(Tuple t)
|
|
56
|
-
{
|
|
57
|
-
const InputType& in = thrust::get<0>(t);
|
|
58
|
-
OutputType& out = thrust::get<1>(t);
|
|
59
|
-
|
|
60
|
-
allocator_traits<Allocator>::construct(a, &out, in);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// we need to use allocator_traits<Allocator>::construct() to
|
|
65
|
-
// copy construct a T if either:
|
|
66
|
-
// 1. Allocator has a 2-argument construct() member or
|
|
67
|
-
// 2. T has a non-trivial copy constructor
|
|
68
|
-
template <typename Allocator, typename T>
|
|
69
|
-
struct needs_copy_construct_via_allocator
|
|
70
|
-
: integral_constant<bool,
|
|
71
|
-
(has_member_construct2<Allocator, T, T>::value
|
|
72
|
-
|| !::cuda::std::is_trivially_copy_constructible<T>::value)>
|
|
73
|
-
{};
|
|
74
|
-
|
|
75
|
-
// we know that std::allocator::construct's only effect is to call T's
|
|
76
|
-
// copy constructor, so we needn't consider or use its construct() member for copy construction
|
|
77
|
-
template <typename U, typename T>
|
|
78
|
-
struct needs_copy_construct_via_allocator<std::allocator<U>, T>
|
|
79
|
-
: integral_constant<bool, !::cuda::std::is_trivially_copy_constructible<T>::value>
|
|
80
|
-
{};
|
|
81
|
-
|
|
82
|
-
// XXX it's regrettable that this implementation is copied almost
|
|
83
|
-
// exactly from system::detail::generic::uninitialized_copy
|
|
84
|
-
// perhaps generic::uninitialized_copy could call this routine
|
|
85
|
-
// with a default allocator
|
|
86
|
-
template <typename Allocator, typename FromSystem, typename ToSystem, typename InputIterator, typename Pointer>
|
|
87
|
-
_CCCL_HOST_DEVICE enable_if_convertible_t<FromSystem, ToSystem, Pointer> uninitialized_copy_with_allocator(
|
|
88
|
-
Allocator& a,
|
|
89
|
-
const thrust::execution_policy<FromSystem>&,
|
|
90
|
-
const thrust::execution_policy<ToSystem>& to_system,
|
|
91
|
-
InputIterator first,
|
|
92
|
-
InputIterator last,
|
|
93
|
-
Pointer result)
|
|
94
|
-
{
|
|
95
|
-
// zip up the iterators
|
|
96
|
-
using IteratorTuple = thrust::tuple<InputIterator, Pointer>;
|
|
97
|
-
using ZipIterator = thrust::zip_iterator<IteratorTuple>;
|
|
98
|
-
|
|
99
|
-
ZipIterator begin = thrust::make_zip_iterator(first, result);
|
|
100
|
-
ZipIterator end = begin;
|
|
101
|
-
|
|
102
|
-
// get a zip_iterator pointing to the end
|
|
103
|
-
const thrust::detail::it_difference_t<InputIterator> n = ::cuda::std::distance(first, last);
|
|
104
|
-
::cuda::std::advance(end, n);
|
|
105
|
-
|
|
106
|
-
// create a functor
|
|
107
|
-
using InputType = it_value_t<InputIterator>;
|
|
108
|
-
using OutputType = it_value_t<Pointer>;
|
|
109
|
-
|
|
110
|
-
// do the for_each
|
|
111
|
-
// note we use to_system to dispatch the for_each
|
|
112
|
-
thrust::for_each(to_system, begin, end, copy_construct_with_allocator<Allocator, InputType, OutputType>(a));
|
|
113
|
-
|
|
114
|
-
// return the end of the output range
|
|
115
|
-
return thrust::get<1>(end.get_iterator_tuple());
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// XXX it's regrettable that this implementation is copied almost
|
|
119
|
-
// exactly from system::detail::generic::uninitialized_copy_n
|
|
120
|
-
// perhaps generic::uninitialized_copy_n could call this routine
|
|
121
|
-
// with a default allocator
|
|
122
|
-
template <typename Allocator, typename FromSystem, typename ToSystem, typename InputIterator, typename Size, typename Pointer>
|
|
123
|
-
_CCCL_HOST_DEVICE enable_if_convertible_t<FromSystem, ToSystem, Pointer> uninitialized_copy_with_allocator_n(
|
|
124
|
-
Allocator& a,
|
|
125
|
-
const thrust::execution_policy<FromSystem>&,
|
|
126
|
-
const thrust::execution_policy<ToSystem>& to_system,
|
|
127
|
-
InputIterator first,
|
|
128
|
-
Size n,
|
|
129
|
-
Pointer result)
|
|
130
|
-
{
|
|
131
|
-
// zip up the iterators
|
|
132
|
-
using IteratorTuple = thrust::tuple<InputIterator, Pointer>;
|
|
133
|
-
using ZipIterator = thrust::zip_iterator<IteratorTuple>;
|
|
134
|
-
|
|
135
|
-
ZipIterator begin = thrust::make_zip_iterator(first, result);
|
|
136
|
-
|
|
137
|
-
// create a functor
|
|
138
|
-
using InputType = it_value_t<InputIterator>;
|
|
139
|
-
using OutputType = it_value_t<Pointer>;
|
|
140
|
-
|
|
141
|
-
// do the for_each_n
|
|
142
|
-
// note we use to_system to dispatch the for_each_n
|
|
143
|
-
ZipIterator end =
|
|
144
|
-
thrust::for_each_n(to_system, begin, n, copy_construct_with_allocator<Allocator, InputType, OutputType>(a));
|
|
145
|
-
|
|
146
|
-
// return the end of the output range
|
|
147
|
-
return thrust::get<1>(end.get_iterator_tuple());
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
template <typename Allocator, typename FromSystem, typename ToSystem, typename InputIterator, typename Pointer>
|
|
151
|
-
_CCCL_HOST_DEVICE typename disable_if_convertible<FromSystem, ToSystem, Pointer>::type uninitialized_copy_with_allocator(
|
|
152
|
-
Allocator&,
|
|
153
|
-
const thrust::execution_policy<FromSystem>& from_system,
|
|
154
|
-
const thrust::execution_policy<ToSystem>& to_system,
|
|
155
|
-
InputIterator first,
|
|
156
|
-
InputIterator last,
|
|
157
|
-
Pointer result)
|
|
158
|
-
{
|
|
159
|
-
// the systems aren't trivially interoperable
|
|
160
|
-
// just call two_system_copy and hope for the best
|
|
161
|
-
return thrust::detail::two_system_copy(from_system, to_system, first, last, result);
|
|
162
|
-
} // end uninitialized_copy_with_allocator()
|
|
163
|
-
|
|
164
|
-
template <typename Allocator, typename FromSystem, typename ToSystem, typename InputIterator, typename Size, typename Pointer>
|
|
165
|
-
_CCCL_HOST_DEVICE typename disable_if_convertible<FromSystem, ToSystem, Pointer>::type
|
|
166
|
-
uninitialized_copy_with_allocator_n(
|
|
167
|
-
Allocator&,
|
|
168
|
-
const thrust::execution_policy<FromSystem>& from_system,
|
|
169
|
-
const thrust::execution_policy<ToSystem>& to_system,
|
|
170
|
-
InputIterator first,
|
|
171
|
-
Size n,
|
|
172
|
-
Pointer result)
|
|
173
|
-
{
|
|
174
|
-
// the systems aren't trivially interoperable
|
|
175
|
-
// just call two_system_copy_n and hope for the best
|
|
176
|
-
return thrust::detail::two_system_copy_n(from_system, to_system, first, n, result);
|
|
177
|
-
} // end uninitialized_copy_with_allocator_n()
|
|
178
|
-
|
|
179
|
-
template <typename FromSystem, typename Allocator, typename InputIterator, typename Pointer>
|
|
180
|
-
_CCCL_HOST_DEVICE
|
|
181
|
-
typename disable_if<needs_copy_construct_via_allocator<Allocator, typename pointer_element<Pointer>::type>::value,
|
|
182
|
-
Pointer>::type
|
|
183
|
-
copy_construct_range(thrust::execution_policy<FromSystem>& from_system,
|
|
184
|
-
Allocator& a,
|
|
185
|
-
InputIterator first,
|
|
186
|
-
InputIterator last,
|
|
187
|
-
Pointer result)
|
|
188
|
-
{
|
|
189
|
-
// just call two_system_copy
|
|
190
|
-
return thrust::detail::two_system_copy(from_system, allocator_system<Allocator>::get(a), first, last, result);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
template <typename FromSystem, typename Allocator, typename InputIterator, typename Size, typename Pointer>
|
|
194
|
-
_CCCL_HOST_DEVICE
|
|
195
|
-
typename disable_if<needs_copy_construct_via_allocator<Allocator, typename pointer_element<Pointer>::type>::value,
|
|
196
|
-
Pointer>::type
|
|
197
|
-
copy_construct_range_n(
|
|
198
|
-
thrust::execution_policy<FromSystem>& from_system, Allocator& a, InputIterator first, Size n, Pointer result)
|
|
199
|
-
{
|
|
200
|
-
// just call two_system_copy_n
|
|
201
|
-
return thrust::detail::two_system_copy_n(from_system, allocator_system<Allocator>::get(a), first, n, result);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
template <typename FromSystem, typename Allocator, typename InputIterator, typename Pointer>
|
|
205
|
-
_CCCL_HOST_DEVICE ::cuda::std::
|
|
206
|
-
enable_if_t<needs_copy_construct_via_allocator<Allocator, typename pointer_element<Pointer>::type>::value, Pointer>
|
|
207
|
-
copy_construct_range(thrust::execution_policy<FromSystem>& from_system,
|
|
208
|
-
Allocator& a,
|
|
209
|
-
InputIterator first,
|
|
210
|
-
InputIterator last,
|
|
211
|
-
Pointer result)
|
|
212
|
-
{
|
|
213
|
-
return uninitialized_copy_with_allocator(a, from_system, allocator_system<Allocator>::get(a), first, last, result);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
template <typename FromSystem, typename Allocator, typename InputIterator, typename Size, typename Pointer>
|
|
217
|
-
_CCCL_HOST_DEVICE ::cuda::std::
|
|
218
|
-
enable_if_t<needs_copy_construct_via_allocator<Allocator, typename pointer_element<Pointer>::type>::value, Pointer>
|
|
219
|
-
copy_construct_range_n(
|
|
220
|
-
thrust::execution_policy<FromSystem>& from_system, Allocator& a, InputIterator first, Size n, Pointer result)
|
|
221
|
-
{
|
|
222
|
-
return uninitialized_copy_with_allocator_n(a, from_system, allocator_system<Allocator>::get(a), first, n, result);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
} // namespace allocator_traits_detail
|
|
226
|
-
|
|
227
|
-
template <typename System, typename Allocator, typename InputIterator, typename Pointer>
|
|
228
|
-
_CCCL_HOST_DEVICE Pointer copy_construct_range(
|
|
229
|
-
thrust::execution_policy<System>& from_system, Allocator& a, InputIterator first, InputIterator last, Pointer result)
|
|
230
|
-
{
|
|
231
|
-
return allocator_traits_detail::copy_construct_range(from_system, a, first, last, result);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
template <typename System, typename Allocator, typename InputIterator, typename Size, typename Pointer>
|
|
235
|
-
_CCCL_HOST_DEVICE Pointer copy_construct_range_n(
|
|
236
|
-
thrust::execution_policy<System>& from_system, Allocator& a, InputIterator first, Size n, Pointer result)
|
|
237
|
-
{
|
|
238
|
-
return allocator_traits_detail::copy_construct_range_n(from_system, a, first, n, result);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
} // namespace detail
|
|
242
|
-
THRUST_NAMESPACE_END
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2008-2021 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
|
-
#include <thrust/detail/allocator/allocator_traits.h>
|
|
30
|
-
#include <thrust/detail/allocator/destroy_range.h>
|
|
31
|
-
#include <thrust/detail/memory_wrapper.h>
|
|
32
|
-
#include <thrust/detail/type_traits/pointer_traits.h>
|
|
33
|
-
#include <thrust/for_each.h>
|
|
34
|
-
|
|
35
|
-
THRUST_NAMESPACE_BEGIN
|
|
36
|
-
namespace detail
|
|
37
|
-
{
|
|
38
|
-
namespace allocator_traits_detail
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
// destroy_range has three cases:
|
|
42
|
-
// if Allocator has an effectful member function destroy:
|
|
43
|
-
// 1. destroy via the allocator
|
|
44
|
-
// else
|
|
45
|
-
// 2. if T has a non-trivial destructor, destroy the range without using the allocator
|
|
46
|
-
// 3. if T has a trivial destructor, do a no-op
|
|
47
|
-
|
|
48
|
-
template <typename Allocator, typename T>
|
|
49
|
-
struct has_effectful_member_destroy : has_member_destroy<Allocator, T>
|
|
50
|
-
{};
|
|
51
|
-
|
|
52
|
-
// std::allocator::destroy's only effect is to invoke its argument's destructor
|
|
53
|
-
template <typename U, typename T>
|
|
54
|
-
struct has_effectful_member_destroy<std::allocator<U>, T> : thrust::detail::false_type
|
|
55
|
-
{};
|
|
56
|
-
|
|
57
|
-
// case 1: Allocator has an effectful 1-argument member function "destroy"
|
|
58
|
-
template <typename Allocator, typename Pointer>
|
|
59
|
-
struct enable_if_destroy_range_case1
|
|
60
|
-
: ::cuda::std::enable_if<has_effectful_member_destroy<Allocator, typename pointer_element<Pointer>::type>::value>
|
|
61
|
-
{};
|
|
62
|
-
|
|
63
|
-
// case 2: Allocator has no member function "destroy", but T has a non-trivial destructor
|
|
64
|
-
template <typename Allocator, typename Pointer>
|
|
65
|
-
struct enable_if_destroy_range_case2
|
|
66
|
-
: ::cuda::std::enable_if<!has_effectful_member_destroy<Allocator, typename pointer_element<Pointer>::type>::value
|
|
67
|
-
&& !::cuda::std::is_trivially_destructible<typename pointer_element<Pointer>::type>::value>
|
|
68
|
-
{};
|
|
69
|
-
|
|
70
|
-
// case 3: Allocator has no member function "destroy", and T has a trivial destructor
|
|
71
|
-
template <typename Allocator, typename Pointer>
|
|
72
|
-
struct enable_if_destroy_range_case3
|
|
73
|
-
: ::cuda::std::enable_if<!has_effectful_member_destroy<Allocator, typename pointer_element<Pointer>::type>::value
|
|
74
|
-
&& ::cuda::std::is_trivially_destructible<typename pointer_element<Pointer>::type>::value>
|
|
75
|
-
{};
|
|
76
|
-
|
|
77
|
-
template <typename Allocator>
|
|
78
|
-
struct destroy_via_allocator
|
|
79
|
-
{
|
|
80
|
-
Allocator& a;
|
|
81
|
-
|
|
82
|
-
_CCCL_HOST_DEVICE destroy_via_allocator(Allocator& a) noexcept
|
|
83
|
-
: a(a)
|
|
84
|
-
{}
|
|
85
|
-
|
|
86
|
-
template <typename T>
|
|
87
|
-
inline _CCCL_HOST_DEVICE void operator()(T& x) noexcept
|
|
88
|
-
{
|
|
89
|
-
allocator_traits<Allocator>::destroy(a, &x);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
// destroy_range case 1: destroy via allocator
|
|
94
|
-
template <typename Allocator, typename Pointer, typename Size>
|
|
95
|
-
_CCCL_HOST_DEVICE typename enable_if_destroy_range_case1<Allocator, Pointer>::type
|
|
96
|
-
destroy_range(Allocator& a, Pointer p, Size n) noexcept
|
|
97
|
-
{
|
|
98
|
-
thrust::for_each_n(allocator_system<Allocator>::get(a), p, n, destroy_via_allocator<Allocator>(a));
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// we must prepare for His coming
|
|
102
|
-
struct gozer
|
|
103
|
-
{
|
|
104
|
-
_CCCL_EXEC_CHECK_DISABLE
|
|
105
|
-
template <typename T>
|
|
106
|
-
inline _CCCL_HOST_DEVICE void operator()(T& x) noexcept
|
|
107
|
-
{
|
|
108
|
-
x.~T();
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
// destroy_range case 2: destroy without the allocator
|
|
113
|
-
template <typename Allocator, typename Pointer, typename Size>
|
|
114
|
-
_CCCL_HOST_DEVICE typename enable_if_destroy_range_case2<Allocator, Pointer>::type
|
|
115
|
-
destroy_range(Allocator& a, Pointer p, Size n) noexcept
|
|
116
|
-
{
|
|
117
|
-
thrust::for_each_n(allocator_system<Allocator>::get(a), p, n, gozer());
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// destroy_range case 3: no-op
|
|
121
|
-
template <typename Allocator, typename Pointer, typename Size>
|
|
122
|
-
_CCCL_HOST_DEVICE typename enable_if_destroy_range_case3<Allocator, Pointer>::type
|
|
123
|
-
destroy_range(Allocator&, Pointer, Size) noexcept
|
|
124
|
-
{
|
|
125
|
-
// no op
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
} // namespace allocator_traits_detail
|
|
129
|
-
|
|
130
|
-
template <typename Allocator, typename Pointer, typename Size>
|
|
131
|
-
_CCCL_HOST_DEVICE void destroy_range(Allocator& a, Pointer p, Size n) noexcept
|
|
132
|
-
{
|
|
133
|
-
return allocator_traits_detail::destroy_range(a, p, n);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
} // namespace detail
|
|
137
|
-
THRUST_NAMESPACE_END
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2008-2013 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_traits.h>
|
|
31
|
-
#include <thrust/detail/type_traits/pointer_traits.h>
|
|
32
|
-
#include <thrust/for_each.h>
|
|
33
|
-
#include <thrust/uninitialized_fill.h>
|
|
34
|
-
|
|
35
|
-
THRUST_NAMESPACE_BEGIN
|
|
36
|
-
namespace detail
|
|
37
|
-
{
|
|
38
|
-
namespace allocator_traits_detail
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
// fill_construct_range has 2 cases:
|
|
42
|
-
// if Allocator has an effectful member function construct:
|
|
43
|
-
// 1. construct via the allocator
|
|
44
|
-
// else
|
|
45
|
-
// 2. construct via uninitialized_fill
|
|
46
|
-
|
|
47
|
-
template <typename Allocator, typename T, typename Arg1>
|
|
48
|
-
struct has_effectful_member_construct2 : has_member_construct2<Allocator, T, Arg1>
|
|
49
|
-
{};
|
|
50
|
-
|
|
51
|
-
// std::allocator::construct's only effect is to invoke placement new
|
|
52
|
-
template <typename U, typename T, typename Arg1>
|
|
53
|
-
struct has_effectful_member_construct2<std::allocator<U>, T, Arg1> : thrust::detail::false_type
|
|
54
|
-
{};
|
|
55
|
-
|
|
56
|
-
template <typename Allocator, typename Arg1>
|
|
57
|
-
struct construct2_via_allocator
|
|
58
|
-
{
|
|
59
|
-
Allocator& a;
|
|
60
|
-
Arg1 arg;
|
|
61
|
-
|
|
62
|
-
_CCCL_HOST_DEVICE construct2_via_allocator(Allocator& a, const Arg1& arg)
|
|
63
|
-
: a(a)
|
|
64
|
-
, arg(arg)
|
|
65
|
-
{}
|
|
66
|
-
|
|
67
|
-
template <typename T>
|
|
68
|
-
inline _CCCL_HOST_DEVICE void operator()(T& x)
|
|
69
|
-
{
|
|
70
|
-
allocator_traits<Allocator>::construct(a, &x, arg);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
template <typename Allocator, typename Pointer, typename Size, typename T>
|
|
75
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<
|
|
76
|
-
has_effectful_member_construct2<Allocator, typename pointer_element<Pointer>::type, T>::value>
|
|
77
|
-
fill_construct_range(Allocator& a, Pointer p, Size n, const T& value)
|
|
78
|
-
{
|
|
79
|
-
thrust::for_each_n(allocator_system<Allocator>::get(a), p, n, construct2_via_allocator<Allocator, T>(a, value));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
template <typename Allocator, typename Pointer, typename Size, typename T>
|
|
83
|
-
_CCCL_HOST_DEVICE ::cuda::std::enable_if_t<
|
|
84
|
-
!has_effectful_member_construct2<Allocator, typename pointer_element<Pointer>::type, T>::value>
|
|
85
|
-
fill_construct_range(Allocator& a, Pointer p, Size n, const T& value)
|
|
86
|
-
{
|
|
87
|
-
thrust::uninitialized_fill_n(allocator_system<Allocator>::get(a), p, n, value);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
} // namespace allocator_traits_detail
|
|
91
|
-
|
|
92
|
-
template <typename Alloc, typename Pointer, typename Size, typename T>
|
|
93
|
-
_CCCL_HOST_DEVICE void fill_construct_range(Alloc& a, Pointer p, Size n, const T& value)
|
|
94
|
-
{
|
|
95
|
-
return allocator_traits_detail::fill_construct_range(a, p, n, value);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
} // namespace detail
|
|
99
|
-
THRUST_NAMESPACE_END
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2008-2013 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/malloc_allocator.h>
|
|
29
|
-
#include <thrust/detail/malloc_and_free.h>
|
|
30
|
-
#include <thrust/detail/raw_pointer_cast.h>
|
|
31
|
-
#include <thrust/system/detail/bad_alloc.h>
|
|
32
|
-
#include <thrust/system/detail/generic/select_system.h>
|
|
33
|
-
|
|
34
|
-
THRUST_NAMESPACE_BEGIN
|
|
35
|
-
namespace detail
|
|
36
|
-
{
|
|
37
|
-
|
|
38
|
-
template <typename T, typename System, typename Pointer>
|
|
39
|
-
typename malloc_allocator<T, System, Pointer>::pointer
|
|
40
|
-
malloc_allocator<T, System, Pointer>::allocate(typename malloc_allocator<T, System, Pointer>::size_type cnt)
|
|
41
|
-
{
|
|
42
|
-
using thrust::system::detail::generic::select_system;
|
|
43
|
-
|
|
44
|
-
// XXX should use a hypothetical thrust::static_pointer_cast here
|
|
45
|
-
System system;
|
|
46
|
-
|
|
47
|
-
pointer result = thrust::malloc<T>(select_system(system), cnt);
|
|
48
|
-
|
|
49
|
-
if (result.get() == 0)
|
|
50
|
-
{
|
|
51
|
-
throw thrust::system::detail::bad_alloc("malloc_allocator::allocate: malloc failed");
|
|
52
|
-
} // end if
|
|
53
|
-
|
|
54
|
-
return result;
|
|
55
|
-
} // end malloc_allocator::allocate()
|
|
56
|
-
|
|
57
|
-
template <typename T, typename System, typename Pointer>
|
|
58
|
-
void malloc_allocator<T, System, Pointer>::deallocate(typename malloc_allocator<T, System, Pointer>::pointer p,
|
|
59
|
-
typename malloc_allocator<T, System, Pointer>::size_type) noexcept
|
|
60
|
-
{
|
|
61
|
-
using thrust::system::detail::generic::select_system;
|
|
62
|
-
|
|
63
|
-
System system;
|
|
64
|
-
thrust::free(select_system(system), p);
|
|
65
|
-
} // end malloc_allocator
|
|
66
|
-
|
|
67
|
-
} // namespace detail
|
|
68
|
-
THRUST_NAMESPACE_END
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2008-2013 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/tagged_allocator.h>
|
|
29
|
-
|
|
30
|
-
#include <cuda/std/limits>
|
|
31
|
-
|
|
32
|
-
THRUST_NAMESPACE_BEGIN
|
|
33
|
-
namespace detail
|
|
34
|
-
{
|
|
35
|
-
|
|
36
|
-
template <typename T, typename Tag, typename Pointer>
|
|
37
|
-
_CCCL_HOST_DEVICE tagged_allocator<T, Tag, Pointer>::tagged_allocator()
|
|
38
|
-
{}
|
|
39
|
-
|
|
40
|
-
template <typename T, typename Tag, typename Pointer>
|
|
41
|
-
_CCCL_HOST_DEVICE tagged_allocator<T, Tag, Pointer>::tagged_allocator(const tagged_allocator<T, Tag, Pointer>&)
|
|
42
|
-
{}
|
|
43
|
-
|
|
44
|
-
template <typename T, typename Tag, typename Pointer>
|
|
45
|
-
template <typename U, typename OtherPointer>
|
|
46
|
-
_CCCL_HOST_DEVICE tagged_allocator<T, Tag, Pointer>::tagged_allocator(const tagged_allocator<U, Tag, OtherPointer>&)
|
|
47
|
-
{}
|
|
48
|
-
|
|
49
|
-
template <typename T, typename Tag, typename Pointer>
|
|
50
|
-
_CCCL_HOST_DEVICE tagged_allocator<T, Tag, Pointer>::~tagged_allocator()
|
|
51
|
-
{}
|
|
52
|
-
|
|
53
|
-
template <typename T, typename Tag, typename Pointer>
|
|
54
|
-
_CCCL_HOST_DEVICE typename tagged_allocator<T, Tag, Pointer>::pointer
|
|
55
|
-
tagged_allocator<T, Tag, Pointer>::address(reference x) const
|
|
56
|
-
{
|
|
57
|
-
return &x;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
template <typename T, typename Tag, typename Pointer>
|
|
61
|
-
_CCCL_HOST_DEVICE typename tagged_allocator<T, Tag, Pointer>::const_pointer
|
|
62
|
-
tagged_allocator<T, Tag, Pointer>::address(const_reference x) const
|
|
63
|
-
{
|
|
64
|
-
return &x;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
template <typename T, typename Tag, typename Pointer>
|
|
68
|
-
typename tagged_allocator<T, Tag, Pointer>::size_type tagged_allocator<T, Tag, Pointer>::max_size() const
|
|
69
|
-
{
|
|
70
|
-
return (::cuda::std::numeric_limits<size_type>::max)() / sizeof(T);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
template <typename T1, typename Pointer1, typename T2, typename Pointer2, typename Tag>
|
|
74
|
-
_CCCL_HOST_DEVICE bool operator==(const tagged_allocator<T1, Pointer1, Tag>&, const tagged_allocator<T2, Pointer2, Tag>&)
|
|
75
|
-
{
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
template <typename T1, typename Pointer1, typename T2, typename Pointer2, typename Tag>
|
|
80
|
-
_CCCL_HOST_DEVICE bool operator!=(const tagged_allocator<T1, Pointer1, Tag>&, const tagged_allocator<T2, Pointer2, Tag>&)
|
|
81
|
-
{
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
} // namespace detail
|
|
86
|
-
THRUST_NAMESPACE_END
|