您好,欢迎访问一九零五行业门户网

为什么avx指令集发热量这么大(avx指令集不支持怎么办)

本文主要介绍为什么avx指令集发热量这么大(avx指令集不支持怎么办),下面一起看看为什么avx指令集发热量这么大(avx指令集不支持怎么办)相关资讯。
许多读者和朋友在阅读我们的文章时可能会经常看到术语avx指令集。比如在cpu评测中经常可以看到。一些新玩家可能不理解这个术语的含义。今天本文就简单介绍一下这个指令集的来龙去脉。
并梳理了其目前在实践中的应用。
从simd开始,要了解avx指令集的功能,我们必须先了解它是什么。定义很简单。它是x86处理器上的一组simd指令集,是经典sse系列指令集的直接继承者。那么什么是simd呢?
在计算机早期,冯诺依曼计算机一次只能通过输入一条指令对一对数据进行运算,例如,‘,a,b’可以使ab相加,
这是单指令流(单数据流)。显然,面对大量的数据,这种操纵数据的方法是低效的。
程序员想让一个操作对多组数据生效,应该怎么做?引入了单指令流和多数据流的思想。
它使得用一条指令操作多组数据成为可能。
在上面的示意图中可以看到更直观的区别。
在20世纪80年代和90年代,许多处理器开发人员意识到了simd的前景,他们开始在自己的处理器中添加simd支持。1996年,
英特尔发布了基于全新p55c架构的奔腾mmx系列处理器(最早的奔腾处理器是p5架构),引入了全新的mmx指令集,开始支持simd。
从mmx到sse,再到avxpentium mmx系列处理器,新推出的mmx指令集开创了x86处理器支持simd运算的先河。指令集定义了8个64位宽的寄存器。
每个寄存器的64位容量可以放入8个8位整数、4个16位整数或2个32位整数,cpu在识别到mmx指令集的新指令时会自动对寄存器中的数据进行除法运算,这样
单个指令成功操作多个数据,实现了simd。
然而,mmx毕竟太年轻了。它实际上是通过重用cpu中x87浮点单元的寄存器来实现simd的,所以与运行浮点运算的x87指令集冲突,所以两者不能互换使用,必须先切换。另外,由于上述冲突,它只支持整数运算。
在即将到来的3d时代似乎有点不足。
英特尔当然很清楚mmx指令集的局限性,以及竞争对手的新3dnow!指令集(amd k6-2,1998)支持浮点simd运算。
因此,1999年2月,他们很快在经典的奔腾3处理器上推出了新的sse(流simd扩展)指令集。
sse指令集解决了mmx指令集存在的两大问题,通过引入新的独立寄存器解决了与浮点运算的冲突,还支持浮点simd运算。当然,它比mmx强得多。
随着处理器架构的进步,它的寄存器宽度已经达到了128位,使得一条simd指令可以操作更多的数据,效率得到了很大的提高。但原sse指令集的单寄存器只支持长度为32位的浮点数。
还是有很大的局限性。这个问题在pentium 4(willamette,2000)上引入的sse2中已经解决,simd操作灵活得多。
随后在约莫8年的时间里,intel一直在更新sse指令集,从sse出到sse4,amd方面则是一直在跟进,到了sse4.2,amd开始想要在指令集上面寻找自己的翻身点,
于是推出了只有自家支持的sse4a子集,随后更是提前于intel提出了sse5。
但intel不干,我是x86的老大,我不能跟着你来。他们另起炉灶,准备在未来的sandy bridge架构中引入一套新的simd指令集,这套新指令集在2008年公布,
被命名为高级向量扩展(advanced vector extensions)。
革新的avx,越来越宽的寄存器相比起迭代了多年的sse系列指令集,avx指令集带来了巨大的革新,其中最为主要的是,它在兼容sse指令集性的同时,
将sse时代最大宽度为128-bit的寄存器拓宽到了256-bit。
不过初代avx指令集还是比较保守的,它没有将所有指令宽度拓宽到256-bit,而是选择停留在128-bit上面。全面进入256-bit时代这个任务,
还是交给了随后的haswell架构来完成(2013年6月份)。
同处理器用不同指令集的能效对比
但如果以为intel会就此停下脚步的话,那就大错特错了,他们很快捣鼓出了更宽的avx-512指令集,顾名思义,其寄存器宽度再次加倍,来到512-bit。
首个支持avx-512指令集的处理器其实是intel的xeon phi加速卡,首次跑到cpu上已经是skylake-x系列了。而avx-512也并不再是一个单一的指令集,
它实际上指代的是多个指令集的集合,目前这个数字是17,之后可能还会增多。所有支持avx-512的处理器都必须支持avx-512 foundation子集,从命名上也可以看出,
它其实是avx-512指令集的基础。
长长的avx-512子集列表
目前只有基于skylake-server和ice lake这两个架构的处理器可以支持avx-512(cannon lake死了,不然也算),使用门槛较高,一般新一点的应用也只是针对avx2进行优化。
宽度越大,处理器的计算能力也就越强,尤其是在浮点运算方面,理论上提升有一倍之多,而实际应用中,如果优化得当,其提升幅度还要大一些。但是,
新指令集在带来性能增长的同时也带来了另一个让人感到头痛的问题——功耗。
性能强了,峰值功耗也高了avx指令集在带来更高性能的同时让cpu的峰值功耗也变高了,可以通过下面的例子进行理解:
飞机发动机是按照最大起飞重量设计的,如果实际的载重没有到最大起飞重量的话,飞行员就可以减推力起飞来降低油耗。cpu也是一样的,最吃功耗的执行单元是根据最大宽度来设计的,
平时用不到最大宽度的时候它的功耗就小了,而一旦用到极限,它也就会全开,此时cpu的功耗就上去了。
intel avx is designed to achieve higher throughput for certain integer and floating-point operations. using these instructions may cause processors to operate at less than the marked tdp frequency. these reductions in frequency occur because high-power intel avx instructions require additional voltage and electrical current.
现如今cpu的功耗是根据负载大小来的,在同频下面,avx2的负载明显高于sse负载,因此它的功耗也会大上去。为了让cpu的功耗保持在tdp范围之内,intel特地设计了一个avx偏移频率,
让工作在avx状态下面的处理器降低一点频率以减小发热量和功耗,保证使用安全。intel官方也在2014年的一份avx指令集优化白皮书中明确说明使用avx指令集需要额外的电压和电流。
只在跑分上看到?其实不然对于我们这些要做跑分评测的编辑来说,最常接触到的avx应用其实就是aida64了,那么可能有读者就要问了,这个指令集都已经推出十年了难道只能用来跑分烤机吗?当然不是,
在intel的推广之下,现如今已经有大量的生产力应用支持它了,主要在渲染、视频编码、加解密和数学计算等方面有应用,新的avx-512还针对深度学习推出了avx-512 vnni子集,另外,
普通玩家最为关心的游戏方面也是有越来越多的应用了,下面举几个例子。
渲染、视频编码渲染方面最常见的有blender,它不仅仅在我们的测试中被用的多,是真的有很多人都会用它做动画或者cg图,它的渲染引擎可以调用avx2指令集进行加速计算,吃满你的cpu。
跟渲染方面有点搭边的就是视频编码了,x264和x265这两个知名开源视频编码器想必已经不用再多介绍了,它们都在前几年中纷纷加入了对于avx指令集的支持,后者甚至加入了针对avx-512的支持,
不过还需要继续优化。另外,intel方面自己也开源了一套名为svt的视频编码器,配合不同后端可以实现不同的编码,对avx和多核的优化相当好。
深度学习深度学习方面,google著名的开源深度学习框架tensorflow在1.6版本之后就已经需要一颗支持avx指令集的cpu了,换言之,它应用了avx指令集。
另外,avx-512的大宽度让它很适合用来跑深度学习,所以intel也针对深度学习设计了一套子指令集——avx-512 vnni,用来加速深度学习相关的计算,在测试中,它表现出了相当的实力。
加解密加解密计算场景中对cpu的计算吞吐量有较大的要求,此时avx指令集就可以发挥作用,常见的软件支持就有openssl这个堪称是互联网基石的加密库,
另外像很多程序会使用的libsodium加密库也提供了从avx到avx-512的优化,而linux内核也支持使用avx和avx2指令集进行加解密计算,还会配合aes-ni这个专用的指令集。
实际上目前还有很多数字货币的计算过程支持使用avx指令集,不过这个应该是真的没有人会用了……
游戏近两三年的大作基本都开始启用avx指令集来进行计算了,一般在游戏中cpu负责除了图形以外的杂活,比如说计算各种npc的运动路径,计算各种动体的轨迹这样的杂活。
不过近两年也有厂商想让intel参与进游戏图形计算,甚至是当下热门的光线追踪运算,比如intel的光线追踪计算库embree就可以被整合进游戏中,目前已经有《坦克世界》 等游戏使用了它,
embree库高度依赖avx指令集,也对cpu的游戏性能提出了新的阐述方式:直接参与图形渲染。
总结:未来是avx的总的来说,avx目前还没有完全展露出它的价值,这也是软件优化缺位导致的。不过随着各路编译器的跟进、处理器迭代使得支持avx指令集的处理器普及,
相信我们的常用软件也会加入avx优化,比如说在图片处理时调用它。配合上已经展开应用的各种生产力应用,avx的前景非常广阔。
其它类似信息

推荐信息