• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      匹配GPU編程架構(gòu)的直流故障篩選算法設(shè)計

      2017-05-22 02:44:54溫柏堅謝恩彥劉明波
      電力自動化設(shè)備 2017年5期
      關(guān)鍵詞:浮點(diǎn)算例支路

      溫柏堅 ,謝恩彥 ,劉明波

      (1.華南理工大學(xué) 電力學(xué)院,廣東 廣州 510640;2.廣東電網(wǎng)有限責(zé)任公司電力調(diào)度控制中心,廣東 廣州 510600;3.國電南瑞科技股份有限公司,江蘇 南京 211106)

      0 引言

      靜態(tài)安全分析用來校驗(yàn)電網(wǎng)中輸變電設(shè)備退出運(yùn)行后的系統(tǒng)運(yùn)行狀態(tài),一般要求滿足N-1校驗(yàn),完整的N-1校驗(yàn)需要對電網(wǎng)中所有N個設(shè)備進(jìn)行開斷和潮流分析,計算量巨大[1]。為了縮短分析時間,最常用的技術(shù)手段是采用多CPU核進(jìn)行并行計算加速,中國電科院在4路×4核CPU配置的服務(wù)器上對10000節(jié)點(diǎn)電網(wǎng)只取得了不到4的加速比,遠(yuǎn)小于總核數(shù)16,這主要是由于內(nèi)存帶寬飽和(內(nèi)存墻)問題。解決上述內(nèi)存墻問題需要部署多個具有獨(dú)立物理內(nèi)存的計算節(jié)點(diǎn),這將大幅增加系統(tǒng)費(fèi)用、機(jī)房空間和計算功耗[2-3]。

      2007年起,GPU逐漸被應(yīng)用于通用科學(xué)計算,隨著NVIDIA公司推出了統(tǒng)一編程架構(gòu)CUDA(Compute Unified Device Architecture)和第3代專用計算卡,GPU已經(jīng)成為最重要的高性能計算HPC(High Performance Computing)硬件之一[4]。和多核 CPU 相比,GPU的特點(diǎn)是浮點(diǎn)計算能力和內(nèi)存帶寬高,以NVIDIA K20型GPU和Intel Xeon E5-2690型CPU為例進(jìn)行對比,GPU的單精度和雙精度浮點(diǎn)計算峰值分別為CPU的18倍和6倍,GPU的內(nèi)存帶寬為CPU的4倍,但GPU的價格和功耗僅比CPU分別高10%和70%。

      目前,GPU在石油勘探、大規(guī)模集成電路仿真、有限元分析等領(lǐng)域已實(shí)現(xiàn)了工程應(yīng)用,電力系統(tǒng)中GPU的研究主要集中在暫態(tài)穩(wěn)定分析和潮流計算2個領(lǐng)域,其中又特別聚焦于大規(guī)模稀疏線性方程組求解上。文獻(xiàn)[5-13]對LU分解、共軛梯度迭代、多波前等經(jīng)典求解方法進(jìn)行了GPU加速研究,相對于各自開發(fā)的CPU串行算法取得了顯著加速比,缺點(diǎn)是這種比較方法對CPU算法的性能比較敏感,更為客觀的方法是同時給出絕對計算時間。CUDA官方手冊指出GPU編程無法做到硬件透明,必須結(jié)合GPU軟硬件特點(diǎn)進(jìn)行充分優(yōu)化才能發(fā)揮硬件能力,但已有的電力領(lǐng)域GPU算法文獻(xiàn)鮮有結(jié)合GPU架構(gòu)進(jìn)行優(yōu)化設(shè)計的[14]。

      為了減少分析時間,實(shí)用化的靜態(tài)安全分析程序都包括嚴(yán)重故障集篩選和只針對嚴(yán)重故障集進(jìn)行的詳細(xì)潮流分析2個步驟,一般而言,嚴(yán)重故障集篩選過程占整個靜態(tài)安全分析時間的25%~30%,由此可見,加速故障集篩選過程是加速整個靜態(tài)安全分析的重要環(huán)節(jié),具有工程意義。本文首先介紹了基于直流潮流模型的故障篩選算法,然后對GPU的軟硬件架構(gòu)特點(diǎn)進(jìn)行了詳細(xì)剖析,基于此提出了GPU算法設(shè)計在任務(wù)分配、數(shù)據(jù)交互、線程分配、內(nèi)存訪問4個方面應(yīng)遵循的通用設(shè)計準(zhǔn)則,最后對GPU加速的故障篩選算法進(jìn)行了詳細(xì)設(shè)計和優(yōu)化,提出了一種匹配GPU軟硬件架構(gòu)的并行直流故障篩選算法。

      1 基于直流潮流模型的故障篩選算法

      本節(jié)引入基于直流潮流模型的故障篩選算法,并對其進(jìn)行工程優(yōu)化。

      1.1 算法模型

      故障篩選關(guān)注功率越限,所以一般采用直流潮流模型來進(jìn)行分析,相關(guān)公式主要包括[1]:

      其中,B為去除平衡節(jié)點(diǎn)的節(jié)點(diǎn)電納陣,X=B-1為節(jié)點(diǎn)電抗陣,B為稀疏陣,X則為稠密陣;P和θ分別為節(jié)點(diǎn)有功注入向量和電壓相角向量,θ(i)為向量θ的第i個分量,文中所有向量都遵循同樣的表達(dá)方式;下標(biāo)i和j分別為支路的首、末節(jié)點(diǎn)編號;xij、Pij分別為支路電抗和支路有功。

      設(shè)電網(wǎng)在基態(tài)斷面下發(fā)生開斷故障,可推導(dǎo)出式(2)的增量表達(dá)式為:

      進(jìn)一步可推導(dǎo)出:

      其中,X0、θ0和P0分別為基態(tài)斷面下的節(jié)點(diǎn)電抗陣、電壓相角向量和節(jié)點(diǎn)有功向量;ΔX、Δθ和ΔP為開斷故障后相關(guān)量的增量。

      具體計算步驟為:預(yù)先求出特定電網(wǎng)的基態(tài)電抗陣X0,由于對特定電網(wǎng)只需計算1次,X0的計算時間不計入算法總時間;由支路追加法求出電抗增量陣ΔX,由負(fù)荷和發(fā)電機(jī)開斷情況求出ΔP;將ΔX、ΔP代入式(5)求出電壓相角增量Δθ,再代入式(4)求出θ;將θ代入式(3)計算支路功率,并檢查是否越限。所述支路追加法的計算公式如下[1]:

      其中,ei和 ej為標(biāo)準(zhǔn)正交基;X0(i,j)為電抗矩陣 X0的第i行、第j列元素;Δxij為追加支路的電抗,支路斷開時追加負(fù)值電抗。

      1.2 工程優(yōu)化

      式(4)—(6)是以矩陣形式表達(dá)的理論模型,工程上會對其進(jìn)行優(yōu)化來減少浮點(diǎn)計算量,具體可分成支路開斷和發(fā)電機(jī)開斷2類情況來討論。

      當(dāng)首、末節(jié)點(diǎn)編號為i和j的支路發(fā)生開斷時,只有電抗陣X0發(fā)生增量變化ΔX,節(jié)點(diǎn)有功增量ΔP=0,利用M的稀疏性,式(5)可以化簡為:

      其中,X0(:,i)為由矩陣 X0的第i列構(gòu)成的向量,其他類似。

      當(dāng)節(jié)點(diǎn)編號為i的發(fā)電機(jī)或負(fù)荷發(fā)生開斷時,電抗增量陣ΔX=0,節(jié)點(diǎn)有功的增量變化ΔP=[0,…,ΔPi,…,0],ΔP中只有元素 ΔP(i)=ΔPi,其他元素都為0,再利用M的稀疏性,式(5)可以化簡為:

      其中,ΔPi為發(fā)電機(jī)或負(fù)荷開斷之后的有功跌落量。

      綜上所述,直流故障篩選算法已被化簡為式(7)和式(8)所示的稠密向量計算,非常適合采用GPU來進(jìn)行加速。

      2 GPU算法設(shè)計的通用準(zhǔn)則

      本節(jié)對GPU的軟硬件架構(gòu)特點(diǎn)進(jìn)行詳細(xì)剖析,在此基礎(chǔ)上提出GPU算法設(shè)計的通用設(shè)計準(zhǔn)則,具體包括任務(wù)分配、數(shù)據(jù)交互、線程分配、內(nèi)存訪問4個方面。

      2.1 CPU和GPU間的任務(wù)分配準(zhǔn)則

      2007年,NVIDIA公司發(fā)布了CUDA,將GPU視作一種CPU的通用協(xié)處理器,通過C語言編程即可調(diào)用GPU上的大量計算資源。

      CPU和GPU擁有各自明顯的優(yōu)缺點(diǎn),具體如下:CPU硬件的設(shè)計以延遲優(yōu)化為目標(biāo),目的是盡快完成單位計算任務(wù),片上資源被大量用于流水線和高速緩存,所以擅長處理復(fù)雜邏輯,缺點(diǎn)是片上浮點(diǎn)計算資源較少;GPU硬件的設(shè)計以吞吐優(yōu)化為目標(biāo),目的是在單位時間內(nèi)完成更多浮點(diǎn)計算,片上資源大量被用于浮點(diǎn)計算,所以優(yōu)點(diǎn)是浮點(diǎn)計算峰值和帶寬高,缺點(diǎn)是不擅長處理復(fù)雜邏輯。

      按照兩者的優(yōu)缺點(diǎn),確定CPU和GPU之間的任務(wù)分配準(zhǔn)則如下:CPU負(fù)責(zé)控制程序的總體流程和執(zhí)行不可并行的計算;GPU則專門負(fù)責(zé)可并行化的浮點(diǎn)計算任務(wù),例如向量和矩陣操作。

      2.2 CPU和GPU間的數(shù)據(jù)交互準(zhǔn)則

      CPU和GPU之間通過PCIe總線來交互數(shù)據(jù),PCIe是中低速總線,實(shí)測數(shù)據(jù)表明在圖1所示CPU+GPU異構(gòu)計算架構(gòu)中,當(dāng)CPU采用頁鎖定內(nèi)存進(jìn)行數(shù)據(jù)交互時,PCIe 2.0總線的單向傳輸速度大約為3 GByte/s,相較于CPU端大約為50 GByte/s的內(nèi)存帶寬,GPU端的內(nèi)存帶寬大約為200 GByte/s,PCIe總線速度明顯小于內(nèi)存帶寬;當(dāng)CPU采用分頁內(nèi)存進(jìn)行數(shù)據(jù)傳輸時,PCIe 2.0的單向傳輸速度下降為1.5 GByte /s。

      圖1 CPU+GPU異構(gòu)計算架構(gòu)Fig.1 Heterogeneous computing architecture based on CPU plus GPU

      綜上所述,確定數(shù)據(jù)交互的設(shè)計準(zhǔn)則如下:盡可能減少PCIe總線上的數(shù)據(jù)傳輸量,必要時可以采用頁鎖定內(nèi)存進(jìn)行數(shù)據(jù)傳輸,也可以增加計算復(fù)雜度來減少交換數(shù)據(jù)交互量。

      2.3 內(nèi)核函數(shù)的線程分配準(zhǔn)則

      CUDA通過大量線程并發(fā)來共同完成復(fù)雜的計算任務(wù),和重量級開銷的CPU線程不同,CUDA線程的創(chuàng)建和調(diào)度都由硬件完成,其時間開銷幾乎可以忽略。下文將結(jié)合GPU的軟硬件架構(gòu)來說明CUDA線程的調(diào)度機(jī)理,在此基礎(chǔ)之上提出線程分配的準(zhǔn)則。

      CUDA采用一種被稱為SIMT(Single Instruction Multiple Threads)的軟件架構(gòu),即通過在不同數(shù)據(jù)上運(yùn)行大量擁有相同代碼的線程來完成計算任務(wù)。如圖1所示,CUDA以線程網(wǎng)格(thread grid)方式來組織內(nèi)核函數(shù)運(yùn)行,每個線程網(wǎng)格由大量線程塊(thread block)組成,每個線程塊又由若干線程(thread)構(gòu)成。各個線程塊之間并行執(zhí)行,線程塊之間只能通過全局內(nèi)存進(jìn)行通信;同一線程塊中的每32個線程被捆綁成為一個線程束(thread warp)嚴(yán)格同步執(zhí)行,warp其實(shí)是GPU中最小的實(shí)際執(zhí)行單位,線程塊中的線程可以通過共享存儲器(shared memory)和柵欄(barrier)進(jìn)行通信和同步。綜上所述,內(nèi)核函數(shù)之間存在2類并行:一類是不同線程塊之間的粗粒度并行,通信代價較大;另一類是同一線程塊內(nèi)不同warp之間的細(xì)粒度并行,通信代價較小。

      從硬件架構(gòu)來看,專用GPU計算卡一般由多個流多處理器 SM(Streaming Multiprocessor)單元、二級緩存、GPU設(shè)備內(nèi)存等組成。每個SM單元都擁有完整的線程仲裁機(jī)制、規(guī)模上千的算術(shù)邏輯單元ALU(Arithmetic Logic Unit)團(tuán)簇、大量特殊功能單元(用于三角函數(shù)和指數(shù)函數(shù)等的計算)、寄存器和一級緩存等。當(dāng)一個線程網(wǎng)格被啟動后,其包含的線程塊將被枚舉并分發(fā)到SM上執(zhí)行,單個線程塊只能在一個SM上執(zhí)行;SM上的線程束調(diào)度器(warp scheduler)負(fù)責(zé)調(diào)度和管理大量的warp,warp中線程所需的浮點(diǎn)計算操作將被映射到一個ALU或者特殊功能單元上執(zhí)行。

      GPU通過大量wrap之間的自動切換來掩蓋訪存延遲,當(dāng)一個warp發(fā)出高延遲的內(nèi)存請求之后,SM將掛起該warp,并激活其他處于就緒狀態(tài)的warp,因此SM上必須具有相當(dāng)數(shù)量的warp,才能充分掩蓋訪存延遲,并充分利用計算資源。

      綜上所述,GPU算法必須保證一定數(shù)量的線程塊來占滿所有的SM單元,同時必須保證一定數(shù)量的線程(或者線程束)來掩蓋訪存延遲,因此可按照以下步驟進(jìn)行線程分配方式設(shè)計。

      a.GPU型號確定后,查詢硬件手冊獲取SM單元數(shù)量NSM、每個SM單元最大常駐線程數(shù)Nmax_thd_per_SM、每個SM單元最大常駐線程塊數(shù)Nmax_blk_per_SM這3個參數(shù)。

      b.為了保證warp數(shù)量,應(yīng)充分挖掘可并行的浮點(diǎn)計算,并使線程總數(shù)Nthd盡量大。

      c.為了保證SM的占有率為100%,線程塊大小Nthd_per_blk按下式確定:

      d.為了充分利用所有的SM單元,線程塊數(shù)量Nblk的配置應(yīng)盡量滿足下式:

      2.4 GPU內(nèi)存的使用準(zhǔn)則

      GPU上的存儲資源可分為兩大類:第一類是集成在SM單元上的寄存器、一級緩存、共享存儲器等,第二類是所有SM單元共享的二級緩存和全局存儲器。存儲資源的優(yōu)化分配和使用對算法的性能至關(guān)重要,下面主要對共享存儲器和全局存儲器的使用原則進(jìn)行分析。

      (1)共享存儲器的物理位置位于SM單元內(nèi),其優(yōu)點(diǎn)是延遲低,缺點(diǎn)是容量有限且只能被同一個線程塊中的線程訪問。當(dāng)數(shù)據(jù)需要被一個線程塊多次使用時,應(yīng)優(yōu)先考慮使用共享存儲器。

      (2)全局存儲器的物理位置位于SM單元外,其缺點(diǎn)是訪問延遲高達(dá)幾百個時鐘周期,優(yōu)點(diǎn)是容量大。在CUDA架構(gòu)中,同一個warp中的32個線程發(fā)出的內(nèi)存請求會被盡量合并來減少實(shí)際發(fā)生的內(nèi)存事務(wù),最理想的情況是warp中的32個線程讀取連續(xù)內(nèi)存,則最少只需要1次內(nèi)存事務(wù)就可以取回所有數(shù)據(jù);反之,如果warp中的32個線程讀取存儲不連續(xù)的數(shù)據(jù),則最多需要32次內(nèi)存事務(wù)才能取回所需數(shù)據(jù)。因此,除了保證足夠多的warp數(shù)量來掩蓋訪存延遲外,全局內(nèi)存使用的第一準(zhǔn)則是盡量實(shí)現(xiàn)合并訪問,盡量通過設(shè)計讓warp中的32個線程訪問連續(xù)的物理地址。

      3 故障篩選GPU算法的優(yōu)化設(shè)計

      基于第2節(jié)提出的通用設(shè)計準(zhǔn)則,本節(jié)對故障篩選GPU算法進(jìn)行詳細(xì)設(shè)計和優(yōu)化。

      3.1 GPU和算例參數(shù)

      GPU算法的設(shè)計與硬件密切相關(guān),所以首先明確采用的CPU+GPU混合架構(gòu)計算平臺的參數(shù),并引入算例。

      混合架構(gòu)服務(wù)器的操作系統(tǒng)為Windows7,CUDA版本為6.0;CPU配置為1顆6核心Intel Xeon E5-2620,主頻 2 GHz;GPU配置為1顆 NVIDIA K20。K20 GPU采用Kepler GK110架構(gòu),包含13個SM單元,單精度浮點(diǎn)峰值為3.52 Tflops,內(nèi)存帶寬為208 GByte/s;每個SM單元包含192個單精度計算核、64個雙精度計算核、32個特殊功能單元[14]。

      本文采用2個算例進(jìn)行性能分析:算例1為MATPOWER中的case 2383 wp,節(jié)點(diǎn)數(shù)為2383個,支路數(shù)為2896條,發(fā)電機(jī)數(shù)為327臺;算例2采用中國某區(qū)域電網(wǎng),節(jié)點(diǎn)數(shù)為9241個,支路數(shù)為16049條,發(fā)電機(jī)數(shù)為1445臺。

      GPU程序和用于性能對比的CPU程序都基于第1節(jié)提出的模型編寫,兩者都采用單精度浮點(diǎn)數(shù)據(jù)格式,CPU程序采用VC編寫。

      3.2 任務(wù)分配和數(shù)據(jù)交互設(shè)計

      基于2.1節(jié)和2.2節(jié)提出的任務(wù)分配和數(shù)據(jù)交互準(zhǔn)則,建立如圖2所示的算法總體流程。

      圖2 直流篩選GPU算法流程Fig.2 Flowchart of GPU-based DC CS algorithm

      a.由CPU負(fù)責(zé)控制程序的總體流程和不可并行的浮點(diǎn)計算,包括準(zhǔn)備基態(tài)和開斷信息、處理篩選結(jié)果、控制數(shù)據(jù)傳輸和啟動GPU內(nèi)核函數(shù)。

      b.GPU負(fù)責(zé)可并行化的浮點(diǎn)計算任務(wù),一共設(shè)計了4個內(nèi)核函數(shù)來進(jìn)行故障篩選,其中內(nèi)核1根據(jù)式(7)和式(4)計算支路開斷后的電壓相角向量θ,由于各個支路開斷之間沒有關(guān)聯(lián),最直觀的線程分配方法是內(nèi)核1的一個線程計算一個支路開斷;內(nèi)核2根據(jù)式(3)計算支路有功,并將計算結(jié)果與限值比較判斷是否越限。同理,內(nèi)核3根據(jù)式(8)和式(4)計算發(fā)電機(jī)開斷后的電壓相角向量θ;內(nèi)核4進(jìn)行發(fā)電機(jī)開斷的支路功率校驗(yàn)。

      c.CPU傳遞給GPU的數(shù)據(jù)包括基態(tài)斷面X0、θ0和P0,支路信息和發(fā)電機(jī)信息;GPU回傳給CPU的數(shù)據(jù)主要包括嚴(yán)重故障集信息,即屬于嚴(yán)重故障集的支路開斷和發(fā)電機(jī)開斷編號。算例1和算例2的基態(tài)電抗陣X0的數(shù)據(jù)存儲量分別約為23 MByte和350 MByte,其他數(shù)據(jù)的存儲量小于0.5 MByte。上述交互數(shù)據(jù)是故障篩選的必要數(shù)據(jù),無法再優(yōu)化壓縮,但可通過頁鎖定內(nèi)存來減少交互時間。

      d.不失一般性,以內(nèi)核函數(shù)1來闡述設(shè)計細(xì)節(jié),算法1流程圖見圖3,其中線程總數(shù)Nthd等于支路數(shù)量Nbranch,線程塊大小取Nthd_per_blk=128;線程的浮點(diǎn)計算量集中在計算第b條支路開斷后的電壓向量θb。

      算例1和算例2的GPU算法加速性能見表1。

      圖3 算法1流程圖Fig.3 Flowchart of algorithm 1

      表1 GPU算法性能Table 1 Performance of GPU-based algorithm

      由表1可得如下結(jié)論。

      (1)算例1的GPU算法總執(zhí)行時間為79 ms,其中分頁內(nèi)存數(shù)據(jù)交互時間為17 ms(采用頁鎖定內(nèi)存時,數(shù)據(jù)交互時間降為9 ms),約占總時間的22%;內(nèi)核函數(shù)執(zhí)行時間為62 ms,約占總時間的78%。CPU算法的總執(zhí)行時間為196 ms,GPU算法的加速比為196 /79≈2.48。

      (2)算例2的GPU算法總執(zhí)行時間為2330 ms,其中分頁內(nèi)存數(shù)據(jù)交互時間為240 ms(采用頁鎖定內(nèi)存時,數(shù)據(jù)交互時間降為120 ms),約占總時間的10%;內(nèi)核函數(shù)執(zhí)行時間為2090 ms,約占總時間的90%。CPU算法的總執(zhí)行時間為9672 ms,GPU算法的加速比為9672/2330≈4.15。

      3.3 線程分配優(yōu)化設(shè)計

      按照第2.3節(jié)提出的線程分配準(zhǔn)則來優(yōu)化算法1,具體步驟如下。

      a.查詢NVIDIA K20的硬件手冊,獲取和線程分配設(shè)計相關(guān)的參數(shù),包括SM單元數(shù)量NSM=13,每個SM單元最大常駐線程數(shù)Nmax_thd_per_SM=2048,每個SM單元最大常駐線程塊數(shù)Nmax_blk_per_SM=16。

      b.為了保證warp數(shù)量,應(yīng)充分挖掘可并行的浮點(diǎn)計算,并使線程總數(shù)Nthd盡量大。改進(jìn)后的算法(算法2)流程圖見圖4,總體思路是將算法1中第b條支路開斷后的電壓向量θb計算分配給一個線程塊。

      圖4 算法2流程圖Fig.4 Flowchart of algorithm 2

      c.為了保證SM單元的占有率為100%,線程塊的大小按式(9)計算,Nthd_per_blk=2048 /16=128。

      不失一般性,以算例2為例來分析:算法1的線程總數(shù)Nthd=Nbranch=16049個,Nthd_per_blk=128個,線程塊數(shù)量 Nblk=(Nbranch+Nthd_per_blk-1)/Nthd_per_blk=126個,不滿足式(10)要求的 13×16=208(個)。相比較而言,算法2的線程總數(shù)和線程塊數(shù)量都擴(kuò)大了128倍,遠(yuǎn)超式(10)要求,不僅提供了足夠的線程塊來充分利用SM資源,同時也提供了更多的線程束來掩蓋訪存延遲。

      經(jīng)測試,經(jīng)過線程分配優(yōu)化之后,算例2的內(nèi)核函數(shù)執(zhí)行時間從算法1的2090 ms下降為算法2的534 ms,獲得的額外加速比為2090/534≈3.91。

      3.4 內(nèi)存訪問優(yōu)化設(shè)計

      按照第2.4節(jié)提出的內(nèi)存使用設(shè)計準(zhǔn)則來優(yōu)化算法2,具體步驟如下。

      a.算法2中沒有數(shù)據(jù)被一個線程塊重復(fù)使用,所以沒有必要使用共享存儲器。

      b.算法 2 中計算 θb(t)=θ0(t)+c[θ0(i)-θ0(j)]×[X0(t,i)-X0(t,j)]需要訪問矩陣 X0的第i列和第j列元素,造成一個warp中的32個線程訪問物理地址不連續(xù)的數(shù)據(jù),且彼此間隔矩陣X0一行,此時,每個warp需要32次內(nèi)存事務(wù)才能取回所需數(shù)據(jù),屬于完全不合并訪問的最差情況。為了提升訪存效率,修改算法2形成算法3,流程圖見圖5。由于電抗陣 X0為對稱陣,所以有 X0(i,t)=X0(t,i)和 X0(j,t)=X0(t,j)。算法 3 中,每個 warp 中的 32 個線程訪問物理地址連續(xù)的數(shù)據(jù),即矩陣X0一行中的連續(xù)元素,屬于完全合并的最佳情況,訪存效率將大幅提高。

      圖5 算法3流程圖Fig.5 Flowchart of algorithm 3

      經(jīng)測試,經(jīng)過合并訪存設(shè)計之后,算例2內(nèi)核函數(shù)的執(zhí)行時間從算法2的534 ms下降為算法3的68 ms,獲得的額外加速比為534/68≈7.85。

      3.5 效果分析

      表2給出了頁鎖定內(nèi)存數(shù)據(jù)交互、線程分配優(yōu)化、內(nèi)存訪問優(yōu)化之后的GPU算法性能。

      表2 優(yōu)化后GPU算法性能Table 2 Performance of GPU-based algorithm after optimization

      對比表1所示優(yōu)化前性能可得結(jié)論如下。

      a.和分頁內(nèi)存數(shù)據(jù)交互相比,頁鎖定內(nèi)存數(shù)據(jù)交互可以將數(shù)據(jù)傳輸時間降低一半左右,但分配頁鎖定內(nèi)存會減少操作系統(tǒng)可分頁物理內(nèi)存的大小,因此使用過大的頁鎖定內(nèi)存會降低系統(tǒng)性能。

      b.經(jīng)過線程分配優(yōu)化之后,算例2的內(nèi)核執(zhí)行時間從2090 ms下降為534 ms,獲得了額外3.91倍加速。

      c.經(jīng)過內(nèi)存訪問優(yōu)化之后,算例2的內(nèi)核執(zhí)行時間從534 ms下降為68 ms,獲得了額外7.85倍加速。

      d.經(jīng)過頁鎖定內(nèi)存數(shù)據(jù)交互、線程分配優(yōu)化、內(nèi)存訪問優(yōu)化之后,算例2的GPU算法執(zhí)行時間從2330 ms下降為188 ms,獲得了額外12.4倍加速,相對于CPU算法的加速比為9672/188≈51。此外可以看出,算例2的數(shù)據(jù)交互時間約占總時間的64%,內(nèi)核執(zhí)行時間約占36%,數(shù)據(jù)交互時間已經(jīng)成為算法瓶頸。

      e.經(jīng)過充分優(yōu)化之后,算例1的GPU算法執(zhí)行時間從79 ms下降為12.1 ms,獲得了額外6.53倍加速,相對于CPU算法的加速比為196/12.1≈16.2??梢钥闯觯瑹o論是算法整體性能還是優(yōu)化設(shè)計的效果,算例1都小于算例2,究其原因是因?yàn)樗憷?的規(guī)模較小,難以充分發(fā)揮GPU的硬件能力。

      為了更加公平地評價GPU算法的性能,采用OpenMP技術(shù)對CPU算法進(jìn)行多線程加速,每個CPU線程負(fù)責(zé)計算一部分支路開斷或發(fā)電機(jī)開斷,多線程算法的測試在混合架構(gòu)平臺的6核心Intel Xeon E5-2620上完成。表3給出了多線程算法的測試效果,對其分析如下:6線程CPU算法相對于單線程取得了4.49倍加速,但已經(jīng)出現(xiàn)了輕微的飽和現(xiàn)象;即使和6線程CPU算法相比,GPU算法仍然可取得11倍加速。

      表3 GPU算法和多線程CPU算法的性能對比Table 3 Comparison of performance between GPU-based algorithm and CPU-based multi-thread algorithm

      4 結(jié)論

      嚴(yán)重故障集篩選過程占整個靜態(tài)安全分析總時間的25%~30%,對其采用高性能計算技術(shù)進(jìn)行加速具有工程意義。直流故障篩選算法主要涉及稠密向量計算,非常適合采用GPU進(jìn)行并行加速。本文研究的主要貢獻(xiàn)如下。

      a.對GPU的軟硬件架構(gòu)特點(diǎn)進(jìn)行了詳細(xì)剖析,基于此提出了GPU算法在任務(wù)分配、數(shù)據(jù)交互、線程分配、內(nèi)存使用4個方面應(yīng)遵循的設(shè)計準(zhǔn)則。

      b.基于上述GPU算法的通用設(shè)計準(zhǔn)則,對直流故障篩選算法進(jìn)行了詳細(xì)設(shè)計和優(yōu)化,提出了一種匹配GPU軟硬件架構(gòu)的并行直流故障篩選算法。9 241節(jié)點(diǎn)算例的絕對執(zhí)行時間僅為188 ms,相對于6核心CPU算法取得了11倍加速。

      本文研究表明:結(jié)合GPU軟硬件架構(gòu)的算法設(shè)計至關(guān)重要,提出的4個設(shè)計準(zhǔn)則具有通用性,可被應(yīng)用于其他電力系統(tǒng)算法的GPU加速。

      參考文獻(xiàn):

      [1]王錫凡.現(xiàn)代電力系統(tǒng)分析[M].北京:科學(xué)出版社,2003:98-104.

      [2]李峰,李虎成,於益軍,等.基于并行計算和數(shù)據(jù)復(fù)用的快速靜態(tài)安全校核技術(shù)[J].電力系統(tǒng)自動化,2013,37(14):75-80.LI Feng,LI Hucheng,YU Yijun,et al.Fast computing technologies for static security checking based on parallel computation and data reuse[J].Automation of Electric Power Systems,2013,37(14):75-80.

      [3]陳國良.并行計算:結(jié)構(gòu)算法編程[M].北京:高等教育出版社,2003:13-17.

      [4]Nvidia.CUDA programming guide[EB/OL].[2016-02-06].http:∥docs.nvidia.com /cuda /cuda-c-programming-guide.

      [5]張寧宇,高山,趙欣.一種求解機(jī)組組合問題的內(nèi)點(diǎn)半定規(guī)劃GPU并行算法[J].電力自動化設(shè)備,2013,33(7):126-131.ZHANG Ningyu,GAO Shan,ZHAO Xin.GPU parallel algorithm of interior point SDP for unit commitment[J].Electric Power Automation Equipment,2013,33(7):126-131.

      [6]韓志偉,劉志剛,魯曉帆,等.基于CUDA的高速并行小波算法及其在電力系統(tǒng)諧波分析中的應(yīng)用[J].電力自動化設(shè)備,2010,30(1):98-101.HAN Zhiwei,LIU Zhigang,LU Xiaofan,et al.High-speed parallel wavelet algorithm based on CUDA and its application in power system harmonic analysis[J].Electric Power Automation Equipment,2010,30(1):98-101.

      [7]陳來軍,陳穎,許寅,等.基于GPU的電磁暫態(tài)仿真可行性研究[J].電力系統(tǒng)保護(hù)與控制,2013,41(2):107-112.CHEN Laijun,CHEN Ying,XU Yin,et al.Feasibility study of GPU based electromagnetic transient simulation[J].Power System Protection and Control,2013,41(2):107-112.

      [8]唐聰,嚴(yán)正,周挺輝.基于圖形處理器的廣義最小殘差迭代法在電力系統(tǒng)暫態(tài)仿真中的應(yīng)用[J].電網(wǎng)技術(shù),2013,37(5):1365-1377.TANG Cong,YAN Zheng,ZHOU Tinghui.Application of graph processing unit-based generalized minimal residual iteration in power system transient simulation[J].Power System Technology,2013,37(5):1365-1377.

      [9]張寧宇,高山,趙欣.基于GPU的機(jī)電暫態(tài)仿真細(xì)粒度并行算法[J].電力系統(tǒng)自動化,2012,36(9):54-60.ZHANG Ningyu,GAO Shan,ZHAO Xin.A fine granularity parallel algorithm for electromechanical transient stability simulation based on graphic processing unit[J].Automation of Electric Power Systems,2012,36(9):54-60.

      [10]夏俊峰,楊帆,李靜,等.基于GPU的電力系統(tǒng)并行潮流計算的實(shí)現(xiàn)[J].電力系統(tǒng)保護(hù)與控制,2010,38(18):100-110.XIA Junfeng,YANG Fan,LI Jing,et al.Implementation of parallel power flow calculation based on GPU[J].Power System Protection and Control,2010,38(18):100-110.

      [11]楊罡,喻樂,劉明光.基于多輕量線程的電力系統(tǒng)潮流計算加速方法[J].電網(wǎng)技術(shù),2013,37(6):1666-1670.YANG Zhi,YU Le,LIU Mingguang.A method for accelerating power flow calculation based on multiple light threads[J].Power System Technology,2013,37(6):1666-1670.

      [12]陳德?lián)P,李亞樓,江涵,等.基于道路樹分層的大電網(wǎng)潮流并行算法及其 GPU 優(yōu)化實(shí)現(xiàn)[J].電力系統(tǒng)自動化,2014,38(22):63-69.CHEN Deyang,LI Yalou,JIANG Han,et al.A parallel power flow algorithm for large-scale grid based on stratified path trees and its implementation on GPU[J].Automation of Electric Power Systems,2014,38(22):63-69.

      [13]徐得超,陳勇,王偉,等.基于圖形處理器的多波前潮流計算方法[J].高電壓技術(shù),2016,42(10):3301-3307.XU Dechao,CHEN Yong,WANG Wei,et al.GPU-based multifrontal methods in power flow calculation[J].High Voltage Engineering,2016,42(10):3301-3307.

      [14]Nvidia.NVIDIA’s next generation CUDA compute architecture:kepler GK110[EB/OL].[2016-02-06].http:∥www.nvidia.com /content/PDF /kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.

      猜你喜歡
      浮點(diǎn)算例支路
      LEO星座增強(qiáng)GNSS PPP模糊度浮點(diǎn)解與固定解性能評估
      基于限流可行方案邊界集的最優(yōu)支路投切
      能源工程(2020年6期)2021-01-26 00:55:22
      基于浮點(diǎn)DSP的鐵路FSK信號檢測
      多支路兩跳PF協(xié)作系統(tǒng)的誤碼性能
      利用支路參數(shù)的狀態(tài)估計法辨識拓?fù)溴e誤
      基于振蕩能量的低頻振蕩分析與振蕩源定位(二)振蕩源定位方法與算例
      互補(bǔ)問題算例分析
      基于FPGA的浮點(diǎn)FIR濾波器設(shè)計
      基于CYMDIST的配電網(wǎng)運(yùn)行優(yōu)化技術(shù)及算例分析
      改進(jìn)的Goldschmidt雙精度浮點(diǎn)除法器
      恩施市| 建平县| 天气| 定襄县| 沁水县| 佳木斯市| 德阳市| 留坝县| 深圳市| 利辛县| 明星| 哈巴河县| 盐津县| 台州市| 太保市| 兴城市| 宜宾县| 永城市| 德安县| 大埔县| 绿春县| 邳州市| 三明市| 南宫市| 霞浦县| 临朐县| 秦安县| 彭泽县| 吉木乃县| 旺苍县| 荆州市| 利辛县| 镇宁| 毕节市| 广安市| 光泽县| 道真| 沁源县| 虹口区| 大名县| 夏邑县|