1

CUDA C 编程指南指出,在 2.0 以上的计算能力上,主机和设备共享 64 位 linux 上的内存空间。我通过标准运行时 API“cudaMalloc”分配了一块全局内存,但主机似乎无法直接访问它。我应该做一些特别的事情来让它可以被主机访问吗?

4

1 回答 1

2

静态或动态分配的设备内存不能从主机直接访问(例如,通过取消引用指针)。有必要通过 cuda 运行时 API 调用(如 cudaMemset 或 cudaMemcpy)来访问它。它们共享相同的地址空间 (UVA) 的事实并不意味着它们可以以相同的方式访问。这只是意味着,如果我有一个设备指针已分配在特定位置,例如逻辑地址空间中的 0x00F0000,我不应该期望在同一位置找到主机指针。因此,如果有适当的记录,我可以检查指针的数值并立即确定它是主机指针还是设备指针。

编程指南中,它指出:

因此,程序通过调用 CUDA 运行时(在编程接口中描述)来管理内核可见的全局、常量和纹理内存空间。这包括设备内存分配和释放以及主机和设备内存之间的数据传输。

于 2013-03-09T06:00:08.420 回答