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

news2024/7/7 16:48:50

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

verilog实现PID控制

1 原理讲解 距离上一次说PID算法的事情过去蛮久了&#xff0c;今天又重新看了看PID的代码&#xff0c;其实还是存在一些不合理的地方。 整理归纳了一下原理&#xff0c;位置式和增量式的变化。 2 工程实现 timescale 1ns / 1psmodule pid_controller(input clk,input r…

MySQL——事务ACID原则、脏读、不可重复读、幻读

什么是事务 要么都成功&#xff0c;要么都失败 一一一一一一一 1. SQL执行&#xff1a;A给B转账 A 1000 ---->200 B 200 2. SQL执行&#xff1a;B收到A的钱 A 800 B 400 一一一一一一一 将一组SQL放在一个批次中去执行~ 事务原则&#xff1a;ACI…

从零搭建Prometheus到Grafana告警推送

目录 一、Prometheus源码安装和动态更新配置 二、Prometheus操作面板和常见配置 三、Prometheus常用监控组件exporter配置 3.1 exporter是什么 3.2 有哪些exporter 3.3 exporter怎么用 3.4 实战 node_exporter ​3.5 其它exporter都怎么用 四、Promethus整合新版Sprin…

线程状态转换总结

1. NEW -> RUNNABLE 创建线程后是 NEW 状态&#xff08;只是 Java 层面新建的&#xff0c;还没有关联到操作系统实际的线程上&#xff09;&#xff0c;调用线程的 start() 方法会将 Java 线程和操作系统的线程关联起来&#xff0c;进入 RUNNABLE 状态 2. RUNNABLE <->…

入门PHP就来我这(纯干货)05

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 数组及创建 数组&#xff0c;顾名思义&#xff0c;本质上就是一系列数据的组合…

【Linux进程通信】使用匿名管道制作一个简单的进程池

进程池是什么呢&#xff1f;我们可以类比内存池的概念来理解进程池。 内存池 内存池是在真正使用内存之前&#xff0c;先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时&#xff0c;就从内存池中分出一部分内存块&#xff0c;若内存块不够再继…

docker-compose搭建prometheus、grafana

一、安装prometheus 1、安装 version: 3.1services:prometheus:image: prom/prometheus:v2.48.0container_name: prometheushostname: prometheusrestart: alwaysvolumes:- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml- ./prometheus/:/etc/prometheus/port…

淘宝扭蛋机小程序开发,新玩法、新收益体验!

近几年&#xff0c;随着娱乐消费的火爆&#xff0c;潮玩市场得到了快速发展&#xff0c;从而带动了扭蛋机市场的发展&#xff0c;扭蛋机也逐渐风靡在消费市场中。对于年轻人消费者来说&#xff0c;愿意为扭蛋机的热门IP商品而买单。目前&#xff0c;价格低、颜值高、种类多样的…

大科技公司大量裁员背后的真相

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

试用笔记之-汇通计算机等级考试软件一级Windows

首先下载汇通计算机等级考试软件一级Windows http://www.htsoft.com.cn/download/htwork.rar

JavaMySQL 学习(基础)

目录 Java CMD Java发展 计算机存储规则 Java学习 switch新用法&#xff08;可以当做if来使用&#xff09; 数组定义 随机数 Java内存分配 MySQL MySQL概述 启动和停止 客户端连接 数据模型 关系型数据库 SQL SQL通用语法 SQL分类 DDL--数据定义语言 数据库…

时间复利效应才是人生的催化剂

在追求成功的道路上&#xff0c;许多人都在寻找捷径。然而&#xff0c;真正的捷径并非不劳而获的幻想&#xff0c;而是通过长期坚持在某一领域深耕细作&#xff0c;享受时间复利效应带来的巨大收益。本文将探讨如何选择合适的领域并长期坚持下去&#xff0c;以实现成功。 时间…

Agent 学习笔记

近年来&#xff0c;人工智能领域取得了重大进展&#xff0c;人工智能代理现在能够处理复杂的任务。尽管取得了这些进展&#xff0c;但有效地并行和协调多个人工智能代理协同工作仍然是一个挑战。 一群智能体可以理解为一组智能体在单个环境中共同共存&#xff0c;该环境可以相…

不用找了!这个软件自带各行业话术,客服效率飞跃

有一款客服工具软件&#xff0c;不但能吸附聊天窗口&#xff0c;实现图文视频话术的一键发送&#xff0c;还内置了多行业的优质客服话术模板&#xff0c;允许用户直接下载使用&#xff0c;快速构建起适合自身企业的专业客服知识库。 前言 在今天的快节奏商业环境中&#xff0c…

The Sandbox 通过创作者挑战赛推动社区参与

游戏开发者并不是每天都有机会让自己的作品赢得大奖。但在 The Sandbox&#xff0c;这已经成为一种趋势&#xff01;首届 "创作者挑战赛 "让顶尖创作者将 150 万 SAND 捧回家。现在&#xff0c;我们要带着另一个巨额奖池回来了&#xff01; 关于首届创作者挑战赛&…

PCIe Switch

如图所示&#xff0c;pcie Switch 被定义为多个虚拟PCI-to-PCI Bridge设备的逻辑集合。所有交换机由以下基本规则管理。 . Switch在配置软件中表现为两个或多个逻辑PCI-to-PCI桥 不需要支持下行端口作为锁定请求的发起端口. 每个enable的端口必须符合“流量控制”规范。 .S…

aclStream流处理多路并发Pipeline框架中VEncode Module代码调用流程整理、类的层次关系整理、回调函数赋值和调用流程整理

目录 1 代码调用详细流程 2 类的层次关系 3 回调函数的赋值和调用流程 参考文献&#xff1a; 将寒武纪的CNStream适配到华为昇腾平台&#xff0c;并起名aclStream&#xff0c;整理了下华为昇腾平台aclStream中VEncode Module的代码调用流程、类的层次关系以及回调函数的赋值…

(九)绘制彩色三角形

前面的学习中并未涉及到颜色&#xff0c;现在打算写一个例子&#xff0c;在顶点着色器和片元着色器中加入颜色&#xff0c;绘制有颜色的三角形。 #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <iostream>void …

数据加密解密和哈希的解析

[S1301]数据的加解密 对提供的原始数据&#xff08;字符串或者二进制数组&#xff09;进行加密是数据保护框架体提供的基本功能&#xff0c;接下来我们利用一个简单的控制台程序来演示一下加解密如何实现。数据的加解密均由IDataProtector对象来完成&#xff0c;而该对象由IDa…

React+TS 从零开始教程(4):useEffect

上一节传送门&#xff1a;ReactTS 从零开始教程&#xff08;3&#xff09;&#xff1a;useState 源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 上一节&#xff0c;我们已经学会了React的第一个Hook&#xff1a;useState。 这一节&#xff0c;我们要学习的是另一…