高通Hexagon通用计算DSP介绍

news/2024/11/15 4:17:17/

Qualcomm Hexagon Compute DSP (cDSP)是高通平台上专门用来做通用计算的硬件加速单元,与主机 CPU 相比,DSP 通常以较低的时钟速度运行,并提供更多的并行指令级。 这使得 DSP 在功耗方面成为 CPU 的更好替代品。 因此,将尽可能多的大型计算密集型任务移植到 DSP 上,可以降低设备的整体功耗。

cDSP主要用途有:

  1. 摄像头、视频的图像增强相关处理
  2. 计算机视觉、增强、虚拟现实处理
  3. 深度学习硬件加速

cDSP在SOC架构中位于下图红色框内。

cDSP硬件架构

Hexagon Scalar Core

        Hexagon 标量核心包含4个或更多的DSP 硬件线程,每个 DSP 硬件线程都可以访问 Hexagon 标量单元,这些单元对单个或成对 32 位寄存器执行定点和浮点运算。每个硬件线程包含4个通用寄存器(R0-R31)、4个预测判断寄存器(P0-P3)及4个执行单元(S0-S3)。

 

HVX

        Qualcomm Hexagon Vector eXtensions-HVX(“Hexagon矢量扩展”,Hexagon-六边形、Vector-矢量、Extensions-扩展)是Hexagon 680 DSP的典型特性,能够在执行图像处理应用中的计算负载当中发挥重要作用,比如虚拟现实、增强现实、图像处理、视频处理、计算视觉等。此前这些任务均是由CPU或GPU来执行,如今交给Hexagon 680 DSP,能够达到更加高效、功耗更低的效果。

  HVX之所以这么重要是因为它能比CPU处理像素的速度更快,CPU只能在同一时间处理1个或2个像素。但有了HVX,能够在同一时间处理超过100个像素,这种并行算法结合先进的HVX指令体系,创造了一种在处理相机图片时,比CPU更加快速高效的效率及更低的功耗。根据高通数据,Hexagon 680 DSP相比于以前只有NEON优化的情况下,性能可提升1到3倍,而功耗可降低到原来的1/18到1/4。而支持HVX的Hexagon 680 DSP能够比直接通过CPU处理,达到更快的处理速度——其能够完成原本需要CPU来完成的工作,并且无需唤醒,全时间待命,更高效、效果更好。

  通过集成HVX,Hexagon 680 DSP中添加了对于视频即时处理的支持,搭载骁龙820和骁龙821处理器的手机拍摄视频时,也能运用自适应增量功能,视频中过暗的部分可以自动进行增亮。当DSP察觉到画面较暗的区域,会自动将这些区域调亮,搭载Hexagon 680 DSP的骁龙820和骁龙821在处理这些内容时,处理速度相比上一代技术快3倍,而功耗却仅有此前的10%。

内存

cDSP软件架构

FastRPC

Skel动态库

HAP

QuRT

cDSP开发

以Example/calculator_c++为例

编译

Hexgon DSP SDK V4.5支持用CMake编译。

    build_cmake hexagon BUILD=Debug DSP_ARCH=v66build_cmake android BUILD=Debug

运行

直接在模拟器运行

$DEFAULT_HEXAGON_TOOLS_ROOT/Tools/bin/hexagon-sim -mv66 --simulated_returnval --usefs hexagon_Debug_toolv85_v66 --pmu_statsfile hexagon_Debug_toolv85_v66/pmu_stats.txt --cosim_file hexagon_Debug_toolv85_v66/q6ss.cfg --l2tcm_base 0xd800 --rtos hexagon_Debug_toolv85_v66/osam.cfg ~/Qualcomm/Hexagon_SDK/4.5.0.3/rtos/qurt/computev66/sdksim_bin/runelf.pbn -- ~/Qualcomm/Hexagon_SDK/4.5.0.3/libs/run_main_on_hexagon/ship/hexagon_toolv85_v66/run_main_on_hexagon_sim -- ./hexagon_Debug_toolv85_v66/ship/libcalculator_plus_q.so

在设备上运行

#建立运行环境
adb root
adb remount
#push android libs
adb shell mkdir -p /vendor/bin/
adb push android_Debug_aarch64/ship/calculator_plus /vendor/bin/
adb shell chmod 777 /vendor/bin/calculator_plus
adb push android_Debug_aarch64/ship/libcalculator_plus.so /vendor/lib64/

把DSP库push到设备

adb shell mkdir -p /vendor/lib/rfsa/dsp/sdk
adb push hexagon_Debug_toolv85_v66/ship/libcalculator_plus_skel.so /vendor/lib/rfsa/dsp/sdk/
adb push hexagon_Debug_toolv85_v66/libc++.so.1 /vendor/lib/rfsa/dsp/sdk/
adb push hexagon_Debug_toolv85_v66/libc++abi.so.1 /vendor/lib/rfsa/dsp/sdk/

运行

export LD_LIBRARY_PATH=/vendor/lib64/
export DSP_LIBRARY_PATH=/vendor/lib/rfsa/dsp/sdk
calculator_plus  -m sum -i 100

调试

调试Log输出

在代码中加入FARF log打印

#include <HAP_farf.h>FARF(LOW, "something happened: %s", (const char*)string);

设置Log输出级别,通过logcat查看

adb shell echo "0x1f > /vendor/lib/rfsa/dsp/sdk/calculator_plus.farf"
adb logcat -s adsprpc

cDSP性能调优

Profiling

在DSP上可用的profile方法如下:

HAP perf 需要在代码上加入性能统计API,统计代码运行的性能开销。

Hexagon Trace Analyzer可以在模拟器上运行并生成性能分析报告,目前在XR2上还不支持在设备上运行,可能在高版本上支持。

sysMon支持在设备上运行,通过sysMon可以监控DSP运行的性能数据,如频率、指令数、核心状态等。

编译优化

DSP编译Debug版本没有做性能优化,Release做了比较多的优化,性能要比Debug版本好10倍以上,所以在测试性能时,必须要在Release版本上进行。

另外要注意向量化选项是否开启,编译选项增加-fvectorize可以让编译器自动优化向量运算。不过编译器并不能很好的自动优化,所以尽量在代码中使用内联函数并行化优化。

代码优化

QHL

QHL HVX

dspCV

fastCV

待补充。。。


http://www.ppmy.cn/news/824302.html

相关文章

基于高通平台camera性能分析

基于高通平台camera性能分析 –稍微整理了一下,欢迎大家指正。 1:关于trace分析camera问题 Systrace 是Android平台提供的一款工具,用于记录短期内的设备活动。该工具会生成一份报告,其中汇总了Android内核中的数据,例如CPU调度程序、磁盘活动和应用线程。这可能帮助我们…

第一次内网渗透详细过程

学习渗透测试三个多月了 总结了下经验进行了一次内网渗透 环境是模拟的 目标IP192.168.31.102 该web主机下 有两台虚拟机 渗透目标&#xff1a; 拿到虚拟机的shell 先信息收集、 目标绑定jy.test.com 访问192.168.31.196存在探针 Nmap端口扫描192.168.31.196 开放135、…

Azure AD混合部署,实现在本地AD同步到AAD上面

一、前期准备 1、进入 Azure云 注册一个账号 2、进入 AAD 管理后台 3、创建一个新的租户 &#xff08;1&#xff09;创建 &#xff08;2&#xff09;选择类型 &#xff08;3&#xff09;配置目录名 4、切换到新的租户下面&#xff0c;添加自定义域名&#xff0c;这里要做下…

电脑无线网卡安装不了驱动怎么办?

4.11我的电脑自动更新网卡驱动&#xff0c;更新之后却用不了了&#xff0c;可用网络也无法显示&#xff0c;百度上的方法都用了&#xff0c;还是不行&#xff0c;网卡型号是realtek 8822be wireless lan 802.11ac&#xff0c;自卸载驱动后&#xff0c;驱动精灵 驱动人生 360驱动…

ubuntu14.04 安装以太网网络卡驱动

一般情况下&#xff0c;ubuntu系统自带设备驱动器。但是设备驱动相对而言比较旧&#xff0c;不一定适合高配机子&#xff0c;因此在安装系统的时候经常遇到系统装完之后硬件设备没法使用。追究其原因最主要是因为设备驱动器没有安装。在没有安装以太网网卡驱动的情况下&#xf…

网卡驱动安装不上?

前一阵子安装了虚拟机Vmware&#xff0c;打算玩玩Linux&#xff0c;某天发现电脑无法使用有线连接了&#xff0c;但我就是不信邪&#xff0c;二话不说重置了网络&#xff1a; 结果&#xff1a;连无线网络都用不了了&#xff01; 打开网络连接一看&#xff0c;空白一片 看一下…

ubuntu安装无线网卡驱动(包括离线安装)

/ – - - / – - - / - - - - / / – - 相信安装无线网卡驱动是许多linux初学者遇到的一个棘手的问题。Ubuntu默认使用开源网卡驱动&#xff0c;比如针对broadcom网卡&#xff0c;有b43、brcm80211等开源驱动&#xff0c;如果显卡型号适配&#xff0c;那么恭喜你&…

网卡驱动文件下载地址

https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages 转载于:https://www.cnblogs.com/cw828/p/10063665.html