MxNet源码解析(3) engine

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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,742评论 0 13
  • 转载自:https://halfrost.com/go_map_chapter_one/ https://half...
    HuJay阅读 11,473评论 1 5
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,759评论 0 38
  • 看,所有都废弃了 烟头诗歌吉他 和结霜的奶茶 在这个空无一人的房间 是否有人在门口望着 给我个期盼,也望着 寂寞重...
    珂柡阅读 1,850评论 0 0
  • 今天正式地想到死亡这个名词,以死亡的角度假设了很多场景。人终有一死,可是活到100岁的人我们觉得是寿终正寝,...
    睡不着睡不醒320阅读 1,351评论 0 1

友情链接更多精彩内容