首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机最早提高性能的方法

计算机最早提高性能的方法

作者头像
硬核编程
发布2019-08-19 21:34:38
4930
发布2019-08-19 21:34:38
举报

转载请联系授权

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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员成长充电站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
  • 早期计算机的提速方式
  • 02
  • 如何快速传递数据给 CPU
  • 03
  • 解决延迟的方法之一
  • 04
  • 缓存可以当临时空间
  • 05
  • 缓存同步问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档