陳 華, 王明君(中國石油大學(華東) 理學院, 山東 青島 266580)
?
基于VS2012的并行計算實驗平臺搭建與實現
陳 華, 王明君
(中國石油大學(華東) 理學院, 山東 青島 266580)
結合最新的并行計算技術,基于VS2012搭建了OpenMP、MPI、C++ AMP、CUDA 6.0等四個并行實驗平臺,并對不同實驗平臺實現PI值計算。實驗結果說明這種并行計算環境具有良好的性能與可擴展性;OpenMP與MPI等CPU計算加速效果與CPU內核數目成比例,C++ AMP與CUDA 6.0等GPU計算加速效果與GPU物理計算核心數目成正比;同等條件下GPU物理計算核心數目遠多于CPU核心數目,用GPU進行計算往往可獲得更高的性價比。
并行實驗平臺; VS2012; 多核計算; GPU并行計算; MPI并行計算
并行計算由來已久,利用并行計算可以獲得更好的性價比[1],硬件上面可以分為單機[2]、集群[3],異構[4],多核[5]等。并行計算可以更好地利用電腦的硬件設備,例如CPU的多核架構、GPU的通用計算單元,它們平常都不會滿負載工作,這在一定程度上存在資源浪費。為使得硬件工作得更快、更好,并行計算是一個不錯的選擇,其通過軟件的形式,改變串行程序的計算模式,在正確運行的前提下,同樣的硬件設備上提高了計算速率[6]。隨著VS2012的發布,一種新的GPU并行計算模式應運而生,本文結合VS2012實現了四種并行實驗平臺的搭建。
(1) OpenMP。是一種能夠用于顯示指導多線程、共享內存并行處理的應用程序編程接口。OpenMP同時支持C/C++語言和Fortran語言。OpenMP提供了對并行算法的高層抽象描述,程序員通過在源代碼中加入專用的pragma指導語句來指明自己的意圖,由此編譯器可以自動將程序進行并行化,并在必要之處加入同步互斥以及通信。通過編譯指導語句輕松的獲得多線程并行代碼,大大簡化了程序員的工作量[7]。OpenMP的執行模型采用Fork-Join形式,Fork即創建新線程或者喚醒已有線程;Join即多線程的匯合。Fork-Join模型開始執行時,只有一個“主線程”的運行線程存在,“主線程”在運行過程中,當遇到需要進行并行計算時,派生出新線程來執行并行任務。并行執行過程中,主線程和派生線程共同工作,并行代碼運行結束后,派生線程退出或者掛起,不再工作,控制流程回到單獨的主線程中[8]。其執行流程如圖1所示。

圖1 OpenMP的Fork-Join并行模型
(2) MPI。與OpenMP相似,MPI是一種編程接口標準,而不是一種具體的編程語言。MPI標準定義了一組具有可移植性的編程接口,各個廠商或組織遵循這些標準接口實現自己的MPI軟件包,典型的實現包括開放源碼的MPICH、LAM MPI、MSMPI、Intel MPI等。對于程序員來說,設計好應用程序并行算法,調用這些接口,鏈接相應平臺上的MPI庫,就可以實現基于消息傳遞的并行計算,也正是由于MPI提供了統一的接口,該標準受到各種并行平臺的廣泛支持,這也使得MPI程序具有良好的可移植性[9]。目前,MPI有著廣泛的應用,并且支持多種編程語言(Fortran、C/C++、Python、Java、Matlab等)、操作系統(包括普遍的UNIX系統、Windows系統)以及硬件平臺(多核、對稱多處理機、集群等)[10]。其執行流程如圖2所示。

圖2 MPI并行執行模型
(3) C++ AMP。是微軟公司基于DirectX 11技術實現的一個并行計算庫。它建立在C++的語言規范上,使得程序員可以相對容易地在數據并行硬件(如顯卡)上編寫并執行并行計算程序。最低支持AMP的編程環境是Visual Studio 2012,最低顯卡支持技術是Direct11,要想全面使用Visual Studio 2012編程環境中新加入的功能以及更好的進行GPU編程,推薦系統用Win8。C++ AMP的初始版本于2012年發布。2013年,微軟在添加了一些特性后發布了C++ AMP的Microsoft Visual Studio 2013版本。系統要求,操作系統:Windows 7, Windows 8, Windows Server 2008 R2, 或者Windows Server 2012。支持DirectX 11或更新的硬件。其有著優良的特性:支持CPU/GPU共享內存,并且代碼可在GPU上調試,亦可在CPU上模擬及調試GPU代碼。在并行計算領域,C++ AMP的競爭對手有NVIDIA公司的CUDA技術和開放標準的OpenCL技術。當程序運行時,只有CPU端一個主線程在運行,當主線程運行到需要執行C++ AMP并行區域時,其會通過核函數的方式來啟動GPU并行計算,其中涉及到數據傳輸、GPU線程的創建與銷毀、并行計算工作,GPU的通用計算能力非常強,適合執行SIMD模式的工作[11]。其執行流程如圖3所示。

圖3 C++ AMP的并行執行模型
(4) CUDA。是NVIDIA開發的一組基于NVIDIA顯卡驅動的GPU并行編程接口,涉及基本數學庫、信號處理、圖像處理等很多領域[12]。自2006年CUDA 編程架構推出之后,越來越多的研究人員又開始研究基于圖形處理器(GPU)的通用計算相比CPU計算,GPU 耗費更小的成本就能達到相同的計算能力。符合SIMD指令模式的程序都可以方便的移植到CUDA平臺上[13]。NVIDIA顯卡的物理計算核心是流處理器(SP),SP的數目與顯卡核心頻率、顯存頻率等是影響GPU計算速率的主要參數[14]。其執行流程見圖4。

圖4 CUDA執行模型
VS2012內置OpenMP的支持,只要添加頭文件
以計算PI的數值計算為例,分別介紹四種技術在Windows7 64-bits系統上的安裝與配置。迭代次數為2147483136次,串行程序執行時間是:110.394s,PI值是3.1415926531226095。

表1 各并行平臺計算PI值精度以及加速效果
由OpenMP數值例子可知,運行核數是4核時,運行時間為29.009 s;加速3.81倍,符合理論推導。由MPI數值例子可知,運行核數是4核時,運行時間為10.776 s,加速10.24倍。由C++ AMP數值例子可知,開辟512個GPU線程時,運行時間是0.933 s,AMP計算用時大幅度降低,因在Win7操作系統上AMP不支持double類型,pi值計算過程采用float類型,計算結果精度較低,速度較快。由CUDA 6.0數值例子可知,開辟512個GPU線程時,運行時間是1.233 s,計算用時大幅度降低,突出了GPU計算的優點。
在VS2012環境下,搭建與實現了并行實驗平臺,采用計算PI值的實例進行實驗分析,CPU多核編程可以近似加速自身核數的執行效率,GPU并行計算有著更高的性價比,可以大幅度的提高算法執行效率。
[1] 楊學軍. 并行計算六十年[J]. 計算機工程與科學,2012(8):1-10.
[2] 柴亞輝,沈文楓,張 倬,等. Cell BE高性能計算實驗平臺設計與實現[J]. 實驗室研究與探索,2011(5):68-71.
[3] 尹輝俊,梁雙翼,邵桂平. 基于PC機群的有限元并行計算平臺的搭建[J]. 中國科技信息,2006(20):113-115+120.
[4] 盧風順,宋君強,銀福康,等. CPU/GPU協同并行計算研究綜述[J]. 計算機科學,2011(3):5-9,46.
[5] 高 瑛,嚴正國. OpenMP多核并行程序的設計與實現[J]. 電子測試,2014(5):25-26,35.
[6] 于永斌,徐 潔,王 華,等. 計算機系統結構課程中多核實驗的設計[J]. 計算機教育,2011(19):40-42,50.
[7] 周洪斌,溫一軍. 基于OpenMP的多核程序設計技術[J]. 沙洲職業工學院學報,2010(2):1-4.
[8] 多核系列教材編寫組.多核程序設計[M].北京:清華大學出版社, 2007.
[9] 盧云娥,黃宗宇,李超陽,等. 基于微機集群系統的MPI并行計算[J]. 電子設計工程,2011(5):78-81.
[10] 王海濤,劉淑芬. 基于Linux集群的并行計算[J]. 計算機工程,2010(1):64-66.
[11] http://msdn.microsoft.com/en-us/library/bb524831(v=VS.85).aspx.
[12] 李 波,趙華成,張敏芳. CUDA高性能計算并行編程[J]. 微型電腦應用,2009(9):55-57,64,69.
[13] 董 犖,葛萬成,陳康力. CUDA并行計算的應用研究[J]. 信息技術,2010(4):11-15.
[14] http://en.wikipedia.org/wiki/CUDA.
[15] C++ AMP: Language and Programming Model Version 1.0. Microsoft Corporation. Augast?2012 Microsoft Corporation
把提高質量作為教育改革發展的核心任務。樹立科學的質量觀,把促進人的全面發展、適應社會需要作為衡量教育質量的根本標準。樹立以提高質量為核心的教育發展觀,注重教育內涵發展,鼓勵學校辦出特色、辦出水平,出名師,育英才。
——摘自《國家中長期教育改革和發展規劃綱要》
Construction and Implementation of Experimental Platforms for Parallel Computing Based on VS2012
CHENHua,WANGMing-jun
(College of Science, China University of Petroleum, Qingdao 266580, China)
This article calculates the PI value based on OpenMP、MPI、C++ AMP、CUDA6.0 in VS2012 environment using the least parallel computing technology. The results verify that this parallel platform is effective and scalable. The acceleration efficiency of OpenMP and MPI of CPU’s computing relies on the numbers of CPU’s cores. At the same time, the acceleration efficiency of C++ AMP and CUDA 6.0 of the GPU computing relies on the numbers of physical computing cores. At the same condition, the number of GPU’s cores is much larger than that of CPU. So it can get a higher acceleration by using GPU computing instead of CPU computing.
parallel experimental platform; VS2012; multi-core computing; GPU computing; MPI computing
2014-06-30
山東省自然科學基金(ZR2013DM015);中國石油大學(華東)教改項目(JY-B201455)
陳 華(1972-),男,山東冠縣人,博士,副教授,主要從事地球物理測井方法和其他工業應用數學問題研究。
Tel.:18678460705;E-mail:delaunay@163.com
TP 391
A
1006-7167(2015)02-0125-03