深入浅出计算机组成原理
徐文浩
bothub 创始人
70432 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
深入浅出计算机组成原理
15
15
1.0x
00:00/00:00
登录|注册

27 | SIMD:如何加速矩阵乘法?

历史影响
数据并行加速
SIMD指令集
单指令多数据流
性能提升案例
适用场景
作用和效果
Intel的超线程技术
吞吐率提升
数据并行计算
指令级并行
流水线深度
MIMD处理方式
多核CPU
超长指令字技术
超标量技术
SIMD技术
超线程技术
CPU架构优化
性能提升的技术方案
性能提升的架构设计

该思维导图由 AI 生成,仅供参考

上一讲里呢,我进一步为你讲解了 CPU 里的“黑科技”,分别是超标量(Superscalar)技术和超长指令字(VLIW)技术。
超标量(Superscalar)技术能够让取指令以及指令译码也并行进行;在编译的过程,超长指令字(VLIW)技术可以搞定指令先后的依赖关系,使得一次可以取一个指令包。
不过,CPU 里的各种神奇的优化我们还远远没有说完。这一讲里,我就带你一起来看看,专栏里最后两个提升 CPU 性能的架构设计。它们分别是,你应该常常听说过的超线程(Hyper-Threading)技术,以及可能没有那么熟悉的单指令多数据流(SIMD)技术。

超线程:Intel 多卖给你的那一倍 CPU

不知道你是不是还记得,在第 21 讲,我给你介绍了 Intel 是怎么在 Pentium 4 处理器上遭遇重大失败的。如果不太记得的话,你可以回过头去回顾一下。
那时我和你说过,Pentium 4 失败的一个重要原因,就是它的 CPU 的流水线级数太深了。早期的 Pentium 4 的流水线深度高达 20 级,而后期的代号为 Prescott 的 Pentium 4 的流水线级数,更是到了 31 级。超长的流水线,使得之前我们讲的很多解决“冒险”、提升并发的方案都用不上。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

SIMD技术是一种利用单指令多数据流的并行计算方案,能够显著提高CPU的计算效率。本文首先介绍了超线程技术,将一个物理CPU核心“伪装”成两个逻辑CPU核心,实现指令的并行运行。然后详细解释了SIMD技术的原理和应用,通过对比循环计算和向量化计算的性能差异,阐述了SIMD技术的优势。文章还指出SIMD技术在处理大量数据并行计算时的优势,尤其在向量计算和矩阵运算方面具有重要应用价值。作者还回顾了SIMD技术的历史发展,指出其在个人电脑多媒体运算能力方面的重要作用。总的来说,本文深入浅出地介绍了超线程和SIMD技术在提升CPU性能方面的作用,为读者提供了有益的技术知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出计算机组成原理》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(40)

  • 最新
  • 精选
  • 任鹏斌
    java有办法使用到SIMD指令集吗?

    作者回复: 任鹏斌同学, 你好,可以啊,通过JNI,或者本身编译器会做自动向量化 可以去看看知乎上的这个回答 https://www.zhihu.com/question/267178154/answer/348228410

    2019-12-26
    2
    10
  • Jason
    前几天研究AVX指令集,发现gcc和icc都是可以自动进行向量化优化的,自己编写向量化程序获得的性能提升远不如编译器的自动优化

    作者回复: 是的,大部分情况下,依赖编译器是OK的,现代编译器已经非常强大了。不过要避免写一些反模式的代码,使得编译器优化不了。

    2020-02-05
    7
  • 小先生
    我的理解是分别从线程和代码角度来避免冒险的可能,从而提高效率,不知道这样的理解是否正确

    作者回复: 可以这样说,通过找两个完全不相关的指令,这样就没有冒险的问题存在,同时运行也不会发生冒险。

    2019-09-02
    3
  • 曾经瘦过
    超线程技术是伪装成2个核心,在期中一个“线程”需要等待的时候去执行另一个“线程”,因此比较适合并发大量IO的操作
    2019-10-10
    1
    31
  • westfall
    那我们平时写的程序怎么直接使用SIMD指令呢?
    2019-10-21
    2
    24
  • 拯救地球好累
    ---总结--- 为了提高没有依赖关系的指令间的并行性,引入了超线程技术。 超线程技术:在硬件层面为每个线程设立单独的PC寄存器、指令寄存器、条件码寄存器等线程相关硬件,从而让一个CPU物理核心中有多个逻辑核心的目的。这样当一个线程在流水线中停顿时,另一个线程就可以去执行指令。 从超线程技术中可以看到,软件层面概念的提出也会影响到硬件层面的设计,而结合硬件条件也能更好地指导软件设计。 为了针对可向量化的计算提供进一步的优化,引入了SIMD。 SIMD:利用单个指令读取并操作多个数据流的方式加大并行化程度。
    2019-10-27
    17
  • 易儿易
    终于知道为什么挖矿烧显卡啦~
    2019-06-27
    1
    8
  • A君
    原来假cpu核就是用超线程技术实现的,假核数会是真核数的2倍,为什么不是3倍呢,原来它的造假的目的是为了填补流水线暂停的浪费,本来需要替补的地方就很少,容不下太多的线程空间,况且超线程只适合那种频繁访问磁盘,或经常待机的等待输入的程序,只有这些要比较长时间等待的指令才能发挥超线程的效果。 使用simd的前提是cpu支持mmx指令集,它的工作原理是cpu里有一组多个bit位的寄存器来存放一次读到的多条数据,然后对它们进行并行。
    2020-07-03
    4
  • WENMURAN
    加速矩阵乘法: 超线程:超线程CPU其实就是把一个月物理层面的CPU核心,伪装成两个逻辑层面的CPU核心。在硬件层面增加一部分指令,在内部维持两个指令的状态信息。比如有两个PC寄存器,指令寄存器和条件吗寄存器,这样就可以维护两条并行的指令。但事实上并不是真的运行两条指令,只是在一条指令停顿的时候运行另一条指令。 SIMD单指令多数据流:区别于单指令单数据流(简单的一步一步执行)和多指令多数据流(多核运行)。而SIMD为什么快,是因为他在取指令和执行指令的阶段都做到了并行
    2020-04-20
    4
  • prader26
    1 超线程技术是在cpu中添加逻辑电路,使一个cpu核心伪装成2个或者多个cpu核心,在这个线程,需要等待的时候,cpu去计算别的线程需要计算的部分,这两个线程都在执行过程中,都没有停下。 2 SIMD(单线程多数据流)技术,是一种指令级的并行计算。一次从寄存器中取多个数据,如果这些数据的计算没有依赖关系可以同时并发计算,应用场景较多的是向量运算,也就是音频、视频技术,还有深度学习的计算等。
    2019-09-24
    4
收起评论
显示
设置
留言
40
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部