超线程与SIMD

超线程与SMID

1. 超线程

流水线、分支预测以及乱序执行,以及超标量和超长指令字,本质上都是通过同一时间执行两条指令来提升 CPU 的吞吐率。

然而,更深的流水线意味着同时在流水线里面的指令就多,相互的依赖关系就多。

超线程(Hyper-Threading)一般称为同时多线程(Simultaneous Multi-Threading)。超线程的 CPU 是把一个物理层面的 CPU 核心,“伪装”成两个逻辑层面的 CPU 核心。。这个 CPU,会在硬件层面增加很多电路,使得我们可以在一个 CPU 核心内部,维护两个不同线程的指令的状态信息。

在这里插入图片描述

在一个物理 CPU 核心内部,会有双份的 PC 寄存器、指令寄存器乃至条件码寄存器。这样,这个 CPU 核心就可以维护两条并行的指令的状态。在外面看起来,似乎有两个逻辑层面的 CPU 在同时运行。

对于指令译码器、ALU,超线程 CPU 只有一份。超线程并不是真的同时运行两条指令,否则就成了物理多核了。

超线程的目的:当一个线程 A 的指令在流水线里停顿的时候,让另外一个线程去执行指令。因为这个时候,CPU 的译码器和 ALU 就空出来了,另外一个线程 B 就可以做自己需要的事情。这个线程 B 和 A 指令之间没有依赖关系。

超线程的使用场景:由于并没有增加真的功能单元,超线程只在特定的应用场景下效果较好。一般是在那些各个线程“等待”时间比较长的应用场景下。比如,我们需要应对很多请求的数据库应用,就很适合使用超线程。各个指令都要等待访问内存数据,但是并不需要做太多计算。

2. SIMD

SIMD(Single Instruction Multiple Data)在获取数据和执行指令的时候,都做到了并行。

在从内存里面读取数据的时候,SIMD 是一次性读取多个数据。比如 Intel 的 SSE 指令集,在 CPU 里面添上了 8 个 128 bits 的寄存器。一个寄存器可以一次性加载 4 个整数。

在指令执行的层面,SIMD 也可以是并行。4 个整数相加 1,彼此之间没有依赖,也就没有冒险问题需要处理。只要 CPU 里有足够多的功能单元,能够同时进行这些计算,这个加法就是 4 路同时并行的,自然也省下了时间。

此文章为 2 月 day1学习笔记,内容来源于 极客时间《深入浅出计算机组成原理》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Balaaam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值