本文主要介绍高通cDSP的架构,包括SnapDragon处理器介绍、cDSP整体架构,芯片架构,cDSP软件架构以及HVX 介绍、最后介绍了Hexagon SDK 的环境配置和签名。

个人简介:一个全栈工程师的升级之路! 个人专栏:高性能(HPC)开发基础教程 CSDN主页 发狂的小花 人生秘诀:学习的本质就是极致重复!

目录

一、前言

1 处理器

二、Qualcomm Snapdragon

1 Qualcomm Snapdragon 处理器架构

2 高通cDSP

3 cDSP软件架构

4 cDSP芯片架构

5 HVX(Hexagon Vector eXtensions) 的优势

三、高通cDSP Hexagon HVX SDK环境配置

1 Hexagon HVX 环境

2 下载工具链

3 签名

 4 参考

一、前言

1 高通cDSP开发的商业价值

        30秒快速认识高通cDSP开发的商业价值

【高通cDSP旨在处理一些简单但需要大量计算的场景,如图像处理、科学计算、AI训练、计算机视觉等。这些场景使用CPU来运算会极大的降低CPU的吞吐量,因此利用现代寄存器较宽的特性设计出了适配数据并行的DSP芯片,cDSP就是典型的代表。利用cDSP+CPU既可以满足一般的使用场景,也可以完成现代图像和视频数据的处理。这种利用cDSP进行高性能计算的商业价值在于使用较低性能的CPU处理器芯片加上一块DSP芯片或者GPU可以完成一块较高性能芯片才能完成的工作。由于XR,大模型、AI训练、AI推理的迅猛发展,边缘大模型和边缘计算会有很大的需求,再加上高通芯片在移动边缘领域的统治低位,故此,学习cDSP的开发是有价值的。】 

2 处理器

        处理器的种类有很多,一般可以分为三种:

        (1)通用处理器

        CPU(中央处理器):是计算机的核心部件,负责执行程序指令和控制计算机的运行。

        (2)专用处理器

        ASIC(专用集成电路):是一种为特定应用而设计的芯片,通常具有高性能和低功耗。        

        FPGA(现场可编程门阵列):是一种可重新配置的芯片,可以根据需要随时更改其功能。

        (3)特殊计算芯片

       GPU(图像处理器/图形处理器):它是一种专门用于处理图像和图形相关任务的处理器,遵循单指令多线程 (SIMT) 的编程模型,其中相同的指令在不同的内核 / 线程上并发执行。

        TPU(张量处理器):这是谷歌专门为其深度学习框架TensorFlow设计的处理器,与同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。

        NPU(网络处理器):它是专门为处理人工智能和机器学习任务而设计的处理器,具有高性能和低功耗的特点。

        DSP(数字信号处理器):主要用于处理数字信号,如音频和视频信号,其最重要的结构特征是支持灵活的数据格式。如高通cDSP、ceva等。

        VPU(视频处理器):这是一种专门用于处理视频相关任务的处理器,通常用于图像编解码和视频渲染等应用。

二、Qualcomm Snapdragon

1 Qualcomm Snapdragon 处理器架构

        Snapdragon 是高端芯片的代表,其移动产品产品分为几个系列,目前高性能的包括SM8xxx和SDMxx系列,低性能包括SDM7xx,SDM6xx,SDM4xx,SDM2xx系列。这几款产品是根据其CPU、CPU、DSP等处理器的可伸缩资源来划分的。

以下是高通820芯片的整体架构图:        

        这里的DSP有cDSP和调制DSP。        

2 高通cDSP

        DSP(数字信号处理)是一种专门用于处理数字信号的芯片,而Hexagon则是高通公司的数字信号处理器产品系列的品牌名称。Hexagon也被称为QDSP6,代表着“第六代数字信号处理器”。与主机CPU相比,DSP通常以较低的时钟速度运行,但在指令级别提供了更多的并行机会。这使得DSP在功耗方面优于CPU。因此,最好将尽可能多的大型计算密集型任务移植到DSP上,以降低设备的整体功耗。

下表为部分高通芯片上cDSP的一些信息:  

        cDSP是利用SIND技术实现数据并行,从而可以能够以一个低频的核来高效的处理一些数据,这是其的优势,低功耗和高性能。

3 cDSP软件架构

        下图是高通cDSP的软件架构

        (1)User Application

        User Application模块是host端算法实现的一部分,它的主要作用是触发FastRPC调用并调度device应用。当需要调用设备端的算法时,User Application模块会通过FastRPC模块与设备进行通信,并将设备端的算法so库从host端动态加载到设备上。

        (2)FastRPC

        FastRPC模块是一个远程调用模块,它实现了host与device之间的通信。当host调用设备时,会触发FastRPC的调用机制。在device端,FastRPC会创建一个任务进程,专门用于处理这次的调用请求,进而完成host与device之间的调用过程。需要注意的是,host端会阻塞等待device端执行完成,属于阻塞等待。

        (3)User Application (Hexagon SO)

        User Application (Hexagon SO) 模块是设备端算法实现的一部分,它通过编译会生成一个Hexagonso文件。该模块主要用于设备端算法的运行,同时还包含一系列辅助API接口等功能。

        (4)libdspCV_skel.so

        libdspCV_skel.so模块主要是dspcv模块,它是Hexagon SDK中的一个库文件,用于控制设备端部分资源。例如,它可以控制时钟、多线程等功能的封装。

        (5)QuRT RTOS

        QuRT RTOS模块是高通针对Hexagon DSP处理器的实时操作系统。它主要负责系统资源的维护和管理,其中使用最多的功能包括线程调用和VTCM等资源的管理。QuRT操作系统根据线程的优先级将软件线程调度到硬件线程上,从而实现对系统资源的合理分配和利用。

        (6)CDSPPM & DCVS V2

        CDSPPM & DCVS V2模块是功率管理模块,它主要提供时钟带宽的投票功能,用于管理时钟和电源。通过这个模块,可以有效地控制和管理设备的功耗和性能。

        (7)Hardware thread和HVX context

        Hardware thread和HVX context是最底层的硬件线程和HVX句柄。它们代表了设备上的物理资源,用于执行计算任务和处理数据。通过使用这些硬件资源,可以提高算法的执行效率和性能。

4 cDSP芯片架构

        下图是cDSP的芯片架构​

      

        (1)Hexagon标量单元

        Hexagon标量单元由许多DSP硬件线程组成,有4~6个硬件线程,在大多数当前的cDSP上有四个。每个DSP硬件线程都可以执行标量指令,可以执行定点/浮点的32位运算。         每个数据单元能够执行负载或存储64位宽,或32位标量ALU操作。每个执行单元能够进行16/32/64位的向量化乘法、ALU、位操作、移位或浮点操作。

        从V66开始,每个cluster都有自己的浮点和乘数资源。cluster指的是一对线程(线程0&1和线程2&3)。在cluater中,两个线程通常在交替的时钟周期上提交指令包,因为大多数指令至少需要两个时钟周期才能完成。在这种情况下,每个cluster在每个DSP时钟周期内完成一个指令包,只要避免停顿,每秒产生的总吞吐量为(2 * DSP时钟)指令包。

        标量单元可以使用L1和L2cache。

        (2)HVX矢量单元

        HVX是一个可选的协处理器,它在标量DSP单元上增加了128字节(1024位)的矢量处理能力。标量硬件线程通过访问HVX寄存器文件(也称为HVX上下文)来使用HVX协处理器。两个128字节的HVX上下文通过SM8250设备在所有启用HVX的aDSPs和cDSPs上可用。

        矢量单元仅仅可以使用L2cache。

        (3)HMX单元

        HMX没有对外开放接口,可以执行矩阵运算等,仅仅加速机器学习库如QNN SDK,可以让神经网络使用HMX引擎。

        (4)内存子系统

        ​

        cDSP有一个两级缓存内存子系统。

        L1只对标量单元可访问, L2是标量单元的第二级存储器,HVX协处理器的第一级存储器。

        L1仅透写。这允许缓存是硬件一致的。为了保持一致性,如果HVX存储在L1中命中,L1行将失效。向量单位支持各种加载/存储指令,包括支持未对齐向量和逐字节条件存储。一个流水线的矢量FIFO用于HVX硬件读取L2内容,并向程序员隐藏L2读取延迟。在SM8150和SM8250设备上,L2内存大小扩展到1mb。SDM845和更新的设备还包括一个256 KB的矢量紧耦合存储器(VTCM),比L2能维持更高的吞吐量。这个内存可以用作擦除缓冲区,以获得更高的性能。VTCM还需要作为一些选择操作的源和目的地。

        (5)透写(write through)

        透写是一个计算机术语,主要出现在存储器层次结构中,特别是与缓存有关的场景中。透写(Write Through)是指在写入数据时,数据会同时更新到缓存和主内存,这种方式被也称为透写。当选用透写方式时,系统的写磁盘操作并不利用阵列卡的 Cache ,而是直接与磁盘进行数据的交互。在透写场景中,数据同时更新到缓存和内存,这个过程更简单、更可靠。这用于没有频繁写入缓存的情况(写入操作的次数较少)。它有助于数据恢复(在断电或系统故障的情况下)。因为我们必须写入两个位置(内存和缓存),数据写入将经历延迟。然而,尽管解决了不一致的问题,但在写操作中使用缓存的优势却被削弱了,因为使用缓存的全部目的是避免对主内存的多次访问。

5 HVX(Hexagon Vector eXtensions) 的优势

        HVX意味着你可以将视频和摄像机任务从CPU转移到Hexagon DSP,以实现低功耗的快速图像处理。通过HVX可以从CPU上卸载计算机视觉(CV)和视频的处理。 借助HVX内核,Hexagon的设计师增加了宽矢量处理,以实现更高的性能和更低的功耗。

        主要优势:

1. 强大的数据并行处理能力:HVX支持1024bit的指令位宽,这意味着它可以同时处理更多的数据。此外,HVX还支持多线程并行执行,每个线程内又可以同时并行执行四条指令。

2. 低功耗:HVX的设计使其在处理大量数据时能维持低功耗状态,这对于移动设备尤其重要,因为它可以有效地延长设备的电池寿命。

3. 高运行稳定性:HVX的设计理念和技术保证了其在运行时的稳定性,即使在处理复杂的计算任务时,也能保证系统的稳定运行。

4. 对AI和CV的良好支持:随着骁龙多核AI引擎的发展,HVX在AI和CV(计算机视觉)领域的优势更加明显。然而,为了充分发挥其在这些领域的潜力,开发者需要熟练掌握HVX的指令。

总的来说,HVX是一种强大而高效的协处理器,它以其优秀的性能和特性,为高通的芯片提供了强大的计算能力。将之前在CPU/GPU上相对费电的任务交给DSP高效的处理。

三、高通cDSP Hexagon HVX SDK环境配置

1 Hexagon HVX 环境

        Qualcomm对所有开发者免费开发CDsp的开发工具,真机测试只需要工具签名即可。未来的Qualcomm释放的芯片更广泛的支持unsignedPD的形式,即不需要签名就可以真机调试CDsp,但是部分的高性能功能不能使用。Hexagon CDsp性能非常强大,但是对高性能编程的要求很高。Hexagon Cdsp支持c语言,汇编混合编程,对于不擅长c语言和汇编的开发者也是可以使用c++快速移植c++算法源码,先做到分担一些CPU的负载的功效。

2 下载工具链

        Qualcomm官网提供了有关Hexagon SDK,以及相关的Hexagon 文档说明。

https://developer.qualcomm.com/software/hexagon-dsp-sdk/tools

./qualcomm_hexagon_sdk_2_0_eval.bin 执行,安装 Hexagon工具链

        安装完成后找到setup_sdk_env.sh 文件,配置Hexagon cDSP环境,如下:

cd ~/

vi ~/.bashrc

        在bashrc中添加:

source /home/hubery/Qualcomm/Hexagon_SDK/2.0/setup_sdk_env.sh

        这样就配置好了Hexagon cDSP的环境。

3 签名

        对于绝大多数的Qualcomm DSP 需要进行签名,调用比较丰富的Hexagon CDsp。

        在Android上签名如下:

On Android

----------

- First discover your device's serial number. The below steps will print out

the device serial number. Example: 0x12345678

. adb push \tools\elfsigner\getserial /data/

. adb shell chmod 777 /data/getserial

. adb shell /data/getserial

- Next generate a test signature based on that serial number and push it

to the device. The test signature is discovered on boot so a reboot is required.

. cd

. source ./setup_sdk_env.sh

. python \tools\elfsigner\elfsigner.py -t 0x

. adb push testsig-0x /system/lib/rfsa/adsp/

. adb reboot

. adb wait-for-device

- The above steps are captured in the following script:

. \tools\scripts\testsig.sh

 4 参考

        1 高通开发者工具介绍

        2 高通cDSP简单编程例子

我的分享也就到此结束啦 如果我的分享也能对你有帮助,那就太好了! 若有不足,还请大家多多指正,我们一起学习交流! 未来的富豪们:点赞→收藏⭐→关注,如果能评论下就太惊喜了! 感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: