文章目录
- 计算机系统结构【第一课摘要】
- 图灵机:视角的不同
- 冯·诺依曼架构:内存,计算机高速运算、运行通用的秘密
- 摩尔定律:真实世界的指数增长
- 阿姆达尔法则:如何在有限次数中做决策
我们人类天然的思维方式叫正向思维,而我们的正向思维被称为 “递推”(Iterative)。
递推是人本能的正向思维,我们小时候学习数数,从1、2、3 ··· 100 ··· 10000 ··· ∞,就是典型的递推;这种学习过程是循序渐进,由易到难,由小到大,由局部到整体,出发点是正向的;
类似于,学习语言时,先从拼音开始,再组词,后简单造句,接着使用"因为…所以…"、“既然…于是…”、“不但…而且” 等连接词,造成稍稍复杂的句子,这种思维方式便是递推,是正向的。
在计算机还未被创建的年代里,人们想问题也是正向的:【先做几个能解决简单问题的计算机,而后不断优化,就会越做越复杂】。
直到 1900 年,德国数学家 希尔伯特 提出了 23 个历史性的数学问题,这 23 个数学问题是数学家们对数学的思考。
在 1930 年左右,图灵在思考其中的三个问题:
在数学问题中,只有一小部分是有解的。
在有解的问题中,只有一部分。
有这种机械,不过图灵机很长时间以来一直只存在于论文中,只是一个抽象的可以实施自动计算的思维模型,而实体 15 年之后才出现… 22 岁的图灵写出了《论可计算数及其在判定问题上的应用》,人们之后就简称这篇文章为《可计算数》,TA 从数学上定义了著名了“图灵机”。
也许您对这些问题并没有见解,但应该能体会到视角的不同。
世界上所有问题,不是一种角度就可以解决。
计算机和我们不同,计算机的正向思维被称为 “递归”(recursive),计算机天生就是为大数处理而制造的,习惯从大到小、层层分解的思维。
您也看到了,是因为图灵思考的问题角度不同,所以计算机的正向思维也就不同…从事物的极限看过来…会当凌绝顶,一览众山小。
这俩种视角放在人身上:
递推:怎么比他们强呢,在各个方面慢慢努力,小步子。
递归:怎么比他们强呢,不完全是比他们更努力,因为这只是在低层次上的竞争,而是首先在见识和格局上要比他们高,气度要更大。
所以,学习不是努力读更多的书,盲目追求阅读的速度和数量,这会让人产生低层次的勤奋和成长的感觉,这只是在使蛮力。要思辨,要践行,要总结和归纳,否则,只是在机械地重复某件事,而不会有质的成长的。
现在的计算机都是采用图灵机[是一个可计算理论数学模型],包括正在设计的新的计算机,从解决问题的能力来讲,都没有超过图灵机的范畴。图灵机划定了一条今天所有计算机(包括运行人工智能程序的)所能解决问题的理论极限。
记住一句话,计算的本质是:输入 + 运算 + 输出。
现在我们来看看,图灵机这种数学模型到底长什么样子:
因为纸带是无限长的,纸带主要是为了存储数据,所用的数字都放在一个个编了号的格子里。
计算机对于数据的操作,都是先找到格子的地址,然后把那个盒子中的数据拿出来处理,处理完的内容,再放回到某个格子中。
举个例子,假如有对夫妻。丈夫交代妻子,请她帮忙拿些茶叶。
茶叶是这样定位的:茶叶在客厅茶几的白色盒子里,能否拿给我。
妻子会到了客厅走到茶几前就能把盒子丢给丈夫。
可如果这对夫妻是机器人呢,那么茶叶的定位就不一样了。
茶叶的定位应该是这样:茶叶在第 1 客厅,第 3 家具,第 5 个位置,能否拿给我。
机器人妻子也会直接拿起这个位置的东西,不管到底是茶叶,还是其他,要的就是这个编号而已,但是能拿到茶叶的。
HEAD:是一个小窗口,可以顺着纸带来回的挪动,不但可以查看格子打没打孔,还可以改变打孔与没打孔的状态;主要功能是读写数据。
状态寄存器:作用是保存图灵机当前的所处状态,图灵机的所有可能状态是有限的。要么是 0,要么是 1。
TABLE:是一套工作规则,能根据当前机器所处的状态以及当前窗口(HEAD)所指的格子里的打没打孔来确定窗口的下一步动作,并改变状态寄存器的值,令机器进入一个新的状态。
可能太抽象、陌生了, 用现代的术语来看:
在图灵提出图灵机的15年后,因 电子真空管 技术条件成熟和美国军方资助,世界第一台能用的通用计算机终于被做出来了,这就是书上的 ENIAC 。
ENIAC 是基于图灵机实现的,设计完全基于 图灵机,是用电子来代替纸带的,通过控制电子来实现计算的输入、运算和输出。
不过,ENIAC 之所以被称为现代计算机的鼻祖,是因为奠定了 “冯·诺依曼架构”。
记住一句话,计算的本质是:输入 + 运算 + 输出。
冯·诺依曼架构比起之前的计算机多了一个存储的想法:
简单来说,就是指令和数据可以一起放在内存储器里(内存条)。
这样 CPU 可以取数据,也可以取指令,接着一条一条的执行即可完成程序。
因为指令和数据放在一起,因此结构简单、工程实现简单,才应用十分广泛。
从前的计算机设备要怎么设计,严重依赖于具体任务是什么,不同的任务需要设计不同的结构。计算 2 \sqrt{2} 2 是一个设计结构,计算别的又是一个设计结构,是专用计算机。
任务不同,所有电缆线就要拔掉,零件重新连接,有的时候甚至还需要改动一些电子管或者电阻才行。
如 ENIAC 在计算时,得有十几个计算师负责盯住机器输出的插线板(纸板),在第 n 步、第 m 步因为计算方式改变就需要手动换线,而 ENIAC 的真空管响应时间是 1 100 , 0000 秒 \frac{1}{100,0000}秒 100,00001秒,而人的反应时间、手动接线 最快也需要 1 秒。
【内存】是在步骤与步骤之间,添加和运算单元响应速度差不多的存储单元。这里最多可以存储 20万 个中间结果,也存储着下面将要怎么处理的操作规则。
这样,最大的瓶颈就消除了——针对不同的任务,直接从存储单元里调用不同的程序就可以了,再也不用重新接线那么麻烦了。
引入【内存】后,计算机不止是运算速度快了,更重要的是要改造出一种不用重新接线也能计算不同任务的计算机(通用计算机)。
储存这个机制消除了计算机的最大瓶颈,让专用计算机变成了通用计算机,这也是 [冯·诺依曼] 被称为【计算机之父】的主要原因。
那有没有点好奇呢,【内存】到底长啥样,这么神奇?
计算机要处理的信息是多种多样的,如十进制数、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以 二进制(0和1)的形式来表示。
内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。
这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用 1 来表示,0V 是断电,用 0 来表示。所以,一个元器件有 2 种状态,0 或者 1。
我们通过电路来控制这些元器件的通断电,会得到很多 0、1 的组合。
例如:
虽然一个元器件只能表示 2 个数值,但是多个结合起来就可以表示很多数值和文字、图像、音频、视频、符号等等。
一般情况下我们不一个一个的使用元器件,而是将 8 个元器件看做一个单位,即使表示很小的数,例如 1,也需要 8 个,也就是 00000001。
1 个元器件称为 1 比特(Bit)或 1 位,8个元器件称为 1 字节(Byte),那么 16 个元器件就是 2 Byte,32 个就是 4 Byte,以此类推:
现在您能知道 1 GB 的内存有多少个元器件了吧,我们通常所说的文件大小是多少 KB、多少 MB,就是这个意思。
如果您的电脑上安装了QQ,希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,而后登录就可以了。
那么,QQ是怎么运行起来的呢?
首先,有一点您要明确,您安装的QQ软件是保存在硬盘中的(上图的外存储器)。
双击QQ图标,操作系统就会知道您要运行这个软件,它会在硬盘中找到QQ软件,将数据(软件本质上就是很多数据的集合)复制到内存。
对!就是复制到内存!QQ不是在硬盘中运行的,而是在内存中运行的。
因为内存的读写速度比硬盘快很多,机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,电机的转速肯定没有电的传输速度(几乎是光速)快。
所以,不管是运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作载入内存(Load into Memory)。完成这个过程需要一个特殊的程序(软件),这个程序就叫做加载器(Loader)。
CPU直接与内存打交道,它会读取内存中的数据进行处理,并将结果保存到内存。如果需要保存到硬盘,才会将内存中的数据复制到硬盘。
例如,打开Word文档,输入一些文字,虽然我们看到的不一样了,但是硬盘中的文档没有改变,新增的文字暂时保存到了内存,Ctrl+S才会保存到硬盘。因为内存断电后会丢失数据,所以如果您编辑完Word文档忘记保存就关机了,那就永远无法找回这些内容。
冯·诺依曼架构的核心就是内存,像 C 语言之所以被称为最贴近冯·诺依曼架构的编程语言,是因为 C语言 简直是为内存而生的,它比任何一门编程语言都贴近内存。
回到第一台计算机 ENAIC 上,计算的本质是:输入 + 运算 + 输出。
这么一个计算过程我们已经知道了,可如何实现呢 ?
实现它的肯定是一套物理系统,而这个物理系统的性质就会决定算力的大小了。
比如吧,第一台计算机 ENAIC是用电子管代替了纸带,不过,电子管实现的图灵机:体积大、功耗高、可靠性差、每秒数千次至数万次、价格昂贵。
只要一启动,周围居民家的灯都会变暗。每个电子管相当于一个小灯泡,耗电量大概是 15 万瓦,一度电大概能完成 2.5 万次运算。
到 2018 年,世界上最快的橡树岭超级计算机一秒钟最多能完成 20 亿亿次浮点运算,耗电2.7度,相当于一度电完成了 7.5 亿亿次的运算。
自1946 年以来,计算机 70 多年的发展,从本质上讲就是提高能量利用率的过程。
这 70 多年里有三个里程碑是我们必须知道的:
历经 50 年下摩尔定律的指数增长,之前几百万美元的计算机,价格不断下降直到下架…再到被历史遗忘…
1999年,比尔·盖茨在世界计算机展上讲,如果汽车工业能够有IT产业的发展速度,那么一加仑(大约四升)汽油应该能让汽车跑1000英里,而且汽车的售价只要25美元。
每过一段时间,我们就能用到更便宜、更好的产品了,这是人类有史以来最爽的事情。
小米手机就利用了这个定律,很多人都说小米手机好(手机配置好、价格便宜)。
它推出手机时采用预订的策略,客户看到的价格是今天的价格,开会对比手机的配置也是按照今天市场上的手机去对比的。
但是它交货常常是半年之后,这中间有时间差,半年后由于摩尔定律的作用,那时元器件的价格其实已经不是我们今天看到的了。
因此,我们觉得我们赚了,是以今天的性价比衡量的,而我们半年后拿到同样性价比的东西,其实那时再仔细算算,性价比就没有那么诱人了。
但如果站在那些制造硬件的企业角度来说,制造同一款产品,每 18 个月企业的收入就缩水一半,这可太难了,除非企业的发展能超过摩尔定律的指数增长,否则迟早关门。
像现在科技产业板块里的 智能设备、物联网 都很热门,对于这些制造硬件的企业,实在没必要跟风,因为受摩尔定律的影响,他们的利润会越来越稀薄。
有人说摩尔定律快要到极限了,但这根本不叫事儿。
如果,实现计算机的物理系统不局限于用基于硅的芯片,那计算能力最终只受到物理学的限制。
而物理学的限制是,人类理论上可能拥有的计算能力是今天的 1 0 33 10^{33} 1033 倍 —— 哪怕我们每隔几年就把计算能力增加 1 1 1 倍,也需要 100 年的时间才能达到真正的物理极限。
小结一下,今天的传统计算机不是万能的,因为被三条线给限死了,这三条线分别是:
前面俩者都不太可能会有改变、突破,那么提高计算机性能的唯一途径即第三条。
改变实现计算过程的物理系统,而这个物理系统的性质就会决定算力的大小了。
比如,量子计算机。
传统计算机的极限,其实就是传统物理学的极限;那量子计算机的极限,自然就是量子力学的极限了。
阿姆达尔法则,是让 IT 行业得以快速进步的战术,和 阿姆达尔法则 相对应的是摩尔定律,这是 IT 行业的战略。
阿姆达尔在设计计算机系统时,充分认识到了计算机各部分的性能必须平衡匹配,才能得到整体性能最佳的系统。
他将这种思想用一个简单的公式描述出来:
假设内存的速度翻一番,即 s=2,那整个计算机性能的提升是多少呢 ?
根据这个公式,可以算出是 11%,这个结果看起来还是不错的,如果您有办法将内存的速度提升到原来的 100 倍,那么计算机整体速度只能提升约 25%,这看上去就不大有效了。
在每一次设计新的一代计算机产品时,都会有各种各样的技术突破,可供选用,但是考虑到成本的因素,以及设计的复杂度,都需要有所取舍,那么该引入哪些新技术呢 ?
阿姆达尔法则是计算机行业作决定的铁律。
假如内存读写占用程序运行时间的 20%,处理器运算占 60%。
现在有两个技术,一个可以将内存读写速度提高 5 倍,另一个可以将处理器的速度提升 50%,由于成本的限制和研发时间的限制,下一个版本只能采用一项改进,应该选用哪个 ?
20% 的 5 倍,好像效果显著;而 60% 的 50%,也就 30%,所以当然应该采用新的内存技术。
阿姆达尔法则给出的结论,则恰恰相反 ---- 根据上述公式,提高内存的性能,计算机整体的性能只能提高20%( 1/[(1-0.2)+0.2/6]≈120% ),如果提高处理器的性能,系统整体的性能能够提高 25%( 1/[(1-0.6)+0.6/1.5] = 125% )。
接下来,如果一年后还要再推出一个新的系统,假定处理器和内存的性能提升的可能性和成本跟上一次相当,这回该改进计算机处理器,还是内存呢?
还是该改进处理器,很遗憾,这一次该改进内存了。
因为上一次处理器改进后,处理器运算占用的时间比例,也就是公式中的 p,就从 60% 下降到 50% 了,再改进处理器,油水就没有那么大了。
事实上,如果继续改进处理器,可以得到 20% 左右的性能提升,而改进内存这回能获得 25% 的性能提升。
不仅在计算机设计中阿姆达尔法则是铁律,在软件开发,调试软件性能时,负责任的工程师都要用这个铁律将能够提升明显性能的模块都优化一遍。
在大型的计算机软件开发中,有一个叫做 Profile 的工具,可以模拟出软件中每一个功能模块占用资源的情况,这样把最占用资源的模块进行优化,很容易成倍提高性能。
阿姆达尔法则不仅是产品设计中选择技术的准则,更是整个计算机行业里决定研发投入依据的原则,也就是说,当前如果计算机系统中的哪个部分成为了拖后腿的瓶颈,就必须集中精力和经费解决相应的问题,这也就解释了为什么IT的关键技术似乎都在合适的时间获得突破的原因。
很多时候,我们都面临在限制要素中作选择的问题。
很多时候,我们总想全方位改进自己,但是人的精力和资源有限,因此在某一时刻,可能只能向一个方向努力。
很多人从直觉出发,觉得该补短板,另一些人则觉得,该把长板变得更长。
第一类人讲木桶理论,第二类人讲长板理论,每一类都有很多成功的例子,也有很多失败的教训。
于是很多人就不知道该用哪一个理论了。
事实上您今天学了阿姆达尔法则后,就很容易作决断了,那就是在任何时刻算出 S,而后选收益最大的路径前进就好。
复盘:
文章目录
- 计算机系统结构【第一课摘要】
- 图灵机:视角的不同
- 冯·诺依曼架构:内存,计算机高速运算、运行通用的秘密
- 摩尔定律:真实世界的指数增长
- 阿姆达尔法则:如何在有限次数中做决策