我可以直接以某种方式访问设备内存吗? E.g。
float* vector;
cudaMalloc(vector, sizeof(float)*100);
vector[53] = 2.345;
cudaFree(vector);
我可以写丑陋的内核来做这样的事情,但这是非常糟糕的决定。
谢谢!
答案 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函数那么高效