Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 将数据复制到";袖口复合体“;数据结构?_Cuda_Memcpy - Fatal编程技术网

Cuda 将数据复制到";袖口复合体“;数据结构?

Cuda 将数据复制到";袖口复合体“;数据结构?,cuda,memcpy,Cuda,Memcpy,我将数据存储为浮点数组(单精度)。我有一个数组用于实际数据,一个数组用于复杂数据,我将其用作FFTs的输入。如果我想使用CUDA cufft库,我需要将此数据复制到cufftComplex数据类型中。来自nVidia:“cufftComplex是一种单精度浮点复合数据类型,由交错的实部和虚部组成。”cufft操作的数据存储在cufftComplex的数组中 如何快速将数据从普通C数组复制到cufftComplex数组中?我不想使用for循环,因为它可能是最慢的选项。我不知道如何对这种类型的数组数

我将数据存储为浮点数组(单精度)。我有一个数组用于实际数据,一个数组用于复杂数据,我将其用作FFTs的输入。如果我想使用CUDA cufft库,我需要将此数据复制到
cufftComplex
数据类型中。来自nVidia:“
cufftComplex
是一种单精度浮点复合数据类型,由交错的实部和虚部组成。”cufft操作的数据存储在
cufftComplex
的数组中


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

您可以在主机->设备副本中执行此操作。每个副本都会获取主机上的一个连续输入阵列,并以跨步方式将其复制到设备上。复杂数据类型在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);