2014-09-24 60 views
1

我想用MPI提供的例程(特别是Open MPI)实现一些文件io。如何用MPI中的单个节点写入

由于可能的环境限制,我想知道,如果有可能限制负责IO的节点,以便所有其他节点都需要对这组进程执行隐藏mpi_send,写入数据。这在例如例如,主节点放置在具有高性能文件系统的节点上,而其他节点只能访问存储二进制文件的低性能文件系统。

其实,我已经发现了一些信息,这可能是有益的,但我找不到更多的信息,如何真正落实这些事情:

1:有一个信息键MPI_IO属于沟通者,它告诉哪个等级提供符合标准的IO例程。由于这被列为环境调查,我没有看到,我可以在哪里修改。

2:有一个信息键io_nodes_list,它似乎属于文件相关的信息对象。不幸的是,这个键的可能值没有记录,并且Open MPI似乎没有以任何方式实现它们。实际上,我甚至无法获取由mpi_file_get_info返回的信息对象的文件名...

作为解决方法,我可以想象两件事:一方面,我可以使用标准Fortran例程,或者另一方面,创建一个新的沟通者,负责IO。但在这两种情况下,负责IO的进程都必须检查来自其他进程的可能IO以执行手动通信和文件交互。

是否有一个很好的自动方法来限制IO到某些节点?如果是的话,我怎么能实现呢?

+1

注意'MPI_IO'属于执行环境的预定义的属性,因此是只读的。这主要是出于历史和便携性的原因。在现代集群系统中,其值始终为'MPI_ANY_SOURCE',因为所有CPU都以某种方式连接到I/O子系统。 – 2014-09-25 15:38:09

回答

3

您明确询问过OpenMPI,但在OpenMPI中有两个MPI-IO实现。老主力是ROMIO,MPI-IO实现在几乎所有MPI实现中共享。 OpenMPI也有OMPIO,但我对调整这一点并不知情。

接下来,如果您希望事情自动发生,您必须使用集体I/O。独立的I/O例程不能将消息发送给其他人 - 它们是独立的,无法知道对方是否正在倾听。

与那些预赛出的方式...

你问 “I/O aggregaton”。有一点的信息在这里的另一个名为优化上下文“延迟开放”(和OMPIO调用懒打开)

https://press3.mcs.anl.gov/romio/2003/08/05/deferred-open/

总之,可以肯定地说,“只有这N个过程应该做的我/ O“,然后集体I/O库将交换数据并确保发生。根据您提出的情况,优化大约在15年前开发出来:一些节点比其他节点更好地连接到存储器(如旧的ASCI Red机器上的情况,以便让您了解此优化的年龄。 ..)

我不知道你从哪里得到io_nodes_list。你可能想使用MPI-IO信息键cb_config_listcb_nodes

所以,你已经得到了与master1,master2,为主设备,并compute1,compute2,compute3(或任何主机名实际上是)一个集群。你可以做这样的事情(在C,对不起,我不能用Fortran精通):

MPI_Info info; 
MPI_File fh; 
MPI_Info_create(&info); 
MPI_Info_set(info, "cb_config_list", "master1:1,master2:1,master3:1"); 
MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_WRONLY, info, &fh) 

有了这些提示,MPI_File_write_all将聚集所有的I/O通过关于master1,master2 MPI进程,并为主设备。 ROMIO不会炸毁你的内存,因为它会将I/O分块成一个较小的工作集(用“cb_buffer_size”提示:启动它,如果你有内存,是获得更好性能的好方法) 。

有一吨的你可以在ROMIO用户指南设置提示信息: http://www.mcs.anl.gov/research/projects/romio/doc/users-guide/node6.html

+0

感谢这非常丰富的答案。我从'MPI-3'标准中获得了'io_nodes_list',并且'C'语言没有问题。尽管如此,我希望有一种非集体的可能性,让事物不同步。 – Stefan 2014-09-25 15:32:53

+0

哈!近13年来,我一直在盗用我们的MPI-IO实现,并且我从来不知道io_nodes_list ..但是在13.2节的“预留文件提示”下它就是这样。 ROMIO不支持“文件名”提示...虽然这很容易实现。 – 2014-09-25 15:45:44

+0

您必须在MPI-IO之上实施一些非集体方法。 (比如西北大学在2008年的时间框架内在这方面做了一些工作)。你可以想象在连接良好的节点上的RMA窗口,并且劫持MPI_Write实际上是MPI_Put ...“细节留给读者”......他们是多毛的细节... – 2014-09-25 15:47:43

相关问题