美文网首页mxnet
MxNet源码解析(3) engine

MxNet源码解析(3) engine

作者: Junr_0926 | 来源:发表于2018-09-14 17:32 被阅读0次

    1. 前言

    2. Engine

    在MXNet的官网对Engine有一定的介绍,首先我们要知道Engine是用于并行化计算过程的。push用于将一个待执行的函数送给engine运行,其中read_vars表示该函数的输入,write_vars表示该函数的输出。这样整个计算过程可以表示为一个有向无环图。使用特定的算法就可以规划出图的计算顺序,具体的计算的完成,可以通过线程池等方式来进行。

    3. engine.h

    Engine类声明在文件include/engine.h中。

    • NewVariable:返回一个VarHandle,它是一个指向Var类型的指针,Var是在engine命名空间中用于表示一个变量的数据结构。
    • NewOperator:返回一个OperHandle,它的参数:待执行函数,函数签名void(RunContext, CallbackOnComplete),该函数输入变量,输出变量,函数的性质(表示函数的类型,例如复制,计算),该op的名字,以及是否是一个等待的op。
    • Push:将一个oppush给engine
    • PushAsyncFn:将一个函数push给engine
    • WaitForVar:等待一个变量完成对它运算的op
    • Get:返回单例engine
    • PushSync:将一个函数push给engine,该方法就是将PushAsyncFn的函数和函数的回调函数一起执行。
    • CreateCallback:返回一个回调函数,类型是CallbackOnComplete
    • DeduplicateVarHandle:去掉重复的变量,去掉输入变量中出现在输出变量中的

    4. naive_engine.h

    naive顾名思义,最‘简单’的engine的实现。

    • NaiveOpr:定义了在engine中,一个操作应该具备的结构:Fn 待运行函数,const_vars 输入,mutable_vars 输出,prop 函数的类型,opr_name 操作的名字。
    • NewOperator:返回一个操作,完成结构的转换
    • Push:将一个op push给engine。

    5. threaded_engine.h

    • OprBlock:表示一个push给engine的操作,包含了一个特定的操作,一个wait值表示需要等待的任务数,运行环境context
    • VersionedVarBlock:var的version信息表示该var被操作改变的情况。该结构体是ThreadVar链表的元素。OprBlock* trigger表示出发的操作。
    • ThreadedVar:链表,表示一组需要执行的操作。
      • AppendReadDependency:将一个对该变量进行读的操作加入规划
      • AppendWriteDependency
      • read_to_read():是否完成了所有的写操作
      • head_:头节点
      • pending_write_:下一个要进行的写操作
    • ThreadedOpr:用在OprBlock
      • fn:待执行函数
      • const_vars, mutable_vars:表示输入输出
    • ThreadedEngine:所有的ThreadedEngine的基类。它规划所有操作,并调用PushToExecute来执行任务。
      • ExecuteOprBlock

    6. stream_manager.h

    使用Round-Robin算法来分发GPU的streams。

    相关文章

      网友评论

        本文标题:MxNet源码解析(3) engine

        本文链接:https://www.haomeiwen.com/subject/voysgftx.html