Cuda 访问尖点的实部和虚部::复向量

Cuda 访问尖点的实部和虚部::复向量,cuda,mex,thrust,cusp-library,Cuda,Mex,Thrust,Cusp Library,我需要访问cusp::复数类型向量的实部和虚部,以便通过mex将其发送到matlab变量。 如何分别访问类型向量的实部和虚部 cusp::array1d<cusp::complex<double>,cusp::host_memory> x; 我想知道如何使用推力来访问复杂数组的实部和虚部 cusp::array1d<cusp::complex<double>,cusp::host_memory> x; cusp::array1

我需要访问cusp::复数类型向量的实部和虚部,以便通过mex将其发送到matlab变量。 如何分别访问类型向量的实部和虚部

    cusp::array1d<cusp::complex<double>,cusp::host_memory> x;
我想知道如何使用推力来访问复杂数组的实部和虚部

    cusp::array1d<cusp::complex<double>,cusp::host_memory> x; 
cusp::array1d x;

通过mxArray的相应实指针和虚指针进行传输。直接,这样我就可以避免循环。

好的,我用函子解决了它,我做了两个函子(不确定这是否叫做函子,但无论如何)

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu{
返回val.real();
}
__主机\双imagpart(cusp::复杂val){
返回值imag();
}
并使用推力::变换

    cusp::array1d<double,cusp::host_memory>xreal(n);
    cusp::array1d<double,cusp::host_memory>ximag(n);
    thrust::transform(x.begin(),x.end(),xreal.begin(),realpart);
    thrust::transform(x.begin(),x.end(),ximag.begin(),imagpart);
cusp::array1dxreal(n);
尖点::阵列1dximag(n);
转换(x.begin(),x.end(),xreal.begin(),realpart);
转换(x.begin(),x.end(),ximag.begin(),imagpart);

它工作了,然后我可以使用推力::复制到指针来正常填充它。它不适用于设备和内存阵列。我尝试将\uuuu设备\uuuuu添加到函子中,但没有成功。

这不是真正的编程问题。你只想知道我该怎么做。没有任何代码有任何问题。这样stackoverflow就不起作用了。所以我投了反对票,我不是一个CUSP用户。查看CUSP库的
complex.h
头文件。通过快速查看我的理解是,您可以访问实部和虚部,如
z.real()
z.imag()
    cusp::array1d<cusp::complex<double>,cusp::host_memory> x; 
    __host__ double realpart(cusp::complex<double> val){
        return val.real();
    }

    __host__  double imagpart(cusp::complex<double> val){
        return val.imag();
    }
    cusp::array1d<double,cusp::host_memory>xreal(n);
    cusp::array1d<double,cusp::host_memory>ximag(n);
    thrust::transform(x.begin(),x.end(),xreal.begin(),realpart);
    thrust::transform(x.begin(),x.end(),ximag.begin(),imagpart);