【问题标题】:Copying data to "cufftComplex" data struct?将数据复制到“cufftComplex”数据结构?
【发布时间】:2012-11-12 04:17:16
【问题描述】:

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

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

【问题讨论】:

    标签: cuda memcpy


    【解决方案1】:

    您可以将此作为主机-> 设备副本的一部分。每个副本将获取主机上的一个连续输入数组,并以跨步方式将其复制到设备。 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      相关资源
      最近更新 更多