《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > CUDA體系結(jié)構(gòu)上的一層淺水系統(tǒng)的模擬
CUDA體系結(jié)構(gòu)上的一層淺水系統(tǒng)的模擬
來源:微型機(jī)與應(yīng)用2012年第10期
張 哲
(遼寧師范大學(xué) 計算機(jī)與信息技術(shù)學(xué)院計算機(jī)系,遼寧 大連116029)
摘要: 對于使用支持NVIDA CUDA程序設(shè)計模型的GPU的二維一層淺水系統(tǒng),給出了如何加速平衡性良好的有限體積模式的數(shù)值解,同時給出并實現(xiàn)了在單雙浮點精度下使用CUDA模型利用潛在數(shù)據(jù)并行的算法。數(shù)值實驗表明,CUDA體系結(jié)構(gòu)的求解程序比CPU并行實現(xiàn)求解程序高效。
關(guān)鍵詞: 軟件 GPU 淺水系統(tǒng) OpenMP CUDA
Abstract:
Key words :

摘  要: 對于使用支持NVIDA CUDA程序設(shè)計模型的GPU的二維一層淺水系統(tǒng),給出了如何加速平衡性良好的有限體積模式的數(shù)值解,同時給出并實現(xiàn)了在單雙浮點精度下使用CUDA模型利用潛在數(shù)據(jù)并行的算法。數(shù)值實驗表明,CUDA體系結(jié)構(gòu)的求解程序比CPU并行實現(xiàn)求解程序高效。
關(guān)鍵詞: GPU;淺水系統(tǒng);OpenMP;CUDA

    以具有源項的守恒定律形式表達(dá)的淺水方程廣泛用于引力影響下的一層流體建模,這些模型的數(shù)值解有許多用途,有關(guān)地面水流,如河流或潰壩水流的數(shù)值模擬。由于范圍廣,這些模擬需要大量的計算,因此需要很有效的求解程序在合理的執(zhí)行時間內(nèi)求解這些問題。
    因為淺水系統(tǒng)的數(shù)值解有許多可開發(fā)的并行性,使用并行硬件可增加數(shù)值模擬速度。參考文獻(xiàn)[1]給出了對于PC集群模擬淺水系統(tǒng)的數(shù)值模式和該模式的有效并行實現(xiàn)。參考文獻(xiàn)[2]通過使用SSE優(yōu)化的軟件模塊,改進(jìn)了這個并行實現(xiàn)。盡管這些改進(jìn)能在更快的計算時間內(nèi)獲得結(jié)果,但模擬過程仍需要很長的運行時間。
    現(xiàn)代圖形處理單元GPUs為以并行方式進(jìn)行大規(guī)模浮點操作提供了數(shù)以百計的優(yōu)化處理單元,GPUs也可成為一種在復(fù)雜計算任務(wù)中大大提高性能的簡便而有效的方法[3]。
    曾有人建議將淺水?dāng)?shù)值求解程序放在GPU平臺上。為了模擬一層淺水系統(tǒng),在一個NVIDIA GeForce  7800 GTX顯卡上實現(xiàn)了一個明確的中心迎風(fēng)方法[4],并且相對于一個CPU實現(xiàn),其加速比從15到30。參考文獻(xiàn)[1]在GPUs上所給數(shù)值模式的有效實現(xiàn)在參考文獻(xiàn)[5]中有相關(guān)描述。 相對于一個單處理器實現(xiàn),在一個NVIDIA GeForce 8800 Ultra顯卡上得到了兩個數(shù)量級的加速。這些先前的建議是基于OpenGL圖形應(yīng)用程序接口[6]和Cg著色語言(動畫著色語言)的[7]。
    近來,NVIDIA開發(fā)了CUDA程序設(shè)計工具包,以C語言為開發(fā)環(huán)境,對一般目的的應(yīng)用,使GPU的程序設(shè)計更為簡便。
    本文目標(biāo)是通過使用支持CUDA的GPUs加速淺水系統(tǒng)的數(shù)值求解,特別是為了取得更快的響應(yīng)時間,修改參考文獻(xiàn)[1]和參考文獻(xiàn)[5]中并行化的一層淺水?dāng)?shù)值求解程序,以適應(yīng)CUDA體系結(jié)構(gòu)。
1 數(shù)值模式
    一層淺水系統(tǒng)是一個具有源項的守恒定律系統(tǒng),該系統(tǒng)可以為在引力加速度g作用下的占有一定空間的均勻流動的淺水層建模。系統(tǒng)形式如下:

其中,



    
    將在GPU上執(zhí)行的每個處理步驟分配到同一個CUDA核,核是在GPU上執(zhí)行的一個函數(shù),其在執(zhí)行中形成并行運算的線程塊[9],算法實現(xiàn)步驟如下:
    (1)建立數(shù)據(jù)結(jié)構(gòu)
    對于每個體積,存儲它的狀態(tài)(h、qx、qy)和高度H。定義一個float4類型的數(shù)組,其中每個元素表示一個體積并且包含了以前的參數(shù),因為每個邊(線程)僅需要它的兩個相鄰的體積的數(shù)據(jù),將數(shù)組存儲為一個二維紋理,紋理存儲器特別適合每個線程在它周圍環(huán)境進(jìn)行存取。另一方面,當(dāng)每個線程需要存取位于全局內(nèi)存的許多鄰近元素時,每個共享內(nèi)存塊更適合,每個線程塊將這些元素的一小部分裝入共享內(nèi)存。欲實現(xiàn)兩個版本(使用二維紋理和使用共享內(nèi)存),用二維紋理可使執(zhí)行時間更短。
    體積區(qū)域和垂直水平邊的長度需要預(yù)先計算,并傳遞到需要它們的CUDA核。運行時通過檢查網(wǎng)格中線程的位置,能知道一個邊或體積是否是一個邊界和一個邊的?濁ij值。
    (2)處理垂直邊和水平邊
    將邊分成垂直邊和水平邊進(jìn)行處理。垂直邊?濁ij,y=0,水平邊?濁ij,x=0。在垂直和水平邊處理中,每個線程分別代表一個垂直和水平邊,計算它對鄰近體積的貢獻(xiàn)在2.1節(jié)已描述。
    當(dāng)借助于存儲在全局內(nèi)存的兩個累加器驅(qū)動一個特定的體積時,邊(即線程)彼此相互同步,并且每個邊都是float4類型的數(shù)組元素。每個累加器的大小就是體積值。累加器的每個元素存儲邊對體積的貢獻(xiàn)(一個3×1向量Mi和一個float值Zi)。在垂直邊的處理中,每個邊將貢獻(xiàn)寫入第一個累加器的右面體積和第二個累加器的左面體積。水平邊的處理與垂直邊處理類似,只是加入累加器的貢獻(xiàn)不同。圖2和圖3分別顯示了垂直邊和水平邊的處理情況。

 

 

    (3)為每個體積計算?駐ti
    每個線程代表一個體積,正像2.1節(jié)描述的計算體積Vi的局部值Δti。最終將通過把存儲在兩個累加器中的相應(yīng)體積Vi位置的兩個float值相加獲得Zi值。
    (4)獲得最小Δt
    通過在GPU上應(yīng)用規(guī)約算法尋找體積的局部?駐ti的最小值,所應(yīng)用的規(guī)約算法是CUDA軟件開發(fā)工具中所包含的規(guī)約樣例的核7(最優(yōu)化的一個)。
    (5)為每個體積計算Win+1
    在這一步,每個線程代表一個體積,正如2.1節(jié)描述的修改體積Vi的狀態(tài)Wi。通過兩個3×1向量相加求出Mi的最終值,這兩個向量存儲在與兩個累加器的體積Vi相稱的位置。因為一個CUDA的核函數(shù)不能直接寫進(jìn)紋理,需要通過將結(jié)果寫進(jìn)一個臨時數(shù)組來修改紋理,然后將這個數(shù)組復(fù)制到綁定紋理的CUDA數(shù)組。
    這個CUDA算法的雙精度(double)版本已實現(xiàn),以上所描述的有關(guān)實現(xiàn)的差別是需要使用兩個double2類型元素的數(shù)組存儲體積數(shù)據(jù),并需要使用double2類型元素的4個累加器。

    

數(shù)值模式運行在不同的網(wǎng)格。在[0,1]時間間隔內(nèi),執(zhí)行模擬系統(tǒng)。CFL參數(shù)是?酌=0.9,并且需要考慮墻壁邊界條件(q·η)。
    已經(jīng)實現(xiàn)了CUDA算法的一個串行和四核CPU并行版本(使用OpenMP[8]),兩個版本都使用C++實現(xiàn),且使用矩陣操作本征庫[10],在CPU上已經(jīng)使用了double數(shù)據(jù)類型。將CUDA實現(xiàn)與參考文獻(xiàn)[5]中描述的Cg程序進(jìn)行比較。
    所有程序都是在一個具有4 GB內(nèi)存的酷睿i7920處理器上執(zhí)行,所使用的顯卡是GeForece GTX260和GeForce GTX280。表1顯示了所有網(wǎng)格和程序的執(zhí)行時間(由于沒有足夠的內(nèi)存,有些情況不能執(zhí)行)。
    在具有兩種顯卡的所有情況下,單精度CUDA程序(CUSP)的執(zhí)行時間超過Cg程序的執(zhí)行時間。使用一個GeForce GTX280,相對于單核版本,CUSP實現(xiàn)了超過140的加速。對于復(fù)雜問題在兩種顯卡下,雙精度CUDA程序(CUDP)比CUSP程序的執(zhí)行速度慢7倍。正如預(yù)期的一樣,相對于單核版本,OpenMP版本僅實現(xiàn)了不足4倍的加速(OpenMP版本的執(zhí)行速度比單核版本快不到4倍)。

    圖4以圖形的方式顯示了兩種顯卡在CUDA實現(xiàn)中取得的GB/s和GFLOPS值。用GTX280顯卡,對于大的網(wǎng)格,CUSP達(dá)到了61 GB/s和123 GFLOPS。理論最大值是:對于GTX280顯卡,GB/s和GFLOPS值分別為141.7 GB/s、933.1 GFLOPS(單精度)、77.8 GFLOPS(雙精度);對于GTX260顯卡,GB/s和GFLOPS值分別為111.9 GB/s、804.8 GFLOPS(單精度)、67.1 GFLOPS(雙精度)。

    比較了在單核和CUDA程序求得的數(shù)值解,計算出了全部網(wǎng)格(t=1.0時)在CPU和GPU中得出的解之間的不同L1范數(shù)。使用CUSP的L1范數(shù)的數(shù)量級在10-2~10-4之間變化,而使用CUDP所得到的數(shù)量級在10-13~10-14之間變化,這反映了在GPU上使用單雙精度計算數(shù)值解的不同精度。
    使用CUDA框架為一層淺水系統(tǒng)建立和實現(xiàn)了一個有效的一階良好有限體積求解程序。為了在CUDA體系結(jié)構(gòu)上有效地并行數(shù)值模式,這個求解程序?qū)崿F(xiàn)了優(yōu)化技術(shù)。在一個GeForce GTX280顯卡上使用單精度執(zhí)行的模擬達(dá)到了61 GB/s和123 GFLOPS,比一個單核版本的求解程序快了2個數(shù)量級,也比一個基于圖形語言的GPU版本速度快。這些模擬也顯示了用求解程序所得到的數(shù)值解對于實際應(yīng)用是足夠精確的,用雙精度比用單精度求得的解更精確。對于未來的工作,我們提出了在不規(guī)則網(wǎng)格上進(jìn)行有效模擬的擴(kuò)展策略,給出兩層淺水系統(tǒng)的模擬。
參考文獻(xiàn)
[1] CASTRO M J,GARCFA-RODRIGUEZ J A.A parallel 2D finite volume scheme for solving systems of balance laws  with nonconservative products:application to shallow flows[J]. Comput Methods Appl Mech Eng,2006,195(19):2788-2815.
[2] CASTRO M J,GARCFA-RODRIGUEZ J A.Solving shallow  water systems in 2D domains using finite volume methods and multimedia SSE instructions[J].Comput Appl Math,2008,221(1):16-32.
[3] RUMPF M,STRZODKA R.Graphics processor units:new  prospects for parallel computing[J].Lecture notes in computational science and engineering,2006,51(1):89-132.
[4] HAGEN T R,HJELMERVIK J M,LIE K-A.Visual simulation of shallow-water waves[J].Simul Model Pract Theory,2005,13(8):716-726.
[5] LASTRA M,MANTAS J M,URENA C.Simulation of shallow water systems using graphics processing units[J].Math Comput Simul,2009,80(3):598-618.
[6] SHREINER D,WOO M,NEIDER J.OpenGL programming guide:the official guide to learning OpenGL,Version2.1[M]. ddison-Wesley Professional,2007.
[7] FERNANDO R,KILGARD M J.The Cg tutorial:the definitive guide to programmable real-time graphics[M].Addison Wesley,2003.
[8] CHAPMAN B,JOST G,DAVID J.Using OpenMP:portable shared memory parallel programming[M].The MIT Press,Cambridge 2007.
[9] NVIDIA.CUDA Zone[EB/OL].[2009-09-10].http://www.nvidia.com/object/cuda_home.html.
[10] Eigen2.0.9[EB/OL].[2009-09-10].http://eigen.tuxfamily.org.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品国产精品| 国产亚洲精品久久飘花| 亚洲女与黑人做爰| 日韩视频免费在线观看| 亚洲高清不卡| 亚洲国产精品小视频| 欧美综合激情网| 亚欧成人精品| 新片速递亚洲合集欧美合集| 亚洲女人天堂av| 亚洲在线视频| 亚洲在线观看视频网站| 亚洲一区二区高清| 亚洲视频一区在线| 国产精品午夜在线| 久久久999精品免费| 欧美影院一区| 久久国产精品99国产精| 午夜免费日韩视频| 午夜影院日韩| 欧美怡红院视频一区二区三区| 亚洲欧美国产日韩中文字幕| 亚洲女ⅴideoshd黑人| 亚洲欧美成人网| 性欧美在线看片a免费观看| 午夜天堂精品久久久久| 午夜精品亚洲一区二区三区嫩草| 亚洲欧美一区二区原创| 欧美一级片一区| 欧美在线影院| 久久在线观看视频| 麻豆精品一区二区av白丝在线| 免费短视频成人日韩| 欧美国产高潮xxxx1819| 欧美精品在线观看| 欧美三级在线视频| 国产精品一区二区三区四区| 国产精品一区免费观看| 国产农村妇女毛片精品久久麻豆| 国产偷国产偷精品高清尤物| 在线成人av.com| 亚洲精品欧美一区二区三区| 在线视频日本亚洲性| 亚洲欧美国产精品桃花| 久久精品国产2020观看福利| 最新国产成人av网站网址麻豆| 日韩亚洲视频在线| 午夜久久资源| 久久在线视频在线| 欧美精品一区二区三区高清aⅴ| 欧美日韩一区三区四区| 国产农村妇女精品一二区| 黄色成人片子| 日韩一级黄色大片| 欧美亚洲免费电影| 亚洲美女淫视频| 先锋影音一区二区三区| 免费观看久久久4p| 国产精品久久久久7777婷婷| 国产在线麻豆精品观看| 亚洲精品在线电影| 欧美在线关看| 亚洲天堂免费在线观看视频| 欧美在线播放| 欧美日韩国产色视频| 国产欧美日韩综合精品二区| 亚洲国产精品成人综合色在线婷婷 | 亚洲国产精品免费| 亚洲天堂成人在线观看| 久久亚洲二区| 欧美性大战xxxxx久久久| 激情视频亚洲| 亚洲一区二区在| 亚洲免费观看高清在线观看| 久久se精品一区精品二区| 欧美久久影院| 精品69视频一区二区三区| 中文精品视频| 亚洲精品一区二区三区99| 欧美中文字幕在线观看| 欧美午夜电影网| 亚洲国产精品传媒在线观看| 欧美亚洲免费| 亚洲欧美日韩久久精品| 欧美精品情趣视频| 精品不卡一区| 欧美亚洲综合久久| 亚洲欧美国产精品专区久久| 欧美久久电影| 永久555www成人免费| 性做久久久久久久免费看| 亚洲视频中文| 欧美日韩国产探花| 亚洲福利国产| 久久精品亚洲精品国产欧美kt∨| 小黄鸭精品密入口导航| 欧美色精品在线视频| 亚洲欧洲日本一区二区三区| 亚洲电影中文字幕| 久久精品免费播放| 国产精品日韩在线| 一区二区三区欧美日韩| 夜夜爽av福利精品导航| 欧美精品18+| 亚洲国产另类久久精品| 亚洲福利在线视频| 久久一区二区视频| 韩国免费一区| 亚洲成人在线视频网站| 久久久久免费视频| 国内精品国语自产拍在线观看| 亚洲欧美日韩一区在线| 亚洲欧美中文字幕| 国产精品久久久久久久久久三级| 日韩亚洲欧美在线观看| 一本色道久久88亚洲综合88| 欧美大片一区二区| 亚洲国产成人午夜在线一区| 亚洲国产精品一区二区www| 久久只精品国产| 尤物视频一区二区| 亚洲日本国产| 欧美国产精品v| 亚洲精品久久久久久久久久久久| 日韩视频在线免费观看| 欧美激情综合网| 亚洲狼人综合| 亚洲视频欧美在线| 国产精品成人一区| 亚洲免费网址| 久久精品av麻豆的观看方式 | 亚洲国产精品视频| 亚洲日本激情| 欧美日韩中文| 亚洲一区二区影院| 久久精品免费电影| 伊人久久大香线蕉综合热线| 亚洲国产精品va在线看黑人动漫| 欧美成人精品三级在线观看| 91久久精品国产91性色| 99精品国产在热久久下载| 欧美日韩免费在线视频| 亚洲图色在线| 久久国产精品一区二区| 好吊色欧美一区二区三区四区| 最新成人av在线| 欧美日韩性生活视频| 亚洲午夜日本在线观看| 久久av红桃一区二区小说| 狠狠色综合网| 日韩午夜av在线| 国产精品亚洲片夜色在线| 欧美一区二区三区婷婷月色| 你懂的网址国产 欧美| 日韩亚洲国产欧美| 亚洲欧美中文日韩v在线观看| 国产亚洲一二三区| 亚洲片在线资源| 国产精品国产三级国产专播精品人| 小嫩嫩精品导航| 欧美连裤袜在线视频| 亚洲欧美激情精品一区二区| 美女999久久久精品视频| 日韩视频永久免费| 欧美一区二区三区四区在线观看地址 | 男人插女人欧美| 一本大道久久a久久精二百| 欧美一区二区日韩| 亚洲国产另类久久精品| 亚洲欧美激情一区| 黄色精品网站| 亚洲校园激情| 国内精品久久久久影院色 | 国产午夜精品一区理论片飘花| 91久久久久久久久| 国产精品久久久久久妇女6080| 久久精品动漫| 国产精品高潮呻吟久久av黑人| 亚洲二区视频| 国产精品久久久久aaaa| 最新69国产成人精品视频免费| 欧美午夜片在线观看| 久久精品欧洲| 国产精品jvid在线观看蜜臀| 久久精品免费播放| 国产精品国产三级国产aⅴ9色| 亚洲国产精品激情在线观看| 国产精品成av人在线视午夜片| 亚洲二区视频| 国产欧美日本在线| 亚洲视频999| 影音先锋久久资源网| 午夜精品久久久久久99热| 亚洲经典在线看| 久久精品亚洲热| 一本一本久久| 欧美精品三区| 亚洲国产精品福利| 国产精品永久入口久久久| 亚洲最新视频在线|