2016-11-07 3 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_을 가지고 있기 때문에 데이터 유형을 떠 가지고, 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; 
}