#fft #gpu #kernel #cubecl #gpu-acceleration #rust

gpu-fft

A Rust library for performing Fast Fourier Transform (FFT) and Inverse FFT using GPU acceleration

2 releases

new 0.0.2 Mar 5, 2025
0.0.1 Mar 1, 2025

#310 in Math

Download history 165/week @ 2025-02-28

165 downloads per month

MIT license

26KB
233 lines

GPU-FFT

This project demonstrates the use of the gpu-fft library in Rust to perform Fast Fourier Transform (FFT) and Inverse Fast Fourier Transform (IFFT) on a generated sine wave signal. The application calculates the dominant frequencies in the signal and prints them along with their power.

Table of Contents

Features

  • Generate a sine wave signal.
  • Perform FFT to analyze the frequency components of the signal.
  • Calculate the Power Spectral Density (PSD).
  • Identify and print the dominant frequencies in the signal.
  • Perform IFFT to reconstruct the original signal.

Roadmap

  • Add twiddles algorithm

Requirements

  • Rust (1.84.1 or later)
  • gpu_fft crate

Installation

cargo add gpu_fft -F wgpu

Usage

To run the application, use the following command:

cargo run --example simple -F wgpu

The program will generate a sine wave with a specified frequency and sample rate, perform FFT, and print the dominant frequencies along with their power.

Example Output

====================
    Input with frequency - 10 Hz
====================
1000000 [0.0, 0.06279052, 0.12533323, 0.18738133, 0.2486899, 0.309017, 0.36812457, 0.4257793, 0.4817537, 0.5358268]..
====================
    FFT 3.7933425s
====================
Frequency: 10.00 Hz, Power: 249999.38
Frequency: 958.99 Hz, Power: 122.58
Frequency: 990.00 Hz, Power: 247388.88
====================
    IFFT 4.030771s
====================

Benchmarks

cargo bench

returns

fft     time:   [728.14 µs 748.98 µs 769.46 µs]
        change: [-6.5555% -3.9636% -1.1877%] (p = 0.01 < 0.05)
        Performance has improved.

License

This project is licensed under the MIT License. See the LICENSE file for details.

©️ 2025, Eugene Hauptmann

Dependencies

~41–75MB
~1.5M SLoC