CPU指令级优化(1)

简介

Intel的CPU和ARM的CPU都有SIMD指令,可以完成CPU 指令级的并行化。这里边主要涉及CPU的汇编的知识和一些寄存器的知识。在一些耗时的SLAM优化迭代的场合,经常出现这样的指令的优化。SSE是Intel x86架构CPU的SIMD指令的简称,NEON是ARM CPU的SIMD指令的简称。

由于项目的需要,我以前的时候用过一段SSE指令,后来一段时间没有在接触过,最近在玩飞机,我们在DJI M100上加了ARM架构的TK1板,在移植slam的代码的时候,一些SSE的代码需要转换为NEON指令。因此这里做了一些两种SIMD指令的转化和比较。

寄存器的基础知识

一般computer中存在内存,内存就像仓库,我们不常用的东西分类放到仓库里边去。等到用的时候就会拿出来放在手边,手边的一些柜子书桌就是CPU中的寄存器。寄存器的位数和指令的位宽是一样的。我们说128位的指令位宽,那么对应的寄存器的位数就是128位,而CPU每次可以计算的数据的宽度最大也是128位。因为我们常用的数据达不到这样的宽度,这样每个指令周期就可以执行多个数据的计算。这就是所谓向量化计算。

汇编指令基础

我们的c语言中的加法减法(各种运算 加减乘除 与或非 等等)都有对应的指令,可以很容易转换,但是在赋值等操作中涉及load和store内存的操作,这是c语言中看不见的。

浮点计算 vs 整数计算

为什么要分开讲呢?因为在指令集中也是分开的,另外,由于浮点数占4个字节或者8个字节,而整数却可以分别占1,2,4个字节按照应用场合不同使用的不同,因此向量化加速也不同。因此一个指令最多完成4个浮点数计算

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值