司道軍
摘要:石油勘探數(shù)據(jù)處理長期以來一直是超級計(jì)算機(jī)的重要應(yīng)用領(lǐng)域。隨著石油勘探從常規(guī)勘探走向非常規(guī)勘探,勘探數(shù)據(jù)規(guī)模從TB級跨越到PB級,石油勘探數(shù)值模擬的計(jì)算量越來越大,對超級計(jì)算機(jī)的依賴越來越高。本文主要探討超級計(jì)算環(huán)境下優(yōu)化石油勘探數(shù)值模擬的幾種策略。
關(guān)鍵詞:石油勘探數(shù)值模擬超級計(jì)算
引言
石油勘探目前的主要手段是通過在地表或者海上激發(fā)人工震源,震源產(chǎn)生的地震波向地下介質(zhì)中傳播,到地震波遇到地下構(gòu)造時(shí),會(huì)產(chǎn)生反射等波現(xiàn)象,當(dāng)?shù)卣鸩ㄔ俅蔚竭_(dá)地表時(shí)被檢波器接收。由于勘探工區(qū)到幾百甚至上千平方公里,數(shù)據(jù)量十分龐大。同時(shí)這些海量的地震數(shù)據(jù)必須借助超級計(jì)算機(jī)的強(qiáng)大算力,才能得到地下復(fù)雜構(gòu)造的形態(tài),進(jìn)一步指導(dǎo)地質(zhì)專家確定可能的油氣富集區(qū)。
1并行計(jì)算優(yōu)化策略
超級計(jì)算機(jī)是將幾萬甚至幾十萬個(gè)計(jì)算節(jié)點(diǎn)通過高速互聯(lián)網(wǎng)絡(luò)連接起來,而每個(gè)計(jì)算節(jié)點(diǎn)又通常包含幾十個(gè)CPU計(jì)算核心,這些計(jì)算核心就是真正提供算力的計(jì)算單元。同時(shí)為了提高I/O效率,超級計(jì)算機(jī)往往采用功能強(qiáng)大的并行文件系統(tǒng)。目前依賴于底層的物理硬件,主要的并行優(yōu)化策略包括MPI并行優(yōu)化技術(shù)、多線程并行優(yōu)化技術(shù)、指令集優(yōu)化技術(shù)等。
2 MPI并行優(yōu)化計(jì)算
MPI,全稱為Message Passing Interface,即消息傳遞接口,它適用于分布式內(nèi)存的計(jì)算機(jī),而超級計(jì)算機(jī)大都是分布式內(nèi)存架構(gòu)的。它是在標(biāo)準(zhǔn)串行程序設(shè)計(jì)語言的基礎(chǔ)上,通過加入一些消息傳遞的函數(shù)構(gòu)建的并行編程模型。目前在超級計(jì)算機(jī)上運(yùn)行的程序主要是MPI程序。它具有可移植性高、擴(kuò)展性好等優(yōu)點(diǎn)。MPI的程序設(shè)計(jì)以進(jìn)程為獨(dú)立的計(jì)算單位,計(jì)算任務(wù)根據(jù)物理問題被分解成不同的子任務(wù)分發(fā)到不同的進(jìn)程上執(zhí)行,進(jìn)程間的數(shù)據(jù)傳遞通過MPI的消息傳遞函數(shù)實(shí)現(xiàn)。以石油勘探數(shù)值模擬為例,激發(fā)的人工震源往往是幾千甚至上萬炮。每一炮可以作為獨(dú)立的子任務(wù)在不同的進(jìn)程上執(zhí)行。另一種劃分方式是,將每一炮要進(jìn)行數(shù)值模擬的數(shù)值模型劃分為不同的區(qū)域,每個(gè)區(qū)域的計(jì)算任務(wù)在單獨(dú)的進(jìn)程上執(zhí)行,根據(jù)劃分的方式又可以分為一維劃分,二維和三維MPI拓?fù)涞确绞健PI并行方法的瓶頸在于處理進(jìn)程間通信和數(shù)據(jù)I/O。針對通信問題,可以采用異步通信將計(jì)算和通信重疊,提高計(jì)算效率,針對I/O問題,可以采用MPI-IO替代串行10,充分利用超級計(jì)算機(jī)的并行文件系統(tǒng)的吞吐效率。采用一維方向數(shù)值模型剖分的MPI并行技術(shù),我們實(shí)現(xiàn)了80%的并行效率,120CPU核心并行相比12CPU核心并行,MPI加速比達(dá)到8倍。如圖l所示。
3多線程編程技術(shù)
MPI適用于分布式內(nèi)存的并行計(jì)算機(jī)系統(tǒng),而多線程模型適用于共享式內(nèi)存的計(jì)算機(jī)系統(tǒng)。超級計(jì)算機(jī)計(jì)算節(jié)點(diǎn)之間是分布式內(nèi)存,而節(jié)點(diǎn)內(nèi)部的不同CPU核心是共享內(nèi)存的形式,因此超級計(jì)算機(jī)并行優(yōu)化技術(shù)既可以采用MPI并行技術(shù),也可以采用多線程優(yōu)化技術(shù),常用的多線程編程模型有OpenMP、Pthreads等。下面以O(shè)penMP為例闡述多線程優(yōu)化技術(shù)。超級計(jì)算機(jī)每個(gè)節(jié)點(diǎn)內(nèi)的核心共享主板上的內(nèi)存,人們?nèi)粘J褂玫亩嗪诵墓P記本電腦、臺(tái)式機(jī)、工作站也是這種結(jié)構(gòu),因此多線程優(yōu)化技術(shù)也有廣泛的適用性。相比MPI并行編程,程序員不必處理復(fù)雜的進(jìn)程間的數(shù)據(jù)通信,對代碼改動(dòng)量較小,特別是OpenMP編程模型,程序員只需在計(jì)算量加大的for循環(huán)等部分加上一些指導(dǎo)語句即可。但是由于是共享內(nèi)存,OpenMP等多線程優(yōu)化技術(shù)需要小心處理線程間數(shù)據(jù)的共享和私有,避免數(shù)據(jù)競爭。通常一個(gè)優(yōu)化的較好的多線程代碼,只需少量的代碼改動(dòng),數(shù)值計(jì)算的效率就可以實(shí)現(xiàn)近線性的加速效果。我們采用OpenMP并行編程技術(shù),在12線程的情況下,取得了相比單線程10倍的加速比。如圖2所示。
4指令集優(yōu)化
我們都知道計(jì)算執(zhí)行程序時(shí)是通過底層指令集對數(shù)據(jù)的操作實(shí)現(xiàn)的。計(jì)算機(jī)內(nèi)有很多寄存器,通過單指令多數(shù)據(jù)(SIMD)操作,當(dāng)需要多個(gè)數(shù)據(jù)執(zhí)行相同的操作時(shí),SIMD指令可以大大提供程序的執(zhí)行效率。Intel等廠商提供了SSE、AVX等多種指令集,可以用來對程序進(jìn)行指令集優(yōu)化。相比前面提到的MPI并行編程和OpenMP多線程編程,指令集優(yōu)化抑制性較差,依賴于具體的硬件,而且對程序員的要求較高,需要對代碼做大量的改動(dòng)工作。但是對于像傅里葉變換等用途較廣的底層數(shù)學(xué)庫,具有較高的價(jià)值。英特爾提供的MKL數(shù)據(jù)庫就采用了指令集優(yōu)化等手段。采用SSE等指令集對代碼改寫,我們?nèi)〉昧?.8倍的加速效率(理論上最高為4倍)。
5結(jié)束語
超級計(jì)算機(jī)節(jié)點(diǎn)之間為分布式內(nèi)存結(jié)構(gòu),節(jié)點(diǎn)內(nèi)為共享式內(nèi)存結(jié)構(gòu),節(jié)點(diǎn)之間采用高速互聯(lián)網(wǎng)絡(luò)進(jìn)行信息傳遞,這種復(fù)雜的系統(tǒng)結(jié)構(gòu)可以綜合采用指令集優(yōu)化、多線程優(yōu)化、MPI并行優(yōu)化技術(shù)等,充分挖掘超級計(jì)算機(jī)的潛力。本文通過基本理論介紹和實(shí)際數(shù)據(jù)測試,闡述了如何利用超級計(jì)算機(jī)對石油勘探數(shù)值模擬進(jìn)行優(yōu)化。
參考文獻(xiàn)
[1] Poyraz E,Xu H,Cui Y.Application-specific I/O optimizationson petascale supercomputers[J]. Procedia Computer Science, 2014,29: 910-923.
[2] Komatitsch D, Martin R. An unsplit convolutional perfectlymatched layer improved at grazing incidence for the seismic waveequation[J]. Geophysics, 2007, 72(5): SM155-SM167.
[3]Kjolstad F B,Snir M. Ghost cell pattern[C]//Proceedings of the2010 Workshop on Parallel Programming Patterns. ACM, 2010:4.
[4]莫?jiǎng)t堯,袁國興.消息傳遞并行編程環(huán)境MPI[M].科學(xué)出版社,2001.