hello,大家好,我是1lo,想跟大家分享一下近期的学习,也记录一下近期的学习。
我们日常使用电脑的时候,总是会发现电脑开始卡顿,word文档开始崩溃,堪称人生十大崩溃瞬间之一。
当一台电脑性能不好的时候,我们是在说些什么呢?
一般来说性能好代表两部分:
- 响应时间
- 吞吐率
响应时间
指的是执行的很快,很快的能给到你结果,你算1+1马上给你2的结果。你一说小爱同学,马上小爱同学说 ”哎 ~ 有什么事?“。你一踩油门,马上到了100迈。
这就是响应时间,越快越好。
吞吐率
指的是搬运的很多,就像是一条10车道的大马路,和4车道的马路的区别,一个会堵车,一个通畅无比。就像是搬家,夫妻俩搬家俩人累的半死,喊上亲朋好友10个人一起搬,轻松惬意。
所以我们口中说的性能好指的是这响应时间短,吞吐率大。
一般来说吞吐率的提升是简单的,加机器,加硬件,四核变八核。而响应时间提升会困难不少,增加晶体管的密度和让晶体管开关更快,也就是CPU超频,都会导致CPU温度过高,烧掉主板或者CPU,这是一个物理限制。
那我们是怎么计算性能的呢?
这个响应时间吧,如果是按得出结果的时间,是计算不准确的,因为计算机不是一条直线计算的,计算机有多个线程,CPU在计算的时候会不停的切换进程,所以计算出结果的时间,中间计算机还干了其他事情。另外硬盘读取数据有时候也比较慢,CPU处在空转的状态,所以也会不准。
linux系统中有time这个命令,会给出三个值:
- real time 得出结果的时间
- user time 运行指令的时间
- sys time CPU计算的时间
所以,实际上运行时间 = user time + sys time。
但是拿到运行时间了,也是不能比较的,因为CPU处在降频或者超频的时候,运行速度也不一样,降频的时候运行慢一些比较正常。
所以我们换了个指标来测算计算时间。
时钟周期时间
我们买电脑的时候,有一串指标,Intel Core-i7-7700HQ 2.8GHz,最后这个2.8GHz就是电脑主频,就是说1秒钟晶体管整栋2.8G次,主频越高,CPU运行越快。
CPU 时钟周期数
指的是运行一个程序,需要震动多少次晶体管。
这里可以继续分解成:
就是一个程序需要多少指令,这些指令对应了多少次震动晶体管,每一次整栋晶体管需要多少时间。
如何优化?
如果要优化性能,可以从上面这个公式入手
- 时钟周期时间,就是主频,就是震动一次晶体管的时间,摩尔定律指的就是这个
- 每条指令平均时钟周期数,就是每一条指定需要多少次震动晶体管,这个需要计算机的组成和体系结构的优化
- 指令数,通俗的就是讲程序需要多少指令,这个就是编译技术的挑战了
就像小时候罚抄书100遍,写字速度就是主频,拿三支笔一起写就是CPI,抄一本字数少的书就是指令数少。
总结
一个程序对应了多条语句,一条语句对应多条指令,一个指令对应多个CPU周期,也就是晶体管震动。
得出的一个程序CPU的执行时间。
我们口中性能的好坏,也就是在说 响应时间短,吞吐量大。
感谢 ~