分析mex函数 我刚刚改写了一个MATLAB程序,用C++作为MEX函数,加快速度,效果极佳。这个优化决策是一个非常好的主意,在没有线程的情况下,速度可以提高20倍。这仍然让我对mex函数花时间做什么感到好奇,并希望找出可能的瓶颈

分析mex函数 我刚刚改写了一个MATLAB程序,用C++作为MEX函数,加快速度,效果极佳。这个优化决策是一个非常好的主意,在没有线程的情况下,速度可以提高20倍。这仍然让我对mex函数花时间做什么感到好奇,并希望找出可能的瓶颈,matlab,profiling,mex,Matlab,Profiling,Mex,我正在寻找一种分析mex函数的方法。matlab分析器没有多大用处,我下载的其他分析器(免费和试用版)都希望运行一个可执行文件。我不是mex大师,但据我所知,运行mex的唯一方法是从Matlab内部。mex函数被编译成dll,但被称为.mex64。所以这个问题应该类似于分析dll。为了编写C++ MEX函数,我使用了一个用户VS2005(即不是团队版本),并且AM运行在X64平台上。 有人知道一种分析mex函数的好方法吗?当我从Matlab开始时,我应该使用什么工具以及如何使用它?或者有没有其他

我正在寻找一种分析mex函数的方法。matlab分析器没有多大用处,我下载的其他分析器(免费和试用版)都希望运行一个可执行文件。我不是mex大师,但据我所知,运行mex的唯一方法是从Matlab内部。mex函数被编译成dll,但被称为.mex64。所以这个问题应该类似于分析dll。为了编写C++ MEX函数,我使用了一个用户VS2005(即不是团队版本),并且AM运行在X64平台上。
有人知道一种分析mex函数的好方法吗?当我从Matlab开始时,我应该使用什么工具以及如何使用它?或者有没有其他方法来分析c++代码

我做到这一点的唯一方法是分离出执行工作的函数,并编写一个单独的包装器(而不是mexFunction),用测试数据加载.mat文件并作为独立的可执行文件运行。然后可以使用gprof对其进行分析。是否有办法在VC IDE下运行整个过程。就像你可以说“调试DLL Foo.DLL,使用Matlab作为启动应用程序”

然后,如果您在Foo.dll中使用的函数栏在<1秒内运行,请确保Matlab多次调用它,或者在dll中添加一个包装函数以多次调用它


如果您能做到这一点,您可以使用,尽管不流行或需要安装工具,但它确实有效。

除了已经建议的好解决方案外,还有两种可能的解决方案

  • 可以编写一个脚本来加载数据,运行mex函数,然后退出。然后,您可以让探查器使用该脚本调用Matlab可执行文件。这对我在分析CUDA mex函数时使用nVidia的visual profiler很有效

  • 如果您在VisualStudio中构建了mex函数,那么您应该能够附加到Matlab进程,然后运行该函数进行调试或分析


  • 谢谢你的提示。这是个好办法。我唯一的问题是mexFunction的输入是一大堆大型matlab结构。我需要编写代码,在包装器中创建所有这些东西才能运行,这在某种程度上阻止了我一次又一次地毫无思想地去做。不要跟着做。难道你不能在matlab中创建所有的结构并将它们保存到一个.mat文件中吗?(即,以前作为mex函数输入参数的任何内容现在都保存在.mat文件中,并由新包装器从磁盘读取。可以使用valgrind直接分析mex文件。请检查答案。