英特尔AVX指令集简介
AVX(Advanced Vector Extensions,高级矢量扩展)指令集借鉴了一些AMD SSE5的设计思路,进行扩展和加强,形成一套新一代的完整SIMD指令集规范。
IDF2010上演示AVX应用
在今年4月的IDF2010上,英特尔演示了AVX的应用,在两个不同平台上动态跟踪刘翔运行服上的五星红旗,结果显示,支持AVX的系统视频跟踪的用时为14秒,比不支持AVX的系统快了21秒,性能提升了60%以上。
有兴趣的读者可以点击观看AVX应用主题演讲视频,时间大概在第33分钟左右。
英特尔AVX指令集主要在以下几个方面得到扩充和加强:
·支持256位矢量计算,浮点性能最大提升2倍
·增强的数据重排,更有效存取数据
·支持3操作数和4操作数,在矢量和标量代码中能更好使用寄存器
·支持灵活的不对齐内存地址访问
·支持灵活的扩展性强的VEX编码方式,可减少代码
支持256位矢量计算
自1999年SSE将矢量处理能力从64位提升到128位后,SSE系列指令都只能使用128位XMM寄存器,这次AVX将所有16个128位XMM寄存器扩充为256位的YMM寄存器,从而支持256位的矢量计算。
这意味着可以同时处理8个32bit的浮点或是一个256bit的浮点,在写程序时可以忽略SSE 128bit的限制,直接写入一个可以进行多组操作,能够充分利用256bit数据位宽的代码,理想状态下,浮点性能最高能达到前代的2倍水平。
当然有时并不是能完全能利用这256位,在大多数情况下,这些寄存器的高128位是设为0或者是“left unchanged”,同时所有的SSE/SSE2/SSE3/SSSE3/SSE4指令是被AVX全面兼容的(AVX不兼容MMX),因此实际操作的是YMM寄存器的低128位,在这一点上与原来的SSE系列指令集无异。
为了满足指令集带来的改进,Load载入单元也要适应一次载入256Bit的能力,所以增加了一组载入单元完成载入操作,并不是单纯的将带宽扩展一倍。这样可以在一个时钟周期内实现256位的乘、加和Shuffle运算。
使用新的256位寄存器来提升数据I/O效率,更好的标记、传播载入的数据,动态的改变数据序列,以此来组织、访问和载入运算所需的数据,速度更快效率更高。
AVX还引入了很多新的浮点运算指令,浮点运算能力加强,不光提升了3D游戏,还可以更有效的支持如复杂的flash显示,更快的SVG(可伸缩矢量图形)支持,更好的HTML5效果等等,相比用GPU计算来讲功耗更小,体积更小,成本也小,对GPU计算是个不大不小的冲击。
- 第1页:英特尔CPU扩展指令集演变
- 第2页:英特尔AVX指令集简介