将推力ptr从设备复制到主机

时间:2014-03-25 12:37:57

标签: cuda thrust

我有这个:

mykernel<<<....>>>(....,devCols);

    thrust::device_ptr<float> thrust_dev_ptr_Cols(devCols);
    thrust::inclusive_scan( thrust_dev_ptr_Cols , thrust_dev_ptr_Cols  + numbers ,thrust_dev_ptr_Cols);


    float * raw_ptr = (float*) malloc ( numbers   * sizeof(float) );
    thrust::copy(thrust_dev_ptr_Cols , thrust_dev_ptr_Cols + numbers  ,raw_ptr );

    numberCols = *(raw_ptr + (numbers  -1) );

包容性扫描工作正常。 我想将包含扫描的结果复制到主机并使用它来计算numberCols,它只是一个浮点变量。

我正在尝试以上但是numberCols结果为零(正如我所说,包容性扫描工作正常)。

-------------- ---------------- EDIT

任何可能阅读此帖的人。

此代码运行正常!

似乎问题在于结果的呈现。

(感谢Robert Crovella“坚持”这段代码没问题)

1 个答案:

答案 0 :(得分:5)

  

编辑:查看原始问题中的评论和编辑!这个解决方案可能没有必要:

不是(必然)答案,但评论时间太长:我没有看到为什么不能简单地将数据从(原始)指针复制到主机{{1 }}:

cudaMemcpy

编辑:BTW,如果此时仍然知道float* devPtr = thrust::raw_pointer_cast(thrust_dev_ptr_Cols); float* hostPtr = (float*)malloc (numbers*sizeof(float)); cudaMemcpy(hostPtr, devPtr, numbers*sizeof(float), cudaMemcpyDeviceToHost); ,那么您可以直接使用devCols而不是devCols - 这在发布的代码中并不明显