首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用matlab编辑器编写MEX函数,用gcc编写

如何使用matlab编辑器编写MEX函数,用gcc编写
EN

Stack Overflow用户
提问于 2021-12-06 00:11:18
回答 1查看 75关注 0票数 0

我想分析一下我在matlab (2021 A)编辑器中编写的mex函数。现在我能做的最好的事情就是使用matlab的tic,toc函数来度量总执行时间,但是我不知道如何使用更详细的诊断工具来评估代码的性能。我发现其他问题响应通过使用visual来讨论这个问题,但是响应似乎使用了较早版本的visual,而不是现在的2019年版本。我也不太熟悉visual,所以我不知道在哪里可以找到他们提到的一些工具,这些工具似乎是从以前的版本中移出的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-06 15:45:20

我决定寻求两种解决方案。第一个是向我的代码中添加计时器,如上面的注释(stackoverflow.com. code /a/47888078/7328782)所建议的那样。然后,可以使用以下代码片段对脚本进行编程,将值输出到matlab控制台:

代码语言:javascript
复制
       std::ostringstream stream;
           stream << "Here is the name/value pair that you entered." << std::endl;
           displayOnMATLAB(stream);
           stream << SIG.rows() << " " << SIG.cols() << std::endl;
           displayOnMATLAB(stream);

并确保在mexFunction主体之外但仍在mexFunction的类定义中包含以下函数定义:

代码语言:javascript
复制
// outputting to matlab console for debugging
    void displayOnMATLAB(std::ostringstream& stream) {
        // Pass stream content to MATLAB fprintf function
        matlabPtr->feval(u"fprintf", 0,
            std::vector<matlab::data::Array>({ factory.createScalar(stream.str()) }));
        // Clear stream buffer
        stream.str("");
    }

然而,简单地对一段c++代码进行计时并不一定能给出您可以对代码进行优化的全部情况。例如,Microsoft的分析工具(详细介绍/概述/教程(包括here) )可以告诉您在给定的行中消耗了多少内存,您的处理器在整个脚本中的使用情况等等。您可能会显式地了解某一行的整洁和效率,或者您可能会发现,相对于瓶颈而言,无害的行可能运行得很快,但实际上所消耗的资源要比它应该的要多得多。我决定简单地将我的mex函数代码移植到visual studio。幸运的是,Matlab支持已经在他们的论坛上发布了一个response,解释了如何做到这一点。到目前为止,它似乎正在使用2021 A和Visual 2019,尽管响应是为Matlab和Visual的旧版本编写的。

(注意,模块定义文件只需要您用我认为的项目名称替换MYFILE语句。另外两行应以书面形式保留)

更新

以上的答案有一些问题有待解决。到目前为止,我发现最好的选择是使用上面的评论中提到的Cris的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70239675

复制
相关文章

相似问题

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