转载于:http://software.intel.com/zh-cn/blogs/2012/08/12/400010892/?cid=sw:prccsdn22926
使用Intel VTune Amplifier XE可以帮助我们快速找到热点函数,计算CPU的消耗、进行并行性分析,进而优化算法,如调整线程上的任务分配、优化同步锁的使用、减少线程的等待时间等。
优化后程序再次使用VTune进行分析,在Summary 报告中有Elapsed Time指标可以知道程序的整体性能提高。但是对于某个特定的热点程序如何评估它的性能提高呢?
对于单线程的应用程序非常简单,只要比较前后的CPU时间就可以了。对于多线程程序就需要一定的估算技巧了。
下面是使用产品的附例tachyon_vtune_amp_xe.zip,优化前后的报告。
报告中的CPU Time是所有核上统计的累加。至于串行和并行的数据可以按“》”扩展。
解释一下指标的名称
Idle: 程序轮到执行,但处于等待状态,不消耗CPU时间
Poor: 运行在串行状态,或接近于串行状态。如:8核的CPU上仅1-3个核在同时工作
OK: 程序执行时,较多的核在工作。如: 8核的CPU上4-7个核在工作
Ideal: 程序执行时,所有的核都在工作。
Over: 程序执行时, 并行线程大于核数。其实效率等同Ideal
(优化前)
![](http://software.intel.com/sites/default/files/m/0/8/0/before_opt.jpg)
我的平台是4核,上图中Poor的数据比较难以量化 – 是平均按照单核算还是二核算,抑或按1.5核算?其实我们可以观察timeline报告中CPU的利用率在1.1左右,由此估算出grid_intersect 函数的执行时间为:14.786s/1.1 = 13.44s
(优化后)
![](http://software.intel.com/sites/default/files/m/a/9/a/after_opt4.jpg)
同理,改进后grid_intersect函数 的执行时间为20.835s / 3 = 6.95s
我们可以知道grid_intersect函数的性能提升比为 13.44s / 6.95s = 1.93X
此结果虽不绝对准确,但也接近事实。