高通骁龙(Qualcomm Snapdragon)CDSP HVX HTP 芯片简介与开发入门

1. Hexagon DSP/HVX/HTP 硬件演进

说到高通骁龙芯片大家应该不会陌生,其作为最为广泛的移动处理器之一,几乎每一个品牌的智能手机都会使用高通骁龙的处理器。

高通提供了一系列骁龙芯片解决方案。根据性能强弱分为了5个产品系列:从最高端的SM8xxx和SDM8XX系列,到中低端的SDM7XX, SDM6XX, SDM4XX系列。这些SOC上具有的信号处理芯片称为Hexagon DSP。低端系列可能只包含一个Hexagon DSP, 而高端系列通常有多个Hexagon DSP子系统。

各SOC上,相比于主控CPU而言, DSP具有典型的低主频(low clock)更高的指令级并行度(SIMD)。这使得DSP相比CPU具有更低的功耗和更高的计算能力。因此适合于将尽可能多的高计算密集型任务offload到DSP, 来减少整体的设备功耗。

随着Hexagon DSP的更新与发展,其在软硬件架构、主频和指令级上都有提升。下图一览表描述了Hexagon DSP/HVX/HTP 硬件架构的演进历史:

芯片代号

微架构

硬件演进(组成及命名变化)

MSM8996(SDM820)

v60

3 个 Hexagon DSPs: application, modem, and sensor:

Application DSP, Modem DSP, Sensor DSP

其中aDSP是Audio/Voice and Compute applications共享

MSM8998(SDM835)

v62

SDM660

v60

4 个 separate DSP, 每个都用于一个特定的应用领域:

sensor (sDSP), modem (mDSP), audio (aDSP), and compute (cDSP, dedicated for Compute applications, scalar core + HVX)

SDM670/SDM710

v65

Compute DSP + HVX

SDM845

v65

Computer subsystem:

Compute DSP + HVX

SM6150

V66

Computer subsystem:

Compute DSP + HVX 

(64-byte/512-bit mode will no longer be supported from Hexagon version v66 onwards)

SM8150

V66

Computer subsystem:

Compute DSP + HVX

SM8250

 V66

Computer subsystem:

Compute DSP + HVX

SM8350

V68

Computer subsystem:Hexagon Tensor Processor with Hexagon core + HVX + HMX

SM8450

V69

.....

【注】

1.客户在查阅相关文档的时候经常看到有aDSP, cDSP, HTP这三个名词, 对其较为迷惑。实际上,在SDM660之前,Audio/Voice 和 Compute application是共有的一块DSP芯片叫aDSP 。从SDM660开始aDSP这个名字就让给了audio DSP, 而我们的CDSP则作为Computer DSP的缩写。随着AI领域应用的涌现和需求到SM8350DSP芯片内部封装了一块专门用于AI MAC计算的协处理器HMX,专门面向深度卷积神经网络 (DCNN) 模型而打造。 添加了HMX之后的CDSP芯片更名为HTP(Hexagon Tensor Processor)。

本专栏文章围绕高通骁龙较新的平台,对其软硬件架构特性和如何在其上进行开发讲述。

2. HTP(Hexagon Tensor Processor)介绍

  HTP hardware Architecture包含4个模块:

(1)Scalar Processing V68 core with six hardware threads

(2)Hexagon ISA is extended with HVX instructions: 4 x HVX vector tightly coupled coprocessors

(3)HMX, 1x matrix tightly coupled coprocessor

(4)CDSP memory

通常我们将Hexagon Core特指Hexagon DSP里面的scalar 硬件处理线程。而  HVX(Qualcomm Hexagon eXtensions)则 是 Hexagon DSP 的向量处理单元。 目前高通骁龙Hexagon DSPs中只有CDSP(HTP)芯片上有HVX:

•添加宽向量(512 位或 1024 位)SIMD 支持

•Hexagon v6x 处理器架构的指令扩展支持在协处理器中实现向量操作

•适用于高性能成像、计算和机器学习应用

HMX作为HTP上专门用于深度学习MAC计算的硬件模块暂时不对客户开放进行可编程。客户只能通过QNN等高通提供的软件库接口进行调用。

HTP上客户可编程的只有Hexagon CDSP scalar core + HVX。而其中Scalar由于最多只能同时处理64bit数据,因 而最大并行度只有8 。HVX支持128Byte的向量寄存器(Vector Register)可以同时处理128Byte数据,而作为我们HTP上开发的重点。本专栏及在后续的文章中,将仍旧使用CDSP来作为Hexagon core + HVX的统称。用scalar代表标量thread以及scalar指令。 用HVX代表Vector thread以及Vector指令。

我们在进行CDSP开发的时候,除了学会使用具体的指令完成自己想要的功能之外,还有一个重要的点就是对数据进行读写。因此有必要理解CDSP开发中的数据通路。

CDSP 内存模块框图:

标量寄存器(Scalar registers):

       Hexagon 标量处理核心包括32个32bit的通用寄存器 R0-R31. 32个32bit的控制寄存器C0-C31.

向量寄存器:

       HVX处理核心包括32个1024bit的数据向量寄存器 V0-V31. 4个128bit的 预测寄存器Q0-Q31.

将CDSP的内存存储结构总结如下:

Level

Type

Description

0

标量寄存器;向量寄存器

Hexagon core: 6个硬件标量线程; Hexagon Vector eXtensions: SIMD 处理单元有4个向量硬件线程

1

数据L1; 指令L1;

数据L1用于标量指令寄存器获取数据; 指令L1用于获取标量、向量线程指令.

2.1

统一的L2

L2 cache 可以配置一部分成为L2TCM用于用户直接使用

2.2

VTCM

HVX片上内存,适合于Vector线程,速度比DDR快

3

DDR(Ion-mem)

DDR使用AXI协议与L2进行数据存取

3. CDSP编程开发入门——手机端运行一个独立程序

为了开始使用骁龙SOC上的CDSP进行算法移植功能模块的开发,高通给出了如下的开发总体流程。

步骤1:首先第一步就是需要安装Hexagon SDK软件开发包。Hexagon SDK可以从高通的Qualcomm Developer Network (QDN)网站上下载。

[注]对于早期的SDK版本,开发者可以从高通开发者网站上下载到。由于高通的骁龙硬件平台更新后,相应的编译工具也必须要更新到指定的SDK版本。 因此建议客户尽可能安装最新的SDK版本。

安装完成以后,可以从如下的路径获取到入门相关文档和示例:

(1). SDK说明文档入口:C:\Qualcomm\Hexagon_SDK\<Latest_Version>\docs\index.html

(2). CDSP开发指令与工具文档:C:\Qualcomm\Hexagon_SDK\<Latest_Version>\tools\HEXAGON_Tools\x.x.xx\Documents\Hexagon_Document_Bundle.pdf

(3). SDK示例:

C:\Qualcomm\Hexagon_SDK\<Latest_Version>\examples

对于新版本的SDK, 还提供了如下功能更为丰富以及体现新特征的示例以及文档:

C:\Qualcomm\Hexagon_SDK\<Latest_Version>\addons\compute\examples。

C:\Qualcomm\Hexagon_SDK\<Latest_Version>\addons\compute\docs\index.html.

步骤2:安装好CDSP开发的SDK之后,要编译运行一个SDK自带的example用以确保本地完整的开发工具都已经准备妥当。下面以SDK3.5.4例讲解如何运行一个example的步骤。 这些步骤在上面列出的说明文档中也有介绍:

2.1. 打开一个windows DOS界面. 运行环境配置脚本完成一些环境变量的配置:C:\Qualcomm\Hexagon_SDK\3.5.4>setup_sdk_env.cmd

2.2. 编译example benchmark。由于ARM作为主控芯片,CDSP是作为子系统计算芯片。他们具有不同的ISA,因此需要分别编译安卓端和CDSP端的库。 而作为一个可独立运行的示例,安卓端也同时应当准备一个可执行文件,去调用安卓端的库:

编译安卓端库以及可执行文件:

C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark>make tree V=android_ReleaseG_aarch64

编译完成之后应当得到如下的文件夹路径以及编译结果:

C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark\android_ReleaseG_aarch64\ship\libbenchmark.so    ----->android端库

C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark\android_ReleaseG_aarch64\ship\benchmark         ------->可执行文件

编译CDSP端库:

C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark> make tree V=hexagon_Release_dynamic_toolv83_v66

编译完成之后应当得到如下的文件夹路径以及编译结果:

C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark\hexagon_Release_dynamic_toolv83_v66\ship\libbenchmark_skel.so    ----->DSP端库

步骤3:准备好手机跑example需要的代码文件之后,我们还需要准备好手机运行环境。高通设置了安全机制,使得所有CDSP的程序在骁龙手机上运行的时候都需要进行签名, 否则会出现.so库签名失败的log。高通提供了多种签名方式。在这里,我们讲解一种在进行算法模块指令代码开发阶段采用的测试签名方式。

客户做测试签名的手机必须是开发机型,即no-fused device。如果从市场门店购买的手机,通常已被开启了secure boot, 因此无法使用测试签名。 如何查看手上的手机是否fused, 每个手机厂商都有自己的快捷键码。同时下面也提供了一种方式:

C:\adb_fastboot_drivers>fastboot getvar secure

secure: no

Finished. Total time: 0.002s

拿到测试机之后,用下面的步骤进行给手机签名。被签名的手机则可以跑任意的CDSP库:

3.1. C:\Qualcomm\Hexagon_SDK\ 3.5.4>adb push C:\Qualcomm\Hexagon_SDK\3.5.4\tools\elfsigner\getserial\CDSP\android_Release\getserial    /data/local/tmp

3.2. C:\Qualcomm\Hexagon_SDK\3.5.4>adb shell chmod 777 /data/local/tmp/getserial

3.3. C:\Qualcomm\Hexagon_SDK\3.5.4>adb shell /data/local/tmp/getserial

####################Serial number (see below)###########################

Serial Num : 0x5d9a2fe3

####################Serial number (see above)###########################

注释:stdout会出现一串手机序列号。这里以我的手机为例

3.4.C:\Qualcomm\Hexagon_SDK\3.5.4\tools\elfsigner>python elfsigner.py -t 0x5d9a2fe3

Logging to C:\Qualcomm\Hexagon_SDK\3.5.4\tools\elfsigner\output\Elfsigner_log.txt

        Attention:

        Use of this tool is conditioned upon your compliance with Qualcomm

        Technologies'(and its affiliates') license terms and conditions;

        including, without limitations, such terms and conditions addressing

        the use of such tools with open source software.

        Agree? [y/n]:

        y

Signing a file may take up to 3 minutes due to network connectivity. Please wait patiently.

------------------------------------------------------------

Signing complete! Output saved at C:\Qualcomm\Hexagon_SDK\3.5.4\tools\elfsigner\output\testsig-0x5d9a2fe3.so

3.5. C:\Qualcomm\Hexagon_SDK\3.5.4\tools\elfsigner>adb push C:\Qualcomm\Hexagon_SDK\3.5.4\tools\elfsigner\output\testsig-0x5d9a2fe3.so    /vendor/lib/rfsa/adsp

步骤4:将编译好的库用adb推送到手机端,运行。

4.1在C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark路径下新建一个windows bat脚本,命名为runv.bat,填入如下的命令行:

adb root

adb remount

adb shell rm -rf /data/local/tmp/runtime

adb shell mkdir /data/local/tmp/runtime

adb shell mkdir /data/local/tmp/runtime

adb push  ./android_ReleaseG_aarch64/ship/benchmark /data/local/tmp/runtime

adb push  ./android_ReleaseG_aarch64/ship/libbenchmark.so /data/local/tmp/runtime

adb push  ./hexagon_Release_dynamic_toolv83_v66/ship/libbenchmark_skel.so  /vendor/lib/rfsa/adsp

adb shell mkdir /data/local/tmp/runtime/data

echo chmod 755 /data/local/tmp/runtime/benchmark  > tmp

echo cd /data/local/tmp/runtime >> tmp

echo export LD_LIBRARY_PATH=./ >> tmp

echo ./benchmark -f epsilon -w 256 -h 64 -P 255  -L 10 -l 10 -s  >> tmp

echo exit >> tmp

adb shell < tmp

:del tmp

4.2运行脚本C:\Qualcomm\Hexagon_SDK\3.5.4\addons\compute\examples\benchmark>runv66.bat。 如果前面的步骤一切正常的话,此处运行完之后终端窗口会有类似如下的success提示:

C:\Qualcomm\Hexagon_SDK\3.5.4\examples\common\benchmark>

setting clocks to power level 255, Deprecated power level NOT used 1

src - allocated 16384

dst - allocated 16384

ref - allocated 16384 (via malloc)

calling epsilon on a 256x64 image...

run time of epsilon: 10319 microseconds for 10 RPC iterations, each with 10 iterations inside the DSP.

Last iteration DSP-measured time (for 10 iterations): 157 uSec, 220417 cycles (RPC overhead 641 uSec), apparent clock rate 1403 MHz

Average DSP execution time = 157 uSec, Average RPC overhead = 874 uSec

return value from epsilon: 0

- success

4. 术语表

术语

解释

CDSP

Compute Digital Signal Processor 

HVX

Hexagon Vector eXtension

HMX

Hexagon Matrix eXtension

 作者:sallyISshanli

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【neo4j图数据库】入门实践篇

探索数据之间的奥秘&#xff1a;Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长和数据关系的日益复杂&#xff0c;传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…

OPCUA相关概念和KepServer OPCUA连接PLC

文章背景 项目中需要使用OPC UA 来读取PLC的点位。本文简单介绍了OPC UA和使用KepServer软件连接PLC并读点。OPC相关概念 OPC之前&#xff0c;软件开发需要写大量驱动程序去连接设备&#xff0c;设备上的一个硬件改变&#xff0c;应用程序都有可能需要重写&#xff0c;不同设备…

水经微图Web版1.9.0发布

水经微图&#xff08;简称“微图”&#xff09;新版已上线&#xff0c;在该版本中主要新增了对WGS84图源加载、火星坐标图源加载和大字体图源加载功能&#xff0c;以及多面要素的加载功能。 现在&#xff0c;为你分享一下本轮迭代的主要新增功能&#xff0c;以及部分功能的效果…

STL空间配置器

空间配置器&#xff08;allocator&#xff09;&#xff08;重点&#xff09; 背景需求&#xff1a;在底层默默的实现空间的分配 问题&#xff1a;空间的申请与对象的创建两者分开&#xff0c;因为不断创建的时候可能会频繁的申请空间扩容。 类似操作&#xff1a;reserve函数…

自动扫描范围在减少剂量多相CT肝脏成像中的应用:基于CNN和高斯模型| 文献速递-深度学习自动化疾病检查

Title 题目 Automatic scan range for dose-reduced multiphase CT imaging of theliver utilizing CNNs and Gaussian models 自动扫描范围在减少剂量多相CT肝脏成像中的应用&#xff1a;基于CNN和高斯模型 01 文献速递介绍 肝癌是全球癌症死亡的第四大原因&#xff0c;每…

告别推广迷茫,Xinstall渠道包助您精准统计应用商店数据!

在App推广的浩瀚征途中&#xff0c;每一位广告主和开发者都面临着同样的挑战&#xff1a;如何在众多应用商店中脱颖而出&#xff0c;实现高效推广与精准获客&#xff1f;今天&#xff0c;就让我们一同探索Xinstall应用商店渠道包的独特魅力&#xff0c;看看它是如何成为解决这一…

【产品经理】聊聊PLG策略

PLG 是一种以用户增长为导向的策略&#xff0c;如何理解这种策略&#xff1f;适合采用PLG模式的SaaS又有哪些&#xff1f; 一、企业软件采购方式的变迁 从用户的角度&#xff1a;企业软件采购从CIO主导&#xff0c;逐渐演化为经理或者员工可做出决策。 从供应商的角度&#x…

剪映 v5.5 Pro Vip解锁版:使用指南与注意事项

摘要&#xff1a;本文介绍了剪映Pro VIP解锁版的使用方法&#xff0c;包括安装、测试和使用VIP素材的步骤&#xff0c;以及如何避免误报和保持解锁状态的建议。 正文&#xff1a; 剪映Pro是一款广受欢迎的视频编辑软件&#xff0c;提供了丰富的视频编辑功能和大量高质量的素材…

自动化测试报告pytest-html样式美化

最近我将 pytest-html 样式优化了 一版 先看优化前&#xff1a; 优化后&#xff1a; 优化内容包括&#xff1a; 删除部分多余字段新增echart图表部分字体大小、行间距、颜色做了美化调整运行环境信息移至报告最后部分字段做了汉化处理&#xff08;没全部翻译是因为&#xf…

python学习-函数

函数 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 内置函数可重复使用 为什么要学习、使用函数呢&#xff1f; 为了得到一个针对特定需求、可供重复利用的代码段 提高程序的复用性&#xff0c;减少重复性代码&#xff0c;…

记一次阿里云服务器java应用无法响应且无法远程连接的问题排查

问题表现 java服务无响应&#xff0c;无法远程链接到服务器。 今天中午12点多&#xff0c;应用直接崩溃。后续进入到服务器&#xff0c;发现java进程都不在了&#xff0c; 排查过程 先安装atop工具 安装、配置并使用atop监控工具 等下次再出现时看相关时间点日志&#xff…

Docker在windows上使用vscode远程连接容器

目录 一、提前准备&#xff1a; 二、vscode连接docker容器 三、构建好的docker容器直接连接vscode 四、Windows下的可视化出linux的ui界面 在日常的开发中&#xff0c;不想windows和linux两个系统之间来回切换&#xff0c;笔者最近打算所有的环境均在一个系统上完成。为了交…

26K Star!LLM多智能体AutoGen教程3:我的外包弟弟写代码

读到这里想必已经入门AutoGen了&#xff0c;但怎么让它自动写代码自动调试啊&#xff0c;我也想要一个外包弟弟给我干活&#xff0c;我就喝杯茶摸摸鱼审核一下代码就好了呀。这不巧了&#xff0c;最近PM要求我给他弄一份某SDK支持车厂的列表&#xff0c;这种简单的事情在以前我…

msvcp140_ATOMIC_WAIT.dll丢失的多种解决方法分享,实测有效

在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。那么&#xff0c;msvcp140_ATOMIC_WAIT.dll丢失是怎么回事呢&#xff1f;本文将从msvcp140_ATOMIC_WAIT.dll丢失的原因分析、对电脑的影响以及解决方…

武汉星起航:自运营团队驾驭亚马逊市场,领航跨境新纪元,成绩斐然

在跨境电商的浪潮中&#xff0c;武汉星起航电子商务有限公司的自运营团队以其卓越的运营能力、深厚的市场洞察力和灵活的应变策略&#xff0c;在亚马逊这片广阔的电商海域中&#xff0c;书写了一段又一段辉煌的篇章。 武汉星起航的自运营团队&#xff0c;是一支由经验丰富、技…

PyTorch入门笔记

学习参考&#xff1a; PyTorch简单入门视频 深入浅出PyTorch 小土堆笔记 前置知识 AI vs ML vs DL AI&#xff08;Artificial Intelligence&#xff09;&#xff1a;通过让机器模仿人类进而超越人类ML&#xff08;Machine Learning&#xff09;&#xff1a;让机器模仿人类的一…

RabbitMQ 之 延迟队列

目录 ​编辑一、延迟队列概念 二、延迟队列使用场景 三、整合 SpringBoot 1、创建项目 2、添加依赖 3、修改配置文件 4、添加 Swagger 配置类 四、队列 TTL 1、代码架构图 2、配置文件代码类 3、生产者 4、消费者 5、结果展示 五、延时队列优化 1、代码架构图 …

Android 11.0 SettingsProvider 源码分析

文章目录 一、SettingsProvider 的概述二、SettingsProvider 的启动流程三、对 SettingsProvider 进行操作方法四、客制化示例 一、SettingsProvider 的概述 SettingsProvider 是一个为 Android 系统设置提供数据共享的 Provider&#xff0c;它包含全局、安全和系统级别的用户…

AI大模型对话(上下文)缓存能力

互联网应用中&#xff0c;为了提高数据获取的即时性&#xff0c;产生了各种分布式缓存组件&#xff0c;比如Redis、Memcached等等。 大模型时代&#xff0c;除非是免费模型&#xff0c;否则每次对话都会花费金钱来进行对话&#xff0c;对话是不是也可以参照缓存的做法来提高命…

207.贪心算法:最大子数组和(力扣)

代码展示 class Solution { public:int maxSubArray(vector<int>& nums) {int result INT_MIN; // 初始化结果为最小可能的整数int sum 0; // 初始化当前子数组和为0// 遍历数组中的每一个元素for (int i 0; i < nums.size(); i){sum nums[i]; //…