发布于 2021-12-06 15:45:20
我决定寻求两种解决方案。第一个是向我的代码中添加计时器,如上面的注释(stackoverflow.com. code /a/47888078/7328782)所建议的那样。然后,可以使用以下代码片段对脚本进行编程,将值输出到matlab控制台:
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的类定义中包含以下函数定义:
// 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的方法。
https://stackoverflow.com/questions/70239675
复制相似问题