计算机概要与技术
作者:互联网
1.2 计算机系统结构中8个伟大的思想
1.2.1 面向摩尔定律的设计
摩尔定律指出单芯片上的集成度每18-24个月翻一番。摩尔定律由Intel公司的创始人Godon Moore在1965年对集成电路集成度做出的预测。
总结下来有如下三个版本:
- 集成电路芯片上所集成的电路的数目,每隔18个月就翻一番。
- 微处理器的性能每隔18个月提高一倍,而价格下降一倍。
- 用一个美元所能买到的电脑性能,每隔18个月翻两番。
横轴为新CPU发明的年份,纵轴为可容纳晶体管的对数。所有的点近似成一条直线,这意味着晶体管数目随年份呈指数变化,大概每两年翻一番。这里我们需要说明的是,戈登·摩尔发现的摩尔定律不基于任何特定的科学或工程理论,只是真实情况的影射总结。而硅芯片行业注意到了这个定律,也没有简单把它当作一个描述的、预言性质的观察,而是作为一个说明性的,重要的规则,整个行业努力的目标。
要么跟随摩尔定律,要么死!!!
在摩尔定律发现长达40年间,它带领着硅谷以史诗般的速度前进,并成为全世界的先驱。忽视摩尔定律的公司纷纷被淘汰,紧随它的公司则越来越强大富有。摩尔定律也是整个信息时代的驱动力,多亏有了摩尔定律,我们今天才能把智能手机放在口袋或钱包里,今天智能手机的性能比 1965-1995 年里最大的电脑还要强劲。没有摩尔定律就没有超薄笔记本电脑,也不可能产生足以绘制整个基因组、或是设计复杂药物的高性能计算机。流媒体视频、社交媒体、搜索功能、云——没有摩尔定律,这些都不可能产生(或者说不可能这么快产生可能更加准确)。
但是摩尔定律能一直持续下去吗?我们很容易就能想到:芯片上元件的几何尺寸总不可能无限制地缩小下去,这就意味着,总有一天,芯片单位面积上可集成的元件数量会达到极限。问题只是这一极限是多少,以及何时达到这一极限。业界已有专家预计,芯片性能的增长速度将在今后几年趋缓。而我们也完全不必担心摩尔定律何时会终结,我们要知道摩尔定律实际上是关于人类信念的定律,当人们相信某件事情一定能做到时,就会努力去实现它。
1.2.2 使用抽象简化设计
计算机架构师和程序员必须发明能够提高产量的技术,否则设计时间也将向资源规模一样按照摩尔定律增长。提高硬件和软件生产率的主要技术之一是使用抽象技术来表示不同的设计层次,在高层次看不到低层次的细节,只能看到一个简化的模型。
什么是抽象?
首先,抽象这个词在中文里可以作为动词也可以作为名词。作为动词的抽象就是指一种行为,这种行为的结果,就是作为名词的抽象。Wikipedia 上是这么定义抽象的:
Conceptual abstractions may be formed by filtering the information content of a concept or an observable phenomenon, selecting only the aspects which are relevant for a particular subjectively valued purpose.
也就是说,抽象是指为了某种目的,对一个概念或一种现象包含的信息进行过滤,移除不相关的信息,只保留与某种最终目的相关的信息。例如,一个*皮质的足球*,我们可以过滤它的质料等信息,得到更一般性的概念,也就是*球*。从另外一个角度看,抽象就是简化事物,抓住事物本质的过程。
开发中的抽象
在软件开发里面,最重要的抽象就可能是分层了。分层随处可见,例如我们的系统就是分层的。最早的程序是直接运行在硬件上的,开发成本非常高。然后慢慢开始有了操作系统,操作系统提供了资源管理、进程调度、输入输出等所有程序都需要的基础功能,开发程序时调用操作系统的接口就可以了。再后来发现操作系统也不够,于是又有了各种运行环境(如 JVM)。
编程语言也是一种分层的抽象。机器理解的其实是机器语言,即各种二进制的指令。但我们不可能直接用机器语言编程,于是我们发明了汇编语言、C 语言以及 Java 等各种高级语言,一直到 Ruby、Python 等动态语言。
开发中,我们应该也都听说过各种分层模型。例如经典的三层模型(展现层、业务逻辑层、数据层),还有 MVC 模型等。有一句名言:“软件领域的任何问题,都可以通过增加一个间接的中间层来解决”。分层架构的核心其实就是抽象的分层,每一层的抽象只需要而且只能关注本层相关的信息,从而简化整个系统的设计。
其实软件开发本身,就是一个不断抽象的过程。我们把业务需求抽象成数据模型、模块、服务和系统,面向对象开发时我们抽象出类和对象,面向过程开发时我们抽象出方法和函数。也即是说,上面提到的模型、模块、服务、系统、类、对象、方法、函数等,都是一种抽象。可想而知,设计一个好的抽象,对我们软件开发有多么重要。
1.2.3 加速大概率事件
加速大概率事件(Common case fast)远比优化小概率事件更能提高性能。大概率事件通常比小概率时间简单,从而容易提高。大概率事件意味着设计者需要知道什么事件是经常发生的,这只有通过仔细的实验与评估才能得出。
1.2.4 通过并行提高性能
现流行的并行技术大都可以从三个方面实现:
- 资源重复:如多核
- 资源共享:如CPU分时技术
- 时间重叠:如流水线技术
并行计算或称平行计算是相对于串行计算来说的。它是一种一次可执行多个指令的算法,目的是提高计算速度,及通过扩大问题求解规模,解决大型而复杂的计算问题。所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
为利用并行计算,通常计算问题表现为以下特征:
- 将工作分离成离散部分,有助于同时解决;
- 随时并及时地执行多个程序指令;
- 多计算资源下解决问题的耗时要少于单个计算资源下的耗时。
1.2.5 通过流水线提高性能
在计算机系统结构中,一个特别的并行性场景就是流水线。流水线是把一个重复的过程分解为若干个子过程,每个子过程与其他子过程并行进行。基本思想:延伸重叠方式,使指令解释过程进一步细化, 提高各部件的利用率,以提高指令执行速度。
典型的四段式流水线为:
- 取指周期 IF (instruction fetch)
- 译码周期 ID (instruction decode)
- 执行周期 EX (excuse)
- 写回周期 WB (write back)
1.2.6 通过预测提高性能
在某些情况下,如果假定从误预测恢复执行代价不高并且预测的准确率相对较高,则通过猜测的方式提前开始某些操作,要比确切知道这些操作应该启动时才开始要快一些。
在计算机体系结构中,分支预测器(英语:Branch predictor)是一种数字电路,在分支指令执行结束之前猜测哪一路分支将会被运行,以提高处理器的指令流水线的性能。使用分支预测器的目的,在于改善指令管线化的流程。现代使用指令管线化处理器的性能能够提高,分支预测器对于现今的指令流水线微处理器获得高性能是非常关键的技术。
cpu 预先对将要执行的分支进行预测,预测成功的概率越大,程序的性能就越好。分支预测实际是为流水线服务的,通过分支预测可以提高流水线的性能。当没有分支预测的情况下,cpu 只有当执行完成了当前分支指令之后才能确定要取哪一条指令来执行,也就是说在执行分支指令的同时,流水线中不能进入新的指令,这被称为流水线停顿。
分支预测可以避免流水线停顿的发生。不过当使用分支预测时,当预测失败后,将会带来更多的性能损耗。预测失败时 cpu 会放弃已经执行完成的结果,然后重新获取正确的分支中的指令开始执行。在较长的流水线中,一次分支预测失败可能会损失10 ~ 20 个 cpu 周期的时间。
分支预测有多种实现方式,每一种方式都有它自己的特点与适应环境。大部分情况下我们无法关闭 cpu 的分支预测功能,少部分情况下是否能够关闭还有待研究。不过分支预测对程序员来说是一种黑盒,是不透明的,但程序员仍旧能够通过合理的调整分支结构来提高预测成功率。
同时必须注意的是,流水线与分支预测在提高计算机性能的同时也给指令的执行了带入了更多的不可控因素。指令执行不再是传统的顺序执行的方式,这样既给问题定位带来了更大的挑战,也让程序具体的执行过程变得模糊不清。
1.2.7 存储器层次结构
由于存储器的速度通常影响性能、存储器的容量限制了结题的规模、当今计算机系统中存储器的代价占了主要部分,因此程序员希望存储器速度更快、容量更大、价格更便宜。设计师们发现通过存储器层次来解决这些相互矛盾的需求。在存储器层次中,速度最快、容量最小并且每位价格最昂贵的存储器处于顶层,而速度最慢、容量最大、且每位价格最便宜的处于最底层。
1.2.8 通过冗余提高可靠性
计算机不仅需要速度快,还需要工作可靠。由于任何一个物理器件都有可能失效,因此可以通过使用冗余部件的方式提高系统的可靠性,冗余部件可以代替失效部件并可以帮助检测错误。
1.6 性能
1.6.1 性能的定义
1.6.2 性能的度量
1.6.3 CPU性能及其因素
1.6.4 指令的性能
1.6.5 经典的CPU性能公式
1.7 功耗墙
标签:概要,摩尔定律,技术,指令,抽象,流水线,分支,性能,计算机 来源: https://blog.csdn.net/qq_41394155/article/details/88990083