MxNet源碼解析(3) engine

1. 前言

2. Engine

在MXNet的官網(wǎng)對Engine有一定的介紹,首先我們要知道Engine是用于并行化計算過程的。push用于將一個待執(zhí)行的函數(shù)送給engine運行,其中read_vars表示該函數(shù)的輸入,write_vars表示該函數(shù)的輸出。這樣整個計算過程可以表示為一個有向無環(huán)圖。使用特定的算法就可以規(guī)劃出圖的計算順序,具體的計算的完成,可以通過線程池等方式來進行。

3. engine.h

Engine類聲明在文件include/engine.h中。

  • NewVariable:返回一個VarHandle,它是一個指向Var類型的指針,Var是在engine命名空間中用于表示一個變量的數(shù)據(jù)結(jié)構(gòu)。
  • NewOperator:返回一個OperHandle,它的參數(shù):待執(zhí)行函數(shù),函數(shù)簽名void(RunContext, CallbackOnComplete),該函數(shù)輸入變量,輸出變量,函數(shù)的性質(zhì)(表示函數(shù)的類型,例如復(fù)制,計算),該op的名字,以及是否是一個等待的op。
  • Push:將一個oppush給engine
  • PushAsyncFn:將一個函數(shù)push給engine
  • WaitForVar:等待一個變量完成對它運算的op
  • Get:返回單例engine
  • PushSync:將一個函數(shù)push給engine,該方法就是將PushAsyncFn的函數(shù)和函數(shù)的回調(diào)函數(shù)一起執(zhí)行。
  • CreateCallback:返回一個回調(diào)函數(shù),類型是CallbackOnComplete。
  • DeduplicateVarHandle:去掉重復(fù)的變量,去掉輸入變量中出現(xiàn)在輸出變量中的

4. naive_engine.h

naive顧名思義,最‘簡單’的engine的實現(xiàn)。

  • NaiveOpr:定義了在engine中,一個操作應(yīng)該具備的結(jié)構(gòu):Fn 待運行函數(shù),const_vars 輸入,mutable_vars 輸出,prop 函數(shù)的類型,opr_name 操作的名字。
  • NewOperator:返回一個操作,完成結(jié)構(gòu)的轉(zhuǎn)換
  • Push:將一個op push給engine。

5. threaded_engine.h

  • OprBlock:表示一個push給engine的操作,包含了一個特定的操作,一個wait值表示需要等待的任務(wù)數(shù),運行環(huán)境context
  • VersionedVarBlock:var的version信息表示該var被操作改變的情況。該結(jié)構(gòu)體是ThreadVar鏈表的元素。OprBlock* trigger表示出發(fā)的操作。
  • ThreadedVar:鏈表,表示一組需要執(zhí)行的操作。
    • AppendReadDependency:將一個對該變量進行讀的操作加入規(guī)劃
    • AppendWriteDependency
    • read_to_read():是否完成了所有的寫操作
    • head_:頭節(jié)點
    • pending_write_:下一個要進行的寫操作
  • ThreadedOpr:用在OprBlock,
    • fn:待執(zhí)行函數(shù)
    • const_vars, mutable_vars:表示輸入輸出
  • ThreadedEngine:所有的ThreadedEngine的基類。它規(guī)劃所有操作,并調(diào)用PushToExecute來執(zhí)行任務(wù)。
    • ExecuteOprBlock

6. stream_manager.h

使用Round-Robin算法來分發(fā)GPU的streams。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,565評論 0 13
  • 轉(zhuǎn)載自:https://halfrost.com/go_map_chapter_one/ https://half...
    HuJay閱讀 6,475評論 1 5
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,251評論 0 38
  • 看,所有都廢棄了 煙頭詩歌吉他 和結(jié)霜的奶茶 在這個空無一人的房間 是否有人在門口望著 給我個期盼,也望著 寂寞重...
    珂柡閱讀 292評論 0 0
  • 今天正式地想到死亡這個名詞,以死亡的角度假設(shè)了很多場景。人終有一死,可是活到100歲的人我們覺得是壽終正寢,...
    睡不著睡不醒320閱讀 181評論 0 1

友情鏈接更多精彩內(nèi)容