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

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

Я очень хорошо знаком с GSL и широко использовал библиотеки линейной алгебры с хорошими результатами. GSL также имеет набор функций БПФ, которые делают то же самое, что и 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 лет!


person Machinus    schedule 25.03.2016    source источник
comment
Почему бы не опубликовать свои команды сборки и сообщения об ошибках для сборки FFTW в новом вопросе и посмотреть, могут ли люди здесь помочь вам исправить это?   -  person Paul R    schedule 25.03.2016
comment
Вот исходник: #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'   -  person Machinus    schedule 25.03.2016
comment
Пожалуйста, нажмите редактировать и добавьте к своему вопросу исходный код, команду сборки и сообщение об ошибке.   -  person Paul R    schedule 25.03.2016
comment
Хорошо, добавлено к основному вопросу. Должен ли я удалить это?   -  person Machinus    schedule 26.03.2016


Ответы (1)


Вы не упомянули то, что вы считаете «значительно лучше», что может означать множество вещей, от скорости, точности, простоты использования, обслуживания, лицензирования и т. д. Но я предполагаю, что вас в первую очередь интересуют сравнения скорости и точности.

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

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

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

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

person SleuthEye    schedule 25.03.2016
comment
Я посмотрел на эти тесты, прежде чем опубликовать. Кажется, им около 15 лет, и за это время GSL претерпела крупные релизы. Я надеялся, что найдется кто-то с более свежим опытом работы с GSL, который мог бы знать, закрыл ли он пробел. Я ожидаю, что специализированная библиотека БПФ будет работать лучше, но если GSL сгладит разницу, то ее можно будет использовать, поскольку она уже работает для меня. - person Machinus; 26.03.2016
comment
Тест включает GSL 1.7 (дата выпуска 2005 г.). -09-14), а часть GSL для БПФ имеет только небольшие изменения, не затрагивающие реализацию основного алгоритма. Маловероятно, что улучшения в компиляторе принесли пользу GSL (который не был предназначен для использования) значительно больше, чем FFTW (который активно развивался, чтобы использовать преимущества нового компилятора и архитектуры). - person SleuthEye; 26.03.2016