我试图找到数组中的最小元素:
thrust::device_ptr<float> devPtr(d_ary);
int minPos = thrust::min_element(devPtr.begin(), devPtr.end()) - devPtr.begin();
编译时我遇到了上述错误。
我该如何解决这个问题?感谢
答案 0 :(得分:3)
您确定的具体错误是因为设备指针不是容器,因此没有.begin()
或.end()
成员。
您的devPtr
不是容器,它是Thrust可用的设备指针。
你包装了一个原始指针来创建devPtr,而原始指针随身携带它并不知道它所指向的数据区域的大小。
指针没有像开始和结束的成员。
您可以通过以下方式解决问题:
以下是一些示例代码,与上一个概念相符:
#include <thrust/device_ptr.h>
#include <thrust/extrema.h>
#define N 256
int main()
{
float *d_a;
cudaMalloc((void **) &d_a, N*sizeof(float));
thrust::device_ptr<float> dPbeg(d_a);
thrust::device_ptr<float> dPend = dPbeg + N;
thrust::device_ptr<float> result = thrust::min_element(dPbeg, dPend);
}
有一个thrust quickstart guide可能会引起关注。 (为了清楚起见,我没有用任何错误检查包装cudaMalloc调用。最好用错误检查来包装cuda调用。)