SIMD指令学习笔记

转载自:https://www.cnblogs.com/xidian-wws/p/11023762.html
https://blog.csdn.net/lidonghat/article/details/70244288
https://blog.csdn.net/lb920519/article/details/80065102?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

  • SIMD简介
    SIMD,即Single Instruction, Multiple Data,即单指令多数据运算,一条指令操作多个数据,其目的就在于帮助CPU实现数据并行,提高运算效率,是CPU基本指令集的扩展。
    SIMD主要用于提供fine grain parallelism,即小碎数据的并行操作.比如说图像处理,图像的数据常用的数据类型是RGB565, RGBA8888, YUV422等格式,这些格式的数据特点是一个像素点的一个分量总是用小于等于8bit的数据表示的.如果使用传统的处理器做计算,虽然处理器的寄存器是32位或是64位的,处理这些数据确只能用于他们的低8位,似乎有点浪费.如果把64位寄存器拆成8个8位寄存器就能同时完成8个操作,计算效率提升了8倍。SIMD指令的初衷就是这样的,只不过后来慢慢cover的功能越来越多。

    SIMD的思想在不同平台架构下进行了实现
    X86:SSE指令
    ARM:NEON指令
    MIPS:MSA

    不同平台架构下为实现SIMD思想也添加了不同的硬件支持(专用寄存器):
    X86:目前支持128bit寄存器,256bit,甚至是512bit
    ARM:128bit
    MIPS:128bit

  • 为何SIMD可以更加快速的进行矩阵运算
    一般流程:每次从内存加载一个数据寄存器进行运算
    SIMD:一次加载多个数据到专用寄存器,则一条指令就能进行多个数据的加乘运算

  • SIMD指令发展历史
    在这里插入图片描述
    图中可以看出,SSE首先就是有了属于自己的8个128位长的寄存器,即32x4,可以支持4个单精度浮点数同时计算,这8个寄存器称为XMM0~XMM7, SSE指令要求数据是16byte对齐的.SSE2则进一步支持双精度浮点数,由于寄存器长度没有变长,所以只能支持2个双精度浮点计算或是4个单精度浮点计算.另外,它在这组寄存器上实现了整型计算,从而代替了MMX.SSE3支持一些更加复杂的算术计算.SSE4增加了更多指令,并且在数据搬移上下了一番工夫,支持不对齐的数据搬移,增加了super shuffle引擎。

  • MMX
    MMX是由57条指令组成的SIMD多媒体指令集,MMX将64位寄存当作2个32位或8个8位寄存器来用,只能处理整形计算,这样的64位寄存器有8组,分别命名为MM0~MM7.这些寄存器不是为MMX单独设置的,而是借用的FPU的寄存器,占用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值