【发布时间】:2019-04-02 23:15:48
【问题描述】:
我见过 CUDA 程序,您在设备上分配内存,对其进行操作,然后将其复制回主机,如下所示:
float* h_a = (float*) malloc(numBytes);
float* d_a = 0;
cudaMalloc((void**) &a, numBytes);
cuda_function<<< N/blockSize, blockSize>>>(d_a);
cudaMemcpy(d_a, h_a, numBytes, cudaMemcpyDeviceToHost);
但是我也看到了 CUDA 程序仅在其引用被传递给它的内存上运行的代码,如下所示:
__global__ void cuda_function(int* a)
{
...<operate on a>...
}
int main()
{
cuda_function<<<N/256, 256>>>(a)
}
这两种方法有什么不同?
谢谢!
【问题讨论】:
-
您可能需要考虑一个基本的 C 教程。存在设备和主机内存的事实是一个特殊的 CUDA 功能,但您要问的是 C、内存管理和指针的基本基础
-
区别在于一个可以工作,一个不能。我将把它作为练习留给读者来猜测哪个是哪个.....
标签: c parallel-processing cuda