美文网首页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

    1. 前言 2. Engine 在MXNet的官网对Engine有一定的介绍,首先我们要知道Engine是用于并行...

  • mxnet-dep-engine-implemention

    文章为转载 mxnet 官方文档原文: mxnet-dep-engine-implemention作者: yuya...

  • 收藏的网址

    小说类 源码解析源码解析2源码解析3源码解析4 动画处理 在线工具 gradle下载地址 日语学习

  • MxNet源码解析(1) KVStore,pslite源码解析

    1. 前言 从毕业开始工作已经两个多月,这期间相当一部分的时间都用在了对MxNet的学习上,而在MxNet的众多部...

  • MxNet源码解析(2) symbol

    1. 前言 我们在训练之前,先建立好一个图,然后我们可以在这个图上做我们想做的优化,这种形式称为Symbolic ...

  • MxNet源码解析(4) executor

    1. 前言 executor在MXnet中扮演着连接各个组件的作用,它根据symbol构建graph,它通过方法f...

  • MxNet源码解析(6) registry

    1. 前言 在MXNet中处处都用到了registry,因此有必要了解一下它的实现和用法。 2. registry...

  • MxNet源码解析(5) io

    1. 前言 数据的读取很大程度上决定了代码运行的快慢。先从python端的data io开始。在MXNet的pyt...

  • 2019-02-19

    Ubuntu16.04 源码安装MXNet [参考官方教程](https://mxnet.incubator.ap...

  • Flink 源码解析系列文章(持续更新ing)

    1、Flink 源码解析 —— 源码编译运行 2、Flink 源码解析 —— 项目结构一览 3、Flink 源码解...

网友评论

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

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