i’m implementing in ANSI C some algorithms to reconstruct volumes from from 2d TAC projections in parallel beam and cone beam geometry.
In the implementation of the projection slice theorem (or fourier slice theorem) to invert the 3d fourier transform i use the CUFFT library to run the algorithm on GPU and FFTW to run the algorithm on CPU
and the i visualize the results with MATLAB.
working with volumes 300300300 (27000000 Voxels) and 350350350 (42875000 Voxels) there aren’t problems.
with bigger volumes 380380380 (54872000 Voxels) you can see from image posted below (Confronto_Ric_Vol_380x380x380_900pr.jpeg) that the reconstruction with cufft (3rd line)
presents some artifacts whereas the reconstruction with FFTW is ok (2nd line).
when i try with volumes 400400400 (64000000 Voxels) the reconstruction with CUFFT returns a volume totally set to zero except in the middle as you can see in the second image posted (Ric_vol_FourierSliceCUFFT_400.jpeg).
i suspect that this issue is caused by the fact that my GPU works only with single-precision floating point whereas FFTW on CPU works with double-precision floating point but i would like to have a more precise answer by NVIDIA, if is possible.
My system is:
Ubuntu 10.04 64bit, CUDA 3.1.1, dev driver 260.24, AthlonX2 7850, 4GB RAM, GeForce250 GTS 1GB VRAM.
Thank’s a lot,