SIMD

对处理器来说指令集是赋予硬件活力的催化剂,就像灵魂之于肉体。因此,AMD与Intel在指令集研发的斗争上从来没有停息过,只是随着AMD的推土机微架构逐渐浮出水面,x86领域的SIMD(Single Instruction Multiple Data单指令多数据流)指令之争将暂时告一段落。 据现有消息来看推土机架构的指令集规格比Sandy Bridge乃至后续的Ivy Bridge都要完整。这不禁让人好奇,以XOP、FMA4 等为代表的AMD新一代指令集到底有何特点和优势,能有如此的前瞻性。

Bulldozer(推土机)是AMD继使用了多年的K10 micro architecture(微架构)后全新一代的微架构。从AMD给出的官方资料来看 AMD除了在Bulldozer上实现自家的 XOP、FMA4以及CVT16指令外,还将完整地支持Intel Sandy Bridge上的所有指令集。除了以前的MMX和SSE系列指令,还将包括新的SSE4.1、SSE4.2、AVX、AES和CLMUL 指令集。

Bulldozer和Sandy Bridge架构的指令集对比介绍
1.Sandy Bridge支持的指令集

Sandy Br idge微架构的处理器已经在2011年1月发布了,在SIMD指令方面Sandy Bridge微架构的处理器支持新一代的AVX(Advanced Vector Extensions高级适量扩展)、AES或者说AES-NI(Advanced Encryption Standard New Instructions高级加密标准指令)以及CLMUL指令,但并不提供对FMA指令的支持。从Intel给出的资料显示,在下一代微架构Ivy Bridge上FMA指令也不会得到支持,要到Haswell微架构才会将FMA指令集加入到支持列表中。

2.Bulldozer支持的指令集

AMD即将登场的推土机架构处理器,桌面产品代号为Zambezi,在SIMD指令方面推土机微架构将完整地支持Intel新一代的AVX、AES以及CLMUL指令,并对SSE系列的扩展指令进行了补充支持,包括SSSE3、SSE4.1和SSE4.2指令集。此外,除了继承自己的老指令集,还会提供包括XOP、FMA4以及CVT16指令集在内的新指令集。实际上XOP、FMA4和CVT16指令集是从SSE5发展改良而来的,使用了AVX指令的设计方案,可以理解为是对AVX指令集的补充。值得注意的是,对于CVT16指令集AMD官方没有文档化,还不能肯定推土机架构处理器是否能支持。

从SSE5和AVX开始的新一代指令集之争
在对x86指令集背景知识有所了解后,我们进入本文所要讲的主角——XOP系列指令集。由于XOP系列指令集算是AVX的扩充版,所以笔者将尝试带领读者深入探索,对比AVX与XOP系列指令的底层知识。

XOP、FMA4以及CVT16指令是由SSE5演变发展而来,可是SSE5指令集已经不存在了,AMD改变了SSE5指令集的设计方案,它的指令编码方式使用了AVX的编码规则,以达到兼容AVX指令的方案。也因此,XOP指令与AVX指令不存在冲突,你甚至可以将XOP、FMA和CVT16指令集可以看作是对AVX指令集的补充。

实际上XOP、FMA4、CVT16以及FMA、AES(AES-NI)、CLMUL指令都使用了AVX的指令编码设计方式。从这方面来看AVX统一了新一代SIMD指令的编码设计方案,这完全有别于早前的SSE系列仅以指令来区别的指令集形式。从这个趋势看AVX的指令集编码设计方案将在x86处理器平台上统冶相当长的时间,换句话说Intel又掌握了未来相当长时间内x86架构指令集设计的主动权。

AMD新指令集得从 AVX系指令集说起
Intel 的AVX系指令集包括下面4个子集:

(1) AVX指令集:新一代的SIMD指令

(2) FMA指令集:新一代的fused-multiply-add SIMD指令

(3) AES-NI指令集:新的指令由原SSE指令演变而来

(4) CLMUL指令集:新的指令由原SSE指令演变而来

这些指令集都统一使用了AVX指令的编码设计规则,FMA是全新的子集,而AES-NI与 CLMUL指令由原有的SSE系列指令演变而来,因此它们既有SSE版本,也有全新的AVX版本。推土机完整地支持AVX,实现的指令与Intel的AVX完全兼容。因此这里描述的AVX指令内容既适合Intel也同样适合AMD。

AVX在规格方面,提供了共365条指令,其中包括:

提供了35条256位的double-precision(双精度)和single-precision(单精度)浮点vector运算。覆盖了9类运算:

add(加):例如 vaddps指令

subtract(减):例如vsubps指令

multiply(乘):例如vmulps指令

divide(除):例如vdivps指令

square-root(平方根):vsqrtps指令

compare(比较):例如vcmpps指令

max(求最大值):例如vmaxps指令

min(求最小值):例如vminps指令

round(舍入):例如vroundps指令

提供了57条256位非运算类的数据处理指令,其中包括了39条256位数据处理指令和18条新提供的256位vector数据处理指令

你可能感兴趣的:(SIMD)