CPU性能优化:simd和neon

    一条指令一般由操作码和操作数构成,操作的数据和数量可能不一样。如加法,2个操作数,加数1和加数2.当译码电路译码成功并开始执行ADD指令时,CPU的控制单元会先到内存中取数据,将操作数送到算数逻辑单元中,两种取数据的方法,1 先取第一个操作数,然后访问内存读取第二个操作数。最后才能进行求和计算,这种数据操作一般被称为单指令数据。第二种方法是几个部件同时访问内存,一次性读取所有的操作数,这种操作类型成为单指令多数据。毫无疑问,SIMD通过单指令多数据运算,帮助CPU实现了并行访问,SIMD型的CPU执行效率更高。

    计算机对图像、音频等数据处理需求大增,SIMD特别适合这种计算。

    多媒体扩展MMX指令集是X86处理器为音视频,图像处理专门设计的57条SIMD多媒体指令集,

MMX将64位寄存器当作2个32位或者8个8位寄存器来使用。这些寄存器并不是为MMX单独设计的,而是借用浮点运算的寄存器进行计算的。

    因此MMX和浮点运算不能同时工作。

    SSE 指令集是Intel 奔腾3处理器中对MMX进行扩展的指令集,SSE和MMX相比,不再占用浮点寄存器,有自己的128位寄存器。后来avx将SSE指令集扩展到了256位。支持矢量计算,并全面兼容SSE以及后续扩展的指令集SSE2/3/4。几年之后,AMD也不甘示弱,发布了3DNow,和SSE5指令集,3DNow,指令集基于intel的MMX指令集进行了扩展,不仅支持了整形计算,还支持了浮点型。

   FMA指令集,基于AVX指令集进行扩展,融合了乘法和加法,可以通过单一指令执行多次重复计算,简化了程序,比AVX更加高效,适用于渲染,绘图,立体音响等一些更为复杂的多媒体计算,现在intel和AMD的芯片都支持FMA指令集。

   对着音乐播放,拍照,直播,短视频多媒体需求在移动设备上的爆发,ARM架构的处理器也开始支持和扩展SIMD指令集,如图所示,neon是适用于Cortex-A和Cortex-R5系列处理器的一种128位的SIMD扩展指令集。早期的浮点运算已经不能满足需求,ARM从ARM V7指令集开始引入neon多媒体SIMD指令,通过向量化运算,更好的支持音视频编码器,计算机视觉AR/VR。游戏渲染,机器学习,深度学习等需要大量复杂计算的的应用场景。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值