一種結(jié)合gpu軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法
【專利摘要】本發(fā)明公開了一種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法,包括:根據(jù)GPU的軟硬件參數(shù)對GPU的內(nèi)核函數(shù)的任務(wù)分配進(jìn)行優(yōu)化設(shè)計(jì):使用一個(gè)線程塊計(jì)算一個(gè)開斷;CPU讀取電網(wǎng)數(shù)據(jù),將所需的數(shù)據(jù)傳送給GPU;采用兩個(gè)CUDA流,使GPU在執(zhí)行內(nèi)核函數(shù)的同時(shí),實(shí)現(xiàn)支路開斷故障篩選與發(fā)電機(jī)開斷故障篩選的異步執(zhí)行;CUDA流1:GPU中的內(nèi)核函數(shù)1和內(nèi)核函數(shù)2篩選支路開斷故障集S1并回傳CPU中;CUDA流2:GPU中的內(nèi)核函數(shù)3和內(nèi)核函數(shù)4篩選發(fā)電機(jī)開斷故障集S2并回傳CPU中。本發(fā)明使用一個(gè)線程塊來計(jì)算一個(gè)開斷,所用的線程總數(shù)量增加,單個(gè)線程的計(jì)算量減少,充分利用了GPU的硬件資源和計(jì)算能力。
【專利說明】
-種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于電力系統(tǒng)高性能計(jì)算應(yīng)用領(lǐng)域,設(shè)及電力系統(tǒng)故障篩選,尤其設(shè)及一 種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法。
【背景技術(shù)】
[0002] GPU是一種眾核并行處理器,在處理單元的數(shù)量上要遠(yuǎn)遠(yuǎn)超過CPU。傳統(tǒng)上的GPU只 負(fù)責(zé)圖形擅染,而大部分的處理都交給了 CPU?,F(xiàn)在的GPU已經(jīng)法陣為一種多核,多線程,具 有強(qiáng)大計(jì)算能力和極高存儲器帶寬,可編程的處理器。在通用計(jì)算模型下,GPU作為CPU的協(xié) 處理器工作,通過任務(wù)合理分配分解完成高性能計(jì)算。目前GPU已經(jīng)成功應(yīng)用于醫(yī)學(xué)影像, 計(jì)算流體動力學(xué),環(huán)境科學(xué),石油勘測等領(lǐng)域。
[0003] 在電力系統(tǒng)中,直流潮流計(jì)算,交流潮流計(jì)算,暫態(tài)穩(wěn)定性分析,大型稀疏線性方 程組求解等都是比較耗時(shí)的部分。根據(jù)不同線性稀疏系統(tǒng)的特點(diǎn),對不同的解決方法提出 了基于GP時(shí)日速策略,例如,LU分解,共輛梯度算法,雅克比矩陣迭代,在運(yùn)些算法中可W達(dá) 到3到10倍的加速比。
[0004] N-I靜態(tài)安全性分析用來檢測電網(wǎng)中單一元件斷開時(shí)電網(wǎng)的靜態(tài)安全性。對于一 個(gè)具有N個(gè)元件的電力系統(tǒng),嚴(yán)格的安全分析需要N次交流潮流計(jì)算,運(yùn)是非常耗時(shí)的。在實(shí) 際應(yīng)用中,只有一部分嚴(yán)重的故障會威脅到電網(wǎng)的安全性,因此,先用直流潮流來篩選嚴(yán)重 的故障集,再用交流潮流來進(jìn)一步分析。目前廣泛使用N-I靜態(tài)安全性分析來檢測電網(wǎng)中單 一元件斷開時(shí)電網(wǎng)的靜態(tài)安全性。對于一個(gè)具有N個(gè)元件的電力系統(tǒng),在實(shí)際應(yīng)用中,用直 流潮流來篩選一部分可能會威脅到電網(wǎng)安全性的嚴(yán)重故障,CPU處理是比較耗時(shí)的。
【發(fā)明內(nèi)容】
[0005] 發(fā)明目的:針對現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種可W大幅度減少計(jì)算時(shí)間,為 在線靜態(tài)安全性分析提供了可能的一種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方 法。
[0006] 技術(shù)方案:本發(fā)明提出了一種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法。
[0007] 直流潮流:電力學(xué)名詞,指在給定電力系統(tǒng)網(wǎng)絡(luò)拓?fù)洹⒃?shù)和發(fā)電、負(fù)荷參量 條件下,計(jì)算有功功率、電壓相角在電力網(wǎng)中的分布。
[000引并行計(jì)算:相對于串行運(yùn)算,是一種一次可執(zhí)行多個(gè)指令的算法,目的是提高計(jì)算 速度,及通過擴(kuò)大問題求解規(guī)模,解決大型而復(fù)雜的計(jì)算問題。
[0009] GPU:圖形處理器(英語:Gra 地 ics Processing Unit,縮寫:GPU)。
[0010] 導(dǎo)納矩陣:W系統(tǒng)元件的等值導(dǎo)納為基礎(chǔ)所建立的、描述電力網(wǎng)絡(luò)各節(jié)點(diǎn)電壓和 注入電流之間關(guān)系的矩陣。
[0011] CUDA流:CUDA流表示一個(gè)GPU操作隊(duì)列,并且該隊(duì)列中的操作將W指定的順序執(zhí) 行,每個(gè)流視為GPU的一個(gè)任務(wù),而且運(yùn)些任務(wù)之間可W并行執(zhí)行。
[0012] 本發(fā)明一種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法,所述方法包括:
[0013] (I)根據(jù)GPU的軟硬件參數(shù)對GPU的內(nèi)核函數(shù)的任務(wù)分配進(jìn)行優(yōu)化設(shè)計(jì):使用一個(gè) 線程塊計(jì)算一個(gè)開斷;
[0014] (2) CPU讀取電網(wǎng)數(shù)據(jù),將所需的電網(wǎng)基礎(chǔ)數(shù)據(jù)傳送給GPU;
[0015] (3)采用兩個(gè)CUDA流,使GPU在執(zhí)行內(nèi)核函數(shù)的同時(shí),實(shí)現(xiàn)支路開斷故障篩選與發(fā) 電機(jī)開斷故障篩選的異步執(zhí)行。
[0016] (4) CUDA流1: GPU中的內(nèi)核函數(shù)1計(jì)算支路開斷時(shí)的節(jié)點(diǎn)電壓相角目1; GPU中的內(nèi)核 函數(shù)2計(jì)算支路開斷時(shí)各支路的有功功率并與有功功率限額比較,篩選出支路開斷故障集 Sl并回傳至CPU中;
[0017] (5) CUDA流2: GPU中的內(nèi)核函數(shù)3計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角目2; GPU中的內(nèi) 核函數(shù)4計(jì)算發(fā)電機(jī)開斷時(shí)各支路的有功功率并與有功功率限額比較,篩選出發(fā)電機(jī)開斷 故障集S2并回傳至CPU中。
[0018] 其中,所述步驟(1)中參與優(yōu)化設(shè)定的GPU的軟硬件參數(shù)包括:流處理器(SM)數(shù)量 Nsm;每個(gè)SM可調(diào)度管理的最大線程數(shù)量Sthread,每個(gè)SM可調(diào)度管理的最大線程塊數(shù)量Sblock。
[0019] 進(jìn)一步,所述步驟(2)中所述電網(wǎng)基本數(shù)據(jù)包括電網(wǎng)節(jié)點(diǎn)數(shù)N、支路數(shù)化ranches、每條 支路首尾所連節(jié)點(diǎn)編號壯[Nbranches巧日dt[Nbranches]、支路電抗矩陣X、支路有功功率限額Pb [化ranches]、發(fā)電機(jī)數(shù)量Ngen、發(fā)電機(jī)所連節(jié)點(diǎn)編號dg陽gen]、發(fā)電機(jī)所發(fā)有功功率Pg陽gen]、節(jié) 點(diǎn)電壓相角目〇、基態(tài)節(jié)點(diǎn)注入有功功率Po、節(jié)點(diǎn)電抗矩陣Xo。
[0020] 優(yōu)選的,所述步驟(4)中內(nèi)核函數(shù)1為1(6^61_1<化1。。1<3晶扣63<13〉,1(6則61_1的線程 塊大小Nthreads 一 Sl:hread/客block ? 線程塊數(shù)量化locks =化ranches,總線程數(shù)量為:化ranches X Nthreads ; Kernel_l的第b號線程計(jì)算第b條支路斷開時(shí)的電壓相角向量0l = 0o+A0,設(shè)第b條支路的首 尾節(jié)點(diǎn)編號分別為i、j,其中A 0 = C(目Oi-目0j)XL,式中:XL=[Xli-Xlj,…,Xni-Xnj]T,
A XU為斷開支路的電抗值,Xu為基態(tài)的電抗矩陣Xo的第(i,j)號元 素,0〇1為節(jié)點(diǎn)電壓相角00的第i號元素;
[0021] Kerne LKNbiocks ,Nthreads〉的具體計(jì)算方法為:
[0022] (l.l)CUDA自動為每個(gè)線程塊和線程分配線程索引blockID,threadID分別作為線 程塊和線程的編號;
[0023] (1.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0024] (1.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b條支路開斷時(shí)N個(gè)節(jié)點(diǎn)電壓的相角皆:, 即:t號線程計(jì)算t+m X Nthreads號節(jié)點(diǎn)電壓相角,其中m為Nthreads除WN的商;
[0025] (1.4)將第b條支路首尾節(jié)點(diǎn)編號分別賦值給變量i,j,即:i戶壯[b],j戶化[b];
[0026] a.5)用公式c = (Xii+?廣2XXリ-Axij)計(jì)算c,如果c為0,置Sl[b]為2,若不為0,c = l/c;
[0027] (1.6)判斷變量t的值是否小于電網(wǎng)節(jié)點(diǎn)數(shù)N,小于繼續(xù)執(zhí)行W下步驟,否則該線程 結(jié)束運(yùn)算;
[0028] (1.7)計(jì)算第b條支路開斷時(shí)的各節(jié)點(diǎn)電壓相角向量:
[0029]
[0030]其中,表示第b條支路開斷時(shí)第t節(jié)點(diǎn)的電壓相角,(0〇)t表示基態(tài)時(shí)t節(jié)點(diǎn)的 電壓相角;
[0031 ] (1.8)t^t+Nthreads,返回步驟 1.6;
[0032] (1.9)NbiDcks個(gè)線程塊中的全部線程計(jì)算結(jié)束得到節(jié)點(diǎn)電壓相角01和故障集SI,供 內(nèi)核函數(shù)2使用。
[0033] 進(jìn)一步,所述步驟(4)中所述內(nèi)核函數(shù)2為Ke;rnel_2<^Jbl。cks,Nthreads〉,Ke;rnel_2的 線程塊大小 Nthreads 二 S thread/Sb lock ,線程塊數(shù)重IMblocks 二 IMbranches ,總線程數(shù)重為:Nbranches X Nthreads;Kernel_2的第b號線程塊計(jì)算第b條支路斷開時(shí)各支路的有功功率并判斷b條支路 開斷是否屬于嚴(yán)重故障集;b號線程塊中的計(jì)算公式為
,式中:Pi/為第b條 支路開斷時(shí)首尾節(jié)點(diǎn)編號分別為i和j支路的有功功率,姆'),,(巧),是內(nèi)核函數(shù)1計(jì)算支路 開斷時(shí)的節(jié)點(diǎn)電壓相角的第(i,b)和(j,b)元素;
[0034] Kernel_2<化l。cks,Nt虹eads〉使用Kernel_l的計(jì)算結(jié)果目l和Sl,其具體計(jì)算方法為:
[0035] (2. DCUDA自動為每個(gè)線程塊和線程分配索引block ID,thread ID分別作為線程 塊和線程的編號;
[0036] (2.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0037] (2.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b條支路開斷時(shí)其余Nbranshes-I條支路的 有功功率,即:t號線程計(jì)算第t+m X Nthreads條支路的有功功率,其中m為N化。ads除WNbranches- 1的商;
[003引(2.4)判斷變量t的值是否小于支路數(shù)Nbranches,并判斷Sl[b]不為2且t不等于b,否 則該線程結(jié)束運(yùn)算;
[0039] (2.5)第t條支路的首尾節(jié)點(diǎn)編號df[t]和dt[t]分別賦值給變量i,j,即:i戶df
[t],j戶dt[t];
[0040] (2.6)計(jì)算第b條支路開斷時(shí)的第t條支路的有功功率:
[0041]
[0042] 其中,Pi/為第b條支路開斷時(shí)第t條支路的有功功率,腳),,傅、是內(nèi)核函數(shù)1計(jì) 算支路開斷時(shí)的節(jié)點(diǎn)電壓相角的第(i,b)和(j,b)元素,即第b條支路開斷時(shí)i,j節(jié)點(diǎn)電壓 相角;并將結(jié)果與有功功率限額比較,大于限額,置Sl[b]為1;
[0043 ] ( 2.7 ) t^t+Nthreads,返回步驟2.4 ;
[0044] (2.8)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束,得到Sl并傳回CPU處理。
[0045] 優(yōu)選的,所述步驟(5)中所述內(nèi)核函數(shù)3為Kernel_3<Nbi〇cks,Nthreads〉,
[0046] Kerne 1_3<化locks,Nthreads〉的線程塊大小Nthreads = Sthread/Sblock,線程塊數(shù)量化locks =Ngen,總線程數(shù)量為:Ngen X Nthreads ; Kerne 1_3的第b號線程塊計(jì)算第b臺發(fā)電機(jī)斷開時(shí)的節(jié) 點(diǎn)電壓相角目2 =目0+AM受第怡發(fā)電機(jī)所連接電網(wǎng)節(jié)點(diǎn)編號為j,其中(換'),二倘),-AC.V,,, 式中,表示第b臺發(fā)電機(jī)開斷時(shí)t節(jié)點(diǎn)電壓相角; 、 V '/
[0047]其中,Kerne l_3<Nbi〇cks,Nthreads〉的具體計(jì)算方法為:
[004引(3.1)0]〇4自動為每個(gè)線程塊和線程分配線程索引61〇〇410,*11'6曰(110分別作為線 程塊和線程的編號;
[0049] (3.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0050] (3.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b臺發(fā)電機(jī)開斷時(shí)N個(gè)節(jié)點(diǎn)電壓的相角 貨,即:t號線程計(jì)算t+m X NthreadS節(jié)點(diǎn)電壓相角,其中m為Nthreads除WN的商;
[0051] (3.4)將第b臺發(fā)電機(jī)所連接電網(wǎng)節(jié)點(diǎn)編號賦值j,即:化[b];
[0052] (3.5)判斷變量t的值是否小于電網(wǎng)節(jié)點(diǎn)數(shù)N,小于繼續(xù)執(zhí)行W下步驟,否則該線程 結(jié)束運(yùn)算;
[0053] (3.6)計(jì)算第b臺發(fā)電機(jī)開斷時(shí)的各節(jié)點(diǎn)電壓相角向量:
[0化4]
[0化5]其中,館)f表示第b臺發(fā)電機(jī)開斷時(shí)第t節(jié)點(diǎn)的電壓相角,(0〇)t表示基態(tài)時(shí)t節(jié)點(diǎn) 的電壓相角;
[0化6] ( 3.7 ) t^t+Nthreads,返回步驟3.6 ;
[0057] (3.8)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束得到節(jié)點(diǎn)電壓相角02和故障集S2,供 內(nèi)核函數(shù)4使用。
[0化引再者,所述步驟(5)中所述內(nèi)核函數(shù)4為Kerne 1_4<化locks,Nthreads〉,Kerne 1_4的線 程塊大小Nthreads 二 Sthread/SblDck ,線程塊數(shù)里IMblDcks 二 Ngen ,總線程數(shù)里為:Ngen X Nthreads ; Kernel_4的第b號線程塊計(jì)算第b臺發(fā)電機(jī)斷開時(shí)各支路的有功功率并判斷第b臺發(fā)電機(jī)開 斷是否屬于嚴(yán)重故障集。線程塊中的計(jì)算公式呆
,式中:Pi/為第b臺發(fā)電 機(jī)開斷時(shí)首尾節(jié)點(diǎn)編號分別為i和j支路的有功功率,(6作,(貨),是內(nèi)核函數(shù)3計(jì)算發(fā)電機(jī) 開斷時(shí)的節(jié)點(diǎn)電壓相角02的第(i,b)和(j,b)元素,并將結(jié)果與限額比較,大于限額,置S2 化]為1;
[0059] 其中,Kerne l_4<Nbi〇cks,Nthreads〉的具體計(jì)算方法為:
[0060] (4. DCUDA自動為每個(gè)線程塊和線程分配索引block ID,thread ID分別作為線程 塊和線程的編號;
[0061] (4.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0062] (4.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b臺發(fā)電機(jī)開斷時(shí)各支路的有功功率, 即:t號線程計(jì)算第t+m X Nthreads條支路的有功功率,其中m為Nthreads除Wrtranches商;
[0063] (4.4)判斷變量t的值是否小于支路數(shù)化ranches,否則該線程結(jié)束運(yùn)算;
[0064] (4.5)第t條支路的首尾節(jié)點(diǎn)編號df[t]和dt[t]分別賦值給變量i,j,即:i戶df
[t],j戶dt[t];
[0065] (4.6)計(jì)算第b臺發(fā)電機(jī)開斷時(shí)的第t條支路的有功功率:
[0066]
[0067]其中,Pi/為第b臺發(fā)電機(jī)開斷時(shí)第t條支路的有功功率,的I),,傅),是內(nèi)核函數(shù)3 計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角92的第Q,b)和(j,b)元素,即第b條發(fā)電機(jī)開斷時(shí)i,j節(jié) 點(diǎn)電壓相角;并將結(jié)果與有功功率限額比較,大于限額,置S2[b]為1;
[006引(4.7 ) t^t+Nthreads,返回步驟4.4 ;
[0069] (4.8)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束,得到S2并傳回CPU處理。
[0070] 優(yōu)選的,計(jì)算所述內(nèi)核函數(shù)1的計(jì)算公式
和內(nèi)核函數(shù)3的計(jì)算公式
時(shí),先將電抗矩陣X轉(zhuǎn)置形成矩陣xT,然后采用 公;
完成計(jì)算。GPU在計(jì)算內(nèi) 核函數(shù)1和內(nèi)核函數(shù)3中的計(jì)算公式時(shí),嚴(yán)格同步執(zhí)行的線程束中的32個(gè)線程訪問電抗矩陣 X的某一列中的32個(gè)元素,由于一列中元素的存儲地址不連續(xù),無法合并訪問。而將電抗矩 陣X轉(zhuǎn)置形成矩陣再進(jìn)行計(jì)算時(shí),線程束中的32個(gè)線程將訪問32個(gè)連續(xù)存儲矩陣行元 素,實(shí)現(xiàn)了高效的合并訪問。
[0071] 有益效果:與現(xiàn)有技術(shù)相比,本發(fā)明具有W下顯著優(yōu)點(diǎn):首先本發(fā)明結(jié)合GPU軟硬 件架構(gòu)特點(diǎn)設(shè)計(jì)對基于GPU加速的直流故障篩選進(jìn)行任務(wù)分配優(yōu)化,使用一個(gè)線程塊來計(jì) 算一個(gè)開斷,使所用的線程總數(shù)量增加,單個(gè)線程的計(jì)算量減少,充分利用了GPU的硬件資 源和計(jì)算能力;其次,根據(jù)GPU線程塊中線程W線程束為單位執(zhí)行及線程束訪問內(nèi)存的模式 特點(diǎn)來優(yōu)化合并訪問設(shè)計(jì),內(nèi)存操作速度提高了接近16倍;再者,對邏輯上相互獨(dú)立的支路 開斷和發(fā)電機(jī)開斷采用CUDA流技術(shù),使其異步執(zhí)行,充分利用了 GPU的硬件資源,使計(jì)算時(shí) 間減少了百分之四十左右。該優(yōu)化設(shè)計(jì)方法顯著提高了直流故障篩選方法的計(jì)算效率,解 決了電力系統(tǒng)靜態(tài)安全性分析中故障直流篩選耗時(shí)較大的問題。
【附圖說明】
[0072] 圖1為本發(fā)明結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選算法中電網(wǎng)算例基本 數(shù)據(jù);
[0073] 圖2為本發(fā)明結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選算法的內(nèi)核函數(shù)1算法 流程圖;
[0074] 圖3(a)為本發(fā)明結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選算法的未合并訪問 時(shí)的設(shè)計(jì)圖;
[0075] 圖3(b)為本發(fā)明結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選算法的合并訪問優(yōu) 化設(shè)計(jì)圖;
[0076] 圖4為本發(fā)明結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選算法的采用CUDA優(yōu)化 設(shè)計(jì)的算法流程圖;
[0077] 圖5為本發(fā)明結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選算法的測試結(jié)果。
【具體實(shí)施方式】
[0078] 本發(fā)明公開了一種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法,所述方法 包括:
[0079] (1)根據(jù)GPU的軟硬件參數(shù)對GPU的內(nèi)核函數(shù)的任務(wù)分配進(jìn)行優(yōu)化設(shè)計(jì):使用一個(gè) 線程塊計(jì)算一個(gè)開斷;
[0080] (2) CPU讀取電網(wǎng)數(shù)據(jù),將所需的電網(wǎng)基礎(chǔ)數(shù)據(jù)傳送給GPU;
[0081] (3)通過使用兩個(gè)CUDA流,使GPU在執(zhí)行內(nèi)核函數(shù)的同時(shí),能實(shí)現(xiàn)支路開斷與發(fā)電 機(jī)開斷的同步計(jì)算。
[0082] (4) CUDA流1: GPU中的內(nèi)核函數(shù)1計(jì)算支路開斷時(shí)的節(jié)點(diǎn)電壓相角01; GPU中的內(nèi)核 函數(shù)2計(jì)算支路開斷時(shí)各支路的有功功率并與有功功率限額比較,篩選出支路開斷故障集 Sl并回傳至CPU中;
[0083] (5) CUDA流2: GPU中的內(nèi)核函數(shù)3計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角02; GPU中的內(nèi) 核函數(shù)4計(jì)算發(fā)電機(jī)開斷時(shí)各支路的有功功率并與有功功率限額比較,篩選出發(fā)電機(jī)開斷 故障集S2并回傳至CPU中。
[0084] -、根據(jù)不同故障的特點(diǎn)對直流潮流算法進(jìn)行優(yōu)化;簡化直流潮流計(jì)算公式,避免 不必要的浮點(diǎn)計(jì)算量;
[0085] (1)直流潮流的計(jì)算公式為:
[0086] P = BnXn 目或者目=XnXnP (1)
[0087]
巧
[008引 其中,
[0089] n是電網(wǎng)節(jié)點(diǎn)個(gè)數(shù);
[0090] B是節(jié)點(diǎn)電納矩陣,n*n維矩陣;
[0091] P是節(jié)點(diǎn)有功注入功率,n維向量;
[0092] 0是節(jié)點(diǎn)電壓角度,n維向量;
[0093] 0i,0j是節(jié)點(diǎn)i和節(jié)點(diǎn)j電壓相角;
[0094] X = B-I是節(jié)點(diǎn)電抗矩陣,n*n維矩陣;
[0095 ] Xi j表示節(jié)點(diǎn)i和節(jié)點(diǎn)j之間的支路電抗矩陣值;
[0096] 在基態(tài)時(shí),直流潮流計(jì)算公式可W表示為:0〇 = X〇P〇。
[0097] 當(dāng)發(fā)生故障的時(shí),公式(1)可W表示為:
[009引 目 i = XiPi = (Xo+AX)(Po+AP) = 00+A0 (3)
[0099] AB=A XPo+Xo A P+ A X A P (4)
[0100] 其中,下標(biāo)0和I分別表示故障前狀態(tài)和故障后狀態(tài);A表示故障前到故障后的改 變;
[0101] 如果節(jié)點(diǎn)i和節(jié)點(diǎn)j之間增加一條支路,電抗矩陣的增量AX可W表示為:
[0102] (5)
[0103] 3增加支路的電抗值,如果是開斷支 路,A Xi功負(fù)值,Xi功基態(tài)的節(jié)點(diǎn)電抗矩陣的第(i,j)號元素 ,ei,ej為標(biāo)準(zhǔn)基。
[0104] (2)直流開斷的算法流程如下:
[0105] 1)在CPU上只計(jì)算一次電網(wǎng)基態(tài)下的節(jié)點(diǎn)電抗矩陣Xo。
[0106] 2)用式5計(jì)算支路開斷后的電抗矩陣增量AX。
[0107] 3)用式3和4計(jì)算節(jié)點(diǎn)電壓相角A 0和01,
[0108] 4)用式2計(jì)算各支路有功功率,并檢查支路是否過負(fù)荷。
[0109] 當(dāng)C的分母為加寸,說明節(jié)點(diǎn)i和j之間支路斷開會導(dǎo)致系統(tǒng)解列。
[0110] (3)根據(jù)支路開斷故障和發(fā)電機(jī)開斷故障的不同特點(diǎn)對直流潮流算法進(jìn)行優(yōu)化。 當(dāng)節(jié)點(diǎn)i和節(jié)點(diǎn)j之間的支路斷開時(shí),電網(wǎng)電抗矩陣發(fā)生變化,各節(jié)點(diǎn)注入功率增量為零,即 AP = 0。式4可W簡化為:
[0111] A0= AXPo = cXoMMTx〇P〇 = cXlMT 目 O = C(目 0 廣目 〇j)XL (6)
[01其中,XL = XoM=Xo(e 廣 ej) = [Xi 廣 Xij,...,Xn 廣 Xnj]T。
[0113] 當(dāng)連接于節(jié)點(diǎn)j的發(fā)電機(jī)斷開時(shí),電網(wǎng)電抗矩陣不變,即AX = O,節(jié)點(diǎn)注入功率增 量A P是稀疏向量,只有A Pj非零。式4可W簡化為:
[0114] AB=XoAP= APjXj (7)
[011引運(yùn)里,AP=[0…APj…0]T,Xj = [Xリ…Xnj]T,Xj為基態(tài)下的節(jié)點(diǎn)電抗矩陣Xo的第j 列元素,Xi功基態(tài)下的節(jié)點(diǎn)電抗矩陣Xo的第Q J)號元素 ,A P功連接于節(jié)點(diǎn)j的發(fā)電機(jī)的 有功功率。
[0116] 二、算法設(shè)計(jì):本算法將程序分為CPU和GPU兩個(gè)部分。
[0117] CPU讀取電網(wǎng)數(shù)據(jù),為GPU準(zhǔn)備基本數(shù)據(jù),處理GPU的計(jì)算結(jié)果,并控制整個(gè)程序的 流程。GPU主要處理密集的浮點(diǎn)運(yùn)算,共采用四個(gè)內(nèi)核函數(shù)來完成故障篩選功能。本發(fā)明程 序中,支路開斷和發(fā)電機(jī)開斷在邏輯上相互獨(dú)立,將內(nèi)核函數(shù)1和內(nèi)核函數(shù)2放入CUDA流1, 將內(nèi)核函數(shù)3和內(nèi)核函數(shù)4放入CUDA流帥,兩個(gè)CUDA流異步執(zhí)行。具體步驟為:1)創(chuàng)建兩個(gè) 流,Streaml和Streams; 2) Streaml中包括四步:CP昭IjGPU傳輸數(shù)據(jù),執(zhí)行內(nèi)核函數(shù)1,執(zhí)行內(nèi) 核函數(shù)2,GPU到CPU傳輸數(shù)據(jù);3) S化eaml中包括:CPU到GPU傳輸數(shù)據(jù),執(zhí)行內(nèi)核函數(shù)3,執(zhí)行 內(nèi)核函數(shù)4,GPU到CPU傳輸數(shù)據(jù)。程序流程見圖4所示。其中,內(nèi)核函數(shù)KerneLl計(jì)算支路開 斷時(shí)的節(jié)點(diǎn)電壓相角9i;內(nèi)核函數(shù)Kernel_2計(jì)算支路開斷時(shí)各支路的有功功率并與有功功 率限額比較,篩選出支路開斷故障集SI;內(nèi)核函數(shù)Kernel_3計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓 相角92;內(nèi)核函數(shù)Kernel_4計(jì)算發(fā)電機(jī)開斷時(shí)各支路的有功功率并與有功功率限額比較, 篩選出發(fā)電機(jī)開斷故障集S2,具體流程如圖4所示。
[011引 S、CPU生成基態(tài)下的節(jié)點(diǎn)電抗矩陣Xo,傳輸基礎(chǔ)數(shù)據(jù)
[0119] CPU讀取電網(wǎng)數(shù)據(jù),生成節(jié)點(diǎn)電納矩陣B,使用KLU庫函數(shù)計(jì)算其逆矩陣節(jié)點(diǎn)電抗矩 陣Xo。利用公式:0〇 = X〇P〇,計(jì)算基態(tài)電網(wǎng)各節(jié)點(diǎn)電壓相角00。將直流篩選所需的數(shù)據(jù)傳送給 GPU,具體包括:開斷所需的基礎(chǔ)數(shù)據(jù):電網(wǎng)節(jié)點(diǎn)數(shù)N,支路數(shù)Nbranches,每條支路首尾所連節(jié)點(diǎn) 編號壯陽branches巧日dt陽branches ],支路電抗矩陣X,支路有功功率限額Pb [化ranches ],發(fā)電機(jī)數(shù) 量Ngen,發(fā)電機(jī)所連節(jié)點(diǎn)編號dg[Ngen],發(fā)電機(jī)所發(fā)有功功率Pg[Ngen],節(jié)點(diǎn)電壓相角00、基態(tài) 節(jié)點(diǎn)注入有功功率Po、節(jié)點(diǎn)電抗矩陣Xo。
[0120] 四、根據(jù)所使用GPU的軟硬件參數(shù)對4個(gè)GPU內(nèi)核函數(shù)的任務(wù)分配進(jìn)行優(yōu)化設(shè)計(jì)
[0121] 所述GPU的軟硬件參數(shù)包括:流處理器(SM)數(shù)量Nsm;每個(gè)SM可調(diào)度管理的最大線程 數(shù)量Sthread,每個(gè)SM可調(diào)度管理的最大線程塊數(shù)量Sbiock。本發(fā)明使用使用Tesla K20C GPU進(jìn) 行優(yōu)化設(shè)計(jì),主要軟硬件參數(shù)包括:流處理器(SM)數(shù)量Nsm: 13;每個(gè)SM可調(diào)度管理管理的最 大線程數(shù)量Sthread : 2048 ;每個(gè)SM可調(diào)度管理的最大線程塊數(shù)量Sblock : 16。
[0122] 五、計(jì)算支路開斷時(shí)的節(jié)點(diǎn)電壓相角01
[0123] GPU可W利用眾多線程之間的自動轉(zhuǎn)換來掩藏內(nèi)存操作的時(shí)延。采用一個(gè)線程執(zhí) 行一個(gè)開斷時(shí),W圖1中的算例3為例,內(nèi)核函數(shù)1使用了 12027個(gè)線程,僅僅是K20C約一半的 計(jì)算能力。因此,本發(fā)明采用一個(gè)線程塊計(jì)算一個(gè)開斷,內(nèi)核函數(shù)1和2所使用的線程塊數(shù) 化locks設(shè)計(jì)成等于支路數(shù)Nbranches;內(nèi)核函數(shù)3和4所使用的線程塊數(shù)化locks設(shè)計(jì)成等于發(fā)電機(jī) 數(shù)Ngen ;線程塊大小Nthreads = 2048/16 = 1 28。
[01 24]內(nèi)核函數(shù) 1 為Kerne 1_1〈!^blocks , Nthreads〉,Kerne 1_1 的線程塊大小Nthreads 二 Sl;hread/ Sblock ,線程塊數(shù)里Nblocks 二 Nbranches ,總線程數(shù)里為:Nbranches X Nl;hreads ; Kerne 1_1 的束b虧線程 計(jì)算第b條支路斷開時(shí)的電壓相角向量01 = 00+A 0,設(shè)第b條支路的首尾節(jié)點(diǎn)編號分別為i、 占 .,其中么白=。(白〇廣白")乂1,式中:乂1=[乂11-)(山...,乂。廣乂。非
:,' A Xij為 斷開支路的電抗值,Xi功基態(tài)的電抗矩陣Xo的第Q,j)號元素,00功節(jié)點(diǎn)電壓相角00的第i 號元素;
[01 巧]Kerne 1_1〈blocks ,Nthreads〉的具體計(jì)算方法為:
[01 %] (1.1 )CUDA自動為每個(gè)線程塊和線程分配線程索引blockID,threadID分別作為線 程塊和線程的編號;
[0127] (1.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[012引(1.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b條支路開斷時(shí)N個(gè)節(jié)點(diǎn)電壓的相角0lb, 即:t號線程計(jì)算t+m X Nthreads號節(jié)點(diǎn)電壓相角,其中m為Nthreads除WN的商;
[0129] (1.4)將第6條支路首尾節(jié)點(diǎn)編號分別賦值給變量1〇',即:1^壯化]〇'^化化];
[0130] a.5)用公式c = (Xii+?廣2XXリ-Axij)計(jì)算c,如果c為0,置Sl[b]為2,若不為0,c = l/c;
[0131] (1.6)判斷變量t的值是否小于電網(wǎng)節(jié)點(diǎn)數(shù)N,小于繼續(xù)執(zhí)行W下步驟,否則該線程 結(jié)束運(yùn)算;
[0132] (1.7)計(jì)算第b條支路開斷時(shí)的各節(jié)點(diǎn)電壓相角向量:
[0133]
[0134] 其中,(皆\表示第b條支路開斷時(shí)第t節(jié)點(diǎn)的電壓相角,(0。)康示基態(tài)時(shí)t節(jié)點(diǎn)的 電壓相角;
[0135] 計(jì)算所述內(nèi)核函數(shù)1的計(jì)算公式 j,先將 電抗矩陣X轉(zhuǎn)置形成矩陣XT,然后采用公5 完成計(jì) 算。GPU在計(jì)算內(nèi)核函數(shù)1中的計(jì)算公式時(shí),嚴(yán)格同步執(zhí)行的線程束中的32個(gè)線程訪問電抗 矩陣X的某一列中的32個(gè)元素,由于一列中元素的存儲地址不連續(xù),無法合并訪問,如圖3 (a)所示。而將電抗矩陣X轉(zhuǎn)置形成矩陣xT,再進(jìn)行計(jì)算時(shí),線程束中的32個(gè)線程將訪問32個(gè) 連續(xù)存儲矩陣行元素,實(shí)現(xiàn)了高效的合并訪問,如圖3(b)所示。
[0136] ( 1.8 ) t^t+Nthreads,返回步驟 1.6 ;
[0137] (1.9)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束得到節(jié)點(diǎn)電壓相角01和故障集SI,供 內(nèi)核函數(shù)2使用,如圖2所示。
[0138] 六、計(jì)算支路開斷時(shí)各支路的有功功率并篩選出支路開斷故障集Sl
[0139] 內(nèi)核函數(shù) 2 為Kernel_2<化 locks,Nthreads〉,Kernel_2 的線程塊大小 Nthreads = Sthread/ Sblock ,線程塊數(shù)里Nblocks 二 Nbranches ,總線程數(shù)里為:Nbranches X Nl;hreads ; Kerne 1_2 白勺束b虧線程 塊計(jì)算第b條支路斷開時(shí)各支路的有功功率并判斷b條支路開斷是否屬于嚴(yán)重故障集;b號 線程塊中的計(jì)算公式天
式中:Pi/為第b條支路開斷時(shí)首尾節(jié)點(diǎn)編號分別 為i和j支路的有功功率,(皆),:,識巧,:是內(nèi)核函數(shù)1計(jì)算支路開斷時(shí)的節(jié)點(diǎn)電壓相角01的第 (i,b)和(j,b)元素;
[0140] Kernel_2<化l。cks,Nt虹eads〉使用Kernel_l的計(jì)算結(jié)果目l和Sl,其具體計(jì)算方法為:
[0141] (2.1)CUDA自動為每個(gè)線程塊和線程分配索引block ID,thread ID分別作為線程 塊和線程的編號;
[0142] (2.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0143] (2.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b條支路開斷時(shí)其余Nbranshes-I條支路的 有功功率,即:t號線程計(jì)算第t+m X Nthreads條支路的有功功率,其中m為Nthreads除WNbranches- 1的商;
[0144] (2.4)判斷變量t的值是否小于支路數(shù)Nbranthes,并判斷Sl[b]不為2且t不等于b,否 則該線程結(jié)束運(yùn)算;
[0145] (2.5)第t條支路的首尾節(jié)點(diǎn)編號df[t]和dt[t]分別賦值給變量i,j,即:i戶df
[t],j戶dt[t];
[0146] (2.6)計(jì)算第b條支路開斷時(shí)的第t條支路的有功功率:
[0147]
[014引其中,Pi/為第b條支路開斷時(shí)第t條支路的有功功率,(聲),,(《、是內(nèi)核函數(shù)1計(jì) 算支路開斷時(shí)的節(jié)點(diǎn)電壓相角的第(i,b)和(j,b)元素,即第b條支路開斷時(shí)i,j節(jié)點(diǎn)電壓 相角;并將結(jié)果與有功功率限額比較,大于限額,置Sl[b]為1;
[01 49 ] ( 2.7 ) t^t+Nthreads,返回步驟2.4 ;
[0150] (2.8)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束,得到Sl并傳回CPU處理。
[0151] 屯、計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓的相角02
[0152] 內(nèi)核函數(shù) 3 為 Kernel_3<rti〇cks,Nthreads〉,
[0153] Kerne 1_3<化locks,Nthreads〉的線程塊大小Nthreads = Sthread/Sblock,線程塊數(shù)量化locks = Ngen,總線程數(shù)量為:NgenXNthreads;Kernel_3的第b號線程塊計(jì)算第b臺發(fā)電機(jī)斷開時(shí)的節(jié) 點(diǎn)電壓相角92 = 00+A 0,設(shè)第b臺發(fā)電機(jī)所連接電網(wǎng)節(jié)點(diǎn)編號為j,其中
式中,(兮).表示第b臺發(fā)電機(jī)開斷時(shí)t節(jié)點(diǎn)電壓相角;
[0154]其中,Kerne l_3<Nbi〇cks,Nthreads〉的具體計(jì)算方法為:
[01 W] (3.1) CUDA自動為每個(gè)線程塊和線程分配線程索引blockID,threadID分別作為線 程塊和線程的編號;
[0156] (3.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0157] (3.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b臺發(fā)電機(jī)開斷時(shí)N個(gè)節(jié)點(diǎn)電壓的相角 《,即:t號線程計(jì)算t+m X NthreadS節(jié)點(diǎn)電壓相角,其中m為Nthreads除WN的商;
[015引(3.4)將第b臺發(fā)電機(jī)所連接電網(wǎng)節(jié)點(diǎn)編號賦值j,即:化[b];
[0159] (3.5)判斷變量t的值是否小于電網(wǎng)節(jié)點(diǎn)數(shù)N,小于繼續(xù)執(zhí)行W下步驟,否則該線程 結(jié)束運(yùn)算;
[0160] (3.6)計(jì)算第b臺發(fā)電機(jī)開斷時(shí)的各節(jié)點(diǎn)電壓相角向量:
[0161]
[0162] 其中,.(錢表示第b臺發(fā)電機(jī)開斷時(shí)第t節(jié)點(diǎn)的電壓相角,(0〇)t表示基態(tài)時(shí)t節(jié)點(diǎn) 的電壓相角;
[0163] 計(jì)算內(nèi)核函數(shù)3的計(jì)算公;
時(shí),先將電抗矩陣X轉(zhuǎn)置形成矩陣 X\然后采用公式
完成計(jì)算。GPU在計(jì)算內(nèi)核函數(shù)3中的計(jì)算公式時(shí),嚴(yán) 格同步執(zhí)行的線程束中的32個(gè)線程訪問電抗矩陣X的某一列中的32個(gè)元素,由于一列中元 素的存儲地址不連續(xù),無法合并訪問,如圖3(a)所示。而將電抗矩陣X轉(zhuǎn)置形成矩陣xT,再進(jìn) 行計(jì)算時(shí),線程束中的32個(gè)線程將訪問32個(gè)連續(xù)存儲矩陣行元素,實(shí)現(xiàn)了高效的合并訪問, 如圖3(b)所示。
[0164] ( 3.7 ) t^t+Nthreads,返回步驟3.6 ;
[0165] (3.8)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束得到節(jié)點(diǎn)電壓相角目2和故障集S2,供 內(nèi)核函數(shù)4使用。
[0166] 八、計(jì)算發(fā)電機(jī)開斷時(shí)各支路的有功功率并篩選發(fā)電機(jī)開斷故障集S2
[0167] 內(nèi)核函數(shù)4 為Kernel_4<化 locks,Nthreads〉,Kernel_4 的線程塊大小 Nthreads = Sthread/ Sblock,線程塊數(shù)量Nblocks = Ngen,總線程數(shù)量為:Ngen XNthreads ;Kernel_4的第b號線程塊計(jì)算 第b臺發(fā)電機(jī)斷開時(shí)各支路的有功功率并判斷第b臺發(fā)電機(jī)開斷是否屬于嚴(yán)重故障集。線程 塊中的計(jì)算公式夫
,式中為第b臺發(fā)電機(jī)開斷時(shí)首尾節(jié)點(diǎn)編號分別為 i和j支路的有功功率,咕'),,(雌),店內(nèi)核函數(shù)3計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角02的第 (i,b)和(j,b)元素,并將結(jié)果與限額比較,大于限額,置S2[b]為1;
[016引其中,Kerne l_4<Nbi0cks,Nthreads〉的具體計(jì)算方法為:
[0169] (4. DCUDA自動為每個(gè)線程塊和線程分配索引block ID,thread ID分別作為線程 塊和線程的編號;
[0170] (4.2)分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊 中的t號線程;
[0171] (4.3)b號線程塊中的Nthreads個(gè)線程計(jì)算第b臺發(fā)電機(jī)開斷時(shí)各支路的有功功率, 即:t號線程計(jì)算第t+m X Nthreads條支路的有功功率,其中m為Nthreads除Wrtranches商;
[0172] (4.4)判斷變量t的值是否小于支路數(shù)化ranches,否則該線程結(jié)束運(yùn)算;
[0173] (4.5)第t條支路的首尾節(jié)點(diǎn)編號df[t]和dt[t]分別賦值給變量i,j,即:i戶df
[t],j戶dt[t];
[0174] (4.6)計(jì)算第b臺發(fā)電機(jī)開斷時(shí)的第t條支路的有功功率:
[0175]
'
[0176] 其中,Pi/為第b臺發(fā)電機(jī)開斷時(shí)第t條支路的有功功率,(供),,(終),是內(nèi)核函數(shù)3 計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角92的第Q,b)和(j,b)元素,即第b條發(fā)電機(jī)開斷時(shí)i,j節(jié) 點(diǎn)電壓相角;并將結(jié)果與有功功率限額比較,大于限額,置S2[b]為1;
[01 77] ( 4.7 ) t^t+Nthreads,返回步驟4.4 ;
[0178] (4.8)化locks個(gè)線程塊中的全部線程計(jì)算結(jié)束,得到S2并傳回CPU處理。
[0179] 九、GPU將計(jì)算結(jié)果傳回CPU進(jìn)一步處理
[0180] GPU將內(nèi)核函數(shù)2和4計(jì)算出來的故障集Sl和S2傳回CPU。若Sl[b]為1,則第b條支路 斷開屬于故障集,若Sl[b]為2,則第b條支路斷開導(dǎo)致系統(tǒng)解列;若S2[b]為1,則第b臺發(fā)電 機(jī)斷開屬于故障集。
[0181] 本發(fā)明所使用的GPU計(jì)算平臺配備一張Tesla K20C GPU卡和Intel Xeon E5- 2620CPU,GPU的峰值帶寬可達(dá)208GB/S,單精度浮點(diǎn)計(jì)算量峰值可達(dá)3.52Tflops。在GPU計(jì)算 平臺上分別對3個(gè)電網(wǎng)實(shí)例進(jìn)行了測試,具體實(shí)例計(jì)算結(jié)果,如圖5所示。相對電網(wǎng)規(guī)模比較 小的算例,優(yōu)化所得到的加速比并不顯著,主要是因?yàn)镚PU的線程計(jì)算能力沒有得到充分地 利用。W算例3為例,沒有經(jīng)優(yōu)化之前加速比是4.94,經(jīng)過任務(wù)分配優(yōu)化之后,取得的加速比 是15.1,是優(yōu)化之前的3.05倍;經(jīng)過內(nèi)存合并訪問優(yōu)化之后,取得的加速比是27.6,是優(yōu)化 之前的5.40倍;經(jīng)過CUDA流優(yōu)化之后,取得的加速比是47.6,是優(yōu)化之前的9.64倍,也即是, 經(jīng)=步優(yōu)化之后,算例3的計(jì)算時(shí)間減少了 9倍之多。而且從3個(gè)算例取得的加速比可見,隨 著電網(wǎng)規(guī)模的擴(kuò)大,本發(fā)明的優(yōu)化設(shè)計(jì)所取得的效果更加顯著,計(jì)算速度大幅提高,可W實(shí) 現(xiàn)電力系統(tǒng)的在線靜態(tài)安全分析,很好地解決了電力系統(tǒng)靜態(tài)安全性分析中故障直流篩選 耗時(shí)較大的問題。
【主權(quán)項(xiàng)】
1. 一種結(jié)合GPU軟硬件架構(gòu)特點(diǎn)設(shè)計(jì)的直流故障篩選方法,其特征在于:所述方法包 括: (1) 根據(jù)GPU的軟硬件參數(shù)對GHJ的內(nèi)核函數(shù)的任務(wù)分配進(jìn)行優(yōu)化設(shè)計(jì):使用一個(gè)線程 塊計(jì)算一個(gè)開斷; (2) CRJ讀取電網(wǎng)數(shù)據(jù),將所需的電網(wǎng)基礎(chǔ)數(shù)據(jù)傳送給GRJ; (3) 采用兩個(gè)CUDA流,使GPU在執(zhí)行內(nèi)核函數(shù)的同時(shí),實(shí)現(xiàn)支路開斷故障篩選與發(fā)電機(jī) 開斷故障篩選的異步執(zhí)行; (4) CUDA流1:GPU中的內(nèi)核函數(shù)1計(jì)算支路開斷時(shí)的節(jié)點(diǎn)電壓相角01;GPU中的內(nèi)核函數(shù)2 計(jì)算支路開斷時(shí)各支路的有功功率并與有功功率限額比較,篩選出支路開斷故障集Sl并回 傳至CPU中; (5) CUDA流2: GPU中的內(nèi)核函數(shù)3計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角Θ2; GPU中的內(nèi)核函 數(shù)4計(jì)算發(fā)電機(jī)開斷時(shí)各支路的有功功率并與有功功率限額比較,篩選出發(fā)電機(jī)開斷故障 集S2并回傳至CPU中。2. 根據(jù)權(quán)利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(1) 中所述GPU的軟硬件參數(shù)包括:流處理器(SM)數(shù)量Nsm;每個(gè)SM可調(diào)度管理的最大線程數(shù)量 Sthread,每個(gè)SM可調(diào)度管理的最大線程塊數(shù)量Sbiock。3. 根據(jù)權(quán)利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(2) 中所述電網(wǎng)基本數(shù)據(jù)包括電網(wǎng)節(jié)點(diǎn)數(shù)N、支路數(shù)N branches、每條支路首尾所連節(jié)點(diǎn)編號df [Nbranches IiPdt [Nbranches ] , % ^ |?Pb [Nbranches ] ^ % l/lliSNgen ^ 發(fā)電機(jī)所連節(jié)點(diǎn)編號dg[Ngen]、發(fā)電機(jī)所發(fā)有功功率Pg[Ngen]、節(jié)點(diǎn)電壓相角θ〇、基態(tài)節(jié)點(diǎn)注 入有功功率Pq、節(jié)點(diǎn)電抗矩陣X0。4. 根據(jù)權(quán)利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(4) 中內(nèi)核函數(shù) 1 為Kerne 1_1〈Nblocks,Nthreads〉,Kerne 1_1 的線程塊大小Nthreads = Sthread/Sblock,線 程塊數(shù)量Nblocks =Nbranches,總線程數(shù)量為:Nbranches X Nthreads ; Kernel_l的第b號線程計(jì)算第b 條支路斷開時(shí)的電壓相角向量91 = 0〇+4 0,設(shè)第b條支路的首尾節(jié)點(diǎn)編號分別為i、j,其中△ Θ = C(9〇i-9()j) XL,式中:Xl = [Xli-Xlj,…,Xni-Xnj]Δ Xij為斷開支路 的電抗值,知為基態(tài)的電抗矩陣Xo的第(i,j)號元素,節(jié)點(diǎn)電壓相角θ〇的第i號元素; Kerne l_l〈Nbi〇cks,Nthreads> 的具體計(jì)算方法為: (1.1) CUDA自動為每個(gè)線程塊和線程分配線程索引bl〇ckID,threadID分別作為線程塊 和線程的編號; (1.2) 分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊中的 t號線程; (1.3) b號線程塊中的Nthre3ads個(gè)線程計(jì)算第b條支路開斷時(shí)N個(gè)節(jié)點(diǎn)電壓的相角0f,SP:t 號線程計(jì)算t+m X Nthreads號節(jié)點(diǎn)電壓相角,其中m為Nthreads除以N的商; (1.4) 將第b條支路首尾節(jié)點(diǎn)編號分別賦值給變量i,j,即:i-df [b],j-dt [b]; (1.5) 用公式〇 = 0#父『2\父『八叫)計(jì)算(;,如果(;為〇,置31[13]為2,若不為〇,。=1/ C; (1.6) 判斷變量t的值是否小于電網(wǎng)節(jié)點(diǎn)數(shù)N,小于繼續(xù)執(zhí)行以下步驟,否則該線程結(jié)束 運(yùn)算; (1.7) 計(jì)算第b條支路開斷時(shí)的各節(jié)點(diǎn)電壓相角向量:其中,PU表示第b條支路開斷時(shí)第t節(jié)點(diǎn)的電壓相角,(0Q)t表示基態(tài)時(shí)t節(jié)點(diǎn)的電壓相 角; (I .8)t -t+Nthreads,返回步驟 1.6; (1.9)Nblcic;ksf線程塊中的全部線程計(jì)算結(jié)束得到節(jié)點(diǎn)電壓相角Θ#Ρ故障集S1,供內(nèi)核 函數(shù)2使用。5.根據(jù)權(quán)利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(4) 中所述內(nèi)核函數(shù)2為Kerne l_2〈Nblocks,Nthreads〉,Kerne 1_2的線程塊大小Nthreads = Sthread/ Sblock,線程塊數(shù)量Nblocks = Nbranches,總線程數(shù)量為:Nbranches XNthreads ; Kerne 1_2 的第b號線程 塊計(jì)算第b條支路斷開時(shí)各支路的有功功率并判斷b條支路開斷是否屬于嚴(yán)重故障集;b號 線程塊中的計(jì)算公式,,式中=P1/為第b條支路開斷時(shí)首尾節(jié)點(diǎn)編號分別 為i和j支路的有功功率,(^i,(貧I是內(nèi)核函數(shù)1計(jì)算支路開斷時(shí)的節(jié)點(diǎn)電壓相角S1的第 (i,b)和(j,b)元素; 1^11161_2〈他1。。1^,隊(duì)^3(^>使用1(61'1161_1的計(jì)算結(jié)果91和31,其具體計(jì)算方法為: (2.1) ⑶DA自動為每個(gè)線程塊和線程分配索引block ID,thread ID分別作為線程塊和 線程的編號; (2.2) 分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊中的 t號線程; (2.3) b號線程塊中的Nthre3ads個(gè)線程計(jì)算第b條支路開斷時(shí)其余Nbranc^s-I條支路的有功 功率,即:t號線程計(jì)算第t+Ι? X Nthreads條支路的有功功率,其中Π 1為Nthreads除以Nbranches-I的 商; (2.4) 判斷變量t的值是否小于支路數(shù)Nbranc^s,并判斷Sl[b]不為2且t不等于b,否則該 線程結(jié)束運(yùn)算; (2.5) 第丨條支路的首尾節(jié)點(diǎn)編號(1打幻和扣[幻分別賦值給變量1,」,即:1-(1打幻,」- dt[t]; (2.6) 計(jì)算第b條支路開斷時(shí)的第t條支路的有功功率:其中,P1/為第b條支路開斷時(shí)第t條支路的有功功率,(Op (_)y是內(nèi)核函數(shù)1計(jì)算支 路開斷時(shí)的節(jié)點(diǎn)電壓相角S1的第(i,b)和(j,b)元素,即第b條支路開斷時(shí)i,j節(jié)點(diǎn)電壓相 角;并將結(jié)果與有功功率限額比較,大于限額,置Sl[b]為1; (2.7) t-t+Nthreads,返回步驟2.4; (2.8) Nblcicks個(gè)線程塊中的全部線程計(jì)算結(jié)束,得到Sl并傳回CPU處理。6. 根據(jù)權(quán)利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(5) 中所述內(nèi)核函數(shù)3 為Kerne l_3〈Nbi〇cks,Nthreads〉, ΚθΓΠΘ l_3〈Nblocks,Nthreads〉的線矛王塊大小Nthreads - Sthread/Sblock,線矛王塊數(shù)里Nblocks - Ngen, 總線程數(shù)量為:Ngen X Nthreads; Kernel_3的第b號線程塊計(jì)算第b臺發(fā)電機(jī)斷開時(shí)的節(jié)點(diǎn)電壓 相角Θ2 = θ〇+Λθ,設(shè)第b臺發(fā)電機(jī)所連接電網(wǎng)節(jié)點(diǎn)編號為j,其中的}=閥),-Δ/^,,,式中, 表示第b臺發(fā)電機(jī)開斷時(shí)t節(jié)點(diǎn)電壓相角; 其中,Kerne l_3〈Nbi〇cks,Nthreads〉的具體計(jì)算方法為: (3.1 )CUDA自動為每個(gè)線程塊和線程分配線程索引blockID,threadID分別作為線程塊 和線程的編號; (3.2) 分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊中的 t號線程; (3.3) b號線程塊中的Nthraads個(gè)線程計(jì)算第b臺發(fā)電機(jī)開斷時(shí)N個(gè)節(jié)點(diǎn)電壓的相角與,BP: t號線程計(jì)算t+m X Nthreads號節(jié)點(diǎn)電壓相角,其中m為Nthreads除以N的商; (3.4) 將第b臺發(fā)電機(jī)所連接電網(wǎng)節(jié)點(diǎn)編號賦值j,即:j-dt[b]; (3.5) 判斷變量t的值是否小于電網(wǎng)節(jié)點(diǎn)數(shù)N,小于繼續(xù)執(zhí)行以下步驟,否則該線程結(jié)束 運(yùn)算; (3.6) 計(jì)算第b臺發(fā)電機(jī)開斷時(shí)的各節(jié)點(diǎn)電壓相角向量:其中,表示第b臺發(fā)電機(jī)開斷時(shí)第t節(jié)點(diǎn)的電壓相角,(0Q)t表示基態(tài)時(shí)t節(jié)點(diǎn)的電壓 相角; (3.7) t-t+Nthreads,返回步驟3.6; (3.8) Νη〇^Α線程塊中的全部線程計(jì)算結(jié)束得到節(jié)點(diǎn)電壓相角02和故障集S2,供內(nèi)核 函數(shù)4使用。7. 根據(jù)權(quán)利要求1所述的基于GPU加速的直流故障篩選方法,其特征在于:所述步驟(5) 中所述內(nèi)核函數(shù)4為Kerne l_4〈Nblocks,Nthreads〉,Kerne 1_4的線程塊大小Nthreads = Sthread/ Sbiock,線程塊數(shù)量Nbicicks = Ngen,總線程數(shù)量為= NgenXNthreads ;Kernel_4的第b號線程塊計(jì)算 第b臺發(fā)電機(jī)斷開時(shí)各支路的有功功率并判斷第b臺發(fā)電機(jī)開斷是否屬于嚴(yán)重故障集。線程 塊中的計(jì)算公式戈?中=P1/為第b臺發(fā)電機(jī)開斷時(shí)首尾節(jié)點(diǎn)編號分別為 i和j支路的有功功率,(劣),.,(戌),是內(nèi)核函數(shù)3計(jì)算發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角θ2的第 (i,b)和(j,b)元素,并將結(jié)果與限額比較,大于限額,置S2[b]為1; 其中,Kerne l_4〈Nbi〇cks,Nthreads〉的具體計(jì)算方法為: (4.1) ⑶DA自動為每個(gè)線程塊和線程分配索引block ID ,thread ID分別作為線程塊和 線程的編號; (4.2) 分別將線程塊和線程的編號賦值給變量b,t,通過變量b,t來指定b號線程塊中的 t號線程; (4.3) b號線程塊中的Nthre3ads個(gè)線程計(jì)算第b臺發(fā)電機(jī)開斷時(shí)各支路的有功功率,即:t號 線程計(jì)算第t+Ι? X Nthreads條支路的有功功率,其中Π 1為Nthreads除以Nbranches商; (4.4) 判斷變量t的值是否小于支路數(shù)Nbranches,否則該線程結(jié)束運(yùn)算; (4.5) 第丨條支路的首尾節(jié)點(diǎn)編號(1打幻和扣[幻分別賦值給變量1,」,即:1-(1打幻,」- dt[t]; (4.6) 計(jì)算第b臺發(fā)電機(jī)開斷時(shí)的第t條支路的有功功率:其中,P1/為第b臺發(fā)電機(jī)開斷時(shí)第t條支路的有功功率,是內(nèi)核函數(shù)3計(jì)算 發(fā)電機(jī)開斷時(shí)的節(jié)點(diǎn)電壓相角92的第(i,b)和(j,b)元素,即第b條發(fā)電機(jī)開斷時(shí)i,j節(jié)點(diǎn)電 壓相角;并將結(jié)果與有功功率限額比較,大于限額,置S2[b]為1; (4.7) t -t+Nthreads,返回步驟4.4 ; (4.8) 他1??€(gè)線程塊中的全部線程計(jì)算結(jié)束,得到52并傳回0?1]處理。8 ·根據(jù)權(quán)利要求1所述的I不P τ 了如迪的吉、盜姑瞎總姓卡·、比甘特征在于:計(jì) 算所述內(nèi)核函數(shù)1的計(jì)算公式 和內(nèi)核函數(shù)3 的計(jì)算公式N先將電抗矩陣X轉(zhuǎn)置形成矩陣Xt,然后采用公式筆成計(jì)算。
【文檔編號】G06F19/00GK106021943SQ201610365460
【公開日】2016年10月12日
【申請日】2016年5月27日
【發(fā)明人】周贛, 孫立成, 張旭, 柏瑞, 馮燕鈞, 秦成明, 傅萌
【申請人】東南大學(xué)