一种基于gpu加速的直流故障筛选方法

文档序号:10593824阅读:563来源:国知局
一种基于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日
【发明人】周赣, 孙立成, 张旭, 柏瑞, 冯燕钧, 秦成明
【申请人】东南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1