概述
N-Body问题又称为N体问题或多体问题,N表示任意正整数,研究N个质点相互之间作用的运动规律。在物理学和天文学中,N体模拟是通常在物理力(例如重力)的影响下对粒子动力学系统的模拟(请参见n体问题)。N体模拟是天体物理学中广泛使用的工具,从研究诸如地球 - 月 - 太阳系统之类的少数体系统的动力学到了解宇宙大尺度结构的演化。在N-body系统中,每个粒子体都会与剩下的其他粒子产生交互作用(交互作用因具体问题而异),从而产生相应的物理现象。对于大量的粒子,计算过程花费巨大,从而可以利用计算算法优化和高性能的并行计算来减少计算时间。
All-Pairs法
这是一种最简单的暴力求解的方法,它直接计算每一个粒子体与剩下的所有粒子体的相互作用,算法复杂度为O(n^2).
天体星系模拟主要考虑的是万有引力。根据万有引力定律计算每个粒子与其他粒子的作用力,计算出所有粒子的相互作用力后,即可计算加速度以及更新后的位置。(考虑方向矢量)。
代码实现天体模拟的计算并不复杂,最重要的是如何优化计算。
一种MPI+Openmp结合的并行优化方法:
- MPI控制进程,每个进程平均分配粒子进行计算
- openmp并行处理计算集中部分
我的代码: 戳这里