计算机科学

首页 > 计算机科学

SSE3

2018-09-03 09:36:55     所属分类:并发计算
SSE3与其他x86架构所用的多媒体指令集,在指令数目上的比较图

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

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条新指令。

目录

  • 1 新指令所带来的改变
  • 2 具备SSE3硬件支持功效的处理器
  • 3 新增的指令
    • 3.1 共通性的指令
    • 3.2 Intel针对SSE3所额外设计的自用指令
  • 4 附注说明
  • 5 参考引据
  • 6 关连条目
  • 7 外部链接

新指令所带来的改变

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

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

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

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

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

  • AMD公司:
    • Athlon 64 - 从Stepping E3的Venice(威尼斯,研发代号)以及Stepping E4的San Diego(圣地牙哥,研发代号)开始具备。
    • Athlon 64 X2
    • Athlon 64 FX - 从Stepping E4的San Diego(圣地牙哥,研发代号)开始具备。
    • Opteron - 从Stepping E4的San Diego(圣地牙哥,研发代号)开始具备。
    • Sempron - 从Stepping E3的Palermo(研发代号)开始具备。
    • Turion 64
    • Turion 64 X2
    • Phenom
    • Phenom II
  • Intel公司:
    • Celeron D
    • Pentium 4 - 从Prescott(研发代号)开始具备。
    • Pentium D
    • Intel Core
    • Intel Core 2
    • Intel Core i7
    • Xeon - 从Nocona(研发代号)开始具备。
  • 全美达公司(Transmeta):
    • Efficeon TM88xx(不包含型款编号为TM86xx系列的处理器)
  • 威盛电子(VIA)[5]:
    • VIA Isaiah
    • C7-M
    • C7-D

新增的指令

共通性的指令

算术指令(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处理器所取的项目代称,也称为研发代号。
  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阶仍是相近,多媒体运算力求快速即时而不力求精确,因此些许的运算数字结果偏差仍可接受。

参考引据

  • X-bit Labs网站:SSE3指令集(2004年2月1日)(英文)


关连条目

  • SIMD - SSE3指令集的特性原理基础。
  • SSE
  • 计算机编码
  • SSSE3 - SSE3指令集的扩展

外部链接

  • Intel官方网站对SSE3的总览说明 (英文)

上一篇:平行算法
下一篇:节点度
相关推荐