NEON优化:性能优化常见问题QA

NEON优化系列文章:

  1. NEON优化1:软件性能优化、降功耗怎么搞?link
  2. NEON优化2:ARM优化高频指令总结, link
  3. NEON优化3:矩阵转置的指令优化案例,link
  4. NEON优化4:floor/ceil函数的优化案例,link
  5. NEON优化5:log10函数的优化案例,link
  6. NEON优化6:关于交叉存取与反向交叉存取,link
  7. NEON优化7:性能优化经验总结,link
  8. 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相关推荐

  1. 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》

    目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析.约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区 ...

  2. 高级SQL优化(三) 常用优化工具 ——《12年资深DBA教你Oracle开发与优化——性能优化部分》...

    目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析.约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区 ...

  3. 海量数据库及分区4——《12年资深DBA教你Oracle开发与优化——性能优化部分》...

    目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析.约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区 ...

  4. 硬件加速下webview切换闪屏_网页渲染性能优化 —— 性能优化下

    博客 有更多精品文章哟. Composite 的优化 终于,我们到了像素管道的末尾.对于这一部分的优化策略,我们可以从为什么需要 Composited Layer(Graphics Layer)来入手 ...

  5. mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...

    这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时 ...

  6. CPU CACHE优化 性能优化方法和技巧

    转载来源:性能优化方法和技巧 系列目录 性能优化方法和技巧 性能优化的方法和技巧:概述 性能优化的方法和技巧:代码 性能优化的方法和技巧:工具 这是一个可以用一本书来讲的话题,用一系列博客来讲,可能会 ...

  7. m对比PSO,WPA,GWPA以及GWO四种优化算法的优化性能,优化目标函数为10个来自CEC2017的标准测试函数

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 灰狼优化算法(GWO),灵感来自于灰狼.GWO算法模拟了自然界灰狼的领导层级和狩猎机制.四种类型的灰 ...

  8. 首屏渲染优化性能优化

    登录 首屏加载优化 webpack-bundle-analyzer 分析 优化前,加载时间15s,vendor.js 900k app.js 400k 背景图片900k 背景图片png改为jpg从40 ...

  9. SQL语句优化之like 的优化+性能优化

    常量开头的like , 会利用index ,没问题 SQL> select * from test_like where object_name like 'AS%'; 开头和结尾都是%,对不起 ...

  10. android 内存优化 性能优化

    最近做一个android 的应用程序 总是出现内存高 和cpu高的问题困扰了好多天. 下面为自己从网上总结的和自己找到的问题. 1. WebView 控件: 使用了WebView控件一定要注意清理缓存 ...

最新文章

  1. 网络分流器-网络分流器IP网络路由交换测试技术探讨
  2. 闲鱼单体应用Serverless化拆分实践
  3. es6第一章 continue
  4. iris数据_MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比...
  5. mysql的等号是什么意思_整理思维——等于等于等于?{MySQL条件等号的异常}
  6. FPGA数据传输模块设计
  7. 火狐导cookie文件没反应_效率指南|实操区分FireFox火狐的国内版和国际版
  8. C语言小白——数组与字符串
  9. arm放弃服务器芯片,ARM溃败:Applied Micro拆分ARM架构服务器芯片业务
  10. 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
  11. java jpanel对齐_java – 如何使用GridBagLayout在JPanel中对齐组件中心?
  12. 雅诗兰黛公司将收购Dr. Jart+
  13. 计算机辅助项目管理课程方案,计算机辅助项目管理课程设计_大学论文.docx
  14. 宏碁传奇Young和宏碁传奇Go14选哪个好参数对比评测
  15. dockerspringboot-快速搭建FTP-Image图片服务器
  16. opencv--GrabCut
  17. WPS技巧之保护工作表实现允许部分单元格输入内容
  18. handsontable的核心方法
  19. html中背景固定,css背景固定样式background-attachment属性介绍
  20. pptv手机端html,2K超高清裸眼3D,PPTV手机即将开启新体验

热门文章

  1. 服务器上Kafka启动报错:error=‘Cannot allocate memory‘ (errno=12)
  2. linux三维动画软件,Blender2.9免费版下载
  3. GPU-CUDA-图形渲染分析
  4. 上网行为管理_上网行为管理如何预防以及屏蔽勒索病毒攻击
  5. 基于java的教学管理系统设计(含源文件)
  6. Leetcode 45. 跳跃游戏 II
  7. LyX使用小记之三 公式编辑
  8. 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)
  9. 什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2
  10. 人到中年——IT男择业感悟