一、骁龙历代产品

在2013年之前,骁龙处理器分为S1,S2,S3,S4四个层级,以区分不同的四代产品。
1. 骁龙S1(2007-2011):MSM7225/7265采用ARM v6架构、单CPU核心,45nm制程,320MHz的Hexagon QDSP5,未集成GPU;2008年QSD8250/8650发布,Scorpion核心(ARM v7架构),Adreno 200 GPU,600MHz的Hexagon QDSP6。奠定S2/S3形态;
2. 骁龙S2:由MSM8255/8655、MSM7230/7630和APQ8055构成。均采用了Scorpion CPU、Adreno 204 GPU、256MHz Hexagon QDSP5以及支持双通道333MHz LPDDR2内存,45nm制程,功耗降低。MSM8255处理器:HTC Incredible S、HTC Desire S、索尼爱立信LT15i、LT18i、OPPO R807、诺基亚Lumia 800等大多数的WP7系统手机;
3. 骁龙S3:进入双核+1080P时代,产品线短,仅有MSM8260/8660和APQ8060三个版本(MSM8260如HTC Sensation、HTC Sensation XE、索尼LT26i、OPPO X905、小米手机),差异在于网络制式,相同点是均为双核Scorpion CPU、Adreno 220 GPU和400MHz Hexagon QDSP6。骁龙S3与骁龙S2、骁龙S1构成了2010年、2011年间QualcommSoC高中低搭配。
4. 骁龙S4:
1. Play系列:双核MSM8225/8625和四核MSM8225/8625Q,45nm,CPU为Cortex-A5核心与Adreno 203 GPU;
2. Plus系列:双核Krait CPU、Adreno 205 GPU;
3. 高端Pro,Prime系列:MSM8260A/8660A拥有双核Krait CPU、双核/四核Adreno 320。APQ8064拥有高性能四核心Krait CPU。
这一部分虽然只是罗列,但是能看出S1~S4的每一代都几乎都是基于ARM架构+自家DSP+GPU的异构平台。

二、骁龙处理器

后来的骁龙处理器,主要包括:800系列、700系列、600系列、400系列和200系列处理器。
800系列特点:
1. 该系列定位高端。截至目前,855是高通最新的旗舰级手机处理器;
2. 9款:855/845/835/821/820/810/808/805/801/800;
3. Krait架构、ARM公版架构、定制的Kyro架构:
1. 800、801、805都基于Krait架构:该架构基于ARMv7-A指令集、自主设计采用28纳米工艺的全新处理器微架构;
2. 810使用64位ARM公版架构;
3. 骁龙820采用定制架构Kryo:高通推出的首款定制设计的64位CPU架构。821比820性能提升高达10%,此外Hexagon™ 680 DSP 带来性能、电池续航的优化。
其它系列:
• 700系列:高端级,支持人工智能引擎(我猜应该是指SNPE)、功耗优化;
• 600系列:高端级,手机、平板电脑、嵌入式等。15款:670/636/632/660/653/630/626/652/650/617/616/615/610/602A/600;
• 400系列:大众级,10款:450/439/429/427/435/430/425/415/412/400;
• 200系列:入门级,4款:212/210/208/200。
1.3 支持SNPE的处理器
支持SNPE的骁龙处理器列表如下:
• 9款800系列中的5款(855/845/835/821/820);
• 1款700系列(710);
• 15款600系列中的6款(660/652/636/630/625/605);
• 1款400系列(450)。

三、SNPE的特点与工作流

特点:
支持自定义网络
• 支持Snapdragon CPU、Adreno GPU、Hexagon DSP上做推理计算
• 支持x86 Linux系统下对网络执行Debug
• 支持将Caffe, Caffe2, ONNX和TensorFlow模型转换为SNPE的DLC模型
• 支持Hexagon DSP对DLP模型做8位定点的推理计算
• 支持网络Debug和性能分析的工具
• 支持通过C++或Java对模型集成为应用

工作流:
使用SNPE部署模型的一般工作流程分为如下图中所描述的两个阶段:第一阶段由Caffe/Caffe2/TensorFlow完成模型训练;第二阶段将模型部署到高通设备上;部署阶段前,先将模型用SNPE提供的工具,将模型转换为SNPE特有的DLC(Deep Learning Container)文件格式,转换好后就可在骁龙的CPU/GPU/DSP核心上执行推理了。具体步骤如下:
1、将模型转换为SNPE支持的DLC格式;
2、量化是可选的,若部署到Hexagon DSP Runtime或者CPU-FXP即CPU定点,需要离线地对模型做8位定点量化(DSP也可以免去这一离线量化的步骤),离线量化需指定数据;
3、为模型准备用于测试的输入数据:用./models/alexnet/scripts/下的脚本,转换jpg图像文件为raw格式,生成raw_list.txt文件(注:SNPE的输入数据格式是BGR,且每个像素点值BGR是连续的,即NHWC格式。

四、Snapdragon NPE Runtime

全局的Snapdragon NPE Runtime,其包含CPU、GPU和DSP,SNPE软件架构包含:
1、DL Container Loader : 读取由snpe-framework-to-dlc转换工具转换得到的SNPE模型格式的DLC文件;
2、Model Validation : 验证DLC文件与runtime是否匹配(或者说,该支持runtime是否支持该模型),因为在SNPE中,不同Runtime实现了不同的层,并不是说可以拿GPU或者DSP跑通整个网络,可能部分层不支持,需要切换到CPU上,具体不同Runtime支持的层可参考文档Supported Network Layers小节;
3、Runtime Engine : 在需要的rumtime(s)上执行模型,也包括汇总性能分析数据与用户自定义层;
1)Partitioning Logic : 处理模型,也包括用户自定义层、验证信息、 也可对模型分割;
2)对于用户自定义层(UDL),会在执行UDL前后打断执行过程;
4、fallback mode(备选模式):该模式默认开启,若subnets也就是部分名在不同的runtime上执行如DSP,但是遇到了DSP目前还没实现的层,这时候就会交给CPU来执行,结束后继续交还给Target runtime执行。
5、Compute Runtimes:
1)CPU Runtime:支持float和int8;
2)GPU Runtime:支持float和float16的混合精度;
3)DSP Runtime:基于Q6调度Hexagon DSP来执行模型,Q6会去调用Hexagon NN在HVX(Hexagon Vector eXtensions)上执行计算任务(这里DSP runtime和AIP runtime很像,关于Q6、HVX、HTA关系见后文AIP runtime小节);
4)AIP Runtime:用Hexagon DSP借助Q6,Hexagon NN和HTA执行模型。 注:另外,在前文设备列表的DSP和AIP部分,可以看到DSP和AIP要么是cDSP或者aDSP。