SIMD是Single-instruction multiple-data的缩写。意思是通过一条指令就能够对若干笔数据进行处理运算。这种指令对于整数型数组运算,或者是图象像素点运算都极为有利。为了支持这种处理模式,Intel推出了一系列的技术和指令集,这其中包括:
MMX技术
SSE扩展指令集
SSE2扩展指令集
SSE3扩展指令集
SSE3补充指令集
SSE4扩展指令集
所有的技术或是指令集都提供了若干指令用来支持SIMD运算。其运算对象可以是整数型数据或者是浮点数据。
对于SIMD的整数数据运算,可以使用64位MMX寄存器,或者是128位XMM寄存器。而对于SIMD的浮点数据运算,则只能是哟很难过128位的XMM寄存器。
在奔腾II时期,Intel就推出了MMX技术,该技术包括了MMX指令集以及MMX寄存器。MMX寄存器为64位宽度,可以一次性处理8个独立字节的整数型运算,或者是4个独立16位的整数型运算,或者两个独立的32位整数型运算,或者一个64位整数型运算。
当到了奔腾III时期,Intel又推出了SSE扩展指令集。这些指令可以在XMM寄存器中处理单精度浮点数据,或者在MMX寄存器中处理整数型数据。部分SSE指令提供了对状态,缓存(Cache)和内存访问顺序等方面的控制。SSE指令集对于图象处理方面进行了补强。例如3D建模,渲染和视频解码等方面。
Intel的奔腾4和至强(Xeon)系列处理器推出后,又增加了SSE2扩展指令集。这些指令可以使用相同的XMM寄存器处理双精度浮点数据和整数型数据。这样一来,原本只能处理64位整数型数据的能力得到了提升。除此之外,在对缓存以及内存访问顺序方面,SSE2也提供新的支持。
SSE3扩展指令集伴随着奔腾4处理器超线程(Hyper-Threading)技术一起发布。SSE3扩展指令集增加了13个新指令用来提高SIMD相关运算的性能。
SSSE3扩展指令集增加了32个指令用来提升SIMD对于整数型数据运算的性能,最早在Intel的Xeon 5100系列和Intel Core 2处理器上使用。
SSE4扩展指令集又增加了54条指令。其中47条指令被称为SSE4.1,剩下7条指令被称为SSE4.2。
进入到Intel 64架构后,128位的XMM寄存器由原来的8个,增加到了16个。
再往后,Intel推出了AVX (Advacned Vector Extensions)技术。相比传统的SIMD相关运算,AVX提供了更为强大的架构支持。主要特点如下:
提供了256位的YMM寄存器,用来扩展原本的XMM寄存器。
相比128为XMM寄存器来说,两倍效能提升(如果执行时间一致的话)
相比传统SIMD指令,AVX指令能够支持3操作数运算,这对于编程来说,提供更好的灵活性。如果只有两个操作数,势必有一个操作数中的内容将会被运算结果替换掉。
全部0条评论
快来发表一下你的评论吧 !