问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么修补avx指令集

发布网友 发布时间:2022-05-07 20:38

我来回答

1个回答

热心网友 时间:2023-11-10 17:35

要搞明白AVX指令集的作用,首先要讲明白它是什么。定义很简单,它就是x86处理器上面的一套SIMD指令集,是经典的SSE系列指令集的直接继承者。那么SIMD又是什么呢?
在计算机刚刚出现的早期阶段,冯·诺伊曼式计算机每次输入一个指令只能够操作一对数据,比如说"+,a,b"可以让ab进行相加,这就是单指令流单数据流(Single Instruction Stream, Single Data Stream)。显然,在面对大量数据的时候,这种操作数据的方法效率较低,程序员想要让一次操作就对多组数据生效,怎么办呢?单指令流多数据流操作(Single Instruction Stream, Multiple Data Stream)的思路就被引入了,它让输入一次指令就操作多组数据变成了可能。

打开百度APP看高清图片
更直观的区别可以看上面的示意图。
上世纪*十年代,很多处理器开发商都意识到了SIMD的前景,他们开始往自家的处理器里加入SIMD支持。1996年,Intel发布了基于新版P55C架构(最早一版Pentium处理器为P5架构)的Pentium MMX系列处理器,其中引入了新的MMX指令集,开始支持SIMD。

从MMX到SSE,再到AVX
Pentium MMX系列处理器上新引入的MMX指令集开创了x86处理器支持SIMD操作的先河,该指令集定义了8个64-bit宽度的寄存器,每个寄存器的64-bit容量中可以放入八个8-bit长度的整数或四个16-bit长度整数或两个32-bit整数,CPU在识别到MMX指令集的新指令时会自动将寄存器中的数据进行分割计算,这样一来,单个指令就成功操作了多个数据,实现了SIMD。
但MMX毕竟太嫩,它实际上是通过复用CPU内部x87浮点单元的寄存器来实现SIMD的,所以与运行浮点运算的x87指令集有冲突,两者不能交叉使用,必须先进行切换。另外,由于上述的冲突,它只支持整数操作,在即将要到来的3D时代中显得有些不够用。
Intel当然很清楚MMX指令集的局限之处,而竞争对手新捣鼓出来的3DNow!指令集(1998年,AMD K6-2)已经支持了浮点SIMD运算,于是他们赶紧在经典的奔3处理器上面引入了新的SSE(Streaming SIMD Extensions)指令集,时间点为1999年2月份。
SSE指令集解决了MMX指令集身上存在的两大问题,通过引入新的独立寄存器解决了与浮点运算间的冲突问题,同时也就支持了浮点SIMD运算。当然它相对于MMX有很大加强,表现在它的寄存器宽度随着处理器架构的进步而达到了128-bit,这样一来一次SIMD指令能够操作更多的数据,效率上有大幅度的提高。不过初代SSE指令集的单个寄存器只支持32-bit长度的浮点数,还是有很大的局限性,这个问题在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的功耗就上去了。
现如今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的前景非常广阔。

热心网友 时间:2023-11-10 17:35

要搞明白AVX指令集的作用,首先要讲明白它是什么。定义很简单,它就是x86处理器上面的一套SIMD指令集,是经典的SSE系列指令集的直接继承者。那么SIMD又是什么呢?
在计算机刚刚出现的早期阶段,冯·诺伊曼式计算机每次输入一个指令只能够操作一对数据,比如说"+,a,b"可以让ab进行相加,这就是单指令流单数据流(Single Instruction Stream, Single Data Stream)。显然,在面对大量数据的时候,这种操作数据的方法效率较低,程序员想要让一次操作就对多组数据生效,怎么办呢?单指令流多数据流操作(Single Instruction Stream, Multiple Data Stream)的思路就被引入了,它让输入一次指令就操作多组数据变成了可能。

打开百度APP看高清图片
更直观的区别可以看上面的示意图。
上世纪*十年代,很多处理器开发商都意识到了SIMD的前景,他们开始往自家的处理器里加入SIMD支持。1996年,Intel发布了基于新版P55C架构(最早一版Pentium处理器为P5架构)的Pentium MMX系列处理器,其中引入了新的MMX指令集,开始支持SIMD。

从MMX到SSE,再到AVX
Pentium MMX系列处理器上新引入的MMX指令集开创了x86处理器支持SIMD操作的先河,该指令集定义了8个64-bit宽度的寄存器,每个寄存器的64-bit容量中可以放入八个8-bit长度的整数或四个16-bit长度整数或两个32-bit整数,CPU在识别到MMX指令集的新指令时会自动将寄存器中的数据进行分割计算,这样一来,单个指令就成功操作了多个数据,实现了SIMD。
但MMX毕竟太嫩,它实际上是通过复用CPU内部x87浮点单元的寄存器来实现SIMD的,所以与运行浮点运算的x87指令集有冲突,两者不能交叉使用,必须先进行切换。另外,由于上述的冲突,它只支持整数操作,在即将要到来的3D时代中显得有些不够用。
Intel当然很清楚MMX指令集的局限之处,而竞争对手新捣鼓出来的3DNow!指令集(1998年,AMD K6-2)已经支持了浮点SIMD运算,于是他们赶紧在经典的奔3处理器上面引入了新的SSE(Streaming SIMD Extensions)指令集,时间点为1999年2月份。
SSE指令集解决了MMX指令集身上存在的两大问题,通过引入新的独立寄存器解决了与浮点运算间的冲突问题,同时也就支持了浮点SIMD运算。当然它相对于MMX有很大加强,表现在它的寄存器宽度随着处理器架构的进步而达到了128-bit,这样一来一次SIMD指令能够操作更多的数据,效率上有大幅度的提高。不过初代SSE指令集的单个寄存器只支持32-bit长度的浮点数,还是有很大的局限性,这个问题在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的功耗就上去了。
现如今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的前景非常广阔。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iOS 16.1.1值得更新升级吗 ios16.1.1正式版建议更新吗 iOS 16.1.1修复了哪些问题 ios16.1.1值得更新吗?ios 16.1.1新增内容及更新建议 iPhone 12升级iOS 16.1.1之后好用吗 iOS 16.1.1更新内容介绍 iOS 16.1正式版新增了哪些新功能?iOS 16.1正式版值得升级吗? ios 16.1正式版解决了哪些问题和BUG ...森先生是他“最好的老师” 你喜欢这样的老师吗? ... 你喜欢怀特森这样老师吗?说说你的看法.250字 ubuntu怎么装libsodium 黄色怎么改成白丝? 青少年长高一天要摄取多少钙 青少年每天晨跑能长高吗? 青少年快速长高的方法 青少年一天中生长最快是什么时候 人一天长高多少 请问江津二卫校现在搬到重庆哪里了? 重庆卫校在哪里 重庆市沙坪坝区卫校有哪些? 从渝中区的大坪到涪陵卫校的交通方式、具体路线和票价是怎样的?(希望能详细一点) 重庆有没有好点的护理学校? 重庆市主城区有那些卫校?它们在那里?地址是好多哟? 重庆市大坪医院护理部 重庆医科大学卫生学校是不是国家正规学校,在什么位置 重庆医科大学卫生学校,现在位置 安装假牙(3颗)后4年,发现一颗原牙(固定假牙其中的一颗牙)坏死,我该怎么办? 假牙坏了,能修吗 医生介绍了许多种假牙的修复方式,哪种假牙更好呢?哪一种假牙的修复方式更适合呢? 内部控制手册-信息系统运行、维护、安全管理 白色连裤袜大人版 Centos x64环境下libsodium库无法正常编译。 怎样用手机打字用电脑打印出来资料 黄鳝的做法步骤图,腊肉炖黄鳝怎么做好吃 腊肉炖黄鳝怎么做/during 带圈的窗帘能用洗衣机洗吗? 带金属圈的大窗帘能在全自动机洗吗? 十进制数49怎么转化为二进制数 49转化为二进制过程 49转换为二进制是多少 十进制转二进制应该怎样算 十进制转十六进制,二进制的方法 学校考的化工总控工高级工能不能申报技能补贴 49十进制转换成16进制 2进制 请问化工总控工证件有什么用途? 求教:-49D转换成二进制补码是多少? 2013年考的化工总控工证,可以领补贴吗? 化工总控工证书有用吗 高级技工证、化工总控工 在焦化单位有用吗?算技术职称吗?能拿津贴吗、能拿多少、求高人解答 关于化工行业有什么有用的资格证书?拜托各位大神