[發明專利]一種基于GPU的N體模擬程序性能優化方法有效
| 申請號: | 202110077894.4 | 申請日: | 2021-01-20 |
| 公開(公告)號: | CN112765870B | 公開(公告)日: | 2022-05-06 |
| 發明(設計)人: | 王武;趙文龍 | 申請(專利權)人: | 中國科學院計算機網絡信息中心 |
| 主分類號: | G06F30/25 | 分類號: | G06F30/25;G06F119/14 |
| 代理公司: | 北京億騰知識產權代理事務所(普通合伙) 11309 | 代理人: | 陳霽 |
| 地址: | 100190 北京市*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 gpu 模擬 程序 性能 優化 方法 | ||
1.一種基于GPU的N體模擬程序性能優化方法,其特征在于,包括以下步驟:
將相關索引信息傳入到GPU使得構造短程力列表的過程遷移到GPU上,同時使得構造列表的過程并行化;
改變線程塊調度的方式,通過GPU的流水調度,將粒子信息輪流加載到GPU的共享內存中;
在GPU核心函數中采用插值多項式和混合精度計算短程作用力,CPU上計算好插值常數后傳入GPU,存放在GPU的共享內存中;
對GPU上各粒子的短程力計算結果通過重排序,在GPU全局內存對同一粒子的加速度進行規約合并,在所有粒子計算完成后再將最終結果傳回CPU;
所述將相關索引信息傳入到GPU使得構造短程力列表的過程遷移到GPU上,同時使得構造列表的過程并行化步驟,包括:
在GPU顯存中分配短程力計算中所需求的target列表、source列表以及相關數組所需的顯存空間;
CPU端將預處理得到的具體粒子信息所需要的索引信息、每個包的粒子對應的索引數組以及在顯存中存儲的偏移量,傳入到顯存中;
GPU端單獨使用一個核函數,使每個線程處理單獨一個包,根據CPU端傳入的索引信息在顯存中已經存在的所有粒子的信息進行索引,得到對應包的粒子;以及根據各自包的偏移量進行存儲,生成所述target列表和所述source列表;
所述對GPU上各粒子的短程力計算結果通過重排序,在GPU全局內存對同一粒子的加速度進行規約合并,在所有粒子計算完成后再將最終結果傳回CPU步驟,包括:
在GPU端分配數組acc,保存進程所有粒子的加速度;
在每次P2P計算的過程中,將每個線程計算后的加速度在顯存所存儲的target_acc列表進行重排序,使得擁有相同粒子編號的部分規約到同一存儲地址;
使用一個核函數對重排序的列表進行規約,使每個線程統計一個粒子加速度,獲得每個粒子在這次計算中最終的加速度,再更新到acc數組中,一直在顯存中保存該數組到最后一批粒子計算完短程力;
在分批計算完所有粒子的P2P相關計算之后,最后一批粒子計算結束時將acc數組從顯存傳回到CPU內存,將CPU端的粒子信息進行更新。
2.根據權利要求1所述的優化方法,其特征在于,所述改變線程塊調度的方式,通過GPU的流水調度,將粒子信息輪流加載到GPU的共享內存中步驟,包括:
在GPU端分配數組acc,保存該進程所有粒子的加速度;
由一個GPU中的一個線程塊計算target列表中相同target包中的粒子,每個包只使用一個線程塊,其中的線程分批輪流加載不同的target粒子;或使每個包用一個或多個線程塊,每個線程計算這個包中的一個target粒子,每個新的包用新的線程塊,多余的線程空閑;
將部分source列表中的相關粒子加載到共享內存;
計算當前線程代表的target粒子與共享內存中的source粒子的相互作用;
加載新的source粒子到共享內存繼續計算,直到相互作用列表中所有source粒子的acc計算完成。
3.根據權利要求1所述的優化方法,其特征在于,所述在GPU核心函數中采用插值多項式和混合精度計算短程作用力,CPU上計算好插值常數后傳入GPU,存放在GPU的共享內存中步驟,包括:
對于GPU端的計算,有在除法中使用到的常數,在CPU端計算好,然后將其倒數作為常數傳入GPU,在GPU端進行乘法運算。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國科學院計算機網絡信息中心,未經中國科學院計算機網絡信息中心許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110077894.4/1.html,轉載請聲明來源鉆瓜專利網。





