性能优化-HVX架构简介

news2024/11/27 18:33:51

来自 「发表于知乎专栏《移动端算法优化》」

本文主要介绍Hexagon DSP的HVX技术,旨在通过简单的语言讲清HVX技术。

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:高性能(HPC)开发基础教程
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!

目录

一、Hexagon DSP

A. 高通 SOC 架构图

B. HVX 有哪些优势?

C. HVX 可以用来做什么?

二、DSP 硬件架构

A. HVX 架构 - 线程模型

B. HVX 架构 - 内存

C. HVX 架构 - SIMD 扩展

三、HVX软件架构

A. 远程过程调用(RPC)

B. FastRPC

四、总结


一、Hexagon DSP

Hexagon 是高通公司数字信号处理器 (DSP) 产品系列的品牌名称。

Hexagon 也称为 QDSP6,代表“第六代数字信号处理器”。 第一代 QDSP6 V1 在 2006 年便已经推向市场,距现在已经过去十几年。据高通称,Hexagon 架构旨在为各种应用提供低功耗的性能,用于高通骁龙芯片,面向智能手机、汽车、可穿戴设备和其他移动设备,也用于蜂窝电话网络的组件。

A. 高通 SOC 架构图

高通骁龙 SOC 架构图

本篇中主要以 COMPUTE DSP 为核心展开讲述。

  • 模块 DSP 主要包含主处理器(标量处理器)、协处理器 HVX(Hexagon Vector Extensions 矢量处理器)及其他处理核心。

高通几款主流芯片的 DSP 参数

B. HVX 有哪些优势?

  • 更强的数据并行处理能力,1024b 指令位宽,且有多个线程可并行,线程里面每个 packet 可同时并行执行四条指令。
  • 更低的功耗。
  • 更高的运行稳定性

Single DSP/HVX 680 (725MHz) VS Quad Krait CPU (2.65GHz)

C. HVX 可以用来做什么?

HVX 以其优越的特性,能完美支持多个领域,比如虚拟现实、增强现实、图像处理、视频处理、计算视觉等等等。

二、DSP 硬件架构

如上图所示,我们所开发的主要涉及三个硬件资源:

  • 主处理器(标量处理单元)
  • HVX 协处理器(矢量处理单元)
  • memory (VTCM 等)

A. HVX 架构 - 线程模型

  • 主处理器主要负责标量运算,有 4 个(目前新架构已调整至 6 个)硬件线程(每个拥有 4 路 VLIW,共享 L1/L2)。
  • 向量化运算由 2 个 HVX context 组成(目前新架构已调整至 4 个),分别会被多个标量线程控制。
  • 主处理器和 HVX 都是可以有多个软件线程,由 QURT 实时操作系统进行硬件线程选择及调度,开发者不可控。

B. HVX 架构 - 内存

  • Vector 单元可以直接访问 L2 cache
可以有效降低大块图像内存在 L1 上的平铺开销
提供单指令周期数据加载使用
可以支持全带宽
简化编程难度
  • L1/L2 由硬件保持同步
  • 提供 DDR 到 L2 cache 的流式预加载
  • Vector 单元支持灵活的加载存储操作
非对齐方式读写
基于字节的条件状态判断
  • (VTCM)向量化 TCM 支持
支持 vscatter/vgather 指令。
相对于 L2 cache,数据可以常驻,不存在数据刷出缓冲的问题。
支持 vmem 和 vmemu 指令直接访问。

C. HVX 架构 - SIMD 扩展

  • 强大的 SIMD 扩展支持
支持 1024b SIMD * 4 Vector-slot VLIW
4096 result bits/cycle
  • 支持 256 8x8 mpy,64 16x16 mpy

  • 拥有 32 个 1024b 寄存器 R0-R31,4个判断寄存器 P0-P3 。
  • 支持 8/16/32/64-bits 的定点运算。
  • 提供特殊的 ISA
滑窗滤波指令
LUT 指令
直方图指令等

三、HVX软件架构

上图为 HVX 软件架构,主要分以下几个部分:

  • User Application模块,host 端算法实现,主要作用是触发 FastRPC 调用,调度device 应用。
  • FastRPC 模块,远程调用模块,实现 host 与 device 之间的通信,把 device 端算法 so 库从 host 端动态加载到 device 设备,host 调用 device 时会触发 FastRPC 调用,FastRPC 调用在 device 端会创建一个任务进程,完成 host 与 device 之间的调用过程。host 端会阻塞等待 device 端执行完成,属于阻塞等待。
  • User Application (Hexagon SO) 模块,device 端算法实现,通过编译会生成一个 Hexagon so 文件。主要用于 device 端算法运行,同时还包含一系列辅助 API 接口等。
  • libdspCV_skel.so,这块主要是 dspcv 模块,在 Hexagon SDK 中的一个库文件,用来控制 device 端部分资源。例如时钟控制、多线程等功能封装。
  • QuRT RTOS 模块,QuRT 的作用,主要负责系统资源维护,使用最多的主要是线程调用及 VTCM 等资源,根据线程的优先级将软件线程调度到硬件线程上,由这个 QuRT 操作系统来调度。
  • CDSPPM & DCVS V2 模块,功率管理模块,主要提供时钟带宽的投票,用来管理时钟、power。
  • Hardware thread,HVX context,最底层的硬件线程和HVX句柄。

A. 远程过程调用(RPC)

在介绍 HVX 动态加载过程之前先简单介绍远程调用的过程。远程调用,简单的理解就是一个节点请求另一个节点提供的服务。一个节点调用另一个节点的函数。

不在同一地址空间中,不能像本地调用一样直接调用函数,本地调用参数传递直接给到寄存器或者是压栈,传给被调用函数。但是远程调用不能这样直接调用。

远程调用时,首先客户端需要告诉服务器,需要调用函数,这里函数和进程 ID 存在一个映射,客户端远程调用的时候,需要查一下函数,找到对应的 ID,然后执行函数的代码。

客户端需要把本地参数传给远程函数,本地调用的过程中,直接压栈即可,但是在远程调用过程中不在同一个内存里,无法直接传递函数的参数,因此需要客户端将要调用的函数名以及参数打包,然后通过网络发送到服务器。

服务器解包数据,得到调用的函数以及参数,运行函数,并将结果打包,通过网络发送到客户端。

客户端解包数据,得到函数结果。

B. FastRPC

跟 RPC 的调用类似,通常算法会编译成两个库,一个在 host 端运行的 Stub 库,一个在 device 端运行的 Skel 库。两个库都会存放在设备的 host 文件系统中,在每个 host 端的线程中,host端第一次调用 device 端应用时, FastRPC 会将 device 端的 Skel 库动态加载到 device 端(这个操作会有额外耗时,所以初始化操作可异步进行)。然后,device 端的会根据 domain 信息进行应用匹配,并调用相应的算法,host 端会阻塞等待 FastRPC 调用结束。FastRPC 函数及结构体接口由 IDL 文件来映射(关于IDL 文件,将在后续内容进行讨论)。

host 端与 device 端数据零拷贝操作由高通基于 ION/DMA_BUF 实现,虚实转换由 SMMU 来进行映射完成,降低了开发者的使用难度。

FastRPC架构

FastRPC 用来作为两个处理器 host 和 device 的通信,每次触发 FastRPC 需要 0.5~2ms 的额外开销,尽量少触发 FastRPC 调用,函数调用尽量合并在 device 端去调用。

四、总结

通过前面的介绍我们了解到了高通 HVX 硬件架构、软件架构以及整个程序运行时的动态加载过程,这些都是常用异构调用的流程,需要仔细理清其中的调用逻辑及过程。

期望大家都能有所收获。

🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 + antd 封装动态表单组件(一)

前置条件: vue版本 v3.3.11 ant-design-vue版本 v4.1.1 创建动态组件配置文件config.js import { Input, Textarea, InputNumber, Select, RadioGroup, CheckboxGroup, DatePicker } from ant-design-vue;// 表单域组件类型 export const componentsMap {Text: …

编译poco库出现的问题及其解决办法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 使用vs2015编译poco库出现问题:error C3688: invalid literal suffix ‘I64_FMT’; literal operator or literal operator template ‘opera…

大模型:我也会自监督学习~

前言 当下大模型的能力已经很强了,但是将来我们想要的是能力更强的大模型,其最好能够处理各种复杂问题也即强对齐模型。 之前大模型训练的监督信号主要来源于人类反馈,但是如果想要训练一个强对齐模型必然就需要一个对应的强监督信号&#…

第二篇【传奇开心果系列】Vant 开发移动应用:开发常见页面

传奇开心果博文系列 Vant of Vue 开发移动应用示例系列博文博文目录一、常见页面的重要作用二、常见页面介绍三、分别示例代码四、常见页面样式示例代码五、主要知识点总结 Vant of Vue 开发移动应用示例系列博文 博文目录 一、常见页面的重要作用 常见页面在移动应用中扮演…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员&#xf…

算法第二十一天-丑数

丑数 题目要求 解题思路 首先判断数字是不是为0或者负数&#xff0c;两者均不可能成为丑数&#xff1b; 之后对n进行不断整除&#xff0c;直到无法除尽为止。 简单判断最后的数是不是1即可。 代码 class Solution:def isUgly(self, n: int) -> bool:if n<0:return Fa…

linux perf工具使用

参考文章Linux性能调优之perf使用方法_perf交叉编译-CSDN博客 perf是一款Linux性能分析工具。比如打流性能优化的时候&#xff0c;就能够看到是哪些函数消耗的cpu高 那么linux如何编译perf工具呢&#xff1f; perf工具编译 进入perf目录下linux-3.16/tools/perf make ARCH…

线程状态转换

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程⛺️稳中求进&#xff0c;晒太阳 程状态转换 假设有线程Thread t 情况1 new-->RUNNABLE 当调用t.start()方法时&#xff0c;由new ->RUNNABLE 情况2 RUNNABLE WAITING t…

Spark On Hive配置测试及分布式SQL ThriftServer配置

文章目录 Spark On Hive的原理及配置配置步骤在代码中集成Spark On Hive Spark分布式SQL执行原理及配置配置步骤在代码中集成Spark JDBC ThriftServer 总结 Spark On Hive的原理及配置 Spark本身是一个执行引擎&#xff0c;而没有管理metadate的能力&#xff0c;当我们在执行S…

Redis原理篇(SkipList)

一.概述 本质是双端链表&#xff0c;只不过在正向遍历时可以不一个一个遍历&#xff0c;而是可以跳着遍历。 怎么实现的呢&#xff0c;下面是SkipList源码 二.源码 1. zskiplist 意义&#xff1a;跳表 zskiplist里面有头指针和尾指针&#xff0c;节点数量&#xff0c;最大…

Python自动化测试【selenium面试题】

一、selenium中如何判断元素是否存在&#xff1f; expected_conditions模块提供了16种判断方法&#xff0c;以下方法是判断元素存在DOM中&#xff1a; presence_of_element_located """ An expectation for checking that an element is present on the DOM of…

第二百七十八回

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

免费的网站站群软件,批量管理不同网站程序

在网站运营的过程中&#xff0c;站群软件成为提高效率、管理多个网站的得力助手。本文将专心分享三款卓越的站群软件&#xff0c;其中特别推荐147SEO软件&#xff0c;它不仅能够批量管理网站&#xff0c;还能自动更新原创文章&#xff0c;并主动推送各大搜索引擎。不论您运营何…

logstack 日志技术栈-02-ELK 的缺点?loki 更轻量的解决方案?

ELK/EFK日志系统 如果今天谈论到要部署一套日志系统&#xff0c;相信用户首先会想到的就是经典的ELK架构&#xff0c;或者现在被称为Elastic Stack。 Elastic Stack架构为Elasticsearch Logstash Kibana Beats的组合&#xff0c;其中&#xff0c;Beats负责日志的采集&…

51单片机中断

1、什么是中断&#xff1f; CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b; CPU暂时中断当前的工作&#xff0c;转去处理事件B&#xff08;中断响应和中断服务&#xff09;&#xff1b; 待CPU将事件B处理完…

解决一个mysql的更新属性长度问题

需求背景&#xff1a; 线上有一个 platform属性&#xff0c;原有长度为 varchar(10)&#xff0c;但是突然需要填入一个11位长度的值&#xff1b;而偏偏这个属性在线上100张表中有50张都存在&#xff0c;并且名字各式各样&#xff0c;庆幸都包含 platform&#xff1b;例如 platf…

【计算机网络】Socket的TCP_NODELAY选项与Nagle算法

TCP_NODELAY是一个套接字选项&#xff0c;用于控制TCP套接字的延迟行为。当TCP_NODELAY选项被启用时&#xff0c;即设置为true&#xff0c;就会禁用Nagle算法&#xff0c;从而实现TCP套接字的无延迟传输。这意味着每次发送数据时都会立即发送&#xff0c;不会等待缓冲区的填充或…

PostgreSQL命令大全

文章目录 连接与退出数据库操作表操作外键约束视图操作存储过程与函数权限管理事务管理查询优化与分析数据类型转换分区表操作复制与备份恢复 PostgreSQL是一个功能强大的开源关系型数据库管理系统&#xff0c;以下是一些基本且常用的命令按功能分类&#xff1a; 连接与退出 连…

【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

文章目录 一.flink为什么自己管理内存1. 处理大数据时JVM内存管理的问题2. flink主动管理内存逻辑2.1. Flink内存管理方面2.2. 序列化、反序列化说明 3. Flink主动管理内存的好处 二. Flink内存模型1. 堆内存2. 非堆内存2.1. 托管内存2.2.直接内存2.3. JVM特定内存 本节从整体使…

【每日一题】2788. 按分隔符拆分字符串-2024.1.20

题目&#xff1a; 2788. 按分隔符拆分字符串 给你一个字符串数组 words 和一个字符 separator &#xff0c;请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组&#xff0c;不包括空字符串 。 注意 separator 用于决定拆分发生的位…