性能优化-HVX架构简介

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

本文主要介绍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.mzph.cn/news/636654.shtml

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

相关文章

Elasticsearch 入门向使用

文章目录 ElasticSearch简介倒排索引安装(单节点)分词器kibana与Mysql概念上的对比索引库CRUD文档CRUDDSL查询相关性算分Function Score Query自定义算分Boolean Query 搜索结果处理排序分页高亮 数据聚合 aggregations自动补全数据同步集群 ElasticSearch 简介 Elasticsearc…

轻松掌握AI辅助设计微信红包封面并快速过审

【无矶之谈】轻松使用AI设计微信红包封面/动态封面并快速过审 关注本公众号梦无矶测开实录,2024年1月21日之后关注最新的文章,后台回复封面红包,即可免费领取本号专属微信红包封面。(目前我过审的有五个封面,其中一个…

vue项目执行依赖安装(npm i或npm install )报ls-remote -h -t异常

从git拉取的vue项目执行依赖安装时一直报错, 报错如下图:首先,查看了node版本、npm配置的镜像地址均没找到解决办法。 在命令行中直接输入git发现提示于是从网上搜到了一个博文https://blog.csdn.net/weixin_49159364/article/details/118198…

仰暮计划|“每天清晨五六点钟,爷爷早早起床去田地里采摘蔬菜”

★ 我的奶奶出生于1955年,在我眼里是十分伟大的女性。身处在有六个兄弟姐妹的大家庭里,她从小就肩负起了照顾家人的重任。充满朝气的她,在上学和照顾弟弟妹妹之间穿梭。然而,在她将要上小学五年级的时候,文化大革命的爆…

[绍棠] docxtemplater实现纯前端导出word

1.下载需要的依赖 2.util文件夹下创建doc.js文件 doc.js import docxtemplater from docxtemplater import PizZip from pizzip import JSZipUtils from jszip-utils import { saveAs } from file-saver import ImageModule from "docxtemplater-image-module-free"…

力扣hot100 最长有效括号 动态规划

Problem: 32. 最长有效括号 文章目录 思路Code 思路 👨‍🏫 参考题解 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( n ) O(n) O(n) class Solution {public int longestValidParentheses(String s){int n s.length();…

Python武器库开发-武器库篇之Fofa-API使用(四十六)

Python武器库开发-武器库篇之Fofa-API使用(四十六) FOFA(FOcus Observation of Futures Assets)是一款专业的网络资产搜索引擎,旨在帮助企业发现和评估网络上的潜在安全风险。FOFA的基本原理是通过搜索引擎的方式,按照关键词对互…

【Redis】更改redis中的value值

今天继续进步一点点~~ 背景:今天有个前端的同事问我,能不能在Redis中他本人登录公众号的 sessionID 加上一列openID 于是我上网查了一堆在Redis里面的命令,以及不同的客户端怎么输入命令,但是后来问了下同事,他就给我…

PDshell16逆向PostgreSQL 工程显示字段comment备注

现状:当刚逆向成功的表结构是没有原来表结构中的,comment备注如下 然后pd逆向工程的sql已经返回了这个备注的含义 解决方案: 1、设置显示注释列 tools——Display Preferences…如下 勾选-按照下面得方式勾选这三个 复制这里的VBS脚本&a…

OpenVINS学习7——评估工具的简单使用

前言 OpenVINS自带评估工具,这里记录一下使用方法,我是以VIRAL数据集为例,但是目前仍然有问题,发现误差很大,我还没搞明白哪里出了问题。 工具介绍 主要参考 https://docs.openvins.com/eval-error.html https://bl…

Windows和Linux访问不了GitHub的解决方法

一、Windows访问不了GitHub 问题描述 使用Windows访问GitHub时,出现如下情况,显示无法访问。 解决方案: 打开域名查询网站:https://tool.chinaz.com/dns 输入GitHub的域名,点击立即检测。 出现如下页面&#xff0c…

实验五 PLSQL编程

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

git设置代理

git设置代理 git config --global http.proxy 127.0.0.1:7890git查询代理 git config --global http.proxy git取消代理 git config --global --unset http.proxy

【核心复现】基于改进鲸鱼优化算法的微网系统能量优化管理matlab

目录 一、主要内容 1 冷热电联供型微网系统 2 长短期记忆网络(Long Short Term Memory, LSTM) 3 改进鲸鱼优化算法 二、部分代码 三、运行结果 四、下载链接 一、主要内容 该程序为《基于改进鲸鱼优化算法的微网系统能量优化管理》matlab代码,主要内容如下&…

事件驱动架构

请求驱动 服务注册,服务发现,虽然调用地址隐藏了,但是调用stub必须相同。 rpc通信,远程调用。 生产者和消费者要有相同的stub存根。 消费者和生产者的调用接口是耦合的。 事件驱动 核心:上下游不进行通信 中间通过M…

Ubuntu安装最新版Docker和Docker-Compose

ubuntu环境搭建专栏🔗点击跳转 Ubuntu系统环境搭建(十)——Ubuntu安装最新版Docker和Docker Compose 文章目录 Ubuntu系统环境搭建(十)——Ubuntu安装最新版Docker和Docker Compose1.添加Docker库1.1 安装必要的证书并…

实验六 模式对象管理与安全管理

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

Qt5.15.2中加入图片资源

系列文章目录 文章目录 系列文章目录前言一、加入图片资源二、代码 前言 以前用的Qt5.15.2之前的版本,QtCreator默认的工程文件是*.pro,现在用5.15.2创建工程默认的工程文件是CMameList.txt,当然在创建项目时,仍然可以使用pro工程文件用QtCr…

softmax回实战

1.数据集 MNIST数据集 (LeCun et al., 1998) 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集 (Xiao et al., 2017)。 import torch import torchvision from torch.utils import data from torchvisi…

JVM篇--垃圾回收高频面试题

JVM垃圾回收 1 简单说下Java垃圾回收机制? 首先在java运行过程中,其实程序员并不需要去显示的调用程序来释放对象的内存,而是由虚拟机来完成的,具体来看是在jvm中有个垃圾回收线程,这个线程是个守护线程,…