高性能计算(英文high performance computing, 缩写HPC) 是一个很大的话题,本文主要介绍影响求解器性能的瓶颈和HPC中一些常用概念,并行计算常用实现方法。 有限元计算中,稍大的模型自由度通常可以达到十万/百万。2004年,Ansys 求解出了 自由度1亿的模型,2008年Ansys 求解出了 自由度 为10亿的模型。百万单元自由度问题,随便找一本有限元书籍上的实例代码,基本上都算不出来。针对大模型,普通的计算方法不再适用。 以百万自由度 隐式分析问题为例,影响求解器性能的几个瓶颈: 1. 读文件 Nastran bdf 文件可达130M,顺序读入会很耗时。 2. 内存 普通PC的内存可能会一次性装不下所有数据,内存中大数据如果存在多份拷贝,会严重影响性能,例如单元存储了节点坐标数据而不是索引,相当于节点坐标数据存储了两次。 3. 单元矩阵的生成 每个单元的刚度矩阵组装需要重复进行1百万次。 4. 整体刚度矩阵的生成 组装总刚度矩阵,该矩阵通常为稀疏矩阵(满秩矩阵到10w就已无法在普通PC机上进行计算),总刚矩阵也要计算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(集群上的其他计算机))。实现涉及到任务的分解,资源调度,进程间通信等。由于并行计算受限于应用程序的串行部分,应用程序的加速部分会有限,因此合理的设计程序算法和分配资源是实现并行计算提高性能的核心。 |
|