【发布时间】:2014-10-30 18:00:06
【问题描述】:
我知道情况并非总是如此,但 MEX 函数不应该提高代码效率,尤其是计算效率吗?
我已使用编码器工具包在 MATLAB 中对 expm 函数进行 MEX。由于该函数执行大量矩阵计算,因此我期待看到效率的显着提高。
但是,如下图所示,我没有看到时间上有太大的改善:
X 轴:expm 函数的另一个迭代
Y 轴:该函数的运行时间
蓝线:常规expm函数调用
红线: MEX'ed expm 函数调用
MEX 版与普通版如此相似是否有原因?有没有办法提高速度?我使用tic 和toc 收集有关运行时间的数据。
【问题讨论】:
-
1) 您能否报告平均值/平均值,或绘制它们差异的直方图? 2)你用来测试速度的矩阵有多大?如果增加矩阵的大小会怎样?
-
您会发现,在大多数情况下,算法是最重要的因素。在您的测试中,加载/使用 mex 的开销很可能等于 Matlab 中函数的开销,但如果没有 a) matlab 的工作副本和 b) 有关您的测试的更多信息,我无法判断。根据我的经验,Matlab 函数总体上都得到了很好的优化,并且某些 matlab 函数在没有一些手动优化的情况下无法转换为高效的 C/Cpp。
-
@George 平均而言,矩阵的大小从 12x12 到 18x18 不等,但这是平均水平。也有异常值。
-
即使编译版本比未编译版本更有效(尽管我对此表示怀疑,请参阅 Mikael 的回答),但由于开销,我不希望它在如此小的情况下表现更好调用 MEX 函数。您是否尝试过使用更大的矩阵,比如数百或数千行/列?
-
@GBoggs:它还取决于您在 MATLAB Coder 中用于生成 C 代码的设置(您是否使用了固定大小的矩阵?项目设置中还有一个“速度”选项卡,您可以在其中启用某些优化)。您应该发布有关如何编译函数的更多详细信息,以及用于基准测试的代码...
标签: c++ performance matlab mex