将数据复制到"cufftComplex"数据结构?

pha*_*sel 6 cuda memcpy

我将数据存储为浮点数组(单精度).我有一个数组用于我的实际数据,一个数组用于我的复杂数据,我用它作为FFT的输入.cufftComplex如果我想使用CUDA cufft库,我需要将这些数据复制到数据类型中.来自nVidia:" cufftComplex是一种单精度,浮点复数数据类型,由交错的实部和虚部组成." 袖带操作的数据存储在数组中cufftComplex.

如何快速将数据从普通C数组复制到数组中cufftComplex?我不想使用for循环,因为它可能是最慢的选项.我不知道如何使用memcpy这种类型的数组数据,因为我不知道它是如何存储在内存中的.谢谢!

nju*_*ffa 8

您可以将此作为主机 - >设备副本的一部分.每个副本将采用主机上的一个连续输入数组,并以跨步方式将其复制到设备.CUDA中复杂数据类型的存储布局与Fortran和C++中为复杂类型定义的布局兼容,即作为一个结构,其中实部跟随虚部.

float * real_vec;       // host vector, real part
float * imag_vec;       // host vector, imaginary part
float2 * complex_vec_d; // device vector, single-precision complex

float * tmp_d = (float *) complex_vec_d;

cudaStat = cudaMemcpy2D (tmp_d, 2 * sizeof(tmp_d[0]), 
                         real_vec, 1 * sizeof(real_vec[0]),
                         sizeof(real_vec[0]), n, cudaMemcpyHostToDevice);
cudaStat = cudaMemcpy2D (tmp_d + 1, 2 * sizeof(tmp_d[0]),
                         imag_vec, 1 * sizeof(imag_vec[0]),
                         sizeof(imag_vec[0]), n, cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)