Przejdź do treści

FFTW

logo FFTW

Wprowadzenie

FFTW (Fastest Fourier Transform in the West) to zoptymalizowana biblioteka pozwalającą na wykonywanie operacji z dziedziny FFT czyli szybkiej transformacji Fouriera (Fast Fourier Transform). Jest to wydajna implementacja umożliwiająca obliczenia zrównoleglone – zarówno wielowątkowe jak i rozproszone. Przewidziana do obliczeń na CPU.

Dostępność

Biblioteka jest napisana w języku ANSI C. Posiada interfejs dla języka C, naturalnie można z niej korzystać w C++. Udostępnia również (od wersji 3.3) interfejs dla języka Fortran. Poprzez dodatkowe wrappery możliwe jest udostępniane jej API w innych językach. Przykładowo moduł pyFFTW udostępnia możliwości tej biblioteki dla języka Python.

Szczegóły

FFTW to jedna z najbardziej efektywnych bibliotek numerycznych używanych do operacji związanych z szybką transformatą Fouriera FFT. Dokładniej mówiąc, biblioteka umożliwia wyznaczanie jedno- lub wielowymiarowej dyskretnej transformaty Fouriera (DFT). Wspiera różne architektury procesorów (x86, x86_64, ARM). Wielowątkowość w FFTW może być oparta o pthreads (wątki POSIX) lub OpenMP. Obliczenia rozproszone są oparte o MPI.

FFTW często jest używana jako punkt odniesienia dla innych bibliotek z dziedziny FFT (patrz Implementacje ). Z uwagi na jej dostępność, popularność oraz wydajność można uznać ją za bibliotekę referencyjną w tej dziedzinie. Jej najważniejsze cechy to:

  • szybkość – obsługuje rozszerzenia AVX oraz ARM Neon,
  • transformacje o dowolnym rozmiarze,
  • efektywna obsługa wielu transformacji krokowych,
  • transformacje równoległe,
  • przenośność – dostępna dla każdej platformy obsługującej kompilator języka C.

Informacje o wydaniu

Najnowsze wydanie biblioteki to 3.3.10, które zostało opublikowane we wrześniu 2021. Dostępna jest również wersja 2.1.5 z roku 1999, która jest ostatnim wydaniem biblioteki w wersji 2.x, niekompatybilnej z nowszymi wydaniami.

Przykładowy sposób linkowania dla kompilatora GNU GCC

Linkowanie FFTW odbywa się w zależności od rodzaju linkowanej biblioteki:

  1. Wersja szeregowa:
    gcc -o start start.c -lfftw3
    
  2. Wersja z obsługą pamięci współdzielonej poprzez wątki POSIX:
    gcc -o start start.c -lfftw3 -lfftw3_threads
    
  3. Wersja z obsługą pamięci współdzielonej poprzez interfejs OpenMP, może zapewnić lepszą wydajność niż wątki POSIX:
    gcc -o start start.c -lfftw3 -lfftw3_omp
    
  4. Wersja z obsługą pamięci rozproszonej ze wsparciem MPI:
    mpicc -o start start.c -lfftw3 -lfftw3_mpi
    

Implementacje

Poszczególni dostawcy jednostek obliczeniowych dostarczają swoje własne implementacje bibliotek obsługujące algorytmy z dziedziny FFT. Zwykle bazują one na kodzie FFTW lub udostępniają zbliżony interfejs. Implementacje producentów są zoptymalizowane pod kątem własnego sprzętu, dlatego warto porównać wydajność osiąganą przez FFTW z tymi zoptymalizowanymi wersjami.

Dostępne są również implementacje korzystające z akceleratorów GPU.

  • cuFFT – Wersja dla GPU firmy NVIDIA, korzystająca z modelu CUDA.
  • rocFFT – Wersja dla GPU firmy AMD, napisana w modelu HIP. Dostępna jest również wersja hipFFT, będąca interfejsem zarówno do cuFFT jak i rocFFT.

Linki


Ostatnia aktualizacja: 6 grudnia 2023