跳转到内容

SSE3

本页使用了标题或全文手工转换
维基百科,自由的百科全书
SSE3与其他x86架构所用的多媒体指令集,在指令数目上的比较图

SSE3(Streaming SIMD Extensions 3),又称PNI(Prescott New Instructions)[1],它指的是:在原有架构的处理器中,所第三次额外新增、添加的多媒体指令集,之前的两次分别是SSESSE2

SSE3是Intel公司所其原有IA-32架构的处理器所研创,并在2004年初的新款Pentium 4(P4E,Prescott核心)处理器[2]中使用,之后2005年4月AMD公司也发表具备部分SSE3功效的处理器:Athlon 64(E3步进核心)[3],此后的x86处理器也几乎都具备SSE3的新指令集功能。

此外,在SSE3提出之前,x86架构的处理器先后已有多种多媒体指令集被提创与使用,先后顺序大致是Intel MMX、AMD 3DNow![4]、Intel SSE、Intel SSE2等。

附带一提的是,SSE3比在它之前的SSE2增加13条新指令。

新指令所带来的改变

[编辑]

SSE3最值得一提的新功效特点,是水平式的寄存器整数运算,而在此之前的SSESSE2则仅能垂直运算。更进一步的特点是,指令执行时对多笔数值的同时加法运算、减法运算等,之后将结果进行存储等,都可以在单一个寄存器完成,因此SSE3可以用更简单的方式来实现同时间的多笔、大量DSP3D性质的运算。

此外,有个新指令可将浮点数数值转换成整数数值,且进行此种转换不需要将运算切换到rounding模式,过去此类转换必须先切换至rounding模式,完成转换后再退出rounding模式,此新指令可省去此模式切换程序,使整体运算更为加速,也因此可避免邻近执行流水线(Instruction pipeline)因此而停缓、等待(模式切换会使后续执行暂停,进而减损运算性能)。

另外,新增设的LDDQU指令能够在交替加载长度不一的整数向量值时获得更佳的性能,此指令可以让Intel NetBurst架构的执行核心跨越缓存线的界线而进行数值加载。

具备SSE3硬件支持功效的处理器

[编辑]

以下表列依据业者英文名称的字母顺序:

新增的指令

[编辑]

共通性的指令

[编辑]

算术指令(Arithmetic)

  • ADDSUBPD - (Add-Subtract-Packed-Double)
    • 输入: - { A0, A1 }, { B0, B1 }
    • 输出: - { A0 - B0, A1 + B1 }
  • ADDSUBPS - (Add-Subtract-Packed-Single)
    • 输入: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • 输出: { A0 - B0, A1 + B1, A2 - B2, A3 + B3 }

数组结构指令(Array Of Structures;AOS)

  • HADDPD - (Horizontal-Add-Packed-Double)
    • 输入: { A0, A1 }, { B0, B1 }
    • 输出: { B0 + B1, A0 + A1 }
  • HADDPS (Horizontal-Add-Packed-Single)
    • 输入: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • 输出: { B0 + B1, B2 + B3, A0 + A1, A2 + A3 }
  • HSUBPD - (Horizontal-Subtract-Packed-Double)
    • 输入: { A0, A1 }, { B0, B1 }
    • 输出: { A0 - A1, B0 - B1 }
  • HSUBPS - (Horizontal-Subtract-Packed-Single)
    • 输入: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • 输出: { A0 - A1, A2 - A3, B0 - B1, B2 - B3 }
  • LDDQU - 如上所述,这是有交替需求时所用的指令,可以加载(load)不整齐排列的整数向量值,此指令对视频压缩的运算工作有帮助。
  • MOVDDUP、MOVSHDUP、MOVSLDUP - 此三个指令是针对复杂数目需求时所用,对波形信号的运算有帮助,例如音频的声波波形处理。
  • FISTTP - 类似过去x87浮点运算中的FISTP指令,不过此指令的运算执行或忽略掉浮点控制寄存器的rounding(溢绕)模式的设置,并且用“chop”(truncate,截切)模式[6]取代。允许控制寄存器忽略繁重的加载及再加载,例如C语言中将浮点数转换成整数就需要使用此种截切效果,且此种截切程序已成为C语言中的标准作法。

Intel针对SSE3所额外设计的自用指令

[编辑]
  • MONITOR、MWAIT - 此二个指令能针对多线程的应用程序进行执行优化,使处理器原有的超线程功效获得更佳的发挥。

附注说明

[编辑]
  1. ^ Prescott是Intel公司产品Pentium 4处理器的项目代称,也称为研发代号。
  2. ^ 研发代号:Prescott。Prescott是地名也是人名,美国英国加拿大皆有地方取名为Prescott,另有许多人的姓氏也为Prescott,如William Prescott(美国革命指挥官)、Richard Prescott(美国革命时期的英国将军,曾两度被擒)
  3. ^ 研发代号:威尼斯(Venice)与圣地亚哥(San Diego)
  4. ^ 此外也有Cyrix公司提出的EMMI多媒体指令,不过仅短暂提出,之后并未普及使用。
  5. ^ 研发团队收并自美国IDT公司所100%转投资的Centaur公司
  6. ^ 所谓rounding模式是寄存器的内存值溢出时,溢出会使内存值归零再进行持续递增,举例而言,一个8-bit的寄存器,当其值为255时,若再加2即会变成1,就二进制来看即是11111111 + 00000010 = 00000001。而所谓chop模式是即便溢出也不归零,而持续维持在最高数值,此也称为饱和运算,即是不让其溢出归零情事发生,同样的例子,在chop模式下依旧会维持255,即是11111111 + 00000010 = 11111111。 当然,截切、饱和忽略了更多的累加值,这在多媒体运算时有其需要,当音调254阶再增个2阶、3阶,若因为溢出归零而成为0阶、1阶,就会与255阶相去甚远,相对的254阶若因饱和运算的效果最多会维持在255阶,255阶与254阶仍是相近,多媒体运算力求快速即时而不力求精确,因此些许的运算数字结果偏差仍可接受。

参考引据

[编辑]


关连条目

[编辑]

外部链接

[编辑]