性能优化-HVX架构简介

这篇具有很好参考价值的文章主要介绍了性能优化-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 架构图

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

高通骁龙 SOC 架构图

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

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

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

B. HVX 有哪些优势?

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

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

C. HVX 可以用来做什么?

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

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

二、DSP 硬件架构

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

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

A. HVX 架构 - 线程模型

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

B. HVX 架构 - 内存

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

C. HVX 架构 - SIMD 扩展

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

三、HVX软件架构

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

上图为 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句柄。

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

A. 远程过程调用(RPC)

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

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

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

远程调用时,首先客户端需要告诉服务器,需要调用函数,这里函数和进程 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 来进行映射完成,降低了开发者的使用难度。

性能优化-HVX架构简介,# 高通cDSP入门教程,高性能(HPC)开发基础教程,性能优化,架构,HVX,DSP

FastRPC架构

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

四、总结

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

期望大家都能有所收获。

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

到了这里,关于性能优化-HVX架构简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android入门教程 | TextView简介(宽高、文字、间距)

    TextView简介 文字,是我们传达信息的一种常见方式。在安卓应用上显示文字,我们通常使用TextView。 之前我们已经知道如何获取到layout中的TextView,也知道 setText() 方法可以修改显示的文字。 结合我们实际的生活和学习经验,写字的时候,有哪些方面是可以由我们来控制的?

    2024年02月04日
    浏览(35)
  • Python入门教程 | Python简介和环境搭建

    Python是一种高级编程语言,由荷兰人Guido van Rossum于1991年创建。它以其简单易学、可读性强和丰富的生态系统而受到广泛喜爱。它被广泛应用于各个领域,包括Web开发、科学计算、数据分析、人工智能等。 简洁易读:Python采用清晰简洁的语法,使用缩进来表示代码块,而不是

    2024年02月12日
    浏览(29)
  • Web菜鸟入门教程 - Radis实现高性能数据库

    Redis是用C语言开发的一个高性能键值对数据库,可用于数据缓存,主要用于处理大量数据的高访问负载。 也就是说,如果你对性能要求不高,不用Radis也是可以的。不过作为最自己写的程序有高要求的程序员,自然是要学一下的,毕竟大部分的网站都配置了radis。接下来一三

    2024年04月09日
    浏览(44)
  • Apache Doris 入门教程34:Join 优化

    Bucket Shuffle Join 是在 Doris 0.14 版本中正式加入的新功能。旨在为某些 Join 查询提供本地性优化,来减少数据在节点间的传输耗时,来加速查询。 它的设计、实现和效果可以参阅  上面的图片展示了Bucket Shuffle Join的工作原理。SQL语句为 A表 join B表,并且join的等值表达式命中了

    2024年02月11日
    浏览(33)
  • STM32入门教程课程简介(B站江科大自化协学习记录)

    STM32最小系统板+面包板硬件平台 STM32面包板入门套件 Windows电脑 万用表、示波器、镊子、剪刀等 Keil MDK 5.24.1 是一款嵌入式软件开发工具,它提供了一个完整的开发环境,包括编译器、调试器和仿真器。它支持各种微控制器,包括 ARM、Cortex-M、Cortex-R 和 8051 等。Keil MDK 是一款

    2023年04月08日
    浏览(47)
  • 第10章_瑞萨MCU零基础入门系列教程之中断控制单元简介

    本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 : https://blog.csdn.net/qq_35181236/article/details/132779862 本书使用的RA处理器R7FAM5系

    2024年02月09日
    浏览(36)
  • Android入门教程||Android 架构||Android 应用程序组件

    Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅

    2024年02月13日
    浏览(33)
  • c++高性能web框架drogon入门教程四,orm使用,csp使用

    2020年11月26日13:57:48 c++高性能web框架drogon入门教程一 linux环境搭建和demo运行 c++高性能web框架drogon入门教程二 windows10下安装drogon,配合vscoede搭建开发环境 c++高性能web框架drogon入门教程三 控制器和数据库客户端使用 c++高性能web框架drogon入门教程四 orm使用,csp使用 c++高性能web框

    2023年04月08日
    浏览(26)
  • 单公证人模式实现测试链间跨链【入门教程(架构模块篇)】

    总结汇报篇 总体设计分为三大主要功能: 1、同链资产转移 2、跨链资产转移 3、增/删/改可支持链/币 以及四个以上常规功能: 1、余额查询 2、存/取款 3、验证币种合法性 4、铸/销币 5、… 5.1.1 模块设计 转账定义模块:用户将自己需要转移的代币信息作为参数输入。 币种校

    2024年02月03日
    浏览(45)
  • 性能测试:系统架构性能优化思路

    今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。 我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际上潜在的场景主要

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包