-1

I want to using FFTW library on my code. I have cast float2 data type to fftw_complex. But I get:

Segmentation fault

This is my code.

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;
}

How to casting float2 (CUDA) to fftw_complex?

talonmies
  • 70,661
  • 34
  • 192
  • 269
Khalif21
  • 97
  • 2
  • 11

1 Answers1

1

I have solved my problem,

I am just change fftw_ to fftwf_, because fftw_ has double data type and fftwf_ has float data type.

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;
}
Khalif21
  • 97
  • 2
  • 11