MPI I/O是如何实现的?

3

冗长的背景

我正在为心脏电生理模拟编写并行代码。由于用户可以使用内置的脚本语言指定自己的模拟,因此我无法知道如何处理通信与计算之间的权衡。为了解决这个问题,我正在制作一种类似运行时分析器,一旦看到要运行的模拟和它必须使用的硬件环境,就会决定如何处理域分解。

我的问题是:

MPI I/O在幕后是如何实现的?每个进程是否实际上在某个其他节点上写入单个文件,还是每个进程都写入一些稀疏文件,在关闭文件时将它们拼接在一起?

了解这一点将有助于我决定是否将I/O操作视为通信或计算,并相应地调整平衡...

非常感谢您提供的任何见解。

Ross


请澄清一下:您是在谈论MPI IO还是在谈论在MPI应用程序中进行IO操作? - powerrox
1个回答

3
I/O机制是实现相关的。此外,没有单一的I/O样式。一些I/O由远程等级缓存,并在运行结束时由mpirun进程收集。一些I/O根据需要写入本地临时空间。一些I/O被写入NAS/SAN样式的高性能共享文件系统。
一些MPI使用第三方库来支持对并行文件系统的I/O,这些细节可能是专有的。一些文件系统是本地磁盘,其他文件系统是通过光纤或InfinBand的SAN。
你计划如何实际测量I/O所用的时间?你打算使用pMPI接口拦截所有进入库的调用吗?

我原本计划使用冗长的函数指针交换,但这个pMPI接口听起来非常有趣。我会进行调查。 - Ross McFarlane
《使用MPI进行并行编程》一书中有一个使用pMPI性能分析接口来收集MPI_Send时间信息的示例。您可以在这里查看该示例:http://books.google.com/books?id=tCVkM1z2aOoC&pg=PA271&lpg=PA271&dq=mpi+standard+profiling+interface&source=bl&ots=yawtCPR8D9&sig=Rhe_iPI5eMR5PrZkVOzpfuxSlkc&hl=en&ei=ar9QSsj3EsuYtgfD66WkBA&sa=X&oi=book_result&ct=result&resnum=10 - Stan Graves
太棒了。这真是美妙的事情。谢谢你。 - Ross McFarlane
嗯...如果问题与MPI IO有关,这个答案是错误的。而且,我觉得提问者可能把MPI I/O和在MPI应用程序中进行IO搞混了。 - powerrox
@Powerrox。经过澄清,OP实际问题似乎是:“我正在制作一种类似运行时分析器的工具”。 “Profiling MPI Interface”似乎是他寻找的答案。问题似乎基于一个进行I/O操作的应用程序...而我的回答也是基于此。 - Stan Graves
@semiuseless,我不认为你的回答仍然与问题相关。OP仍然将MPI IO与在MPI应用程序中进行IO混淆。但是,既然你的回答似乎已经满足了OP,我们就让它保留在这里吧。 - powerrox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接