2016-11-07 8 views
-1

私のコードにFFTWライブラリを使いたい。 float2データ型をfftw_complexにキャストしました。しかし、私は得る:float2 cufftcomplexからfftw_complex

セグメンテーションフォールト

これは私のコードです。 fftw_complexするするfloat2(CUDA)をキャストする方法

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

答えて

1

私はfftw_はdoubleデータ型とfftwf_がfloatデータ型を持っている持っているので、私はちょうど、fftwf_するfftw_を変更しています、

を私の問題を解決しました。

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; 
} 
関連する問題