1
我試圖找到最小的數組中的元素:推力:: device_ptr <float>沒有成員「開始」
thrust::device_ptr<float> devPtr(d_ary);
int minPos = thrust::min_element(devPtr.begin(), devPtr.end()) - devPtr.begin();
和編譯時,我得到上述錯誤。
我該如何解決這個問題?謝謝
我試圖找到最小的數組中的元素:推力:: device_ptr <float>沒有成員「開始」
thrust::device_ptr<float> devPtr(d_ary);
int minPos = thrust::min_element(devPtr.begin(), devPtr.end()) - devPtr.begin();
和編譯時,我得到上述錯誤。
我該如何解決這個問題?謝謝
您確定的具體錯誤是因爲設備指針不是容器,因此沒有.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調用。)
現在我得到了不同的錯誤:/ usr/local/cuda/include /推力/細節/設備/ cuda/reduce.inl:224:錯誤:'sizeof'到'不完整類型'推力的無效應用::詳細信息:: STATIC_ASSERTION_FAILURE' –
user11869
它看起來與這個問題完全無關。如果你開始一個新問題併發布你的代碼,最好是能夠重現你的錯誤的最小的完整樣本,這可能是最好的。 –
@ user11869:用'nvcc'編譯'.cu'文件,而不是'.cpp'文件。 –