通过 Matlab mcc 公开为 C/C++ dll 的 Matlab 数值例程与数学内核库中的等效例程之间是否存在显着的性能差异?
我对线性最小二乘求解器(例如 ?gels 和傅立叶变换例程)的性能特别感兴趣。
Matlab 为它调用的任何东西添加一个层,fftw、lapack、mkl。
如果您编译任何代码的特殊版本,它总是会运行得更快而没有 matlab 开销。
如果您不知道自己在做什么,请使用内置库,如果您是像我这样的老 f77 黑客,我会编写自己的例程,并且仅在我感到懒惰或进行原型设计时才使用内置库一种算法。
对于傅立叶变换例程,我会根据使用场景推荐FFTW 。FFTW 针对一次准备、经常重用的场景进行了优化。因此,如果您需要计算相同类型的变换,例如循环内的 1024x2000(非 2 次幂)变换,FFTW 会更快。如果您需要计算不同的变换类型(尺寸每次都在变化),那么 MKL 会更快。
FFTW 的工作方式是您的软件首先调用准备例程,这可能需要几毫秒到几秒钟(您可以配置它)来检查您的特定平台并选择最优化的例程。然后您可以重复调用具有优化参数的转换例程。
所有其他已知库都具有固定优化,这可能对您的平台是最佳的,也可能不是最佳的。