CUDA直接访问设备内存

时间:2015-03-11 23:19:08

标签: memory cuda

我可以直接以某种方式访问​​设备内存吗? E.g。

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

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函数那么高效