【Atlas500】劝退(五)——基于Hellodavinci样例atlas编程梳理

1. 整体流程

  1. 初始化一个graphManager类,用做主流程的管理
  2. Ascend 310芯片初始化
  3. 读取Graph配置文件,初始化Engine。这一步会自动初始化graph.config配置文件中的各个engine
  4. 数据的流动部分
    • Graph 外传数据到 engine 的输入
    • Engine 间的数据传输与处理
    • 将处理得到的结果:Graph 内的 Engine 输出端口传输数据到 Graph 外
  5. 用Graph::SetDataRecvFunctor将推理结果返还给用户

附图
在这里插入图片描述
下图是我理解绘画的,整个编程和数据的流动是安装箭头的方法进行的。
在这里插入图片描述

2. 杂谈

  1. device的engines都有动态链接库,需要从host 将编译好的库文件copy到device侧。
   engines {
    id: 200
    engine_name: "HelloDavinci"
    side: DEVICE
    thread_num: 1
    so_name: "./libDevice.so"
    ai_config {
    }
  1. Graph主要功能是描述业务包含的Engine及Engine间的数据传输关系,Matrix框架通过Protobuf定义了Graph的数据结构,用户以配置文件的方式来定义Graph配置。
    graphmanager主要用到三个接口函数
    在这里插入图片描述在这里插入图片描述
  2. Engine
  • Engine是Matrix框架定义的业务软件基本功能单元,用户可继承Matrix定义的Engine模板类,创建业务中各功能模块的Engine(读取输入文件,图像预处理,神经网络推理,推理结果后处理,host/device数据传输等),详情请参考文档《Atlas 500 MatrixAPI参考》。每一个Engine定义了函数Init()和Process(),在Graph初始化时,会自动运行Init(),从而实现Engine的参数初始化(包含内存分配和模型加载)。Process()接口实现数据的传输和业务逻辑。

    所以,在demo中并没有显示的初始化各Engine

  • 一个graph一般有多个engine,engine之间的协作需要进行数据的传输,需要手动实现。

  • device的Engine不知道如何debug

  • Graph::SetDataRecvFunctor该接口需要与DataRecvInterface::RecvData接口配合使用

  • 该例子中没有graph->sentdata和graph->RecvData部分的实例

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值