【问题标题】:How come the mex code is running more slowly than the matlab code为什么 mex 代码比 matlab 代码运行得慢
【发布时间】:2013-08-08 05:51:50
【问题描述】:

我使用 matlab 编写了一个包含多次迭代的程序。由于每次迭代中的数据处理都与前一次迭代中的数据处理相关,因此无法对其进行矢量化。

然后我使用内置的 MATLAB 编码器将 matlab 代码转换为 mex,结果速度甚至更低。我不知道我是否需要自己编写 mex 代码,因为 mex 代码似乎没有帮助。

【问题讨论】:

  • 我不认为它是重复的,这个问题是处理在 MEX-MATLAB 网关级别发生减速的特定情况(根据接受的答案,这是在 R2011a 中修复的),加上 OP 甚至没有使用 MX-API 功能。而这个使用 MATLAB coder 进行代码生成。也就是说,这个问题不能以目前的形式得到合理的回答,我们需要看一些代码(例如原始的 MATLAB 代码是什么,生成的 C 代码是什么)..
  • 您是否尝试过在 C 语言中使用 Matlab 的分析器工具和时钟函数来确定哪些部分占用的时间最多? Amro 是对的,请发布一些代码。

标签: c matlab mex performance matlab-coder


【解决方案1】:

如果可以的话,我建议您与 MathWorks 联系,向他们寻求建议。如果您无法做到这一点,那么我建议您在放弃之前仔细阅读文档并尝试您找到的所有内容。

我发现,对实现 MATLAB 代码的方式进行一些小改动,对项目设置进行一些小改动(例如禁用对 Ctrl-C 的响应,对 MATLAB 的外部调用)可以提供生成代码中一个数量级或更多的速度差异。在 MathWorks 之外,没有多少人能够就哪些更改对您来说可能值得/明智给出好的建议。

我应该说我只在一个项目中使用过 MATLAB Coder,而且我根本不是一个专家(实际上甚至不是一个称职的)C 程序员。尽管如此,我还是设法生成了混合后的原始 MATLAB 代码大约 10-15 倍的 C 代码。我通过以下方式实现了这一点:a) 只是摆弄所有不同的设置以查看发生了什么;b) 有条不紊地浏览文档,并查看我的 MATLAB 代码中是否有可以应用我遇到的任何构造的地方(例如coder.nullcopycoder.unroll 等)。当然,您的代码可能会有很大的不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 2014-08-31
    • 1970-01-01
    • 2016-10-23
    • 2011-08-27
    • 2012-11-26
    • 2018-08-16
    相关资源
    最近更新 更多