【发布时间】:2013-02-24 18:59:22
【问题描述】:
CUDA C 编程指南指出,在 2.0 以上的计算容量上,主机和设备共享 64 位 linux 上的内存空间。我通过标准运行时 API“cudaMalloc”分配了一块全局内存,但主机似乎无法直接访问它。我是否应该做一些特别的事情以使其可供主机访问?
【问题讨论】:
标签: cuda
CUDA C 编程指南指出,在 2.0 以上的计算容量上,主机和设备共享 64 位 linux 上的内存空间。我通过标准运行时 API“cudaMalloc”分配了一块全局内存,但主机似乎无法直接访问它。我是否应该做一些特别的事情以使其可供主机访问?
【问题讨论】:
标签: cuda
静态或动态分配的设备内存不能从主机直接访问(例如通过取消引用指针)。有必要通过 cuda 运行时 API 调用(如 cudaMemset 或 cudaMemcpy)来访问它。它们共享相同的地址空间 (UVA) 的事实并不意味着它们可以以相同的方式访问。这只是意味着,如果我有一个设备指针已分配在特定位置,例如逻辑地址空间中的 0x00F0000,我不应该期望在同一位置找到主机指针。因此,给定适当的记录保存,I can inspect the numerical value of the pointer 并立即确定它是主机还是设备指针。
在programming guide 中,它声明:
因此,程序通过调用 CUDA 运行时(在编程接口中描述)来管理内核可见的全局、常量和纹理内存空间。这包括设备内存分配和释放以及主机和设备内存之间的数据传输。
【讨论】: