【问题标题】:cudaMalloc failing for 2D array, error code 11二维数组的 cudaMalloc 失败,错误代码 11
【发布时间】:2011-12-27 06:04:20
【问题描述】:

我正在尝试在 CUDA 中实现一个二维数组,如下所示:

u_int32_t **device_fb = 0;
u_int32_t **host_fb = 0;

cudaMalloc((void **)&device_fb, (block_size*grid_size)*sizeof(u_int32_t*));

for(int i=0; i<(block_size*grid_size); i++)
{
    cudaMalloc((void **)&host_fb[i], numOpsPerCore*sizeof(u_int32_t));
}
cudaMemcpy(device_fb, host_fb, (block_size*grid_size)*sizeof(u_int32_t*), cudaMemcpyHostToDevice);

在测试中,host_fb 为 NULL。此外,当我获取cudaMalloc((void **)&amp;host_fb[i], numOpsPerCore*sizeof(u_int32_t)); 第一次迭代的错误代码时,我得到cudaErrorInvalidValue。我究竟做错了什么?谢谢!

【问题讨论】:

    标签: c arrays cuda nvidia


    【解决方案1】:

    GPU 上的 2D 数组很难操作,您必须考虑到 GPU 和 CPU 地址空间不兼容。让我指出一些观察:

    1)你一开始没有初始化**host_fb数组,所以后续在for循环中调用这个数组的元素是错误的。

    2) 您应该使用 cudaMallocHost(或类似的东西)来分配将由 CPU 访问的内存

    除此之外我无法帮助你,因为你没有告诉我们代码应该完成什么。

    【讨论】:

      【解决方案2】:

      嗯,您的代码存在一些问题。看看下面代码中的cmets。

      在数组的大小上,应该使用sizeof(u_int32_t),而不是指针类型。 很难发现错误,因为这两种类型的大小在某些平台上可能会意外相同,但在其他平台上却不会。

      size_t arr_size = (block_size*grid_size) * sizeof(u_int32_t);
      
      // host array wasn't allocated at all.
      host_fb = malloc(arr_size);
      cudaMalloc((void **)&device_fb, arr_size);
      
      // the loop is unnecessary, you have now an allocated 2D table    
      
      cudaMemcpy(device_fb, host_fb, (block_size*grid_size)*sizeof(u_int32_t*), cudaMemcpyHostToDevice);
      

      我使用了malloc 函数,因为cudaMallocHostcudaHostAlloc 都分配了设备可访问的页面锁定主机内存,这可能不是您想要的。如果存在性能问题,您可以使用它们,因为它们都强制分配的内存被分页。有关详细信息,请参阅相应的文档。

      【讨论】:

      • 我尝试了您的代码,但我认为我仍然需要在 host_fb 上进行循环,否则稍后尝试访问 host_fb[0] 时会出现总线错误。我重新添加了循环(以及您的一些更改),它似乎有效,但我不确定它是否正确。
      • 总线错误是什么意思?你什么时候得到它?不是你之前得到的cudaErrorInvalidValue(错误代码11)吗?
      • 是的,以前错误出现在 cudaMalloc 上(错误代码 11)。现在,当我尝试在 cuda-gdb 中运行它时,它会出现总线错误并说它无法访问 host_fb[0][0] 的内存。
      猜你喜欢
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2017-07-20
      相关资源
      最近更新 更多