FFTW在实际变换计算中是否比GSL更优秀?

4

我无法将FFTW链接到我的代码中,以便在我的代码中使用其函数。我已经花了足够的时间在这上面,正在考虑放弃它。

我非常熟悉GSL,并且已经广泛使用线性代数库并取得了良好的结果。 GSL还有一组FFT函数,似乎可以做与FFTW相同的事情。它们一样好吗?还是FFTW显着更好,值得花更多时间来尝试让它工作?

(顺便说一下,我的错误是在一个远程系统上使用g ++时,我无法编译我的代码以识别对FFTW调用的引用。我的makefile包括-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_complexfftw_plan

编辑:我仍然无法让我的Makefile链接静态库。但是,我能够重新编译共享库,并且到目前为止这些库似乎已经起作用了。不过,我仍然希望看到比11年前更新的一些基准测试!


为什么不在一个新问题中发布你的FFTW构建命令和错误消息,看看这里的人能否帮助你解决呢? - Paul R
以下是源代码: #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' - Machinus
请点击[编辑]并将源代码、构建命令和错误信息添加到您的问题中。 - Paul R
好的,已添加到主要问题中。我应该删除这个吗? - Machinus
1个回答

1
您没有提到您认为的“显着更好”的具体含义,这可能意味着速度、准确性、易用性、维护、许可证等各种方面。但我认为您主要关心速度和准确性的比较。
就速度而言,GNU GSL documentation 的参考部分提到:

对于大规模FFT工作,我们建议使用Frigo和Johnson的专用FFTW库。 FFTW库是自优化的-它会自动调整每个硬件平台以实现最大性能。

据GSL开发人员自己承认,预计FFTW的性能将优于GSL。这有多大区别?你可以看一下 FFTW的这个速度性能基准测试,它表明GSL比FFTW 3慢约3-4倍。请注意,此基准测试没有使用g++(FFTW网站上似乎没有其他可用于包括GSL在内的gcc编译器的基准测试),很可能在与您不同的机器上进行,因此您自己的结果可能会有所不同。在精度方面, FFTW的这个精度基准测试表明它们在大多数情况下具有类似的精度(FFTW略微更精确),但是GSL倾向于在实际数据和更大的转换尺寸中展现出精度下降的情况。
为了完整起见,我简要提到许可证方面,它们都提供GNU GPL许可证,但FFTW还提供一个非自由许可证,这对于那些GNU GPL许可证有问题的人来说可能被认为更好。否则,就易用性和维护而言,它们都在积极开发中,并提供不同但同样复杂的API。因此,在这些方面,对一个库的偏好可能基于除FFT实现优点之外的其他因素。

在我发布之前,我查看了那些基准测试。它们似乎是大约15年前的数据,在这段时间里GSL已经进行了重大更新。我希望有人有更近期的GSL使用经验,可能知道它们是否缩小了差距。显然,我期望专门的FFT库表现更好,但如果GSL已经缩小了差距,那么使用它可能是可以接受的,因为它已经适用于我的工作。 - Machinus
2
基准测试包括 GSL 1.7([发布日期为2005-09-14](http://git.savannah.gnu.org/cgit/gsl.git/tag/?id=release-1-7)),GSL 的 FFT 部分只有 [小的更改](http://git.savannah.gnu.org/cgit/gsl.git/log/fft),没有触及核心算法实现。编译器的改进对 GSL 的益处不大,它并不是设计用来充分利用编译器的,相比之下 FFTW 已经积极演进以利用新编译器和架构的优势。 - SleuthEye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接