C/C++ Matlab 编译器与 MKL
通过 Matlab mcc 作为 C/C++ dll 公开的 Matlab 数值例程与数学内核库中找到的等效例程之间是否存在显着的性能差异?
我对线性最小二乘求解器的性能特别感兴趣,例如 ?gels 和傅里叶变换例程。
Is there a significant performance difference between Matlab numerical routines exposed as a C/C++ dll through Matlab mcc versus equivalent routines found in Math Kernel Library?
I'm particularly interested in the performance of linear least square solvers such as ?gels and fourier transform routines.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Matlab 向它所称的任何东西添加一个层,fftw、lapack、mkl。
如果您编译任何代码的特殊版本,它总是会运行得更快,而无需 matlab 开销。
如果你不知道自己在做什么,请使用内置库,如果你是像我一样的老 f77 黑客,我会编写自己的例程,并且仅在我感到懒惰或进行原型设计时才使用内置库一种算法。
Matlab adds a layer to anything it calls, fftw, lapack, mkl.
If you compile a special version, of whatever code, it will always run faster without the matlab overhead.
If you don't know what you're doing, use built-in libs, if you're an old f77 hacker like me, I write my own routines and only use the built-in libs when I'm feeling lazy or prototyping an algorithm.
对于傅里叶变换例程,我会根据使用场景推荐 FFTW 。 FFTW 针对一次准备、经常重用的场景进行了优化。因此,如果您需要计算相同类型的变换,例如循环内的 1024x2000(非 2 的幂)变换,FFTW 会更快。如果您需要计算不同的变换类型(尺寸每次都会改变),那么 MKL 会更快。
FFTW 的工作方式是,您的软件首先调用准备例程,这可能需要几毫秒到几秒钟(您可以配置它)来检查您的特定平台并选择最优化的例程。然后您可以重复调用具有优化参数的变换例程。
所有其他已知的库都有固定优化,这对于您的平台可能是最佳的,也可能不是最佳的。
For the Fourier Transform routines, I would recommand FFTW depending on the usage scenario. FFTW is optimized for a prepare-once, reuse-often scenario. So if you need to compute the same kind of transform, let's say a 1024x2000 (non-power-of-2) transform inside a loop, FFTW will be faster. If you need to compute a different transform type (dimensions change every time), then MKL will be faster.
The way FFTW works is that your software first call the prepare routine, which can take from a few ms to a few seconds (you can configure this) to check your particular platform and choose the most optimized routine. Then you can call repeatedly the transform routine with optimized parameter.
All other known libraries have fix-ed-optimization, which may or may not be optimal for your platform.