[英]Transferring data from CPU to GPU and vice versa where exactly?
我是 CPU 和 GPU 编程的新手。 我知道cudamalloc和cudamemcpy将CPU(主机)数据传输到GPU(设备),但我想确切地知道从哪个内存到哪个内存(如果它确实是内存而不是寄存器,因为我不确定),因为我读到 GPU 有不止一种内存。
cudaMalloc 函数在 GPU 的设备全局内存中分配请求的字节数,并返回指向该内存块的初始化指针。 cudaMemcpy 需要 4 个参数:
例如
void Add(float *A, float *B, float *C, int n)
{
int size = n * sizeof(float);
float *d_A, *d_B, *d_C;
cudaMalloc((void**) &d_A, size);
cudaMemcpy(d_A, A, size, cudaMemcpyHostToDevice);
cudaMalloc((void**) &d_B, size);
cudaMemcpy(d_B, B, size, cudaMemcpyHostToDevice);
cudaMalloc((void**) &d_C, size);
cudaMemcpy(d_C, C, size, cudaMemcpyHostToDevice);
// further processing code
........
cudaMemcpy(C, d_C, size, cudaMemcopyDeviceToHost);
.......
}
cudaMemcpyHostToDevice 和 cudaMemcopyDeviceToHost 是 CUDA 编程环境中定义的常量。
在 CUDA 中,主机和设备具有独立的内存空间。 GPU 具有板载 DRAM,某些板上可能具有超过 4 GB 的 DRAM,它被称为设备全局内存。 要在设备上执行内核,程序员需要分配设备全局内存并将相关数据从主机传输到设备内存。 GPU 处理完成后,结果将传输回主机。 这些操作显示在上面的代码片段中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.