我有这个:
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“坚持”这段代码没问题)
答案 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
- 这在发布的代码中并不明显