在CUDA中为GPU内存中的变量赋值

assigning values to variables in GPU memory in CUDA

本文关键字:变量 赋值 内存 CUDA 中为 GPU      更新时间:2023-10-16

我的问题是我可以显式地将值分配给坐在GPU内存中的变量,还是我总是要使用cudaMemcpy?

例如

我可以这样做吗:

int * a;
cudaMalloc((void**)&a, sizeof(int));
*a = 5;

或者can I only do

int * dev_a;
int a = 5;
cudaMalloc((void**)&dev_a, sizeof(int));
cudaMemcpy(dev_a, &a, sizeof(int) , cudaMemcpyHostToDevice);

简单的回答是,你不能给设备内存赋值。这有两个原因。原因是,设备内存不在ram中,而是物理上在gpu上,您必须通过pcie桥传输值。

更复杂的答案是,从cuda 6开始,你可以使用统一内存,它可以做你想做的事情。请记住,传输确实是在后台进行的,并且需要时间。

https://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6/