一种栅元少群参数计算模块程序的优化方法、系统、终端转让专利

申请号 : CN202110160576.4

文献号 : CN112783511B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨昊毛波何琴何金徽

申请人 : 成都信息工程大学

摘要 :

本发明属于热中子反应堆数据处理技术领域,公开了一种栅元少群参数计算模块程序的优化方法、系统、终端,编译级优化,调整程序的编译选项,并使用英特尔编译器提供的优化选项‑自动向量化对程序进行优化。串行程序优化,使程序选用尽量小的数据类型,并使程序中的结构体对齐,尽量大数据类型在前,小数据类型在后,以更好地满足处理器的对齐要求。使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化。本发明在栅元少群参数计算模块程序优化的应用中,极大的提升了程序的计算效率。针对千万网格规模算例,可以实现多节点的40核,80核和120核的并行计算,且并行效率都不低于50%。

权利要求 :

1.一种基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,应用于信息数据处理终端,所述基于MPI的栅元少群参数计算模块程序的优化方法包括:编译级优化,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;

串行程序优化,面向程序代码本身,根据C/C++语言的运行机制,对代码中的循环,以及结构体的构造进行优化;

使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化;

所述编译级优化具体包括:

步骤1:编译选项优化,系统编译器提供了‑O变量来控制编译优化;使用优化选项以牺牲程序的编译时间和程序的调试能力为代价,优化程序的性能;使用”‑O2‑g”的编译选项进行编译;“‑g”表示使编译器生成调试信息,“‑O2”表示尝试更多的寄存器级的优化以及指令级的优化;

步骤2:编译器优化,对程序的热点函数的循环计算中的内部循环使用编译器提供的自动向量化,在循环前使用#pragmavectorunaligned编译指令指示编译器进行向量化时使用不对齐的数据读写方式;

所述串行程序优化具体包括:第一步:在程序中选用尽量小的数据类型,防止内存的浪费;同时对程序中访问次数多的结构体变量,采用大数据类型在前,小数据类型在后的声明方式,满足处理器的对齐要求;

第二步:对程序的热点函数的循环部分进行串行优化;

所述使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化包括:

第1步:对初始化结块数函数进行MPI任务划分,初始化结块数函数并行后,各个进程会根据新的结块数分配微观截面变量;

第2步:对读取栅元库数据函数进行基于MPI的并行划分,实现多进程并行读取数据;

第3步:第2步并行划分后,对截面计算部分进行MPI并行划分;

所述第2步具体包括:使用拆分变量的方式,拆分读入数据到内存变量中,然后为各个进程定位至该进程读取栅元库的相应位置,最后使各个进程进行数据读取,各个进程会各自读取各自的栅元库数据,为后续的并行截面计算打下基础;

所述第3步具体包括:首先新增函数参数表示划分后各个进程需要的结块数,然后使循环中的的细微循环计算部分仅由主进程完成,使得微小数据不再进行MPI通信,避免冗余数据的传输开销;对关键循环计算实现新划分数据的MPI并行计算,同时增加参数用于细小参数的正确定位,最后使用点对点的非阻塞通信的方式将各个进程的计算结果汇总到主进程。

2.如权利要求1所述的基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,所述第二步具体包括:对程序的热点函数内的小循环且内部没有判断的进行展开,减少每次的判断数量和循环变量的计算次数,增加处理器的流水线性能;对热点函数内的多个之间没有依赖的小循环合并,增加乱序执行能力。

3.一种基于MPI的栅元少群参数计算模块程序的优化系统,其特征在于,所述基于MPI的栅元少群参数计算模块程序的优化系统包括:编译级优化模块,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;

串行程序优化模块,面向程序代码本身,根据C/C++语言的运行机制,对代码中的循环,以及结构体的构造进行优化;

并行优化模块,用于使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化;

所述编译级优化具体包括:

步骤1:编译选项优化,系统编译器提供了‑O变量来控制编译优化;使用优化选项以牺牲程序的编译时间和程序的调试能力为代价,优化程序的性能;使用”‑O2‑g”的编译选项进行编译;“‑g”表示使编译器生成调试信息,“‑O2”表示尝试更多的寄存器级的优化以及指令级的优化;

步骤2:编译器优化,对程序的热点函数的循环计算中的内部循环使用编译器提供的自动向量化,在循环前使用#pragmavectorunaligned编译指令指示编译器进行向量化时使用不对齐的数据读写方式;

所述串行程序优化具体包括:第一步:在程序中选用尽量小的数据类型,防止内存的浪费;同时对程序中访问次数多的结构体变量,采用大数据类型在前,小数据类型在后的声明方式,满足处理器的对齐要求;

第二步:对程序的热点函数的循环部分进行串行优化;

所述使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化包括:

第1步:对初始化结块数函数进行MPI任务划分,初始化结块数函数并行后,各个进程会根据新的结块数分配微观截面变量;

第2步:对读取栅元库数据函数进行基于MPI的并行划分,实现多进程并行读取数据;

第3步:第2步并行划分后,对截面计算部分进行MPI并行划分;

所述第2步具体包括:使用拆分变量的方式,拆分读入数据到内存变量中,然后为各个进程定位至该进程读取栅元库的相应位置,最后使各个进程进行数据读取,各个进程会各自读取各自的栅元库数据,为后续的并行截面计算打下基础;

所述第3步具体包括:首先新增函数参数表示划分后各个进程需要的结块数,然后使循环中的的细微循环计算部分仅由主进程完成,使得微小数据不再进行MPI通信,避免冗余数据的传输开销;对关键循环计算实现新划分数据的MPI并行计算,同时增加参数用于细小参数的正确定位,最后使用点对点的非阻塞通信的方式将各个进程的计算结果汇总到主进程。

4.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1~

2任意一项所述的基于MPI的栅元少群参数计算模块程序的优化方法。

5.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行权利要求1~2任意一项所述的基于MPI的栅元少群参数计算模块程序的优化方法。

6.一种信息数据处理终端,所述信息数据处理终端用于实现权利要求1~2任意一项所述的基于MPI的栅元少群参数计算模块程序的优化方法。

说明书 :

一种栅元少群参数计算模块程序的优化方法、系统、终端

技术领域

[0001] 本发明属于热中子反应堆数据处理技术领域,尤其涉及一种栅元少群参数计算模块程序的优化方法、系统、终端,具体涉及一种基于MPI的栅元少群参数计算模块程序的优化方法。

背景技术

[0002] 目前,栅元计算程序的优化,一般先从硬件入手,提升CPU的运算性能,并检查硬件设置,优化程序的内存访问。然后从运行环境上调整,通过监控整个系统的性能及各项指标看问题所在,然后看能不能通过一些运行参数的调整,降低系统消耗。最后是编译器级调优,使用编译器的优化选项或者引入自动向量化的方式对程序进行优化。综合来讲,现有的技术方案分为四个步骤层次,首先是硬件级的优化,使用性能更高的计算机硬件来运行程
序;然后是运行级优化,从运行环境上调整,通过一些运行参数的调整,提升程序的运行性能;其次是编译器级优化,通过使用编译器提供的优化选项或引入自动向量化编译指令,深度优化,性能剖析指导的优化(PGO)等方式获得程序的性能提高;最后是引入OpenMP进行线程级并行优化,充分利用多核的处理性能,提升程序的运行性能。
[0003] 通过上述分析,现有技术存在的问题及缺陷为:
[0004] (1)对于热中子反应堆物理计算中的栅元少群参数计算模块程序的优化,可以先从硬件下手,简单粗暴直接换掉性能低的硬件,比如网卡从千兆换到万兆的,硬盘从机械的换成SSD等等。优化硬件设备一直是最快速有效的手段,但也是经济成本花费最高的手段。
在万不得已的情况下,一般不会采用此技术手段。
[0005] (2)使用编译器的优化选项,有时候也能获得巨大的性能提高。该方法如果栅元少群参数计算模块程序的网格算例规模不大,且对程序性能的提升要求不高时,还是会产生
一些相应的效果。但是在计算千万网格规模的算例时,如何优化栅元少群参数计算模块程
序,使其能够在高性能集群上运行性能效果显著提升,是一个较为困难的问题。这也是该方法的缺陷所在,即程序优化的性能提升效果容易存在瓶颈。
[0006] (3)引入OpenMP进行线程级别的并行化,充分利用多核,多线程的并行处理能力。但是本发明在使用这种技术的时候,尤其要防止数据竞争,死锁,饿死,内存伪共享等问题。
所谓数据竞争就是在多个线程访问相同数据时,由于同步等原因,需要让步等待其他线程
访问结束,导致性能降低。所谓伪共享,是多个线程读写数据映射在一个cache线上时,如果一个线程更改了数据,那么其他线程对该数据的缓存就失效,如果线程频繁的更改数据,硬件就需要不停的更新cache线,这使得性能从独享cache降低到共享cache或者内存的水平。
同时,当问题规模超过单节点处理能力时,会达到性能提升的瓶颈,无法充分利用多节点多核的处理性能。
[0007] (4)现有技术方案在当程序计算千万网格规模算例规时,程序运行的性能提升效果不显著,无法达到规定的性能提升要求。不仅实现成本偏高,而且对技术人员要求很高,需要对整个系统非常熟且十分熟悉编译的使用,优化过程的理解。对集群多处理机的运行
环境来说,性能提升效果有限,往往无法满足实际生产的要求。
[0008] 解决以上问题及缺陷的难度为:
[0009] 如何使优化后的程序能够在计算千万网格规模算例,获得显著的性能提升,是需要着重考虑的一个问题。此时问题规模已超过单节点的处理能力,要使程序能在多节点多
核的环境下运行,现有的技术方法无法实现,只能使用MPI技术实现节点间的通信。随之而来就会出现一个新的问题,即数据通信的开销会影响到程序的运行性能。如何选取最优的
数据划分方式,尽可能的降低通信的时间开销,是一个比较难的问题。
[0010] 解决以上问题及缺陷的意义为:
[0011] 能够在尽可能的节约经济成本的前提下,实现栅元少群参数计算模块程序在多节点多核的运行环境下,对千万网格规模算例的高效并行计算,满足实际生产应用的需求。

发明内容

[0012] 针对现有技术存在的问题,本发明提供了一种栅元少群参数计算模块程序的优化方法、系统、终端。
[0013] 本发明是这样实现的,一种基于MPI的栅元少群参数计算模块程序的优化方法,应用于信息数据处理终端,所述基于MPI的栅元少群参数计算模块程序的优化方法包括:
[0014] 编译级优化,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;
[0015] 串行程序优化,面向程序代码本身,根据C/C++语言的运行机制,使用合理的实现方式。主要针对代码中的循环,以及结构体的构造进行优化;
[0016] 使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化。
[0017] 进一步,所述编译级优化具体包括:
[0018] 步骤1:编译选项优化,系统编译器提供了‑O变量来控制编译优化。使用优化选项以牺牲程序的编译时间和程序的可调试能力为代价,优化程序的性能。这里本发明使用”‑O2‑g”的编译选项进行编译;“‑g”表示使编译器生成调试信息,“‑02”表示尝试更多的寄存器级的优化以及指令级的优化;
[0019] 步骤2:编译器优化,对程序的热点函数的循环计算中的内部循环使用编译器提供的自动向量化,在循环前使用#pragma vector unaligned编译指令指示编译器进行向量化
时使用不对齐的数据读写方式。
[0020] 进一步,所述串行程序优化具体包括:第一步:在程序中选用尽量小的数据类型,防止内存的浪费。同时针对程序中访问次数较多的结构体变量,尽量采用大数据类型在前,小数据类型在后的声明方式,一方面这样可以节省一些空间,另一方面可以更好地满足处理器的对齐要求。
[0021] 第二步:对程序的热点函数的循环部分进行串行优化。
[0022] 进一步,所述第二步具体包括:对程序的热点函数内的小循环且内部没有判断的进行展开,以减少每次的判断数量和循环变量的计算次数,增加处理器的流水线性能。对热点函数内的多个之间没有依赖的小循环合并,增加乱序执行能力。
[0023] 进一步,所述使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化包括:
[0024] 第1步:对初始化结块数函数进行MPI任务划分,初始化结块数函数并行后,各个进程会根据新的结块数分配微观截面变量;
[0025] 第2步:对读取栅元库数据函数进行基于MPI的并行划分,实现多进程并行读取数据;
[0026] 第3步:第2步并行划分后,对截面计算部分进行MPI并行划分。
[0027] 进一步,所述第2步具体包括:使用拆分变量的方式,拆分读入数据到内存变量中,然后为各个进程定位至该进程读取栅元库的相应位置,最后使各个进程进行数据读取,各个进程会各自读取各自的栅元库数据,为后续的并行截面计算打下基础。
[0028] 所述第3步具体包括:首先新增函数参数表示划分后各个进程需要的结块数,然后使循环中的的细微循环计算部分仅由主进程完成,使得微小数据不再进行MPI通信,避免冗余数据的传输开销;对关键循环计算实现新划分数据的MPI并行计算,同时增加参数用于细小参数的正确定位,最后使用点对点的非阻塞通信的方式将各个进程的计算结果汇总到主
进程。
[0029] 本发明的另一目的在于提供一种基于MPI的栅元少群参数计算模块程序的优化系统,包括:
[0030] 编译级优化模块,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;
[0031] 串行程序优化模块,面向程序代码本身,根据C/C++语言的运行机制,使用合理的实现方式。主要针对代码中的循环,以及结构体的构造进行优化;
[0032] 并行优化模块,用于使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化。
[0033] 本发明的另一目的在于提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:
[0034] 编译级优化,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;
[0035] 串行程序优化,面向程序代码本身,根据C/C++语言的运行机制,使用合理的实现方式。主要针对代码中的循环,以及结构体的构造进行优化;
[0036] 使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化。
[0037] 本发明的另一目的在于提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行所述的基于MPI的栅元少群参数计算模
块程序的优化方法。
[0038] 本发明的另一目的在于提供一种信息数据处理终端,所述信息数据处理终端用于实现所述的基于MPI的栅元少群参数计算模块程序的优化方法。
[0039] 结合上述的所有技术方案,本发明所具备的优点及积极效果为:
[0040] 本发明在栅元少群参数计算模块程序优化的应用中,极大的提升了程序的计算效率。在2节点40核大规模算例测试并行情况下,程序的加速比达到了20。在单节点20核大规模算例测试并行情况下,程序的加速比超过了30。并且针对千万网格规模算例,可以实现多节点的40核,80核和120核的并行计算,且并行效率都不低于50%。
[0041] 对比的技术效果或者实验效果包括:
[0042] 20核加速性能表
[0043]
[0044] 40核加速性能表
[0045]

附图说明

[0046] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图做简单的介绍,显而易见地,下面所描述的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下还可以根据这些附图获得其他的
附图。
[0047] 图1是本发明实施例提供的基于MPI的栅元少群参数计算模块程序的优化方法。
[0048] 图2是本发明实施例提供的基于MPI的并行程序的框架结构图。
[0049] 图3是本发明实施例提供的MPI非阻塞通信的示意图。
[0050] 图4是本发明实施例提供的栅元计算模块的串行整体计算流程图。
[0051] 图5是本发明实施例提供的对模块进行依赖分析,并行优化后的计算逻辑结构如下所示,新增的数字编号0到n‑1表示运行的进程号图。
[0052] 图6是本发明实施例提供的对栅元计算模块中的截面计算,并行划分后的计算示意图。
[0053] 图7是本发明实施例提供的在截面计算之前,程序需要从栅元库读取数据,该过程也进行了并行划分示意图。

具体实施方式

[0054] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0055] 针对现有技术存在的问题,本发明提供了一种栅元少群参数计算模块程序的优化方法、系统、终端、介质,下面结合附图对本发明作详细的描述。
[0056] 如图1所示,基于MPI的栅元少群参数计算模块程序的优化方法包括:
[0057] S101,编译级优化,调整程序的编译选项,并使用英特尔编译器提供的优化选项‑自动向量化对程序进行优化。
[0058] S102,串行程序优化,使程序选用尽量小的数据类型,并使程序中的结构体对齐,尽量大数据类型在前,小数据类型在后,以更好地满足处理器的对齐要求。
[0059] S103,使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化,该模块的并行化包括三个部分,分别是初始化结块数,读取栅元库数据以及截面计算。
[0060] 步骤S101具体内容如下:
[0061] 步骤1.1:编译选项优化,使用”‑O2‑g”的编译选项进行编译。“‑g”表示使编译器生成调试信息,“‑02”表示尝试更多的寄存器级的优化以及指令级的优化。
[0062] 步骤1.2:编译器优化,对程序的热点函数的循环计算中的内部循环使用英特尔编译器提供的自动向量化功能,在循环前使用#pragma vector unaligned编译指令指示编译
器进行向量化时使用不对齐的数据读写方式。
[0063] 步骤2:串行程序优化,使程序选用尽量小的数据类型,并使程序中的结构体对齐,尽量大数据类型在前,小数据类型在后,以更好地满足处理器的对齐要求。
[0064] 步骤S103包括:
[0065] 步骤3.1:对初始化结块数函数进行MPI任务划分,使其能够根据新的结块数分配微观截面变量。
[0066] 步骤3.2:对读取栅元库数据函数进行基于MPI的变量拆分,具体操作为拆分读入数据到内存变量中,然后为各个进程定位至该进程读取栅元库的相应位置,最后使各个进
程进行数据读取。
[0067] 步骤3.3:在上述步骤的基础上,对截面计算部分进行MPI并行划分,首先新增函数参数表示划分后各个进程需要的结块数,然后使细微循环的计算部分仅由主进程完成,使得微小数据不再进行MPI通信,避免冗余数据的传输开销。对关键循环计算实现新划分数据的MPI并行计算,最后使用点对点的非阻塞通信的方式将各个进程的计算结果汇总到主进
程。
[0068] 本发明提供一种基于MPI的栅元少群参数计算模块程序的优化系统,包括:
[0069] 编译级优化模块,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;
[0070] 串行程序优化模块,面向程序代码本身,根据C/C++语言的运行机制,使用合理的实现方式。主要针对代码中的循环,以及结构体的构造进行优化;
[0071] 并行优化模块,用于使用MPI技术对程序的热点模块‑栅元计算模块进行并行优化。
[0072] 下面结合具体实施例对本发明的技术方案作进一步描述。
[0073] 实施例
[0074] MPI全称是message passing interface,即信息传递接口,是用于跨节点通讯的基础软件环境。一个MPI程序包含若干个进程。每个mpi进程都运行一份相同的代码,进程的行为由通讯域和该通讯域下的进程id所决定。基于MPI的并行程序的框架结构图如图2所
示。MPI是一种基于信息传递的并行编程技术。消息传递接口是一种编程接口标准,而不是一种具体的编程语言。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。
[0075] 非阻塞通信是使MPI应用程序实现高性能计算的关键,使用MPI非阻塞通信可以避免处理机计算资源的浪费,实现计算与通信重叠。使用MPI非阻塞通信一个通用的原则就
是:尽早开始通信,尽晚完成通信。在开始通信和完成通信之间进行计算,这样可能有更多的计算任务可以和通信重叠,也使得通信可以在计算任务执行期间完成,而不需要专门的
等待时间,从而实现程序并行计算的效率最大化。MPI非阻塞通信的示意图如图3所示。由于MPI通信经常需要较长的时间,在阻塞通信还没有结束的时候,处理机只能等待,这样就浪费了处理机的计算资源。非阻塞通信主要用于计算和通信的重叠,从而提高整个程序的执
行效率。
[0076] 栅元计算模块的串行整体计算流程如图4所示。原始程序串行版本利用for循环主次遍历材料编号,然后调用函数初始化结块数。初始化后截面计算模块开始计算截面,最后调用函数输出计算结果。
[0077] 对模块进行依赖分析,并行优化后的计算逻辑结构如下所示,新增的数字编号0到n‑1表示运行的进程号。如图5所示。并行后结块初始化函数会根据每个进程新的结块数分配给微观截面变量,然后由多个进程并行进行截面计算,最后结果输出函数汇总各个进程
计算的数据,主进程汇总中间计算数据。
[0078] 针对栅元计算模块中的截面计算,并行划分后的计算示意图如图6,数字编号0到n‑1表示运行的进程号。循环中的的细微循环计算部分仅由主进程完成,使得微小数据不再进行MPI通信,避免冗余数据的传输开销;对关键循环计算部分实现新划分数据的MPI并行
计算,同时增加参数用于细小参数的正确定位,最后使用点对点的非阻塞通信的方式将各
个进程的计算结果汇总到主进程。
[0079] 在截面计算之前,程序需要从栅元库读取数据,该过程也进行了并行划分示意图如图7。使用拆分变量的方式,拆分读入数据到内存变量中,然后为各个进程定位至该进程读取栅元库的相应位置,最后使各个进程进行数据读取,各个进程会各自读取各自的栅元
库数据。
[0080] 下面结合具体实验数据对比对本发明的积极效果作进一步描述
[0081] 20核加速性能表
[0082]
[0083] 40核加速性能表
[0084]
[0085] 在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上;术语“上”、“下”、“左”、“右”、“内”、“外”、“前端”、“后端”、“头部”、“尾部”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对
本发明的限制。此外,术语“第一”、“第二”、“第三”等仅用于描述目的,而不能理解为指示或暗示相对重要性。
[0086] 应当注意,本发明的实施方式可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系
统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的设备
和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁
盘、CD或DVD‑ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的设备及其模块可以由诸如超大规模
集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软
件实现,也可以由上述硬件电路和软件的结合例如固件来实现。
[0087] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的保护范围之内。