黃坤
(中海油信息科技有限公司深圳分公司 廣東省深圳市 518000)
石油企業(yè)是國家經(jīng)濟(jì)發(fā)展的基礎(chǔ),在石油生產(chǎn)中需要處理各種數(shù)據(jù),包括對各類地質(zhì)的勘察、地質(zhì)結(jié)構(gòu)的分析等。同時(shí),在石油開采過程中,還需要根據(jù)不同的數(shù)據(jù)進(jìn)行各類仿真計(jì)算。而這些仿真的過程中需要對海量的數(shù)據(jù)進(jìn)行計(jì)算。在傳統(tǒng)的數(shù)據(jù)處理架構(gòu)下,海量的數(shù)據(jù)計(jì)算難以完成,特別是在石油開采現(xiàn)場工作中,大數(shù)據(jù)等技術(shù)也難以有效解決此類問題。
在計(jì)算機(jī)架構(gòu)中,CPU 組件主要用來完成各類邏輯判斷以及數(shù)據(jù)計(jì)算工作。但是傳統(tǒng)的CPU 架構(gòu)難以高效解決圖形計(jì)算。而GPU 的出現(xiàn)彌補(bǔ)了CPU 對圖形等數(shù)據(jù)計(jì)算能力的不足。GPU 是針對圖形以及圖像領(lǐng)域的專用計(jì)算芯片,在處理圖像時(shí)可以利用并行計(jì)算的優(yōu)勢,提升處理效率,因此GPU 能夠支撐高效的并行計(jì)算。在計(jì)算處理效率以及存儲上,GPU 進(jìn)行了專門的帶寬設(shè)計(jì),對比CPU 而言具有更高的性價(jià)比。同時(shí),GPU 支持單機(jī)運(yùn)行,也適合在石油開采等可能并不具備良好網(wǎng)絡(luò)以及環(huán)境的野外作業(yè)現(xiàn)場完成復(fù)雜的計(jì)算。
GPU 處理器中具有高度并發(fā)的執(zhí)行芯片單元,能夠快速處理各類并發(fā)任務(wù)。同時(shí),隨著GPU 技術(shù)的不斷發(fā)展,GPU 的計(jì)算能力也在不斷的提高。在對編程的支持上,GPU 支持動態(tài)編程以及流水線操作,并且提供了較大的接口支撐,能夠快速完成各類矩陣技術(shù)、方程求解等,并且能夠并發(fā)處理海量的數(shù)據(jù)。因此,基于GPU 完成數(shù)據(jù)管理成為目前業(yè)界以及學(xué)界的研究重點(diǎn)。本文基于GPU 設(shè)計(jì)石油數(shù)據(jù)管理系統(tǒng),利用GPU 的計(jì)算能力能夠代替?zhèn)鹘y(tǒng)數(shù)據(jù)庫的查詢、插入、計(jì)算等功能。
本文設(shè)計(jì)基于GPU 的并行計(jì)算的石油數(shù)據(jù)管理系統(tǒng)架構(gòu)如圖1 所示。其中包括對數(shù)據(jù)的查詢以及數(shù)據(jù)的訪問等功能。在查詢時(shí),進(jìn)程能夠動態(tài)的高效的完成數(shù)據(jù)的查詢,并且通過動態(tài)鏈接庫的形式提供邏輯功能,而不斷中間邏輯的執(zhí)行程序。不同的數(shù)據(jù)查詢能夠低耦合的高效并行,進(jìn)程之間能夠高效的進(jìn)行通信,提高了數(shù)據(jù)處理的協(xié)作能力。
在實(shí)現(xiàn)基于GPU 的并行計(jì)算的石油數(shù)據(jù)管理系統(tǒng)中,GPU 為各個(gè)進(jìn)程提供數(shù)據(jù)的查詢與計(jì)算功能。在數(shù)據(jù)的計(jì)算時(shí),GPU 可以提供對SQL 語言的支持,通過解析SQL 語句,GPU 能夠提供對查詢服務(wù)的動態(tài)計(jì)算功能。系統(tǒng)的查詢進(jìn)程主要完成兩個(gè)基本功能,首先完成對SQL 語句的解析,然后通過與數(shù)據(jù)庫的機(jī)制結(jié)合,將SQL 分解為GPU 的運(yùn)算單元,然后通過GPU 執(zhí)行數(shù)據(jù)的查詢。GPU 根據(jù)SQL 語句的邏輯進(jìn)行計(jì)算,然后分解為并行的計(jì)算語句,并由動態(tài)接口來完成對數(shù)據(jù)的處理工作。在數(shù)據(jù)的動態(tài)執(zhí)行過程中,數(shù)據(jù)庫生成動態(tài)服務(wù)機(jī)制提供給客戶端完成查詢,由動態(tài)鏈接庫提供給客戶端使用。通過結(jié)合GPU 的動態(tài)機(jī)制以及數(shù)據(jù)庫的服務(wù)進(jìn)程,數(shù)據(jù)服務(wù)器能統(tǒng)一不同的GPU 接口以及數(shù)據(jù)服務(wù)的遠(yuǎn)程調(diào)用接口,從而高效的返回?cái)?shù)據(jù)查詢結(jié)果。服務(wù)器通過建立Socket 監(jiān)聽進(jìn)程來接受客戶端的數(shù)據(jù)請求,接受到數(shù)據(jù)請求后調(diào)用GPU 的執(zhí)行模塊完成對數(shù)據(jù)的處理。GPU 通過并行機(jī)制發(fā)起多個(gè)進(jìn)程,共同完成對數(shù)據(jù)的查詢。在數(shù)據(jù)庫的管理端接受查詢信息,插入數(shù)據(jù)緩存,并提供Kernel 的核心調(diào)用。數(shù)據(jù)庫采用多線性對接GPU 的多個(gè)計(jì)算單元,任意線程的查詢失敗不影響數(shù)據(jù)的其他模塊。在開發(fā)時(shí),提供函數(shù)的API 接口供開發(fā)者進(jìn)行調(diào)用。
圖1:系統(tǒng)架構(gòu)
本文基于CUDA 完成GPU 并行計(jì)算的石油數(shù)據(jù)管理架構(gòu),CUDA 分為主機(jī)以及設(shè)備。每一個(gè)系統(tǒng)中,由主機(jī)完成計(jì)算任務(wù)的統(tǒng)一調(diào)度與分配,而設(shè)備主要協(xié)助主機(jī)完成各類計(jì)算。每一個(gè)主機(jī)可以擁有多個(gè)GPU 計(jì)算單元。CPU 協(xié)助GPU 完成邏輯指令的計(jì)算以及各類流程的處理。GPU 完成核心計(jì)算,分解復(fù)雜任務(wù),然后利用資源高效計(jì)算。各個(gè)計(jì)算單元之間保持獨(dú)立,并通過kernel 函數(shù)處理核心的計(jì)算任務(wù)。
kernel 函數(shù)是CUDA 中并行化計(jì)算的核心,kernel 函數(shù)能夠被GPU 并行執(zhí)行計(jì)算。通過將任何劃分為不同的kernel 函數(shù),GPU能夠充分利用硬件的并行資源來完成任何的并行計(jì)算。在并行計(jì)算時(shí),GPU 中的線程以及線程塊共同完成對任務(wù)的劃分。CUDA 具有上下文的計(jì)算信息,上下文包括了對計(jì)算資源的請求,以及計(jì)算環(huán)境的記錄。在數(shù)據(jù)庫服務(wù)中,包括了上下文請求的數(shù)據(jù)信息。在CUDA 的動態(tài)查詢過程中,kernel 函數(shù)能減少對資源的占用,提升查詢?nèi)蝿?wù)進(jìn)程的效率,其主要代碼如下。
每一次數(shù)據(jù)庫的查詢?nèi)蝿?wù)都需要生成一個(gè)GPU 的上下文計(jì)算環(huán)境。在數(shù)據(jù)庫的查詢以及計(jì)算中,上下文環(huán)境的切換由CPU 來協(xié)助完成。GPU 通過資源標(biāo)識來完成對上下文資源的引用。當(dāng)查詢?nèi)蝿?wù)生成時(shí),進(jìn)程讀取上下文環(huán)境,并且通過數(shù)據(jù)庫的服務(wù)進(jìn)程來引用CUDA 計(jì)算資源,主要代碼如下。
GPU 具有不阻塞進(jìn)程的優(yōu)點(diǎn)。由于其執(zhí)行單位在物理上存在并行的可能性,因此在數(shù)據(jù)查詢時(shí),通過服務(wù)進(jìn)程調(diào)用CUDA 的上下文,并且在不同GPU 的單元上執(zhí)行計(jì)算任務(wù),能夠解決傳統(tǒng)CPU 的串行計(jì)算問題以及流水線生產(chǎn)時(shí)的數(shù)據(jù)合并問題。不同流下的CUDA 計(jì)算單元不會被租售,因此也提高了數(shù)據(jù)庫的查詢效率。
數(shù)據(jù)庫在查詢時(shí)會將數(shù)據(jù)表格的各個(gè)屬性提前讀取到內(nèi)存,可以由獨(dú)立的GPU 運(yùn)行單位負(fù)責(zé)維護(hù)該信息。數(shù)據(jù)庫查詢請求發(fā)起后,查詢進(jìn)程通過向GPU 發(fā)起請求來訪問不同的數(shù)據(jù)列。GPU 受到請求后,將該數(shù)據(jù)的內(nèi)存地址返回給查詢進(jìn)程,但是在邏輯上進(jìn)行隔離,從而防止數(shù)據(jù)被改動。
本節(jié)分析GPU 并行計(jì)算石油數(shù)據(jù)管理系統(tǒng)在油田生產(chǎn)中的具體應(yīng)用。在石油開采過程中,需要對低滲透油田等地質(zhì)條件復(fù)雜的環(huán)境進(jìn)行模擬。在模擬是需要求解復(fù)雜的方程,而這些方程具有無邊界性、復(fù)雜性以及非平衡性。通過解析的方式難以求解此類方程,因此需要進(jìn)行復(fù)雜的數(shù)值模擬。在數(shù)值模擬的過程中,涉及大量的矩陣劃分、離散求解等問題。比如在對頁巖儲層記性開采時(shí),需要對其中地裂縫的壓力等進(jìn)行模擬仿真,防止出現(xiàn)開采過程中的安全事故,本文設(shè)計(jì)的基于GPU 的石油數(shù)據(jù)管理系統(tǒng)能夠?yàn)樵摴δ苡?jì)算提供有效支撐。
其中,地層中的單相流的方程可以采用公式(1)表示。
為求解該方程,需要對其進(jìn)行體積分,得到公式(2)。
在進(jìn)行(2)的積分計(jì)算時(shí),可以充分利用GPU 并行數(shù)據(jù)管理的優(yōu)勢,采用并發(fā)的高效的計(jì)算單位來模擬該積分方程的值。利用GPU 的CUDA 計(jì)算單位,將(2)分解為不同的求解函數(shù),然后將求解的執(zhí)行單元并發(fā)的分類到不同的執(zhí)行單元,然后在并行數(shù)據(jù)庫中對數(shù)據(jù)進(jìn)行查詢及計(jì)算,通過蒙特卡洛數(shù)值模擬,計(jì)算不同條件下的概率,最終合并所有計(jì)算單元的解,得到最終的方程解。
隨著石油產(chǎn)業(yè)的發(fā)展,其對并行計(jì)算、海量數(shù)據(jù)處理具有較高的要求,傳統(tǒng)的數(shù)據(jù)庫無法滿足其計(jì)算性能的要求,而GPU 由于能夠完成高效的并行計(jì)算,成為石油需求背景下,進(jìn)行并發(fā)計(jì)算的重要數(shù)據(jù)基礎(chǔ)。本文基于GPU 設(shè)計(jì)石油數(shù)據(jù)管理系統(tǒng),能夠有效支撐不同應(yīng)用場景下對海量數(shù)據(jù)并行計(jì)算及管理的需求。