针对复杂工程仿真中的高分辨率网格需求,HSF-USTR设计了多层级分布式网格加密框架,从粗网格出发,通过并行细分逐步扩展计算模型规模。
传统网格加密方法依赖全局数据管理,当网格规模扩展至百亿级时,单节点内存容量、拓扑构建效率以及数据同步成本成为主要限制因素。为此,HSF-USTR将网格细分过程并行化,由不同计算进程协同完成局部区域加密,并解决无全局共享内存条件下新增拓扑一致性维护问题。
图3中,为实现“局部加密 → 全局一致”的分布式网格构建流程,HSF-USTR设计了四个关键步骤——
1. 局部网格加密
各计算进程独立完成负责区域内的单元细分、新节点生成以及拓扑关系更新,实现局部网格规模扩展。加密过程中复用已有 shared 点/边/面信息,减少全局拓扑重构带来的额外开销。
2. 共享实体识别
基于原有共享区域信息,识别加密后新增的共享实体关系,避免对全局网格进行遍历,提高并行加密效率。
3. 拓扑一致性维护
并行环境下,不同进程可能由于数据处理顺序和浮点计算误差导致共享节点排序不一致。HSF-USTR通过确定性排序机制,保证不同进程对共享节点具有一致的拓扑认知。
4. 全局编号同步
根据节点归属关系和全局偏移信息确定全局编号,并通过进程间通信完成同步,保证加密后网格编号体系的一致性。
此外,对于工程仿真中的点、线、面、体集 合(subset),加密过程同样需要同步更新。若仅完成几何网格细分而未同步集 合信息,可能导致载荷、约束以及接触条件施加位置错误,影响最终计算结果。
如图4所示,基于分布式多层级加密方法,长杆高速侵彻算例由粗网格逐步扩展至高分辨率计算模型,实现了大规模非结构网格的构建与验证,为后续百亿级并行仿真提供网格基础。
在长杆高速侵彻算例测试中,网格规模由5k扩展至2000万级,进程数由8增加至256核时,加密耗时由60.21 s降低至2.32 s,并行效率达到80.9%,验证了分布式网格加密框架在大规模并行环境下的扩展能力。
传统索引体系无法满足百亿级网格规模需求,简单将所有索引替换为64位长整型虽然能够扩大编号范围,但会导致整体数据结构存储开销增加,并增加内存访问压力。针对这一问题,HSF-USTR设计了混合长整型索引体系,根据数据规模和使用场景选择不同索引位宽。
对于全局节点/单元编号、全局偏移量以及与整体规模相关的数据,采用64位长整型;对于局部拓扑关系、临时映射等短范围数据,继续采用32位整型(图5)。
通过按需分配索引位宽,避免了“一刀切”64位升级带来的额外内存消耗,在满足百亿级网格编号需求的同时,保持计算效率。
在实现过程中,HSF-USTR通过统一索引类型管理机制,对 label 和 llabel 进行区分,并完成相关数据结构和接口适配,保证长整型索引在网格构建、拓扑管理和并行计算过程中的一致性。
在算例验证中,分别采用32位和64位索引模式进行对比测试,计算结果保持一致,仿真精度和程序稳定性未发生变化。同时,在大规模网格测试中验证了长整型索引对节点编号、单元索引以及相关数据结构管理的支持能力,为百亿级非结构网格仿真提供可靠的索引基础。
百亿级非结构网格仿真中,随着并行规模不断扩大,计算任务逐渐由单进程计算转向大规模协同计算,通信开销成为影响扩展效率的重要因素。尤其是在非结构网格中,进程边界区域不断增加,shared 与 ghost 数据同步、全局一致性维护以及负载均衡等问题逐渐成为并行扩展的主要限制。
非结构网格并行划分后,各进程既包含独立计算区域,也包含与邻域进程相关的shared和ghost区域(图6)。shared区域用于维护跨进程共享实体一致性,ghost区域用于保存邻域计算所需的数据副本。
传统通信方式通常依赖大量全局同步操作,当进程规模增加时,通信等待时间和同步开销会快速增长。针对这一问题,HSF-USTR设计了 shared/ghost 分层通信机制,将不同类型的数据交换进行分类管理,提高大规模并行环境下的数据交换效率。
该通信机制主要包括:
shared/ghost 分层管理:shared 区域用于维护进程间共享实体信息,ghost 区域用于保存邻域扩展数据,两类通信任务分别管理,降低无效数据交换;
点对点通信优化:根据进程邻接关系建立通信路径,减少不必要的全局同步;
通信拓扑复用:基于已有邻接关系构建稀疏通信表,避免重复生成通信拓扑;
通信正确性校验:提供 checkCommunication() 接口,通过全局 ID 构造点/线/面/体场,自动检查 shared/ghost 数据交换一致性。
通过上述机制,HSF-USTR 降低了大规模并行计算中的通信开销,提高了超大规模非结构网格计算的扩展能力。
在长杆高速侵彻算例测试中(图7),HSF-USTR完成了百亿级网格规模下的强扩展和弱扩展验证:
(a) 长杆百亿网格强扩展并行效率测试(512→8192 进程)
(b) 长杆百亿网格弱扩展并行效率测试(4→2048 进程)
测试结果表明,HSF-USTR通信机制能够有效支撑百亿级非结构网格并行计算,在大规模进程扩展条件下保持较好的计算效率和稳定性。
针对百亿级网格计算中的内存瓶颈,HSF-USTR从内存分配、数据布局和访问效率三个方面进行优化:
1. 大规模内存分配优化
针对网格初始化阶段大量动态内存申请问题,优化内存分配流程,减少频繁申请释放造成的额外开销;
2. 内存布局优化
通过重构数据存储方式、减少中间数据冗余,提高数据连续性,降低内存碎片;
3. 访问局部性优化
优化数据访问顺序,提高缓存利用效率,降低大规模计算中的内存访问成本。
以长杆高速侵彻算例为测试对象,在加密4层、23199744个单元、4进程并行条件下,优化前程序峰值内存达到19.6 GB。针对初始化阶段内存峰值过高问题,通过重构网格拓扑构建流程、优化数据结构以及减少临时内存分配等措施,优化后峰值内存降低至约11.5 GB,较优化前减少约40%。
测试结果表明(图8),内存管理优化有效降低了百亿级非结构网格计算中的资源压力,提高了程序运行稳定性,为超大规模工程仿真提供了内存支撑。
百亿级非结构网格中,拓扑数据规模随着网格细化快速增长,传统基于链式结构或通用容器的数据组织方式会引入大量随机访问和动态内存操作,导致网格初始化、拓扑搜索和并行构建阶段效率下降。
针对上述问题,HSF-USTR 对非结构网格容器数据结构进行了优化,主要包括:
1. 高效拓扑查找结构
传统 face/edge 映射依赖通用 map 结构,在大规模网格下存在:哈希冲突;内存离散访问;cache 利用率低;等问题。
采用 Robin Hood Hashing 替代原有 face/edge map,通过降低探测距离差异,提高大规模拓扑元素插入和查询效率。
2. 数据访问流程优化
针对网格初始化阶段大量重复查找操作:梳理拓扑建立流程;避免重计算;优化排序策略;减少无效数据访问,提高整体初始化效率。