本發(fā)明涉及內(nèi)存管理技術(shù)領(lǐng)域,尤其涉及計算組件的內(nèi)存資源管理方法與系統(tǒng)。
背景技術(shù):
現(xiàn)場可編程門陣列(fieldprogrammablegatearray,fpga)是在可編程陣列邏輯(programmablearraylogic,pal)、門陣列邏輯(gatearraylogic,gal)、可編程邏輯器件(programmablelogicdevice,pld)等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。fpga具有邏輯資源、存儲資源、算法模塊和嵌入式硬核模塊等豐富的資源,并具備高性能、高靈活性等特點?;谝陨咸攸c,利用fpga實現(xiàn)快速準(zhǔn)確的計算已經(jīng)成為研究熱點。除了fpga,顯卡上的圖形處理器(graphicprocessingunit,gpu)因其內(nèi)部分布可應(yīng)對并行高運算密度大問題的算術(shù)邏輯單元,已經(jīng)被用來解決復(fù)雜的計算問題。
這些fpga、顯卡或?qū)S酶咝阅苡嬎憧ǖ扔嬎憬M件都會配備一定容量的存儲器為計算、邏輯處理等過程提供內(nèi)存資源。上述存儲容量通常是受限的,如何合理高效地進(jìn)行內(nèi)存資源的管理以滿足大存儲量的計算是上述計算組件面臨的問題。
在現(xiàn)有技術(shù)中,內(nèi)存資源管理多以字節(jié)(byte)為單位進(jìn)行分配與釋放,且計算與結(jié)果公用內(nèi)存資源。以字節(jié)為單位進(jìn)行內(nèi)存資源管理容易出現(xiàn)內(nèi)存資源碎片,無形中降低了內(nèi)存資源的使用效率。而計算使用內(nèi)存資源與結(jié)果使用內(nèi)存資源公用內(nèi)存資源使得內(nèi)存資源不能得到合理的管理和使用。
技術(shù)實現(xiàn)要素:
針對上述問題,本發(fā)明的目的在于提高內(nèi)存資源的使用效率,以及解決計算與結(jié)果公用內(nèi)存資源的問題。
為達(dá)到上述發(fā)明目的,本發(fā)明提供的技術(shù)方案如下:
一種內(nèi)存資源管理方法,所述方法由一個計算設(shè)備執(zhí)行,所述計算設(shè)備包括至少一個處理器和至少一個存儲媒介,其特征在于,所述方法包括:將計算內(nèi)存資源劃分為一個或多個內(nèi)存塊;接收使用所述計算內(nèi)存資源的請求;根據(jù)所述請求確定請求內(nèi)存資源的大??;以及根據(jù)所述請求內(nèi)存資源的大小分配所述計算內(nèi)存資源。
一種內(nèi)存資源管理系統(tǒng),其特征在于,所述內(nèi)存資源管理系統(tǒng)包括:處理模塊,用于作計算或邏輯處理;內(nèi)存模塊,用于為所述處理模塊的所述計算或所述邏輯處理提供計算內(nèi)存資源;內(nèi)存管理模塊,用于對所述內(nèi)存模塊的所述計算內(nèi)存資源進(jìn)行管理,所述對所述內(nèi)存模塊的所述計算內(nèi)存資源進(jìn)行管理包括:將所述計算內(nèi)存資源劃分為一個或多個內(nèi)存塊;接收使用所述計算內(nèi)存資源的請求;根據(jù)所述請求確定請求內(nèi)存資源的大?。灰约案鶕?jù)所述請求內(nèi)存資源的大小分配所述計算內(nèi)存資源。
在本發(fā)明中,所述內(nèi)存塊大小為2n個兆字節(jié),且n為大于或等于1的整數(shù)。
在本發(fā)明中,所述根據(jù)所述請求分配所述計算內(nèi)存資源包括:確定所述計算內(nèi)存資源中可用內(nèi)存資源的大小大于或等于所述請求內(nèi)存資源的大小,得到第一確定結(jié)果;根據(jù)所述第一確定結(jié)果,修改所述可用內(nèi)存資源的大??;根據(jù)所述請求內(nèi)存資源的大小以及所述可用內(nèi)存資源,確定分配內(nèi)存資源;以及發(fā)送所述分配內(nèi)存資源地址。
在本發(fā)明中,所述內(nèi)存資源管理方法進(jìn)一步包括:確定所述分配內(nèi)存資源已被釋放,得到第二確定結(jié)果;以及根據(jù)所述第二確定結(jié)果,修改所述可用內(nèi)存資源的大小。
在本發(fā)明中,所述根據(jù)所述請求分配所述計算內(nèi)存資源包括:確定所述計算內(nèi)存資源中的可用內(nèi)存資源的大小小于所述請求內(nèi)存資源的大小,得到第三確定結(jié)果;以及根據(jù)所述第三確定結(jié)果,發(fā)送請求失敗通知。
在本發(fā)明中,所述請求內(nèi)存資源的大小為所述內(nèi)存塊大小的整數(shù)倍。
在本發(fā)明中,所述計算設(shè)備包括現(xiàn)場可編輯邏輯門陣列(field-programmablegatearray,fpga)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果表現(xiàn)如下:
一、內(nèi)存資源管理以大字節(jié)(例如,2n兆字節(jié),n為大于或等于1的整數(shù))為單位進(jìn)行分配與釋放,減少了以單個字節(jié)為單位進(jìn)行內(nèi)存資源管理容易出現(xiàn)內(nèi)存資源碎片的情況;
二、計算使用內(nèi)存資源與結(jié)果使用資源采用分離管理方式,避免了計算使用內(nèi)存資源與結(jié)果使用內(nèi)存資源公用內(nèi)存資源的情況;
三、一次釋放使用完畢的內(nèi)存資源,使得可用內(nèi)存資源可以得到即時的更新,大幅度提高了內(nèi)存資源的使用效率。
附圖說明
圖1為本發(fā)明實施例的內(nèi)存資源管理系統(tǒng)結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例的內(nèi)存分配示例流程圖;
圖3為本發(fā)明實施例的內(nèi)存釋放示例流程圖;以及
圖4為本發(fā)明實施例內(nèi)存資源管理系統(tǒng)的一種計算機(jī)設(shè)備的架構(gòu)示例圖。
具體實施方式
下面通過具體實施例并結(jié)合附圖對本發(fā)明做進(jìn)一步描述。
如圖1所示,所述內(nèi)存資源管理系統(tǒng)可以包括處理模塊110、內(nèi)存模塊120和內(nèi)存管理模塊130。
所述處理模塊110可以用于計算、邏輯處理等過程。
所述內(nèi)存模塊120可以包括計算內(nèi)存資源。所述計算內(nèi)存資源可以為計算過程提供內(nèi)存資源。在一些實施例中,所述內(nèi)存模塊120中還可以包括結(jié)果內(nèi)資源,所述結(jié)果內(nèi)存資源可以為計算結(jié)果提供內(nèi)存資源。在一些實施例中,計算內(nèi)存資源與結(jié)果內(nèi)存資源也可以分別存在于兩個存儲模塊中。計算內(nèi)存資源與結(jié)果內(nèi)存資源采用分離管理方式,避免了計算內(nèi)存資源與結(jié)果內(nèi)存資源公用內(nèi)存資源的情況。
所述內(nèi)存管理模塊130可用于管理所述內(nèi)存模塊120的計算內(nèi)存資源。
圖2為本發(fā)明的內(nèi)存分配示例流程圖。
在步驟210,內(nèi)存管理模塊130可以將內(nèi)存模塊120中的計算內(nèi)存資源劃分為一個或多個內(nèi)存塊。所述內(nèi)存塊的大小可以為256字節(jié)(byte)的整數(shù)倍,例如,一個內(nèi)存塊的大小可以為512兆字節(jié)(megabyte,m)。在一些實施例中,每個內(nèi)存塊的大小可以相等,也可以不等。
在步驟220,內(nèi)存管理模塊130可以接收使用計算內(nèi)存資源的請求。所述使用計算內(nèi)存資源的請求可以來自于處理模塊110。
在步驟230,內(nèi)存管理模塊130可以根據(jù)所述請求,確定請求內(nèi)存資源的大小。所述請求內(nèi)存資源可以只處理模塊110在進(jìn)行計算時所需的內(nèi)存資源。所述請求內(nèi)存資源的大小可以為所述內(nèi)存塊大小的整數(shù)倍。
在步驟240,內(nèi)存管理模塊130可以判斷計算內(nèi)存資源中的可用內(nèi)存資源的大小是否小于所述請求內(nèi)存資源的大小。所述可用內(nèi)存資源可以指沒有被占用的空閑內(nèi)存資源。如果內(nèi)存管理模塊130判斷可用內(nèi)存資源的大小小于所述請求內(nèi)存資源的大小,則執(zhí)行步驟250。如果內(nèi)存管理模塊130判斷可用內(nèi)存資源的大小大于或等于請求內(nèi)存資源的大小,則執(zhí)行步驟260。
在步驟250,內(nèi)存資源管理模塊130可以向處理模塊110發(fā)送請求失敗通知。
在步驟260,內(nèi)存資源管理模塊130可以根據(jù)請求內(nèi)存資源的大小和可用內(nèi)存資源,確定分配內(nèi)存資源。所述分配內(nèi)存資源可以包括從可用內(nèi)存資源中確定的分配給處理模塊110的內(nèi)存資源。
在步驟270,內(nèi)存資源管理模塊130可以修改可用內(nèi)存資源的大小。所述修改可用內(nèi)存資源的大小可以包括將所述可用內(nèi)存資源的大小減去分配內(nèi)存資源的大小。例如,可用內(nèi)存資源的大小為2g(gigabyte),當(dāng)2g的可用內(nèi)存資源被分配占用1g后,可用內(nèi)存資源的大小會被內(nèi)存資源管理模塊130修改為1g。
在步驟280,內(nèi)存資源管理模塊130可以向處理模塊110發(fā)送分配內(nèi)存資源地址。所述分配內(nèi)存資源地址可以用于表示分配內(nèi)存資源的位置。
在一些實施例中,內(nèi)存資源管理模塊130可以在步驟260之前執(zhí)行步驟270,也可以在步驟260之后執(zhí)行步驟270。在一些實施例中,內(nèi)存資源管理模塊130也可以同時執(zhí)行步驟260和步驟270。
圖3為本發(fā)明的內(nèi)存釋放示例流程圖。
在步驟310,內(nèi)存資源管理模塊130可以確定分配內(nèi)存資源已被釋放。所述釋放分配內(nèi)存資源可以包括處理模塊110在使用完畢分配內(nèi)存資源后,將所述分配內(nèi)存資源進(jìn)行釋放。
在步驟320,內(nèi)存資源管理模塊130可以修改可用內(nèi)存資源的大小。所述修改可用內(nèi)存資源的大小可以包括在可用內(nèi)存資源的基礎(chǔ)上加上釋放的內(nèi)存資源的大小。例如,可用內(nèi)存資源的大小修為1g,當(dāng)處理模塊110將占用的1g的內(nèi)存資源使用完畢釋放后,內(nèi)存資源管理模塊130可以將可用內(nèi)存資源的大小修改為2g。
圖4為本發(fā)明內(nèi)存資源管理系統(tǒng)的一種計算機(jī)設(shè)備的架構(gòu)示例圖。
所述計算機(jī)400可以是一個通用目的的計算機(jī),或是一個有特定目的的計算機(jī)。本發(fā)明中的內(nèi)存資源管理系統(tǒng)能夠被所述計算機(jī)設(shè)備架構(gòu)通過其硬件設(shè)備、軟件程序、固件以及它們的組合所實現(xiàn)。為了方便起見,圖4中只繪制了一臺計算機(jī)設(shè)備的架構(gòu),但是內(nèi)存資源管理系統(tǒng)所需要的信息的相關(guān)計算機(jī)功能是可以以分布的方式、由一組相似的平臺所實施的,分散系統(tǒng)的處理負(fù)荷。
所述計算機(jī)設(shè)備架構(gòu)可以包括通信端口440,與之相連的可以是實現(xiàn)數(shù)據(jù)通信的網(wǎng)絡(luò)。所述計算機(jī)設(shè)備架構(gòu)還可以包括一個處理器470用于執(zhí)行程序指令。所述計算機(jī)設(shè)備架構(gòu)包括一個內(nèi)部通信總線410,不同形式的程序儲存單元以及數(shù)據(jù)儲存單元,例如硬盤420,只讀存儲器(rom)460,隨機(jī)存取存儲器(ram)450,能夠被配置為存儲所述計算機(jī)設(shè)備架構(gòu)處理和/或通信使用的各種數(shù)據(jù)文件,以及處理器470所執(zhí)行的可能的程序指令。所述計算機(jī)設(shè)備架構(gòu)還可以包括一個輸入/輸出組件430,支持所述計算機(jī)設(shè)備架構(gòu)與外部(例如,鍵盤)之間的數(shù)據(jù)和/或信息交互。所述計算機(jī)設(shè)備架構(gòu)也可以通過通信網(wǎng)絡(luò)接受程序及數(shù)據(jù)。
在一些實施例中,本發(fā)明中的內(nèi)存資源管理系統(tǒng)可以包括fpga。在一些實施例中,內(nèi)存資源管理系統(tǒng)中的處理模塊110和/或內(nèi)存管理模塊130可以由處理器470實現(xiàn),存儲模塊120可以由硬盤420,只讀存儲器(rom)460,或隨機(jī)存取存儲器(ram)450實現(xiàn)。
在一些實施例中,fpga內(nèi)存資源總共12g內(nèi)存,其中8g用于數(shù)據(jù)處理使用,4g用于存儲生成的ct圖像。將內(nèi)存資源設(shè)為允許兩個計算任務(wù)同時運行,每一個計算任務(wù)可以使用的內(nèi)存資源為6g,其中4g用于數(shù)據(jù)處理,2g用于存儲。在處理數(shù)據(jù)量較大時(超過1g時),該方式與現(xiàn)有技術(shù)常用的臨時動態(tài)申請資源方式相比,性能有大幅提高,可減少大量資源申請和釋放的操作。該方式可以減少的內(nèi)存動態(tài)操作數(shù)量是非??捎^的。其性能提升可以達(dá)到提升100%。
以上所述僅為本發(fā)明的優(yōu)選實施而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。