当前位置:网站首页>NEON优化:性能优化常见问题QA
NEON优化:性能优化常见问题QA
2022-07-06 17:22:00 【来知晓】
NEON优化:性能优化常见问题QA
NEON优化系列文章:
本文将日常遇到的NEON优化问题总结记录于此。
CPU主频Mhz和开销MCPS的关系是啥?
- 主频Mhz并不直接代表运算速度MCPS
- 主频:1.8GHz=1800MHz,也即理论最大1800MCPS,主频是开销计算的理论天花板
功耗与开销的关系?
- 通常开销指的时间复杂度开销,多少M开销的变化,对应多少mA功耗的变化,由于涉及到硬件优化及具体器件性能,无法理论计算出来。
软仿的MIPS数和硬仿的MIPS数差异以及MCPS?
- CPU情况不一样,软仿最多CPI为1,也即一般MCPS会比MIPS大。但手机的芯片比较牛,能做到CPI<1.
armv7/armv8a,arm64-v7/arm64-v8a的区别?Cortex-A9/A8/A53/A55的区别?
首先,armv7/v8是Architecture架构,cortex是具体的processor处理器,架构几年甚至十年一更新,处理器年年都翻新。
其次,对armv7-A/armv8-A/armv8-M分类划定
总体
- v7/v8表示第几代
- -A/-M/-R表示Application/Microcontroller/Real-time,适配手机电脑、嵌入式设备等不同平台
- v8-a,2011年发布,armv8-a后的a跟cortex-a是对应一致的
armv8-a架构
- 有32也有64位,32位processor:cortex-a32;64位processor:cortex-a34/cortex-a53;
armv7-a架构
- 只有32位,对应processor:cortex-a5/a7/…/a17
更多细节见:wiki
什么是MCPS?
- MCPS,每秒百万次周期,衡量时间开销的指标
- MIPS,每秒百万条指令数,一般一条指令对应一个或多个计算周期,故通常MIPS比MCPS数据小
向量线和N元素结构是什么意思?
- 向量线数,相当于1个NEON寄存器里有多少个对应基础数据类型值(int16/uint32/float32等)。
- n元素结构,相当于n个NEON寄存器。
NEON指令中有的加q,有的不加q,有何区别?
- 操作符后的q,如vmulq, 表示128位满位宽寄存器运算
- v后的q,如vqrdmulh,q表示饱和运算,溢位后,为自动限制在数据类型的最大范围内。
- rdmul表示向量与标量进行加倍乘运算的具体操作意义。
- hq表示高位饱和,lq表示低位饱和。
NEON中的正常指令、宽指令、窄指令、饱和指令、长指令分别指什么?
- 正常指令:生成大小相同且类型通常与操作数向量相同到结果向量
- 长指令:对双字向量操作数执行运算,生产四字向量到结果。所生成的元素一般是操作数元素宽度到两倍,并属于同一类型。L标记,如VMOVL。
- 宽指令:一个双字向量操作数和一个四字向量操作数执行运算,生成四字向量结果。W标记,如VADDW。
- 窄指令:四字向量操作数执行运算,并生成双字向量结果,所生成的元素一般是操作数元素宽度的一半。N标记,如VMOVN。
- 饱和指令:当超过数据类型指定到范围则自动限制在该范围内。Q标记,如VQSHRUN
NEON变量的命名规则是什么?
没有统一的规则,如果想要规范些,可采用以下命名方式。
变量类型 变量名:
vTNnVar
解释
- v,表示向量运算
- T,表示变量的类型,分别用s表示有符号整型,u表示无符号整型,f表示浮点
- N,表示变量元素所占位宽,如s32,u16,f32中的数字即N,表示元素占位
- n,表示向量线元素结构,如x4,x4x2
- Var,表示变量自定义的名字
举例
定义:int16x4x2_t vs16x4x2Tmp;
解释:元素为int16,存4x2的二维向量(注意2是行,4是列,从后往前套壳),即val[0]/val[1]分别存4个向量线,变量名为tmp
详细:
vs16x4x2Tmp变量名的v表示vector,s16表示16位有符号数,x4表示4个向量线,x2表示2个元素,Tmp为实际变量名。
两个元素分别是vs16x4x2Tmp.val[0]和vs16x4x2Tmp.val[1],其类型就是int16x4,4个向量线分别存着四个数据,且是从连续内存交叉读取写入到vs16x4x2Tmp中的。
比如:
short tmp[8] = { 0 1 2 3 4 5 6 7}; vs16x4x2Tmp = vld2q_s16(tmp); // 得到的结果是 vs16x4x2Tmp.val[0]: 0 2 4 6 vs16x4x2Tmp.val[1]: 1 3 5 7
定义:float32x2_t vf32x2Tmp;
解释:元素为float32,存两个元素的一维向量,变量名为tmp
NEON变量中的.val[0]/.val[1]表示什么?
- 代表数据类型对应的向量线结构,分别索引寄存器所对应的数值。
查看反汇编代码时,如何判断代码是否存在互锁?
- 在rvds中,查看反汇编代码,选中一段原始C代码,会自动对应相应的反汇编代码,如果CPI旁边那列存在
黑点
,则表示代码间存在互锁。
边栏推荐
- Openjudge noi 1.7 08: character substitution
- 【批处理DOS-CMD命令-汇总和小结】-字符串搜索、查找、筛选命令(find、findstr),Find和findstr的区别和辨析
- pyflink的安装和测试
- Attention SLAM:一種從人類注意中學習的視覺單目SLAM
- 随时随地查看远程试验数据与记录——IPEhub2与IPEmotion APP
- .class文件的字节码结构
- C9 colleges and universities, doctoral students make a statement of nature!
- Part IV: STM32 interrupt control programming
- Address information parsing in one line of code
- from . cv2 import * ImportError: libGL. so. 1: cannot open shared object file: No such file or direc
猜你喜欢
[Niuke] [noip2015] jumping stone
[hfctf2020]babyupload session parsing engine
Dynamic planning idea "from getting started to giving up"
[HFCTF2020]BabyUpload session解析引擎
Data type of pytorch tensor
【案例分享】网络环路检测基本功能配置
[Niuke classic question 01] bit operation
Periodic flash screen failure of Dell notebook
Build your own website (17)
Trace tool for MySQL further implementation plan
随机推荐
Eventbus source code analysis
深入探索编译插桩技术(四、ASM 探秘)
STM32开发资料链接分享
Windows installation mysql8 (5 minutes)
【批處理DOS-CMD命令-匯總和小結】-字符串搜索、查找、篩選命令(find、findstr),Find和findstr的區別和辨析
Trace tool for MySQL further implementation plan
mongodb客户端操作(MongoRepository)
Provincial and urban level three coordinate boundary data CSV to JSON
Rainstorm effect in levels - ue5
. Bytecode structure of class file
第七篇,STM32串口通信编程
筑梦数字时代,城链科技战略峰会西安站顺利落幕
Part V: STM32 system timer and general timer programming
[force buckle]41 Missing first positive number
Come on, don't spread it out. Fashion cloud secretly takes you to collect "cloud" wool, and then secretly builds a personal website to be the king of scrolls, hehe
Explain in detail the matrix normalization function normalize() of OpenCV [norm or value range of the scoped matrix (normalization)], and attach norm_ Example code in the case of minmax
【批处理DOS-CMD命令-汇总和小结】-字符串搜索、查找、筛选命令(find、findstr),Find和findstr的区别和辨析
Levels - UE5中的暴雨效果
第六篇,STM32脉冲宽度调制(PWM)编程
How do novices get started and learn PostgreSQL?