2016-11-07 15 views
-1

Я хочу использовать библиотеку FFTW в своем коде. У меня есть тип данных float2 для fftw_complex. Но я получаю:float2 cufftcomplex to 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?

ответ

1

я решил мою проблему,

Я просто изменить fftw_ к fftwf_, потому что fftw_ имеет двойной тип данных и fftwf_ имеет плывут тип данных.

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