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