吾生有涯 学海无涯
析模有界 知识无界

Fluent 并行UDF丨01 介绍

内容纲要

本文简单介绍Fluent UDF并行代码设计。

注:本文内容翻译自Fluent UDF手册。

新版本的Fluent已经不再支持串行运行,哪怕指定其以1个CPU运行,Fluent启动的依然是并行模式。对于常规计算来讲并没有多大影响,然而对一些UDF的编译却会产生影响。

1 Fluent并行计算简介

与单CPU运行的串行计算不同,并行计算中涉及到计算区域的分割、内存数据的共享与交互,其过程要比串行计算复杂得多。对于UDF程序来说,若设计不当,并行计算会严重影响整体计算效率,可能会出现CPU越多,计算越慢的现象。

Fluent并行求解程序通过同时使用多个处理器来计算一个大问题,这些处理器可以在同一台机器上,也可以是存在于网络中的不同机器上。通过将计算域分割成多个分区,并将每个数据分区分配给不同的处理器(称为计算节点)进行计算。

图1 计算区域分区

每个计算节点在自己的计算区域执行与其他计算节点相同的程序,计算完毕后对重叠区域的数据进行插值。

图2 分区网格边界

并行计算中包含一个主节点(Host节点),主节点不包含网格单元、面或节点(除非使用DPM共享内存模型),它的主要目的是解释来自于Cortex(负责用户界面和图形相关功能的ANSYS Fluent过程)的命令,然后将这些命令(和数据)传递给一个计算节点(称之为node0),该计算节点将这些命令(和数据)分发给其他计算节点(node1、node2…),整个流程如下图所示。Host节点相当于包工头,node0节点相当于小队长,其不仅要传递命令,还同时执行计算,至于往下的各计算节点,那就纯粹是临时工了,别管那么多,干活儿就对了。

注:理解并行处理模式是编写并行UDF的关键。

图3 并行计算命令传递流程

计算节点在其网格上存储数据并执行计算,而沿着分区边界的单层重叠网格单元提供了跨分区边界的数据通信和连续性。即使对网格单元和网格面进行了分区,网格中的所有Domain和thread也都镜像到每个计算节点上。Thread与串行解算程序中一样以链表的形式存储。计算节点可以在使用相同或不同操作系统的大规模并行计算机、多CPU工作站或工作站网络上实现。

图4 分布式网格中的域和Thread镜像

2 命令传递与通讯

ANSYS Fluent会话中涉及的过程由Cortex、一个Host节点和一组n个计算节点(称为计算节点)定义,计算节点标记为0到n-1,如图5所示。主机接收来自Cortex的命令,并将命令传递给计算node-0。然后,node-0节点向所有其他计算节点发送命令。所有计算节点(0除外)都从node-0节点接收命令。在计算节点(通过compute node-0)将消息传递到Host之前,它们彼此之间进行数据同步。

图5 Fluent并行架构

每个计算节点实质上相互连接,并依赖其“通信器”执行诸如发送和接收数据、同步、执行全局约简(如对所有计算单元求和)和建立机器连接等功能。ANSYS Fluent通信器是一个消息传递库,比如它可以是消息传递接口(Message Passing Interface,MPI)标准的程序。

所有ANSYS Fluent节点(包括Host节点)都由唯一的整数ID标识。Host节点被分配ID为999999。Host从node-0收集消息,并对所有数据执行操作(例如打印、显示消息和写入文件)。

注意:所有对外操作都必须在Host节点上完成。这在后面的UDF程序编写时要格外注意。


某宝上买的二手X1已到货,邮政EMS硬是可以,这种时期从广州途径武汉运到我们这小镇上只用了三天半。这年头能往湖北发快递当都是大佬!

本篇文章来源于微信公众号: CFD之道

赞(4) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《Fluent 并行UDF丨01 介绍》
文章链接:https://www.topcfd.cn/11677/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册