【问题标题】:CUDA Binding into the Struct of ArraysCUDA 绑定到数组结构中
【发布时间】:2018-09-15 01:00:22
【问题描述】:

我需要澄清该主题答案中给出的代码: CUDA cudaMemcpy Struct of Arrays.

dev_s 和 dev_arr1(2 和 3)都在设备中分配。为什么使用标志 cudaMemcpyHostToDevice?应该是 cudaMemcpyDeviceToDevice。

代码报告如下。

// NOTE: Binding pointers with dev_s
cudaMemcpy(&(dev_s->arr1), &dev_arr1, sizeof(dev_s->arr1),cudaMemcpyHostToDevice);
cudaMemcpy(&(dev_s->arr2), &dev_arr2, sizeof(dev_s->arr2),cudaMemcpyHostToDevice);
cudaMemcpy(&(dev_s->arr3), &dev_arr3, sizeof(dev_s->arr3),cudaMemcpyHostToDevice);

【问题讨论】:

  • 是 C++ 吗?请相应地标记
  • 是的。但对于 C 来说也是如此。参见 devblogs.nvidia.com/unified-memory-in-cuda-6 。函数启动包含这一行:cudaMemcpy(&(d_elem->name), &d_name, sizeof(char*), cudaMemcpyHostToDevice)。但是 d_elem 和 d_name 都是通过 cudamalloc 在设备内部分配的。

标签: arrays struct binding cuda


【解决方案1】:

dev_s 和 dev_arr1(2 和 3)都在设备中分配。

正确。

为什么使用标志 cudaMemcpyHostToDevice?它应该是 cudaMemcpyDeviceToDevice.

不正确。

该代码正在将dev_arr1dev_arr2dev_arr3 的指针 从主机复制到设备。地址本身是 GPU 内存中的地址,但地址值存储在主机内存中,而不是设备内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多