自学内容网 自学内容网

CPU性能优化--采集调用栈

我们可能经常会遇到程序热点函数多个调用调用情况这样就需要知道哪个函数调用foo次数最多应用程序函数出现热点要理解为什么特定函数呈现热点我们需要知道程序控制哪条路径最热

Intel VTune profiler基准测试x264源代码和汇编代码分析视图

分析foo所有调用逻辑可能非常耗时我们希望关注那些导致foo热点调用我们想知道程序CFG最热路径剖析工具通过收集性能样本捕获进程调用以及信息实现这一点然后所有收集进行分组从而使我们能够看到导致某个特定函数最热路径

linux perf工具收集调用栈三种可能方法

指针 perf record--call-graph fp 需要二进制构建时候带上--fnoomit-frame-pointer 参数

DWARF 调试信息perf record--call-graph dwarf 需要二进制文件编译构建带上DWARF调试信息 -g

intel最后分支记录Last Branch Record 硬件特性调用深度不如前面两种方法关于LBR更多信息参见6.2

下面使用Linux perf采集程序调用栈示例根据输出结果我们知道foo55%执行时间是从funcl调用的,我们可以清楚看到foo调用之间开销分布

使用Intel vtune profier时候可以配置分析功能选中 收集来采集调用数据

5.4.4 火焰

是一种常用可视化剖析数据程序最热代码路径方法可以让我们看到哪些函数占用了大部分执行时间

5.5 屋顶线性能模型

屋顶线性能模型加利福利亚分校2009提出来一种面向吞吐性能模型常用语性能计算模型屋顶线表示应用程序性能不可能超过计算机处理能力事实程序中每个函数循环计算机计算能力或者内存容量限制应用程序受到某个屋顶线函数的限制

硬件有两个主要限制计算速度数据搬移速度应用程序最大性能峰值计算性能平台带宽算数强度乘积之间最小限制24显示屋顶线基于硬件限制绘制两个应用程序AB性能程序不同部分可能具有不同性能特征屋顶线模型考虑这一点可以同一个图上表示显示应用程序多个函数循环

强度FLOPS 字节之间比率可以根据程序每个循环进行计算现在我们计算代码清淡8代码强度最内层循环体有一个加法运算一个乘法运算因此2浮点运算还有三个操作一个操作

提高应用程序性能传统方法充分利用计算机SIMD多核功能, 通常需要很方面进行优化包括向量化内存线程。屋顶线方法有助于评估应用程序这些特征屋顶线我们可以绘制标量单核SIMD单核SIMD性能理论最大值可以让我们了解应用程序性能提高空间如果发现应用程序计算密集型并且性能低于峰值标量单核性能应该考虑强制向量化并利用多个线程分配工作相反如果应用程序算术强度比较低应该寻找改善内存访问方法使用屋顶线模型性能最终目标向上移动向量化现成话向上移动通过算术强度优化内存访问将点向右移动同事还可能提高性能

理论最大值可以根据所使用计算机特征计算计算机理论最大值并不困难对于Intel Core i5-8259U处理器具有avx22融合乘加单元最大FLOPS可以通过如下公式

峰值 FLOPS = 8(逻辑核数量) x 256(avx)位宽/ 32(浮点数大小)

总之 屋顶线性能模型有助

1 识别性能瓶颈

2 指导软件优化

3 确定何时优化已经达到了极限

4 评估机器能力相关性能


原文地址:https://blog.csdn.net/fantasy_ARM9/article/details/144043677

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!