專利名稱:一種地震疊前時間偏移走時處理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)高性能計算、并行計算領(lǐng)域、石油地震勘探領(lǐng)域,具體涉及一種針對NVIDIA的Fermi GPU設(shè)計的地震疊前時間偏移走時計算并行算法。
背景技術(shù):
地震資料處理是石油和天然氣勘探開發(fā)領(lǐng)域中非常重要的環(huán)節(jié)。傳統(tǒng)的方法是通過人工放炮方式產(chǎn)生地震波,通過地面檢波器將地下不同地質(zhì)層反射回來的地震波信號收集后,利用大型計算機(jī)通過多套專業(yè)處理軟件和一套完整的疊前時間偏移、疊前深度偏移軟件系統(tǒng)進(jìn)行資料處理,從而得到地下的構(gòu)造以及成像。為石油鉆井提供更加可靠的勘探數(shù)據(jù),用于勘探專家進(jìn)行下一步的分析和解釋,掌握地下的油氣構(gòu)造。疊前時間偏移是構(gòu)造復(fù)雜成像最有效的方法之一,它能適應(yīng)縱向速度變化較大的情況,適用于大傾角的偏移成像。而其中走時計算是計算地震波從震源傳到觀測點(diǎn)所經(jīng)過的時間,即計算地震波從震源傳到成像點(diǎn)所經(jīng)過的時間與地震波從成像點(diǎn)傳到觀測點(diǎn)所走過的時間之和。因此,走時計算是疊前時間偏移中最關(guān)鍵、最費(fèi)時的一個環(huán)節(jié),其采用的算法大致分為三類,即直射線、彎曲射線以及非對稱走時計算。由于疊前時間偏移動輒需要處理數(shù)以TB的海量數(shù)據(jù),以串行方式實(shí)現(xiàn)的走時計算算法,處理性能十分低,已經(jīng)嚴(yán)重制約工業(yè)生產(chǎn)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供一種地震疊前時間偏移走時處理方法及裝置,以提高疊前時間偏移處理性能。為了解決上述技術(shù)問題,本發(fā)明公開了一種地震疊前時間偏移走時處理方法,包括對成像空間建立三維X-Y-Z坐標(biāo)系,每個點(diǎn)按照(x,y,z)坐標(biāo)唯一確定,對X、Y坐標(biāo)相同的點(diǎn)所構(gòu)成與Z軸平行的豎線之間并行進(jìn)行走時計算,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算;建立計算統(tǒng)一設(shè)備架構(gòu)(CUDA)線程模型和CUDA內(nèi)存模型以進(jìn)行上述并行走時計
笪
o較佳地,上述方法中,建立CUDA線程模型指將整個成像空間XY平面劃分為NX*NY/4塊,每一個Block的線程計算4條垂直于地面的豎線的點(diǎn)的走時計算,每一個Block包括128線程,其中每32個線程計算一條豎線。較佳地,上述方法中,所建立的CUDA內(nèi)存模型包括全局內(nèi)存、紋理內(nèi)存、共享內(nèi)存和常量內(nèi)存。較佳地,上述方法中,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算指對于每條豎線內(nèi)的點(diǎn),先并行計算出索引值能被8整除的點(diǎn)的走時,對不能被8整除的點(diǎn)則依賴于與其臨近的已精確計算的兩個點(diǎn)的值作線性插值得到該點(diǎn)的走時。
本發(fā)明還公開了一種地震疊前時間偏移走時處理裝置,包括第一單元,對成像空間建立三維X-Y-Z坐標(biāo)系,每個點(diǎn)按照(x,y, z)坐標(biāo)唯一確定;第二單元,對三維X-Y-Z坐標(biāo)系中X、Y坐標(biāo)相同的點(diǎn)所構(gòu)成與Z軸平行的豎線之間并行進(jìn)行走時計算,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算,以及建立計算統(tǒng)一設(shè)備架構(gòu)(CUDA)線程模型和CUDA內(nèi)存模型以進(jìn)行上述并行走時計算。較佳地,上述裝置中,第二單元,建立CUDA線程模型指,將整個成像空間XY平面劃分為NX*NY/4塊,每一個Block的線程計算4條垂直于地面的豎線的點(diǎn)的走時計算,每一個Block包括128線程,其中每32個線程計算一條豎線。 較佳地,上述裝置中,第二單元,所建立的CUDA內(nèi)存模型包括全局內(nèi)存、紋理內(nèi)存、共享內(nèi)存和常量內(nèi)存。較佳地,上述裝置中,所述第二單元,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算指對于每條豎線內(nèi)的點(diǎn),先并行計算出索引值能被8整除的點(diǎn)的走時,對不能被8整除的點(diǎn)則依賴于與其臨近的已精確計算的兩個點(diǎn)的值作線性插值得到該點(diǎn)的走時。本申請技術(shù)方案充分利用了 GPU的多核處理能力,解決了疊前時間偏移走時計算的瓶頸,令疊前時間偏移處理性能獲得大大提升。即本申請技術(shù)方案滿足了石油地震勘探資料處理的需求,并且降低了機(jī)房構(gòu)建成本和管理、運(yùn)行、維護(hù)費(fèi)用。
具體實(shí)施例方式圖I為本實(shí)施例中地震疊前時間偏移走時處理流程圖;圖2為本實(shí)施例中8層內(nèi)32個點(diǎn)并行走時計算線程圖;圖3為本實(shí)施例中I層內(nèi)32個點(diǎn)并行走時計算線程圖;圖4為本實(shí)施例中疊前時間偏移串行走時計算成像效果圖;圖5為本實(shí)施例中疊前時間偏移并行走時計算成像效果圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文將結(jié)合附圖
對本發(fā)明技術(shù)方案作進(jìn)一步詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請的實(shí)施例和實(shí)施例中的特征可以任意相互組合。實(shí)施例I本實(shí)施例,提供一種地震疊前時間偏移走時處理方法,該方法以Kirchhoff積分法疊前時間偏移走時計算串行算法為基礎(chǔ),并基于NVIDIA的Fermi GPU硬件體系結(jié)構(gòu),利用CUDA (Computing Unified Device Architecture,計算統(tǒng)一設(shè)備架構(gòu))技術(shù)對原有串行走時計算算法進(jìn)行并行化設(shè)計的。具體地,該方法的過程如圖I所示,包括如下步驟步驟100,確定并行走時計算算法;該步驟中,對成像空間建立三維X-Y-Z坐標(biāo)系,假設(shè)第一維大小為NX,第二維大小為NY,第三維大小為NZ,那么需要進(jìn)行走時計算的總點(diǎn)數(shù)為NX*NY*NZ,每個點(diǎn)按照(x,y,z)坐標(biāo)唯一確定。X、Y坐標(biāo)相同的點(diǎn)構(gòu)成一條與Z軸平行的線,物理上是一條垂直于地面的豎線,那么這樣的豎線有NX*NY條,并行走時計算采用兩級并行,豎線與豎線之間并行進(jìn)行走時計算;每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算。其中,對于同一條豎線上每一個點(diǎn)的走時T可采用多種方式計算。而本實(shí)施例中對同一條豎線上每一個點(diǎn)的走時T采用估算方式計算,即首先并行計算出索引值能被8整除的點(diǎn)的走時T,其余點(diǎn)的走時T依賴于與它臨近的已精確計算的兩個點(diǎn)的值作線性插值得。 步驟200,確定CUDA線程模型;該步驟中,將整個成像空間XY平面看成一個網(wǎng)格(Grid),將Grid定義為(NX,NY/4),即把整個Grid分為NX*NY/4塊(Block),每一個Block的線程計算4條垂直于地面的豎線的點(diǎn)的走時計算^fBlock定義為(32,4),即每一個Block包括128線程(Thread),其中每32個線程計算一條豎線。步驟300,確定CUDA內(nèi)存模型,主要是根據(jù)數(shù)據(jù)訪問特點(diǎn)及NVIDIA Fermi GPU內(nèi) 存資源特性,選擇不同的內(nèi)存存放不同的數(shù)據(jù),以達(dá)到性能最優(yōu)。該步驟中,CUDA內(nèi)存模型至少包括Global memory (全局內(nèi)存)、Texturememory (紋理內(nèi)存)、Shared memory (共享內(nèi)存)和 Constant memory (常量內(nèi)存)。其中,Global memory指成像空間數(shù)據(jù)存儲方式是先按照Z方向連續(xù),同時Z方向維度大小總是32的整數(shù)倍。Z方向的計算總是以32為單位進(jìn)行計算。因此在同一時刻,32個線程可以同時訪問成像空間的32個點(diǎn),而且這32個點(diǎn)在內(nèi)存中是連續(xù)的,并且可以做到線程與訪問點(diǎn)的--對應(yīng),從而形成對Global Memory的合并訪問,提高訪存性能;Texture memory指由于GPU中的Texture memory有cache,把只讀并且頻繁訪問的大輸入道數(shù)據(jù)存放其中,將提高訪存性能;Shared memory指由于Shared memory為GPU的片上內(nèi)存,訪問速度快,對于一個Block塊中公共的數(shù)據(jù),如能被8整除的點(diǎn)的走時、速度場等小數(shù)據(jù),可以放入共享內(nèi)存中,將提高訪存性能;Constant memory指對于PSTM計算中只讀的、頻繁被訪問的小數(shù)據(jù)塊可以放入Constant memory中,將大大提高訪存性能。下面結(jié)合具體應(yīng)用場景,詳細(xì)介紹上述方法的實(shí)現(xiàn)過程。首先進(jìn)行走時計算部分串行算法的并行性分析,將整個走時計算的代碼從疊前時間偏移程序中抽取出來,研究走時計算的串行算法,分析其是否具有并行性,研究發(fā)現(xiàn)每一點(diǎn)的走時計算是并行的,數(shù)據(jù)不存在依賴性,可以設(shè)計走時計算并行算法,利用CUDA實(shí)現(xiàn),移植到NVIDIA GPU中運(yùn)行。其次,需要確定并行走時計算算法,選定一個體偏成像空間,假設(shè)其第一維大小為177,第二維大小為1097,第三維大小為1504,那么需要進(jìn)行走時計算的總點(diǎn)數(shù)為177*1097*1504,即垂直于地面的豎線有177*1097 = 194169條,并行走時計算采用兩級并行,上述194169豎線之間互不依賴,可以并行進(jìn)行走時計算;每條豎線內(nèi)的1504個點(diǎn)可以并行進(jìn)行走時計算。并且對于同一條豎線上的1504個點(diǎn)的走時T并不需要精確計算出,而是首先并行計算出索引值能被8整除的點(diǎn)的走時T,其余點(diǎn)的走時T依賴于與它臨近的已精確計算的兩個點(diǎn)的值作線性插值得。其具體過程如下A、如圖2所示,以8層為一個計算單元,I個warp內(nèi)32個線程精確并行計算出索引值能被8整除的33個點(diǎn)的走時T,其中線程0多計算一個點(diǎn);
B、判斷一層內(nèi)所有點(diǎn)的索引號落在哪兩個最近的索引號能被8整除的點(diǎn)之間,然后計算其插值因子; C、并行進(jìn)行插值計算,如圖3所示,以一層為一個計算單元,I個warp內(nèi)32個線程并行插值計算一層內(nèi)所有點(diǎn)(包括索引號能被8整除的點(diǎn)和索引號不能被8整除的點(diǎn))的走時T,循環(huán)8次后,整個8層的所有點(diǎn)的走時T將被計算完成。接下來,確定CUDA線程模型,將整個上述成像空間XY平面看成一個網(wǎng)格(Grid),其 Grid 定義為 dim3 Grid(177,(1097+3)/4),即把整個 Grid 分為 177*(1097+3)/4 塊(Block),每一個Block的線程計算4條垂直于地面的豎線的點(diǎn)的走時計算;把Block定義為dim3 Block (32,4),即每一個Block包括128線程(Thread),其中每32個線程計算一條豎線。最后確定CUDA內(nèi)存,即根據(jù)數(shù)據(jù)訪問特點(diǎn)及NVIDIA Fermi GPU內(nèi)存資源特性,選擇不同的內(nèi)存存放不同的數(shù)據(jù),以達(dá)到性能最優(yōu)。其中,CUDA內(nèi)存至少包括Global memory>Texture memory> Shared memory 和 Constant memory。下面針對上述具體計算,進(jìn)行正確性測試,主要通過運(yùn)行上述體偏作業(yè),獲得圖4、圖5成像效果圖。其中,圖4為疊前時間偏移走時計算采用串行算法,運(yùn)行于CPU上所獲得的成像效果。圖5為疊前時間偏移走時計算采用并行算法,運(yùn)行于GPU上所獲得的成像效果。從結(jié)果來看,兩幅圖像不存在明顯差異,證明基于GPU的地震疊前時間偏移走時處理方法是正確的。再來了解性能測試中的測試環(huán)境及測試數(shù)據(jù)。測試環(huán)境包括硬件環(huán)境、軟件環(huán)境、疊前時間偏移運(yùn)行內(nèi)核,其中疊前時間偏移運(yùn)行內(nèi)核為疊前時間偏移的核心計算部分,即包括走時計算部分;測試數(shù)據(jù)為輸入的測試地震道數(shù)據(jù)集。對于成像空間而言,其中第一維為X軸方向的大?。坏诙S為Y軸方向的大?。坏谌S為Z軸方向的大小,具體各項(xiàng)參數(shù)如表I所示。表I為測試環(huán)境和測試數(shù)據(jù)參數(shù)表
權(quán)利要求
1.一種地震疊前時間偏移走時處理方法,其特征在于,該方法包括 對成像空間建立三維X-Y-Z坐標(biāo)系,每個點(diǎn)按照(x,y, z)坐標(biāo)唯一確定,對X、Y坐標(biāo)相同的點(diǎn)所構(gòu)成與Z軸平行的豎線之間并行進(jìn)行走時計算,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算; 建立計算統(tǒng)一設(shè)備架構(gòu)(CUDA)線程模型和CUDA內(nèi)存模型以進(jìn)行上述并行走時計算。
2.如權(quán)利要求I所述的方法,其特征在于,建立CUDA線程模型指 將整個成像空間XY平面劃分為NX*NY/4塊,每一個Block的線程計算4條垂直于地面的豎線的點(diǎn)的走時計算,每一個Block包括128線程,其中每32個線程計算一條豎線。
3.如權(quán)利要求I或2所述的方法,其特征在于, 所建立的CUDA內(nèi)存模型包括全局內(nèi)存、紋理內(nèi)存、共享內(nèi)存和常量內(nèi)存。
4.如權(quán)利要求3所述的方法,其特征在于,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算指 對于每條豎線內(nèi)的點(diǎn),先并行計算出索引值能被8整除的點(diǎn)的走時,對不能被8整除的點(diǎn)則依賴于與其臨近的已精確計算的兩個點(diǎn)的值作線性插值得到該點(diǎn)的走時。
5.一種地震疊前時間偏移走時處理裝置,其特征在于,該裝置包括 第一單元,對成像空間建立三維X-Y-Z坐標(biāo)系,每個點(diǎn)按照(x,y, z)坐標(biāo)唯一確定;第二單元,對三維X-Y-Z坐標(biāo)系中X、Y坐標(biāo)相同的點(diǎn)所構(gòu)成與Z軸平行的豎線之間并行進(jìn)行走時計算,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算,以及建立計算統(tǒng)一設(shè)備架構(gòu)(CUDA)線程模型和CUDA內(nèi)存模型以進(jìn)行上述并行走時計算。
6.如權(quán)利要求5所述的裝置,其特征在于, 第二單元,建立CUDA線程模型指,將整個成像空間XY平面劃分為NX*NY/4塊,每一個Block的線程計算4條垂直于地面的豎線的點(diǎn)的走時計算,每一個Block包括128線程,其中每32個線程計算一條豎線。
7.如權(quán)利要求5或6所述的裝置,其特征在于, 第二單元,所建立的CUDA內(nèi)存模型包括全局內(nèi)存、紋理內(nèi)存、共享內(nèi)存和常量內(nèi)存。
8.如權(quán)利要求7所述的裝置,其特征在于, 所述第二單元,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算指對于每條豎線內(nèi)的點(diǎn),先并行計算出索引值能被8整除的點(diǎn)的走時,對不能被8整除的點(diǎn)則依賴于與其臨近的已精確計算的兩個點(diǎn)的值作線性插值得到該點(diǎn)的走時。
全文摘要
本發(fā)明公開了一種地震疊前時間偏移走時處理方法及裝置,涉及計算機(jī)高性能計算、并行計算領(lǐng)域、石油地震勘探領(lǐng)域。本發(fā)明公開的地震疊前時間偏移走時處理方法包括對成像空間建立三維X-Y-Z坐標(biāo)系,每個點(diǎn)按照(x,y,z)坐標(biāo)唯一確定,對X、Y坐標(biāo)相同的點(diǎn)所構(gòu)成與Z軸平行的豎線之間并行進(jìn)行走時計算,對每條豎線內(nèi)的點(diǎn)并行進(jìn)行走時計算;建立計算統(tǒng)一設(shè)備架構(gòu)(CUDA)線程模型和CUDA內(nèi)存模型以進(jìn)行上述并行走時計算。本發(fā)明還公開了一種地震疊前時間偏移走時處理裝置。本申請技術(shù)方案解決了疊前時間偏移走時計算的瓶頸,令疊前時間偏移處理性能獲得大大提升。
文檔編號G01V1/28GK102636808SQ20121002634
公開日2012年8月15日 申請日期2012年2月7日 優(yōu)先權(quán)日2012年2月7日
發(fā)明者吳慶, 張清, 謝海波, 趙開勇 申請人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司