目录
0.0、水点字数
昨天学习了高速缓存、存储设备层次结构、进程、线程、虚拟内存、文件、网络的基础知识,也算是对整个计算机系统有了了解。所谓万变不离其中,其中已经了解了,接下来就要交给万变了。
今天要来看看本章的最后一节,叫做“重要主题”,既然是重要主题,那么值得我打起精神来好好“battle”“扒透”了。
1.9、重要主题
本节将强调几个重要概念,这几个概念贯穿计算机系统的所有方面,可谓是一劳永逸的事。我最喜欢一劳永逸了,这让我想起了我做开发的初心,就是一劳永逸。重复的事情不做第二遍,我宁愿花上成千上万倍的时间,也一定要解放上手。其实从我从业到现在,感受到的已经不仅仅是解放双手啦,更是解放思想。把前人做过的事情一遍又一遍的重复有何意思,我要做的是弄懂千人做的东西,并在其上面再突破一点点,人类的文明不就是这么一点一点的积累起来的吗?
1.9.1、Amdahl定律
Amdahl定律用于量化评估通过并行化改进系统性能的潜力。
其公式为:
S:系统加速后的速度,于加速前的速度,的比值(加速比);
α:优化部分占整个系统的比例;{ 0 <= α <= 1 }
k:优化部分加速后的速度,于加速前的速度,的比值;{1 <= k}
当α取0.1、0.3、0.7、1时的函数图像如下图
从图中可以看出α对S的影响随α增大而递增,而k对S的影响随k增大而递减。
由此得出重要观点——要想显著加速整个系统,必须提升全系统中相当大部分的速度。
Amdahl定律在其他领域也很实用,比如有一个学生,物理成绩每次都是满分,可是英语成绩永远完美证明四选一的概率是25%。上学时偏科的学生总是很吃亏。
1.9.2、并发和并行
看本小节之前先来了解一些知识
单核处理器:
多核处理器:
超线程:又称同时多线程,以核内某些硬件有多个备份来实现
时钟周期:这个得好好讲讲,并发和并行如何区分就全靠它了。还是从大家最熟悉的地方开始说起。众说周知,判断CPU性能的其中一大指标就是主频,这个主频就是由时钟产生的。说到时钟就不得不说晶振。晶振在通电以后,会产生一个稳定且频率已知的震动信号。时钟通过分频等处理,转化为计算机系统各个部件适合的时钟信号,计算机系统各个部件就可以根据适合自己的频率信号一步一步的运行了。一般来说,计算机给时钟的电压是稳定的所以频率也是稳定的,但是有一种超频方法,就是通过加大这部分的电压,使时钟的频率比原本快,而使设备的频率上升。当然如此超负荷运行设备,必然会降低设备的使用寿命。而CPU按它自身时钟频率信号每走一步,称之为一个时钟周期。
了解了时钟周期有好理解并发和并行了,
并发:同一时段多个活动同时进行,也就是同一时钟周期无论有几个活动在进行,只要在一大段现实时间内有多个活动在进行,就是并发。
并行:同一时刻多个活动同时进行,也就是同一时钟周期至少要有大于一个活动在进行,这些在同一时钟周期的多个进行的活动,叫并行。
所以并行一定是并发,而并发不一定是并行。上下文切换,是为了在无法并行的情况下,实现并发。(师傅快别念了)
综上所述,并行是提升计算机系统速度的一大利器,前辈们用了如下诸多办法来实现并行。
*多核处理器:可以实现进程级并行。将不同进程的资源放入不同的核内运行,节省大量的进程上下文切换时间。
*超线程可以:实现线程级并行。将线程资源存入核内不同的寄存器文件、PC等备份硬件,节省大量的线程切换时间。而常规处理器需要大约20 000个时钟周期,才能切换一次进程。这样一看,确实省了很多时间。
*指令级并行:最常见的就是显卡了,利用流水线设计,将指令分解成多个步骤,将多个指令“首尾相连推入流水线”。理论上,将指令分解成了多少个步骤,就可以并行多少条指令。就像工厂流水线一样,分解的步骤越多,产量就越高。如果处理器达到了比一个周期一条指令更快的执行速率,就称之为超标量处理器。僵僵~~从此以后选择CPU时又多了一个性能指标——指令执行率。
*单指令、多数据并行:就是将一堆使用同一种运算的数据和该运算操作一起发给CPU,这样一次就可以操作好几个数据了,当然CPU内部也会有特殊的硬件来实现这种并行方式。比如最新的几代Inter和AMD处理器都有并行对8对单精度浮点数做加法的指令。相当于此类任务的执行速度,比过去快了8倍。
所以,一级一级这么多并行方式,在配合上Amdahl定律,那程序运行速度必须是杠杠快~~
当然不要忘了,我们是程序员,前辈给了我们这么多神器,我们得把它们用起来才对得起我们“程序员”的称号呀~~所以我们也要根据这些特性来设计我们的程序,以让硬件的性能全部发挥出来。
1.9.3、计算机系统中抽象得重要性
先上书中原话“抽象的使用是计算机科学中最重要的概念之一”。
这让我想起了另一本书里的一句话“计算机的所有问题,都可以用添加一个中间层来解决”。
果然,三层架构是无敌的。下面就以一个表格来看看计算机系统中,不同位置的抽象/中间层吧。
使用者(上层) | 抽象(中间层) | 适配者(下层) |
---|---|---|
软件 | 指令集 | 处理器硬件 |
操作系统 | 文件 | I/O设备 |
操作系统 | 虚拟内存 | 存储器 |
操作系统 | 进程 | 运行中的程序 |
操作系统 | 虚拟机 | 整个计算机 |
上表的分类如果有不对,请大佬们一定要批评指正。
1.10、小结
终于搞定一章了,虽然所有的知识都并不深入,但是知识面还是很广的。可以很方便的排查出自身短板,和兴趣方向。通过学习也能提升整体技术水品,正如Amdahl定律的观点,要想快速提升自己的综合实力,就必须全方位加强,专攻一点一定是事倍功半的。
很高兴我坚持读写了本书的一章后,任然保有不错的激情,接下来的第二章也要再接再厉~~