论文部分内容阅读
计算机模拟在当代化学、生物学、制药学以及流体力学等科学领域的研究中都扮演着不可替代的作用。通过对介观层面上的颗粒以及分子的模拟,可以大大地缩短这些科学研究方法的周期,同时极大地提高其实验成功率。在计算流体动力学中,时下最为流行的模拟方法就是通过计算机的计算,来实现对流体流向作用力等的数值模拟。计算流体动力学中,有一类重要方法是格子波尔兹曼方法(Lattice-Boltzmann Method)。 本文针对一款叫做Susp3d的对流体中的固体颗粒进行模拟的程序,为其设计GPU并行算法。通过时间复杂性分析和时间测量的方法,找到性能瓶颈,作为并行化的重点。通过链状数组、内存池、位压缩、快速归约求和、嵌套消除、宽度优先搜索、分块矩阵等策略,解决了Susp3d在密集计算、内存冗余、传输、申请及回收等方面的问题,把主要的计算步骤及数据读写从CPU和主存转移到了GPU和显存上。并通过MPI多节点模式,实现了多GPU的并行。 实验表明,通过GPU的加速,使得对于液体中悬浮粒子的模拟,可以得到CPU串行算法4倍的加速效果的同时,仍然保持计算结果的稳定性。另外,程序对于双精度浮点数的计算误差保持在10-6以下。