劉朝華 李小花 張紅強
摘 要:本文將基于CUDA平臺的GPU并行程序設計模式引入自動控制系統并行編程實踐教學中。通過介紹CUDA體系結構與編程模式,實例教學使自動控制專業學生對CUDA并行程序設計有著深刻的認識,將有助于同學們掌握CUDA并行計算平臺在工業控制程序開發中的應用,增強同學們對自動控制專業學習的興趣和實踐動手能力。
關鍵詞:CUDA平臺;自動控制;并行編程;實踐教學
一、引言
隨著工業控制系統規模日益增大,控制算法日益復雜,工業數據日益激增,工業現場對系統控制與優化調度的實時性要求日益提高,給現代控制系統程序設計提出挑戰。工業控制系統中存在大量的重復性計算,如快速傅里葉變換(FFT)、濾波、矩陣與數值計算等,給傳統控制系統帶來巨大時間開銷。以多核計算機為代表的并行計算技術為工業控制系統設計與開發提供了技術支持。特別是GPU(Graphic Processing Unit)通用并行計算技術的推廣[1],由于其高存儲器帶寬、低功耗等諸多優點,已被廣泛應用于科學與工業等領域中,在提升實際問題的求解效率方面發揮了作用。CUDA(Compute Unified Device Architecture,計算統一設備架構)由英偉達公司于2007年發布的一種將GPU作為并行計算的軟硬件體系架構,可用于解決工程科學中的復雜計算,開啟了GPU通用并行計算時代[2]。研究表明在浮點運算、數值計算等密集型計算方面,基于CUDA平臺的GPU計算系統可獲得數十倍于傳統CPU的加速性能[3]。因此,相比于傳統微機控制方式,基于CUDA的GPU并行計算適用于數據量大,實時性要求高的工業控制領域。
現有高校自控專業程序設計課程主要是基于串行編程方式的教學,難以適應工業信息化與知識自動化對控制系統實時性能與數據存儲的需求。本文將基于CUDA平臺的GPU并行程序設計模式引入自動控制系統并行程序設計實踐教學中。有利于同學掌握先進計算技術在自動控制系統中的開發與應用,拓寬其專業視野。最后對自動控制程序設計與CUDA并行編程實踐教學進行了思考與總結。
二、CUDA體系架構和編程模式
(一)CUDA體系結構。CUDA框架包括硬件和軟件兩部分,拓寬了GPU程序開發與運行的可操作性。GPU的硬件包括運算核心和存儲器,其中運算核心流處理器構成流多處理器(Streaming Multi-Processor,SM),每個SM都帶共享存儲器,所有SM共享GPU的全局、常量與紋理存儲器。CUDA的軟件包括CPU代碼和GPU代碼,其中CPU負責處理邏輯性的串行事務控制,GPU負責處理大量重復性計算任務。在GPU上執行的函數稱為核函數,當核函數被CPU代碼激活時,GPU中在邏輯上的兩層線程組(頂層為線程網格(Grid),下層為線程塊(Block,包含若干個線程(Thread))并行執行。一個內核函數網格中的線程塊并行和線程塊中的線程兩個層次的并行方式來提高數據吞吐量和執行效率。各個線程塊并行執行,線程塊間無法通信,也沒有執行順序,但同一個線程塊中的線程可以通過共享存儲器方式交換數據。
(二)CUDA編程模式。在CUDA架構中,CPU與GPU是一種異構協同并行計算模式。其中CPU為主機,GPU為設備。CPU與GPU各自擁有獨立的存儲器地址空間:顯存和內存。程序員可以應用高級語言(C/C++/fortan)對GPU內部計算資源進行訪問。CUDA編程基本步驟為:步驟1:加載C(或C++)和CUDA頭文件,啟動cudaSetDevice()配置GPU設備;初始化CPU和GPU數據空間;步驟2:調用設備端(GPU)的內核函數計算;①從顯存讀取數據到共享存儲器或寄存器內;②對數據進行并行計算和處理;③將處理后的數據寫回顯存。
步驟3:將顯存中的結果回讀到內存;步驟4:使用CPU對數據進行處理并輸出結果;步驟5:釋放內存和顯存空間并退出CUDA。
三、實例講解
以一個簡單的CUDA程序設計實例來講解,加深自動控制專業同學對CUDA平臺GPU并行程序設計過程的理解。考慮給一個向量V{1:N}上每一位矢量的加上常數。其中CUDA程序C代碼如下:
#define N 100;
_global_void Vadd(int*V,int m)
{int index=blockIdx.x;if(indexint main(void){ int host_V[N]; int *device_V; cudaMalloc((void**)&device_V, L * sizeof(int)); for (int k=0; k