首先我们来看说明UDF并行流程的这个图

网格和求解数据分布和储存在计算节点(compute-node)处理器上,而对于GUI界面和主机(host)节点上不存储任何数据,主机节点将命令从GUI传递到0节点(Compute-Node-0),然后0节点(Compute-Node-0)再将命令传递给其他计算节点(比如图中的Compute-Node-1,Compute-Node-2,Compute-Node-3),其他节点的数据想要汇总到主机节点显示在GUI上,也需要其他各个计算节点将计算数据汇总给0节点(Compute-Node-0),然后0节点(Compute-Node-0)将自身的数据和其他计算节点的数据(比如图中的Compute-Node-1,Compute-Node-2,Compute-Node-3)汇总起来,发送给主机(host)节点

我们可以将计算理解为一个班级,其中班主任就是主机节点(host),班长就是0节点(Compute-Node-0),其他计算节点(比如图中的Compute-Node-1,Compute-Node-2,Compute-Node-3)就是普通学生。

所谓闻道有先后,术业有专攻。班主任(host)应该做班主任的事情,班长(Compute-Node-0)和其他同学(图中的Compute-Node-1,Compute-Node-2,Compute-Node-3)也应该去做自己的事情。那么如何区分班主任(host)和班长(Compute-Node-0)以及其他同学(图中的Compute-Node-1,Compute-Node-2,Compute-Node-3)呢?这个时候区分班主任(host)和班长(Compute-Node-0)以及其他同学(图中的Compute-Node-1,Compute-Node-2,Compute-Node-3)的标识符就应该登场了。

对于班主任(host)的命令,我们用如下的标识符进行界定:

在标识符之间的代码就是班主任(host)做的事情

对于所有学生(Compute-Node-0,Compute-Node-1,Compute-Node-2,Compute-Node-3),我们采用如下的标识符进行界定:

在标识符之间的代码就是所有学生(Compute-Node-0,Compute-Node-1,Compute-Node-2,Compute-Node-3)做的事情。

注1:班长(Compute-Node-0)也是学生,所以是同一个标识符。后面我们会讲到如何区分班长(Compute-Node-0)和普通学生(图中的Compute-Node-1,Compute-Node-2,Compute-Node-3)。

注2:针对于c语言前面加英文的叹号(!)表示取反的意思,所以就有了如下代码:

表示除主机(host)以外的其他节点,其实就是指计算节点 (Compute-Node-0,Compute-Node-1,Compute-Node-2,Compute-Node-3)

表示除了计算节点以外的(Compute-Node-0,Compute-Node-1,Compute-Node-2,Compute-Node-3),其实就是指主机节点(host)

其他的区分宏可见《ANSYS Fluent Customization Manual》,如下图:

我们可以稍微修改Fluent 2019 R1《ANSYS Fluent Customization Manual》507页上的一段简单代码来验证上面的说法:

启动Fluent,我们这里选择5核并行

编译上面这段代码,然后加载,运行结果如下:

我们按照串行(Serial)的思路再改写一下上面的代码,不加标识符,看看会有什么结果

重复上面的步骤启动Fluent,编译,我们看到编译是没有报错的,然后加载,运行结果如下:

我们可以看到如果我们不加标识符的话,完全就乱套了,人人都在高吼自己是班主任(host),这个结果当然是不正确的,也不是我们想要的。所以有时候我们在使用Fluent输出边界面积的时候会出现面积为零的情况,如下:

这就是代码没有串行化,主机节点(host)和部分计算节点(Compute-Node)没有存储对应边界的数据,从而返回面积为零,并且没有标识符,程序乱套了。

班主任和同学之间如何交流呢?班主任(host)小事(比如边界上的平均压力,平均速度,质量流量,体积流量等)会直接向所有的同学(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)宣布事情,同学们(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)也会将一些意见(比如边界上的平均压力,平均速度,质量流量,体积流量等)汇总以后将直接告诉班主任(host)。但是有时候同学们(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)的意见太多,直接告诉班主任(host)不方便,这个时候就需要班长(Compute-Node-0)出面,将所有同学(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)的意见全部汇总到自己这里,然后班长(Compute-Node-0)再将汇总以后的意见反馈给班主任(host)

班主任(host)直接向所有同学(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)宣布事情用:

host_to_node_type_num(val_1,val_2,...,val_num)

注:上面的函数中,

单词type是传递数据的类型比如int,double,float,real,char等等

单词num是传递变量的数量,那么就是1,2,3,4…

同学们(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)将意见汇总以后将直接告诉班主任(host)用:

node_to_host_type_num(val_1,val_2,...,val_num)

注:上面的函数中,

单词type是传递数据的类型比如int,double,float,real,char等等

单词num是传递变量的数量,那么就是1,2,3,4…

在使用上面这个函数以前,需要先调用前缀为PRF_宏进行汇总

一段并行求解壁面平均压力的示例代码如下:

下面一个简单的例子来说明串行代码如何并行化

示例网格下载链接: https://pan.baidu.com/s/1mWdtvtSKjFb-0L7-sAVb4g

提取码: x5hv

这是一段求解出口处面积的串行代码:

串行的执行结果:

我们将这段串行代码并行化:

并行代码执行的结果:

但当我们意见比较多(数据量比较大,比如将所有网格的坐标输出)的时候,我们就需要先将班长(Compute-Node-0)以外的所有同学(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)的意见(数据)汇总到班长(Compute-Node-0)处,然后班长(Compute-Node-0)再将所有的意见(数据)转发给班主任(host)

同学们(Compute-Node-0, Compute-Node-1,Compute-Node-2,Compute-Node-3)向班长(host)汇总一般如下编写:

浅谈UDF并行的更多相关文章

  1. 五 浅谈CPU 并行编程和 GPU 并行编程的区别

    前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺 ...

  2. 第五篇:浅谈CPU 并行编程和 GPU 并行编程的区别

    前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺 ...

  3. 浅谈Excel开发:十一 针对64位Excel的插件的开发和部署

    自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集. 随着64位操作 ...

  4. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  5. JqueryEasyUI浅谈本地化应用

    JqueryEasyUI浅谈本地化应用 Jquery是对javascript一种封装,使我们开发人员使用起来更加方便,同时也解决了不同浏览器中javascript的兼容性.JqueryEasyUi是基 ...

  6. 浅谈DOM性能考虑

    浅谈DOM性能考虑 很多人都会忽视脚本对Web应用整体性能的影响.为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题.一.尽量减少访问DOM和尽量减少标记    访问DOM的方式对脚本性 ...

  7. 转:浅谈CSS在前端优化中一些值得注意的关键点

    前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...

  8. 浅谈PHP代码设计结构

    浅谈PHP代码设计结构 您的评价:       还行  收藏该经验       coding多年,各种代码日夜相伴,如何跟代码友好的相处,不光成为职业生涯的一种回应,也是编写者功力的直接显露. 如何看 ...

  9. 浅谈 Java 主流开源类库解析 XML

    在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...

随机推荐

  1. Mysql之视图和事务(五)

    一:视图 1.问题 对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常麻烦 解决办法:定 ...

  2. 网络编程之模拟ssh远程执行命令、粘包问题 、解决粘包问题

    目录 模拟ssh远程执行命令 服务端 客户端 粘包问题 什么是粘包 TCP发送数据的四种情况 粘包的两种情况 解决粘包问题 struct模块 解决粘包问题 服务端 客户端 模拟ssh远程执行命令 服务 ...

  3. SpringCloud高并发性能优化

    1. SpringCloud高并发性能优化 1.1. 前言 当系统的用户量上来,每秒QPS上千后,可能就会导致系统的各种卡顿,超时等情况,这时优化操作不可避免 1.2. 优化步骤 第一步:优化大SQL ...

  4. java 之 集合概述

    一.集合概述 不管是哪一种数据结构,其实本质上都是容器来着,就是用来装对象的.因此,我们就要搞清楚两点:(1)如何存储(2)存储特点 1.集合 集合是 Java 中提供的一种容器,可以用来存储多个数据 ...

  5. FreeRTOS 任务通知模拟事件标志组

    实验 //设置事件位的任务 void eventsetbit_task(void *pvParameters) { u8 key; while(1) { if(EventGroupTask_Handl ...

  6. 【Nginx】将http升级到https并且同时支持http和https两种请求

    一.如何将http升级到https 需要满足下面三个: 1.域名 2.nginx 3.SSL证书     一般第三方证书颁发机构下发的证书是收费的,一年好几千.    1) 从腾讯云申请免费的SSL证 ...

  7. docker(ubuntu)中安装cron运行crontab定时任务

    1.安装cron apt-get install cron 设置crontab定时任务 crontab -e */ * * * * /usr/bin/python /python/asch-check ...

  8. SaltStack--远程执行

    saltstack远程执行 安装完Saltstack后可以立即执行shell命令,更新软件包并将文件同时分不到所有受管系统.所有回复都以一致的可配置格式返回.远程执行参考文档:http://docs. ...

  9. SaltStack--使用salt-ssh

    SaltStack使用salt-ssh模式 salt-ssh 介绍 参考官档 salt-ssh是 0.17.0 新引入的一个功能,不需要minion对客户端进行管理,也可以不需要master:salt ...

  10. 调试用Chrome浏览器

    今天写HTML页面调试时出了问题:一个页面在本地的工作空间文件夹内可以打得开,在HBuilder里用Edge打不开. 我还以为是工作空间路径出问题了,重建了好几次空间和项目.. 询问了小页,他建议以后 ...