怎样快速估算热点函数的性能提高?



使用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

(优化前)



我的平台是4核,上图中Poor的数据比较难以量化 – 是平均按照单核算还是二核算,抑或按1.5核算?其实我们可以观察timeline报告中CPU的利用率在1.1左右,由此估算出grid_intersect 函数的执行时间为:14.786s/1.1 = 13.44s

 

(优化后)

 

 同理,改进后grid_intersect函数 的执行时间为20.835s / 3 = 6.95s

 我们可以知道grid_intersect函数的性能提升比为 13.44s / 6.95s = 1.93X

此结果虽不绝对准确,但也接近事实。

Categories:
For more complete information about compiler optimizations, see our Optimization Notice.