一種基于gpu加速的直流故障篩選方法
【專利摘要】本發明公開了一種基于GPU加速的直流故障篩選方法,包括:對直流潮流算法進行優化;CPU讀取電網數據,計算節點電抗矩陣X0;計算基態電網的節點電壓相角θ0,將電網基礎數據傳送給GPU;GPU內核函數1計算支路開斷時的節點電壓相角θ1;GPU內核函數2計算支路開斷時各支路的有功功率,篩選出支路開斷故障集S1并回傳至CPU中;GPU內核函數3計算發電機開斷時的節點電壓相角θ2;GPU內核函數4計算發電機開斷時各支路的有功功率,篩選出發電機開斷故障集S2并回傳至CPU中。本文提出了一種基于GPU加速的直流故障篩選方法,提高了計算效率,解決了電力系統靜態安全性分析中故障直流篩選耗時大的難題。
【專利說明】
-種基于GPU加速的直流故障篩選方法
技術領域
[0001] 本發明屬于電力系統高性能計算應用領域,設及電力系統故障篩選,尤其設及一 種基于GPU加速的直流故障篩選方法。
【背景技術】
[0002] GPU是一種眾核并行處理器,在處理單元的數量上要遠遠超過CPU。傳統上的GPU只 負責圖形擅染,而大部分的處理都交給了 CPU。現在的GPU已經法陣為一種多核,多線程,具 有強大計算能力和極高存儲器帶寬,可編程的處理器。在通用計算模型下,GPU作為CPU的協 處理器工作,通過任務合理分配分解完成高性能計算。目前GPU已經成功應用于醫學影像, 計算流體動力學,環境科學,石油勘測等領域。
[0003] 在電力系統中,直流潮流計算,交流潮流計算,暫態穩定性分析,大型稀疏線性方 程組求解等都是比較耗時的部分。根據不同線性稀疏系統的特點,對不同的解決方法提出 了基于GP時日速策略,例如,LU分解,共輛梯度算法,雅克比矩陣迭代,在運些算法中可W達 到3到10倍的加速比。N-I靜態安全性分析用來檢測電網中單一元件斷開時電網的靜態安全 性。對于一個具有N個元件的電力系統,嚴格的安全分析需要腳欠交流潮流計算,運是非常耗 時的。在實際應用中,只有一部分嚴重的故障會威脅到電網的安全性,因此,先用直流潮流 來篩選嚴重的故障集,再用交流潮流來進一步分析。目前廣泛使用N-I靜態安全性分析來檢 測電網中單一元件斷開時電網的靜態安全性。對于一個具有N個元件的電力系統,在實際應 用中,用直流潮流來篩選一部分可能會威脅到電網安全性的嚴重故障,CPU處理是比較耗時 的。
【發明內容】
[0004] 發明目的:針對現有技術的不足,本發明提供了一種可W大幅度減少直流故障的 計算時間,為在線靜態安全性分析提供了可能的一種基于GPU加速的直流故障篩選方法。
[0005] 技術方案:本發明提出了一種基于GPU加速的直流故障篩選方法。
[0006] 直流潮流:電力學名詞,指在給定電力系統網絡拓撲、元件參數和發電、負荷參量 條件下,計算有功功率、電壓相角在電力網中的分布。
[0007] 并行計算:相對于串行運算,是一種一次可執行多個指令的算法,目的是提高計算 速度,及通過擴大問題求解規模,解決大型而復雜的計算問題。
[000引 GPU:圖形處理器(英語:Gra 地 ics Processing Unit,縮寫:GPU)。
[0009] 導納矩陣:W系統元件的等值導納為基礎所建立的、描述電力網絡各節點電壓和 注入電流之間關系的矩陣。
[0010] 本發明一種基于GPU加速的直流故障篩選方法,所述方法包括:
[0011] (1)根據不同故障的特點對直流潮流算法進行優化;
[001 ^ (2 )CPU讀取電網數據,生成節點電納矩陣B,計算節點電抗矩陣Xo;利用直流潮流 算法計算基態電網的節點電壓相角00,將直流篩選所需的電網基礎數據傳送給GPU;
[0013] (3)GPU中的內核函數I計算支路開斷時的節點電壓相角01;
[0014] (4)GPU中的內核函數2計算支路開斷時各支路的有功功率并與有功功率限額比 較,篩選出支路開斷故障集Sl并回傳至CPU中;
[0015] (5)GPU中的內核函數3計算發電機開斷時的節點電壓相角02;
[0016] (6)GPU中的內核函數4計算發電機開斷時各支路的有功功率并與有功功率限額比 較,篩選出發電機開斷故障集S2并回傳至CPU中。
[0017] 其中,所述步驟(1)中所述故障包括支路開斷故障和發電機開斷故障,當支路斷開 時,電網電抗矩陣發生變化,各節點注入功率增量A P為零;當發電機斷開時,電網電抗矩陣 不變,即電抗矩陣增量AX = 0。
[0018] 優選的,所述步驟(2)中所述電網基本數據包括電網節點數N、支路數Nbranches、每條 支路首尾所連節點編號df[Nbranches]和dt[Nbranches]、支路電抗X、支路有功功率限額Pb [化ranches]、發電機數量Ngen、發電機所連節點編號dg陽gen]、發電機所發有功功率Pg陽gen]、節 點電壓相角目〇、基態節點注入有功功率Po、節點電抗矩陣Xo。
[0019] 進一步,所述步驟(3)中內核函數1為1(6則61_1<化1。。1<3晶扣63<13〉,1(6^61_1的線程 塊大小Nthreads 固定為 1 28,線程塊數量化locks =(化ranches+Nthreads - 1 )/Nthreads ; Kerne 1_1 的第b 個線程計算第b條支路斷開時的電壓相角向量01=00+A 0,設第b條支路的首尾節點編號分 別為i、j,其中 A0 = c(目0廣目0j)XL,式中:)(L=[Xli-Xlj,L,Xn廣Xnj]T,C =義 +義;_2義;+槪;, A XU為斷開支路的電抗值,Xu為基態的節點電抗矩陣Xo的第Q J)號元素,0〇1為節點電壓 相角向量e〇的第i號元素;
[0020] KerneLKPtiocks ,Nthreads〉的具體計算方法為:
[0021] (3.1 )CUDA自動為每個線程分配線程索引threadID作為線程號;
[0022] (3.2)將線程號賦值給變量tid,通過變量tid來指定線程;
[0023] (3.3)第tid號線程計算第b條支路開斷時各節點電壓的相角聲;
[0024] (3.4)判斷線程號變量tid的值是否小于支路數化ranches,小于繼續執行W下步驟, 否則該線程結束運算;
[0025] (3.5)將第b條支路首尾兩個節點編號分別賦值給變量i,j,即:i戶df [b],j戶dt 化];
[0026] (3.6)用公式c = (Xii+?廣2XXリ-Axij)計算c,如果c為0,置Sl[b]為2,若不為0,c = l/c;
[0027] (3.7)循環變量k從1到N-I循環,計算第b條支路開斷時的電壓相角向量:
[002引
[0029] 其中,(話表示第b條支路開斷時第k節點的電壓相角,(0〇)k表示基態時k節點的 電壓相角;
[0030] (3.8)化locks個線程塊中的全部線程計算結束得到節點電壓相角目1和故障集S1。
[0031] 再者,所述步驟(4)中所述內核函數2為Kerne 1_2<化locks,Nthreads〉,Kerne 1_2的線 程塊大小Nthreads固定為 1 28,線程塊數量化locks =(化ranches+Nthreads- 1 )/Nthreads ;
[0032] Kernel_2<化l。cks,Nt虹eads〉使用Kernel_l的計算結果目l和Sl,其具體計算方法為:
[0033] (4.1)CUDA自動為每個線程分配線程索引t虹eadID作為線程的編號;
[0034] (4.2)將線程號賦值給變量tid,通過變量tid來指定線程;
[0035] (4.3)設第tid號線程計算第b條支路開斷時的各支路的有功功率并與限額比較;
[0036] (4.4)判斷線程號tid是否小于支路數化ranthes,小于繼續執行W下步驟,否則該線 程結束運算;
[0037] (4.5)tid號線程中循環變量k從巧帆ranches循環,循環內部:a)第k條支路的首尾節 點編號壯比巧日化比]分別賦值給變量i,j,即:壯比化比];;b)判斷Sl「b1不為2&k 不等于b繼續執行;否則循環結束。C)用下式計算第k條支路的有功功率
式 中:Pl/為第b條支路開斷時第k條支路的有功功率,巧,種;.是內核函數1計算支路開斷時的 節點電壓相角的第(i,b)和(j,b)元素,即第b條支路開斷時i,j節點電壓相角;并將結果 與有功功率限額比較,大于限額,置Sl[b]為1;
[003引(4.6)化locks個線程塊中的全部線程計算結束,得到Sl并傳回CPU處理。
[0039] 優選的,所述步驟(5)中所述內核函數3為Kernel_3<Nbi〇cks,Nthreads〉,
[0040] Kernel_3<Nblocks,Nthreads>的線程塊大小 Nthreads 固定為 128,線程塊數量化 locks = (Ngen+Nl;hreads - 1 )/NAreads ;
[0041 ]其中,Kernel_3<rti〇cks,Nthreads>的具體計算方法為:
[0042] (5. DCUDA自動為每個線程分配線程索引thread ID作為線程的編號;
[0043] (5.2)將線程號賦值給變量tid,通過變量tid來指定線程;
[0044] (5.3)第tid號線程計算第b臺發電機開斷時各節點電壓相角璋;
[0045] (5.4)判斷線程號變量tid的值是否小于發電機數Ngen,小于繼續執行W下步驟,否 則該線程結束運算;
[0046] (5.5)將第1:1(1臺發電機所連節點號賦值給變量^'〇' = (^(1:1(1);
[0047] (5.6)循環變量k從1至IjN-I循環,計算第b臺發電機開斷時的節點電壓的相角向量:
其中,表示j節點發電機開斷時k節點電壓相角,(0〇)k表示穩態 時k節點電壓相角;
[004引(5.7)NbiDcks個線程塊中的全部線程計算結束得到節點電壓相角02,供內核函數4 使用。
[0049] 進一步,所述步驟(6)中所述內核函數4為Kerne 1_4<化1。。1<3,Nthreads〉,Kerne 1_4的 線程塊大小Nthreads固定為 128,線程塊數量化locks = (Ngen+Nthreads - 1 VNthreads ;
[00加]其中,Kerne l_4<Nbi〇cks,Nthreads〉的具體計算方法為:
[0051] (6. DCUDA自動為每個線程分配線程索引thread ID作為線程的編號;
[0052] (6.2)將線程號賦值給變量tid,通過變量tid來指定線程;
[0053] (6.3)設第tid號線程計算第b臺發電機開斷時的各支路的有功功率并與限額比 較;
[0054] (6.4)判斷線程號tid是否小于發電機Ngen,小于繼續執行W下步驟,否則該線程結 束運算;
[0055] (6.5)第tid號線程中循環變量k從巧帆ranches循環,循環內部:a)第k條支路的首尾 節點編號壯「k1巧化「k1分別賦值給變量i,j ;b)計算第k條支路的有功功率:
[0化6]
[0057]式中:Pi/為第b臺發電機開斷時第k條支路的有功功率,巧,貨.是內核函數4計算 發電機開斷時的節點電壓相角92的第(i,b)和(j,b)元素,并將結果與限額比較,大于限額, 置S2[b]為1;
[0化引(6.6)化locks個線程塊中的全部線程計算結束,得到S2并傳回CPU處理。
[0059] 有益效果:與現有技術相比,本發明具有W下顯著優點:首先該基于GPU加速的直 流故障篩選方法根據不同故障特點對直流潮流算法進行優化,避免了不必要的浮點計算 量;其次使用CPU處理電網基本數據,利用電網數據形成節點電抗矩陣,一定程度上減少了 電網數據在CPU和GPU之間的傳輸的次數,且效率更高;再者GPU的浮點計算能力和內存帶寬 是相應CPU的5到10倍,在處理相同的浮點運算時,GPU的能耗只有CPU的20 %左右,該方法利 用CPU控制程序的流程并處理基礎數據和GPU處理密集的浮點運算相結合的模式提高了直 流故障篩選方法的計算效率,解決了電力系統靜態安全性分析中故障直流篩選耗時大的難 題。
【附圖說明】
[0060] 圖1為本發明基于GPU加速的直流故障篩選方法的算法流程圖;
[0061] 圖2為本發明基于GPU加速的直流故障篩選方法中內核函數1的算法流程圖;
[0062] 圖3為本發明基于GPU加速的直流故障篩選方法中電網算例基本數據;
[0063] 圖4為本發明基于GPU加速的直流故障篩選方法中GPU與CPU測試結果對比。
【具體實施方式】
[0064] 本發明公開了一種基于GPU加速的直流故障篩選方法,所述方法包括:
[0065] (3)GPU中的內核函數1計算支路開斷時的節點電壓相角01;
[0066] (4)GPU中的內核函數2計算支路開斷時各支路的有功功率并與有功功率限額比 較,篩選出支路開斷故障集Sl并回傳至CPU中;
[0067] (5)GPU中的內核函數3計算發電機開斷時的節點電壓相角02;
[006引(6)GPU中的內核函數4計算發電機開斷時各支路的有功功率并與有功功率限額比 較,篩選出發電機開斷故障集S2并回傳至CPU中。
[0069] -、根據不同故障的特點對直流潮流算法進行優化;簡化直流潮流計算公式,避免 不必要的浮點計算量;
[0070] (1)直流潮流的計算公式為:
[0071] P = BnXn 目或者目=XnXnP (1)
[007^
重、
[0073] 其中,
[0074] n是電網節點個數;
[0075] B是節點電納矩陣,n*n維矩陣;
[0076] P是節點有功注入功率,n維向量;
[0077] 0是節點電壓角度,n維向量;
[0078] 0i,目j是節點i和節點j電壓相角;
[0079] X = B-I是節點電抗矩陣,n*n維矩陣;
[0080] Xi j表示節點i和節點j之間的支路電抗值;
[0081 ] 在基態時,直流潮流計算公式可W表示為:0〇 = X〇P〇。
[0082] 當發生故障的時,公式(1)可W表示為:
[0083] Bi = XiPi = (Xo+ A X) (Po+ A P) = 00+ A 0 (3)
[0084] AB=A XPo+Xo A P+ A X A P (4)
[0085] 其中,下標0和1分別表示故障前狀態和故障后狀態;A表示故障前到故障后的改 變;
[0086] 如果節點i和節點j之間增加一條支路,電抗矩陣的增量AX可W表示為:
[0087] ^5)
[008引 A Xij為增加支路的電抗值,如果是開斷支 路,A Xi功負值,Xi功基態的節點電抗矩陣的第(i,j)號元素,ei,ej為標準基。
[0089] (2)直流開斷的算法流程如下:
[0090] 1)在CPU上只計算一次電網基態下的節點電抗矩陣Xo。
[0091] 2)用式5計算支路開斷后的電抗矩陣增量AX。
[0092] 3)用式3和4計算節點電壓相角A 0和01,
[0093] 4)用式2計算各支路有功功率,并檢查支路是否過負荷。
[0094] 當C的分母為加寸,說明節點i和j之間支路斷開會導致系統解列。
[0095] (3)根據支路開斷故障和發電機開斷故障的不同特點對直流潮流算法進行優化。 當節點i和節點j之間的支路斷開時,電網電抗矩陣發生變化,各節點注入功率增量為零,即 AP = 0。式4可W簡化為:
[0096] A 0 = AXPo=cXoMM^oPo = cXLM^0〇 = c(0〇i-0〇j)XL (6)
[0097] 其中,壯=XoM=Xo (e 廣e j) = [ Xi 廣 Xij,L Xn 廣 Xn j ] T。
[0098] 當連接于節點j的發電機斷開時,電網電抗矩陣不變,即AX = O,節點注入功率增 量A P是稀疏向量,只有A Pj非零。式4可W簡化為:
[0099] AB = XoAP= APjXj (7)
[0100] 運里,AP=[0…APj…0]T,Xj=[Xリ…Xnj]T,Xj為基態下的節點電抗矩陣X0的第j 列元素,Xi功基態下的節點電抗矩陣Xo的第Q J)號元素 ,A P功連接于節點j的發電機的 有功功率。
[0101] 二、算法設計:本算法將程序分為CPU和GPU兩個部分。
[0102] CPU讀取電網數據,生成待分析電網的節點電納矩陣B,為GPU準備基本數據,處理 GPU的計算結果,并控制整個程序的流程。GPU主要處理密集的浮點運算,共采用四個內核函 數來完成故障篩選功能,具體包括:內核函數KerneLl計算支路開斷時的節點電壓相角01; 內核函數Kernel_2計算支路開斷時各支路的有功功率并與有功功率限額比較,篩選出支路 開斷故障集Sl;內核函數Ke;rnel_3計算發電機開斷時的節點電壓相角02;內核函數KerneL 4計算發電機開斷時各支路的有功功率并與有功功率限額比較,篩選出發電機開斷故障集 S2,具體流程如圖1所示。
[0103] S、CPU生成基態下的節點電抗矩陣Xo,傳輸基礎數據
[0104] CPU讀取電網數據,生成節點電納矩陣B,使用KLU庫函數計算其逆矩陣節點電抗矩 陣Xo。利用公式:0〇 = X〇P〇,計算基態電網各節點電壓相角00。將直流篩選所需的數據傳送給 GPU,具體包括:開斷所需的基礎數據:電網節點數N,支路數Nbranches,每條支路首尾所連節點 編號壯[Nbranches巧日dt[Nbranches],支路電抗X,支路有功功率限額Pb[Nbranches],發電機數量 Ngen,發電機所連節點編號dg陽gen],發電機所發有功功率Pg陽gen],節點電壓相角00、基態節 點注入有功功率Po、節點電抗矩陣Xo。
[0105] 四、計算支路開斷時的節點電壓相角01
[0106] GPU內核函數1中,電網支路數化ranches,支路所連節點編號向量壯[Nbranches ]和dt [化ranches ],節點電壓相角目1 (化ranches X N維矩陣),故障集S1陽branches ]。
[0107] (1)內核函數1定義為KerneLK化locks ,Nthreads〉。使用一個線程化read計算一條支 路開斷,共需要的線程數等于支路數Nbranches,線程塊大小Nthreads固定為128,線程塊數量 Nblocks^(Nbranches+Ntbeads-l)/N&reads。
[010引 (2化ernel_l<化locks,Nthreads〉流程:1) CUDA自動為每個線程分配線程索引thread ID作為線程的編號;2)將線程號賦值給變量tid,通過變量tid來指定線程;3)第tid號線程 計算第b條支路開斷時各節點電壓的相角終;4)判斷線程號變量tid的值是否小于支路數 化ranches,小于繼續執行W下步驟,否則該線程結束運算;5)將b條支路首尾兩個節點編號分 別賦值給變量i,j,即:i戶壯[b],j戶化[b]; 6)用公式C = (Xii巧j廣2 XXu- A Xij)計算C,如果 C為0,置Sl[b]為2,若不為0,c = l/c;7)循環變量k從1到N-I循環,用下式計算第b條支路開 斷時的電壓相角向量:
[0109]
[0110] 其中,表示第b條支路開斷時第k節點的電壓相角,(0〇)k表示基態時k節點的 電壓相角;7)Nbiwks個線程塊中的全部線程計算結束得到節點電壓相角01和故障集SI,供內 核函數2使用,如圖2所示。
[0111] 五、計算支路開斷時各支路的有功功率并篩選出支路開斷故障集Sl
[0112] GPU內核函數2中,電網支路數為化ranches,支路所連節點編號向量壯[化ranches巧口化 [Nbranches],節點電壓相角矩陣01,節點電壓相角0〇,故障集S1。
[011引 (1)內核函數2定義為Ke;rnel_2<Nbi0cks,Nthreads〉。使用一個線程化read計算一條支 路開斷時的各支路有功功率,共需要的線程數等于支路數Nbranshes。線程塊大小Nthreads固定 為 1 28 ,線程塊數里]Mblocks為(IMbranches+Nthreads - 1 ) /Nthreads O
[0114] (2化ernel_2<化l。cks,Nt虹eads〉流程:使用Kernel_l的計算結果目l和Sl。l)CUDA自動 為每個線程分配線程索引thread ID作為線程的編號;2)將線程號賦值給變量tid,通過變 量tid來指定線程;3)設第tid號線程計算第b條支路開斷時的各支路的有功功率并與限額 比較;4)判斷線程號tid是否小于支路數化ranches,小于繼續執行W下步驟,否則該線程結束 運算;5)tid號線程中循環變量k從巧帆ranches循環,循環內部:a)第k條支路的首尾節點編號 壯比]和dt[k]分別賦值給變量i,j,即:i^df[k],j^dt[k]; ;b)判斷Sl[b]不為2且k不等于 b繼續執行;否則循環結束。C)用下式計算第k條支路的有功功率:
[0115]
[0116] 式中:巧為第b條支路開斷時第k條支路的有功功率,嗦,墻是內核函數1計算支 路開斷時的節點電壓相角的第(i,b)和(j,b)元素,即第b條支路開斷時i,j節點電壓相 角。并將結果與有功功率限額比較,大于限額,置Sl[b]為1;6)化locks個線程塊中的全部線程 計算結束,得到Sl并傳回CPU處理。
[0117] 六、計算發電機開斷時的節點電壓的相角02
[0118] GPU內核函數3中,電網發電機數為Ngen,發電機所連節點編號dg陽gen],節點電壓相 角目2 (Ngen X N維矩陣)。
[0119] (1)內核函數3定義為Ke;rnel_3<化i〇cks,Nthreads〉。使用一個線程thread計算一臺發 電機開斷,共需要的線程數等于支路數Ngen,線程塊大小Nthreads固定為128,線程塊數量 Nblocks為(Ngen+N化reads- 1 )/Nthreads。
[0120] (2化ernel_3<化locks,Nthreads〉流程:1) CUDA自動為每個線程分配線程索引thread ID作為線程的編號;2)將線程號賦值給變量tid,通過變量tid來指定線程;3)第tid號線程 計算第b臺發電機開斷時各節點電壓相角夠;4)判斷線程號變量tid的值是否小于發電機 數Ngen,小于繼續執行W下步驟,否則該線程結束運算;5)將第tid臺發電機所連節點號賦值 給變量j : j = dg(tid) ;6)循環變量k從1至IjN-I循環,用下式計算第b臺發電機開斷時的節點 電壓的相角向量:
[0121]
[0122] 其中,(巧表示j節點發電機開斷時k節點電壓相角,(e〇)k表示穩態時k節點電壓 相角;7)化IDCks個線程塊中的全部線程計算結束得到節點電壓相角02,供內核函數4使用。
[0123] 屯、計算發電機開斷時各支路的有功功率并篩選發電機開斷故障集S2
[0124] GPU內核函數4中,電網發電機數為Ngen,發電機所連節點編號dg陽gen],節點電壓相 角目2,故障集向量S2陽gen]。
[0125] (1)內核函數4定義為Ke;rnel_2<Nbi〇cks,Nthreads〉。使用一個線程化read計算一臺發 電機開斷時的各支路有功功率,共需要的線程數等于支路數Ngen。線程塊大小Nthreads固定為 1 28 ,線程塊數里]Mblocks為(Ngen+Nthreads - 1 )/Nthreads。
[0126] (2化ernel_4<化l。cks,Nt虹eads〉流程:使用Kernel_3的計算結果目2和S2。l)CUDA自動 為每個線程分配線程索引thread ID作為線程的編號;2)將線程號賦值給變量tid,通過變 量tid來指定線程;3)設第tid號線程計算第b臺發電機開斷時的各支路的有功功率并與限 額比較;4)判斷線程號tid是否小于發電機Ngen,小于繼續執行W下步驟,否則該線程結束運 算;5)第tid號線程中循環變量k從巧的branches循環,循環內部:a)第k條支路的首尾節點編號 df [ k]和化[k]分別賦值給變量i,j ; b )用下式計算第k條支路的有功功率:
[0127]
[012引式中:兮為第b臺發電機開斷時第k條支路的有功功率,巧,聲,.是內核函數3計算 發電機開斷時的節點電壓相角92的第(i,b)和(j,b)元素。并將結果與限額比較,大于限額, 置S2[b]為1;6)化locks個線程塊中的全部線程計算結束,得到S2并傳回CPU處理。
[01巧]八、GPU將計算結果傳回CPU進一步處理
[0130] GPU將內核函數2和4計算出來的故障集Sl和S2傳回CPU。若Sl[b]為1,則第b條支路 斷開屬于故障集,若Sl[b]為2,則第b條支路斷開導致系統解列;若S2[b]為1,則第b臺發電 機斷開屬于故障集。
[0131] 本發明所使用的GPU計算平臺配備一張 Tesla K20C GPU卡和Intel Xeon E5- 2620CPU,GPU的峰值帶寬可達208GB/S,單精度浮點計算量峰值可達3.52Tflops,CPU主頻為 2細ZXPU計算平臺配備Intel Core i7-3520M 2.90GHz的CPU。在CPU和GPU計算平臺上分別 對3個電網實例進行了測試,具體實例如圖3所示。整個程序的計算時間主要分為數據傳輸 和核函數執行兩個部分,其中數據傳輸超過總時間的30%。對于規模比較小的電網,GPU內 核函數節約的時間不能夠彌補數據傳輸所耗費的時間,因此沒有加速比,如圖4所示,算例1 中CPU計算時間是7ms,GPU計算時間也是7ms,但是運其中有4.76ms是數據傳輸所耗費的,加 速比為1;算例2中CPU計算時間為260ms,GPU計算時間為95ms,其中44.85ms用在數據傳輸, 加速比為2.73。當電網規模比較大時,就能達到理想的加速比,算例3中CPU計算時間為 362Ims,GPU計算時間是733ms,其中242.36ms是數據傳輸所耗費的,占總時間比例相對小, 加速比為4.94。雖然CPU與GPU結合增加了數據傳輸運部分時間,但是當電網規模比較大的 時候,加速比還是很可觀的,計算速度大幅提高,可W實現電力系統的在線靜態安全分析, 解決了電力系統靜態安全性分析中故障直流篩選耗時大的難題。
【主權項】
1. 一種基于GPU加速的直流故障篩選方法,其特征在于:所述方法包括: (1) 根據不同故障的特點對直流潮流算法進行優化; (2) CPU讀取電網數據,生成節點電納矩陣B,計算節點電抗矩陣X〇;利用直流潮流算法計 算基態電網的節點電壓相角θ〇,將直流篩選所需的電網基礎數據傳送給GPU; (3) GRJ中的內核函數1計算支路開斷時的節點電壓相角θ1; (4) GPU中的內核函數2計算支路開斷時各支路的有功功率并與有功功率限額比較,篩 選出支路開斷故障集S1并回傳至CPU中; (5 )GPU中的內核函數3計算發電機開斷時的節點電壓相角02; (6)GPU中的內核函數4計算發電機開斷時各支路的有功功率并與有功功率限額比較, 篩選出發電機開斷故障集S2并回傳至CPU中。2. 根據權利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(1) 中所述故障包括支路開斷故障和發電機開斷故障,當支路斷開時,電網電抗矩陣發生變化, 各節點注入功率增量A P為零;當發電機斷開時,電網電抗矩陣不變,即電抗矩陣增量ΔΧ = 0〇3. 根據權利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(2) 中所述電網基本數據包括電網節點數N、支路數N branches、每條支路首尾所連節點編號df [Nbnhes ]和dt [ Nbnhes ]、支路電抗X、支路有功功率限額Pb [Nbnhes ]、發電機數量Ngen、發電 機所連節點編號dg[Ngen]、發電機所發有功功率Pg[N gen]、節點電壓相角θο、基態節點注入有 功功率PQ、節點電抗矩陣Χ〇。4. 根據權利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(3) 中內核函數1為Kerne 1_1〈Nbiocks,Nthreads〉,Kerne 1_1的線程塊大小Nthreads固定為128,線程塊 數量Nblocks= (Nbranches+Nthreads-l )/Nthreads ;Keme]_l的第b個線程計算第b條支路斷開時的 電壓相角向量θι = θ〇+Δ Θ,設第b條支路的首尾節點編號分別為i、j,其中Δ 0 = c(0Qi-0Oj) Xl,式中:XL=[Xii-Xij,L,Xni-XnjrXij為斷開支路的電抗值,Xij 為基態的節點電抗矩陣Xo的第(i,j)號元素,節點電壓相角θ〇的第i號元素; Kerne l_l〈Nbi〇cks,Nthreads> 的具體計算方法為: (3.1 )CUDA自動為每個線程分配線程索引threadID作為線程號; (3.2) 將線程號賦值給變量tid,通過變量tid來指定線程; (3.3) 第tid號線程計算第b條支路開斷時各節點電壓的相角貧; (3.4) 判斷線程號變量tid的值是否小于支路數Nbranches,小于繼續執行以下步驟,否則 該線程結束運算; (3.5) 將第b條支路首尾兩個節點編號分別賦值給變量i,j,即:i-df [b],j-dt[b]; (3.6) 用公式〇 = 0#父『2\父『八叫)計算(;,如果(;為〇,置31[13]為2,若不為〇,〇=1/ c; (3.7) 循環變量k從1到N-l循環,計算第b條支路開斷時的電壓相角向量:其中,?丨;表示第b條支路開斷時第k節點的電壓相角,(0Q)k表示基態時k節點的電壓相 角; (3.8)Nblcic;ksf線程塊中的全部線程計算結束得到節點電壓相角Θ#Ρ故障集S1,,供內核 函數2使用。5. 根據權利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(4) 中所述內核函數2為Kernel_2〈Nbl。 cks,Nthreads>,Kernel_2的線程塊大小N threads固定為128,線 S.Nblocks - ( Nbranches+Nthreads - 1 ) /Nthreads ; 1^11161_2〈他1。。1^,隊^3(^>使用1(61'1161_1的計算結果91和31,其具體計算方法為: (4.1 )CUDA自動為每個線程分配線程索引threadID作為線程的編號; (4.2) 將線程號賦值給變量tid,通過變量tid來指定線程; (4.3) 設第tid號線程計算第b條支路開斷時的各支路的有功功率并與限額比較; (4.4) 判斷線程號tid是否小于支路數Nbranc^s,小于繼續執行以下步驟,否則該線程結 束運算; (4.5) tid號線程中循環變量k從1到Nbranches循環,循環內部:a)第k條支路的首尾節點編 號df [k]和dt[k]分別賦值給變量i,j,即:i-df [k],j-dt[k] ;b)判斷Sl[b]不為2且k不等 于b繼續執行;否則循環結束。c)用下式計算第k條支路的有功功率,式中:P"b 為第b條支路開斷時第k條支路的有功功率,劣,是內核函數1計算支路開斷時的節點電 壓相角Θ:的第(i,b)和(j,b)元素,即第b條支路開斷時i,j節點電壓相角;并將結果與有功 功率限額比較,大于限額,置Sl[b]為1; (4.6) Nblcicks個線程塊中的全部線程計算結束,得到S1并傳回CPU處理。6. 根據權利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(5) 中所述內核函數3 為Kerne l_3〈Nbi〇cks,Nthreads〉, Kerne l_3〈Nblocks,Nthreads〉的線程塊大小Nthreads 固定為 1 28,線程塊數量Nblocks = ( Ngen+ Nthreads- 1 )/Nthreads ; 其中,Kerne l_3〈Nbi〇cks,Nthreads〉的具體計算方法為: (5.1 )CUDA自動為每個線程分配線程索引thread ID作為線程的編號; (5.2) 將線程號賦值給變量tid,通過變量tid來指定線程; (5.3) 第tid號線程計算第b臺發電機開斷時各節點電壓相角% ; (5.4) 判斷線程號變量tid的值是否小于發電機數仏?,小于繼續執行以下步驟,否則該 線程結束運算; (5.5) 將第tid臺發電機所連節點號賦值給變量j:j = dg(tid); (5.6) 循環變量k從1到N-1循環,計算第b臺發電機開斷時的節點電壓的相角向量: =(私),,其中,(?.)?表示j節點發電機開斷時k節點電壓相角,(0Q)k表示穩態時 k節點電壓相角; (5.7) Νμ。^個線程塊中的全部線程計算結束得到節點電壓相角02,供內核函數4使用。7. 根據權利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(6) 中所述內核函數4為Kerne l_4〈Nbi〇cks,Nthreads〉,Kerne 1_4的線程塊大小Nthreads固定為128,線 S.Nblocks - (Ngen+Nthreads_ 1 )/Nthreads ; 其中,Kerne l_4〈Nbi〇cks,Nthreads〉的具體計算方法為: (6.1 )CUDA自動為每個線程分配線程索引thread ID作為線程的編號; (6.2) 將線程號賦值給變量tid,通過變量tid來指定線程; (6.3) 設第tid號線程計算第b臺發電機開斷時的各支路的有功功率并與限額比較; (6.4) 判斷線程號tid是否小于發電機Ngen,小于繼續執行以下步驟,否則該線程結束運 算; (6.5) 第^(1號線程中循環變量1^從1到他_。^循環,循環內部:&)第1^條支路的首尾節點 編號df[k]和dt [k]分別賦值給變量i,j ; b)計算第k條支路的有功功率:? ., 式中:Ρ4為第b臺發電機開斷時第k條支路的有功功率,硿,<.是內核函數4計算發電 機開斷時的節點電壓相角θ2的第(i,b)和(j,b)元素,并將結果與限額比較,大于限額,置S2 [b]為 1; (6.6) Nblcicks個線程塊中的全部線程計算結束,得到S2并傳回CPU處理。
【文檔編號】G06F9/38GK105955712SQ201610265499
【公開日】2016年9月21日
【申請日】2016年4月26日
【發明人】周贛, 孫立成, 張旭, 柏瑞, 馮燕鈞, 秦成明
【申請人】東南大學