面向深度學(xué)習(xí)平臺(tái)的內(nèi)存管理器的設(shè)計(jì)與實(shí)現(xiàn)
發(fā)布時(shí)間:2020-05-17 21:42
【摘要】:深度學(xué)習(xí)在圖像識(shí)別、語音識(shí)別、機(jī)器翻譯等領(lǐng)域取得了巨大的成功,產(chǎn)生了巨大的社會(huì)和經(jīng)濟(jì)效益。在內(nèi)存管理方面,深度學(xué)習(xí)應(yīng)用仍然使用傳統(tǒng)的內(nèi)存管理方法,而傳統(tǒng)領(lǐng)域的內(nèi)存管理只包括CPU主機(jī)內(nèi)存的管理,沒有包括GPU設(shè)備內(nèi)存的管理,造成管理分散,使用成本增加。傳統(tǒng)領(lǐng)域的內(nèi)存管理為了兼顧各種應(yīng)用,在深度學(xué)習(xí)應(yīng)用中性能差,并且由于技術(shù)保密的原因,沒有辦法實(shí)現(xiàn)自主可控。迫切需要一種能夠高效管理異構(gòu)內(nèi)存的分配器。本論文針對(duì)深度學(xué)習(xí)應(yīng)用,設(shè)計(jì)和開發(fā)了一個(gè)管理異構(gòu)內(nèi)存的內(nèi)存分配器,取名為MADL(memory allocator for Deep Learning)。包括了對(duì)CPU主機(jī)內(nèi)存的管理和對(duì)GPU設(shè)備內(nèi)存的管理,提供了統(tǒng)一的接口,屏蔽了不同內(nèi)存的差異,使用戶不需要掌握太多底層細(xì)節(jié)的情況下就能夠使用。同時(shí),MADL結(jié)合實(shí)際的深度學(xué)習(xí)應(yīng)用使用大內(nèi)存對(duì)象的特征,優(yōu)化了對(duì)大內(nèi)存對(duì)象的管理,并采用內(nèi)存池技術(shù)在用戶態(tài)實(shí)現(xiàn)對(duì)內(nèi)存的管理,大大提高了內(nèi)存分配的效率。經(jīng)過權(quán)衡采用首次適應(yīng)法來管理內(nèi)存,面對(duì)首次適應(yīng)法尋找合適的空閑內(nèi)存需要線性查找,通過建立簡單索引大幅度的減少了空閑內(nèi)存塊的查找的時(shí)間,提升了分配性能。MADL可以運(yùn)行在Windows,類Unix,Android等操作系統(tǒng)上,可移植性非常好。并且設(shè)計(jì)和實(shí)現(xiàn)了全新的異構(gòu)內(nèi)存管理的架構(gòu),該架構(gòu)具有良好的穩(wěn)定性和可維護(hù)性。測(cè)試發(fā)現(xiàn)相比于傳統(tǒng)的內(nèi)存管理器,在分配時(shí)間上,MADL在CPU主機(jī)內(nèi)存的分配和回收速度上提升了15~20%,而在GPU設(shè)備內(nèi)存的分配和回收上則提升了17~30%;在內(nèi)存使用率上,MADL在CPU主機(jī)內(nèi)存使用率提升了2~5%,在GPU設(shè)備內(nèi)存的使用率上則提升了10~20%?傮w而言,MADL的性能優(yōu)于傳統(tǒng)分配器,達(dá)到了設(shè)計(jì)目標(biāo)。
【圖文】:
使用資源必須向核心態(tài)申請(qǐng),應(yīng)用程序代碼運(yùn)行在用戶態(tài)。如圖2-1 所示,用戶態(tài)程序進(jìn)入核心態(tài)可以通過系統(tǒng)調(diào)用、中斷、信號(hào)等,但是用戶態(tài)和核心態(tài)的切換十分耗時(shí),所以往往避免直接使用系統(tǒng)調(diào)用,而是通過庫的形式對(duì)系統(tǒng)調(diào)用進(jìn)行包裝,減少系統(tǒng)調(diào)用的次數(shù)。通過段、頁機(jī)制每個(gè)程序都會(huì)有自己的地址空間,往往會(huì)把內(nèi)核態(tài)地址映射成自己地址空間的一部分。32位機(jī)器上,,在 Linux 系統(tǒng)中核心態(tài)占據(jù) 1GB 的虛擬內(nèi)存而用戶態(tài)占據(jù)其余的3GB 內(nèi)存,Windows 系統(tǒng)中內(nèi)核態(tài)則占據(jù) 2GB。在 64 位機(jī)器上,因?yàn)橛懈蟮牡刂房臻g,核心態(tài)所占用的內(nèi)存要遠(yuǎn)大于 32 位機(jī)器上所占內(nèi)存。
如圖2-2 所示,下面將分別簡要介紹。代碼段:又稱正文段,就是程序中的可執(zhí)行部分存放的內(nèi)存區(qū)域,直觀理解代碼段就是函數(shù)堆加組成的。代碼段可以被多個(gè)程序共享,代碼段為只讀不能被修改。初始化的數(shù)據(jù)段:也被稱為數(shù)據(jù)段、靜態(tài)數(shù)據(jù)區(qū)、靜態(tài)區(qū),它包含了程序中需要明確地賦初值的變量。數(shù)據(jù)段還可以進(jìn)一步分為只讀數(shù)據(jù)段和可讀寫數(shù)據(jù)段,比如數(shù)據(jù)段中的字符串常量就是只讀的。未初始化的數(shù)據(jù)段:未初始化的數(shù)據(jù)段經(jīng)常被稱作 BSS 段,意思是“由符號(hào)開始的塊”(block started by symbol)。BSS 段的特點(diǎn)就是被初始化為 0 或者空指針,BSS 段本質(zhì)上也是屬于數(shù)據(jù)段,BSS 段就是被初始化為 0 的數(shù)據(jù)段。但是在程序中沒有被保存,在程序運(yùn)行時(shí)動(dòng)態(tài)的分配空間。堆空間:堆空間是動(dòng)態(tài)內(nèi)存申請(qǐng)的內(nèi)存塊所在的位置。堆空間的起始位置在 BBS 段的末尾,向高地址空間擴(kuò)展。Linux 上堆空間可以通過系統(tǒng)調(diào)用 brk來向上擴(kuò)展。在多線程情況下,堆空間是被共享的,每個(gè)線程都能夠訪問堆空間。?臻g:棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),?臻g先分配到的內(nèi)存則最后釋放。?臻g的棧底一般在高地址空間,棧頂和堆空間連接在一起的,然而增長方向和堆空間剛好是相反的。堆是向上擴(kuò)展
【學(xué)位授予單位】:哈爾濱工業(yè)大學(xué)
【學(xué)位級(jí)別】:碩士
【學(xué)位授予年份】:2018
【分類號(hào)】:TP333;TP18
本文編號(hào):2669224
【圖文】:
使用資源必須向核心態(tài)申請(qǐng),應(yīng)用程序代碼運(yùn)行在用戶態(tài)。如圖2-1 所示,用戶態(tài)程序進(jìn)入核心態(tài)可以通過系統(tǒng)調(diào)用、中斷、信號(hào)等,但是用戶態(tài)和核心態(tài)的切換十分耗時(shí),所以往往避免直接使用系統(tǒng)調(diào)用,而是通過庫的形式對(duì)系統(tǒng)調(diào)用進(jìn)行包裝,減少系統(tǒng)調(diào)用的次數(shù)。通過段、頁機(jī)制每個(gè)程序都會(huì)有自己的地址空間,往往會(huì)把內(nèi)核態(tài)地址映射成自己地址空間的一部分。32位機(jī)器上,,在 Linux 系統(tǒng)中核心態(tài)占據(jù) 1GB 的虛擬內(nèi)存而用戶態(tài)占據(jù)其余的3GB 內(nèi)存,Windows 系統(tǒng)中內(nèi)核態(tài)則占據(jù) 2GB。在 64 位機(jī)器上,因?yàn)橛懈蟮牡刂房臻g,核心態(tài)所占用的內(nèi)存要遠(yuǎn)大于 32 位機(jī)器上所占內(nèi)存。
如圖2-2 所示,下面將分別簡要介紹。代碼段:又稱正文段,就是程序中的可執(zhí)行部分存放的內(nèi)存區(qū)域,直觀理解代碼段就是函數(shù)堆加組成的。代碼段可以被多個(gè)程序共享,代碼段為只讀不能被修改。初始化的數(shù)據(jù)段:也被稱為數(shù)據(jù)段、靜態(tài)數(shù)據(jù)區(qū)、靜態(tài)區(qū),它包含了程序中需要明確地賦初值的變量。數(shù)據(jù)段還可以進(jìn)一步分為只讀數(shù)據(jù)段和可讀寫數(shù)據(jù)段,比如數(shù)據(jù)段中的字符串常量就是只讀的。未初始化的數(shù)據(jù)段:未初始化的數(shù)據(jù)段經(jīng)常被稱作 BSS 段,意思是“由符號(hào)開始的塊”(block started by symbol)。BSS 段的特點(diǎn)就是被初始化為 0 或者空指針,BSS 段本質(zhì)上也是屬于數(shù)據(jù)段,BSS 段就是被初始化為 0 的數(shù)據(jù)段。但是在程序中沒有被保存,在程序運(yùn)行時(shí)動(dòng)態(tài)的分配空間。堆空間:堆空間是動(dòng)態(tài)內(nèi)存申請(qǐng)的內(nèi)存塊所在的位置。堆空間的起始位置在 BBS 段的末尾,向高地址空間擴(kuò)展。Linux 上堆空間可以通過系統(tǒng)調(diào)用 brk來向上擴(kuò)展。在多線程情況下,堆空間是被共享的,每個(gè)線程都能夠訪問堆空間。?臻g:棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),?臻g先分配到的內(nèi)存則最后釋放。?臻g的棧底一般在高地址空間,棧頂和堆空間連接在一起的,然而增長方向和堆空間剛好是相反的。堆是向上擴(kuò)展
【學(xué)位授予單位】:哈爾濱工業(yè)大學(xué)
【學(xué)位級(jí)別】:碩士
【學(xué)位授予年份】:2018
【分類號(hào)】:TP333;TP18
【參考文獻(xiàn)】
相關(guān)期刊論文 前3條
1 何煦嵐;何曉嵐;;基于多鏈表結(jié)構(gòu)的嵌入式系統(tǒng)內(nèi)存管理[J];計(jì)算機(jī)應(yīng)用與軟件;2008年04期
2 劉磊;;Linux內(nèi)核內(nèi)存池實(shí)現(xiàn)研究[J];科學(xué)技術(shù)與工程;2007年12期
3 張瓊聲;劉冬萍;;操作系統(tǒng)內(nèi)核內(nèi)存分配算法的分析與性能評(píng)價(jià)[J];計(jì)算機(jī)系統(tǒng)應(yīng)用;2007年01期
相關(guān)博士學(xué)位論文 前1條
1 李小強(qiáng);CPU-GPU異構(gòu)系統(tǒng)上的高層編程模型及其編譯優(yōu)化技術(shù)[D];中國科學(xué)技術(shù)大學(xué);2013年
相關(guān)碩士學(xué)位論文 前1條
1 婁云龍;用戶態(tài)內(nèi)存管理關(guān)鍵技術(shù)研究[D];哈爾濱工程大學(xué);2014年
本文編號(hào):2669224
本文鏈接:http://sikaile.net/guanlilunwen/yunyingzuzhiguanlilunwen/2669224.html
最近更新
教材專著