prefetch.hpp
转到此文件的文档页面。
1 /*
2  * 版权所有 (c) 2024, NVIDIA CORPORATION.
3  *
4  * 根据 Apache 许可证 2.0 版(“许可证”)获得许可;
5  * 除非遵守许可证,否则您不得使用此文件。
6  * 您可以在以下位置获取许可证的副本:
7  *
8  * https://apache.ac.cn/licenses/LICENSE-2.0
9  *
10  * 除非适用法律要求或书面同意,否则软件
11  * 根据许可证分发,并按“原样”提供,
12  * 不提供任何明示或暗示的保证。
13  * 有关管理权限和
14  * 限制的特定语言,请参阅许可证。
15  */
16 
17 #pragma once
18 
19 #include <rmm/cuda_device.hpp>
20 #include <rmm/cuda_stream_view.hpp>
21 #include <rmm/detail/export.hpp>
22 #include <rmm/error.hpp>
23 
24 #include <cuda/std/span>
25 
26 namespace RMM_NAMESPACE {
27 
46 void prefetch(void const* ptr,
47  std::size_t size,
48  rmm::cuda_device_id device,
49  rmm::cuda_stream_view stream)
50 {
51  auto result = cudaMemPrefetchAsync(ptr, size, device.value(), stream.value());
52  // 当非托管内存传递给 cudaMemPrefetchAsync 时会引发 InvalidValue 错误
53  // 我们应该将其视为一个无操作
54  if (result != cudaErrorInvalidValue && result != cudaSuccess) { RMM_CUDA_TRY(result); }
55 }
56 
68 template <typename T>
69 void prefetch(cuda::std::span<T const> data,
70  rmm::cuda_device_id device,
71  rmm::cuda_stream_view stream)
72 {
73  prefetch(data.data(), data.size_bytes(), device, stream);
74  // end of group
75 
77 
78 } // namespace RMM_NAMESPACE
CUDA 流的强类型非拥有包装器,带有默认构造函数。
定义: cuda_stream_view.hpp:39
constexpr cudaStream_t value() const noexcept
获取被包装的流。
定义: cuda_stream_view.hpp:73
void prefetch(cuda::std::span< T const > data, rmm::cuda_device_id device, rmm::cuda_stream_view stream)
在指定的流上将内存范围预取到指定的设备。
定义: prefetch.hpp:69
CUDA 设备标识符的强类型。
定义: cuda_device.hpp:41
constexpr value_type value() const noexcept
被包装的整数值。
定义: cuda_device.hpp:57