背景

OpenFOAM(Open-source Field Operation And Manipulation,开源的场运算与操作)是一款基于C++编写的面向对象CFD类库,被广泛用于流体、传热、分子动力学、电磁流体甚至金融等领域问题的模拟,拥有广泛的用户基础。作为一款开源软件,OpenFOAM的诞生可追溯至二十世纪八十年代末期,它支持模版化编程、多面体网格与大规模并行计算,用户可以非常方便地进行二次开发。悠久的历史、活跃的用户社群、完善的文档、强大的性能与可扩展性,让OpenFOAM成为了最受欢迎的开源CFD软件

OpenFOAM与CFD(素材来源于网络

神威·太湖之光是世界首台峰值性能超过每秒十亿亿次量级的超级计算机,作为“国之重器”,它为超大规模的科学与工程计算、更高保真度的数值模拟提供了强有力的硬件支撑。swOpenFOAM(基于神威平台的OpenFOAM)正是与此强大硬件配套的CFD软件。它不是简单的代码移植,而是根据神威超算的架构与特性,特别为OpenFOAM量身定制了一整套的优化方案。神威与OpenFOAM二者强强联合,真正实现了1+1>2的效果。

 SwOpenFOAM优化之道  

OpenFOAM求解CFD问题主要包括“预处理-求解-后处理”三个步骤,每个步骤的关键流程与面临的问题如下图所示。为了让swOpenFOAM充分发挥神威的性能优势,需要根据神威处理器的特点——异构众核,详细定制代码移植与优化方案。同时,OpenFOAM求解过程中的三个关键环节:并行剖分、方程离散与方程求解,其对应的负载均衡数据访存代数求解算法选择等问题又与处理器架构息息相关。综上所述,这“三位一体”的问题共同构成了swOpenFOAM所面临的最大挑战。

OpenFOAM在神威上的求解流程与关键性能瓶颈

01   基于处理器架构的优化   

神威·太湖之光使用中国自主研制的“申威 26010”处理器,其特点是片上融合的异构众核架构。每块处理器包含四个“核组”,一个核组中集成了一个主核与64个从核。一个“申威 26010”处理器总共集成了260个运算核心,因此利用好从核是发挥神威性能的关键。

“申威 26010”异构众核处理器架构图

与处理器架构相关的问题是数据访存。高性能处理器内存带宽的增长远滞后于其浮点性能的提升[1](如下图所示),这一性能瓶颈对于“申威 26010”处理器显得更为突出。同时,由于一些图计算或稀疏矩阵特殊的数据结构,致使其迭代运算中存在内存访问不连续的问题。在神威·太湖之光上运行时,造成从核缓存空间的浪费和内存访问次数的增多,从而导致程序性能严重下降。

近年芯片浮点性能与内存带宽增长曲线

解决上述问题,首先需要从算法、算子和基础运算符等各个层面开展性能优化工作,其中的关键是根据众核并行的特点定制数据访存策略。其次直接利用神威上的基础加速库进行众核加速将带来巨大的开发量,针对计算模式较为类似的向量计算函数,神工坊团队通过开发统一的从核加速接口(如下图所示)有效地解决了该问题。该统一接口节省了数万行代码的开发量,且极大提升了优化代码的可维护性。最终取得了可观的加速效果,向量操作至少加速6倍,部分向量操作函数达到19倍。

向量操作统一加速接口

与此同时,针对运算中耗费时间长、资源需求大的通量计算稀疏矩阵计算热点,专门定制核优化加速方案。这些热点的优化涉及访存不连续的问题,神工坊团队根据“申威 26010”处理器的特点,使用行分段(Row-subsections, RSS)策略,来提升众核并行下的数据访存效率。RSS策略的核心思想是通过对矩阵非零元素建立一层索引来标记,记录若干行连续存储的非零元素对应列上元素具有局部聚集性的索引段起止地址[2]。按照列上的连续索引段起始地址进行访存,可以大大降低离散访存带来的内存带宽浪费。

RSS策略中的两级分解

最终加速效果如下图所示,某SIMPLE层流算例使用从核加速,各常用算子与函数操作实现了最低4倍,最高近16倍的性能提升。

不同网格下计算热点的众核加速比

02   负载均衡优化       

OpenFOAM使用scotch对计算域进行网格剖分,但是对于同一算例,不同的网格剖分方法对最终性能的影响很大。例如下图为某算例的各进程通信操作占比统计图,红色为等待操作,灰色为接受操作,绿色为发送操作。该算例采用scotch默认参数进行网格分割,可以看到出现了多个进程等待一个进程的情况,性能受到极大影响。虽然表面上各个进程的计算负载是均匀的,但通信负载的不均衡导致部分进程空闲等待大量时间,实际上负载极不均衡。因此需要对网格剖分进行精细参数化控制。

使用scotch默认参数导致通信负载不均衡

神工坊团队根据算例的特点,对scotch网格剖分参数进行细致调整,实现了较好的通信负载均衡,极大提升程序性能。如下图所示,使上述算例通信等待时间大大缩短至原来的十分之一

优化scotch参数实现负载均衡

03  代数求解算法优化     

GAMG(Generalised geometric/algebraic multi-grid, 代数几何多重网格求解器)是OpenFOAM中常用的线性方程组求解方法,其关键步骤光顺(Smooth)耗时比例最大。OpenFOAM使用Gauss-Seidel迭代作为光顺过程中的算法(Smoother),如下图所示,这种算法强烈依赖于迭代产生的新值,不易在神威从核上开展并行计算,限制了系统性能的发挥,因此需要改用更易并行的算法。

Gauss-Seidel迭代不易于并行计算

神工坊团队使用Chebyshev迭代法代替了GAMG中原有的Gauss-Seidel迭代。与原Smoother 相比,Chebyshev迭代法的特点是无空间依赖,没有全局同步点,易并行收敛速度快[3]。如下图所示,通过使用Chebyshev迭代,某算例的求解时间缩短了70%

Chebyshev伪代码及其与Gauss-Seidel的性能对比

     SwOpenFOAM应用案例    

计算域网格与流场分布示意图

如上图所示为某风资源预测应用,对大小为30 km × 30 km × 7.5 km区域内的风场进行模拟。该算例在神威·太湖之光上使用256个核组,5000万非结构网格进行,具体算法与求解器参数如下表所示。

算例相关参数

该算例的性能优化过程中的效果统计如下图所示。通过一系列的加速措施,包含手动缓存、网格剖分优化,代数求解器优化,最终使算例的综合运行效率提升了4.1倍,同时神威上每核组的运行速率也达到了同期主流Intel x86处理器的1.18倍

应用一系列加速方法后的算例运行时间与加速比

swOpenFOAM是神威·太湖之光上CFD模拟的重要组件,在此基础上部署的某风电场仿真平台,已完成包括中国、法国、土耳其的全球部分地区中尺度数据模拟,并产品化地为风资源工程师完成了超过2000个风资源项目的设计和评估。swOpenFOAM让最受欢迎的开源CFD软件在神威·太湖之光上焕发新的活力,成为高性能仿真计算的重要助力。

基于swOpenFOAM的某智慧风场平台

参 考 文 献  

[1] Vincent, P., Witherden, F., Vermeire, B., Park, J. S., & Iyer, A. (2016). Towards Green Aviation with Python at Petascale. SC16: International Conference for High Performance Computing, Networking, Storage and Analysis. doi:10.1109/sc.2016.1

[2] Liu, H., Ren, H., Gu, H., Gao, F. and Yang, G. (2020), "UNAT: UNstructured Acceleration Toolkit on SW26010 many-core processor", Engineering Computations, Vol. 37 No. 9, pp. 3187-3208. https://doi.org/10.1108/EC-09-2019-0401.

[3] Martin H. Gutknecht, Stefan Röllin, The Chebyshev iteration revisited, Parallel Computing, Volume 28, Issue 2, 2002, Pages 263-283, ISSN 0167-8191, https://doi.org/10.1016/S0167-8191(01)00139-9.

了解更多干货,欢迎关注神工坊!

神威OpenFOAM——最流行的开源CFD软件与神威·太湖之光的珠联璧合相关推荐

  1. 流固耦合开源软件precice安装笔记(包括开源CFD软件OpenFOAM、插件swak4Foam,开源有限元软件CalculiX、deal.II)

    安装环境:Ubuntu 20.04 LTS 1. 安装Python发行版Anaconda 可在Anaconda官网下载安装包,下载完成后在下载目录中鼠标右键打开终端,键入: bash Anaconda ...

  2. python 建筑业_建筑行业主流CFD软件大比拼

    目前CFD在建筑行业的应用可谓是若火如荼.在绿色建筑.节能低碳的大背景上,越来越多的项目在设计阶段和运维阶段采用CFD软件来辅助设计. OSP今天给各位盘点一下建筑行业常用CFD软件. 一.CFD软件 ...

  3. 开源商务智能软件Pentaho

    1 简介 Pentaho是世界上最流行的开源商务智能软件,以工作流为核心的,强调面向解决方案而非工具组件的,基于java平台的商业智能(Business Intelligence,BI)套件BI,之所 ...

  4. 开源GIS软件初探(转载)

    到GIS软件,首先让我们想到的便是GIS界的龙头大哥ESRI公司旗下的ArcGIS产品,从最初接触的version 9.2到如今的version 10.1,其发展可谓风生水起.MapInfo软件也不错 ...

  5. 7个开源制图软件:最佳 GIS 工具介绍

    现如今有各种各样的免费和开源地图软件平台(广为人知的 GEO 或 GIS工具), 它们不仅用于地图制作和绘图,还允许在单个数据库中免费捕获.存储.绘制地图.共享.管理和分析大量地理和空间数据.开源 G ...

  6. 35 个开源工业软件,真的强!

    原文: 35 个开源工业软件,YYDS! 工业软件支撑了整个工业体系,但市场份额却小得可怜,因此不受重视,在开源领域也不例外.作为面向工业品研发.设计.加工的基础软件,设计软件算是工业软件中发展较为繁 ...

  7. 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?...

    目前流行的源程序版本管理软件和项目管理软件:Microsoft TFS,Github,SVN,Coding 各自的优缺点: Microsoft TFS: 优点: 任务版上能将需求.项目进度一览无余,对 ...

  8. 收集的网络上大型的开源图像处理软件代码(提供下载链接)

    要写好一个图像处理软件,仅靠自己看书是完全不够的,要多方面学习,借鉴前人的经验,要集思广益.多面出击.如今网络发达,图像学的资料其实也到处都是.只是往往个人能力或精力有限,在短时间内无法找到那些也许藏 ...

  9. 现在流行的源程序版本管理软件和项目管理软件

    现在流行的源程序版本管理软件和项目管理软件有: 1.  Microsoft TFS 2.  Github 3.  SVN 4.  Coding 他们各自的优缺点是: Microsoft TFS: 优点 ...

最新文章

  1. 华为机考HJ6求质因子C语言解法
  2. vs按f5没反应_《死神vs火影》中最受欢迎的游戏角色,仙鸣当之无愧上榜
  3. Linux内核分析作业第二周
  4. pull to load more data
  5. java real football_Java学习--设计模式之行为型模式(三)
  6. java篇 之 ==与equals
  7. mysql query profile_MySQL Query Profile
  8. [算法]判断一个数是不是2的N次方
  9. 做raid会损坏linux文件吗,如何从损坏的RAID系统挂载磁盘?
  10. jsp___jstl标签
  11. 简单易学!一步步带你理解机器学习算法——马尔可夫链蒙特卡罗(MCMC)
  12. 五、数据类型(1):整数带小数点的数
  13. linux opengl安装教程,Linux下OpenGL的安装与cmake编译OpenGL程序
  14. 开源阅读书源_【阅读】一款开源的强大的看书软件!amp;超多书源。
  15. win10下VS2008提示试用期过期解决办法
  16. 云南高性能云桌面搭建解决方案、云桌面与传统PC优势对比,云桌面适用场景分析
  17. STC12C5A56S2和DS12C887做的电子闹铃
  18. 微服务实施笔记(三)——建立待发现服务
  19. Cathy Zhang automation test
  20. 【华为机试真题详解】不含 101 的数【2022 Q4 | 100分】

热门文章

  1. python依赖包turbojpeg(PyTurboJPEG)安装
  2. 域名注册需要云服务器吗,说明申请域名的方法步骤有哪些?域名注册需要云服务器吗?...
  3. CSS设置鼠标变成手样式
  4. Android怎么实现数字增减,Android实现数字跳动效果的TextView方法示例
  5. vue实现音乐播放器实战笔记
  6. java 发送Bearer token请求
  7. Bert实现意图分类
  8. mt4 虚拟服务器 配置,mt4配置云服务器教程
  9. 仿苹果手机闹钟_高仿iOS系统闹钟 UserNotifications
  10. 深度学习实战案例:电影评论二分类