使用Intel编译器(5)PGO(3)评测函数或循环执行时间(Profile Function or Loop Execution Time)
来源:互联网 发布:09淘宝店 编辑:程序博客网 时间:2024/04/25 09:47
(1) Profile Function or Loop Execution Time
Intel编译器的除了使用profile进行PGO优化之外,也提供了对程序的函数或循环执行时间进行profile的功能。之所以把这一功能和PGO优化放在一个部分,是因为它们有一些相同之处:都是通过编译器在编译时给生成的可执行文件中插入辅助代码(测试代码,instrumentation code),对于PGO,这些辅助代码会在运行的时候产生dyn文件以供编译器优化使用,对于这里的执行时间的测试,这些辅助代码的作用就是用于收集代码中不同位置的时间消耗数据,这些数据就能帮助我们标识代码的热点(hotspots),从而对特定部分进行优化。
注意:如果使用过VTune等性能分析工具,就对热点这些概念很熟悉了。那么这里的功能是编译器的功能,而VTune是不要求必须使用Intel编译器的,它们的作用有些类似,但是实现方式不同,编译器的这个功能是通过在可执行文件中插入了辅助代码,而VTune是通过采样来收集数据的。
(2) 函数或循环执行时间评测的级别
根据插入的辅助代码的不同,编译器对profile execution time分为三个级别:
•function level函数级别
•function and loop level函数和循环级别
•loop body level循环体级别
很显然,三个级别收集的数据是不断深入的。
(4) Profile Execution time的使用和输出
要使用此功能,只需要在编译的时候使用相应的选项告诉编译器进行什么级别的测试,编译器就会生成一个辅助的可执行文件,执行可执行文件会输出相应的信息。需要注意的是:
1. 此功能只能用于单线程程序的测试。这是由于其工作的原理是插入辅助代码,读取CPU的时间戳,对于多线程代码,是无法得到一个正确的时间的。一般而言,对于热点分析,单线程分析的结果就足矣了,如果需要分析多线程的相关性能问题,比如等待和锁,可以借助VTune工具。所以,使用此功能的时候,要关闭相应的可能生成多线程代码的优化选项,比如自动并行化选项等。
2. 辅助程序的输出是通过atexit()函数注册的程序完成的,只会在程序通过标准的突出流程退出时才会产生。其输出包括两种格式:
文本格式,使用tab分隔,所以可以使用文本编辑器或者excel查看;
xml格式,可以使用数据查看器查看(下面会给出例子)。
(3) 相关选项和数据查看
1. 不同级别的选项:
/Qprofile-functions,只在函数入口和出口插入辅助代码,输出文件在当前目录下的loop_prof_funcs_<timestamp>.dump中。
/Qprofile-loops:<arg>,在函数和循环的入口和出口插入辅助代码,其中arg可以为inner、outer、all,分别表示要测试的循环类型为内层循环、外层循环或所有循环。输出的文件在当前目录下的loop_prof_funcs_<timestamp>.dump和loop_prof_loops_<timestamp>.dump中。
注意:是编译器可能无法测试部分循环。另外,测试是在许多编译优化的转换发生之后,所以有些循环被重新组织或复制,导致生成的报告可能会有多个入口。另外,函数也可能被内联到其它函数,所以,同一个循环也可能被列举在多个函数中。
/Qprofile-loops-report:[n],控制循环体的测试级别,其中n=1是不指定n的默认情况,表示收集循环的入口和出口的cycle counts;n=2表示插入额外的辅助代码,收集循环迭代数来计算循环的最小、最大、平均迭代的cycle counts。
注意:和上面的循环测试一样,测试时在许多编译优化的转换发生之后,所以其计数是根据生成的循环的形式(比如使用SSE指令循环迭代数可能减少)。此选项只有在使用了/Qprofile-loops的情况下才有效,它是用于修饰/Qprofile-loops选项的。
2. 实例和输出数据查看
要查看数据,最好的方式就是来一个实际的例子了,如下:
待更新。。。
- 使用Intel编译器(5)PGO(3)评测函数或循环执行时间(Profile Function or Loop Execution Time)
- 使用Intel编译器(5)PGO(1)PGO了解和使用
- 使用Intel编译器(5)PGO(8)编译器其它工具
- 使用Intel编译器(5)PGO(5)PGO工具之代码覆盖工具(code coverage)2
- 使用Intel编译器(5)PGO(2)PGO性能的提升和一些tips
- 使用Intel编译器(5)PGO(4)PGO工具之代码覆盖工具(code coverage)
- 使用Intel编译器(5)PGO(6)PGO工具之profmerge&proforder
- 使用Intel编译器(5)PGO(7)PGO工具之tselect(test prioritization Tool)
- 使用Intel编译器(0)基础(3)循环相关的优化技术Loop optimization
- 使用Intel编译器SSA
- error C4996: 'scanf': This function or variable may be unsafe.Visual Studio系列编译器使用scanf函数报错
- R - Set execution time limit in loop - Stack Overflow
- oracle循环loop使用
- Linux使用time命令获取命令执行时间
- linux使用time命令获取命令执行时间
- linux使用time命令获取命令执行时间
- 使用time命令获取命令执行时间
- 代码执行时间评测系统
- 【骚男崛起】女人们已无法阻止男人的妖媚了!小苏有朋遭禁播性感舞曲MV流出
- linux中的.....cp tar touch makdir
- android message机制
- java Exception 错误 转为字符串 换行
- 数组名与指针
- 使用Intel编译器(5)PGO(3)评测函数或循环执行时间(Profile Function or Loop Execution Time)
- 大相面
- C#TreeView窗体版点击右键弹出菜单+直接修改名称+新建节点
- SQL Server 2008 R2:纯SQL查看数据库描述文档
- Hibernate核心接口和类
- 今天经过一场深有体会的谈话-终于决定了我2012的方向
- 让程序实现xp界面风格
- 【大学生活】搞学习还是搞技术
- 局域网共享打印机另类方法IIS共享打印机