Loading [MathJax]/extensions/tex2jax.js
cuML C++ API  23.12
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
copy.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023, 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 #pragma once
19 #include <stdint.h>
20 #ifdef CUML_ENABLE_GPU
22 #endif
24 
25 namespace raft_proto {
26 template <device_type dst_type, device_type src_type, typename T>
27 void copy(T* dst, T const* src, uint32_t size, uint32_t dst_offset, uint32_t src_offset)
28 {
29  detail::copy<dst_type, src_type, T>(dst + dst_offset, src + src_offset, size, cuda_stream{});
30 }
31 
32 template <device_type dst_type, device_type src_type, typename T>
33 void copy(
34  T* dst, T const* src, uint32_t size, uint32_t dst_offset, uint32_t src_offset, cuda_stream stream)
35 {
36  detail::copy<dst_type, src_type, T>(dst + dst_offset, src + src_offset, size, stream);
37 }
38 
39 template <device_type dst_type, device_type src_type, typename T>
40 void copy(T* dst, T const* src, uint32_t size)
41 {
42  detail::copy<dst_type, src_type, T>(dst, src, size, cuda_stream{});
43 }
44 
45 template <device_type dst_type, device_type src_type, typename T>
46 void copy(T* dst, T const* src, uint32_t size, cuda_stream stream)
47 {
48  detail::copy<dst_type, src_type, T>(dst, src, size, stream);
49 }
50 
51 template <typename T>
52 void copy(T* dst,
53  T const* src,
54  uint32_t size,
55  device_type dst_type,
56  device_type src_type,
57  uint32_t dst_offset,
58  uint32_t src_offset,
59  cuda_stream stream)
60 {
61  if (dst_type == device_type::gpu && src_type == device_type::gpu) {
62  detail::copy<device_type::gpu, device_type::gpu, T>(
63  dst + dst_offset, src + src_offset, size, stream);
64  } else if (dst_type == device_type::cpu && src_type == device_type::cpu) {
65  detail::copy<device_type::cpu, device_type::cpu, T>(
66  dst + dst_offset, src + src_offset, size, stream);
67  } else if (dst_type == device_type::gpu && src_type == device_type::cpu) {
68  detail::copy<device_type::gpu, device_type::cpu, T>(
69  dst + dst_offset, src + src_offset, size, stream);
70  } else if (dst_type == device_type::cpu && src_type == device_type::gpu) {
71  detail::copy<device_type::cpu, device_type::gpu, T>(
72  dst + dst_offset, src + src_offset, size, stream);
73  }
74 }
75 
76 template <typename T>
77 void copy(T* dst, T const* src, uint32_t size, device_type dst_type, device_type src_type)
78 {
79  copy<T>(dst, src, size, dst_type, src_type, 0, 0, cuda_stream{});
80 }
81 
82 template <typename T>
83 void copy(T* dst,
84  T const* src,
85  uint32_t size,
86  device_type dst_type,
87  device_type src_type,
88  cuda_stream stream)
89 {
90  copy<T>(dst, src, size, dst_type, src_type, 0, 0, stream);
91 }
92 
93 } // namespace raft_proto
Definition: buffer.hpp:33
int cuda_stream
Definition: cuda_stream.hpp:25
device_type
Definition: device_type.hpp:18
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:325