Копирование данных в структуру данных «cufftComplex»?

У меня есть данные, хранящиеся в виде массивов поплавков (одинарная точность). У меня есть один массив для моих реальных данных и один массив для моих сложных данных, который я использую в качестве входных данных для БПФ. Мне нужно скопировать эти данные в cufftComplex данных cufftComplex если я хочу использовать библиотеку CUDA cufft. Из nVidia: « cufftComplex – это комплексный тип данных с плавающей точкой с единственной точностью, состоящий из чередующихся реальных и мнимых компонентов». Данные, которые будут использоваться cufft, хранятся в массивах cufftComplex .

Как быстро скопировать данные из обычного массива C в массив cufftComplex ? Я не хочу использовать цикл for потому что это, вероятно, самый медленный вариант. Я не знаю, как использовать memcpy для массивов данных этого типа, потому что я не знаю, как он хранится в памяти. Благодаря!

    Вы можете сделать это как часть копии устройства host->. Каждая копия берет один из смежных входных массивов на хосте и скопирует их на устройство. Макет хранилища сложных типов данных в 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); 
    Давайте будем гением компьютера.