并行编程工具与性能优化指南
1. 编译与调试建议
在使用英特尔编译器进行编译时,建议采用包含符号和行号的调试版本,且不进行优化,同时生成可重定位的二进制文件(用于二进制插桩)。保留调试符号和行号能让线程检查器直接定位到可能存在问题的源代码行;关闭所有优化可使应用程序代码与原始源代码顺序最为接近。若开启优化时出现线程错误,而关闭优化时无问题,则问题可能出在编译器而非线程代码本身。
由于代码插桩会增加二进制文件大小和执行时的内存使用,更重要的是会延长执行时间,因此应使用小数据集运行线程代码的相关部分,以确保能在合理时间内生成结果。
2. 性能工具概述
性能是并行和并发执行的关键。若无法实现更快的执行时间或在固定时间内处理更大的数据集,那么就需要借助工具来找出性能瓶颈。性能问题可能并非源于线程 API 函数或同步对象,而是数据分配给线程的方式或线程对执行平台有限资源的利用方式。以下介绍几种常用的性能分析工具。
3. 性能分析工具
3.1 gprof
gprof 是基本的 Linux 性能分析工具,用于显示在为性能分析而编译和插桩的应用程序执行期间收集的数据。在 cc 命令中使用 -pg 标志可对 C 代码进行插桩。插桩后的二进制文件运行时会生成一个性能分析数据文件(默认是 gmon.out)。gprof 输出的调用图数据包括每个函数代码的执行时间以及调用子函数的执行时间。默认情况下,函数按执行时间从长到短排列,这为进一步优化或线程并行化提供了函数排名列表。
操作步骤:
1. 使用 cc 命令编译 C 代码时添加 -pg 标志,例如: cc -pg yo
超级会员免费看
订阅专栏 解锁全文
173万+

被折叠的 条评论
为什么被折叠?



