MPI单边文件I/O
关于使用MPI执行文件I/O,我有一些问题 一组文件分布在不同的进程中。 我希望进程读取其他进程中的文件 例如,在单边通信中,每个进程设置一个对其他处理器可见的窗口。我需要完全相同的功能。(为所有文件创建“窗口”并共享它们,以便任何进程都可以从任何偏移量读取任何文件)MPI单边文件I/O,mpi,Mpi,关于使用MPI执行文件I/O,我有一些问题 一组文件分布在不同的进程中。 我希望进程读取其他进程中的文件 例如,在单边通信中,每个进程设置一个对其他处理器可见的窗口。我需要完全相同的功能。(为所有文件创建“窗口”并共享它们,以便任何进程都可以从任何偏移量读取任何文件) 在MPI中可能吗?我读了很多关于MPI的文档,但找不到确切的文档。简单的答案是,你不能用MPI自动完成这项工作 您可以通过看到MPI\u File\u open()是一个集体调用,将内部通信器作为第一个参数,并将文件处理程序返回到
在MPI中可能吗?我读了很多关于MPI的文档,但找不到确切的文档。简单的答案是,你不能用MPI自动完成这项工作 您可以通过看到
MPI\u File\u open()
是一个集体调用,将内部通信器作为第一个参数,并将文件处理程序返回到打开的文件作为最后一个参数来说服自己。在该通信器中,所有进程都会打开该文件,因此,所有进程都必须看到该文件。因此,除非进程看到一个文件,否则它无法获得一个MPI\u文件
处理程序来访问它
现在,这并不意味着没有解决方案。一种可能是完全按照您所描述的手工操作,即:
MPI_-Win
内存窗口或几个单独的内存窗口,准备进行单边读取访问;最后MPI_Get()
调用完成最后,在最后一种手段中,我看到的一种可能性是为每个节点指定一个MPI进程(或MPI进程的OpenMP线程)来为每个文件提供服务。此进程将充当“文件服务器”,响应来自其他MPI进程的“读取”请求,并通过从文件中读取请求的数据并通过MPI将其发送回来为它们提供服务。写起来有点长,但应该可以用。你说的“一组文件分布在不同的进程中”是什么意思?这是否意味着这些文件位于本地文件系统上,仅对给定的MPI进程装入/可见,而对另一个MPI进程不可见?(就像在不同计算节点的
/tmp
上一样)@Gilles是的,这意味着这些文件位于本地文件系统上,仅在给定的MPI进程中装入/可见,而不在其他进程中。感谢您的宝贵意见。不幸的是,只有最后的建议对我有效。。。您是否有任何通过MPI实现的消息队列的良好实现?如何在文件上创建mmap区域,并在MPI中将其作为“窗口”共享以进行单边通信?