File io 当前作业完成后,如何协调群集中的成员从单个文件读取新输入?

File io 当前作业完成后,如何协调群集中的成员从单个文件读取新输入?,file-io,fortran,mpi,fortran90,File Io,Fortran,Mpi,Fortran90,我正在使用蛮力进行全局优化。我想知道是否可以使用Fortran MPI文件I/O完成以下任务: 我有三个节点,A、B、C。我希望这些节点在六组参数输入上搜索最优值,这些参数输入排列在以下矩阵中: 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 行向量表示一组参数输入。哪个节点读取哪组参数输入的顺序无关紧要。我所需要的只是协调节点A、B、C来运行这六组参数,获得惩罚函数的相应值,并将输出保存到单个文件

我正在使用蛮力进行全局优化。我想知道是否可以使用Fortran MPI文件I/O完成以下任务:

我有三个节点,A、B、C。我希望这些节点在六组参数输入上搜索最优值,这些参数输入排列在以下矩阵中:

0.1 0.2 0.3
0.4 0.5 0.6
0.7 0.8 0.9
1.1 1.2 1.3
1.4 1.5 1.6
1.7 1.8 1.9
行向量表示一组参数输入。哪个节点读取哪组参数输入的顺序无关紧要。我所需要的只是协调节点A、B、C来运行这六组参数,获得惩罚函数的相应值,并将输出保存到单个文件中

例如,节点A拉取第一组,节点B拉取第二组,节点C拉取第三组。每个节点都需要一段时间来完成各自的计算。由于计算时间因节点而异,因此C可能是第一个完成第一轮计算的节点,然后是B,然后是A。在这种情况下,我希望节点C随后拉动第四组输入,节点B拉动第五组输入,节点A读取最后一组输入

A <--- 0.1 0.2 0.3
B <--- 0.4 0.5 0.6
C <--- 0.7 0.8 0.9
C <--- 1.1 1.2 1.3
B <--- 1.4 1.5 1.6
A <--- 1.7 1.8 1.9

A尽管我很痛苦地建议,但这可能是MPI“共享文件指针”的一个很好的用途。这些在fortran中也可以使用,但是我会把语法弄错

每个进程都可以使用
MPI\u file\u read\u shared
从文件中读取一行。此独立I/O例程将更新全局“共享文件指针”状态位。如果B或C快速完成工作,他们可以再次调用
MPI\u File\u read\u shared
。如果A速度慢,当它调用
MPI\u File\u read\u shared
时,它将读取尚未处理的内容

一些警告:

  • 共享文件指针不会引起太多注意
  • 共享状态的全局位通常是。。。隐藏的文件。所以,是的,它的伸缩性可能不太好。不过,对于几十个流程来说,这应该没问题
  • 共享状态的全局位存储在文件系统中。某些文件系统(如PVFS)不支持确保此共享状态始终正确所需的锁定

@High Performance Mark我已经在谷歌上搜索了我想要的信息。据我所知,关于MPI“文件”I/O和高级示例的资料在互联网上并不多。如果您能让我知道,为了解决我描述的问题,您将使用什么MPI文件I/o策略/命令,我将不胜感激。你认为让一个节点负责读取输入函数,然后动态地将输入输入到其他节点会更容易吗?考虑一下关于HDF5的读取,它是支持并行IO和与FORTRAN良好接口的数据格式。