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

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

【技术实现步骤摘要】
一种栅元少群参数计算模块程序的优化方法、系统、终端
本专利技术属于热中子反应堆数据处理
,尤其涉及一种栅元少群参数计算模块程序的优化方法、系统、终端,具体涉及一种基于MPI的栅元少群参数计算模块程序的优化方法。
技术介绍
目前,栅元计算程序的优化,一般先从硬件入手,提升CPU的运算性能,并检查硬件设置,优化程序的内存访问。然后从运行环境上调整,通过监控整个系统的性能及各项指标看问题所在,然后看能不能通过一些运行参数的调整,降低系统消耗。最后是编译器级调优,使用编译器的优化选项或者引入自动向量化的方式对程序进行优化。综合来讲,现有的技术方案分为四个步骤层次,首先是硬件级的优化,使用性能更高的计算机硬件来运行程序;然后是运行级优化,从运行环境上调整,通过一些运行参数的调整,提升程序的运行性能;其次是编译器级优化,通过使用编译器提供的优化选项或引入自动向量化编译指令,深度优化,性能剖析指导的优化(PGO)等方式获得程序的性能提高;最后是引入OpenMP进行线程级并行优化,充分利用多核的处理性能,提升程序的运行性能。通过上述分析,现有技术存在的问题及缺陷为:(1)对于热中子反应堆物理计算中的栅元少群参数计算模块程序的优化,可以先从硬件下手,简单粗暴直接换掉性能低的硬件,比如网卡从千兆换到万兆的,硬盘从机械的换成SSD等等。优化硬件设备一直是最快速有效的手段,但也是经济成本花费最高的手段。在万不得已的情况下,一般不会采用此技术手段。(2)使用编译器的优化选项,有时候也能获得巨大的性能提高。该方法如果栅元少群参数计算模块程序的网格算例规模不大,且对程序性能的提升要求不高时,还是会产生一些相应的效果。但是在计算千万网格规模的算例时,如何优化栅元少群参数计算模块程序,使其能够在高性能集群上运行性能效果显著提升,是一个较为困难的问题。这也是该方法的缺陷所在,即程序优化的性能提升效果容易存在瓶颈。(3)引入OpenMP进行线程级别的并行化,充分利用多核,多线程的并行处理能力。但是本专利技术在使用这种技术的时候,尤其要防止数据竞争,死锁,饿死,内存伪共享等问题。所谓数据竞争就是在多个线程访问相同数据时,由于同步等原因,需要让步等待其他线程访问结束,导致性能降低。所谓伪共享,是多个线程读写数据映射在一个cache线上时,如果一个线程更改了数据,那么其他线程对该数据的缓存就失效,如果线程频繁的更改数据,硬件就需要不停的更新cache线,这使得性能从独享cache降低到共享cache或者内存的水平。同时,当问题规模超过单节点处理能力时,会达到性能提升的瓶颈,无法充分利用多节点多核的处理性能。(4)现有技术方案在当程序计算千万网格规模算例规时,程序运行的性能提升效果不显著,无法达到规定的性能提升要求。不仅实现成本偏高,而且对技术人员要求很高,需要对整个系统非常熟且十分熟悉编译的使用,优化过程的理解。对集群多处理机的运行环境来说,性能提升效果有限,往往无法满足实际生产的要求。解决以上问题及缺陷的难度为:如何使优化后的程序能够在计算千万网格规模算例,获得显著的性能提升,是需要着重考虑的一个问题。此时问题规模已超过单节点的处理能力,要使程序能在多节点多核的环境下运行,现有的技术方法无法实现,只能使用MPI技术实现节点间的通信。随之而来就会出现一个新的问题,即数据通信的开销会影响到程序的运行性能。如何选取最优的数据划分方式,尽可能的降低通信的时间开销,是一个比较难的问题。解决以上问题及缺陷的意义为:能够在尽可能的节约经济成本的前提下,实现栅元少群参数计算模块程序在多节点多核的运行环境下,对千万网格规模算例的高效并行计算,满足实际生产应用的需求。
技术实现思路
针对现有技术存在的问题,本专利技术提供了一种栅元少群参数计算模块程序的优化方法、系统、终端。本专利技术是这样实现的,一种基于MPI的栅元少群参数计算模块程序的优化方法,应用于信息数据处理终端,所述基于MPI的栅元少群参数计算模块程序的优化方法包括:编译级优化,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;串行程序优化,面向程序代码本身,根据C/C++语言的运行机制,使用合理的实现方式。主要针对代码中的循环,以及结构体的构造进行优化;使用MPI技术对程序的热点模块-栅元计算模块进行并行优化。进一步,所述编译级优化具体包括:步骤1:编译选项优化,系统编译器提供了-O变量来控制编译优化。使用优化选项以牺牲程序的编译时间和程序的可调试能力为代价,优化程序的性能。这里本专利技术使用”-O2-g”的编译选项进行编译;“-g”表示使编译器生成调试信息,“-02”表示尝试更多的寄存器级的优化以及指令级的优化;步骤2:编译器优化,对程序的热点函数的循环计算中的内部循环使用编译器提供的自动向量化,在循环前使用#pragmavectorunaligned编译指令指示编译器进行向量化时使用不对齐的数据读写方式。进一步,所述串行程序优化具体包括:第一步:在程序中选用尽量小的数据类型,防止内存的浪费。同时针对程序中访问次数较多的结构体变量,尽量采用大数据类型在前,小数据类型在后的声明方式,一方面这样可以节省一些空间,另一方面可以更好地满足处理器的对齐要求。第二步:对程序的热点函数的循环部分进行串行优化。进一步,所述第二步具体包括:对程序的热点函数内的小循环且内部没有判断的进行展开,以减少每次的判断数量和循环变量的计算次数,增加处理器的流水线性能。对热点函数内的多个之间没有依赖的小循环合并,增加乱序执行能力。进一步,所述使用MPI技术对程序的热点模块-栅元计算模块进行并行优化包括:第1步:对初始化结块数函数进行MPI任务划分,初始化结块数函数并行后,各个进程会根据新的结块数分配微观截面变量;第2步:对读取栅元库数据函数进行基于MPI的并行划分,实现多进程并行读取数据;第3步:第2步并行划分后,对截面计算部分进行MPI并行划分。进一步,所述第2步具体包括:使用拆分变量的方式,拆分读入数据到内存变量中,然后为各个进程定位至该进程读取栅元库的相应位置,最后使各个进程进行数据读取,各个进程会各自读取各自的栅元库数据,为后续的并行截面计算打下基础。所述第3步具体包括:首先新增函数参数表示划分后各个进程需要的结块数,然后使循环中的的细微循环计算部分仅由主进程完成,使得微小数据不再进行MPI通信,避免冗余数据的传输开销;对关键循环计算实现新划分数据的MPI并行计算,同时增加参数用于细小参数的正确定位,最后使用点对点的非阻塞通信的方式将各个进程的计算结果汇总到主进程。本专利技术的另一目的在于提供一种基于MPI的栅元少群参数计算模块程序的优化系统,包括:编译级优化模块,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;串行程序优化模块,面向程序代码本身,根据C/C++语言的运行机制,使用合理的本文档来自技高网
...

【技术保护点】
1.一种基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,应用于信息数据处理终端,所述基于MPI的栅元少群参数计算模块程序的优化方法包括:/n编译级优化,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;/n串行程序优化,面向程序代码本身,根据C/C++语言的运行机制,对代码中的循环,以及结构体的构造进行优化;/n使用MPI技术对程序的热点模块-栅元计算模块进行并行优化。/n

【技术特征摘要】
1.一种基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,应用于信息数据处理终端,所述基于MPI的栅元少群参数计算模块程序的优化方法包括:
编译级优化,调整程序的编译选项,并使用编译器自带的优化选项以及自动向量化指令对程序进行优化;
串行程序优化,面向程序代码本身,根据C/C++语言的运行机制,对代码中的循环,以及结构体的构造进行优化;
使用MPI技术对程序的热点模块-栅元计算模块进行并行优化。


2.如权利要求1所述的基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,所述编译级优化具体包括:
步骤1:编译选项优化,系统编译器提供了-O变量来控制编译优化;使用优化选项以牺牲程序的编译时间和程序的调试能力为代价,优化程序的性能;使用”-O2-g”的编译选项进行编译;“-g”表示使编译器生成调试信息,“-02”表示尝试更多的寄存器级的优化以及指令级的优化;
步骤2:编译器优化,对程序的热点函数的循环计算中的内部循环使用编译器提供的自动向量化,在循环前使用#pragmavectorunaligned编译指令指示编译器进行向量化时使用不对齐的数据读写方式。


3.如权利要求1所述的基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,所述串行程序优化具体包括:第一步:在程序中选用尽量小的数据类型,防止内存的浪费;同时对程序中访问次数较多的结构体变量,采用大数据类型在前,小数据类型在后的声明方式,满足处理器的对齐要求;
第二步:对程序的热点函数的循环部分进行串行优化。


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


5.如权利要求1所述的基于MPI的栅元少群参数计算模块程序的优化方法,其特征在于,所述使用MPI技术对程序的热点模块-栅元计算模块进行并行优化包括:
第1步:对初始化结块数函数进行MPI任务划分,初始化结块数函数并行后,各个进程会根据新的结块数分配微观截面变量;
第2步:对读取栅元库数据函数进行...

【专利技术属性】
技术研发人员:杨昊毛波何琴何金徽
申请(专利权)人:成都信息工程大学
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1