copy.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #pragma once
8 
9 #include <stdint.h>
10 #ifdef CUML_ENABLE_GPU
12 #endif
14 
15 namespace raft_proto {
16 template <device_type dst_type, device_type src_type, typename T>
17 void copy(T* dst, T const* src, uint32_t size, uint32_t dst_offset, uint32_t src_offset)
18 {
19  detail::copy<dst_type, src_type, T>(dst + dst_offset, src + src_offset, size, cuda_stream{});
20 }
21 
22 template <device_type dst_type, device_type src_type, typename T>
23 void copy(
24  T* dst, T const* src, uint32_t size, uint32_t dst_offset, uint32_t src_offset, cuda_stream stream)
25 {
26  detail::copy<dst_type, src_type, T>(dst + dst_offset, src + src_offset, size, stream);
27 }
28 
29 template <device_type dst_type, device_type src_type, typename T>
30 void copy(T* dst, T const* src, uint32_t size)
31 {
32  detail::copy<dst_type, src_type, T>(dst, src, size, cuda_stream{});
33 }
34 
35 template <device_type dst_type, device_type src_type, typename T>
36 void copy(T* dst, T const* src, uint32_t size, cuda_stream stream)
37 {
38  detail::copy<dst_type, src_type, T>(dst, src, size, stream);
39 }
40 
41 template <typename T>
42 void copy(T* dst,
43  T const* src,
44  uint32_t size,
45  device_type dst_type,
46  device_type src_type,
47  uint32_t dst_offset,
48  uint32_t src_offset,
49  cuda_stream stream)
50 {
51  if (dst_type == device_type::gpu && src_type == device_type::gpu) {
52  detail::copy<device_type::gpu, device_type::gpu, T>(
53  dst + dst_offset, src + src_offset, size, stream);
54  } else if (dst_type == device_type::cpu && src_type == device_type::cpu) {
55  detail::copy<device_type::cpu, device_type::cpu, T>(
56  dst + dst_offset, src + src_offset, size, stream);
57  } else if (dst_type == device_type::gpu && src_type == device_type::cpu) {
58  detail::copy<device_type::gpu, device_type::cpu, T>(
59  dst + dst_offset, src + src_offset, size, stream);
60  } else if (dst_type == device_type::cpu && src_type == device_type::gpu) {
61  detail::copy<device_type::cpu, device_type::gpu, T>(
62  dst + dst_offset, src + src_offset, size, stream);
63  }
64 }
65 
66 template <typename T>
67 void copy(T* dst, T const* src, uint32_t size, device_type dst_type, device_type src_type)
68 {
69  copy<T>(dst, src, size, dst_type, src_type, 0, 0, cuda_stream{});
70 }
71 
72 template <typename T>
73 void copy(T* dst,
74  T const* src,
75  uint32_t size,
76  device_type dst_type,
77  device_type src_type,
78  cuda_stream stream)
79 {
80  copy<T>(dst, src, size, dst_type, src_type, 0, 0, stream);
81 }
82 
83 } // namespace raft_proto
Definition: buffer.hpp:24
int cuda_stream
Definition: cuda_stream.hpp:14
device_type
Definition: device_type.hpp:7
const_agnostic_same_t< T, U > copy(buffer< T > &dst, buffer< U > const &src, typename buffer< T >::index_type dst_offset, typename buffer< U >::index_type src_offset, typename buffer< T >::index_type size, cuda_stream stream)
Definition: buffer.hpp:316