mxnet 源碼閱讀 6

來源:互聯網
上載者:User

標籤:clu   memory   contex   gpu   相關   pup   size_t   ice   storage   

mxnet/src/storage/storage.cc

mxnet/include/mxnet/storage.h

mxnet/include/mxnet/base.h

 

以上三個檔案共同描述了Storage虛類以及其執行個體化的結果,其中storage.h中定義了Storage抽象介面(虛函數) Alloc Free DirectFree 以及靜態方法Get ,其中定義了以後用以操作和管理記憶體的Handle控制代碼,其內部有兩個部分組成一個是描述記憶體本身屬性的包括地址 void *dptr 和大小 size_t size 以及描述記憶體所在裝置的Context ctx; 其中Context結構在base.h中定義,其成員有兩個一個是 dev_type (1-CPU 2-GPU 3-CPU_PINNED ) 另一是 dev_id ,同時在base中還有一些構建Context的相關函數,如GPU(...) CPU(...) CPUPinned(,,,) FromString(...) 等可以直接構建相關裝置環境。

StorageImpl是 Stroage的具體繼承類介面有 返回Handle 的 Alloc 函數 Free 函數 和 DirectFree函數,同時多了靜態函數 ActivateDevice用以切換GPU裝置,CPU裝置其實不用切換,所以實現也只是直接break而已。

從Alloc的實現看,其申請的記憶體包括 CPU記憶體,CPUpinned 記憶體 和 GPU記憶體池,沒有單純的申請一塊GPU記憶體的介面。

同時總結一下mxnet/src/storage 目錄中檔案和類的情況:

cpu_device_storage.h gpu_device_storage.h pinned_memory_storage.h 分別構建了負責CPU GPU 和 CPUpinned 記憶體申請的類。

storage_manager.h 是純粹的抽象的介面類。naive_storage_manager.h 和  pooled_storage_manager.h 是抽象類別storage_manager是具體實現。實質使用是通過C++多態,分別管理了 CPU(包括CPUpinned)和GPU(記憶體池)。

 

整個storage目錄中的內容在mxnet架構中屬於底層模組python等介面涉及不到該介面。

總結起來講,其提供了以Handle為操作的控制代碼的記憶體申請和釋放介面,即 Handle Alloc(size_t size, Context ctx),void Free(Handle handle),void DirectFree(Handle handle) 函數,統一了CPU GPU 介面。CPU 和CPUpinned 是隨時申請隨時釋放模式,GPU記憶體採用記憶體池的模式。

猜測gpu_device_storage.h是為了以後臨時資源的申請之用。

mxnet 源碼閱讀 6

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.