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

内容来源:计算机科学

指令和程序

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

计算机指令长度

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

相关推荐
Mr.Jessy17 小时前
JavaScript高级:构造函数与原型
开发语言·前端·javascript·学习·ecmascript
玄斎21 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
清风一徐1 天前
禅道从18.3升级到21.7.6版本
笔记
Jack___Xue1 天前
LangChain实战快速入门笔记(六)--LangChain使用之Agent
笔记·langchain·unix
零度@1 天前
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
数据库·笔记·sql
im_AMBER1 天前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
其美杰布-富贵-李1 天前
HDF5文件学习笔记
数据结构·笔记·学习
d111111111d1 天前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
静小谢1 天前
前后台一起部署,vite配置笔记base\build
前端·javascript·笔记
ask_baidu1 天前
Doris笔记
android·笔记