黃坤
(中海油信息科技有限公司深圳分公司 廣東省深圳市 518000)
石油企業是國家經濟發展的基礎,在石油生產中需要處理各種數據,包括對各類地質的勘察、地質結構的分析等。同時,在石油開采過程中,還需要根據不同的數據進行各類仿真計算。而這些仿真的過程中需要對海量的數據進行計算。在傳統的數據處理架構下,海量的數據計算難以完成,特別是在石油開采現場工作中,大數據等技術也難以有效解決此類問題。
在計算機架構中,CPU 組件主要用來完成各類邏輯判斷以及數據計算工作。但是傳統的CPU 架構難以高效解決圖形計算。而GPU 的出現彌補了CPU 對圖形等數據計算能力的不足。GPU 是針對圖形以及圖像領域的專用計算芯片,在處理圖像時可以利用并行計算的優勢,提升處理效率,因此GPU 能夠支撐高效的并行計算。在計算處理效率以及存儲上,GPU 進行了專門的帶寬設計,對比CPU 而言具有更高的性價比。同時,GPU 支持單機運行,也適合在石油開采等可能并不具備良好網絡以及環境的野外作業現場完成復雜的計算。
GPU 處理器中具有高度并發的執行芯片單元,能夠快速處理各類并發任務。同時,隨著GPU 技術的不斷發展,GPU 的計算能力也在不斷的提高。在對編程的支持上,GPU 支持動態編程以及流水線操作,并且提供了較大的接口支撐,能夠快速完成各類矩陣技術、方程求解等,并且能夠并發處理海量的數據。因此,基于GPU 完成數據管理成為目前業界以及學界的研究重點。本文基于GPU 設計石油數據管理系統,利用GPU 的計算能力能夠代替傳統數據庫的查詢、插入、計算等功能。
本文設計基于GPU 的并行計算的石油數據管理系統架構如圖1 所示。其中包括對數據的查詢以及數據的訪問等功能。在查詢時,進程能夠動態的高效的完成數據的查詢,并且通過動態鏈接庫的形式提供邏輯功能,而不斷中間邏輯的執行程序。不同的數據查詢能夠低耦合的高效并行,進程之間能夠高效的進行通信,提高了數據處理的協作能力。
在實現基于GPU 的并行計算的石油數據管理系統中,GPU 為各個進程提供數據的查詢與計算功能。在數據的計算時,GPU 可以提供對SQL 語言的支持,通過解析SQL 語句,GPU 能夠提供對查詢服務的動態計算功能。系統的查詢進程主要完成兩個基本功能,首先完成對SQL 語句的解析,然后通過與數據庫的機制結合,將SQL 分解為GPU 的運算單元,然后通過GPU 執行數據的查詢。GPU 根據SQL 語句的邏輯進行計算,然后分解為并行的計算語句,并由動態接口來完成對數據的處理工作。在數據的動態執行過程中,數據庫生成動態服務機制提供給客戶端完成查詢,由動態鏈接庫提供給客戶端使用。通過結合GPU 的動態機制以及數據庫的服務進程,數據服務器能統一不同的GPU 接口以及數據服務的遠程調用接口,從而高效的返回數據查詢結果。服務器通過建立Socket 監聽進程來接受客戶端的數據請求,接受到數據請求后調用GPU 的執行模塊完成對數據的處理。GPU 通過并行機制發起多個進程,共同完成對數據的查詢。在數據庫的管理端接受查詢信息,插入數據緩存,并提供Kernel 的核心調用。數據庫采用多線性對接GPU 的多個計算單元,任意線程的查詢失敗不影響數據的其他模塊。在開發時,提供函數的API 接口供開發者進行調用。

圖1:系統架構
本文基于CUDA 完成GPU 并行計算的石油數據管理架構,CUDA 分為主機以及設備。每一個系統中,由主機完成計算任務的統一調度與分配,而設備主要協助主機完成各類計算。每一個主機可以擁有多個GPU 計算單元。CPU 協助GPU 完成邏輯指令的計算以及各類流程的處理。GPU 完成核心計算,分解復雜任務,然后利用資源高效計算。各個計算單元之間保持獨立,并通過kernel 函數處理核心的計算任務。
kernel 函數是CUDA 中并行化計算的核心,kernel 函數能夠被GPU 并行執行計算。通過將任何劃分為不同的kernel 函數,GPU能夠充分利用硬件的并行資源來完成任何的并行計算。在并行計算時,GPU 中的線程以及線程塊共同完成對任務的劃分。CUDA 具有上下文的計算信息,上下文包括了對計算資源的請求,以及計算環境的記錄。在數據庫服務中,包括了上下文請求的數據信息。在CUDA 的動態查詢過程中,kernel 函數能減少對資源的占用,提升查詢任務進程的效率,其主要代碼如下。

每一次數據庫的查詢任務都需要生成一個GPU 的上下文計算環境。在數據庫的查詢以及計算中,上下文環境的切換由CPU 來協助完成。GPU 通過資源標識來完成對上下文資源的引用。當查詢任務生成時,進程讀取上下文環境,并且通過數據庫的服務進程來引用CUDA 計算資源,主要代碼如下。

GPU 具有不阻塞進程的優點。由于其執行單位在物理上存在并行的可能性,因此在數據查詢時,通過服務進程調用CUDA 的上下文,并且在不同GPU 的單元上執行計算任務,能夠解決傳統CPU 的串行計算問題以及流水線生產時的數據合并問題。不同流下的CUDA 計算單元不會被租售,因此也提高了數據庫的查詢效率。
數據庫在查詢時會將數據表格的各個屬性提前讀取到內存,可以由獨立的GPU 運行單位負責維護該信息。數據庫查詢請求發起后,查詢進程通過向GPU 發起請求來訪問不同的數據列。GPU 受到請求后,將該數據的內存地址返回給查詢進程,但是在邏輯上進行隔離,從而防止數據被改動。
本節分析GPU 并行計算石油數據管理系統在油田生產中的具體應用。在石油開采過程中,需要對低滲透油田等地質條件復雜的環境進行模擬。在模擬是需要求解復雜的方程,而這些方程具有無邊界性、復雜性以及非平衡性。通過解析的方式難以求解此類方程,因此需要進行復雜的數值模擬。在數值模擬的過程中,涉及大量的矩陣劃分、離散求解等問題。比如在對頁巖儲層記性開采時,需要對其中地裂縫的壓力等進行模擬仿真,防止出現開采過程中的安全事故,本文設計的基于GPU 的石油數據管理系統能夠為該功能計算提供有效支撐。
其中,地層中的單相流的方程可以采用公式(1)表示。

為求解該方程,需要對其進行體積分,得到公式(2)。

在進行(2)的積分計算時,可以充分利用GPU 并行數據管理的優勢,采用并發的高效的計算單位來模擬該積分方程的值。利用GPU 的CUDA 計算單位,將(2)分解為不同的求解函數,然后將求解的執行單元并發的分類到不同的執行單元,然后在并行數據庫中對數據進行查詢及計算,通過蒙特卡洛數值模擬,計算不同條件下的概率,最終合并所有計算單元的解,得到最終的方程解。
隨著石油產業的發展,其對并行計算、海量數據處理具有較高的要求,傳統的數據庫無法滿足其計算性能的要求,而GPU 由于能夠完成高效的并行計算,成為石油需求背景下,進行并發計算的重要數據基礎。本文基于GPU 設計石油數據管理系統,能夠有效支撐不同應用場景下對海量數據并行計算及管理的需求。