[發明專利]一種基于CUDA的種子分布數據并行獲取方法無效
| 申請號: | 201210110794.8 | 申請日: | 2012-04-16 |
| 公開(公告)號: | CN102662641A | 公開(公告)日: | 2012-09-12 |
| 發明(設計)人: | 范菁;官馨馨;湯穎;董天陽 | 申請(專利權)人: | 浙江工業大學 |
| 主分類號: | G06F9/38 | 分類號: | G06F9/38;G06F17/30 |
| 代理公司: | 杭州天正專利事務所有限公司 33201 | 代理人: | 王兵;王利強 |
| 地址: | 310014 *** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 cuda 種子 分布 數據 并行 獲取 方法 | ||
1.一種基于CUDA的種子分布數據并行獲取方法,其特征在于:該獲取方法在CUDA架構下,在CPU上執行的主機端和在GPU上執行的設備端;所述種子分布數據并行獲取方法包括以下步驟:
(1)、輸入數據內存空間分配并初始化:根據樣地單元規模分配內存空間存放每個樣地單元中心坐標;根據成年樹規模分別分配內存空間存放成年樹的胸徑、空間坐標并初始化;根據種子分布模型所需常量參數分配內存空間并初始化;
(2)、輸入數據顯存空間分配:調用CUDAAPI函數cudaMalloc在顯存的全局存儲器中分配空間用于存放樣地單元和成年樹數據;
(3)、內存到顯存的輸入數據傳輸:調用CUDA?API函數cudaMemcpy,將以上輸入數據從內存復制到全局存儲器對應區域,并調用cudaMemcpyToSymbol將各常量參數直接復制到常量存儲器;
(4)、輸出數據顯存空間分配:根據內核配置情況分配顯存空間,用于存放設備端的計算結果;
(5)、輸出數據內存空間分配;
(6)、設置設備端內核執行配置,調用設備端內核函數計算種子分布,設備端內核函數計算步驟如下:
(6.1)根據CUDA內建函數獲得線程塊的Y索引,即目標樣地單元,記為bid_y;
(6.2)在0號線程中根據bid_y讀取目標樣地單元的空間坐標保存到共享存儲器;初始化數組seeds_thread各元素為0;調用CUDA同步函數__syncthreads(),使得塊內所有線程在初始化完成后再進行種子分布數計算累加;
(6.3)根據CUDA內建函數獲得該線程所在線程網格的X索引,記為tid_x,表示參與該線程計算的成年樹集;設置寄存器變量,對每棵成年樹i,i<n(n為常量),根據索引tid_x×n+i獲得成年樹的胸徑和空間位置,按照種子分布計算公式計算種子數并累加到寄存器變量;待n次迭加完成后,將該寄存器變量寫入共享存儲器seeds_thread數組中;
(6.4)調用CUDA同步函數__syncthreads(),采用樹形規約算法,通過多線程并發執行實現每個線程的種子數累加操作,得到該線程塊的種子貢獻總數;
樹形規約算法中,s表示數組長度,初始值為T,對于seeds_thread數組的前半部分元素,每一個與比其索引大s的元素相加后更新其值,每次迭代后將s值減半;
(6.5)在0號線程根據線程塊索引將結果保存至全局存儲器seeds_block中,得到種子分布。
2.如權利要求1所述的一種基于CUDA的種子分布數據并行獲取方法,其特征在于:所述種子分布數據并行獲取方法還包括包括以下步驟:
(7)、顯存到內存的輸出數據傳輸,調用CUDA?API函數cudaMemcpy,將設備端的種子分布計算結果從顯存復制到內存相應區域;
(8)處理計算結果;
(9)釋放顯存空間,釋放內存空間。
3.如權利要求1或2所述的一種基于CUDA的種子分布數據并行獲取方法,其特征在于:所述步驟(6)中的內核執行配置包括根據種子分布的計算特性劃分設備端線程網格和存儲器訪問模式設置;
線程網格用二維表示,X維度表示貢獻種子的成年樹個體,Y維度表示分布到種子的各樣地單元,每個線程塊計算一定數量成年樹對一個樣地單元的種子貢獻數;相同Y維度的線程塊負責對同一個樣地單元的種子數計算;同時;在全局存儲器中分配一維線性數組seeds_block用于存儲每個線程塊貢獻的種子數;該數組中屬于同一樣地單元的元素值之和即為該樣地單元的種子數終值;
假設共有A棵成年樹,每個線程塊包含T個線程,每個線程處理n棵成年樹,那么X維度共劃分為A/(n×T)個線程塊;Y維度的線程塊數取決于樣地單元總數和顯卡配置;若以TL表示該內核執行的總線程數上限,那么Y維度的線程塊數為(TL×n)/A;若樣地單元總數大于該數值,那么樣地單元被分成若干批執行,通過多次執行內核函數完成對所有樣地單元的計算;
在所述內核函數中,利用共享存儲器存儲兩部分數據,一是目標樣地單元數據;二是每個線程n棵成年樹貢獻的種子數和,表示為float型數組seeds_thread,該內核共需開辟的共享存儲器大小為(T+2)×4字節,其中T表示seeds_thread數組長度,即塊內線程數;2表示目標樣地單元X,Y方向上的空間坐標;4表示每個float型占4個字節。
4.如權利要求2所述的一種基于CUDA的種子分布數據并行獲取方法,其特征在于:所述步驟(6)的內核函數執行完畢后,按照步驟(7)將seeds_block數組拷貝回內存。根據所述步驟(8),在CPU端將seeds_block中屬于同一樣地單元的塊結果再做累加操作,獲得各樣地單元的種子數終值。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙江工業大學,未經浙江工業大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210110794.8/1.html,轉載請聲明來源鉆瓜專利網。





