[發明專利]一種基于小內存處理大規模數據的并行程序開發方法在審
| 申請號: | 201510013613.3 | 申請日: | 2015-01-12 |
| 公開(公告)號: | CN104572106A | 公開(公告)日: | 2015-04-29 |
| 發明(設計)人: | 高永虎;張清;張廣勇;沈鉑 | 申請(專利權)人: | 浪潮電子信息產業股份有限公司 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44;G06F9/38 |
| 代理公司: | 濟南信達專利事務所有限公司 37100 | 代理人: | 姜明 |
| 地址: | 250101 山東*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 內存 處理 大規模 數據 并行 程序 開發 方法 | ||
1.一種基于小內存處理大規模數據的并行程序開發方法,其特征在于,其具體實現過程為:
在內存和外存開辟數據空間,并劃分成若干數據塊,將任務數據讀入到劃分的外存數據塊中,計算與I/O線程操作不同的內存數據塊與外存數據塊交互,使得計算該數據塊所需時間與I/O的時間相等;
設置讀線程、計算線程、寫線程,主線程根據CPU的計算核心數量啟動計算線程和I/O線程,主線程初始化隊列和各個緩存區,然后啟動上述各個線程;
當需要計算劃分到外存中的數據塊時,讀線程從內存中獲取空的數據塊緩沖區,然后將外存數據塊中的數據讀入到內存中;
計算線程從內存中獲取已經讀入的數據塊,再從內存中獲取一個空的數據塊緩存區,計算結果存入到空的數據塊緩沖區中,將源數據的數據塊緩存區清空;
寫線程獲取計算線程計算完成后目的數據塊緩存區中數據,將此數據寫到外存中的緩沖區中,輸出完畢后將目的數據塊緩存區清空。
2.根據權利要求1所述的一種基于小內存處理大規模數據的并行程序開發方法,其特征在于,所述讀線程、計算線程、寫線程異步并行,需要源緩沖SR_BUF和目標緩沖DR_BUF,DR-BUF、SR_BUF均為由主線程開辟的內存緩沖空間;BUF是一個連續的存儲空間,被分割成多份,每份稱為一個緩沖塊BUF_BLOCK,緩沖塊對應一個基本數據塊的作業單位;讀線程與計算線程共同操作SR_BUF緩沖,計算線程與寫線程共同操作DR_BUF緩沖。
3.根據權利要求2所述的一種基于小內存處理大規模數據的并行程序開發方法,其特征在于,每個緩沖或隊列可容納至少兩個緩沖對象。
4.根據權利要求2所述的一種基于小內存處理大規模數據的并行程序開發方法,其特征在于,還包括環形隊列,該環形隊列存儲緩沖區的ID,各線程從隊列中獲取要操作的緩沖區對應的ID,上述環形隊列包括下述四個隊列:
SR_BUF_FULL_QUEUE:新的計算任務隊列,存放新讀入的等待計算的源數據塊的ID號SR_BUF_ID、數據塊的大小信息,由讀線程寫入,計算線程彈出,當讀線程向SR_BUF_ID對應的緩存區中讀入新的數據時,將SR_BUF_ID入隊,計算線程彈出SR_BUF_ID時,計算SR_BUF_ID對應的源數據;
SR_BUF_FREE_QUEUE:空閑源緩沖隊列,存放當前空閑SR_BUF_ID號,由計算線程寫入,讀線程彈出,當SR_BUF_ID對應的源數據計算完畢時,釋放SR_BUF_ID,告知讀線程可對其更新數據;
DR_BUF_FREE_QUEUE:空閑目標緩沖隊列,存放當前空閑數據塊的ID號DR_BUF_ID,記錄DR_BUF_ID號,由寫線程寫入,計算線程彈出;當寫線程對DR_BUF_ID對應的緩存區數據輸出完畢時,將DR_BUF_ID入隊,告知計算線程,該DR_BUF_ID輸出完畢可重新用于計算,計算線程彈出DR_BUF_ID時,啟動計算,并將結果寫入DR_BUF_ID對應的目標緩沖區中;
DR_BUF_FULL_QUEUE:新的寫任務隊列,存放計算完畢等待寫回的目標數據塊的ID號DR_BUF_ID,由計算線程寫入,寫線程彈出;當計算線程向DR_BUF_ID所對應的緩沖區中讀入新數據時,將DR_BUF_ID入隊,寫線程彈出DR_BUF_ID時,對DR_BUF_ID對應的目標數據進行輸出。
5.根據權利要求4所述的一種基于小內存處理大規模數據的并行程序開發方法,其特征在于,基于上述隊列,該并行程序開發的具體過程為:
主線程根據CPU的計算核心數啟動nThreads個計算線程和同等數量的I/O線程,將計算數據劃分為合適的基本數據塊,并在外存開辟同樣數量大小的內存,將數據庫中的數據讀入到外存中;
在內存中開辟內存塊,其內存塊的數量是線程數量的倍數;
創建四個隊列SR_BUF_FULL_QUEUE、SR_BUF_FREE_QUEUE、DR_BUF_FREE_QUEUE、DR_BUF_FREE_QUEUE,并初始化隊列,即將內存塊的ID存入FREE隊列中,最后主線啟動所有線程;
讀線程從SR_BUF_FREE_QUEUE隊列中獲取一個空的數據塊ID,將一個外存數據塊讀入到此ID對應的數據塊中,然后將此數據塊的ID入隊到隊列SR_BUF_FULL_QUEUE中;
計算線程分別從SR_BUF_FULL_QUEUE和DR_BUF_FREE_QUEUE獲取數據塊的ID,計算源數據并將結果存入到目的數據塊中,計算完成將源數據塊清空并將其ID入隊到SR_BUF_FREE_QUEUE對列中,將目的數據塊的ID入隊到DR_BUF_FULL_QUEUE對列中;
寫線程中DR_BUF_FULL_QUEUE中獲取待寫的數據塊的ID,將ID對應的數據塊寫入到外存中,寫完成后將數據塊中數據清空并將其ID入隊到DR_BUF_FREE_QUEUE隊列中;
計算線程與讀寫線程異步并行執行,直到系統結束。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浪潮電子信息產業股份有限公司,未經浪潮電子信息產業股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201510013613.3/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種業務表單配置的方法和裝置
- 下一篇:一種移動終端頁面圖表的更新方法和裝置





