0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是SSE MMX和SSE的区别

西西 来源:csdn 作者: yangdashi888 2020-03-22 15:21 次阅读

什么是SSE

说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数据流,Single Instruction Multiple Data),是一种数据并行技术,能够在一条指令中同时对多个数据执行运算操作,增加处理器的数据吞吐量。SIMD特别的适用于多媒体应用等数据密集型运算。

Intel公司的单指令多数据流式扩展(SSE,Streaming SIMD Extensions)技术能够有效增强CPU浮点运算的能力。Visual Studio .NET 2003提供了对SSE指令集的编程支持,从而允许用户在C++代码中不用编写汇编代码就可直接使用SSE指令的功能。

1.1 历史

1996年Intel首先推出了支持MMX的Pentium处理器,极大地提高了CPU处理多媒体数据的能力,被广泛地应用于语音合成、语音识别音频视频编解码、图像处理和串流媒体等领域。但是MMX只支持整数运算,浮点数运算仍然要使用传统的x87协处理器指令。由于MMX与x87的寄存器相互重叠,在MMX代码中插入x87指令时必须先执行EMMS指令清除MMX状态,频繁地切换状态将严重影响性能。这限制了MMX指令在需要大量浮点运算的程序,如三维几何变换、裁剪和投影中的应用。

另一方面,由于x87古怪的堆栈式缓存器结构,使得硬件上将其流水线化和软件上合理调度指令都很困难,这成为提高x86架构浮点性能的一个瓶颈。为了解决以上这两个问题,AMD公司于1998年推出了包含21条指令的3DNow!指令集,并在其K6-2处理器中实现。K6-2是 第一个能执行浮点SIMD指令的x86处理器,也是第一个支持水平浮点寄存器模型的x86处理器。借助3DNow!,K6-2实现了x86处理器上最快的浮点单元,在每个时钟周期内最多可得到4个单精度浮点数结果,是传统x87协处理器的4倍。许多游戏厂商为3DNow!优化了程序,微软的DirectX 7也为3DNow!做了优化,AMD处理器的游戏性能第一次超过Intel,这大大提升了AMD在消费者心目中的地位。K6-2和随后的K6-III成为市场上的热门货。

1999年,随着Athlon处理器的推出,AMD为3DNow!增加了5条新的指令,用于增强其在DSP方面的性能,它们被称为“扩展3DNow!”(Extended 3DNow!)。

为了对抗3DNow!,Intel公司于1999年推出了SSE指令集。SSE几乎能提供3DNow!的所有功能,而且能在一条指令中处理两倍多的单精度浮点数;同时,SSE完全支持IEEE 754,在处理单精度浮点数时可以完全代替x87。这迅速瓦解了3DNow!的优势。

1999年后,随着主流操作系统和软件都开始支持SSE并为SSE优化,AMD在其2000年发布的代号为“Thunderbird”的Athlon处理器中添加了对SSE的完全支持(“经典”的Athlon或K7只支持SSE中与MMX有关的部分,AMD称之为“扩展MMX”即Extended MMX)。随后,AMD致力于AMD64架构的开发;在SIMD指令集方面,AMD跟随Intel,为自己的处理器添加SSE2和SSE3支持,而不再改进3DNow!。

2010年八月,AMD宣布将在新一代处理器中取消除了两条数据预取指令之外3DNow!指令的支持,并鼓励开发者将3DNow!代码重新用SSE实现。

1.2 MMX和SSE

MMX 是Intel在Pentium MMX中引入的指令集。其缺点是占用浮点数寄存器进行运算(64位MMX寄存器实际上就是浮点数寄存器的别名)以至于MMX指令和浮点数操作不能同时工作。为了减少在MMX和浮点数模式切换之间所消耗的时间,程序员们尽可能减少模式切换的次数,也就是说,这两种操作在应用上是互斥的。后来Intel在此基础上发展出SSE指令集;AMD在此基础上发展出3D Now指令集。

SSE(Streaming SIMD Extensions)是Intel在3D Now!发布一年之后,在PIII中引入的指令集,是MMX的超集。AMD后来在Athlon XP中加入了对这个指令集的支持。这个指令集增加了对8个128位寄存器XMM0-XMM7的支持,每个寄存器可以存储4个单精度浮点数。使用这些寄存器的程序必须使用FXSAVE和FXRSTR指令来保持和恢复状态。但是在PIII对SSE的实现中,浮点数寄存器又一次被新的指令集占用了,但是这一次切换运算模式不是必要的了,只是SSE和浮点数指令不能同时进入CPU的处理线而已。

SSE2是Intel在P4的最初版本中引入的,但是AMD后来在Opteron 和Athlon 64中也加入了对它的支持。这个指令集添加了对64位双精度浮点数的支持,以及对整型数据的支持,也就是说这个指令集中所有的MMX指令都是多余的了,同时也避免了占用浮点数寄存器。这个指令集还增加了对CPU的缓存的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位模式(AMD64)才可以使用这些寄存器。Intel后来在其EM64T架构中也增加了对AMD64的支持。

SSE3是Intel在P4的Prescott版中引入的指令集,AMD在Athlon 64的第五个版本中也添加了对它的支持。这个指令集扩展的指令包含寄存器的局部位之间的运算,例如高位和低位之间的加减运算;浮点数到整数的转换,以及对超线程技术的支持。

下面是一个演示的例子

使用纯C++

什么是SSE MMX和SSE的区别

什么是SSE MMX和SSE的区别

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指令集
    +关注

    关注

    0

    文章

    206

    浏览量

    23174
  • SIMD
    +关注

    关注

    0

    文章

    33

    浏览量

    10226
  • DCT
    DCT
    +关注

    关注

    1

    文章

    55

    浏览量

    19737
收藏 人收藏

    评论

    相关推荐

    Arm CoreLink SSE-100子系统技术参考手册

    SSE-100提供了一个经过验证的参考预集成硬件和软件子系统可以扩展以提供物联网端点系统
    发表于 08-02 16:46

    Arm Corstone SSE-700子系统技术参考手册

    Arm Corstone SSE-700是一个灵活的子系统,旨在为基于Arm Cortex‑A32、Cortex‑M或外部系统中的其他主机的丰富物联网(IoT)应用程序提供安全解决方案
    发表于 08-02 07:46

    Arm Corstone SSE-123子系统技术参考手册

    SSE‑123示例子系统集成了关键Arm组件的子系统,实现针对物联网(IoT)片上系统(SoC)设计的系统的核心功能。
    发表于 08-09 06:00

    Arm Corstone™ SSE‑123子系统技术概述

    SSE‑123示例子系统集成了一个由关键Arm组件组成的子系统,这些组件实现了针对物联网(IoT)片上系统(SoC)设计的系统的核心功能。
    发表于 08-10 07:40

    Arm Corstone SSE-050子系统技术参考手册

    SSE-050提供预先集成和验证的流程和技术不可知参考,以及可扩展以提供物联网终端系统的硬件和软件子系统。 下图显示了由多个终端和一个共享控制节点组成的物联网系统。
    发表于 08-17 06:16

    Arm Corstone SSE-710子系统技术参考手册

    SSE-710子系统(SSE-710)是一个灵活的子系统,旨在基于ARM®支持的Cortex®-A处理器、Cortex®-M或外部系统中的其他管理器,为丰富的物联网(IoT)应用提供安全的解决方案
    发表于 08-17 08:00

    ARM CoreLink SSE-200子系统技术概述

    SSE-200子系统为物联网(IoT)和嵌入式细分市场的产品提供了起点。 SSE-200子系统推动系统架构和软件标准化,旨在提供包含前沿Cortex-M和TrustZone技术的高性能计算子系统。 该解决方案包括硬件、软件和软件工具,以支持快速开发物联网片上系统(SoC)
    发表于 08-24 06:35

    sse5指令集下载

    sse5指令集下载 SIMD (single instruction, multiple data) instructions, also called packed instructions
    发表于 12-25 11:14 33次下载

    sse指令集

    sse指令集 SSE(Streaming SIMD Extensions,单指令多数据流扩展)指令集是Intel在Pentium III处理器中率先推出的。其实,早在PIII正式推出之前
    发表于 12-25 10:59 1379次阅读

    什么是SSE/SIMD/Speculative execut

    什么是SSE/SIMD/Speculative execution? SSE(Streaming SIMD Extensions,单一指令多数据流扩展) 英特尔开发的第二代SIMD指令集,有70条指令,
    发表于 02-04 11:14 475次阅读

    什么是Superscalar/SSE/SQRT

    什么是Superscalar/SSE/SQRT   Superscalar: (超标量体系结构)在同一时钟周期可以执行多条指令流的处理器架构。 SSE: (Streami
    发表于 02-04 11:27 532次阅读

    基于SSE的FDTD程序设计李太全

    基于SSE的FDTD程序设计_李太全
    发表于 03-17 08:00 1次下载

    N 沟道 80 V、2.5 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN2R5-80SSE

    N 沟道 80 V、2.5 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN2R5-80SSE
    发表于 02-07 18:55 0次下载
    N 沟道 80 V、2.5 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN2R5-80<b class='flag-5'>SSE</b>

    N 沟道 80 V、1.9 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN1R9-80SSE

    N 沟道 80 V、1.9 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN1R9-80SSE
    发表于 02-07 18:55 0次下载
    N 沟道 80 V、1.9 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN1R9-80<b class='flag-5'>SSE</b>

    N 沟道 100 V、2.3 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN2R3-100SSE

    N 沟道 100 V、2.3 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN2R3-100SSE
    发表于 02-07 18:56 0次下载
    N 沟道 100 V、2.3 mOhm MOSFET,采用增强型 SOA,采用 LFPAK88-PSMN2R3-100<b class='flag-5'>SSE</b>