高通骁龙(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

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值