64-ia-32架构优化手册(12)

2.9. SIMD技术以及应用程序级扩展的总结

SIMD浮点指令完全支持二进制浮点算术的IEEE标准754。它们可以从所有的IA-32执行模式访问:保护模式,实地址模式,以及虚拟8086模式。

SSE,SSE2与MMX技术是架构性的扩展。现有的软件仍将正确运行,在包含这些技术的Intel微处理器上无需改动。在存在包含SIMD技术的应用程序时,现有的软件也将正确运行。

SSE与SSE2指令还引入了可以提高缓存使用与应用程序性能的可缓存性(cacheability)与内存定序(memoryordering)指令。

更多关于SSE,SSE2,SSE3与MMX技术,参考《Intel®64 and IA-32 Architectures Software Developer’s Manual, Volume 1》的以下章节:

·        第九章,Programming with Intel® MMX™Technology

·        第十章,Programming with Streaming SIMDExtensions (SSE)

·        第十一章,Programming with Streaming SIMDExtensions 2 (SSE2)

·        第十二章,Programming with SSE3, SSSE3 andSSE4

·        第十四章,Programming with AVX, FMA andAVX2

·        第十五章,Programming with Intel®Transactional Synchronization Extensions

2.9.1.MMTTM技术

MMX技术引入了:

·        64位MMX寄存器。

·        支持在封包的字节、字与长字整数上的SIMD操作。

MMX指令对多媒体与通讯软件是有用的。

2.9.2.流媒体SIMD扩展

流媒体SIMD扩展引入了:

·        128位XMM寄存器。

·        带有4个封包单精度浮点操作数的128位数据类型。

·        数据预取指令。

·        Non-temporal写指令(Non-temporal storeinstruction),及其他可缓存性与内存定序指令。

·        额外的64位SIMD整数支持。

SSE指令对3D几何,3D渲染,语音识别,视频编解码是有用的。

2.9.3.流媒体SIMD扩展2

流媒体SIMD扩展2增加了以下:

·        带有2个封包双精度浮点操作数的128位数据类型。

·        在16个字节,8个字,4个长字,或2个4字整数上的SIMD整数操作的128位数据类型。

·        对64位整数操作数上的SIMD算术的支持。

·        在新的与现有数据类型间的转换指令。

·        扩展了对数据混排的支持。

·        扩展了对可缓存性与内存定序操作的支持。

SSE2指令对3D几何,视频编解码以及加解密是有用的。

2.9.4.流媒体SIMD扩展3

流媒体SIMD扩展3增加了以下:

·        非对称与水平计算的SIMD浮点指令。

·        避免缓存行分开的一个特殊用途128位读指令。

·        一条转换到不依赖浮点控制字(FCW)整数的x87FPU指令。

·        支持线程同步的指令。

SSE3指令对科学,视频以及多线程应用是有用的。

2.9.5.补充流媒体SIMD扩展3

补充流媒体SIMD扩展3引入32条新指令来加速封包整数上的8类计算。它们包括:

·        执行水平加或减操作的12条指令。

·        求绝对值的6条指令。

·        执行先乘后加,以及加速点积求值的2条指令。

·        加速封包整数乘法操作,并按比例产生整数值的2条指令。

·        根据第二个混排控制操作数,执行逐字节、原地混排的2条指令。

·        如果源操作数对应符号位小于0,在目标操作数中对封包整数取负的6条指令。

·        对齐由两个操作数复合得到数据的2条指令。

2.9.6.SSE4.1

SSE4.1引入了47条新指令来加速视频,图形与3D应用程序。SSE4.1还改进了编译器的向量化,并显著提升了对封包双字计算的支持。它们包括:

·        执行封包双字乘法的2条指令。

·        执行带有输入/输出选择的浮点点积乘法的2条指令。

·        对WC负载提供一个流媒体暗示的1条指令。

·        简化封包混合(blending)的6条指令。

·        扩展对封包整数MIN/MAX支持的8条指令。

·        以可选择取整模式与精度异常覆盖(precision exceptionoverride)支持浮点取整的4条指令。

·        改进从XMM寄存器插入及提取数据的7条指令。

·        改进封包整数格式转换(符号及零扩展)的12条指令。

·        改进对小块SAD(绝对值差总和)生成的1条指令。

·        辅助字长度整数的水平搜索操作的1条指令。

·        改进掩码比较的1条指令。

·        四字封包相等性比较的1条指令。

·        以无符号饱和打包双字1条指令。

2.9.7.SSE4.2

SSE4.2引入了7条指令。包括:

·        比较64位整数数据元素的1条128位SIMD整数指令。

·        提供一组丰富原语的4条字符串处理指令,这些原语可以加速:

-  从strlen,strcmp到strcspn这些基本以及高级的字符串库函数。

-  分隔符处理,文本流词法分析的符号提取。

-  解析器,包括XML处理的schema验证。

·        加速循环冗余检验签名计算的1条通用指令。

·        用于整数值比特位统计的1条通用指令。

2.9.8.AESNI与PCLMULQDQ

AESNI引入了7条新指令,其中6条是加速基于称为AESNI的AES加解密标准算法的原语。

PCLMULQDQ指令加速了通用的块加密,它可以对两个最多64位的二进制数执行无进位乘法。

通常,基于AES标准的算法涉及经由几个原语,通过多次迭代,转换数据块。AES标准支持128,192以及256比特的密钥。密钥大小分别对应10,12以及14次迭代。

AES加密涉及通过称为“AES轮”的有限次迭代操作,将128位输入数据(明文)处理为128位加密块(密文)。解密遵循反向的迭代操作,使用“等效逆密码(equivalentinverse cipher)” ,而不是“逆密码(inversechiper)”。

在每一轮密码学处理涉及两个输入数据,一个是“状态”,另一个是“轮密钥”。每一轮使用不同的“轮密钥”。使用“密钥次序表(keyschedule)”算法从密钥推导出轮密钥。“密钥次序表”算法不依赖于数据的加解密处理,并且可以独立于加解密阶段进行。

AES扩展提供了两个原语来加速加密的AES轮,两个原语用于使用等效逆密码解码的AES轮,以及2条支持AES密钥展开过程的指令。

2.9.9.Intel® 先进向量扩展(Intel® Advanced Vector Extension)

在前代流媒体SIMD扩展之上,Intel®先进向量扩展提供了广泛的架构性改进。IntelAVX引入了以下架构性改进:

·        支持256位向量与SIDM寄存器集。

·        256位浮点指令集增强,相对128位流媒体SIMD扩展,带来最多2倍的性能提升。

·        指令语法支持一般的3操作数语法,以改进指令编程的灵活性以及新指令扩展的高效编码。

·        增强遗留128位SIMD指令扩展以支持3操作数,并简化高级语言表达式的编译器向量化。

·        支持256位AVX代码,128位AVX代码,遗留128位代码以及标量代码的灵活部署。

Intel AVX指令集与256位寄存器状态管理的细节描述在IA-32《Intel® ArchitectureSoftware Developer’s Manual, Volumes 2A, 2B and 3A》。IntelAVX的优化技术在第十一章,Optimizationfor Intel AVX, FMA, and AVX2,中讨论。

2.9.10.半精度浮点转换(F16C)

VCVTPH2PS与VCVTPS2PH是2条支持半精度浮点数据类型与单精度浮点数据类型间转换的指令。这两条指令出现在与IntelAVX相同的编程模型里。

2.9.11.RDRAND

RDRAND指令获取由一个加密保护的、确定性的随机比特生成器(DBRG)所提供的随机数。DBGR的设计满足NISTSP 800-90A标准。

2.9.12.融合的乘加(FMA)扩展

FMA扩展以高通量的计算能力覆盖融合乘加,融合乘减,融合乘加/乘减交错,在融合乘加与乘减操作上符号取反相乘,增强了IntelAVX。FMA扩展提供了36条256位浮点指令来执行256位向量上的计算,还提供了额外的128位与标量FMA指令。

2.9.13.Intel AVX2

Intel AVX2通过将大多数128位SIMD整数指令提升到256位的处理能力扩展了IntelAVX。AVX2指令遵循与AVX指令相同的编程模型。

另外,AVX2对数据元素上的广播/排列操作,带有每数据元素可变偏移量的向量偏移指令,以及从内存获取非连续数据元素的指令,提供了增强的功能

2.9.14.通用比特处理指令

第四代Intel Core处理器家族引入了一组工作在通用寄存器上的比特处理指令。这些指令的大多数使用VEX前缀编码方案来提供非破坏性的源操作数语法。

这些指令由CPUID报告的3个独立标记所枚举。细节,参考《Intel®64 and IA-32 Architectures Software Developer’s Manual, Volume 1》的第5章,以及《Intel®64 and IA-32 Architectures Software Developer’s Manual, Volumes 2A, 2B & 2C》的第3、4章。

2.9.15.Intel®事务式同步扩展(Transactional Synchrization)

第四代Intel Core处理器家族引入了Intel®事务式同步扩展(IntelTSX),它目的在于改进多线程应用程序锁保护临界区的性能,同时维持基于锁的编程模式。

背景与细节,参考《Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual, Volume 1》,第15章“Programmingwith Intel® Transactional Synchronization”。

在多线程应用程序的锁保护临界区上使用Intel TSX的软件调整建议描述在第12章“Intel®TSX Recommendations”。

2.9.16.RDSEED

Intel Core M处理器家族引入了RDSEED,ADCX与ADOX指令。

RDSEED指令获取由一个加密保护的,增强的确定性随机比特生成器(增强NRBG)提供的一个随机数。NRBG的设计满足NISTSP 800-90B与NIST SP 800-90C标准。

2.9.17.ADCX与ADOX指令

ADCX与ADOX指令,连同MUL指令,使软件能加速要求大整数值的计算。在https://wwwssl.intel.com/content/www/us/en/intelligent-systems/intel-technology/ia-large-integer-rithmeticpaper.htmlhttp://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/largeinteger-squaring-ia-paper.html可以找到相关细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值