matlab mex c文件,Matlab mex文件与其直接C等效文件相比较慢

在Mathworks上与我的联系人发来一个月的电子邮件,玩弄我自己的代码,并在每个方向分析我的代码后,我得到了答案;然而,这可能是我对技术问题的最不满意的答案:

短版本是“升级到Matlab版本2011a(上周正式发布),此问题现已解决” .

较长的版本考虑了与版本2010b及更早版本中的mex网关相关的开销问题 . 我能够提取的最好的解释是,这个开销不会被评估一次,而是每次函数调用链接库中的另一个函数时我们会付出一点点 .

虽然这种情况发生的原因让我感到困惑,但它至少与我所做的SHARK分析一致 . 当我分析和比较本机应用程序和mex应用程序之间的差异时,会出现重复出现的模式 . 我为应用程序编写的源代码中的函数花费的时间不会改变 . 在本机和mex实现之间进行比较时,在库函数中花费的时间会略微增加 . 用于构建此库的另一个库中的函数会大大增加差异 . 随着我们不断深入,直到我们通过BLAS实施达到目标,时间差继续增加 .

一些使用频繁的BLAS功能是罪魁祸首 . 在本机应用程序中花费大约1%的计算时间的函数在mex函数中的时间为30% .

mex网关的实施似乎在2010b和2011a之间发生了变化 . 在我的Macbook上,本机应用程序大约需要6秒,而mex版本需要6.5秒 . 这是我可以处理的开销 .

至于根本原因,我只能推测 . Matlab的根源在于解释性编码 . 由于mex函数是动态库,我猜测每个mex库在运行时都不知道它被链接到了什么 . 由于Matlab建议用户很少使用mex,然后仅用于小型计算密集型块,我认为很少实现大型程序(例如ODE求解器) . 像我这样的这些项目受到的影响最大 .

我已经描述了一些Matlab函数,我知道这些函数在C中实现然后使用mex编译(特别是在动力学模型上调用sbioaccelerate之后的sbiosimulate,SimBiology工具箱的一部分)并且似乎有一些显着的加速 . 因此,2011a更新似乎比通常的半年升级更广泛 .

对类似问题的其他程序员来说,祝他好运 . 感谢所有有用的建议让我开始朝着正确的方向前进 .

安德鲁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值