性能优化-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.rhkb.cn/news/244399.html

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

相关文章

数据管理平台Splunk Enterprise本地部署并结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步,结合cpolar内网穿透工具实现随时随地在任意浏览器,远程访问在本地…

【书生·浦语大模型实战】“PDF阅读小助手”学习笔记

1 模型部署 在InternStudio平台中选择A100 (1/4)的配置,镜像选择Cuda11.7-conda,可以选择已有的开发机langchain; 1.1 创建工作空间 mkdir /root/pdf_project1.2 Clone项目 git clone https://gitee.com/tcexeexe/pdf-reading-assistant.…

HCIA——23DNS层次域名空间、域名服务器、域名解析的原理的选择、解答

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

项目解决方案: 视频融合(实时监控视频和三维建模进行融合)设计方案

目 录 一、需求描述 1、视频接入和控制要求 2、视频播放需求 3、提供其他应用的调用 二、方案设计 (一)系统设计图 (二)产品实现方案 三、产品和功能描述 (一)总体描述 &#xf…

QuestDB时序数据库快速入门

简介 QuestDB是一个开源的高性能时序数据库,专门用于处理时间序列相关的数据存储与查询; QuestDB使用列式存储模型。数据存储在表中,每列存储在其自己的文件和其自己的本机格式中。新数据被附加到每列的底部,以便能够按照与摄取…

uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效问题(高德地图)

踩坑uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效问题_uniapp真机调试高德地图正常 打包apk高德地图就不加载-CSDN博客 问题: 目前两个项目,一个项目是从另一个项目里面分割出来的一整套…

10个常考的前端手写题,你全都会吗?(下)

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 今天接着上篇再来分享一下10个常见的JavaScript手写功能。 目录 1.实现继承 ES5继…

【快刊录用】15天录用!含中科院1区TOP-4区,投必中!

2024年1月13日-20241月19日 进展喜讯 经核实,由我处Unionpub学术推荐的论文中,新增2篇论文录用、2篇上线见刊、5篇数据库检索: 录用通知 FA20977 FA20479 — 见刊通知 FA20245 FA20885 — 检索通知 FA20924 FA20799 FA20790 FA2…

【IEEE会议征稿】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议(ICSP 2024) 2024年第八届智能计算与信号处理国际学术会议(ICSP 2024)将在西安举行, 会期是2024年4月19-21日, 为期三天, 会议由西安科技大学主办。 欢迎参会&…

4G物联网LED智慧路灯杆显示屏产品介绍

4GLED显示屏是一种具有4G网络连接功能的LED显示屏。它可以通过4G网络连接到互联网,实现远程管理和控制,方便进行内容更新和管理。同时,4GLED显示屏具有高亮度、高清晰度和高对比度的特点,可以提供清晰明亮的图像和视频展示效果。它…

【蓝桥杯EDA设计与开发】立创开源社区分享的关于蓝桥被EDA真题与仿真题的项目分析

立创开源社区内有几个项目分享了往年 EDA 设计题目与仿真题,对此展开了学习。 【本人非科班出身,以下对项目的学习仅在我的眼界范围内发表意见,如有错误,请指正。】 项目一 来源:第十四届蓝桥杯EDA赛模拟题一 - 嘉立…

C++笔记(二)

函数的默认参数 如果我们自己传入数据,就用自己的数据,如果没有,就用默认值 语法: 返回值类型 函数名(形参默认值){} int func(int a,int b20,int c30){} …

软考复习之多媒体篇

常用的计算公式 数据传输率(单位:b/s) 未压缩的数据传输率 采样频率(Hz)* 量化位数(位)* 声道数 波形声音经过数字化后的信息数据量(单位:字节) 声音信号数据量 数据传输率 * …

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 此自动化脚本将帮助你使用 Python 中的 Android 调试桥 (ADB) 自动化你的智能手机。下面我将展示如何自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 您可以了解有关 ADB 的更多信息,…

Qt拖拽事件简单实现

1.相关说明 重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数)&#xff0c;可以将本地图片拖拽到label标签中 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QDragEnterEvent>…

文本文件的编码详解

今天在程序调试时&#xff0c;程序中用到一个config.json文件&#xff0c;是UTF-8的格式&#xff0c;这是在win11的nodtepad中显示的编码格式&#xff0c;但复制到win7中使用时&#xff0c;出现一个奇特的现象&#xff0c;报文件格式错误&#xff0c;说出现一个特殊字符不识别&…

ArkUI新能力,助力应用开发更便捷

ArkUI是一套构建分布式应用的声明式UI开发框架。它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理&#xff0c;以及实时界面预览等相关能力&#xff0c;帮助您提升应用开发效率&#xff0c;并能在多种设备上实现生动而流畅的用户体验。随着HarmonyOS 3.1版本的发布&a…

低代码(Low-Code)技术简化开发难度,快速搭建应用

目录 一、低代码技术定义 二、低代码技术优势 1.提高企业的工作效率 2.降低企业的开发成本 3.提高应用程序和业务流程的质量 三、稳定性和生产率的最佳实践 三、最后 随着数字化时代的到来&#xff0c;低代码&#xff08;Low-Code&#xff09;技术已经成为了企业数字化转…

汽车网络架构与常用总线汇总

汽车CAN总线简述 CAN 是控制器局域网Controller Area Network 的缩写&#xff0c;1986年&#xff0c;由德国Bosch公司为汽车开发的网络技术&#xff0c;主要用于汽车的监测与控制&#xff0c;目的为适应汽车“减少线束的数量”“通过多个网络进行大量数据的高速传输”的需求。…

TypeScript教程(一)在vscode中的配置TypeScript环境

TypeScript教程&#xff08;一&#xff09;在vscode中的配置TypeScript环境 文章目录 TypeScript教程&#xff08;一&#xff09;在vscode中的配置TypeScript环境一、前言二、具体步骤1、Node.js安装2、TypeScript安装3、helloworld 一、前言 未来的开发者们请上座&#xff0c…