【问题标题】:Ensure that thrust doesnt memcpy from host to device确保从主机到设备的推力不会 memcpy
【发布时间】:2016-05-04 08:57:30
【问题描述】:

我使用了以下方法,希望避免从主机到设备的 memcpy。推力库是否确保在此过程中不会有从主机到设备的 memcpy?

void EScanThrust(float * d_in, float * d_out)
{
     thrust::device_ptr<float> dev_ptr(d_in);
     thrust::device_ptr<float> dev_out_ptr(d_out);

     thrust::exclusive_scan(dev_ptr, dev_ptr + size, dev_out_ptr);
}

这里d_ind_out是使用cudaMalloc准备的,d_in在调用这个函数之前使用cudaMemcpy填充数据

【问题讨论】:

  • 不应该有任何从主机到设备的内存复制。根据您的描述,任何地方都没有主机指针或数据,那么推力如何从主机复制任何东西?无论如何,使用诸如 nvprof --print-gpu-trace ... 之类的分析器来验证这一点很简单

标签: cuda thrust


【解决方案1】:

thrust library 是否确保在此过程中不会有从主机到设备的 memcpy?

您展示的代码不应涉及任何主机->设备复制。 (怎么可能?在您显示的代码中,任何地方都没有引用任何主机数据。)

对于实际代码,使用profiler 验证底层 CUDA 活动很容易,例如:

nvprof --print-gpu-trace ./my_exe

如果您的配置代码序列保持简短,则很容易将底层 CUDA 活动与生成该活动的推力代码对齐。如果您只想分析较长序列的一小段,则可以turn profiling on and off 或使用NVTX markers 在分析器输出中识别所需范围。

【讨论】:

  • 谢谢。我不知道--print-gpu-trace 选项
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2013-07-04
  • 1970-01-01
  • 2018-02-06
  • 2014-04-21
相关资源
最近更新 更多