更新时间:2021-10-26 GMT+08:00
分享

配置Engine

Engine是Matrix框架定义的业务软件基本功能单元,用户可继承Matrix定义的Engine模板类,创建业务中各功能模块的Engine(读取输入文件,图像预处理,神经网络推理,推理结果后处理,host/device数据传输等),详情请参考《Matrix API参考》。每一个Engine定义了函数Init()和Process(),在Graph初始化时,会自动运行Init(),从而实现Engine的参数初始化(包含内存分配和模型加载)。Process()接口实现数据的传输和业务逻辑。

  • 常用接口介绍如表1所示。
    表1 接口说明

    接口

    描述

    说明

    HIAI_DEFINE_PROCESS(inputPortNum, outputPortNum)

    端口数量(Engine的数据输入和输出数据通道)

    Matrix框架为每一端口创建了队列用于缓存数据,Engine间端口的传输关系在Graph配置文件内指定,请参考Graph关键字

    HIAI_StatusT Engine::Init(const AIConfig &config, const vector<AIModelDescription>&modelDesc)

    Engine初始化

    在创建Graph时此接口会被调用,初始化Engine,Graph配置文件中定义的ai_config会传给函数入参config,用户可在配置文件内添加自定义item,并在初始化函数内使用此item。

    HIAI_IMPL_ENGINE_PROCESS(name, engineClass, inPortNum)

    Engine的Process,在Device侧对应线程

    由数据驱动,即输入端口收到数据后,由框架启动Process运行,如果设置了多个输入端口,每一个输入端口接收到数据后,都会触发一次Process运行,因此如果业务处理依赖多个输入,用户需自行实现多输入的同步逻辑。框架已将Process封装成宏定义,用户实现该宏定义即可。

  • Engine读取输入端口的数据,框架支持最大16个输入端口(arg0~arg15),用户可直接使用,从业务应用角度看,数据传输的是共享指针,传输代码示例如下:
    // 发送Engine:传输自定义数据USER_DEFINE_TYPE到目标engine
    std::shared_ptr<USER_DEFINE_TYPE > streamData= std::make_shared< USER_DEFINE_TYPE >();
    // 对streamData进行赋值后,调用Senddata发送,发送需要将共享指针转换为void类型
    hiai::Engine::SendData(0, " USER_DEFINE_TYPE ", std::static_pointer_cast<void>(deviceStreamData));
    // 接收Engine:结构数据,并将数据转换为用户自定义类型USER_DEFINE_TYPE
    std::shared_ptr< USER_DEFINE_TYPE > inputArg = std::static_pointer_cast< USER_DEFINE_TYPE >(arg0);
分享:

    相关文档

    相关产品