Является ли FFTW значительно лучше, чем GSL для реальных вычислений преобразования?

Я не могу заставить FFTW ссылаться на мой код, чтобы использовать его функции в моем коде. Я потратил достаточно времени на это, и я собираюсь отказаться от него.

Я очень хорошо знаком с GSL и широко использовал библиотеки линейной алгебры с хорошими результатами. GSL также имеет набор функций FFT, которые, похоже, выполняют те же функции, что и FFTW. Они так же хороши? Или FFTW значительно лучше и стоит потратить больше времени, чтобы попытаться заставить его работать?

(Кстати, моя ошибка в том, что при использовании g++ в удаленной системе, в которой я не являюсь администратором, я не могу скомпилировать свой код для распознавания ссылок на вызовы FFTW. Мой make-файл включает в себя -L/libdirectory -lfftw3, но я все еще получаю неопределенные ссылки для некоторых (не всех) функций fftw).

Вот источник:
#include "fftw3.h"
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * length);

Вот соответствующая команда компиляции:
g++ -std=c++0x -fPIC ... -lm ... -L/libdirectory -lfftw3

Вот ошибка:
/source.cc: undefined reference to 'fftw_malloc'

Обратите внимание, что компилятор может найти fftw3.h. Я также могу объявить такие объекты, как fftw_complex а также fftw_plan,

РЕДАКТИРОВАТЬ: Я до сих пор не могу получить мой Makefile для связи статической библиотеки. Тем не менее, я смог перекомпилировать с общими библиотеками, и они, кажется, работали до сих пор. Я все еще хотел бы видеть некоторые ориентиры новее, чем 11 лет, хотя!

1 ответ

Вы не упомянули о том, что считаете "значительно лучше", что может означать множество факторов, таких как скорость, точность, простота использования, обслуживание, лицензирование и т. Д. Но я полагаю, что вас в первую очередь интересуют сравнения скорости и точности.

Что касается скорости, в справочном разделе документации GNU GSL упоминается:

Для крупномасштабной работы с БПФ мы рекомендуем использовать специализированную библиотеку FFTW Фриго и Джонсона. Библиотека FFTW самооптимизируется - она ​​автоматически настраивается под каждую аппаратную платформу для достижения максимальной производительности.

Таким образом, согласно собственному признанию разработчиков GSL, ожидается, что FFTW превзойдет GSL. Сколько так? Вы можете взглянуть на этот тест производительности FFTW, который показывает, что GSL примерно в 3-4 раза медленнее, чем FFTW 3. Обратите внимание, что этот тест не был выполнен с g++ (и, похоже, нет другого легкодоступного ориентира для gcc компиляторы с сайта FFTW, который включает GSL), и, скорее всего, на машине, отличной от вашей, поэтому ваши собственные результаты могут отличаться. Что касается точности, этот эталон точности от FFTW предполагает, что они имеют схожую точность для большинства случаев (с FFTW, немного более точной), но что GSL имеет тенденцию демонстрировать снижение точности для реальных данных и больших размеров преобразования.

Для полноты картины я кратко упомяну, что в части лицензирования они оба предлагают лицензию GNU GPL, но FFTW также предлагает несвободную лицензию, которая может быть сочтена лучше для кого-то, для кого лицензия GNU GPL проблематична. В противном случае для простоты использования и обслуживания они активно разрабатываются и предлагают разные, но одинаково сложные API. Таким образом, для этих аспектов предпочтение одной библиотеки над другой может основываться на других факторах, которые заслуживают реализации FFT.

Другие вопросы по тегам