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

NEON优化:性能优化常见问题QANEON 优化 性能优化常见问题 QA 本文将日常遇到的 NEON 优化问题总结记录于此 CPU 主频 Mhz 和开销 MCPS 的关系是啥 主频 Mhz 并不直接代表运算速度 MCPS 主频 1 8GHz 1800MHz 也即理论最大 1800MCPS 主频是开销计算的理论天花板功耗与开销的关系 通常开销指的时间复杂度开销 多少 M 开销的变化 对应多少 mA 功耗的变化 由于涉及到硬件优化及具体器件性能 无法理论计算出来 软仿的 MIPS 数和硬仿的 MIPS 数差异以及 MCPS

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,存4×2的二维向量(注意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旁边那列存在黑点,则表示代码间存在互锁。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221137.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午6:49
下一篇 2026年3月17日 下午6:50


相关推荐

  • OHEM算法

    OHEM算法版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/u014380165/article/details/73148073…

    2022年5月7日
    60
  • 2021idea最新激活码【注册码】

    2021idea最新激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    55
  • html5 Audio标签

    html5 Audio标签javascript 动态创建 audio 标签在页面中添加 audio 元素的方法主要是两种 一种是在 html 中加入 audio 代码 可以加入一些属性 autoplay preload 等 这些在之前的文章已经说过了 另外一种是 js 动态加载进来的 代码如下 varaudio document creatElement audio audio src audio source ogg

    2026年3月19日
    2
  • Oracle客户端使用

    Oracle客户端使用Oracle 客户端使用 1 Oracle 客户端的安装及配置大部分时间 Oracle 数据库我们都是安装在服务器端 然后再在本地使用其他工具进行连接 例如 PL SQL NavicatPremi 等其他工具来进行连接 但是 Oracle 与 mysql 和 MSSQLServer 不一样 在服务器端安装好数据库后 Oracle 还需要在本地配置客户端 然后才能由其他管理工具连接 第一步 通过官网下载 Oracle 的客

    2026年3月26日
    2
  • 集合【7】— 遍历ArrayList集合三种方法「建议收藏」

    集合【7】— 遍历ArrayList集合三种方法「建议收藏」遍历ArrayList集合三种方法何为遍历?逐个获取集合中的每个元素1使用下标2使用forEach循环3使用迭代器Iteratorimportjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.junit.Test;/***遍历ArrayList集合元素*…

    2022年7月22日
    9
  • android经常使用的电话操作[通俗易懂]

    android经常使用的电话操作

    2022年1月27日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号