DTolm / VkFFT

Vulkan/CUDA/HIP/OpenCL/Level Zero/Metal Fast Fourier Transform library
MIT License
1.52k stars 91 forks source link

Comparison with other FFT libraries #60

Open eyalroz opened 2 years ago

eyalroz commented 2 years ago

I am soon going to need an FFT library utilizing GPUs. I know about a few: cuFFT, this one, clFFT; and probably there are others. However - I am not seeing a comparison between these different libraries, anywhere. Your README says:

VkFFT aims to provide the community with an open-source alternative to Nvidia's cuFFT library while achieving better performance.

... but I cannot find the indications of better performance; the benchmark results you link to seem to be for VkFFT only. Would you consider adding, say A wiki page or README section with a table comparing various features of VkFFT with other libraries? Mostly aspects other than "GB/sec" performance.

DTolm commented 2 years ago

Hello @eyalroz,

If you scroll down VkFFT main page you can find these two graphs:

fp32_cuda_a100

fp32_hip_mi100

They compare the performance of VkFFT to cuFFT and rocFFT.

If you are interested in analysis of them, feel free to watch my GTC 2021 session explaining them:

https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s31300/

Best regards, Dmitrii

eyalroz commented 2 years ago

@DTolm I missed that somehow... anyway, edited the issue to focus on other aspects of comparison. Will check out the session to understand what the GB/sec mean.

DTolm commented 2 years ago

@eyalroz There is also documentation that explains currently implemented features in VkFFT: https://github.com/DTolm/VkFFT/blob/master/documentation/VkFFT_API_guide.pdf

eyalroz commented 2 years ago

@DTolm : Ok, but it's not a comparison... here is a nice example of a comparison table for several C++ unit testing frameworks. I was hoping for something like that.

DTolm commented 2 years ago

@eyalroz to do such a comparison of features I need to know the structure of other libraries/have their developers verify that there is no better way of implementing the needed features. It is best to be done by a third party, I believe. So far I just state what I have implemented in VkFFT myself in the readme.

I still have some cuFFT/hipFFT comparison of benchmarks scripts in respective folders, which I believe to be equivalent (no one improved the benchmark scripts yet). You can check them as a guide for porting cuFFT/rocFFT initialization to VkFFT.