有人可以给我一个建议。 我正在将一些数据从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的内容。 请咨询。
答案 0 :(得分:1)
您可以再次将内存(cudaMemcpyDeviceToHost
)复制回主机上的另一个临时缓冲区,并验证这是否与原始缓冲区匹配。
答案 1 :(得分:1)
你是说你看到副本不成功,但cudaMemcpy会返回cudaSuccess吗?我从来没有见过,如果你有,那么你应该提交一个错误。
另一方面,如果您因某种原因(偏执狂?!)只是在做其他检查,那么您可以复制回来。您可以从GPU打印(在计算能力1.x中查看cuPrintf,或者如果您有2.x设备则只使用printf)但是对于您正在做的事情,最好将其复制回主机。
答案 2 :(得分:0)
映射的固定内存对于此调试方案非常有用,因为您可以拥有指向相同内存的主机和设备指针。只是不要忘记调用cudaThreadSynchronize()以确保GPU在检查内存之前已完成处理(或者,在Windows Vista或Windows 7上,工作已提交给GPU)。