g++ - 对于实际变换计算,FFTW 是否明显优于 GSL?

标签 g++ fft libraries fftw gsl

我无法让 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的部分提到:

For large-scale FFT work we recommend the use of the dedicated FFTW library by Frigo and Johnson. The FFTW library is self-optimizing—it automatically tunes itself for each hardware platform in order to achieve maximum performance.



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

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

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

相关文章:

Android 图形库,创建消息框

java - 从图像中提取图像

java - 如何在 Eclipse 中将源附加到 Web 应用程序库?

c++ - 在 C++ 中打印 char 字符串时,Linux Ubuntu 中的 g++ 出现段错误,但 Windows 中的 g++/MingW 则不会出现段错误

C# FFT 实现没有产生预期的结果

macos - R包安装在所有机器上成功,但一台

fft - 吉他弦的FFT音高检测

ios - iOS上的FFT/吉他调谐器

C++ 尝试使用#ifndef 和#include 语句

g++ - 自动依赖项不适用于 eclipse CDT C++ 项目