本发明涉及一种电力系统仿真处理方法。特别是涉及一种适用于电力系统暂态建模仿真应用的面向电力电子暂态仿真加速的图形处理器内存管理方法。
背景技术:
近年来,电力系统在实际运行中面临着可再生能源的大规模接入以及交直流互联电网运行规模不断增加的挑战,使用传统的电磁暂态仿真算法研究其复杂的暂态特性及运行控制问题时会在计算资源和计算速度方面受到限制。而基于元件详细动态特性建模的电力系统电磁暂态仿真因其能够准确刻画微秒级的系统快动态过程,正逐渐在新能源电力系统的分析、设计与运行等方面获得更加广泛的重视与应用。此外,电网规模持续扩大及仿真时间尺度不断延伸给电磁暂态仿真提出了新的挑战,需要结合问题特性在计算效率方面做出改进。
目前,提高暂态仿真的计算效率主要有两种思路:一是在仿真算法层面进行针对性的改进,二是利用硬件的并行特性对仿真程序进行加速,如多核cpu(centralprocessingunit,中央处理器)、fpga(fieldprogrammablegatearray,现场可编程门阵列)、gpu(graphicprocessunit,图形处理器)等。近年来,由于电力系统规模的不断增加,使得仅依靠改进仿真算法提升电磁暂态仿真算法的计算效率,可能较难得到理想的效果。随着科技水平和制造工艺的不断进步,各类硬件不论在并行资源的容量还是效率方面都有着飞跃地提升。因此,利用硬件的并行计算资源来提高电磁暂态仿真的计算效率是一种高效且有发展前景的解决方案。其中,fpga是可编程的集成数字电路板,由于电路天然的并行性,使得fpga在处理复杂的仿真计算时具有很强的灵活性,但是其使用硬件描述语言(verilog或vhdl)进行结构繁复的系统设计,通用性稍显不足。gpu,特别是gpgpu(generalpurposegpu,通用计算图形处理器),具有更多的计算单元,适用于计算维度更大但计算复杂度更小的计算场景,并且借助于c或python等更加成熟通用的编程语言,在cuda(computeunifieddevicearchitecture)等运算平台上进行计算结构的设计,能够理论上较传统方法取得近百倍的计算峰值。此外,随着gpu在多领域的广泛应用,促进了gpu相关技术的不断进步,同时期的gpu在性能上已经远超cpu,并且性能提升的速度日益增加,支持的运算也越来越复杂,可编程性和功能都得到了极大的扩展,在高性能计算领域展示了巨大的发展潜力,可以预见,gpu并行计算是高性能计算重要的发展方向之一。
cpu/gpu异构计算结构,主要是从计算速度和计算资源两方面来考虑。首先,根据cpu和gpu在计算特性上差异,设计程序将逻辑复杂且串行运行的计算部分分配到cpu上计算,将逻辑简单但是计算密度大的部分分配到gpu中处理,由此可以看出计算速度只要取决与计算任务的分配以及cpu和gpu不同计算任务之间的数据传输,其次在计算资源方面,gpu受制于结构,其计算资源远少于cpu,在cpu和gpu之间合理分配资源,能够有效地提高计算效率以及计算的维度。
基于指数积分的电磁暂态仿真方法具有良好的数值精度和稳定性。该方法是一种适合处理电磁暂态模型刚性特征的数值积分方法,通过矩阵指数算子的引入,克服了系统刚性对算法数值稳定性的影响,使得仿真过程可以采用较大的步长进行计算;同时,通过对系统的线性动态过程进行精确求解,避免了传统数值积分方法所遇到的局部截断误差问题,使算法具有很高的数值精度。此外,该方法尤其适于大规模高维非线性问题,且具有良好的数值性能,仿真计算速度得到明显提升。
不同于emtp类程序,指数积分方法主要基于状态分析框架,此时系统的仿真模型可以用以下的状态方程描述:
对于该非线性微分方程,一种典型的指数积分方法——指数欧拉法将其推导为如下形式:
其中指数欧拉公式在时间间隔[tn,tn+1]内,对式(2)中随时间变化的非线性部分g(t,x(t))近似处理为不变量g(tn,xn),并将
其中,
传统的电磁暂态程序主要是面向中小规模的电力系统仿真算例,当面对实际中更大规模的系统时,有限的计算资源便会成为电磁暂态仿真的掣肘。因此,进行大规模系统仿真时如何分配有限的计算资源是有重要意义的问题。最近最少使用(lru)算法,不同于传统的fifo(firstinfirstout)算法,这种算法本指选择近期最少被访问的数据作为被替换的数据。但由于实现比较困难,实际上是选择最久没有被访问的数据作为被替换的数据。依据局部性原理推论:最近刚用过的数据很可能就是马上要再用到的数据,则最久没有用过的数据就是最佳的被替换者。lru能较好利用了历史替换的信息,反映了程序的局部性,是目前缓存替换算法中综合性能最好、应用范围最广的算法。
当前,随着可再生能源的广泛接入和系统电力电子化的演变趋势,电力电子装置已被广泛地应用到电力系统中,如柔性交流输电技术(facts)、高压直流输电技术(hvdc)以及各种可再生能源的分布式发电系统。针对电力电子器件的仿真已经成为了现阶段电磁暂态仿真算法的核心问题之一,这不仅是传统积分算法面临的挑战,同时也对指数积分方法提出了更高要求。在仿真过程中,电力电子开关的快速变化使得系统状态频繁发生改变。对于指数积分算法,便需要在每次状态变化后重新生成状态矩阵,并对
技术实现要素:
本发明所要解决的技术问题是,提供一种能够提升暂态仿真效率的面向电力电子暂态仿真加速的图形处理器内存管理方法。
本发明所采用的技术方案是:一种面向电力电子暂态仿真加速的图形处理器内存管理方法,包括如下步骤:
1)在状态分析框架下,建立待仿真电力系统的暂态仿真模型,用如下的非线性微分方程组描述:
其中,x为电气系统和控制系统的状态变量,状态矩阵a表示系统微分方程中线性部分的系数,包括各状态量子模块及相互耦合关系,反映系统中用于求取状态变量x的相关信息,而g(t,x)则代表系统微分方程中的非线性部分,y是由状态变量x决定的输出量;
2)进行系统初始化,初始化对象包括:状态矩阵a、状态变量初值x0、仿真起始时刻t0、仿真时间t、仿真步长h和
3)根据暂态仿真模型中的状态矩阵a以及设定的仿真步长h,在主机端计算状态更新矩阵
4)将并行计算时用到的状态矩阵a、状态更新矩阵
5)更新最近最少使用算法的计数序列,采用最近最少使用算法,在图形处理器设备端分配给仿真程序的显存空间占满时,用新数据替换显存中的数据,并初始化对应于开关状态的最近最少使用算法的计数序列;
6)在图形处理器上利用并行计算资源,使用基于指数积分的电磁暂态仿真方法对电气系统进行求解,得出状态变量x以及开关状态向量s,并传回主机端;
7)通过开关状态向量s判断开关状态在本时步内是否改变,若不变则转至步骤11),否则继续下一步;
8)开关状态改变时计算tn时刻状态变量x的值;
9)根据开关状态向量s判断当前状态对应的状态更新矩阵
10)调用图形处理器设备端存储器中储存的对应于当前状态的矩阵数据,并转至步骤6);
11)由yn=f(tn,xn)得到tn时刻的输出向量并写入输出数据文件,更新当前时刻为下一时步tn=tn+h,仿真向前推进一个步长;
12)比较当前时刻tn与仿真时间t,判断是否已经抵达仿真结束时刻,若已经达到,则仿真结束;若未达到,则转到步骤6)。
步骤2)所述的计算待仿真电力系统中的状态更新矩阵
(1)根据待仿真电力系统中电力电子电路的规模大小,计算出状态更新矩阵的维度dimmexp,确定变流器台数n和每台变流器中的开关个数nsw;
(2)根据双精度数占内存大小以及状态更新矩阵
(3)根据状态更新矩阵
步骤5)所述的用新数据替换显存中的数据,包括:
(1)初始化最近最少使用算法的计数序列,所述计数序列的维度由分配给仿真程序的内存大小决定,并对对应于状态更新矩阵
(2)显存空间未占满时,依据最近最少使用算法对每次计算使用的状态更新矩阵
(3)显存空间占满时,删去最近最少使用算法的计数序列中计数最高的开关状态对应的状态更新矩阵
本发明的面向电力电子暂态仿真加速的图形处理器内存管理方法,着眼于有限计算资源情况与大规模电力系统电磁暂态仿真计算需求之间的矛盾。仿真过程中,多个电力电子开关的快速变化使得系统状态频繁发生改变,进而需要多次对状态更新矩阵
附图说明
图1是本发明面向电力电子暂态仿真加速的图形处理器内存管理方法的流程图;
图2是本发明实施例的永磁直驱风力发电系统仿真框图;
图3是lru算法示意图;
图4是lcl滤波器电压的仿真结果图;
图5是lcl滤波器电压的仿真结果的局部放大图;
图6是lcl滤波器电流的仿真结果图;
图7是lcl滤波器电流的仿真结果的局部放大图。
具体实施方式
下面结合实施例和附图对本发明的面向电力电子暂态仿真加速的图形处理器内存管理方法做出详细说明。
如图1所示,本发明的面向电力电子暂态仿真加速的图形处理器内存管理方法,包括如下步骤:
1)在状态分析框架下,建立待仿真电力系统的暂态仿真模型,用如下的非线性微分方程组描述:
其中,x为电气系统和控制系统的状态变量,状态矩阵a表示系统微分方程中线性部分的系数,包括各状态量子模块及相互耦合关系,反映系统中用于求取状态变量x的相关信息,而g(t,x)则代表系统微分方程中的非线性部分,y是由状态变量x决定的输出量;
对于本发明的实施例,x是包含当前时刻电气系统以及控制系统中各元件的状态向量,矩阵a是由lcl滤波器子模块,电机的子模块以及与风机的开关状态相关的子模块元素组成。
2)进行系统初始化,初始化对象包括:状态矩阵a、状态变量初值x0、仿真起始时刻t0、仿真时间t、仿真步长h和
所述的计算待仿真电力系统中的状态更新矩阵
(1)根据待仿真电力系统中电力电子电路的规模大小,计算出状态更新矩阵的维度dimmexp,确定变流器台数n和每台变流器中的开关个数nsw;
(2)根据双精度数占内存大小以及状态更新矩阵
(3)根据状态更新矩阵
3)根据暂态仿真模型中的状态矩阵a以及设定的仿真步长h,在主机端(cpu)计算状态更新矩阵
4)将并行计算时用到的状态矩阵a、状态更新矩阵
5)更新最近最少使用算法的计数序列,采用如图3所示的最近最少使用算法,在图形处理器设备端分配给仿真程序的显存空间占满时,用新数据替换显存中的数据,并初始化对应于开关状态的最近最少使用算法的计数序列;所述的用新数据替换显存中的数据,包括:
(1)初始化最近最少使用算法的计数序列,所述计数序列的维度由分配给仿真程序的内存大小决定,并对对应于状态更新矩阵
(2)显存空间未占满时,依据最近最少使用算法对每次计算使用的状态更新矩阵
(3)显存空间占满时,删去最近最少使用算法的计数序列中计数最高的开关状态对应的状态更新矩阵
6)在图形处理器上利用并行计算资源,使用基于指数积分的电磁暂态仿真方法对电气系统进行求解,得出状态变量x以及开关状态向量s,并传回主机端;
7)通过开关状态向量s判断开关状态在本时步内是否改变,若不变则转至步骤11),否则继续下一步;
8)开关状态改变时计算tn时刻状态变量x的值;
9)根据开关状态向量s判断当前状态对应的状态更新矩阵
10)调用图形处理器设备端存储器中储存的对应于当前状态的矩阵数据,并转至步骤6);
11)由yn=f(tn,xn)得到tn时刻的输出向量并写入输出数据文件,更新当前时刻为下一时步tn=tn+h,仿真向前推进一个步长;
12)比较当前时刻tn与仿真时间t,判断是否已经抵达仿真结束时刻,若已经达到,则仿真结束;若未达到,则转到步骤6)。
本发明实施例是将理想电源直接接入n(n分别为2、3、5、10)部永磁同步直驱风力发电系统,以此作为算例验证本章所提方法。直驱风力发电系统采用永磁同步电机,采用全功率双pwm变流器与电网相连作为并网结构,每台永磁同步电机包含6个电力电子开关。永磁直驱风力发电系统仿真框图如图2所示。在dq0坐标系下,永磁同步电机电压方程为:
磁链方程为:
电磁转矩方程为:
te=isqψsd-isdψsq
执行仿真计算的计算机硬件环境为inter(r)xeone5-2623v3中央处理器,内存容量32gb、teslak20c图形处理器,sm数为13,cuda核心数为2496,cuda核心频率为706mhz,全局储存器容量4.67gb;软件环境为linux14.04操作系统;使用cuda提供的面向稠密矩阵的cublas库函数和面向稀疏矩阵的cusparse库函数。
将本发明的面向电力电子暂态仿真加速的图形处理器内存管理方法与matlab版本的指数积分一般性串行方法进行对比。lcl滤波器电压电流的仿真结果及其局部放大图如图4~图7所示,其中实线为matlab仿真结果,虚线为使用内存管理方法的gpu程序仿真结果。从图中可以看出两者具有高度的一致性,说明本发明的方法可以有效地保证仿真精度。
表1给出了10s仿真时长中使用最近最少使用(lru)算法的仿真程序和不使用任何内存管理策略的仿真程序之间的对比,可以看出计算资源是限制大规模系统仿真的障碍之一,当对10台风机进行仿真时,需要在设备端给程序分配9570.31mb空间,已超过本例使用的图形处理器最大全局内存4782mb,导致程序退出,而使用lru算法,仅需在设备端预先分配500mb空间,仿真便能够完整进行。使用lru算法对仿真程序进行内存管理,如表2所示,分配内存越大,设备端能够存储越多的状态更新矩阵
表1无内存管理与lru算法内存和计算时间
表2状态更新矩阵