RISC、CISC、 SIMD、FPU、MMX、SSE、SSEX、AVX、3D Now以及DSP、A
2019-07-13 16:49发布
生成海报
CPU的指令集从主流的体系结构上分为精简指令集和复杂指令集,而在普通的计算机处理器基本上是使用的复杂指令集。在计算机早期的发展过程中,CPU中的指令集是没有划分类型的,而是都将各种程序需要相配合的指令集成到CPU中,但是随着科技的进步,计算机的功能也越来越强大,计算机内部的元件也越来越多,而且越来越复杂,CPU的指令也相应的变得十分复杂,而在使用过程中,并不是每一条指令都要完全被执行,在技术人员的研究过程中发现,约有80%的程序只用到了20%的指令,而一些过于冗余的指令严重影响到了计算机的工作效率,就这一现象,精简指令集的概念就被提了出来。
精简指令集RISC就是(Reduced Instruction Set Computing)的缩写,而复杂指令集CISC则是(Complex Instruction Set Computing)的缩写。它们之间的不同之处就在于RISC指令集的指令数目少,而且每条指令采用相同的字节长度,一般长度为4个字节,并且在字边界上对齐,字段位置固定,特别是操作码的位置。而CISC指令集特点就是指令数目多而且复杂,每条指令的长度也不相等。在操作上,RISC指令集中大多数操作都是寄存器到寄存器之间的操作,只以简单的Load(读取)和Sotre(存储)操作访问内存地址。因此,每条指令中访问的内存地址不会超过1个,指令访问内存的操作不会与算术操作混在一起。在功能上,RISC指令集也要比复杂指令集具有优势,精简指令集可以大大简化处理器的控制器和其他功能单元的设计,不必使用大量专用寄存器,特别是允许以硬件线路来实现指令操作,从而节约的处理器的制造成本。而采用CISC指令集的处理器是使用微程序来实现指令操作,在执行速度上不如RISC指令集。另外,RISC还加强了并行处理能力,非常适合于采用处理器的流水线、超流水线和超标量技术,从而实现指令级并行操作,提高处理器的性能。而且随着VLSI(Very
Large Scale Integration超大规模集成电路)技术的发展,整个处理器的核心甚至多个处理器核心都可以集成在一个芯片上。RISC指令集的体系结构可以给设计单芯多核处理器带来很多好处,有利于处理器的性能提高。
由于RISC指令集自身的优势,在处理器的高端服务器领域的处理器上得到了广泛的运用,而CISC指令集主要运用桌面领域的处理器产品中,比如Intel的Pentium系列和AMD的K8系列处理器。然而现在RISC指令集也不断地向桌面领域渗入,相信以后的处理器指令集会慢慢的向RISC体系靠拢,使得处理器的指令集结构更加完善,功能更为强大,技术也越来越成熟。
RISC与CISC的主要特征对比
比较内容 CISC RISC
指令系统 复杂,庞大 简单,精简
指令数目 一般大于200 一般小于100
指令格式 一般大于4 一般小于4
寻址方式 一般大于4 一般小于4
指令字长 不固定 等长
可访存指令 不加限制 只有LOAD/STORE指令
各种指令使用频率 相差很大 相差不大
各种指令执行时间 相差很大 绝大多数在一个周期内完成
优化编译实现 很难 较容易
程序源代码长度 较短 较长
控制器实现方式 绝大多数为微程序控制 绝大多数为硬布线控制
软件系统开发时间 较短 较长
SIMD
SIMD单指令流多数据流(SingleInstruction Multiple Data,SIMD)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如Intel的MMX或SSE以及AMD的3D Now!技术。
上篇讲过,寄存器是如何扩展的:
x86-64寄存器的扩展方式如下:
AL范围表示0-7的8位寄存器,AH则表示16位寄存器,EAX就是我们大多数用户使用的32位寄存器,如Athlon XP和Pentium 4,RAX则是AMD拓展的64位寄存器。它能够存放一个64位长的数据,从而让CPU直接处理。从EAX到RAX的扩展,就同15年前Intel发布i386处理器时,将AX扩展为EAX的做法一样。当时i386在应用程序方面比起它的前辈i286来说,表现相当优秀。现在K8也采用了相同的做法,让该处理器可以很轻松的运行32位代码,在这种情况下CPU是没有满负荷运行的。
如下图要完成这些运算AMD为其引入了少量的新寄存器,作为现有寄存器的扩充:
与以往的32位X86结构相比,K8在原有的8个通用寄存器的基础上又增添了8个寄存器。这8个寄存器工作在64位下,经过64位编码的程序就可以使用到它们。AMD同时也将原有的EAX等寄存器扩展至64位的RAX。从扩充方式上看,EAX等寄存器可以看作是RAX的一个子集,系统仍旧可以完整地执行以往的32位编码程序。通用寄存器除了可高效的存储数据外,还可作为寻址时的地址指针,从而缩短指令长度和指令执行时间,加快CPU的运算处理速度,同时也给编程带来方便。单单从寄存器结构来看,X86-64较多的寄存器将会大幅度的提升处理器的性能,也会更加受到软件开发人员的喜爱。
下表则反应了Athlon 64的x86-64所用寄存器的具体区别:
现在新增加了R8-R15通用寄存器(GPR),这些寄存器都工作在64位模式下(这意味着在该模式下程序需要重新编译),原来的寄存器诸如EAX、EBX也由32位扩张至64位。Athlon 64在SSE单元中新加入了8个新寄存器以提供对SSE2的支持,寄存器数量的增加将直接带来性能的提升。
FPU寄存器:
浮点寄存器
ST0
0
浮点寄存器零
ST1
1
浮点寄存器一
ST2
10
浮点寄存器二
ST3
11
浮点寄存器三
ST4
100
浮点寄存器四
ST5
101
浮点寄存器五
ST6
110
浮点寄存器六
ST7
111
浮点寄存器七
特别要说明下的是MMX寄存器实际上用的就是浮点寄存器(就是原来的ST0、……、ST7)的低64Bit, 因此要执行浮点指令前必须执行一条EMMS指令,因为MMX寄存器跟FPU是重叠的,出来混还是要还的,EMMS就是通知CPU我还给你了.
MMX
MMX是由英特尔开发的一种SIMD多媒体指令集,共有57条指令。它于1996年集成在英特尔奔腾 (Pentium) MMX处理器上,以提高其多媒体数据的处理能力。
其优点是增加了处理器关于多媒体方面的处理能力,缺点是占用浮点数寄存器进行运算(64位MMX寄存器实际上就是浮点数寄存器的别名)以至于MMX指令和浮点数操作不能同时工作。为了减少在MMX和浮点数模式切换之间所消耗的时间,程序员们尽可能减少模式切换的次数,也就是说,这两种操作在应用上是互斥的。后来英特尔在此基础上发展出SSE指令集;AMD在此基础上发展出3DNow!指令集。现在新开发的程序不再仅使用MMX来优化软件执行效能,而是改使用如SSE、3DNOW!等更容易优化效能的新一代多媒体指令集,不过目前的处理器仍可以执行针对MMX优化的较早期软件。
技术细节
MMX 寄存器,称作MM0到MM7,实际上就是处理器内部80比特字长的浮点寄存器栈st(0)到st(7)的尾数部分(64比特长)的复用。由于 浮点栈寄存器的高16位未被MMX技术使用,因此这16位都置为1,因此从栈寄存器的角度看,其浮点值为NaN或Infinities,这可用于区分寄存 器是处于浮点栈状态还是MMX状态. 作为MMX寄存器都是直接访问。利用了装配数据类型(packed data type)的概念,每个MMX寄存器的64比特字长可以看作是2个32位整数、或者4个16位整数、或者8个8位整数,从而可以执行整数SIMD运算。这
对于1990年代中期的2D、3D计算的加速还是很有意义的,因为当时的计算机的图形处理器(GPU)还很不发达。但现在MMX整数SIMD运算对于图形运算来说是多余的技术了。不过MMX的饱和算术运算(saturationarithmeticoperations)对于一些数字信号处理应用还是有用的。
SIMD技术的发展
继 MMX技术之后,Intel又于1999年在Pentium-III处理器上推出SSE技术,引入了新的128比特宽的寄存器集 (register file),称作XMM0到XMM7。这些XMM寄存器用于4个单精度浮点数运算的SIMD执行,并可以与MMX整数运算或x87浮点运算混合执行。 2001年在Pentium 4上引入了SSE2技术,进一步扩展了指令集,使得XMM寄存器上可以执行8/16/32位宽的整数SIMD运算或双精度浮点数的SIMD运算。这使得
SIMD技术基本完善。
SSE
SSE(Streaming SIMD Extensions)是英特尔在AMD的3DNow!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是继MMX的扩充指令集。SSE 指令集提供了 70 条新指令。AMD后来在Athlon XP中加入了对这个新指令集的支持。
目录
[隐藏]
- 1 SSE 的缓存器
- 2 SSE 指令表
- 2.1 浮点指令
- 2.2 整数指令
- 2.3 其他指令
- 3 后续版本
- 3.1 SSE2
- 3.2 SSE3
- 3.3 SSSE3
- 3.4 SSE4
- 3.5 SSE5
- 3.6 AVX
- 3.7 FMA
- 4 参见
SSE的缓存器
SSE 加入新的 8 个 128 位缓存器(XMM0~XMM7)。而 AMD 发表的x86-64延伸架构《又称 AMD64》再加入额外 8 个缓存器。除此之外还有一个新的 32 位的控制/状态缓存器(MXCSR)。不过只能在 64 位的模式下才能使用额外 8 个缓存器。
每 个缓存器可以容纳 4 个 32 位单精度浮点数,或是2 个 64 位双精度浮点数,或是 4 个 32 位整数,或是 8 个 16 位短整数,或是 16 个字符。整数运算能够使用正负号运算。而整数 SIMD 运算可能仍然要与 8 个 64 位 MMX 缓存器一起执行。
因为操作系统必须要在进程切换的时候保护这些 128 位的缓存器状态,除非操作系统去启动这些缓存器,否则默认值是不会去启用的。这表示操作系统必须要知道如何使用 FXSAVE 与 FXRSTOR 指令才能储存 x87 与 SSE 缓存器的状态。而在当时 IA-32 的主流操作系统很快的都加入了此功能。
由于 SSE 加入了浮点支持,SSE 就比MMX 更加常用。而 SSE2 加入了整数运算支持之后让SSE 更加的有弹性,当 MMX 变成是多余的指令集,SSE 指令集甚至可以与 MMX 并行运作,在某些时候可以提供额外的性能增进。
第一个支持 SSE 的 CPU 是 Pentium III,在FPU 与SSE 之间共享执行支持。当编译出来的软件能够交叉的同时以 FPU 与 SSE 运作,Pentium III 并无法在同一个周期中同时执行 FPU 与 SSE。这个限制降低了指令管线的有效性,不过 XMM 缓存器能够让 SIMD 与纯量浮点运算混合执行,而不会因为切换 MMX/浮点模式而产生性能的折损。
SSE指令表
SSE 提供纯量与包裹式(packed)浮点指令。
浮点指令
- 内存到缓存器/缓存器到内存/缓存器之间的数据搬移
- 纯量 – MOVSS
- 包裹式 – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
- 数学运算
- 纯量 – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
- 包裹式 – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
- 比较
- 纯量 – CMPSS, COMISS, UCOMISS
- 包裹式 – CMPPS
- 资料拆包(unpack)与随机搬移(shuffle)
- 包裹式 – SHUFPS, UNPCKHPS, UNPCKLPS
- 数据型态转换
- 纯量 – CVTSI2SS, CVTSS2SI, CVTTSS2SI
- 包裹式 – CVTPI2PS, CVTPS2PI, CVTTPS2PI
- 逐位逻辑运算
- 包裹式 – ANDPS, ORPS, XORPS, ANDNPS
整数指令
- 数学运算
- PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
- 数据搬移
- 其他
其他指令
- MXCSR 管理
- 快取与内存管理
- MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
后续版本
SSE2
SSE2是 Intel在Pentium 4处理器的最初版本中引入的,但是AMD后来在Opteron 和Athlon64处理器中也加入了SSE2的支持。SSE2指令集添加了对64位双精度浮点数的支持,以及对整型数据的支持,也就是说这个指令集中所有的MMX指令都是多余的了,同时也避免了占用浮点数寄存器。这个指令集还增加了对CPU快取的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位 模式(x86-64/AMD64)才可以使用这些寄存器。Intel后来在其Intel
64架构中也增加了对x86-64的支持。
SSE3
SSE3是 Intel在Pentium 4处理器的 Prescott 核心中引入的第三代SIMD指令集,AMD在Athlon64的第五个版本,Venice核心中也加入了SSE3的支持。这个指令集扩展的指令包含寄存器的局部位之间的运算,例如高位和低位之间的加减运算;浮点数到整数的转换,以及对超线程技术的支持。
SSSE3
SSSE3是Intel针对SSE3指令集的一次额外扩充,最早内建于Core2 Duo处理器中。
SSE4
SSE4是Intel在Penryn核心的Core 2 Duo与Core2 Solo处理器时,新增的47条新多媒体指令集,并且现在更新至SSE4.2。AMD也开发了属于自己的SSE4a多媒体指令集,并内建在Phenom与Opteron等K10架构处理器中,不过无法与Intel的SSE4系列指令集兼容。
SSE5
SSE5是AMD为了打破Intel垄断在处理器指令集的独霸地位所提出的,SSE5初期规划将加入超过100条新指令,其中最引人注目的就是三操作数指令(3-OperandInstructions)及熔合乘法累积(Fused Multiply Accumulate)。其中,三操作数指令让处理器可将一个数学或逻辑函式库,套用到操作数或输入数据。藉由增加操作数的数量,一个 x86 指令能处理二至三笔数据, SSE5 允许将多个简单指令汇整成一个指令,达到更有效率的指令处理模式。提升为三运算指令的运算能力,是少数RISC架构
的水平。熔合乘法累积让允许建立新的指令,有效率地执行各种复杂的运算。熔合乘法累积可结合乘法与加法运算,透过单一指令执行多笔重复计算。透过简化程序码,让系统能迅速执行绘图着 {MOD}、快速相片着 {MOD}、音场音效,以及复杂向量演算等效能密集的应用作业。目前AMD已放弃下一代Bulldozer核心内建SSE5指令集,改内建Intel授权SSE4系列指令集。
AVX
是Sandy Bridge和Larrabee架构新指令集 Intel的微架构也进入了全速发展的时期,在2010年4月结束的IDF峰会上Intel公司就发布了2010年的RoadMap。2011年1月Intel发布全新的处理器微架构Sandy Bridge,其中全新增加的指令集也将带来CPU性能的提升。
AVX(Advanced Vector Extensions) 是Intel的SSE延伸架构,如IA16至IA32般的把缓存器XMM 128bit提升至YMM 256bit,以增加一倍的运算效率。此架构支持了三运算指令(3-Operand Instructions),减少在编码上需要先复制才能运算的动作。在微码部分使用了LES LDS这两少用的指令作为延伸指令Prefix。
FMA
- FMA是Intel的AVX扩充指令集,如名称上熔合乘法累积(Fused Multiply Accumulate)的意思一样。
3DNow!
3DNow!(据称是“3D No Waiting!”的缩写)是由AMD开发的一套SIMD多媒体指令集,支持单精度浮点数的矢量运算,用于增强x86架构的计算机在三维图像处理上的性能。
目录
[隐藏]
- 1 历史
- 2 支持检测
- 3 执行环境
- 4 3DNow!指令集
- 4.1 单精度浮点运算指令
- 4.2 增强的MMX指令
- 4.3 数据类型转换指令
- 4.4 数据预取指令
- 4.5 快速退出MMX状态指令
- 5 外部链接
历史
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实现。
支持检测
支持3DNow!的CPU的CPUID扩展功能字(EAX=80000001h时执行CPUID指令得到的EDX的内容)的(从低位到高位)第31位为1。支持扩展3DNow!的CPU的CPUID扩展功能字的(从低位到高位)第30位为1。
K6-2以后AMD所有的x86处理器都支持3DNow!,包括最新的Athlon 64、Opteron和Sempron处理器;Cyrix等一些其他厂家生产的某些处理器也支持3DNow!;但Intel生产的所有处理器都不支持3DNow!。
执行环境
3DNow!指令的执行环境与MMX一样,都是将8个x87寄存器ST0~ST7的低64位重命名为MMX寄存器MM0~MM7,并依平坦模式进行操作(即指令可以任意访问这8个寄存器中的任何一个而不必使用堆栈)。
由于3DNow!使用的寄存器与x87寄存器重叠,任务切换时,保存x87寄存器状态的同时也保存了3DNow!的状态,所以3DNow!不需要操作系统的额外支持。只要CPU支持3DNow!,含有3DNow!代码的程序可以在只考虑到x87状态的原有的操作系统上不加修改地运行。
由于3DNow!依平坦模式访问寄存器,对3DNow!浮点单元的管线化变得容易,这也利于编译器生成高效的浮点代码。
3DNow!指令集
3DNow!和扩展3DNow!的26条指令从功能上可以分为以下五类。
单精度浮点运算指令
此类指令的操作数均为64位,其高32位和低32位分别是IEEE754格式的单精度浮点数。大部分指令一次可接受两个这样的操作数,并得到两个单精度浮点数的结果。它们的汇编语言助记符都以PF开头。
3DNow!还包含有计算单精度倒数和开方倒数的指令,并可以依程序需要,得到12位精度和24位精度的结果。这些指令一次只能处理一个单精度浮点数。
3DNow!的一个特 {MOD}是可以将同一寄存器内的64位操作数中的两个单精度浮点数相加或相乘,这在复数运算和内积运算中非常有用。Intel直到最近才在SSE3指令集中增加了这项功能,称之为“水平操作”。
为了保证与旧有操作系统的兼容性,与MMX指令一样,3DNow!指令不引发任何算术异常。3DNow!指令不会生成也不能正确处理NaN和非规格化数,也不支持指定舍入模式。因此3DNow!并不是IEEE 754的一个完整实现,即使是只涉及单精度浮点数时也不能完全代替x87。
增强的MMX指令
PAVGUSB用于求64位紧缩字节(8×8位字节)的平均值,可用于视频编码中的像素平均和图像缩放等。可能是意识到这个功能的重要性,Intel在SSE中添加了功能完全相同的PAVGB指令。
PMULHRW则用来补充MMX指令PMULHW的不足,在紧缩字(4×16位字)相乘时可以得到比后者更准确的结果。Intel直到最近才在SSSE3中增加了功能相似的指令PMULHRSW。
PSWAPD指令用于交换紧缩双字(2×32位字)中两个双字数据的位置。
数据类型转换指令
PF2ID、PI2FD等4条指令用于完成整数和单精度浮点数之间的相互转换。
数据预取指令
PREFETCH/PREFETCHW指令用于把将要使用到的数据从主存储器提前加载快取中,以减少访问主存储器的指令执行时的延迟。Intel在SSE中添加了类似的PREFETCHTx指令
快速退出MMX状态指令
FEMMS指令与MMX中的EMMS功能相同,用于退出MMX状态。在K6-2和K6-III处理器中,FEMMS比EMMS更快;在Athlon及更新的处理器中,FEMMS等同于EMMS。
Neon
ARM® NEON™ 通用 SIMD 引擎可有效处理当前和将来的多媒体格式,从而改善用户体验。
NEON 技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成),其性能至少为 ARMv5 性能的 3 倍,为 ARMv6 SIMD 性能的 2 倍。
NEON 技术是通过干净方式构建的,并可无缝用于其本身的独立管道和寄存器文件。
NEON 技术是 ARM Cortex™-A 系列处理器的 128 位 SIMD(单指令多数据)体系结构扩展,旨在为消费性多媒体应用提供灵活强大的加速功能,从而明显改善用户体验。 它具有 32 个寄存器,64 位宽(是 16 个寄存器,128 位宽的双倍视图。)
NEON 指令可执行“打包的 SIMD”处理:
- 寄存器被视为同一数据类型的元素的矢量
- 数据类型可为:签名/未签名的 8 位、16 位、32 位、64 位单精度浮点
- 指令在所有通道中执行同一操作
使用 NEON 技术的 ARM Cortex™-A 系列处理器,以及 ARM 的 Mali 多媒体硬件解决方案可用于多媒体应用,范围从智能手机和移动计算设备到HDTV。
1.什么是DSP芯片
DSP芯片,也称数字信号处理器,是一种具有特殊结构的微处理器。DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP 指令,可以用来快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下的一些主要特点:
(1) 在一个指令周期内可完成一次乘法和一次加法。
(2) 程序和数据空间分开,可以同时访问指令和数据。
(3) 片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问。
(4) 具有低开销或无开销循环及跳转的硬件支持。
(5) 快速的中断处理和硬件I/O支持。
(6) 具有在单周期内操作的多个硬件地址产生器。
(7) 可以并行执行多个操作。
(8) 支持流水线操作,使取指、译码和执行等操作可以重叠执行。
与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。
2. DSP芯片的发展
世界上第一个单片DSP芯片是1978年AMI公司宣布的S2811,1979年美国Iintel公司发布的商用可编程期间2920是DSP芯片的一个主要里程碑。这两种芯片内部都没有现代DSP芯片所必须的单周期芯片。 1980年。日本NEC公司推出的μPD7720是第一个具有乘法器的商用DSP 芯片。第一个采用CMOS工艺生产浮点DSP芯片的是日本的Hitachi 公司,它于1982年推出了浮点DSP芯片。1983年,日本的Fujitsu公司推出的MB8764,其指令周期为120ns ,且具有双内部总线,从而处理的吞吐量发生了一个大的飞跃。而第一个高性能的浮点DSP芯片应是AT&T公司于1984年推出的DSP32。
在这么多的DSP芯片种类中,最成功的是美国德克萨斯仪器公司(Texas Instruments,简称TI)的一系列产品。TI公司灾982年成功推出启迪一代DSP芯片TMS32010及其系列产品TMS32011、TMS32C10/C14/C15/C16/C17等,之后相继推出了第二代DSP芯片TMS32020、TMS320C25/C26/C28,第三代DSP芯片TMS32C30/C31/C32,第四代DSP芯片TMS32C40/C44,第五代DSP芯片TMS32C50/C51/C52/C53以及集多个DSP于一体的高性能DSP芯片TMS32C80/C82等。
自1980年以来,DSP芯片得到了突飞猛进的发展,DSP芯片的应用越来越广泛。从运算速度来看,MAC(一次乘法和一次加法)时间已经从80年代初的400ns(如TMS32010)降低到40ns(如TMS32C40),处理能力提高了10多倍。DSP芯片内部关键的乘法器部件从1980年的占模区的40左右下降到5以下,片内RAM增加一个数量级以上。从制造工艺来看,1980年采用4μ的N沟道MOS工艺,而现在则普遍采用亚微米CMOS工艺。DSP芯片的引脚数量从1980年的最多64个增加到现在的200个以上,引脚数量的增加,意味着结构灵活性的增加。此外,DSP芯片的发展,是DSP系统的成本、体积、重量和功耗都有很大程度的下降。
3. DSP芯片的分类
DSP的芯片可以按照以下的三种方式进行分类。
(1)按基础特性分
这是根据DSP芯片的工作时钟和指令类型来分类的。如果DSP芯片在某时钟频率范围内的任何频率上能正常工作,除计算速度有变化外,没有性能的下降,这类DSP芯片一般称之为静态DSP芯片。
如果有两种或两种以上的DSP芯片,它们的指令集和相应的机器代码机管脚结构相互兼容,则这类DSP芯片称之为一致性的DSP芯片。
(2)按数据格式分
这是根据DSP芯片工作的数据格式来分类的。数据以定点格式工作的DSP芯片称之为定点DSP芯片。以浮点格式工作的称为DSP芯片。不同的浮点DSP芯片所采用的浮点格式不完全一样,有的DSP芯片采用自定义的浮点格式,有的DSP芯片则采用IEEE的标准浮点格式。
(3)按用途分
按照DSP芯片的用途来分,可分为通用型DSP芯片和专用型的DSP芯片。通用型DSP芯片适合普通的DSP应用,如TI公司的一系列DSP芯片。专用型DSP芯片市为特定的DSP运算而设计,更适合特殊的运算,如数字滤波,卷积和FFT等。
4. DSP芯片的基本结构
DSP芯片的基本结构包括:
(1)哈佛结构。哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。由于程序和存储器在两个分开的空间中,因此取指和执行能完全重叠。
(2)流水线操作。流水线与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行的时间,从而增强了处理器的处理能力。处理器可以并行处理二到四条指令,每条指令处于流水线的不同阶段。
(3)专用的硬件乘法器。乘法速度越快,DSP处理器的性能越高。由于具有专用的应用乘法器,乘法可在一个指令周期内完成。
(4)特殊的DSP指令。特殊的DSP指令DSP芯片是采用特殊的指令。
(5)快速的指令周期。快速的指令周期哈佛结构、流水线操作、专用的硬件乘法器、特殊的DSP指令再加上集成电路的优化设计可使DSP芯片的指令周期在200ns以下。
5. DSP系统的特点
数字信号处理系统是以数字信号处理为基础,因此具有数字处理的全部特点:
(1) 接口方便。DSP系统与其它以现代数字技术为基础的系统或设备都是相互兼容,这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易的多。
(2) 编程方便。DSP系统种的可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级。
(3) 稳定性好。DSP系统以数字处理为基础,受环境温度以及噪声的影响较小,可靠性高。
(4) 精度高。16位数字系统可以达到的精度。
(5) 可重复性好。模拟系统的性能受元器件参数性能变化比较大,而数字系统基本上不受影响,因此数字系统便于测试,调试和大规模生产。
(6) 集成方便。DSP系统中的数字部件有高度的规范性,便于大规模集成。
6. DSP芯片的应用
现代数字信号处理器是执行高速数字信号处理的IC电路、它恰好适应多媒体信息化社会需求,迅速发展壮大。如今,世界电子器件市上,各种各样的DSP器件已相当丰富。大大小小封装形式的DSP器件,已广泛应用于各种产品的生产领域,而且DSP的应用领域仍在不断地扩大,发展迅速异常。
(1)数字化移动电话
数字化移动电话尽管花样繁杂,但基本上可划为两大类:高速移动电话和低速移动电话。其中,高速移动电话顾名思义是在高速移动体里使用的电话,诸如可在飞机、轮船和汽车等里自由通话的电话。虽然数字化高速移动通过标准很多,但当今普遍应用的是欧洲GSM(GlobalSystemforMobileCommunication)标准。自从推出数字化蜂窝式电话机以来,现已遍布全球70多个国家广泛应用。俗称GSM标准的数字化蜂窝电话,叫作数字化大哥大,它具备国际漫游(Roaming)功能,SIMC(SubscriberIdentificationModuleCard)给用户带来使用大哥大的方便。现正在扩展数据通信服务能力以及它与ISDN系统兼容性,例如,英国BT公司的Cellnet部已经利用GSM提供数字化数据和传真服务,于是东芝笔记本电脑也安上了数字化的大哥大。
低速移动电话就其实质而论。它是数字化无绳电话,仍然保持模拟式无绳电话的子母式结构:子机亦称为手机,可以距母机为百米左右半径内的空间里自由步行移动情况下实现通话;母机也称为基地站,可作为家庭里的留守电话,也可悬挂在商店的墙壁上,街道的电线柱上,广为分布。由统一的交换设施进行管理,实现无缝交递(SeamlessHandOn)功能。这类低速移动电话式标准很多。例如,欧洲较为普遍应用的DECI(DigitalEuropeanCordlessTelecommunictaion),日本、韩国、东南亚应用的PHS(PersonalHandy-phoneSystem)以及Philips和我国联合开发的DCCT(DigitalChinaCordlessTelephone)。其中,尤以PHS和DECT制式低速移动电话发展较快,我国的DCCT由于缺乏关键性的DSP技术仍处于设计阶段。
数字化移动电话(包括高速和低速)的每个手机,都要用至少1个DSP器,因此,高速发展的数字化移动电话急需极为大量的DSP器件。
(2)数据调制解调器
从所周知,数字信号处理器的传统应用领域之一,就是调制解调器。如今,调制解调器作为联系通信与多媒体信息处理系统的纽带,日益受到重视。特别是近年来Internet热潮,方兴未艾,普通百姓在Internet上冲浪蔚然成风。利用PC机通过调制解调器经由电话线路,实现拨号连接Internet已是最简便的访问形式。由于Internet用户急剧增加,一度致使28.8Kbps的调制解调器成为市场上的脱销产品。特别是由PC机上利用浏览程序调用活动图像信息时,期望使用数据传送速度更高的调制解调器。为适应这种新需求,国际上已制订出高速(33.6Kbps)调制解调器国际标准。这就意味,在高速调制解调器里需要更高性能的DSP器件。这种33.6Kbps的调制解调器(V.34)
是为传送数据而设计的,在此基础上发展出DSVD调制解调器,它既可传送数据又可传送声音。无疑,这样一来将需要更高功能的DSP器件。
随着高性能调制解调器不断出现,似乎低速的调制解调器如像V.17(14.4Kbps)再也没有用武之地。事实上,刚刚相反,如今信息家电抬头,例如PHS母机留守电话与个人FAX一体化的产品大量上市。这就是说,V.17(14.4Kbps)型的调制解调器仍有市场。于是,各种调制解调器里要求的DSP也是多种多样的。
(3)磁盘/光盘控制器需求
随着多媒体信息化的发展,各种信息存储媒体产品都应运而生,诸如磁盘存储器、CD-ROM和DVD(DigitalVersatileDisk)-ROM新产品纷纷上市。今日的磁盘驱动器HDD,存储容量已相当可观,大型HDD姑且不谈,就连普通PC机的HDD的存储容量已高在1GB以上,详见照片4。小型HDD向高密度、高存储容量和高速存取方向发展,其控制器必须具备高精度和高速响应特性,它所用的DSP性能也是今非昔比,高速DSP是必不可少的关键性器件。
日本的HDD技术不能超过美国,于是把主攻方向集中到光盘技术,在1996年日本第35届ElectronicsShow'96上,终于把DVD-ROM产品公布于众。而且,日本并不以此为满足,志在夺取可擦写的DVD-RAM。仅就DVD-ROM而论,单面1片12cm盘片记录4.7GB信息量,相当于直径12cm的软盘FD片3200张之多,比CD-ROM存储容量高出6倍。如此高密度的DVD-ROM,读出控制的精细程度可想而知。
HDD和光盘机的控制器里之所以必须利用高速DSP,主要是利用其高速"积和"处理能力。因为,盘片旋转控制、磁头定位控制和光盘中的激光束聚焦控制,都是采数字伺服与系统控制技术。这是现在控制技术,建立在数学模型基础之上。通过复杂的矩阵运算实现控制。没有高速运算的DSP,是绝对不行的。
(4)图形图像处理需求
DVD里应用的活动图像压缩/解压缩用MPEG2编码/译码器,同时也广泛地应用于视频点播VOD、高品位有线电视和卫星广播等诸多领域。在这些领域里,应用的DSP应该具备更高的处理速度和功能。而且,活动图像压缩/解压技术也日新月异,例如,DCT变换域编码很难提高压缩比与重构图像质量,于是出现了对以视觉感知特性为指导的小波分析图像压缩方法。新的算法出现,要求相应的高性能DSP。最近,日本各大学和高技术企业对于开发虚拟现实VR系统,投入相当力量,利用现代计算机图像学CG生成3维图形,迫切需要多个DSP并行处理系统。其中,系统里的结点DSP单元,要求采用与并行处理相适应的体系结构。
彩 {MOD}静止图像压缩/解压,现在普遍应用JPEG标准,其核心算法也是离散余弦变换。JPEG编码/译码器的应用,除了数字化照像机之外,估计彩 {MOD}打印机和彩 {MOD}扫描器也将要应用。因此,对于普通DSP的用量,必将日益增长。
(5)汽车电子系统及其它应用领域
汽车电子系统日益兴旺发达起来,诸如装设红外线和毫米波雷达,将需用DSP进行分析。如今,汽车愈来愈多,防冲撞系统已成为研究热点。而且,利用摄像机拍摄的图像数据需要经过DSP处理,才能在驾驶系统里显示出来,供驾驶人员参考。
应用DSP的领域可以说是不胜枚举,电视会议系统里,也大量应用DSP器件。视听机器里也都应用DSP。随着科学技术的发展,将会出现许许多多的DSP新应用领域。
最后来做一个总结:核心指令集发展回顾:
提升性能:扩展指令集
上面提到了处理器中的扩展指令集,目前市面上Intel和AMD的桌面级处理器在X86指令集的基础上,为了提升处理器各方面的性能,所以又各自开发新的指令集。指令集中包含了处理器对多媒体、3D处理等方面的支持,这些指令集能够提高处理器对这某些方面处理器能力,但是需要有必要的软件支持。
MMX指令集
MMX(Multi Media eXtension 多媒体扩展指令)指令集是Intel公司在1996年为旗下的Pentium系列处理器所开发的一项多媒体指令增强技术。MMX指令集中包括了57条多媒体指令,通过这些指令可以一次性处理多个数据,在处理结果超过实际处理能力的时候仍能够进行正常处理,如果在软件的配合下,可以得到更强的处理性能。使用MMX指令集的好处就是当时所使用的操作系统可以在不做任何改变的情况下执行MMX指令。但是,MMX指令集的问题也是比较明显的,MMX指令集不能与X86的浮点运算指令同时执行,必须做密集式的交错切换才可以正常执行,但是这样一来,就会造成整个系统运行速度的下降。
SSE指令集
SSE是Streaming SIMD Extension(SIMD扩展指令集)的缩写,而其中SIMD的为含意为Single Istruction Multiple Data(单指令多数据),所以SSE指令集也叫单指令多数据流扩展。该指令集最先运用于Intel的Pentium III系列处理器,其实在Pentium III推出之前,Intel方面就已经泄漏过关于KNI(Katmai New Instruction)指令集的消息。这个KNI指令集也就是SSE指令集的前身,当时也有不少的媒体将该指令集称之为MMX2指令集,但是Intel方面却从没有发布有关MMX2指令集的消息。
最后在Intel推出Pentium III处理器的时候,SSE指令集也终于水落石出。SSE指令集是为提高处理器浮点性能而开发的扩展指令集,它共有70条指令,其中包含提高3D图形运算效率的50条SIMD浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中的连续数据块传输指令。理论上这些指令对当时流行的图像处理、浮点运算、3D运算、多媒体处理等众多多媒体的应用能力起到全面提升的作用。SSE指令与AMD公司的3DNow!指令彼此互不兼容,但SSE包含了3DNow!中的绝大部分功能,只是实现的方法不同而已。SSE也向下兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。
3DNow!指令集
3DNow!指令集最由AMD公司所推出的,该指令集应该是在SSE指令之前推出的,被广泛运用于AMD的K6、K6-2和K7系列处理器上,拥有21条扩展指令集。在整体上3DNow!的SSE非常相相似,它们都拥有8个新的寄存器,但是3DNow!是64位的,而SSE是128位。所以3DNow!它只能存储两个浮点数据,而不是四个。但是它和SSE的侧重点有所不同,3DNow!指令集主要针对三维建模、坐标变换和效果渲染等3D数据的处理,在相应的软件配合下,可以大幅度提高处理器的3D处理性能。AMD公司后来又在Athlon系列处理器上开发了新的Enhanced
3DNow!指令集,新的增强指令数达了52个,以致目前最为流行的Athlon 64系列处理器还是支持3DNow!指令的。
SSE2指令集
在PentiumIII发布的时候,SSE指令集就已经集成在了处理器的内部,但因为各种原因一直没有得到充分的发展。直到Pentium 4发布之后,开发人员看到使用SSE指令之后,程序执行性能将得到极大的提升,于是Intel又在SSE的基础上推出了更先进的SSE2指令集。
SSE2包含了144条指令,由两个部分组:SSE部分和MMX部分。SSE部分主要负责处理浮点数,而MMX部分则专门计算整数。SSE2的寄存器容量是MMX寄存器的两倍,寄存器存储数据也增加了两倍。在指令处理速度保持不变的情况下,通过SSE2优化后的程序和软件运行速度也能够提高两倍。由于SSE2指令集与MMX指令集相兼容,因此被MMX优化过的程序很容易被SSE2再进行更深层次的优化,达到更好的运行效果。SSE2对于处理器的性能的提升是十分明显的,虽然在同频率的情况下,Pentium
4和性能不如Athlon XP,但由于Athlon XP不支持SSE2,所以经过SSE2优化后的程序Pentium 4的运行速度要明显高于Athlon XP。而AMD方面也注意到了这一情况,在随后的K-8系列处理器中,都加入SSE2指令集。
SSE3指令集
SSE3指令是目前规模最小的指令集,它只有13条指令。它共划分为五个应运层,分别为数据传输命令、数据处理命令、特殊处理命令、优化命令、超线程性能增强五个部分,其中超线程性能增强是一种全新的指令集,它可以提升处理器的超线程的处理能力,大大简化了超线程的数据处理过程,使处理器能够更加快速的进行并行数据处理。
上面介绍的基本上就是Intel和AMD公司在X86架构处理器上主要的扩展指令集,虽然它们对于处理器的性能提升有着一定程度的帮助,但是由于受到IA-32体系的限制,X86架构基本上不会再有具有革命性意义的指令集出现,而双方都已经把重心转向了64位体系架构的处理器指令集开发上。
下面的就是SSE4/5,以及AVX了.
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮