loading...

海洋模式优化方案

背景简介

ROMS(Regional Ocean Modeling System)是一个自由表面、地形跟踪和基本方程的斜压海洋模型,也是一个三维自由表面的非线性原始方程主要应用于近海区域的海洋模型。ROMS软件本身拥有并行版本,并行方式采用MPI 或 OPENMP两种方式,即单独采用进程级并行或线程级并行方式。在做ROMS案例优化时,针对案例运行的软硬件环境,采用进程+线程两级并行方式,极大的提升了性能。

优化介绍

对代码本身进行分析以及对实际运行的计算量进行测算,我们基于软件在MPI层网格的划分,再进行线程级优化,并同时采取了数据访存优化、双缓冲、向量化等优化手段。

在利用线程对数据进行划分时,通过分析内部核心段的计算顺序以及内部数据的复用程度,来确定分块维度。比如某三维数据维度由I、J、K表示,存储在I维是连续的,同时基于K层存在数据复用的情况。将I层循环数据进行分块,与k层数据结合成每次计算的数据块(如图1)。

另外,通过计算合并来增加数据的复用程度,减少优化接口的使用次数,减少调用开销和重复计算。在异构众核处理器上,考虑存储器局存空间,对数据进行精细的划分。如图2所示的原始核心段循环合并方式,从核只有将当次外层循环迭代内的所有的子循环体按顺序执行完毕后才会执行下一次循环迭代。执行到子循环末尾的时候,局存内的数据已经被替换掉了,下一次循环迭代时需要重新读入特定数据,这就造成了中间数据进行了多次传输。通过合并减少核心间数据交互,明显提高了软件运行效率。

对于部分函数,通过根据多维数组使用情况修改计算顺序、增删中间数组,循环内判断函数外提等重构优化,局部热点的基准测试能达到数十倍的加速效果。图3展示了某核心段众核优化加速效果,可以看到加速效果非常明显,其中循环合并优化加速将近40倍。

软件优化后又对其整体进行了封装,在不增加优化后软件编译难度的情况下,通过增加优化分支选项实现了初始版本和优化版本的合并。

Select Your Color

RTL/LTR Option