CPU的并行执行

1 从执行程序角度(所以需要将程序的关联性降低)

基本的思想是,一个程序,计算机会读入一条指令,然后指向这条指令,同时读取另一条指令,然后执行那条指令,这实际上和正在执行的程序无关(程序可以分解为多条基础指令)。

CPU提供了这个庞大的硬件基础设施,使程序运行速度比一次只执行一条指令快,即它采用了一种称为超标量乱序执行的技术,你可以认为你的程序是一个顺序执行的执行序列,而CPU需要尽可能读取多的指令序列,然后CPU会把读入的指令拆开,发现有的指令之间不是相互依赖的,所以我可以开始执行程序后面的代码,而不是当前的代码,因为它们彼此独立,这被称为指令级并行性,也就是即使你的程序是一个顺序的指令序列,但实际上,这些代码可以拆分成不同的部分,某些部分相互依赖,某些部分不相依。
可以同时进行多项操作的CPU被称为超标量指令处理器,这种CPU可以在一个时钟周期内执行多条指令。乱序执行是现在处理器的模型。

在这里插入图片描述
ps:CPU里有高速本地缓存(程序员是不可操作的,即看不见的),这个缓存只是尽可能地提取你的指令,然后缓存把指令送入执行译码这个硬件,这个硬件将指令拆分成低级操作,并确定这些操作之间的依赖关系

功能单元(流水线技术,对于操作)

CPU还有一组功能单元能够执行这些低级操作,如算术运算。从内存中读取数据,写入数据到内存,所有这些操作都使用缓存(缓存可以视为某些内存数据的高速副本)。基本思想就是把你程序的操作进行拆分,重组,使这些基本单元尽可能保持繁忙,执行代码的不同片段,与以前不同的顺序执行不同的指令。

流水线的基本思想是将计算分解为一系列不同的阶段,一个简单的例子是你想要计算ab+c的值,你可以先做乘法,然后做加法,但乘法器做乘法比人算乘法更加复杂,乘法器将乘法分解为可以一个接一个地完成的更小步骤,你可以认为每个阶段都有一个单独的专用硬件,然后你可以做流水线操作,也就是当一个操作从一个阶段移动到下一个阶段时,前一个阶段空出来了,你可以填入新的数据。但要注意的是ab和ac不以任何方式相互依赖,所以我们可以同时计算它们两个的乘积,而当我们只有一个乘法器时,我们可以一个接一个地做,如下图,所以Time1,先计算ab的第一阶段,当Time2时,它将进入第二阶段,到T2时,它将继续进入第二阶段,到了Time3,它将进入第三阶段,但Time2时,我们可以同时计算ac的第一阶段,因为这个阶段是空闲的,即一个时钟内做了两次乘法。而对于p1p2,其显然取决于ab和ac的乘积,即有了关联性,因此无法在ac完成之前启动,然后我们计算p1p2,后面没有其他的操作,所以流水线后面是空的。本来需要九个步骤(3个乘法*3个时钟周期),所以流水线的基本思想有点像并行性。而这种并行性并不是说你拥有多分资源(如多个乘法器),而是把单个硬件上的操作,划分为紧密联系的顺序的多个步骤。
在这里插入图片描述
除法不能使用流水线,所以在大多数机器上,除法是一项非常昂贵的操作。

缓存:好像还设计缺页和命中! 待处理

一组寄存器可以看做是可读可写的一段内存,而单一个寄存器相当于一个内存符号。

为什么尽可能的使用连续内存来分配?:
CPU内部有多级缓存(当CPU在访问数据时,将命中率高(下次访问的可能性也高)的数据(连续的)放入缓存),放入缓存后,运行时双管齐下,先找缓存,找到运行,缓存没找到找内存,再将找到的数据放入缓存中继续运行,而若内存中还没找到就会发生缺页,即进行页错误,去磁盘上找,磁盘找到放在内存再放入缓存里。
在这里插入图片描述

CPU的时间片

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值