【问题标题】:Printing values in device in GPU without lanching kernel在 GPU 中打印设备中的值而不启动内核
【发布时间】:2013-01-30 19:36:11
【问题描述】:

我已将数据从 CPU 复制到 GPU:

 cudaMemcpy(d_signal, h_signal, sizeof(int) *1024, cudaMemcpyHostToDevice);

现在我想检查设备内存中的数据是否正确。是否可以在不启动内核且不显式 GPU-CPU 复制的情况下做到这一点?如果是,如何?

【问题讨论】:

  • 这是一个很奇怪的问题。您真的在问“如果 cudaMemcpy API 没有返回错误消息,它真的有效吗?”还是别的什么?
  • @talonmies 你是绝对正确的。实际上,我只是想确保数据已 100% 正确复制。我不想通过从设备显式复制回主机来进行检查,因为我有大量数据。
  • 调试器对于这类检查总是一个好主意,为什么不使用一个呢?
  • 我还是不明白你为什么认为这是必要的。您有几个 API 调用可以准确地告诉您副本何时完成以及副本执行时没有出现错误。为什么你认为有必要在复制后检查值?
  • 如果 memcpy 没有返回错误,但你的程序仍然有问题,你可能希望专注于代码的其他部分,而不是怀疑 mem 传输的正确性。

标签: cuda


【解决方案1】:

如何将数据从设备复制回主机,然后打印出来?

cudaMemcpy(h_signal_out, d_signal, sizeof(int) *1024, cudaMemcpyDeviceToHost);

copy(d_signal_out, d_signal_out+1024, std::ostream_iterator<int>(std::cout," "));
std::cout<<std::endl;

【讨论】:

  • 您的想法是正确的,但是由于我有大量数据,我不想先进行 CPU-GPU 再进行 GPU-CPU 传输。
  • @gpuguy 与将数据一张一张地“打印”到某个人类可读的地方的时间相比,内存传输的时间可以忽略不计。那么问题就变成了你如何定义你的“支票”,这比mem transfer花费的时间要短得多?也许使用一些校验和值是一种选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多