我想在我的项目中结合thrust
库和cufft
。为了测试,我写了以下代码:
int length = 5;
thrust::device_vector<thrust::complex<double> > V1(length);
thrust::device_vector<cuDoubleComplex> V2(length);
thrust::device_vector<thrust::complex<double> > V3(length);
thrust::sequence(V1.begin(), V1.end(), 1);
thrust::sequence(V2.begin(), V2.end(), 2);
thrust::transform(V1.begin(), V1.end(), V2.begin(), V3.begin(), thrust::multiplies<thrust::complex<double> >());
cufftHandle plan;
cufftPlan1d(&plan, length, thrust::complex<double>, 1);
cufftExecZ2Z(plan, &V1, &V2, CUFFT_FORWARD);
for (int i = 0; i < length; i++)
std::cout << V1[i] << ' ' << V2[i] << ' ' << V3[i] << '\n';
std::cout << '\n';
return EXIT_SUCCESS;
很不幸,cufft
只接受像 cuDoubleComplex *a
这样的数组,而 thrust::sequence
只能正常工作于 thrust::complex<double>
向量。当编译上述代码时,我收到了两个错误:
error : no operator "=" matches these operands
error : no operator "<<" matches these operands
第一个指的是
thrust :: sequence(V2.begin(),V2.end(),2);
,而第二个指的是std :: cout << V1 [i] <<' '<< V2 [i] <<' '<< V3 [i]<< '\ n';
。如果我注释掉V2
,一切都正常。thrust :: device_vector >
和cuDoubleComplex *
之间是否存在转换?如果没有,该如何组合它们?
UnaryOperation
和thrust::tabulate
代替thrust::sequence
怎么样? - m.s.