计算机基础课第 2期分享

 

转载请联系授权(微信ID:qianpangzi0206)

 

01

早期计算机的提速方式

 

随着本系列进展,我们知道计算机进步巨大,从 1 秒 1 次运算,到现在有千赫甚至兆赫的CPU,这是很大的计算量。

 

早期计算机的提速方式是减少晶体管的切换时间。晶体管组成了逻辑门,ALU 以及前面的其他组件。但这种提速方法最终会碰到瓶颈,所以处理器厂商,发明各种新技术来提升性能,不但让简单指令运行更快,也让它能进行更复杂的运算。

 

上节我们写了个做除法的程序,给 CPU 执行,方法是做一连串减法,比如16除4 会变成16-4 -4 -4 -4,碰到 0 或负数才停下。但这种方法要多个时钟周期,很低效。

所以现代 CPU 直接在硬件层面设计了除法, 可以直接给 ALU 除法指令,这让 ALU 更大也更复杂一些。

复杂度 vs 速度的平衡在计算机发展史上经常出现。

举例,现代处理器有专门电路来处理图形操作, 解码压缩视频, 加密文档等等,如果用标准操作来实现,要很多个时钟周期。你可能听过某些处理器有 MMX, 3DNOW, SEE。它们有额外电路做更复杂的操作,用于游戏和加密等场景。

指令不断增加,人们一旦习惯了它的便利就很难删掉。所以为了兼容旧指令集,指令数量越来越多。英特尔 4004,第一个集成CPU,有 46 条指令,足够做一台能用的计算机,但现代处理器有上千条指令,有各种巧妙复杂的电路。

02

如何快速传递数据给 CPU

 

超高的时钟速度带来另一个问题,如何快速传递数据给 CPU。就像有强大的蒸汽机  但无法快速加煤,RAM 成了瓶颈。RAM 是 CPU 之外的独立组件,意味着数据要用线来传递,叫"总线"。总线可能只有几厘米,别忘了电信号的传输接近光速。

但 CPU 每秒可以处理上亿条指令,很小的延迟也会造成问题,RAM 还需要时间找地址,取数据,配置,输出数据。一条"从内存读数据"的指令可能要多个时钟周期,CPU 空等数据。

 

03

解决延迟的方法之一

 

解决延迟的方法之一是给 CPU 加一点 RAM - 叫"缓存",因为处理器里空间不大,所以缓存一般只有 KB 或 MB。而 RAM 都是 GB 起步,缓存提高了速度。

CPU 从 RAM 拿数据时,RAM 不用传一个,可以传一批。虽然花的时间久一点,但数据可以存在缓存,这很实用,因为数据常常是一个个按顺序处理。

举个例子,算餐厅的当日收入,先取 RAM 地址 100 的交易额,RAM 与其只给1个值,直接给一批值,把地址100到200都复制到缓存。当处理器要下一个交易额时,地址 101,缓存会说:"我已经有了,现在就给你"。不用去 RAM 取数据。

因为缓存离 CPU 近, 一个时钟周期就能给数据 - CPU 不用空等,比反复去 RAM 拿数据快得多,如果想要的数据已经在缓存,叫缓存命中,如果想要的数据不在缓存,叫缓存未命中

 

04

缓存可以当临时空间

 

缓存也可以当临时空间,存一些中间值,适合长/复杂的运算。

继续餐馆的例子,假设 CPU 算完了一天的销售额,想把结果存到地址 150,就像之前,数据不是直接存到 RAM,而是存在缓存。这样不但存起来快一些,如果还要接着算,取值也快一些。

 

05

缓存同步问题

 

但这样带来了一个有趣的问题,缓存和 RAM 不一致了。这种不一致必须记录下来,之后要同步。因此缓存里每块空间  有一个特殊标记叫 "脏位"。这可能是计算机科学家取的最贴切的名字。

同步一般发生在 当缓存满了而 CPU 又要缓存时,在清理缓存腾出空间之前,会先检查 "脏位",如果是"脏"的, 在加载新内容之前, 会把数据写回 RAM。

明天继续另一种提升性能的方法。

 

相关阅读:

   

  1. 简单的cpu指令

  2. CPU最重要的指令JUMP

  3. CPU的核心原理