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

内容来源:计算机科学

指令和程序

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

计算机指令长度

由于早期计算机每个字只有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

相关推荐
柠石榴21 分钟前
【论文阅读笔记】《A survey on deep learning approaches for text-to-SQL》
论文阅读·笔记·深度学习·nlp·text-to-sql
田梓燊1 小时前
数学复习笔记 27
笔记
Lester_11011 小时前
嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
笔记·stm32·单片机·学习·freertos
jackson凌1 小时前
【Java学习笔记】Math方法
java·笔记·学习
z2014z1 小时前
软件评测师 综合测试 真题笔记
笔记
Humbunklung1 小时前
PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)
笔记·python·学习·pyqt
取酒鱼食--【余九】1 小时前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
sealaugh321 小时前
aws(学习笔记第四十三课) s3_sns_sqs_lambda_chain
笔记·学习·aws
阿超爱嵌入式2 小时前
STM32学习之I2C(理论篇)
stm32·嵌入式硬件·学习
2301_807606432 小时前
Java——抽象、接口(黑马个人听课笔记)
java·笔记