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

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

(顺便说一句,我的错误是在我不是管理员的远程系统上使用 g++,我无法编译我的代码来识别对 FFTW 调用的引用。我的 makefile 包括 -L/libdirectory -lfftw3 但我仍然得到某些(不是全部)fftw 函数的 undefined reference )。

这是来源:
#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 年还新的基准!

最佳答案

您没有提到您认为“明显更好”的内容,这可能意味着速度、准确性、易用性、维护、许可等各种方面。但我假设您主要对速度和准确性比较感兴趣。

对于速度方面,GNU GSL documentation的引用部分提到:



所以根据GSL开发者自己的承认,FFTW有望跑赢GSL。多少钱?您可以查看 this speed performance benchmark from FFTW,它表明 GSL 比 FFTW 3 慢约 3-4 倍。请注意,该基准测试尚未使用 g++ 完成(并且似乎没有另一个现成的 gcc 编译器基准来自包含 GSL 的 FFTW 站点),并且很可能在与您的机器不同的机器上,因此您自己的结果可能会有所不同。在精度方面,this accuracy benchmark from FFTW 表明它们在大多数情况下具有相似的精度(FFTW 稍微更准确),但 GSL 往往会表现出真实数据和较大变换尺寸的精度下降。

为了完整起见,我将简要提及,就许可而言,它们都提供 GNU GPL 许可,但 FFTW 还提供非自由许可,对于 GNU GPL 许可有问题的人来说,这可能会更好。此外,为了便于使用和维护,它们都在积极开发中,并提供不同但相似的复杂 API。因此,对于这些方面,一个库相对于另一个库的偏好可能基于 FFT 实现的优点以外的其他因素。

关于g++ - 对于实际变换计算,FFTW 是否明显优于 GSL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36214883/

10-16 05:41