rhaney
December 11, 2019, 8:16pm
1
Hello all,
I am aware that cuFFT doesn’t scale output for inverse/backward FFT. Does one need to scale the forward FFT in cuFFT? I am doing complex-to-complex transforms using cuComplex datatype for single precision.
I would like my cuFFT FFT calls to match what is defined by Python if possible.
Thank you.
no scaling on the forward FFT should be necessary:
$ cat t1614.cu
#include <cufft.h>
#include <iostream>
int main(){
cufftComplex data[] = {{1.0f, 0}, {2.0f, 0}, {3.0f, 0}, {4.0f, 0}};
cufftComplex *d_data;
int ds = sizeof(data)/sizeof(data[0]);
cudaMalloc(&d_data, ds*sizeof(data[0]));
cudaMemcpy(d_data, data, ds*sizeof(data[0]), cudaMemcpyHostToDevice);
cufftHandle plan;
cufftPlan1d(&plan, ds, CUFFT_C2C, 1);
cufftExecC2C(plan, d_data, d_data, CUFFT_FORWARD);
cudaMemcpy(data, d_data, ds*sizeof(data[0]), cudaMemcpyDeviceToHost);
for (int i = 0; i < ds; i++) std::cout << data[i].x << "," << data[i].y << std::endl;
return 0;
}
$ nvcc -o t1614 t1614.cu -lcufft
$ ./t1614
10,0
-2,2
-2,0
-2,-2
$ cat t1.py
import numpy as np
from numpy import fft
d = np.asarray([1.0+0j, 2.0+0j, 3.0+0j, 4.0+0j], dtype = np.complex64)
dfft = np.fft.fft(d)
print(dfft)
$ python t1.py
[ 10.+0.j -2.+2.j -2.+0.j -2.-2.j]
$