I’m trying to implement the following C++ function on CUDA Thrust:
void setFragment( vector< Atom * > &vStruct, vector< Fragment * > &vFragment ) {
Fragment *frag;
int n = vStruct.size();
for( int i = 0 ; i < n-2 ; i++ ){
frag = new Fragment();
frag->index[0] = i;
frag->index[1] = i+1;
frag->index[2] = i+2;
vFragment.push_back( frag );
}
}
To do so, I created a functor to set indices of each Fragment vector in the following way:
struct setFragmentFunctor
{
__device__ __host__
Fragment operator() (const int &i) const {
Fragment * f;
(*f).index[0] = i; (*f).index[1] = i+1; (*f).index[2] = i+2;
return *f;
}
};
void setFragment( vector< Atom * > &vStruct, vector< Fragment * > &vFragment ){
const int N = vStruct.size() -2 ;
thrust::device_vector<Fragment *> dvFragment(N);
thrust::tabulate(dvFragment.begin(), dvFragment.end(), setFragmentFunctor());
vFragment.reserve(N);
thrust::copy(dvFragment.begin(), dvFragment.end(), vFragment.begin());
/* for(auto p : dvFragment) {
Fragment f = p;
std::cout << f.index[0] << " " << f.index[1] << " " << f.index[2] << std::endl;
}
*/
}
However, I’m getting the following error:
…//include/thrust/detail/internal_functional.h(322): error: no suitable conversion function from “Fragment” to “Fragment *” exists