技术综述SSE指令集的发展.docx

上传人:b****2 文档编号:18045723 上传时间:2023-04-24 格式:DOCX 页数:12 大小:178.68KB
下载 相关 举报
技术综述SSE指令集的发展.docx_第1页
第1页 / 共12页
技术综述SSE指令集的发展.docx_第2页
第2页 / 共12页
技术综述SSE指令集的发展.docx_第3页
第3页 / 共12页
技术综述SSE指令集的发展.docx_第4页
第4页 / 共12页
技术综述SSE指令集的发展.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

技术综述SSE指令集的发展.docx

《技术综述SSE指令集的发展.docx》由会员分享,可在线阅读,更多相关《技术综述SSE指令集的发展.docx(12页珍藏版)》请在冰豆网上搜索。

技术综述SSE指令集的发展.docx

技术综述SSE指令集的发展

技术综述

SSE指令集的发展

学院(系):

软件学院

专业:

网络工程

学生姓名:

梁博文

学号:

200992134

指导教师:

王洁

完成日期:

2012-4-3

 

大连理工大学

DalianUniversityofTechnology

目录

1.SSE指令集(SSE1)III

1.1什么是SSE指令集III

1.2为什么引进SSE指令集III

1.2.1MMX指令集的局限性III

1.2.2AMD推出的3DNow!

指令集对Intel的MMX指令集带来的挑战III

1.3SSE指令集的特点IV

1.3.1SSE指令集的优点IV

1.3.2SSE指令集的局限性IV

1.4SSE指令集内容简介IV

1.4.1SSE指令集的指令个数IV

1.4.2SSE指令集的寄存器V

1.4.3SSE指令简介V

2.SSE2指令集VI

2.1什么是SSE2指令集VI

2.2SSE2指令集的特点VI

2.2.1SSE2指令集的优点VI

2.2.2SSE2指令集的局限性VI

2.3SSE2指令集简介VII

2.3.1SSE2指令集的指令个数VII

2.3.2SSE2指令集的寄存器VII

2.3.3SSE2指令简介VII

3.SSE3指令集VIII

3.1SSE3指令集VIII

3.1.1什么是SSE3指令集:

VIII

3.1.2SSE3指令集的目的:

VIII

3.1.3SSE3指令集简介:

VIII

3.2SSSE3指令集IX

4.SSE4指令集X

4.1什么是SSE4指令集X

4.2SSE4指令集的特点X

4.3SSE4指令集内容X

4.3.1SSE4.1指令集内容X

4.3.2SSE4.2指令集内容XII

4.3.3SSE4指令集使用实例XIII

5.总结XIV

1.SSE指令集(SSE1)

1.1什么是SSE指令集

SSE指令集(StreamingSIMDExtensions,单指令多数据流扩展)是Intel在1999年推出的指令集,最初用于PentiumIII处理器。

1.2为什么引进SSE指令集

1.2.1MMX指令集的局限性

Intel公司于1996年推出的MMX指令集无法与x87浮点运算指令同时执行,系统的运行质量受到影响,为了解决MMX指令与浮点指令不能同时处理的问题引入了SSE指令集。

1.2.2AMD推出的3DNow!

指令集对Intel的MMX指令集带来的挑战

3Dnow!

指令集是AMD公司广泛应用于其K6-2、K6-3以及Athlon(K7)处理器上,主要针对三维建模、坐标变换和效果渲染等三维应用场合,可以大幅度提高3D处理性能,在多媒体指令增强技术方面优于MMX指令集的指令集。

1.3SSE指令集的特点

1.3.1SSE指令集的优点

SSE指令集兼容MMX指令并推出了附加的MMX指令如min/max等,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。

通过L2/L3级缓存和主存储器之间使用预取和写直达方式来优化数据移动指令

新增32位单精度浮点指令对应增加的128位MMX寄存器

SSE指令集在图像处理、浮点运算、3D运算、视频处理、音频处理等诸多多媒体应用方面起到了全面强化的作用。

1.3.2SSE指令集的局限性

不是所有数据类型都支持所有操作如不支持32为整形乘法等;

只有32位浮点数类型可用;

没有对于XMM寄存器的整形指令;

只有8个寄存器;

没有提供非对齐访问的真正解决方案;

不支持常量;

1.4SSE指令集内容简介

1.4.1SSE指令集的指令个数

SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX整数运算增强指令、8条优化内存中连续数据块传输指令。

1.4.2SSE指令集的寄存器

SSE指令集新增8个128位的MMX寄存器xmm0..xmm7,可存取1个128位整形变量也可以存取4个32位的浮点型变量

1.4.3SSE指令简介

SSE新增指令:

prefetchx,movntq,movntps,maskmovq,movaps,movups,movss,

movlps,movhps,movlhps,movhlps,movmskps,pextrw,pinsrw,pmovmskb,pshufw,pshufps,unpckhps,unpcklps,cvtpi2ps,cvtpi2ss,cvtps2si,cvtss2si,pavgb,pavgw,pminub,pmaxub,pminsw,pmaxsw,pmulhuw,psadbw,addps,addss,subps,subss,mulps,mulss,divps,divss,rcpps,rcpss,sqrtps,sqrtss,rsqrtss,rsqrtps,minps,minss,maxps,maxss,cmpps,cmpss,comiss,ucomiss,andps,andnps,orps,xorps。

SSE指令集运用简单实例:

pminubmm3,mm4:

比较mm3和mm4两个寄存器中无符号数的最小值

maxpsxmm1,[edi]:

比较xmm1寄存器和[edi]内存单元中的单精度浮点数的最大值

2.SSE2指令集

2.1什么是SSE2指令集

 SSE2指令集(StreamingSIMDExtensions2,Intel官方称为SIMD流技术扩展2或数据流单指令多数据扩展指令集2)是Intel公司在2000年在Willamette核心的Pentium4处理器上开始支持的指令集。

2.2SSE2指令集的特点

2.2.1SSE2指令集的优点

SSE2指令集支持64位双精度浮点数类型有助于加速内容创建、财务、工程和科学应用。

增加了用于XMM寄存器的整数指令。

SSE2扩展了MMX技术和SSE技术,提高了广大应用程序的运行性能。

随MMX技术引进的SIMD整数指令从64位扩展到了128位,使SIMD整数类型操作的有效执行率成倍提高。

在指令处理器速度保持不变的的情况下,通过SSE2优化过的程序和软件运行速度也能提升两倍。

SSE指令集和MMX指令集相兼容。

因此,被MMX优化过的程序很容易被SSE2进行更深层次的优化,达到更好的效果。

2.2.2SSE2指令集的局限性

只有8个寄存器;

没有提供非对齐访问的真正解决方案;

不支持常量;

不是所有数据类型都支持所有操作

2.3SSE2指令集简介

2.3.1SSE2指令集的指令个数

相比于SSE,SSE2使用了144个新增指令。

2.3.2SSE2指令集的寄存器

SSE2指令集与SSE1指令集使用相同的寄存器,SSE2的XMMx寄存器可存的数据类型有:

1个128位整形数据或2个64位整形数据或4个32位整形数据或8个16位整形数据或16个8位整形数据或2个64位浮点型数据或4个32位浮点型数据。

2.3.3SSE2指令简介

SSE2新增指令:

movntdq,,movntpd,movnti,maskmovdqu,movapd,movdqa,movupd,movdqu,movsd,movlpd,movhpd,movlhpd,movhlpd,movmskpd,pmovmskpd,pshuflw,pshufhw,pshufpd,unpckhpd,unpcklpd,cvtpi2pd,punpckhqdq,punpcklqdq,cvtpi2sd,cvtpd2si,cvtsd2si,cvtps2pd,cvtpd2ps,cvtss2sd,cvtsd2ss,cvtps2dq,cvtdq2ps,movq2dq,movdq2q,paddq,psubq,pmuludq,addpd,addsd,subpd,subsd,mulpd,mulsd,divpd,divsd,rcppd,rcpsd,sqrtpd,sqrtsd,rsqrtpd,rsqrtsd,minpd,minsd,maxpd,maxsd,cmpps,cmpsd,comisd,ucomisd,andpd,andnpd,orpd,xorpd,pslldq,psrldq。

SSE2指令使用实例:

指令:

punpckhdqXMM,XMM/m128

功能:

把源存储器与目的寄存器高64位按双字交错排列,内存变量必须对齐内存16字节.

3.SSE3指令集

3.1SSE3指令集

3.1.1什么是SSE3指令集:

SSE3(StreamingSIMDExtensions3,Intel官方称为SIMD流技术扩展3或数据流单指令多数据扩展指令集3)是Intel公司于2004年推出的在Prescott核心的Pentium4处理器上开始支持的指令集。

3.1.2SSE3指令集的目的:

SSE3中13个新指令的主要目的是改进线程同步和特定应用程序领域,例如媒体和游戏。

这些新增指令强化了处理器在浮点转换至整数、复杂算法、视频编码、SIMD浮点寄存器操作以及线程同步等五个方面的表现,最终达到提升多媒体和游戏性能的目的。

3.1.3SSE3指令集简介:

SSE3指令集共有13条新增指令,分为5层:

第一层中的指令是“数据传输命令”,只有一条指令:

FISTTP,它有利于x87浮点转换成整数,并可以大大提高优化的效率。

第二层中的指令是“数据处理命令”,一共有五条,分别是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。

这些指令可以简化复杂数据的处理过程,由于未来数据处理流量将会越来越大,因此Intel在这里应用的指令集最多、达到了五条。

第三层中的指令是“特殊处理命令”,也只有一条:

LDDQU。

在这条指令主要针对视频解码,用来提高处理器对处理媒体数据结果的精确性。

第四层中的指令是“优化命令”,一共有四条指令,分别是HADDPS,HSUBPS,HADDPD,HSUBPD,它们可以对程序起到自动优化的作用。

这些指令对处理3D图形相当有用。

第五层中的指令是“超线程性能增强”,一共有两条针对线程处理的指令:

MONITOR,MWAIT,这有助于增加Intel超线程的处理能力、大大简化了超线程的数据处理过程。

3.1.4SSE3指令集运用实例

指令:

fisttpm16,m32,m64

功能:

将浮点堆栈st(0)的内容截断小数格式化为有符号整数送入目的内存.

3.2SSSE3指令集

SSSE3(SupplementalStreamingSIMDExtensions3)内置于Intel公司微处理器中的多媒体关联的扩张指令集。

是扩张了SSE3的产品,于2006年7月首次装载在Core2Duo处理器中。

SSE装载了用一个命令一口气处理复数个数据的「SIMD」的处理方式,特别在处理语音和动画关联上能够高速地发挥力量。

SSSE3是在SSE3命令的基础上又添加了32个新命令的产品,增强了CPU的多媒体、图形图象和Internet等的处理能力。

4.SSE4指令集

4.1什么是SSE4指令集

SSE4(StreamingSIMDExtensions4)是Intel于2007年推出的指令集系统,共分2个版本。

其中SSE4.1随着45nmPenryn处理器陆续应用于台式机平台、移动平台和服务器中,共新增47条指令,主要针对向量绘图运算、3D游戏加速、视像编码加速及协同处理加速动作;SSE4.2共新增7条指令,随着下一代架构Nehalem发布。

4.2SSE4指令集的特点

增加了2个不同的32Bit向量整数乘法运算支持,引入了8位无符号(Unsigned)最小值及最大值运算,以及16Bit及32Bit有符号(Signed)及无符号运算,并有效地改善编译器效率及提高向量化整数及单精度代码的运算能力。

同时改良插入、提取、寻找、离散、跨步负载及存储等动作,令向量运算进一步专门化。

简化SAD操作代码所需指令数,提升存取内存的速度(如用StreamingLoad指令可将存取内存速度提升9倍)。

4.3SSE4指令集内容

4.3.1SSE4.1指令集内容

4.3.1.1SSE4.1指令个数及分类

SSE4——Penryn搭载的SSE4.1指令集主要分为三个部分,分别是SSE4视频编码加速部分、SSE4图形加速部分和SSE4流加载部分,其中SSE4视频编码加速部分包括了14条指令,用于加速4x4绝对差和、子像素过滤一击数据查找方面的性能;SSE4图形加速部分包括了32条指令,具体划分成6个部分:

12条32位向量整数操作,用于提供快速的向量整数运算、7条非单位步长存取操作,提供快速的向量载入/保存、2条点积操作,在构造阵列(Array-Of-Structures)运算中可以提供非常快的点积运算能力、6条变量及立即混合,用于提升传统SIMD代码的性能、1条早期参量输出,可以快速测试128-bit宽度数据、4条浮点取整,用于如Floor()、Ceil(),NINT(),nearbyint()这些经常用到的高级语言代码,提高他们的性能;SSE4流加载部分包含一条指令streamingload。

4.3.1.2SSE4.1指令简介

4.3.2SSE4.2指令集内容

SSE4.2新增的7条指令共分两类:

第一类是字符串与文本新指令STTNI,STTNI包含了四条具体的指令。

STTNI指令可以对两个16位的数据进行匹配操作,以加速在XML分析方面的性能。

据Intel表示,新指令可以在XML分析方面取得3.8倍的性能提升。

第二类指令是面向应用的加速指令ATA。

ATA包括冗余校验的CRC32指令、计算源操作数中非0位个数的POPCNT指令,以及对于打包的64位算术运算的SIMD指令。

CRC32指令可以取代上层数据协议中经常用到的循环冗余校验,据Intel表示其加速比可以达到6.5~18.6倍;POPCNT用于提高在DNA基因配对、声音识别等包含大数据集中进行模式识别和搜索等操作的应用程序性能。

4.3.3SSE4指令集使用实例

例1:

PACKUSDWxmm3,[eax]

相当于原来SSE2指令集中以下11条语句完成的功能:

movdqaxmm2,[eax]

movdqaxmm0,_my_uint16_limit_p32

movdqaxmm1,xmm0

pcmpgtdxmm0,xmm3;(src

pcmpgtdxmm1,xmm2;(dst

packssdwxmm0,xmm1;packmask

packssdwxmm3,xmm2;packdest,src

pandxmm3,xmm0;keepresults

pandnxmm0,xmm4;replaceresults

porxmm3,xmm0

例2:

MPSADBWxmm0,xmm1,0

相当于原来以下SAD操作代码:

5.总结

SSE指令集从1999年推出至今发展了多个版本(SSE、SSE2、SSE3、SSSE3、SSE4),每一次发展都对计算机的性能带来了很大的提升,相信在今后也一定会随着技术的进步推出新的SSE指令集为计算机的指令简化和性能提升做出贡献。

参考资料:

  

  

  

  

Intel开发文档

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1