在Intel Sandy Bridge微架构中,Intel引入了256位SIMD扩展AVX,这套指令集在兼容原MMX、SSE、SSE2对128位整点SIMD支持的基础上,把支持的总向量数据宽度扩展成了256位。新增了若干条256位浮点SIMD指令。

昨天,Intel刚刚发布了AVX2指令集,这套指令集在AVX基础上做了扩展,不过要在2013年发布的Haswell处理器上才能支持。参考1给出了AVX2的详细特性。

AVX2指令集概述

相比AVX,AVX2在如下方面做了扩展。

  • 支持的整点SIMD数据宽度从128位扩展到256位。Sandy Bridge虽然已经将支持的SIMD数据宽度增加到了256位,但仅仅增加了对256位的浮点SIMD支持,整点SIMD数据的宽度还停留在128位上,
  • 增强广播、置换指令支持的数据元素类型、移位操作对各个数据元素可变移位数的支持、跨距访存支持。

跨距访存支持

跨距访存支持即访存时,每个SIMD数据的向量数据元素可以来自不相邻的内存地址。AVX2的跨距访存指令称为”gather”指令,该指令的操作数是一个基地址加一个向量寄存器,向量寄存器中存放着SIMD数据中各个元素相对基地址的偏移量是多少。有了这条指令,CPU可以轻松用一条指令实现若干不连续数据”聚集”到一个SIMD寄存器中。这会对编译器和虚拟机充分利用向量指令带来很大便利,尤其是自动向量化。另外,参考2中对跨距访存指令的功能描述中可以看到,当该指令的偏移地址向量寄存器中任何两个值相同时,都会出GP错。这意味着编译器还是需要些特殊处理才能利用好这条指令。

跨距访存指令

但跨距访存指令仅仅支持32位整点、64位整点、单精度浮点、双精度浮点的跨距访存操作。从参考4可以猜测其实gather指令只是在硬件上分解成若干条32位或64位的微访存指令实现。这就移位着其实一条32×8的SIMD访存其实就是8次32位普通数据访存,其访存延时和延时不确定性会非常大,聊剩于无。

拓宽原有整点SIMD指令

理论上从128位到256位的成倍SIMD宽度扩展能带来一倍的加速。

从128位扩展到256位的整点SIMD指令

位操作指令支持

这些指令在加速数据库压缩、哈希,大数的算术计算方面会有帮助。

新增的位访存操作指令

任意位置的SIMD数据置换支持

这一支持将使编译器可以更灵活的使用这条指令协助自动向量化。像参考5这类工作就能实施在Intel的芯片中。

任意位置数据置换指令支持

向量-向量移位支持

之前Intel上的所有SIMD扩展指令的移位操作仅支持所有SIMD数据同时移位相同的位数,有了向量-向量移位支持,就可以为每个SIMD数据做不同的移位操作。

向量-向量移位操作支持

浮点乘法累积操作

之前的X86处理器上的累积操作多数针对整点数据,这次针对浮点数据增加的60条SIMD操作会给Intel跑浮点Benchmark,比如linpack之类的带来很多加速。

《编译点滴》评论

之前几乎所有在通用微处理器上的SIMD指令,都倾向于一刀切策略,即所有的SIMD操作都针对SIMD数据实施完全相同的操作,并不存在特性化的指令。比如访存都是从一块连续的地址空间直接访存、移位时所有的数据都移动相同的位数,数据置换指令的支持也是最近才出现在通用CPU中的。AVX2的这些支持再次肯定了个性化的趋势,CPU中的SIMD支持朝着GPU的方向大踏步前进,并最终赶上并超越向量机。不得不称赞一下IBM的超前思想。AVX2中的这些特性支持在几年前的Power处理器中就已经出现了。

虽然AVX号称可以扩展到512位甚至1024位的SIMD支持,但是所带来的问题怎么解决,期待AVX3或者AMD的小宇宙爆发,或者威盛的黑马:

  1. 理论上,增加1倍的向量数据宽度,将带来2倍的晶体管数量提升。目前,Intel的AVX指令集只实现在片上每个core里,作为core中的一个功能部件,若扩展到1024位,将增加4倍的晶体管。虽然制造工艺也会改进,但功耗还是会很大,怎么解决?
  2. 在自动向量化仍然不好用的前提下,普通程序很难利用到这些功能做加速,白白的浪费这些晶体管吗?
  3. 这么大的数据计算能力,访存怎么供数?对齐貌似还是没有好的方法。还是要程序员自己吭哧吭哧写向量化代码,调试吗?芯片厂商可以每几年升级一次宽度,但兼容性如何保证,原来有64位、128位、256位分别对应MMX、XMM、YMM寄存器,以后呢?

参考

  1. http://software.intel.com/en-us/blogs/2011/06/13/haswell-new-instruction-descriptions-now-available/
  2. http://software.intel.com/file/36945
  3. http://en.wikipedia.org/wiki/Haswell_%28microarchitecture%29
  4. http://software.intel.com/en-us/forums/showthread.php?t=83459&o=a&s=lr
  5. http://portal.acm.org/citation.cfm?id=1133996

Intel 的AVX2指令集解读相关推荐

  1. Intel的AVX2指令集解读

    原文链接:http://blog.csdn.net/vbskj/article/details/38408213 在Intel Sandy Bridge微架构中,Intel引入了256位SIMD扩展A ...

  2. 关于dorisdb 本地搭建virtual_box虚拟机设置CPU支持AVX2指令集

    dorisdb安装文档要求 https://docs.dorisdb.com/zh-cn/main/quick_start/Deploy 解决办法 Intel VT-x和AMD-V是intel和amd ...

  3. python指令集_Tensorflow不支持AVX2指令集的解决方法

    这几天研究了一下FCN(全卷积网络),由于电脑配置不够,用GPU训练直接报OOM(内存溢出)了, 于是转战CPU,当然,这样会很慢,之后会继续搞一下,减小一下网络的复杂度,对一些参数设置一波,看能不能 ...

  4. Intel SIMD: AVX2

    AVX2 资料: Intel 内部指令 - AVX和AVX2学习笔记 Intel Intrinsics - AVX & AVX2 Learning Notes Module x86 AVX 向 ...

  5. 查看cpu是否支持avx2指令集

    也就是查看服务器支持的指令集 cat /proc/cpuinfo

  6. CPU版的Tensorflow不支持AVX2指令集问题解决方案

    这个问题遇到第三次了,回想查找解决方案的艰辛,为自己以后方便解决也为各位减少时间浪费,特说明自己遇到问题情况以及自己的解决方案.主要写两点:1.pip导入whl文件和PyCharm使用pip内部库2. ...

  7. 一文读懂SIMD指令集 目前最全SSE/AVX介绍

    SIMD指令集 SSE/AVX 概述 参考手册 Intel® Intrinsics Guide Tommesani.com Docs Intel® 64 and IA-32 Architectures ...

  8. 多核cpu应用场景_多核?高频?不同需求哪种CPU最适合自己呢?

    原标题:多核?高频?不同需求哪种CPU最适合自己呢? [PConline 杂谈]如今的办公场景中,混杂着各种各样的应用:文档处理,网页浏览,多媒体编辑.人们装机来办公,茶余饭后时间可能还想玩几局游戏放 ...

  9. 多核cpu应用场景_2019电脑CPU怎么选_多核cpu和单核的区别|哪个好-太平洋电脑网...

    [PConline 杂谈]如今的办公场景中,混杂着各种各样的应用:文档处理,网页浏览,多媒体编辑.人们装机来办公,茶余饭后时间可能还想玩几局游戏放松放松,最起码的要求就是"流畅不卡" ...

最新文章

  1. GitHub上传代码、更新代码、token设置
  2. JavaScript 学习中的帮助记忆(日积月累)
  3. GDCM:gdcm::SequenceOfItems的测试程序
  4. 网络流-最大流 dinic+当前弧优化(模板)
  5. C++中的继承(二)
  6. jenkins java_具有WildFly,Arquillian,Jenkins和OpenShift的Java EE 7部署管道
  7. 风靡全球的儿童编程语言:Scratch
  8. 深入理解Transformer及其源码
  9. 《设计模式详解》行为型模式 - 命令模式
  10. 磁盘位置_ORACLE RAC ASM磁盘组迁移到新的ASM磁盘组方法
  11. Excel如何冻结多行多列
  12. win10强制关闭飞行模式_win10笔记本突然连不上wifi怎么办?
  13. arduino智能浇花系统_基于Arduino单片机的智能浇花器
  14. 机器人搭建记录 HoshinoBot
  15. MT8735芯片技术资料解析,MT8735处理器简介
  16. mysql刷新当前数据库_sqlyog刷新数据库
  17. GPS接收机(三)低噪放设计和版图仿真优化
  18. 流媒体协议之RTMP详解
  19. java 汇编_大话+图说:Java 汇编指令——只为让你懂
  20. 齐博 4.0 ditu.inc.php,齐博系统全版本后台无限制可getshell

热门文章

  1. 信号相角位移量的计算与信号位移计算-附Matlab代码
  2. 浏览器新建标签页被篡改
  3. matlab simhash,最大非负的序列和 - 轻舞凋零的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. Linux运维网络基础
  5. 网络与串口调试工具TCPCOM
  6. JSP+Servlet+MySql超市管理系统项目源码
  7. 配置法 求解1D第二类线性的Fredholm积分方程 +MATLAB
  8. [附源码]计算机毕业设计校园订餐管理系统Springboot程序
  9. 嵌入式:I/O接口扩展
  10. matlab 提示秩 1,Cholesky 分解的秩 1 更新