CUDA 内存操作¶
-
Tensor new_managed_tensor(const Tensor &self, const std::vector<std::int64_t> &sizes)¶
使用统一管理内存 (UVM) 分配一个
at::Tensor
。然后将其首选存储位置设置为 CPU(主机内存),并在 CUDA 设备上建立到主机内存的映射。- 参数:
self – 输入张量
sizes – 目标张量维度
- 返回:
一个由 UVM 支持的新张量
-
Tensor new_managed_tensor_meta(const Tensor &self, const std::vector<std::int64_t> &sizes)¶
用于
Meta
分派键的占位符操作。- 参数:
self – 输入张量
sizes – 目标张量维度
- 返回:
一个新的空张量
-
Tensor new_host_mapped_tensor(const Tensor &self, const std::vector<std::int64_t> &sizes)¶
使用主机映射内存分配
at::Tensor
。- 参数:
self – 输入张量
sizes – 目标张量维度
- 返回:
一个由主机映射内存支持的新张量
-
Tensor new_unified_tensor(const Tensor &self, const std::vector<std::int64_t> &sizes, bool is_host_mapped)¶
使用统一管理内存 (UVM) 或主机映射内存分配
at::Tensor
。- 参数:
self – 输入张量
sizes – 目标张量维度
is_host_mapped – 是否分配 UVM 或主机映射内存
- 返回:
一个由 UVM 或主机映射内存支持的新张量,取决于
is_host_mapped
的值
-
Tensor new_unified_tensor_meta(const Tensor &self, const std::vector<std::int64_t> &sizes, bool is_host_mapped)¶
用于 new_unified_tensor 的
Meta
分派键占位符操作- 参数:
self – 输入张量
sizes – 目标张量维度
is_host_mapped – 是否分配 UVM 或主机映射内存
- 返回:
一个由 UVM 或主机映射内存支持的新张量,取决于
is_host_mapped
的值
-
Tensor new_vanilla_managed_tensor(const Tensor &self, const std::vector<std::int64_t> &sizes)¶
使用统一管理内存 (UVM) 分配一个
at::Tensor
,但允许其首选存储位置自动管理。- 参数:
self – 输入张量
sizes – 目标张量维度
- 返回:
一个由 UVM 支持的新张量
-
bool uvm_storage(const Tensor &self)¶
检查张量是否使用 UVM 分配(无论是 CPU 张量还是 GPU 张量)。
- 参数:
self – 输入张量
- 返回:
如果张量使用 UVM 分配,则为
true
,否则为false
-
bool is_uvm_tensor(const Tensor &self)¶
检查张量是否使用 UVM 分配,但**不是** CPU 张量。
- 参数:
self – 输入张量
- 返回:
如果张量是非 CPU 张量且使用 UVM 分配,则为
true
,否则为false
-
Tensor uvm_to_cpu(const Tensor &self)¶
将 UVM 张量转换为 CPU 张量。
- 参数:
self – 输入张量
- 返回:
一个新的张量,实质上是将输入从 UVM 移动到 CPU
-
Tensor uvm_to_device(const Tensor &self, const Tensor &prototype)¶
创建一个新的 UVM 张量,该张量与
prototype
共享相同的设备和 UVM 存储。- 参数:
self – 输入张量
prototype – 目标张量,其设备和 UVM 存储将与新张量共享
- 返回:
一个新的张量,该张量与
prototype
共享相同的设备和 UVM 存储。
-
void uvm_cuda_mem_advise(const Tensor &self, int64_t cuda_memory_advise)¶
对 UVM 张量的存储调用
cudaMemAdvise()
。cudaMemoryAdvise
枚举在 Python 侧的fbgemm_gpu.uvm
命名空间中可用;有关有效值,请参阅那里的文档。另请参阅
有关
cudaMemoryAdvise
枚举的更多信息,请参阅此处。- 参数:
self – 输入张量
cuda_memory_advise –
cudaMemoryAdvise
枚举值,整数形式
-
void uvm_cuda_mem_prefetch_async(const Tensor &self, std::optional<Tensor> device_t)¶
对 UVM 张量的存储调用
cudaMemPrefetchAsync()
,将内存预取到目标设备。另请参阅
有关
cudaMemPrefetchAsync()
的更多信息,请参阅此处。- 参数:
self – 输入张量
device_t – [可选] 目标张量,其设备将作为预取目的地
-
void uvm_mem_advice_dont_fork(const Tensor &self)¶
对 UVM 张量的存储调用
madvise(...MADV_DONTFORK)
。这是一个解决 UVM 内核驱动在 fork 时将 UVM 存储页面从页表中解除映射,导致下次 CPU 访问变慢的问题的临时方案。另请参阅
有关
madvise()
的更多信息,请参阅此处。- 参数:
self – 输入张量
-
Tensor uvm_to_cpu_clone(const Tensor &self)¶
将 UVM 张量的连续存储(
uvm_storage(t)
为真)复制到一个新的 CPU 张量中。复制操作使用单线程的memcpy()
。- 参数:
self – 输入张量
- 返回:
包含从 UVM 张量复制的数据的新 CPU 张量
将张量内容复制到共享内存。这对于强制 GPU 内存的初始化状态很有用,这与测试相关。
- 参数:
self – 输入张量
将 nan 值复制到 GPU 的共享内存中。这对于调试或测试很有用。
- 参数:
self – 输入张量