我有以下问题:
程序1有大量数据,比如10GB。所涉及的数据包括大整数和双精度数组。 程序2有1到n个MPI进程,它们使用这些数据块来计算结果。
如何将数据从程序1发送到MPI进程?
使用文件IO是不可行的,计算节点具有足够的RAM。
程序1有大量数据,比如10GB。所涉及的数据包括大整数和双精度数组。 程序2有1到n个MPI进程,它们使用这些数据块来计算结果。
如何将数据从程序1发送到MPI进程?
使用文件IO是不可行的,计算节点具有足够的RAM。
根据您的MPI实现,可以在同一个MPI作业中运行多个不同的程序。例如,使用OpenMPI,您可以运行
mpirun -n 1 big_program : -n 20 little_program
您应该能够使用MPI_COMM_WORLD访问两个程序。从那里,您就可以使用通常的MPI函数将数据从大程序传递到小程序。
混合使用套接字和MPI并不是一个好主意。最简单的方法是将进程1和进程2都移动到单个MPI应用程序中。
实现这一点的最佳方法是使用称为MPMD或Multi-Program Multi-Data的编程模型。正如名称所示,您的MPI应用程序将在多个数据上运行多个程序。即使程序1不是MPI应用程序,您也不需要进行太多更改。只需调用MPI_Init并添加用于发送/接收数据的例程即可。您可以将其视为一种类似于Master-Slave模型的模式,其中Prg1是主程序,其他程序是从程序,从主程序获取要处理的数据片段。
另一种方法可能是通过使程序1与程序2相同来实现工作池,让每个人读取数据文件的一部分并开始工作。但是您排除了文件IO,因此我假设prog2-n在运行时无法访问该文件。Master-Slave对您的需求最有效。