通过cpu主频,了解性能
- 什么是性能?时间的倒数
主要有两个标准来衡量
(1)响应时间又叫执行时间,指的是我们执行一个程序,到底需要花多少时间(跑的快)。
(2)吞吐率 ,指我们在一定的时间范围内,到底能处理多少事情。这里的“事情”,在计算机里就是处理的数据或者执行的程序指令(搬到更多)。
注释:一般把性能,定义成响应时间的倒数,也就是:性能 = 1/ 响应时间
- 计算机的计时单位:CPU 时钟
使用时间衡量性能的两个问题
(1)第一个就是时间不“准”
Linux 下有一个叫 time 的命令运行一下 time 命令。
它会返回三个值,第一个是 real time,也就是我们说的 Wall Clock Time,也就是运行程序整个过程中流逝掉的时间(掐秒表)。
第二个是 user time,也就是 CPU 在运行你的程序,在用户态运行指令的时间。
第三个是 sys time,是 CPU 在运行你的程序,在操作系统内核里运行指令的时间。
程序实际花费的 CPU 执行时间(CPU Time),就是 user time 加上 sys time。
$ time seq 1000000 | wc -l 1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
实际上程序用了 0.101s,但是 CPU time 只有 0.031+0.016 = 0.047s。
![]()
注释:我们的程序实际在操作系统里面是运行在“保护模式”下的,很多指令我们的应用程序并没有权限去操作执行,需要切换到内核态,由操作系统去执行,比如说操作硬件的时候。
Real < CPU,表明进程为计算密集型(CPU bound),利用多核处理器的并行执行优势;Real ≈ CPU,表明进程为计算密集型(CPU bound),未并行执行;
Real > CPU,表明进程为I/O密集型(I/O bound),多核并行执行优势并不明显。
(2)即使我们已经拿到了 CPU 时间,我们也不一定可以直接“比较”出两个程序的性能差异
<1>CPU 可能满载运行也可能降频运行,降频运行的时候自然花的时间会多一些
<2>时间这个性能指标还会受到主板、内存这些其他相关硬件的影响
注释:程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间
此处提升性能的方法:一个是减少时钟周期时间即提高主频,一个是减少程序需要的时钟周期数
程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time /*CPI每条指令的平均时钟周期数*/
- 课后思考
每次有新手机发布的时候,总会有一些对于手机的跑分结果的议论。乃至于有“作弊”跑分或者“针对跑分优化”的说法。我们能针对“跑分”作弊么?怎么做到呢?
答:常用作弊手段提高主频或过热不降频,使用针对这些预设程序专门优化的编译器和汇编器,可以减少指令数;使用流水线、预测等技术,可以减小CPI等
- 疑惑
主频如果没散热和门延迟问题是否有极限?极限是多少?是否和电信号的传播速度和距离有关


浙公网安备 33010602011771号