×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

中级课程—SDK 应用开发(4节)(本文附课后小练习答案) 三叶虫2023-02-23 17:19:01 回复 2 查看 社区交流 干货资源
中级课程—SDK 应用开发(4节)(本文附课后小练习答案)
分享到:

image.png

SDK 应用开发系列课程已更新,以下为简介及课后练习答案:

一、《寒武纪 CNCV 使用介绍》

简介介绍 CNCV 的功能特点及使用场景、通用基础概念、编程模型和常见应用场景的编程示例等。

链接寒武纪 CNCV 使用介绍寒武纪开发者社区 (cambricon.com)

课后习题:

Q1、简述 CNCV 的主要功能和特点。

Q2、CNCV 支持多 batch planar 图像的算子接口输入/输出图像数据是如何摆放的?

Q3、回顾 CNCV 编程模型,给出单算子调用的流程。

答案:

A1、CNCV 是个基于 MLU 的图像、视觉算法加速库。主要功能特点:提供多种应用场景下的常用图像算子;支持业界标准的图像概念如图像格式、颜色空间等;结合 MLU 硬件架构特点,对算子进行了高度优化;提供 C 风格接口,端云一体的接口和编程模型。

A2、采用级 MLU 数据指针形式,实质为 MLU 指针数组。多 batch 的 planar 图像依次按照每个 batch 的 plane 数据指针摆放。以n batch 的 NV12 为例:|img_0_y|img_0_uv|img_1_y|img_1_uv|...|img_n_y|img_n_uv|

A3、编程模型要点:主机端进行设备资源的申请、管理与释放,设备端负责执行 CNCV 算子的计算任务。单算子调用流程:

        i.           初始化设备信息、创建任务队列;创建并初始化 CNCV 句柄

       ii.            

a)      、准备调用 CNCV 算子接口所需参数:包括 workspace 内存、输入输出图像内存、MLU数据指针数组等,并分别做将 CPU 上的图像数据、MLU数据指针数组拷贝至 MLU 上;

b)      、连续调用 CNCV 算子接口

c)      、同步任务队列获取计算后的结果

     iii.           释放 CPU/MLU 内存、销毁 CNCV 句柄、销毁任务队列

二、《寒武纪 CNCodec-V3 使用介绍》

简介:讲解 Cambricon CNCodec-V3 视频编解码的过程,并通过简单示例展示视频编解码流程。

链接:寒武纪 CNCodec-V3 使用介绍 – 寒武纪开发者社区 (cambricon.com)

课后习题

Q1简单描述 Cambricon CNCodec-V3 视频解码的流程。

Q2简述异步编码和同步编码的区别。

答案

A1

step 1,设计解码事件的回调函数cncodecCallback_t;

step 2,调用cncodecDecCreate接口创建一个异步模式的解码器实例;

step 3,调用cncodecDecSetParams接口配置解码器参数。对于视频解码,也可以先不调用该接口,在cncodecCallback_t回调函数处理CNCODEC_EVENT_SEQUENCE事件时根据解析得到的参数再调用cncodecDecSetParams接口来配置解码器参数

step 4,调用cncodecDecSendStream接口逐块发送数据给解码器解码

step 5,在cncodecCallback_t回调函数中处理CNCODEC_EVENT_NEW_ 事件,获取解码后的数据

step 6,解码最后一帧结束后,需先调用cncodecDecSetEos接口通知解码器实例,CNCodec输出所有数据后通过给cncodecCallback_t回调函数传递CNCODEC_EVENT_EOS事件,通知应用程序解码结束

step 7,解码结束后调用cncodecDecDestroy接口销毁解码器实例

A2

异步解码的数据发送和解码是相互独立的,同步解码中解码需要等一帧数据发送完成后开始,并在该帧视频数据解码结束后发送下一帧数据。

三、《寒武纪 CNStream 使用介绍》

简介:第一讲:CNStream 概述、框架、内置模块和工具;第二讲:示例介绍、二次开发与实验操作。

链接:寒武纪 CNStream – 寒武纪开发者社区 (cambricon.com)

课后习题

1.CNStream的设计理念是什么?

2.Pipeline的主要功能是什么?

3.CN Info保存的信息有哪些?

4.CN Info可以被两个并行模块处理吗,如何做到同步信息?

5.parallelism参数是什么含义?

6.当输入 4 路视频时,当模块的 parallelism为 2 时,数据如何分配?

7.哪个模块可以作为起始模块?

8.如何动态的添加和移除输入流?

9.推理模块由哪几个部分组成?

10.平均性能和实时性能分别代表什么含义?

答案

1. 基于模块和流水线的思想。

2. 搭建 Pipeline;模块管理与调度执行;模块间数据传递;

3.CNData 原图;CNInferObjs推理结果;stream_id;timestamp等。也可在 collection中保存自定义信息。

4. 可以,CN Info以智能指针的形式在模块间流动。不同模块共享一份 CN Info。

当两个模块汇聚时,只有两个模块都处理完后,才会向下游模块传递 CN Info。

5.模块并行度,Pipeline会为每个模块启动 parallelism 数目的线程,执行 TaskLoop,即调用模块的 Process函数。

6.

stream_0 -> TaskLoop0

stream_1 -> TaskLoop1

stream_2 -> TaskLoop0

stream_3 -> TaskLoop1

7. DataSource

8. 在 PipelineStart的情况下,通过 AddSource和 RemoveSource接口动态添加移除输入流。

9. 前处理,推理和后处理。三者并行。但对于1份数据来说,依次进行前处理,推理和后处理。

10. 平均性能代表从进程启动开始到当前时刻的平均性能。 实时性能代表最近一段时间的实时性能,更能体现当前的性能。


版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭