CUDA直接访问设备内存

莫莎医生

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

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

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

谢谢!

乌玛·阿沙德(Umar Arshad)

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函数有效

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章