首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析mex函数

分析mex函数
EN

Stack Overflow用户
提问于 2009-08-14 09:08:52
回答 3查看 3.7K关注 0票数 10

我刚刚用c++重写了一个Matlab程序作为一个mex函数来加快速度,得到了很棒的结果。这个优化决策是一个非常非常好的想法,在没有线程的情况下,速度提高了20倍。它仍然让我好奇地想知道mex-function花时间在做什么,并想找出可能的瓶颈。

我正在寻找一种分析mex函数的方法。matlab分析器用处不大,我下载的其他分析器(免费和试用版)都希望运行可执行文件。我不是mex专家,但据我所知,运行mex的唯一方法是在Matlab中运行。mex函数被编译成dll,但被称为.mex64。因此,这个问题应该类似于分析dll。为了编写c++ mex函数,我使用了单用户VS2005 (即,不是团队版本),并且运行在x64平台上。

有没有人知道分析mex函数的好方法?当我在Matlab中启动时,我应该使用什么工具以及如何使用它?或者,有没有其他方法来分析c++代码?

EN

回答 3

Stack Overflow用户

发布于 2009-08-14 09:51:53

我设法做到这一点的唯一方法是分离出执行此工作的函数,并编写一个单独的包装器(而不是mexFunction),该包装器加载带有测试数据的.mat文件,并作为独立的可执行文件运行。然后可以使用例如gprof对其进行分析

票数 8
EN

Stack Overflow用户

发布于 2009-08-15 20:19:07

有没有办法在VC集成开发环境下运行整个过程。就像你可以说“调试DLL Foo.dll,使用Matlab作为启动应用”。

然后,如果您在Foo.dll中使用的函数栏运行时间小于1秒,请确保多次调用它,或者在DLL中添加一个包装函数来多次调用它。

如果你能做到这一点,你就可以使用manual call stack sampling technique,尽管它并不流行,也不需要安装某个工具,但它确实可以正常工作。

票数 3
EN

Stack Overflow用户

发布于 2011-05-24 22:26:52

除了已经提出的很好的解决方案之外,还有两种可能的解决方案。

  1. 可以编写一个脚本来加载数据,运行mex函数,然后退出。然后,您可以让分析器使用该脚本调用Matlab可执行文件。当我分析CUDA mex函数时,这对我使用nVidia的可视分析器很有效。
  2. 如果您在visual Studio中构建了mex函数,您应该能够连接到Matlab进程,然后运行该函数进行调试或分析。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1276834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档