gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:31:06 28 4
gpt4 key购买 nike

我将数据存储为浮点数数组(单精度)。我有一个数组用于我的真实数据,一个数组用于我的复杂数据,我将其用作 FFT 的输入。我需要将此数据复制到 cufftComplex数据类型,如果我想使用 CUDA cufft 库。来自 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);

关于cuda - 将数据复制到 "cufftComplex"数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535182/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com