// SPDX-FileCopyrightText: Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. // SPDX-License-Identifier: BSD-3 #pragma once #include #include #include #include #if THRUST_DEVICE_SYSTEM == THRUST_DEVICE_SYSTEM_CUDA # if _CCCL_HAS_NVFP16() # include # endif // _CCCL_HAS_NVFP16() # if _CCCL_HAS_NVBF16() _CCCL_DIAG_PUSH _CCCL_DIAG_SUPPRESS_CLANG("-Wunused-function") # include _CCCL_DIAG_POP # endif // _CCCL_HAS_NVBF16 # if _CCCL_HAS_NVFP8() // cuda_fp8.h resets default for C4127, so we have to guard the inclusion _CCCL_DIAG_PUSH # include _CCCL_DIAG_POP # endif // _CCCL_HAS_NVFP8() #endif // THRUST_DEVICE_SYSTEM == THRUST_DEVICE_SYSTEM_CUDA namespace c2h { namespace detail { template class value_wrapper_t { T m_val{}; public: using value_type = T; explicit value_wrapper_t(T val) : m_val(val) {} explicit value_wrapper_t(int val) : m_val(static_cast(val)) {} T get() const { return m_val; } }; } // namespace detail struct seed_t : detail::value_wrapper_t { using value_wrapper_t::value_wrapper_t; }; struct modulo_t : detail::value_wrapper_t { using value_wrapper_t::value_wrapper_t; }; namespace detail { void gen_custom_type_state( seed_t seed, char* data, custom_type_state_t min, custom_type_state_t max, std::size_t elements, std::size_t element_size); template void init_key_segments(::cuda::std::span segment_offsets, KeyT* d_out, std::size_t element_size); template void gen_values_between(seed_t seed, ::cuda::std::span data, T min, T max); template void gen_values_cyclic(modulo_t mod, ::cuda::std::span data); template std::size_t gen_uniform_offsets( seed_t seed, cuda::std::span segment_offsets, T total_elements, T min_segment_size, T max_segment_size); } // namespace detail template