摘 要:與傳統的單純以CPU作為計算部位的同構計算系統相比,CPU+GPU異構計算模式程序優勢更加明顯,本文主要研究CPU+GPU異構計算模式程序開發中編程方法,總結各種方法的優缺點,希望能為相關人員帶來一些幫助。
關鍵詞:異構計算; 編程; CPU; GPU
中圖分類號:TP391.41 文獻標識碼:A 文章編號:1006-3315(2014)10-149-001
CPU+GPU協同計算是異構計算的一種,在處理大量的數據中,僅僅使用CPU太過繁瑣,異構計算能夠極大的提高系統速度,目前CPU+GPU是國內外高性能計算領域的熱點研究話題,目前在程序開發中存在不少的難點,本文主要研究CPU+GPU異構計算模式開發中編程方法。
一、CPU+GPU異構計算編程方法概述
目前異構計算使用最多的是利用GPU來加速,基于CPU+GPU的異構計算系統是指計算機系統中配合使用CPU+GPU共同承擔計算任務,優勢非常明顯。采用GPU能夠更加快速完成任務,如在浮點運算功能中,GPU的能力要遠遠高于CPU。GPU的應用領域從圖形處理逐漸向通用計算機發展。當前單純采用CPU來搭建計算機系統遇到了功耗、擴展性能等問題,而采用CPU+GPU能夠很好的解決這些問題。
雖然采用CPU+GPU的異構計算有很多的優點,但是在實際的應用中,異構計算面對著很多的問題需要解決。在這些問題中,表現最為明顯的是程序開發遇到的問題,主要是因為GPU在設計中最開始是用于專業圖形處理領域,而不是計算領域中,這就導致了GPU本身的體系框架與計算機的硬件不太實用,出現數據傳輸限制等問題,因此在使用中必須專門考慮這些問題。另外目前關于GPU軟件開發方面很多技術還不夠成熟,雖然目前的一些計算機統一設備架構降低了開發難度,但是在處理以往應用中的大量遺留代碼方面仍然是一個問題。目前關于異構計算的標準開發計算語言還不夠成熟,CPU+GPU異構計算系統應用還存在不少的問題。
二、CPU+GPU異構計算程序開發方法
目前在CPU+GPU異構計算程序開發計算中,程序開發方法主要包括低層次抽象的輕量級GPU編程工具開發方法、高層次抽象的函數庫等方法,下文將會詳細講述這幾個開發方法的優缺點。
1.底層圖形API的異構計算程序開發方法
這種方法是最早采用GPU的一種主要方法,目前仍然在使用,這種開發方法要求開法陣非常熟悉底層圖形API,在編程中采用的語言一般為圖形庫著色語言。早期的GPU產品基本都是采用分離渲染架構,可編程能力非常差。
自21世紀開始,隨著GeForce3的出現,頂點可編程得到普及,這種編程逐漸使用在異構計算程序開發中,人們開始采用紋理著色+寄存器組合器的方法,然后采用像素級可編程性,通過底層圖形API提供可控制能力,最常見的圖形API包括OpenGL和DirectX,其中DirectX主要是作為微軟視窗來使用,OpenGL是被廣泛接受的一種。這種方法目前仍然在使用,在新的CPU產品上執行效率會存在很大的不足。
2.采用低層次抽象的輕量級編程工具的異構計算程序開發方法
CUPA在GPU中主要是作為數據并行計算設備的軟硬件體系,是一個完整的圖形處理器,提供一個硬件的直接訪問接口,保證GPU無需采用圖形API就能實現訪問,編程語言采用的是C語言,能夠提供計算指令開發能力,建立高效的密集數據計算方法,適合使用在CPU等類型架構中。CUDA是一種開放標準,能夠為CPU和GPU提供異構群進行編程,不需要再采用映射到底層圖形API的方法,操作更加簡單。
3.高層次抽象的編譯器的異構計算程序開發方法
這種方法是通過使用指示語句、編譯器自動生產GPU內核程序的一種方式。GPU編譯器引進一種語句來指示代碼在進行執行,所采用的HMPP處理語言是一種基于標簽語法的語言程序,利用HMPP能夠保證軟硬件的獨立,同時具有CUDA和OpenCL代碼生成器,改進硬件加速程序段。代碼生成器從原來的C程序提取并行化的部分,轉化為CUPA代碼,不需要重新編寫程序。針對采用少量專業領域算法的應用程序,這是一種比較好的開發方法,影響性能的關鍵在于少量程序段,能夠獲得最大的加速效果,但是在使用中一般不適合使用在遺留代碼較多的場所。
除了以上幾種開發方法之外,還有基于高層抽象的函數庫的開發方法,提供廣泛使用快速極端離散相似的接口,不能直接取代,需要先進行封裝后才能代替程序中的函數,方便使用在簡單的矩陣計算中。管理多個GPU設備可以采用OpenMPa技術,管理CPU+GPU異構系統可以采用MPI或者是Charm++技術。
綜上所述,本文主要研究CPU+GPU異構計算模式程序開發中編程方法,總結各種方法的優缺點,目前關于研究CPU+GPU異構計算研究非常快速,隨著編程方法研究的不斷成熟,CPU+GPU異構計算將會發揮出更大的作用。
參考文獻:
[1]王偉,郭紹忠,王磊,等.一種基于CPU-GPU異構計算的混合編程模型[J]信息工程大學學報,2010,1(06):674-678.
[2]盧風順,宋君強,銀福康,等.CPU/GPU協同并行計算研究綜述[J]計算機科學,2011,11(03):5-9+46.
[3]馮穎,袁慶華,沈健煒.基于CPU+GPU異構計算的編程方法研究[J]通信技術,2011,21(02):141-143