我有以下问题:
程序1有大量的数据,比如10 of。有问题的数据由大型整数数组和双精度数组组成。程序2有1..n个MPI进程,这些进程使用这些数据的平铺来计算结果。
如何将程序1中的数据发送到MPI进程?
使用文件I/O是毫无疑问的。计算节点具有足够的RAM。
发布于 2010-05-23 23:03:07
根据您的MPI实现,应该可以在同一个MPI作业中运行几个不同的程序。例如,使用OpenMPI,您可以运行
mpirun -n 1 big_program : -n 20 little_program而且您应该能够使用MPI_COMM_WORLD访问这两个程序。然后,您就可以使用常用的MPI函数将数据从大程序传递到小程序。
发布于 2010-05-23 23:13:07
一种解决方案可能是让这两个程序驻留在不同的通信器中;一个可执行文件可以通过利用MPI-2的动态进程管理来启动这两组应用程序,而“生产者”程序通过MPI_COMM_WORLD与“消费者”应用程序通信。随后,消费者应用程序的所有IPC都必须在排除生产者部分的子通信器中运行。然而,这将意味着重写以避免直接调用MPI_COMM_WORLD。
发布于 2010-05-25 22:02:35
根据您的描述,"Program 1“不是MPI应用程序,而"Program 2”是MPI应用程序。通向解决方案的最短路径可能是在两个程序之间打开一个套接字,并以这种方式发送数据。这不需要将“程序1”修改为MPI程序。我会从"Program 1“和”Program 2: Rank 0“之间的一个套接字开始,Rank 0将数据分配给其余的Rank。
到目前为止,有几个建议涉及启动一组异构的可执行文件作为一种可能的解决方案。不要求单个MPI作业中的所有级别都是相同的可执行文件。这要求两个可执行文件都是"MPI程序“(例如,至少包括MPI_Init和MPI_Finalize调用)。“程序1”所需的修改级别,以及无法在MPI环境之外运行它,可能会使此选项失去吸引力。
我建议您避免使用“动态过程”方法,除非您使用的是提供支持的商业实现。在MPI的开源实现中,对连接/接受的支持往往参差不齐。它可能“只是工作”,但如果它不能获得技术帮助,可能是一个开放的问题。
https://stackoverflow.com/questions/2892177
复制相似问题