Parallel processing MPI大数据全对全传输

Parallel processing MPI大数据全对全传输,parallel-processing,mpi,distributed-system,Parallel Processing,Mpi,Distributed System,我的MPI应用程序有一些生成大型数据的过程。假设我们有N+1个进程(一个用于主控制,其他为工作进程),每个工作进程都会生成大量数据,现在只需将这些数据写入普通文件,名为file1、file2、…、fileN。每个文件的大小可能大不相同。现在我需要将所有文件发送到rank M进程来执行下一个任务,所以它就像所有到所有的数据传输一样 我的问题是如何使用MPIAPI高效地发送这些文件?我以前用windows共享文件夹传送这些文件,但我认为这不是一个好主意 我考虑过MPI_文件和MPI_All_to_A

我的MPI应用程序有一些生成大型数据的过程。假设我们有N+1个进程(一个用于主控制,其他为工作进程),每个工作进程都会生成大量数据,现在只需将这些数据写入普通文件,名为file1、file2、…、fileN。每个文件的大小可能大不相同。现在我需要将所有文件发送到rank M进程来执行下一个任务,所以它就像所有到所有的数据传输一样

我的问题是如何使用MPIAPI高效地发送这些文件?我以前用windows共享文件夹传送这些文件,但我认为这不是一个好主意


我考虑过MPI_文件和MPI_All_to_All,但这些函数似乎不太适合我的情况。简单的MPI_Send和MPI_Recv似乎很难使用,因为每个进程都需要传输大数据,我现在不想使用分布式文件系统。

如果没有更多的数据(只有您现在拥有的数据),就不可能准确地回答您的问题。所以这里有一些概括性的东西,你必须考虑一下,看看是否以及如何在你的情况下应用它们

  • 如果您的进程正在生成大型数据集,那么它们不太可能在瞬间生成。与其考虑等到整个数据集创建完毕,不如考虑逐块传输数据集
  • 我不认为MPI_Send和_Recv(或其变体)难以用于大量数据。但是,您需要考虑如何在进程之间的每次通信中找到合适的传输量。对于MPI,它不是一个简单的情况,即存在一个消息启动时间加上一个适用于所有发送消息的消息传输速率。例如,一些IBM硬件上的实现对于大小消息具有不同的延迟和带宽。但是,您必须自己弄清楚,对于您的平台,带宽和延迟之间的权衡是什么。我在这里给出的唯一一般性建议是对消息大小进行参数化并进行实验,直到将计算与通信的比率最大化
  • 另外,您应该已经完成的测试之一是测量平台上各种大小和通信模式的消息传输速率。当你开始在一个新系统上工作时,这是一种基本的安定测试。如果你没有更合适的选择,这将帮助你开始
  • 我认为,在通常使用MPI的程序中,大量数据的全对全传输是一种不寻常的情况。您可能需要认真考虑重新设计应用程序以避免此类传输。当然,只有你知道这是可行的还是值得的。从您提供的少量信息来看,似乎您可能正在实施某种管道;在这种情况下,通常的通信模式是从进程0到进程1,进程1到进程2,2到3,等等
  • 最后,如果您正在使用共享内存的计算机(如多核PC)上工作,您可能会考虑使用共享内存方法,如OpenMP,以避免传递大量数据

您当前是将N个文件写入每个进程的本地磁盘,还是它们都位于同一个位置?我认为您将数据写入磁盘是因为它不适合内存?我想在群集上运行此应用程序,因此我需要在不同的计算机上传输这些数据,并且数据大小可能不适合内存。什么构成“大”数据量?MPI_Send/Recv在消息大小上受到MPI_Count参数的限制,该参数为32位值。“大量”数据中有多少32位(4GB)数据块?每个列组可使用多少RAM?在计算过程中,这些数据是否存储在内存中?节点之间的互连是什么?与文件系统的互连是什么?很有可能,互连结构将比文件系统更快。