用CPI火焰图分析Linux性能问题

1. 什么是 CPI

1.1 程序怎么样才能跑得快 ?

理解什么是 CPI,首先让我们思考一个问题:在一个给定的处理器上,如何才能让程序跑得更快呢?

假设程序跑得快慢的标准是程序的执行时间,那么程序执行的快慢,就可以用如下公式来表示:
在这里插入图片描述
因此,要想程序跑得快,即减少程序执行时间,我们就需要在以下三个方面下功夫:

减少程序总指令数

要减少程序执行的总指令数,可能有以下手段:

  • 算法优化;好的算法设计,可能带来更少的指令执行数。
  • 更高效的编译器或者解释器;新的编译器或者解释器,可能对同样的源代码,生成更少的机器码。
  • 用更底层的语言优化;这是为何Linux内核代码使用 C 语言,并且还喜欢内联汇编。
  • 更新的处理器指令;新的处理器指令,对处理某类特殊目的运算更有帮助,而新版本编译器最重要的工作就是,在新的处理器上,用最新的高效指令;例如,x86 SSEAVX 指令。
减少每 CPU 时钟周期时间

这一点很容易理解,缩短CPU 时钟周期的时间,实际上就是要提高 CPU 的主频。这正是 Intel 过去战无不胜的法宝之一。今天,由于主频的提高已经到了制造工艺的极限,CPU 时钟周期的时间很难再继续降低了。

减少每指令执行所需平均时钟周期数

如何减少每指令执行所需平均 CPU 时钟周期数呢?让我们先从 CPU 设计角度看一下:

  • 标量处理器 (Scalar Processor) ;一个 CPU 时钟周期只能执行一条指令;
  • 超标量处理器 (Superscalar Processor);一个 CPU 时钟周期可以执行多条指令。

因此不难看出,如果使用支持超标量处理器的 CPU,利用 CPU 流水线提高指令并行度,那么就可以达到我们的目的了。流水线的并行度越高,执行效率越高,那么每指令执行所需平均时钟周期数就会越低。

当然,流水线的并行度和效率,又取决于很多因素,例如,取指令速度,访存速度,指令乱序执行 (Out-Of-Order Execution),分支预测执行 (Branch Prediction Execution),投机执行 (Speculative Execution)的能力。一旦流水线并行执行的能力降低,那么程序的性能就会受到影响。关于超标量处理器,流水线,乱序执行,投机执行的细节,这里不再一一赘述,请查阅相关资料。

另外,在 SMP,或者多核处理器系统里,程序还可以通过并行编程来提高指令的并行度,因此,这也是为什么今天在 CPU 主频再难以提高的情况下,CPU 架构转为 Multi-CoreMany-Core

由于提高 CPU 主频的同时,又要保障一个 CPU 时钟周期可以执行更多的指令,因此处理器厂商需要不断地提高制造工艺,降低 CPU 的芯片面积和功耗。

1.2 CPIIPC

在计算机体系结构领域,经常可以看到 CPI 的使用。CPICycle Per Instruction 的缩写,它的含义就是每指令周期数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值