NEON优化:性能优化常见问题QA
NEON优化:性能优化常见问题QA
NEON优化系列文章:
- NEON优化1:软件性能优化、降功耗怎么搞?link
- NEON优化2:ARM优化高频指令总结, link
- NEON优化3:矩阵转置的指令优化案例,link
- NEON优化4:floor/ceil函数的优化案例,link
- NEON优化5:log10函数的优化案例,link
- NEON优化6:关于交叉存取与反向交叉存取,link
- NEON优化7:性能优化经验总结,link
- NEON优化8:性能优化常见问题QA,link
本文将日常遇到的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旁边那列存在
黑点
,则表示代码间存在互锁。
NEON优化:性能优化常见问题QA相关推荐
- 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》
目录: Oracle数据完整性和锁机制 索引及优化之表分析 表分析.约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区 ...
- 高级SQL优化(三) 常用优化工具 ——《12年资深DBA教你Oracle开发与优化——性能优化部分》...
目录: Oracle数据完整性和锁机制 索引及优化之表分析 表分析.约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区 ...
- 海量数据库及分区4——《12年资深DBA教你Oracle开发与优化——性能优化部分》...
目录: Oracle数据完整性和锁机制 索引及优化之表分析 表分析.约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区 ...
- 硬件加速下webview切换闪屏_网页渲染性能优化 —— 性能优化下
博客 有更多精品文章哟. Composite 的优化 终于,我们到了像素管道的末尾.对于这一部分的优化策略,我们可以从为什么需要 Composited Layer(Graphics Layer)来入手 ...
- mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...
这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时 ...
- CPU CACHE优化 性能优化方法和技巧
转载来源:性能优化方法和技巧 系列目录 性能优化方法和技巧 性能优化的方法和技巧:概述 性能优化的方法和技巧:代码 性能优化的方法和技巧:工具 这是一个可以用一本书来讲的话题,用一系列博客来讲,可能会 ...
- m对比PSO,WPA,GWPA以及GWO四种优化算法的优化性能,优化目标函数为10个来自CEC2017的标准测试函数
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 灰狼优化算法(GWO),灵感来自于灰狼.GWO算法模拟了自然界灰狼的领导层级和狩猎机制.四种类型的灰 ...
- 首屏渲染优化性能优化
登录 首屏加载优化 webpack-bundle-analyzer 分析 优化前,加载时间15s,vendor.js 900k app.js 400k 背景图片900k 背景图片png改为jpg从40 ...
- SQL语句优化之like 的优化+性能优化
常量开头的like , 会利用index ,没问题 SQL> select * from test_like where object_name like 'AS%'; 开头和结尾都是%,对不起 ...
- android 内存优化 性能优化
最近做一个android 的应用程序 总是出现内存高 和cpu高的问题困扰了好多天. 下面为自己从网上总结的和自己找到的问题. 1. WebView 控件: 使用了WebView控件一定要注意清理缓存 ...
最新文章
- 网络分流器-网络分流器IP网络路由交换测试技术探讨
- 闲鱼单体应用Serverless化拆分实践
- es6第一章 continue
- iris数据_MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比...
- mysql的等号是什么意思_整理思维——等于等于等于?{MySQL条件等号的异常}
- FPGA数据传输模块设计
- 火狐导cookie文件没反应_效率指南|实操区分FireFox火狐的国内版和国际版
- C语言小白——数组与字符串
- arm放弃服务器芯片,ARM溃败:Applied Micro拆分ARM架构服务器芯片业务
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- java jpanel对齐_java – 如何使用GridBagLayout在JPanel中对齐组件中心?
- 雅诗兰黛公司将收购Dr. Jart+
- 计算机辅助项目管理课程方案,计算机辅助项目管理课程设计_大学论文.docx
- 宏碁传奇Young和宏碁传奇Go14选哪个好参数对比评测
- dockerspringboot-快速搭建FTP-Image图片服务器
- opencv--GrabCut
- WPS技巧之保护工作表实现允许部分单元格输入内容
- handsontable的核心方法
- html中背景固定,css背景固定样式background-attachment属性介绍
- pptv手机端html,2K超高清裸眼3D,PPTV手机即将开启新体验
热门文章
- 服务器上Kafka启动报错:error=‘Cannot allocate memory‘ (errno=12)
- linux三维动画软件,Blender2.9免费版下载
- GPU-CUDA-图形渲染分析
- 上网行为管理_上网行为管理如何预防以及屏蔽勒索病毒攻击
- 基于java的教学管理系统设计(含源文件)
- Leetcode 45. 跳跃游戏 II
- LyX使用小记之三 公式编辑
- 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)
- 什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2
- 人到中年——IT男择业感悟