CUDA直接访问设备内存

CUDA accessing device memory directly

我可以通过某种方式直接访问设备内存吗?例如

float* vector;
cudaMalloc(vector, sizeof(float)*100);
vector[53] = 2.345;
cudaFree(vector);

我可以写出丑陋的内核来做这样的事情,但这是一个非常糟糕的决定。

谢谢!

CUDA 6 引入了统一内存,允许您执行此类操作。您需要做的就是将 cudaMalloc 调用更改为 cudaMallocManaged,您应该能够从 GPU 和 CPU 访问内存,而无需显式调用 cudaMemcpy 或启动内核。

float* vector;
cudaMallocManaged(&vector, sizeof(float)*100);
vector[53] = 2.345;
cudaFree(vector);

需要注意的一件事是,这仅在较新的 NVIDIA 卡(sm_30 及更高版本)上受支持,并且仅适用于 64 位 Windows 和 Linux 操作系统。此外,根据您的系统和使用情况,这种类型的访问可能不如传统的 cudaMemcpy 或 cudaMemset 函数有效