Skip to content

Instantly share code, notes, and snippets.

@keijiro
Last active May 14, 2021 11:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keijiro/9c072105582ef911e04eb0db2cabb220 to your computer and use it in GitHub Desktop.
Save keijiro/9c072105582ef911e04eb0db2cabb220 to your computer and use it in GitHub Desktop.

BurstFFT

BurstFFT is an FFT (Fast Fourier Transform) implementation in high-performance C# with Unity's Burst compiler.

This repository contains the following three variants of Fourier transform implementation.

  • NaiveDFT: Unoptimized naive C# implementation of DFT
  • BurstDFT: Vectorized/parallelized DFT implementation, optimized with Burst
  • BurstFFT: Vectorized Cooley-Tukey FFT implementation, optimized with Burst

You can also enable parallelization on BurstFFT by disabling the SINGLE_THREAD symbol in BurstFft.cs.

Results

Windows Desktop (Ryzen 7 3700X, 3.6GHz, 8 cores)

table

graph

MacBook Pro 15 Late 2013 (Core i7, 2.3GHz, 4 cores)

table

graph

Thoughts and Findings

  • It's quite easy to parallelize DFT with Unity's C# Job System. The more cores it has, the faster it runs.
  • Although the parallelized DFT runs quite fast compared to the unoptimized one, it never beat the single-threaded FFT.
  • The traditional Cooley-Tukey FFT is hard to parallelize in a performant way. The results above show that the 8-core BurstFFT runs slower than the 4-core one.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment