基于GPU的有限元方法的实现毕业论文
2021-05-13 23:32:19
摘 要
近年来,由于人们的生活水平的提高,人们不再只是追求生活上,物质上的享受,人们对视觉上的要求变得越来越高,于是,图形处理器的发展就随之而来,将图形处理器应用到硬件上后研究人员发现编程能力和计算能力提升的特别明显。与此同时,GPU在数值计算的领域开始发扬光大。很多公司尝试着将图形处理器与GPU结合起来进行计算,最后英伟达的CUDA并行平台较为完善地解决了这个问题,各个学科也开始使用GPU并行计算。GPU的并行运算对很多人来说还是一门全新的学科,所以到至今为止开发处于雏形。本文粗略解析英伟达的GPU构架和它上面CUDA平台的编程的特点,在GPU上进行有限元分析程序中的组装工作和稀疏线性方程组求解这些大规模的计算工作。
在进行这些大规模工作之前,我们需要确定总刚矩阵的压缩存储的格式为CSR这种存储格式来在CUDA平台上读写相关的数据,通过对模型的节点重排,来使得系统可以更大化的利用GPU中的缓存资源。只有最大化的利用GPU中的缓存资源,我们才能说大规模的工作在CUDA平台下在各方面的所耗费的物质得到了优化,为了在单刚组装成总刚的组装的过程中的并行化计算的过程在高工作量的情况下还要保证精度是不出现纰漏,在读写数据时造成读写冲突对整个流程形成障碍,我们就需要对整体的各个单元进行分组,使得每一组中的不同单元不是彼此相邻,每个线程也就是每个单元在计算的单刚是会在总刚中所对应的区域保存,我们需要它们对应的位置没有任何节点的重叠,计算才能顺利进行。这样防止了潜在的数据冲突。由此 研究人员通过对CUDA平台的研究后利用CUDA BLAS库的操作来代替共轭梯度的算法,变换成自己的向量相乘来实现算法,这种方程的求解方式能够充分利用了GPU资源,实现GPU资源的较大化利用。
通过与CPU端的计算结果相比较,GPU在组装部分与CPU相比最高可以达到7倍的加速,在方程求解部分和CPU相比最高可以达到了6.4倍加速。结果直接证明采用这种方法能够起到较大的效果。
关键词:图形处理器,有限元,CUDA平台,并行计算,高性能计算
Abstract
Recently, with the development of graphics processor (GPU) hardware architecture, GPU’s programmable performance continues to strengthen which making the computing power of GPU has a major improvment, and the GPU have had great success in numerical computations. With the NVIDIA CUDA parallel computing platform continue to improve, GPU parallel computing has been infiltrated into every subjects. For the special of finite element method, it y developed slowly when GPU’s architecture was not yet mature. So far it is only in the initial state. By analyzing the architecture of NVIDIA GPU, and the programming model of CUDA platform, and then porting the assembling and the sparse linear equation solver which are the biggest computation parts in traditional finite element analysis programs to GPU.
Considered the specialty of CUDA platform, we selected conjugate gradient method (CG) which is a iteration method for solving sparse linear equations in FEM and the majority of CG is in the sparse matrix-vector multiplication (SpMV). Taking into account the data reading and writing restriction, we choose CSR format to compress the global stiffness matrix, and then reorder the nodes of the model to make SpMV operation can use the precious GPU cache better. To assure the high degree of parallel computing on assembly procedure, and avoid the reading and writing conflict, we grouped the elements of the model to make the elements of each group is not adjacent to each other, so that each element matrix which calculated by one thread of GPU would not overlap any other element matrix, it prevent potential data conflicts. We replace the vector operations by CUDA BLAS library, and implement our SpMV function, so that the equation solver is also full use the resource of GPU.
By calculating 4 different elements models, the results on GPU compared to CPU shows that in assembly procedure GPU can get highest speed up to 7 times, and in equation solving procedure get highest speed up to 6.4 times. The result shows that with the GPU computing resource, finite element method can get better acceleration effect.
Key Words: GPU, CUDA, parallel computing, high performance computing, finite element
第一章 绪论 1
1.1. 选题背景和意义 1
1.2. 国内外研究进展 1
1.3. 研究内容 3
第二章 NVIDIA CUDA平台 3
2.1. GPU并行计算 3
2.2. 平台简介 4
2.3. CUDA编程模型 7
2.3.1. Kernel 8
2.3.2 cublas库函数 8
2.3.3. 线程结构 9
2.3.4. CUDA存储器模型 10
2.3.5. 异构计算 12
2.4. CUDA程序的优化 12
第三章 预处理 12
3.1.稀疏矩阵压缩格式 12
3.2节点排序 12
3.3 单元分组 13
3.4. 组装预处理 14
第四章 总结与展望 15
致谢 17
第一章 绪论
1.1. 选题背景和意义
随着目前各个领域的研究人员在其领域的各方面研究,建模的能力提高也进步颇大,各个方面的混乱程度加大和研究人员需要考虑到更多方面的因素使得问题规模增大,在计算资源有限的情况下有限元分析对它的需求和依赖变得越来越苛刻。除了很早以前的使用的并行向量处理机(PVP)之外,最近近二十年来通过开发人员的努力,使得有关有限元的一些软件可以通过并行的方式来运行在集群机(Cluster),对称的处理机(SMP)或者大规模的并行的处理机(MPP)上。对称的处理机和大规模的并行处理机的相对较为昂贵被相对价格低廉的集群机取代成为并行机的标配。然而在大规模的集群机之中,输入和输出的瓶颈以及节点的高能耗变成了系统的性能提升的主要障碍和以及开发人员需要攻克的主要矛盾。
1999年NVIDIA公司发布了一款名为GeForce256图形处理芯片时就第一次提出GPU的概念。GPU能够让显卡减少对CPU的寄托,同时还能进行部分的需要CPU完成的工作,从2007年的英伟达公司发布了CUDA开发平台用来进行GPU通用计算以来,在通用计算领域GPU得到了极大程度的发展,OpenCL和DirectCompute等计算平台也陆陆续续诞生。随着GPU的性能的大幅度提使得GPU计算平台成为最主流的计算平台之一。若要使得目前的计算机系统可以分析更复杂的,难度更大,更大规模的计算的模型,有限元分析方法能够充分地利用GPU的计算资源的成功具有非常大的科学和工程意义。
早期GPGPU需要使用汇编语言实现,编程相较现在而言较为困难;后来又可以利用图形学API将通用计算映射到图形处理的过程当中,虽然在计算能力方面有所提高,但作用面比较小而且需要程序员对图像处理的过程以及GPU的架构有很深刻的理解使得不能够被普及开。
后来英伟达公司的CUDA的出现改变了这一现状,CUDA的并行计算架构的提出使通用计算映射中GPU执行的过程得到了大大的简化,大大降低了计算过程中程序的开发难度和开发所需要的时间,CUDA采用的单个指令控制多线程的执行模型,提供了多个同时进行的数据并行化和线程并行化模型,从很大程度上简化了基于GPU的并行计算,让程煜源不再需要深入了解GPU的结构也可以在可用的GPU处理器上处理和计算各类问题。
1.2. 国内外研究进展
GPU逐渐开始进入到计算领域是在GPU加入可编程的功能之后。一些开发人员在GPU通用计算开发平台成熟之前最开始通过可编程的GPU来对高清视频进行加速和对一些图片的渲染加速,后来被斯坦福的研究小组用来对蛋白质的则跌进行计算。
GPU通用计算平台自从由英伟达公司发布CUDA平台到现在,有限元法因为其高度的适应能力能够让各个方面的计算带来方便,在各个领域都运用广泛。在土木、汽车、水利、航空航天、机械、核工业和大地勘测等领域都有应用,同时,.随着科学技术的不断发展GPU并行计算的概念和思想也早逐渐渗透到了各个方面:
在电磁模拟的实验中,CUDA平台采用加速的实施点阵式的FDTD算法,以及基于CUDA平台的Nodal间断的伽辽金法(DGM)。都需要运用到GPU的并行计算的计算能力。
在基因工程的探究方面RNA,DNA的序列快速对比,蛋白质上的序列数据库快速的扫描到所对应的蛋白质,蛋白质和DNA的快速匹配,处理亲子鉴定问题模型等都需要利用到CUDA平台进行高吞吐量的计算。
在进行海洋探测时具有径向的基底函数的海啸建模模型,大学里的海啸模拟工作的实施,都需要运用到GPU的并行计算。
在计算流体力学时,我们针对纳维—斯托克斯模型以及Lattice Boltzman方法中的GPU的有关加速的算法,以及车辆上的3D超音速气流的模拟计算。都需要运用到GPU的并行计算的强大计算能力。
在计算金融领域,研究人员通常利用GPU加速债券的风险分析,期权定价,定价,市场模型Monte Carlo应用。
在计算化学的领域,我们通过GPU的并行运算来实现量子化学的计算加速工程。
在分子动力学领域中,我们需要运用GPU的并行计算来计算分子动力学的应用特别适合大规模并行架构,加速后能够极大地提升计算的速率。
在数据挖掘、分析学以及数据库的一些领域内,通过GPU的并行计算来进行数据的挖掘,计算出的数据来比较性能,在选择物品的时候能够起到很大的参考价值,还能通过调用数据库的数据完成计算,大大缩短计算所耗费的时间成本。
在医学成像的领域,通常利用GPU加快图像处理的性能。GPU的并行计算在这个领域的 应用已经日趋成熟。
GPU的并行计算的平台大多数还是选择在NVIDIA公司的CUDA平台进行,不过通用性更强的OpenCL计算平台也逐渐成为平台之一。逐渐吸收着用户使用的数量。