中央处理器CPU中的技术

一、 知识加油站

1. cpu 指令的执行过程

  • 取指:cpu 获取 程序计数器 中存放的指令地址。读取内存中此地址对应指令并存入指令寄存器
  • 译码:指令译码器,解析指令
  • 运行:算数逻辑单元计算
  • 回写:将执行结果写入对应位置

二. cpu中的技术与进化

  • 最先的cpu运行时只能顺序执行指令。意思是只有一条指令从取指到回写执行完毕才可以执行下一条指令。可以明显看到cpu在“摸鱼”,整个指令周期内只有一条指令被执行。弊端在于资源浪费,指令周期内有三个步骤处于等待空闲状态;
  • 然后cpu为了应对这种情况做了这样一个事来提高cpu利用率:指令流水线系统,也叫作指令预处理。顾名思义就是提前处理下一条指令,这样每个部件都可以同时并发运行,如下图:
    流水线
    • 假如顺序执行中每个步骤耗时 1ns,那么处理100条指令需要多久?4 * 4 = 16 ns
    • 假如在流水线中每个步骤耗时 1ns,那么处理4条指令需要多久?4 + (3 * 1)=7 ns
    • 假如在流水线拆分更细,4个步骤变为8个步骤,每个步骤耗时 0.5ns,那么处理4条指令需要多久?4 + (3 * 0.5)= 5.5 ns
    • 所以是不是意味着将流水线拆分的足够细足够多,那么就会运行的足够快呢?但实际上当拆分的足够多时反而会降低运行速度,猜猜为什么?
    • 流水线拆分越深越细,需要的电路越多,同时流水线中数据传递也需要耗时,而且还会带来功耗的增加。综合这些问题反而会导致性能的下降。所以流水线的深度级数只能找一个相对的平衡点
  • 使用流水线技术后,实际上并不能完全按照预期运行,因为如果同时有多个流水线模块访问内存时只能阻塞等待「结构冒险:硬件的资源竞争」;而且当一些指令依赖其他指令的结果时,也只能停下来等待「数据冒险:指令依赖其他指令的结果」;更要命的是,遇到分支的情况时并不能预测到下个分支运行哪个指令「控制冒险:流水线无法预知处于分支节点的下一条指令」。这些问题被总结为流水线中的冒险问题
  • 再cpu与工艺制程的发展,运行速度也是越来越快,内存读写跟不上了。但是发现当使用某个数据时,大概率上会访问连续的空间(见下方cpp-demo)。所以cpu又搞了一块高速缓冲区「缓存」,这样就使得每条指令和数据都要从内存读取一次,变为读取一块内存数据,在需要读内存时先访问缓存,如果缓存有就直接读缓存,减少内存的访问次数。
for(int index = 0; index < 100; index++)  
	result += data[index];
  • 缓存技术又发展为指令缓存与数据缓存,一级缓存发展到二级三级缓存

  • 同时在多核技术的发展下,出现多核数据不一致的问题。举例来说就是当两核同时执行i++时,本应该得到3,但是由于都从内存读到了i=1,导致两个核都计算完成并回写内存后,最终写入的是2。所以定义了一个叫原子操作的东西,表示这是不可分割的动作,谁要执行原子操作,就在总线上加LOCK#,虽然锁总线可以规避访问冲突,但是锁总线很影响其他的核心来操作内存。

  • 有很多时候数据不都从内存读取,而是从缓存直接拿,因此仍然存在多核缓存数据不一致的问题。所以cpu核心之间牵入一条专线片内总线,还制定了一套规则缓存一致性协议MESI,用来同步缓存数据,具体在此不展开叙述。有了这项技术,再执行原子操作时,再也不需要锁总线了。

  • 乱序执行

  • 动态预测

  • 并行计算

  • 超线程技术

文章持续完善中

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 现代中央处理器CPU)通常使用基于硬件的分支预测方法来提高程序的执行效率。在分支预测CPU 会尝试预测程序下一步的执行流程,如果预测正确,则可以避免浪费时间去执行错误的分支。 具体来说,CPU 会使用一个叫做分支预测缓存(Branch Prediction Cache)的硬件组件来存储最近执行过的分支信息。在执行分支指令时,CPU 会先在分支预测缓存查找有没有与当前分支指令相似的信息。如果有,则根据这些信息来预测程序下一步的执行流程;如果没有,则会使用其他的硬件组件(比如说局部性原理分析器(Locality Predictor))来预测。 在预测过程,如果 CPU 预测正确,则可以继续执行程序;如果预测错误,则会把执行流程重新定向到正确的分支上,并且会把错误的预测结果存储在分支预测缓存,以便下次使用。 ### 回答2: 现代中央处理器CPU)的分支预测是通过一系列算法和技术来实现的。我们来看一下CPU如何进行分支预测的过程。 首先,CPU会根据程序的指令流和历史执行情况分析进行分支预测。它会检查近期执行的指令,分析分支的历史行为和模式,例如是否经常出现跳转指令、条件分支等。通过这些信息,CPU可以建立起一种预测模型,用于预测下一条指令是否会发生分支。 其次,CPU会在预测分支之后,开始并行执行预测的指令。这个过程被称为“超流水线执行”。CPU会同时执行预测的分支路径和未预测的路径,以保持流水线的高效运行。 然后,当CPU预测正确时,它会继续执行预测的分支路径,并且将预测错误的指令丢弃。这可以避免浪费时间和资源来重新执行错误的指令。这种方式称为“动态预测”。 如果CPU预测错误,它会执行后备计划来修复预测错误的影响。这可能包括清空流水线、重新加载指令等。CPU会记录预测错误并对预测模型进行修订,以提高下次的预测准确性。 此外,现代CPU还使用一些优化技术来提高分支预测的准确性。例如,CPU会使用分支目标缓冲区(Branch Target Buffer)来存储分支指令的目标地址,以加快分支目标地址的检索。CPU还可以使用统计信息和机器学习等方法来改善分支预测的准确性。 总的来说,现代中央处理器通过分析指令流和历史执行情况,在预测分支之后进行超流水线执行,并根据预测的准确性进行相应的修复和优化,以实现更高效的分支预测。 ### 回答3: 现代中央处理器CPU)通过分支预测来提高指令执行的效率。分支预测是一种技术,用于在程序执行期间预测分支指令的结果,即根据当前指令的条件进行预测下一条要执行的指令。 首先,CPU有一个分支预测器,它根据之前执行过的指令序列和历史分支结果来做出预测。这个分支预测器通常包括两个主要的组件:分支历史记录表和分支目标缓冲器。 分支历史记录表是一个存储各种分支指令的历史信息的数据结构。它记录了之前分支指令的执行结果,以便CPU根据历史数据来预测当前分支指令的结果。 分支目标缓冲器则是记录分支指令跳转目标地址的缓冲区。当分支指令被执行时,CPU将预测的目标地址存储在分支目标缓冲器,以防止因分支预测错误而导致的指令执行断。 当CPU执行分支指令时,它首先会根据当前指令的条件进行预测,选择要执行的下一条指令。如果分支预测器预测正确,CPU会顺利执行预测的指令序列,提高程序执行效率。但如果分支预测器预测错误,CPU会丢弃预测的指令序列,重新执行正确的指令。 为了提高分支预测的准确性,现代CPU还采用了一些优化技术,如动态分支预测和分支目标缓冲器。动态分支预测根据当前程序的执行情况,在运行时动态地调整分支预测策略。分支目标缓冲器则根据之前分支指令的执行结果,缓存分支目标地址,提高分支指令的预测准确性。 总而言之,现代中央处理器通过分支预测器和相关技术来预测分支指令的结果,从而提高指令执行的效率。这些技术不断发展和优化,以满足日益复杂的程序执行需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值