如何对MATLAB编写、GCC编译的MEX函数进行性能分析
MATLAB 2021a GCC编译MEX函数性能分析指南
方案1:GCC工具链原生性能分析(无需Visual Studio)
该方案适配你当前使用的GCC编译环境,操作门槛更低:
- 编译MEX时加入性能插桩参数
执行mex编译命令时添加-g(保留调试符号)和-pg(gprof性能插桩)参数,C语言编译示例:mex -g -CFLAGS='-pg' 你的MEX源文件.c
若编译C++代码,将CFLAGS替换为CXXFLAGS即可。 - 运行MEX生成性能统计文件
在MATLAB命令行正常调用一次目标MEX函数,调用完成后会在MATLAB当前工作目录生成gmon.out性能数据文件。 - 导出精细性能报告
打开GCC对应的命令行终端,切换到gmon.out所在目录,执行命令:gprof MEX二进制文件路径 gmon.out > 性能报告.txt
生成的报告中会包含每个子函数的调用次数、CPU耗时占比、调用层级关系等核心数据,足够定位性能瓶颈。
方案2:Visual Studio 2019 性能分析操作步骤
如果你需要使用VS的图形化分析工具,可按照以下步骤操作,无需适配旧版本教程的逻辑:
- 预编译带调试符号的MEX文件
执行mex命令时添加-g参数保留调试符号,避免性能分析时无法识别函数名称。 - 附加VS到MATLAB进程
打开VS2019,点击顶部菜单栏调试 -> 附加到进程,在进程列表中选中MATLAB 2021a的运行进程,点击「附加」按钮。 - 启动性能探查器
附加成功后,点击顶部菜单栏调试 -> 性能探查器,在配置页勾选需要分析的维度(常规性能瓶颈定位勾选「CPU使用率」即可),点击「开始」按钮启动数据采集。 - 采集并查看性能数据
切回MATLAB窗口调用目标MEX函数,运行完成后切回VS点击「停止收集」,VS会自动生成可视化性能报告,可直接查看各函数的耗时占比、调用栈等精细信息。
注意事项
- 若单次MEX调用耗时过短,可循环调用多次再采集数据,降低统计误差
- 性能分析阶段不要添加
-O等编译优化参数,优化会打乱函数映射关系,导致统计结果不准,定位到瓶颈后再开启编译优化即可 - 优先优化耗时占比超过10%的核心函数,投入产出比更高
内容的提问来源于stack exchange,提问作者drakon101
相关产品推荐
相关产品推荐

