相比一二十年前,现在高性能计算已经极大普及,各种超算,SaaS云端,以及类似阿里云提供的计算服务大大降低了HPC的使用门槛。该文写于2017年,现在来看之前的技术也都没有太突出的更新,计算能力和实际需求差距还是存在,当时最热的被寄予厚望的量子计算在实际工程领域还是没有重大突破,希望下个5年再回看时结果能有所不同。
高性能计算(High Performance Computing 缩写HPC) 是一个大的话题,本文主要介绍影响求解器性能的瓶颈和HPC中一些常用概念,以及并行计算常用实现方法。
有限元计算中,稍大的模型自由度通常可以达到十万/百万。2004年,Ansys 求解出了 自由度1亿的模型,2008年Ansys 求解出了自由度为10亿的模型。
百万单元自由度问题,随便找一本有限元书籍上的实例代码,基本上都算不出来,针对大模型,传统的计算方法不再适用。
以百万自由度隐式分析问题为例,影响求解器性能的几个瓶颈:
1. 读文件
Nastran bdf 文件可达130M,顺序读入会很耗时。
2. 内存
2.1. 内存中大数据如果存在多个拷贝,会严重影响性能。例如单元存储了节点坐标数据而不是索引,相当于节点坐标数据存储了两次。
2.2. 普通PC的内存可能会一次性装不下所有数据
3. 单元矩阵的生成
每个单元的刚度矩阵组装需要重复进行1百万次
4. 整体刚度矩阵的生成
组装总刚度矩阵,该矩阵通常为稀疏矩阵(普通矩阵到10w就已无法进行计算),总刚矩阵也要计算1百万次。
5. 方程求解
求解100w*100w的方程组,普通计算方法统统失效
HPC涉及到的一些概念
1. MPI (Message passing interface),MPI是一个标准,目前常用实现有两个:
OpenMPI
MPICH--号称全球十台超级计算机中有9台使用MPICH
2. OpenMP 是一个编译器指令和库函数的集 合,主要是为共享式存储计算机上的并行程序设计使用。
简单实用,可以快速上手
3. GPU(Graphic Processing Unit)
3.1 CUDA (Compute Unified Device Architecture)
GPU说简单就是把显卡当CPU用以加速计算,GPU是发展较快的一方向。目前很多商业求解器都支持GPU加速,以下是从Navida官方网站文档的截图
4. OpenACC
OpenACC 是一个可利用CPU/GPU 加速器编程标准
OpenACC 类似于 OpenMP,通过简单的编译指令即可实现,但需要安装支持的编译器,目前貌似没有可用于商业开发的免费版本。
5. OpenCL
OpenCL 是一种标准化,跨平台,基于C语言的并行计算API,简单讲OpenCL是一种可以实现跨平台,利用CPU/GPU的程序接口。
一般来讲利用并行计算的方法是将程序分解为子任务,将每个子任务分配到不同的设备上(可以是CPU,也可以是GPU,或者Cluster(集群上的其他计算机)),实现涉及到任务的分解,资源调度,进程间通信等。
由于并行计算受限于应用程序的串行部分,应用程序的加速部分会有限。因此合理的设计程序算法和分配资源是实现并行计算的核心。