计算机科学(学习笔记三)

内容来源:计算机科学

指令和程序

指令:指示计算机要做什么的代码,多条指令共同组成程序。

计算机指令长度

由于早期计算机每个字只有8位,指令只占4位,意味着只能有16个指令,这远远不够。

现代计算机有两种方式解决指令不够用的问题:

最直接的是用更多位来表示指令,如32位或64位。

采用"可变指令长度",令不同的指令的长度不同,尽量节约位数。

该情况下,部分指令后面需要跟数据,如JUMP,称为立即值。

高级CPU设计

现代处理器有专门的电路来处理图形操作,解码压缩视频,加密文档等等,如果使用标准操作来实现需要很多个时钟周期。即便如此,现如今的CPU一秒最少也有上亿次的指令,超高的时钟速度带来一个问题,如何快速地传递数据给CPU,也就是RAM出现了瓶颈。

总线:

RAM是CPU独立之外的组件,所以数据的传递需要通过数据线来实现,我们称之为总线。RAM传输数据需要经过很多到程序,取地址,取数据,配置.....一条普通的指令就需要很多个时钟周期,这会造成CPU空等,就像一台高效的蒸汽机却没有煤能烧。

解决方法:

**1.**给CPU加一点RAM------"缓存"

如果没有缓存,也就是RAM只能一个一个的传输数据给CPU,而有了缓存之后RAM可以成批成批的给CPU传输数据。 缓存也可以临时空间,存一些中间值,适合长或者复杂的运算。

CPU将计算好的数据返回到缓存中,而不是直接存到RAM中,这同样会加快运行速度,但出现了一个问题:缓存和RAM不一致,这种不一致必须记录下来之后要同步。因此缓存里的每块空间都有一个特殊标记,叫做**"脏位"**(dirty bit)。

同步一般发生在当缓存满了而CPU又要缓存的时候,在清理缓存之前,会先检查"脏位",如果是"脏"的就会在加载新缓存前将数据写回RAM中。

2."指令流水线"

也就是并行处理,CPU的每一部分并不冲突,可同时进行所有部分。之前可能三个时钟周期完成一个指令,现在可以一个周期完成一个指令。

同样也一定存在一定的问题,如数据的"依赖性",方法是动态排序有依赖关系的指令。又如"问题跳转"(JUMP),会改变指令的顺序,方法是"推测执行"(分支预测),现代CPU预测准确率超过90%。

3.运行多个指令流(超标量处理器)

刚刚说过的方法都是优化一个指令流的吞吐量,另一个方法是,同时运行多个指令流,一个时钟周期完成多个指令(通过使用多核处理器)

多核处理器的意思就是一个CPU芯片里有多个独立的处理单元,他们可以合作运算,共用缓存。当有更高需求时会使用多个CPU

相关推荐
小白郭莫搞科技3 小时前
鸿蒙跨端框架Flutter学习:CustomTween自定义Tween详解
学习·flutter·harmonyos
阳光九叶草LXGZXJ4 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
A9better5 小时前
嵌入式开发学习日志53——互斥量
stm32·嵌入式硬件·学习
进阶小白猿6 小时前
Java技术八股学习Day30
java·开发语言·学习
近津薪荼6 小时前
优选算法——双指针6(单调性)
c++·学习·算法
三水不滴6 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
修修修也7 小时前
【无标题】技术欲望是怎样渐进增长的?
学习
whale fall7 小时前
celery -A tool.src.main worker --loglevel=info --queues=worker1_queue & 什么意思
python·学习·apache
wotaifuzao8 小时前
【Keil 5安装】keil 5最新版本安装+环境配置+下载百度资源分享(安装包,注册机等)
stm32·单片机·嵌入式硬件·mcu·学习·keil5·最新keil
ziqi5228 小时前
第二十四天笔记
笔记