cudaMemcpy-支票

cudaMemcpy-支票,cuda,Cuda,有人能给我一个建议吗。 我正在将一些数据从CPU复制到GPU,我需要知道它是否正确复制。 我可以检查CUDEMMCPY的返回码,但如果我能在GPU上打印阵列,那就更好了 int doCopyMemory(char * Input, int InputBytes) { /* Copying needed data on GPU */ cudaError_t s = cudaMemcpy ( SOURCE_DATA, Input, InputBytes, cudaM

有人能给我一个建议吗。 我正在将一些数据从CPU复制到GPU,我需要知道它是否正确复制。 我可以检查CUDEMMCPY的返回码,但如果我能在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;
}
复制后,我需要查看源数据的内容。
Thx在通知中。

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

您是说您看到复制不成功,但CudamCpy返回cudaSuccess?我从未见过,如果你见过,那么你应该提交一个bug


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

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