付穎
(黔南民族職業(yè)技術學院大數(shù)據(jù)與電子商務系 貴州省黔南布依族苗族自治州 558022)
從計算機發(fā)明之初,到現(xiàn)如今的人工智能的出現(xiàn),計算機的快速發(fā)展已成為很多領域的核心力量。在本世紀的頭10年,利用空氣冷卻技術制成的集成電路,其散熱能力已經(jīng)達到了該器件的極限。因此,通過不斷加快集成電路的速率來提升處理性能的方法已經(jīng)不再適用,既然計算方法對改善計算機處理性能有推動作用,那么繼續(xù)發(fā)掘更強的計算機處理能力就是迫切且必要的,所以人們在研發(fā)新一代計算機的進程中,并行技術起著關鍵性的作用。并行技術是指在同一時間內(nèi),增添運算量的處理技術。然而在目前的發(fā)展過程中,并行軟件的進展,極大程度上地滯緩于并行技術體系結構的進展;并行技術的使用,也極大程度上地較滯緩于并行技術的發(fā)展[1]。
隨著并行技術的發(fā)展,市面上出現(xiàn)了形式不同的并行模型。比如基于程序構建的模型(CSP、Linda 等),基于問題闡述的模型(GAMMA、UNITY 等),基于并行理論的模型(PRAM、BSP 等)和硬件結構抽象模型(又稱為自然模型)。而硬件結構的抽象模型又分為同享儲存的模型和語言(PVP,SMP 等)在 Pthreads、OpenMP等環(huán)境下進行內(nèi)存同享編程,訊息傳送的模型和語言(適于MPP,Cluster 等)在MPI、PVM 等環(huán)境下進行分布式內(nèi)存編程;數(shù)據(jù)并行的模型和語言(適合 MPP/Cluster上完成 SPMD 操作)在 Fortran、HPF 等環(huán)境下編程[2]。
OpenMP 技術是一種用于共享內(nèi)存并行系統(tǒng)的多線程程序設計方案,支持的編程語言含C、C++和Fortran[3]。OpenMP 技術提供對并行算法的高層抽象描述,特別適合在多核CPU 機器上的并行程序設計,程序員課通過在源代碼中添加專門的編譯指示來表明自己的編程意圖,由此編譯器可以自動地將程序進行并行化,并在必要之處加入同步互斥以及通信。當選擇忽略這些編譯指示時,或者編譯器不支持OpenMP 技術時,程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運作,只是不能利用多線程來加速程序執(zhí)行[4-5]。
串行計算:傳統(tǒng)意義上的編程計算,指計算過程只能夠按照計算機的執(zhí)行順序進行的計算,在同一個時刻中計算機只能進行一次運算。
并行計算:是一種快速的計算方式,是相對串行計算而言的,我們又把這種計算方式稱為平行計算。傳統(tǒng)的串行計算由“指令”與“數(shù)據(jù)”兩部分構成,在代碼施行時,內(nèi)存空間是采取“獨立應用和占有”的方式,而且在代碼運行期間所有的運算都僅限于此。而并行計算,則是將計算相對獨立的分配給不同節(jié)點的進程,通過它們自己獨立的操作進行系統(tǒng)調(diào)度,享受獨立的CPU和內(nèi)存資源(即共享內(nèi)存),進程中通過消息傳遞實現(xiàn)訊息的交換。它是一種一次能夠施行多個命令的算法,是一個能夠在同一時間內(nèi)利用各種不同的計算方式求解計算問題的歷程,是一種有效的提高計算速率和處理能力的運算方法。其根本思想是使用多個處理器來解決同樣的問題。換言之,就是將問題分成幾個部分,每個部分由一個單獨的處理器進行解決的運算歷程[6-7]。
進程:一個具有獨立功能的程序關于某個數(shù)據(jù)集合的一次運行活動,是CPU 資源分配的最小單位。
線程:建立在進程的基礎上的一次程序運行單位,被包含在進程之中,是CPU 調(diào)度的最小單位,也是進程中的實際運作單位。
并行體:并行計算的數(shù)據(jù)規(guī)模。
并行數(shù)目:并行計算的次數(shù)。
加速比:同一個任務在單處理器系統(tǒng)和并行處理器系統(tǒng)中運行消耗的時間的比率,用來衡量并行系統(tǒng)或程序并行化的性能和效果。
在本文中所以涉及到的計算的軟件環(huán)境是:64 位windows7 操作系統(tǒng)和CodeBlocks(版本13.12.0.0)編譯器,編程語言:C、C++和OpenMP,硬件環(huán)境是:Intel(R)Core(TM)i3_2375M 的雙核CPU(1.50GHz,1.50GHz),4G 內(nèi)存,AMD Radeon HD 7450M 與Intel(R)HD Graphics 3000 雙顯卡(基本上已經(jīng)是很落后的硬件環(huán)境,這種設備的機器能夠在跳蚤市場以十分低廉的價錢獲得),編譯優(yōu)化參數(shù)為-O2。
本節(jié)在保持并行數(shù)目不變的情況下,改變數(shù)據(jù)規(guī)模的大小,基于OpenMP技術探究并行體對運行效率的影響。
以歐拉計劃[8]145 題為例。歐拉計劃是由Colin Hughes 發(fā)起的一個解題網(wǎng)站,目前這個網(wǎng)站包含了400多道難度不同的數(shù)學題,題目序號的增加與難度呈正相關,每一個問題都有相應的討論社區(qū),而且每個問題都可以在 1 分鐘內(nèi)通過計算機程序獲得。
145 題的題目內(nèi)容為:某些正整數(shù)n 有這種特殊的特征:N 和N 取“相反”相加以后的全部的位都是奇數(shù)。例如:36+63=99 或者409+904=1313,我們把這些特殊的數(shù)字作為可反數(shù),因此36,63 等這些數(shù)都是可反數(shù)。但是在N 和N 取“相反”的最前端都不能有0,一千以內(nèi)共含120 個可反數(shù),問10 億(即109)以內(nèi)共含幾個可反數(shù)?
利用計算機進行編程計算,可得到上述問題的正確答案為:60872。求解的串行計算偽代碼為:
通過實際計算,改變并形體的大小,取三次平均耗時,得到串行計算的運算時間如表1所示。
接下來,采用并行(并行數(shù)目為2 次)編譯方式,對上述歐拉145 題進行求解。將上述的串行偽代碼改寫為基于OpenMP 技術的并行偽代碼:
在測試環(huán)境近似相同且保證運算結果相同的情況下,改變并形體的大小,取三次平均耗時,可得到并行計算(并行數(shù)目為2 次)的運算時間如表2所示。
表2:歐拉計劃145 題并行計算所耗時長
表3給出了歐拉計劃145題串行計算與并行計算(并行數(shù)目為2 次)的加速比。顯然,隨著并形體的變化,即數(shù)據(jù)規(guī)模的不斷增加,只有極少數(shù)情況下規(guī)模越大加速比越小,絕大部分情況下加速比與并形體規(guī)模大小呈正相關。
表3:串行計算與并行計算的加速比
通過表1 和表2 以及表3 的結果對比,直觀地顯示出了基于OpenMP 技術并行計算的優(yōu)越性。在保持并行數(shù)目不變的情況下,隨著并行體的規(guī)模逐步增大,并行計算對運行效率的影響越大,并行計算的優(yōu)勢體現(xiàn)得越明顯。
本節(jié)在保持并行體不變的情況下,即設置并行體中的數(shù)據(jù)規(guī)模相同,改變并行數(shù)目的次數(shù),基于OpenMP技術探究并行數(shù)目對運行效率的影響。
以蒙特·卡洛法[9](Monte Carlo)求解π值為例。蒙特·卡洛法也稱為計算機的模擬方法,在20所示40年代由烏拉姆和J.馮·諾伊曼提出的一種基于“隨機數(shù)”的計算方式。其根本思想是,當一個問題是某個事件發(fā)生的概率,或某個隨機變量的數(shù)學期望時,它們能夠通過一些“測試”,求出該事件的概率或者這個隨機數(shù)的平均值,并以此來作為該問題的解。
利用蒙特·卡洛法求解π 值的串行偽代碼如下:
通過該方法進行編程計算,得到的最大隨機數(shù)為:32767。由蒙特·卡洛算法模擬出的半徑為1 的1/4 圓的面積為:0.785428,計算出的pi 值為:3.14171。
在測試環(huán)境近似相同的情況下,分別在并行數(shù)目取1次(即串行計算)、取2次一直取到183次進行計算測試,其運算結果如表4所示。
表4:蒙特·卡洛法求解π 值計算所耗時長
由表4 的結果,得到并行數(shù)目與計算耗時關系如圖1所示。
圖1:并行數(shù)目與計算耗時的關系
通過表4 和圖1 結果顯示了,在保持并行體規(guī)模不變的情況下,且在CPU 物理極限范圍內(nèi),并行數(shù)次數(shù)越高,并行計算對運行效率的影響越大,所需耗時越短,優(yōu)勢越顯著,較好地體現(xiàn)了基于OpenMP 技術并行計算的優(yōu)越性。
本文基于OpenMP 技術進行并行計算,采用控制變量法的思想,以歐拉計劃145 題為例,探究了并行體對運行效率的影響;以蒙特·卡洛法求解π 值為例,探究了并行數(shù)目對運行效率的影響。通過實際算例與原有串行方法相比較,驗證了基于OpenMP 并行計算的優(yōu)越性。但是,本文給出的兩個計算實例,測試時運行環(huán)境只是相近,而非完全一致,系統(tǒng)中其他程序?qū)y試結果還是造成了一定程度的干擾,且計算規(guī)模都稍偏小,大規(guī)模的并形體對運行效率的影響還需要進一步的研究。其次,測試的計算機(雙核四線程)CPU 線程有限,并行數(shù)目也比較受限,多線程的并行數(shù)目對運行效率的影響還需要進一步的研究。