2016-11-15 67 views
1

我試圖使用推力:: copy_if壓縮到一個數組與正數謂詞檢查:推力copy_if:不完全類型是不允許

頭文件:file.h:

struct is_positive 
{ 
    __host__ __device__ 
    bool operator()(const int x) 
    { 
    return (x >= 0); 
    } 
}; 

和file.cu

#include "../headers/file.h" 
#include <thrust/device_ptr.h> 
#include <thrust/device_vector.h> 
#include <thrust/copy.h> 


void compact(int* d_inputArray, int* d_outputArray, const int size) 
{ 
    thrust::device_ptr<int> t_inputArray(d_inputArray); 
    thrust::device_ptr<int> t_outputArray(d_outputArray); 
    thrust::copy_if(t_inputArray, t_inputArray + size, d_outputArray, is_positive()); 
} 

我收到錯誤消息的起始號碼:

/usr/local/cuda/include/thrust/system/detail/generic/memory.inl(40): error: incomplete type is not allowed

full errormsg here

如果我只是用副本代替copy_if,代碼編譯好,所以我統治一切,除了謂語is_positive()出來。

預先感謝您的任何幫助或如何調試這樣的推力錯誤的一般技巧。

E:我使用CUDA 7.5

回答

3

對我來說,它看起來像你只是有一個錯字。這:

thrust::copy_if(t_inputArray, t_inputArray + size, d_outputArray, is_positive()); 
               ^

應該是這樣的:

thrust::copy_if(t_inputArray, t_inputArray + size, t_outputArray, is_positive()); 

你已經混有適當的推力裝置指針原始指針,這也是造成麻煩。

+0

那真是令人尷尬。謝謝你,你是對的,就像一個魅力! – mimre