确保推力不会从主机到设备

时间:2016-05-03 11:33:37

标签: cuda thrust

我使用了以下方法,期望避免从主机到设备的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填充数据,然后再调用此函数

1 个答案:

答案 0 :(得分:2)

  

推力库是否确保在此过程中从主机到设备不会有memcpy?

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

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

nvprof --print-gpu-trace ./my_exe

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