{"id":20189921,"url":"https://github.com/tserious/fftbench","last_synced_at":"2026-03-06T05:09:28.636Z","repository":{"id":161922267,"uuid":"449364547","full_name":"TSerious/FFTBench","owner":"TSerious","description":"Compares different FFT implementations","archived":false,"fork":false,"pushed_at":"2025-02-26T09:56:59.000Z","size":181740,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-10T18:27:41.166Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TSerious.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-18T16:36:27.000Z","updated_at":"2025-05-28T04:26:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"33c67cef-de62-4153-981a-4199e3ab2655","html_url":"https://github.com/TSerious/FFTBench","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TSerious/FFTBench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TSerious%2FFFTBench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TSerious%2FFFTBench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TSerious%2FFFTBench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TSerious%2FFFTBench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TSerious","download_url":"https://codeload.github.com/TSerious/FFTBench/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TSerious%2FFFTBench/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278302556,"owners_count":25964520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T03:39:37.159Z","updated_at":"2025-10-04T10:51:19.192Z","avatar_url":"https://github.com/TSerious.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FFTBench\nCompares different FFT implementations for .Net programs.\n\nThanks to Christian Woltering and his arcticle \"Comparison of FFT Implementations for .NET\" [https://www.codeproject.com/articles/1095473/comparison-of-fft-implementations-for-net] which is the base for this project.\n\nFurther thanks to PeterPet for his FFTS project [https://github.com/PetterPet01/FFTSSharp], and Chris Lomont for providing his implementation.\n\nThe following FFT implementations can be compared:\n-\tAccord (https://github.com/accord-net)\n-\tAForge (http://www.aforgenet.com/framework/)\n-\tDSPLib (http://en.dsplib.org/)\n-\tExocortex (https://benhouston3d.com/dsp/)\n-\tMath.NET (https://numerics.mathdotnet.com/)\n-\tNAudio (https://github.com/naudio/NAudio)\n-\tLomont (https://lomont.org/software/misc/fft/LomontFFT.html)\n-\tFFTW (https://fftw.org/)\n-\tFFTS (https://github.com/anthonix/ffts) (https://github.com/PetterPet01/FFTSSharp)\n-\tIntel® oneAPI Math Kernel Library (https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html#gs.avy43w) [MKL]\n\n## Usage\nOpen the solution, compile and start the FFTBench project.\n\n## Explanation\n\nThe name of each FFT implementation might be extended with one or more of the following:\n- \"stretched\" means that the input data is extended so that it fits into an array whose size is a power of two.\n- \"real\" means that a FFT of only real numbers was performed. If this is not part of a name (mostly) a FFT of complex numbers is performed.\n- \"32\" means that only single precision number were used for the FFT. If this is not part of a name (mostly) double precision number were used.\n- \"inplace\" means that the input overwrites the output. More about this can be found here: https://www.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top/fourier-transform-functions/fft-functions/configuration-settings/dfti-placement.html\n\nFor more details please see the well written artice of Christian Woltering: https://www.codeproject.com/articles/1095473/comparison-of-fft-implementations-for-net\n\n## Disclaimer\nFFTW (real) might not be implemented correctly.\nOnly runs on Windows.\n\n## Results\n\nHere are some results.\n![Capture](https://user-images.githubusercontent.com/5380109/187858219-bebac7d5-dd43-4918-a09d-f07f0de7f236.PNG)\nFigure 1: Results for different lengths of input arrays (\"Size\") and 1000 FFT's performed on each array.\n\nTable 1: Results on OS=Microsoft Windows NT 6.2.9200.0, Processor=11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz, ProcessorCount=16, CLR=MS.NET 4.0.30319.42000, Arch=64-bit RELEASE ([results.pdf](https://github.com/TSerious/FFTBench/files/9468389/results.pdf))\n| ||Size| | |Size| | |Size| | |Size| | |Size| | |Size| | |Size| | |\n|:----|-|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|\n| ||256| | |512| | |1024| | |2048| | |4096| | |8192| | |16384| | |\n|Name||Total [ms]|Average [ms]|Average [ticks]|Total [ms]|Average [ms]|Average [ticks]|Total [ms]|Average [ms]|Average [ticks]|Total [ms]|Average [ms]|Average [ticks]|Total [ms]|Average [ms]|Average [ticks]|Total [ms]|Average [ms]|Average [ticks]|Total [ms]|Average [ms]|Average [ticks]|\n|Accord||530|0,01|106,15|1097|0,02|219,55|2267|0,05|453,50|4637|0,09|927,56|9477|0,19|1895,56|19602|0,39|3920,45|40190|0,80|8038,14|\n|AForge||149|0,00|30,00|327|0,01|65,49|699|0,01|139,89|1551|0,03|310,28|4065|0,08|813,03|9045|0,18|1809,18|22624|0,45|4525,00|\n|Math.NET||25|0,00|5,08|42|0,00|8,48|93|0,00|18,64|245|0,00|49,17|536|0,01|107,39|1716|0,03|343,36|3153|0,06|630,67|\n|NAudio||146|0,00|29,20|288|0,01|57,79|596|0,01|119,27|1299|0,03|259,83|2900|0,06|580,02|7372|0,15|1474,55|17590|0,35|3518,01|\n|DSPLib||200|0,00|40,05|419|0,01|83,84|917|0,02|183,45|1848|0,04|369,78|4026|0,08|805,26|8907|0,18|1781,45|19400|0,39|3880,15|\n|Lomont||143|0,00|28,65|288|0,01|57,65|599|0,01|119,89|1319|0,03|263,99|3314|0,07|662,88|7771|0,16|1554,27|19206|0,38|3841,35|\n|Lomont (real)||77|0,00|15,53|162|0,00|32,50|338|0,01|67,79|724|0,01|144,85|1586|0,03|317,22|4061|0,08|812,40|8834|0,18|1766,96|\n|Exocortex||118|0,00|23,61|268|0,01|53,76|588|0,01|117,73|1304|0,03|260,99|3642|0,07|728,44|7979|0,16|1595,93|20945|0,42|4189,19|\n|Exocortex (real32)||65|0,00|13,11|141|0,00|28,29|320|0,01|64,20|679|0,01|135,81|1445|0,03|289,13|3110|0,06|622,14|7822|0,16|1564,50|\n|FFTS_32||17|0,00|3,42|33|0,00|6,75|73|0,00|14,74|172|0,00|34,44|376|0,01|75,39|802|0,02|160,58|1793|0,04|358,70|\n|FFTS_32(real)||11|0,00|2,32|23|0,00|4,72|46|0,00|9,36|104|0,00|20,95|221|0,00|44,34|487|0,01|97,51|1013|0,02|202,63|\n|FFTW||12|0,00|2,49|27|0,00|5,52|64|0,00|12,82|145|0,00|29,09|394|0,01|78,82|909|0,02|181,81|1976|0,04|395,29|\n|FFTW (real)||15|0,00|3,03|35|0,00|7,18|47|0,00|9,40|138|0,00|27,64|229|0,00|45,89|681|0,01|136,26|1561|0,03|312,31|\n|MKL (real)||8|0,00|1,65|16|0,00|3,29|31|0,00|6,34|93|0,00|18,73|212|0,00|42,47|440|0,01|88,02|1069|0,02|213,88|\n|MKL (real,inplace)||8|0,00|1,71|16|0,00|3,34|32|0,00|6,47|77|0,00|15,42|203|0,00|40,75|439|0,01|87,94|1071|0,02|214,23|\n|MKL (real32)||5|0,00|1,02|9|0,00|1,85|17|0,00|3,52|37|0,00|7,42|92|0,00|18,48|218|0,00|43,74|449|0,01|89,93|\n|MKL||27|0,00|5,53|47|0,00|9,60|109|0,00|21,88|590|0,01|118,07|1073|0,02|214,73|1736|0,03|347,22|3278|0,07|655,74|\n|MKL32||28|0,00|5,80|33|0,00|6,61|65|0,00|13,01|449|0,01|89,95|702|0,01|140,49|1073|0,02|214,61|1898|0,04|379,73|\n\n![Capture2](https://user-images.githubusercontent.com/5380109/187877284-676a6c36-4f5d-4d9a-87fb-b1c2e8b3b26f.PNG)\nFigure 2: Results for input data with a size of 200 and 1000 repeats for each FFT. \"stretched\" means that the input data is extended to fit into an array whose size is a power of 2.\n\n## Conclusion\n\nThe FFT libraries with the best performance are FFTS, FFTW and MKL (Intel®). Depending on what data you want to process chosing the right library might at least double the performance. Preparing your data before performing the FFT can also improve your performance, as input size which are a power of 2 are way faster.\n\n## License\nThis project is licensed under the MIT license but certain parts of it (for example FFTW) are published under a different license!\nPlease be aware of this and check if you are using the correct license for your project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftserious%2Ffftbench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftserious%2Ffftbench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftserious%2Ffftbench/lists"}