序言:
我有一个非常大的阵列(一个暗淡),需要解决进化方程(波状eq)。 II需要计算此数组的每个值的积分,以存储生成的积分数组并再次应用积分到此数组,依此类推(简单来说,我在值网格上应用积分,存储此新网格,应用积分再次等等。)
我使用MPI-IO遍布所有节点:我的光盘上有一个共享的.dat文件,每个MPI副本读取此文件(作为集成源),执行集成并再次写入此共享文件。该过程一次又一次地重复。它工作正常。最耗时的部分是集成和文件读写可以忽略不计。
当前问题:
现在我转移到 1024 (16x64 CPU)HPC群集,现在我遇到了一个相反的问题:计算时间是无法读写的过程!!!
我试图减少一些MPI进程:我只使用16个MPI进程(遍布节点)+ 64个线程使用OpenMP来并行化我在每个节点内的计算。
同样,阅读和写作过程现在是最耗时的部分。
问题
我应该如何修改我的程序,以便以最小的损耗利用1024个CPU的全部功能?
重要的一点是,如果不完成整个1D阵列,我无法进入下一步。
我的想法:
我可以要求我的rank = 0(主等级)发送 - 接收整个阵列到所有节点(MPI_Bcast),而不是读写。因此,I / O代替每个节点,只有一个节点会这样做。
提前致谢!!!