begin

参考 [1] http://blog.youkuaiyun.com/stn_lcd/article/details/77483224
[2] http://blog.youkuaiyun.com/stn_lcd/article/details/77374468

计划 maxpool, slice用 指令实现

armv7 16个128位寄存器

1. 数据类型命名

type size xnum_t

  • type: float,int,uint
  • size:float- 32, int,uint - 8,16,32,64
  • num: size x num = 64/128

example: uint16x8_t,float32x4_t

2. 函数命名

v op_type
- op: 操作 add,dup,mul,mla
- dt:
- type: u8,u19,f32,s8(int8),s16(int16),s32
example: vmal_f32,vmlaq_f32,vmlal_u32,vaddw_s32,vmovn_u64,
3. 的

3. 例子

1. 初始值

float temp[4]={0.f};
float32x4_t temp=vdupq_n_f32(0.f);

_n: 因为 源数据有标量(0.f), 目标数据是向量
q: 因为目标数据32x4=128

2. 拷贝数组数据

float A_copy[4]=A[i:i+4]
float32x4_t data=vld1q_f32(A+i);

int B_copy[4]=B[i:i+4];
int32x4_t data=vld1q_s32(B+i);

ld1 : load one vector
q : 32x4=128 (f32,s32)

3. 加乘

// add
out=vaddq_s32(src1,src2);

// c
for i in range(4) temp[i]+=(data1[i]*data2[i])
// neon
temp=vmlaq_f32(temp,data1,data2)

4. gemm

这里写图片描述


算数操作 ===========================
add,sub
max,min
mul 乘, mla 乘加, mls 乘减
neg 负数
abs 绝对值

比较操作 ===========================
c表示 compare
ceq   = (equal)

cge  >= (greater equal)
cage ||>= (absolute value >=)

cle  <= (less equal)
cale

逻辑运算 =====================
and
orr  (or)

加载储存操作 ========================
ld1   从内存加载数据到1个向量中 (load ->ld)
ld2   从内存加载数据到2个向量中
ld3   从内存加载数据到3个向量中
ld4   从内存加载数据到4个向量中

特殊操作 ==========================
dup 复制值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值