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