【问题标题】:cudaMemcpy - THE CHECKcudaMemcpy - 检查
【发布时间】:2011-05-01 07:25:40
【问题描述】:

有人可以给我以下建议吗? 我正在将一些数据从 CPU 复制到 GPU,我需要知道它是否正确复制。 我可以检查 cudeMemcpy 的返回码,但是如果我可以在 GPU 上打印数组会更好。

int doCopyMemory(char * Input, int InputBytes)
{
        /* Copying needed data on GPU */
    cudaError_t s = cudaMemcpy      ( SOURCE_DATA, Input, InputBytes, cudaMemcpyHostToDevice );
    if (s != cudaSuccess) return 0;
    else return 100;
}

复制后我需要查看 SOURCE_DATA 的内容。 谢谢建议。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    您可以再次将内存 (cudaMemcpyDeviceToHost) 复制回主机上的另一个临时缓冲区,并验证它是否与原始缓冲区匹配。

    【讨论】:

      【解决方案2】:

      你是说你看到复制不成功,但是cudaMemcpy返回cudaSuccess?我从来没有见过,如果你有,那么你应该提交一个错误。

      另一方面,如果您只是出于某种原因(偏执狂?!)进行额外检查,那么您可以直接复制回来。您可以从 GPU 打印(查看计算能力 1.x 中的 cuPrintf,或者如果您有 2.x 设备,则仅使用 printf),但对于您正在做的事情,最好将其复制回主机。

      【讨论】:

        【解决方案3】:

        映射固定内存对于这种调试场景非常有用,因为您可以拥有指向相同内存的主机和设备指针。只是不要忘记在检查内存之前调用 cudaThreadSynchronize() 以确保 GPU 已完成处理(或者,在 Windows Vista 或 Windows 7 上,工作已提交给 GPU)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-04
          • 2011-08-02
          相关资源
          最近更新 更多