一文读懂Fluent并行计算,三大技术提升计算效率新境界!

您所在的位置:网站首页 电脑进行重要设置超慢 一文读懂Fluent并行计算,三大技术提升计算效率新境界!

一文读懂Fluent并行计算,三大技术提升计算效率新境界!

2024-07-04 13:58| 来源: 网络整理| 查看: 265

图片

作为流体仿真软件的“顶流”,Fluent被学生、工程师及科研人员广泛使用。随着技术的不断进步,Ansys工程师们致力于优化底层的并行算法,以提升其计算性能,使用户体验飞一般的计算速度。

图片

在Ansys  Fluent中,尽管工程师已经针对并行算法进行了充分优化,但在实际应用中,还有其他方法可以进一步提高计算性能。本文阐述了Fluent并行计算的基本原理,同时探讨通过AVX2指令集加速、GPU加速以及超线程等技术手段来提高计算效率。

01 什么是Fluent并行计算

Fluent的并行求解器通过协同运作多个进程来计算大型问题,这些进程既可以在同一台机器上运行,也可以在网络中的不同设备上运行。

并行求解器将计算域分为多个区域(图1),将各数据分区分配至不同的计算进程(称为计算节点,图2),每个计算节点都在其专属数据集上同步执行同一程序。主进程(或称为主机)不包含网格单元、面或节点(除非使用 DPM 共享内存模型),其主要职责是解析 Cortex(负责用户界面和图形相关功能的 Fluent 进程)发送的指令,并将这些指令(及数据)传递给某一计算进程,再由该计算进程将其分发至其他计算进程。

图片

图1:计算区域分区

图片

图2:分区网格边界

计算节点负责存储并执行部分网格的计算任务,而位于分区边界的单层重叠单元格层则负责跨分区边界的通信(图2)。尽管单元格和面被分割,但网格中的所有域和线程在每个计算节点上均存在镜像(图3)。线程以链接列表的形式存储,和串行求解器保持一致。计算节点可在大规模并行计算机、多CPU 工作站或具备相同或多工作站组成的网络上实现。[1]

图片

图3:分布式网格中的域和线程镜像

命令传输和通信

在Flunet并行计算会话中,进程涉及的主体包括 Cortex(主机进程)和一组 n 个计算节点进程,这些计算节点由 0 到 n-1 进行标记(图4)。主机进程接收来自 Cortex 的命令,并将命令传递至node-0,再由node-0发送给其他计算节点,所有计算节点(不包括节点0)均从node-0 接收命令。在计算节点将指令发送至主机之前(通过node-0),它们会相互进行同步。

各计算节点之间会进行“虚拟”连接,并依赖其“通信器”来实现数组的发送与接收、同步、全局约简(如全体单元的求和)以及机器连接性构建等功能。如图4 所示,Flunet 通信器可视为一个消息传递库,作为Message Passing Interface (MPI) 的标准供应商。

图片

图4:Fluent并行架构

在并行Flunet进程中,每一个进程(以及串行进程)均拥有独一无二的ID标识。其中,主进程被分配为 ID node_host(=999999)。主机负责从 node-0 获取消息,并对所有数据执行相应操作(如打印、显示信息以及写入文件等),这与串行求解器的操作方式保持一致(图5)。

图片

图5:Fluent并行流程

当然,由于商软黑箱,我们做不了太底层的事儿,但是在能力范围内,也能为提高计算效率添砖加瓦。

02 通过AVX2指令集加速

AVX2(Advanced Vector Extensions 2)是英特尔推出的一种SIMD(Single Instruction, Multiple Data)扩展指令集,旨在提高处理器的并行计算能力。作为AVX指令集的升级版,AVX2具有更多的指令和功能。

AVX2指令集引入了256位宽的矢量寄存器YMM和一系列新型指令,能够同时对8个32位或16个16位整数进行并行计算。相比于之前的SSE指令集,AVX2在处理器上的计算任务执行数量更多,数据吞吐量更高。在科学计算、图像处理、物理模拟等领域,AVX2具有广泛的应用价值。借助AVX2指令集,程序可以充分发挥处理器的并行计算能力,加速执行更加复杂的计算任务。需要注意的是,为了充分发挥AVX2的优势,硬件环境须支持该指令集,因此,我们务必确保所选择的处理器和计算节点可支持AVX2指令集,才可享受AVX2带来的性能提升。

在Fluent环境中实现AVX2加速的方法相当简单,只需在启动指令中添加一个参数即可:

-platform=intel ## use AVX2 optimized binary. This option is for processors that can support AVX2 instruction set

在Linux操作系统下,针对MPI并行模式的脚本可参照以下,具体根据实际环境调整相关变量:

#!/bin/bash export HOST_FILE=$(/opt/hpc/slurm/21.08.6/bin/generate_pbs_nodefile)cat ${HOST_FILE} > .nodelistNODELIST="" for host in `cat $HOST_FILE | uniq`do if [ -z ${NODELIST} ]; then NODELIST="['$host',$SLURM_NTASKS_PER_NODE]" else NODELIST="$NODELIST,['$host',$SLURM_NTASKS_PER_NODE]" fidone #cat > fluent.env


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3