2016-11-07 2 views
-1

Je veux utiliser la bibliothèque FFTW sur mon code. J'ai jeté float2 type de données à fftw_complex. Mais je reçois:float2 cufftcomplex to fftw_complex

Segmentation fault

Ceci est mon 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; 
} 

Comment coulée float2 (CUDA) à fftw_complex?

Répondre

1

J'ai résolu mon problème,

Je suis juste changer fftw_ à fftwf_, car fftw_ a double type de données et fftwf_ FLOAT type de données.

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