【问题标题】:Profiling a mex-function分析 mex 函数
【发布时间】:2010-11-19 14:17:41
【问题描述】:

我刚刚用 c++ 重写了一个 Matlab 程序作为一个 mex 函数来加快速度,结果非常好。这个优化决定是一个非常非常好的主意,在没有线程的情况下可以将速度提高 20 倍。它仍然让我对 mex 函数花费时间并想要确定可能的瓶颈感到好奇。

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

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

【问题讨论】:

    标签: matlab profiling mex


    【解决方案1】:

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

    【讨论】:

    • 感谢您的提示。这是一个很好的方法。我唯一的问题是 mexFunction 的输入是一大堆大型 matlab 结构。我需要编写代码来在包装器中创建所有这些东西以便能够运行,这让我无法不加思索地一气呵成。
    • 不要跟随。您不能在 matlab 中创建所有结构并将它们保存到 .mat 文件中吗? (即,以前作为 mex 函数的输入参数的任何内容现在都保存在 .mat 文件中,并由新包装器从磁盘读取。
    • 可以使用 valgrind 直接分析您的 mex 文件。检查this答案。
    【解决方案2】:

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

    然后,如果您在 Foo.dll 中使用的函数 Bar 在

    如果你能做到这一点,你可以使用manual call stack sampling technique,尽管它不受欢迎或需要安装工具,但它确实有效。

    【讨论】:

      【解决方案3】:

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

      1. 可以编写一个脚本来加载数据,运行你的 mex 函数,然后退出。然后,您可以让分析器使用该脚本调用 Matlab 可执行文件。当我分析我的 CUDA mex 函数时,这对我使用 nVidia 的视觉分析器很有用。

      2. 如果您在 Visual Studio 中构建了 mex 函数,您应该能够附加到 Matlab 进程,然后运行该函数以进行调试或分析。

      【讨论】:

        猜你喜欢
        • 2012-06-28
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多