并行流体求解器与网络注入带宽对应用可扩展性的研究
在科学计算领域,并行计算对于提高流体求解器的性能至关重要。同时,未来超大规模系统的网络带宽与计算性能的不平衡问题也日益凸显。本文将探讨如何使用Coarray Fortran对流体求解器进行并行化,以及网络注入带宽性能对应用可扩展性的影响。
1. 流体求解器的并行化方法
1.1 分段共数组方法
在传统的格子玻尔兹曼方法(LBM)中,如果提前确定并保存每个邻居的信息,会增加内存需求和访问次数。由于LBM是内存带宽受限的算法,这会给内存接口带来更大压力。
分段共数组方法则将每个分区的内部节点处理方式与串行版本相同,仅在必要的接口单元使用共数组访问。为共数组和非共数组的流访问定义了单独的子程序,并根据流体域中的当前位置调用。以下是分段流碰撞的代码示例:
call stream_collide_caf(fOut,fIn,1,nx,1,ny,1,1)
do k=2,nz-1
call stream_collide_caf(fOut,fIn,1,nx,1,1,k,k)
do j=2,ny-1
call stream_collide_caf(fOut,fIn,1,1,j,j,k,k)
call stream_collide_sub(fOut,fIn,j,k)
call stream_collide_caf(fOut,fIn,nx,nx,j,j,k,k)
end do
call stream_collide_caf(fOut,fIn,1,nx,ny,ny,k,k)