【问题标题】:float2 cufftcomplex to fftw_complexfloat2 cufftcomplex 到 fftw_complex
【发布时间】:2016-11-07 20:44:17
【问题描述】:

我想在我的代码中使用 FFTW 库。我已将 float2 数据类型转换为 fftw_complex。但我明白了:

分段错误

这是我的代码。

test.cu

typedef float2 cplx;
int DoFFT_Operation( cplx* DatafftOneSlice, float* out, int *dim)
{
    cout << "DO CPU FFT RSS Operation" << endl;
    int xdim = dim[0];
    int ydim = dim[1];
    cout << "XDIM " << std::to_string(xdim) << " YDIM " << std::to_string(ydim) << endl;
    // int slicedim = dim[2];
    int bitdim = 1;
    // int sizeOneSlice = xdim*ydim*bitdim;
    int sizeOneImage = xdim*ydim;

    //FFTW PLAN
    fftw_plan pfftw;

    pfftw = fftw_plan_dft_1d(sizeOneImage, reinterpret_cast<fftw_complex*>(DatafftOneSlice), reinterpret_cast<fftw_complex*>(DatafftOneSlice), FFTW_BACKWARD, FFTW_ESTIMATE);

    fftw_execute(pfftw);

    // fft_it(DatafftOneSlice, sizeOneImage);
    // cplx* input, float* out, int N, int x, int y, int bit
    DoSomething(DatafftOneSlice, out, sizeOneImage, xdim, ydim, bitdim);


    fftw_destroy_plan(pfftw);

    fftw_cleanup();

    return 0;
}

如何将 float2 (CUDA) 转换为 fftw_complex?

【问题讨论】:

    标签: cuda fftw


    【解决方案1】:

    我的问题已经解决了,

    我只是把fftw_改成fftwf_,因为fftw_是double数据类型,fftwf_是float数据类型。

    test.cu

    typedef float2 cplx;
    int DoFFT_Operation( cplx* DatafftOneSlice, float* out, int *dim)
    {
        cout << "DO CPU FFT RSS Operation" << endl;
        int xdim = dim[0];
        int ydim = dim[1];
        cout << "XDIM " << std::to_string(xdim) << " YDIM " << std::to_string(ydim) << endl;
        // int slicedim = dim[2];
        int bitdim = 1;
        // int sizeOneSlice = xdim*ydim*bitdim;
        int sizeOneImage = xdim*ydim;
    
        //FFTW PLAN
        fftwf_plan pfftw;
    
        pfftw = fftwf_plan_dft_1d(sizeOneImage, reinterpret_cast<fftwf_complex*>(DatafftOneSlice), reinterpret_cast<fftwf_complex*>(DatafftOneSlice), FFTW_BACKWARD, FFTW_ESTIMATE);
    
        fftwf_execute(pfftw);
    
        // fft_it(DatafftOneSlice, sizeOneImage);
        // cplx* input, float* out, int N, int x, int y, int bit
        DoSomething(DatafftOneSlice, out, sizeOneImage, xdim, ydim, bitdim);
    
    
        fftwf_destroy_plan(pfftw);
    
        fftwf_cleanup();
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2012-11-12
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多