MPI大数据全部转移

时间:2010-06-13 08:33:05

标签: parallel-processing mpi distributed-system

我的MPI应用程序有一些生成一些大数据的过程。假设我们有N + 1个进程(一个用于主控制,另一个用于工作),每个工作进程生成大数据,现在只需写入普通文件,名为file1,file2,...,fileN。每个文件的大小可能完全不同。现在我需要发送所有fileM来排名M进程来完成下一个工作,所以它就像所有数据传输一样。

我的问题是我应该如何使用MPI API有效地发送这些文件?我曾经使用windows share文件夹来传输这些文件,但我认为这不是一个好主意。

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

1 个答案:

答案 0 :(得分:3)

如果没有更多的数据,只有你现在拥有的数据,才能准确回答你的问题。所以这里有一些普遍性,你必须考虑它们,看看是否以及如何在你的情况下应用它们。

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