0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是SSE MMX和SSE的區(qū)別

西西 ? 來源:csdn ? 作者: yangdashi888 ? 2020-03-22 15:21 ? 次閱讀

什么是SSE

說到SSE,首先要弄清楚的一個概念是SIMD(單指令多數(shù)據(jù)流,Single Instruction Multiple Data),是一種數(shù)據(jù)并行技術(shù),能夠在一條指令中同時對多個數(shù)據(jù)執(zhí)行運(yùn)算操作,增加處理器的數(shù)據(jù)吞吐量。SIMD特別的適用于多媒體應(yīng)用等數(shù)據(jù)密集型運(yùn)算。

Intel公司的單指令多數(shù)據(jù)流式擴(kuò)展(SSE,Streaming SIMD Extensions)技術(shù)能夠有效增強(qiáng)CPU浮點(diǎn)運(yùn)算的能力。Visual Studio .NET 2003提供了對SSE指令集的編程支持,從而允許用戶在C++代碼中不用編寫匯編代碼就可直接使用SSE指令的功能。

1.1 歷史

1996年Intel首先推出了支持MMX的Pentium處理器,極大地提高了CPU處理多媒體數(shù)據(jù)的能力,被廣泛地應(yīng)用于語音合成、語音識別音頻視頻編解碼、圖像處理和串流媒體等領(lǐng)域。但是MMX只支持整數(shù)運(yùn)算,浮點(diǎn)數(shù)運(yùn)算仍然要使用傳統(tǒng)的x87協(xié)處理器指令。由于MMX與x87的寄存器相互重疊,在MMX代碼中插入x87指令時必須先執(zhí)行EMMS指令清除MMX狀態(tài),頻繁地切換狀態(tài)將嚴(yán)重影響性能。這限制了MMX指令在需要大量浮點(diǎn)運(yùn)算的程序,如三維幾何變換、裁剪和投影中的應(yīng)用。

另一方面,由于x87古怪的堆棧式緩存器結(jié)構(gòu),使得硬件上將其流水線化和軟件上合理調(diào)度指令都很困難,這成為提高x86架構(gòu)浮點(diǎn)性能的一個瓶頸。為了解決以上這兩個問題,AMD公司于1998年推出了包含21條指令的3DNow!指令集,并在其K6-2處理器中實(shí)現(xiàn)。K6-2是 第一個能執(zhí)行浮點(diǎn)SIMD指令的x86處理器,也是第一個支持水平浮點(diǎn)寄存器模型的x86處理器。借助3DNow!,K6-2實(shí)現(xiàn)了x86處理器上最快的浮點(diǎn)單元,在每個時鐘周期內(nèi)最多可得到4個單精度浮點(diǎn)數(shù)結(jié)果,是傳統(tǒng)x87協(xié)處理器的4倍。許多游戲廠商為3DNow!優(yōu)化了程序,微軟的DirectX 7也為3DNow!做了優(yōu)化,AMD處理器的游戲性能第一次超過Intel,這大大提升了AMD在消費(fèi)者心目中的地位。K6-2和隨后的K6-III成為市場上的熱門貨。

1999年,隨著Athlon處理器的推出,AMD為3DNow!增加了5條新的指令,用于增強(qiáng)其在DSP方面的性能,它們被稱為“擴(kuò)展3DNow!”(Extended 3DNow?。?/p>

為了對抗3DNow!,Intel公司于1999年推出了SSE指令集。SSE幾乎能提供3DNow!的所有功能,而且能在一條指令中處理兩倍多的單精度浮點(diǎn)數(shù);同時,SSE完全支持IEEE 754,在處理單精度浮點(diǎn)數(shù)時可以完全代替x87。這迅速瓦解了3DNow!的優(yōu)勢。

1999年后,隨著主流操作系統(tǒng)和軟件都開始支持SSE并為SSE優(yōu)化,AMD在其2000年發(fā)布的代號為“Thunderbird”的Athlon處理器中添加了對SSE的完全支持(“經(jīng)典”的Athlon或K7只支持SSE中與MMX有關(guān)的部分,AMD稱之為“擴(kuò)展MMX”即Extended MMX)。隨后,AMD致力于AMD64架構(gòu)的開發(fā);在SIMD指令集方面,AMD跟隨Intel,為自己的處理器添加SSE2和SSE3支持,而不再改進(jìn)3DNow!。

2010年八月,AMD宣布將在新一代處理器中取消除了兩條數(shù)據(jù)預(yù)取指令之外3DNow!指令的支持,并鼓勵開發(fā)者將3DNow!代碼重新用SSE實(shí)現(xiàn)。

1.2 MMX和SSE

MMX 是Intel在Pentium MMX中引入的指令集。其缺點(diǎn)是占用浮點(diǎn)數(shù)寄存器進(jìn)行運(yùn)算(64位MMX寄存器實(shí)際上就是浮點(diǎn)數(shù)寄存器的別名)以至于MMX指令和浮點(diǎn)數(shù)操作不能同時工作。為了減少在MMX和浮點(diǎn)數(shù)模式切換之間所消耗的時間,程序員們盡可能減少模式切換的次數(shù),也就是說,這兩種操作在應(yīng)用上是互斥的。后來Intel在此基礎(chǔ)上發(fā)展出SSE指令集;AMD在此基礎(chǔ)上發(fā)展出3D Now指令集。

SSE(Streaming SIMD Extensions)是Intel在3D Now!發(fā)布一年之后,在PIII中引入的指令集,是MMX的超集。AMD后來在Athlon XP中加入了對這個指令集的支持。這個指令集增加了對8個128位寄存器XMM0-XMM7的支持,每個寄存器可以存儲4個單精度浮點(diǎn)數(shù)。使用這些寄存器的程序必須使用FXSAVE和FXRSTR指令來保持和恢復(fù)狀態(tài)。但是在PIII對SSE的實(shí)現(xiàn)中,浮點(diǎn)數(shù)寄存器又一次被新的指令集占用了,但是這一次切換運(yùn)算模式不是必要的了,只是SSE和浮點(diǎn)數(shù)指令不能同時進(jìn)入CPU的處理線而已。

SSE2是Intel在P4的最初版本中引入的,但是AMD后來在Opteron 和Athlon 64中也加入了對它的支持。這個指令集添加了對64位雙精度浮點(diǎn)數(shù)的支持,以及對整型數(shù)據(jù)的支持,也就是說這個指令集中所有的MMX指令都是多余的了,同時也避免了占用浮點(diǎn)數(shù)寄存器。這個指令集還增加了對CPU的緩存的控制指令。AMD對它的擴(kuò)展增加了8個XMM寄存器,但是需要切換到64位模式(AMD64)才可以使用這些寄存器。Intel后來在其EM64T架構(gòu)中也增加了對AMD64的支持。

SSE3是Intel在P4的Prescott版中引入的指令集,AMD在Athlon 64的第五個版本中也添加了對它的支持。這個指令集擴(kuò)展的指令包含寄存器的局部位之間的運(yùn)算,例如高位和低位之間的加減運(yùn)算;浮點(diǎn)數(shù)到整數(shù)的轉(zhuǎn)換,以及對超線程技術(shù)的支持。

下面是一個演示的例子

使用純C++

什么是SSE MMX和SSE的區(qū)別

什么是SSE MMX和SSE的區(qū)別

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 指令集
    +關(guān)注

    關(guān)注

    0

    文章

    226

    瀏覽量

    23384
  • SIMD
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    10307
  • DCT
    DCT
    +關(guān)注

    關(guān)注

    1

    文章

    56

    瀏覽量

    19884
收藏 人收藏

    評論

    相關(guān)推薦

    Arm CoreLink SSE-100子系統(tǒng)技術(shù)參考手冊

    SSE-100提供了一個經(jīng)過驗(yàn)證的參考預(yù)集成硬件和軟件子系統(tǒng)可以擴(kuò)展以提供物聯(lián)網(wǎng)端點(diǎn)系統(tǒng)
    發(fā)表于 08-02 16:46

    Arm Corstone SSE-700子系統(tǒng)技術(shù)參考手冊

    Arm Corstone SSE-700是一個靈活的子系統(tǒng),旨在為基于Arm Cortex?A32、Cortex?M或外部系統(tǒng)中的其他主機(jī)的豐富物聯(lián)網(wǎng)(IoT)應(yīng)用程序提供安全解決方案
    發(fā)表于 08-02 07:46

    Arm Corstone SSE-123子系統(tǒng)技術(shù)參考手冊

    SSE?123示例子系統(tǒng)集成了關(guān)鍵Arm組件的子系統(tǒng),實(shí)現(xiàn)針對物聯(lián)網(wǎng)(IoT)片上系統(tǒng)(SoC)設(shè)計(jì)的系統(tǒng)的核心功能。
    發(fā)表于 08-09 06:00

    Arm Corstone? SSE?123子系統(tǒng)技術(shù)概述

    SSE?123示例子系統(tǒng)集成了一個由關(guān)鍵Arm組件組成的子系統(tǒng),這些組件實(shí)現(xiàn)了針對物聯(lián)網(wǎng)(IoT)片上系統(tǒng)(SoC)設(shè)計(jì)的系統(tǒng)的核心功能。
    發(fā)表于 08-10 07:40

    Arm Corstone SSE-050子系統(tǒng)技術(shù)參考手冊

    SSE-050提供預(yù)先集成和驗(yàn)證的流程和技術(shù)不可知參考,以及可擴(kuò)展以提供物聯(lián)網(wǎng)終端系統(tǒng)的硬件和軟件子系統(tǒng)。 下圖顯示了由多個終端和一個共享控制節(jié)點(diǎn)組成的物聯(lián)網(wǎng)系統(tǒng)。
    發(fā)表于 08-17 06:16

    Arm Corstone SSE-710子系統(tǒng)技術(shù)參考手冊

    SSE-710子系統(tǒng)(SSE-710)是一個靈活的子系統(tǒng),旨在基于ARM?支持的Cortex?-A處理器、Cortex?-M或外部系統(tǒng)中的其他管理器,為豐富的物聯(lián)網(wǎng)(IoT)應(yīng)用提供安全的解決方案
    發(fā)表于 08-17 08:00

    ARM CoreLink SSE-200子系統(tǒng)技術(shù)概述

    SSE-200子系統(tǒng)為物聯(lián)網(wǎng)(IoT)和嵌入式細(xì)分市場的產(chǎn)品提供了起點(diǎn)。 SSE-200子系統(tǒng)推動系統(tǒng)架構(gòu)和軟件標(biāo)準(zhǔn)化,旨在提供包含前沿Cortex-M和TrustZone技術(shù)的高性能計(jì)算子系統(tǒng)。 該解決方案包括硬件、軟件和軟件工具,以支持快速開發(fā)物聯(lián)網(wǎng)片上系統(tǒng)(SoC)
    發(fā)表于 08-24 06:35

    Arm CoreLink? SSE-200嵌入式子系統(tǒng)技術(shù)概述

    SSE-200子系統(tǒng)用于嵌入式驅(qū)動器系統(tǒng)架構(gòu)和軟件標(biāo)準(zhǔn)化,旨在提供包含前沿Cortex M和TrustZone技術(shù)的高性能計(jì)算子系統(tǒng)。 該解決方案由硬件、軟件和軟件工具組成,可實(shí)現(xiàn)物聯(lián)網(wǎng)系統(tǒng)芯片
    發(fā)表于 08-28 06:30

    用于MPS2+的SSE-200子系統(tǒng)示例

    SSE-200子系統(tǒng)的現(xiàn)場可編程門陣列包裝中使用以下SIE-200組件: ·TrustZone AHB5外圍設(shè)備保護(hù)控制器。 ·TrustZone AHB5主安全控制器。 ·AHB5總線陣
    發(fā)表于 08-30 06:34

    sse5指令集下載

    sse5指令集下載 SIMD (single instruction, multiple data) instructions, also called packed instructions
    發(fā)表于 12-25 11:14 ?33次下載

    sse指令集

    sse指令集 SSE(Streaming SIMD Extensions,單指令多數(shù)據(jù)流擴(kuò)展)指令集是Intel在Pentium III處理器中率先推出的。其實(shí),早在PIII正式推出之前
    發(fā)表于 12-25 10:59 ?1564次閱讀

    什么是SSE/SIMD/Speculative execut

    什么是SSE/SIMD/Speculative execution? SSE(Streaming SIMD Extensions,單一指令多數(shù)據(jù)流擴(kuò)展) 英特爾開發(fā)的第二代SIMD指令集,有70條指令,
    發(fā)表于 02-04 11:14 ?573次閱讀

    什么是Superscalar/SSE/SQRT

    什么是Superscalar/SSE/SQRT   Superscalar: (超標(biāo)量體系結(jié)構(gòu))在同一時鐘周期可以執(zhí)行多條指令流的處理器架構(gòu)。 SSE: (Streami
    發(fā)表于 02-04 11:27 ?622次閱讀

    基于SSE的FDTD程序設(shè)計(jì)李太全

    基于SSE的FDTD程序設(shè)計(jì)_李太全
    發(fā)表于 03-17 08:00 ?1次下載

    N 溝道 100 V、2.3 mOhm MOSFET,采用增強(qiáng)型 SOA,采用 LFPAK88-PSMN2R3-100SSE

    N 溝道 100 V、2.3 mOhm MOSFET,采用增強(qiáng)型 SOA,采用 LFPAK88-PSMN2R3-100SSE
    發(fā)表于 02-07 18:56 ?0次下載
    N 溝道 100 V、2.3 mOhm MOSFET,采用增強(qiáng)型 SOA,采用 LFPAK88-PSMN2R3-100<b class='flag-5'>SSE</b>