曾升 謝鵬 張瑾
摘要:計算機技術(shù)的不斷發(fā)展也推動了各行各業(yè)對性能和運算需求的增加,各種規(guī)模龐大、運算復(fù)雜的應(yīng)用也相繼問世,不同的并行計算編程技術(shù)和開發(fā)模式得到廣大開發(fā)者的認同。本文從并行計算編程技術(shù)的概念分析開始,介紹了當前主流的并行計算編程技術(shù)開發(fā)模式,并詳細描述了CUDA框架的GPU并行技術(shù)方法,旨在對并行程序的運行、調(diào)試有初步的認識,也能讓開發(fā)者根據(jù)自身編程特點和應(yīng)用場景選擇合適的并行計算編程技術(shù),提高開發(fā)效率。
關(guān)鍵詞:并行計算 編程 高性能 GPU開發(fā) 調(diào)試
中圖分類號:TP311.11 文獻標識碼:A 文章編號:1007-9416(2016)06-0243-01
1 并行計算編程技術(shù)概念介紹和研究方法
所謂并行計算編程,就是通過高性能計算機,實現(xiàn)計算的并行處理,它也是反映高性能計算和超級計算的一項重要指標。長期以來,通過并行計算編程求解的過程主要表現(xiàn)為:給定一個應(yīng)用,首先將其轉(zhuǎn)化為數(shù)值計算范疇;隨后為該數(shù)值計算設(shè)計一套并行算法,通過編程語言的方式進行實現(xiàn);最后借助于高性能計算機執(zhí)行該程序以獲得應(yīng)用的求解,因此,并行計算編程主要包括高性能計算機、并行算法、并行處理程序、并行應(yīng)用這幾個方面,涉及包括計算機、軟件工程、數(shù)學邏輯等多個領(lǐng)域。
2 并行計算編程技術(shù)開發(fā)模式
(1)OpenMP。目前在并行計算編程技術(shù)中,OpenMP已經(jīng)是業(yè)內(nèi)比較流行的內(nèi)存模型開發(fā)的標準,它具備完善的編譯指導(dǎo)代碼,被廣泛運用于并行程序處理、數(shù)據(jù)私有化或共享等操作,旨在將移植性高和擴展性強的開發(fā)接口提供給SMP系統(tǒng)[1]。OpenMP新標準在1997年開始被OpenMP Architecture Review Board所提出,目前已經(jīng)更新到2.0版本。
OpenMP的開放接口能夠給多處理平臺的共享內(nèi)存提供并行計算機制,也廣泛被應(yīng)用于高性能計算系統(tǒng)架構(gòu),比如微軟、UNIX等,它還可以通過編譯器指令與庫函數(shù)結(jié)合的方式為開發(fā)者提供C/C++或FORTRAN的多線程創(chuàng)建應(yīng)用。OpenMP的優(yōu)勢體現(xiàn)在多耗時循環(huán)應(yīng)用當中,它首先將一個任務(wù)以多線程的形式劃分,并通過fork-join的并行機制將程序在完成順序執(zhí)行后,轉(zhuǎn)換為并行執(zhí)行程序。開發(fā)者在使用OpenMP時,可以建立良好的循環(huán)級實現(xiàn)多處理并行機制,將任務(wù)通過分解成多個數(shù)據(jù)共享的任務(wù),并確定相互間的依賴性,通過并行計算編程機制來實現(xiàn)任務(wù)的并行處理。
(2)并行庫。并行庫的推行大大提高了高性能并行計算處理效率,它集成了并行計算編程中通用的邏輯代碼,并封裝成庫的形式供用戶使用,它是完全開源的。一般來說,編寫庫函數(shù)的開發(fā)者都擁有較豐富的開發(fā)經(jīng)驗,在代碼邏輯性上效率會比較高,同時編譯器采用優(yōu)化編譯,這就使得庫函數(shù)擁有很高的執(zhí)行效率,對大多數(shù)開發(fā)者而言,并行庫為他們提供了一種高效便捷的開發(fā)模式[2]。
3 GPU并行計算編程技術(shù)方法
GPU的作用是優(yōu)化并行多線程程序的吞吐量,這種特性也讓GPU的處理核心要比傳統(tǒng)CPU更多,這種眾核架構(gòu)計算能力也更強,非常適用于大規(guī)模的并行計算,GPU在執(zhí)行指令和獲取數(shù)據(jù)時是通過CPU的PCI-E借口進行的。計算和存儲兩部分是GPU的架構(gòu)特征,其中計算部分中的多個流處理器負責指令的計算和執(zhí)行,而存儲部分則是數(shù)據(jù)存儲的內(nèi)存。這種硬件架構(gòu)也反映了GPU編程主要是由內(nèi)存管理和并行計算兩部分。
NVIDIA公司的合作廠商PGI推出一套CUDA Fortran編程語言,它是專門針對Fortran用戶所設(shè)計開發(fā)的,并還在不斷地更新迭代。CUDA Fortran的編程模式類似于CUDA C/C++,都有一個通用編譯器,在開發(fā)過程中也能通過插件或命令來訪問CUDA庫,比如cuBLAS等,并兼容目前主流的操作系統(tǒng)windows、Linux和MacOS等。在EDA工具的支持上,CUDA Fortran也可以在主流工具Visual Studio和Eclipse中通過插件的形式安裝。CUDA Fortran不可以直接通過進入調(diào)試模式進行調(diào)試,若想調(diào)試先要通過選項-Mcuda=emu將模擬器模式開啟,即用CPU來模擬GPU,然后通過CPU的調(diào)試器來進行模擬調(diào)試工作。
CUDA Fortran在開發(fā)之前需要安裝開發(fā)套件,這些可以在PGI CUDA Fortran官網(wǎng)上下載,目前的版本已經(jīng)更新到PGI Release2015,該開發(fā)套件包含了GPU編程開發(fā)的多種工具:如pgfortran編譯器(用于CUDA Fortran)、pgcc編譯器(用于OpenACC)、pgcpp編譯器(用于CUDA-x86)、以及分析和調(diào)試器等。CUDA Fortran將CUDA GPU編程很好地集成在Fortran當中,如果開發(fā)者具備CUDA C/C++開發(fā)能力,則只需學習基本的Fortran語法即可開始開發(fā)工作,在應(yīng)用方面,異構(gòu)計算,如內(nèi)存共享、多線程并發(fā)、向量計算等在CUDA Fortran中得到高效地應(yīng)用。例如,在進行GPU并行編程計算時,可以通過device關(guān)鍵字分配變量在GPU當中,并通過allocate和deallocate來完成內(nèi)存的分配和釋放,并且,CPU和GPU在內(nèi)存?zhèn)鬏斶^程中只需要用賦值符號“=”操作即可,無需動用其他函數(shù)。
4 結(jié)語
隨著并行計算編程技術(shù)的日益發(fā)展,各種通用的開發(fā)模式和開發(fā)方法逐漸被人們所熟悉,開發(fā)者和各類專家學者也往相關(guān)方面在積極探索,有些已經(jīng)取得了不錯的成果。面對日益成熟的并行計算編程技術(shù),本文旨在幫助開發(fā)者了解當前主流的并行計算編程技術(shù)開發(fā)模式和調(diào)試方法,能夠讓開發(fā)者可以在繁多的工具技術(shù)中找到適合自己的開發(fā)模式,更高效地利用工具完成開發(fā)任務(wù)。
參考文獻
[1]都志輝.高性能計算之并行編程技術(shù)--MPI 并行程序設(shè)計.北京:清華大學出版社,2001.
[2]陳國良.并行算法的設(shè)計與分析.北京:高等教育出版社,2002.