我正在学习MPI.我遵循的第一个教程就在这里
我在Windows 7上使用MSVC 2010成功运行的代码是:
#include "mpi.h"
#include "iostream.h"
int main(int argc,char *argv [])
{
int numtasks, rank, rc;
rc = MPI_Init(&argc,&argv);
if (rc != MPI_SUCCESS) {
printf ("Error starting MPI program. Terminating.\n");
MPI_Abort(MPI_COMM_WORLD, rc);
}
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
printf ("Number of tasks= %d My rank= %d\n", numtasks,rank);
MPI_Finalize();
}
Run Code Online (Sandbox Code Playgroud)
我在Pentium-4机器上成功运行了这个代码(不要惊讶我还有一台Pentium-4).
现在我想在以太网LAN中连接的多台机器上运行此代码(或任何其他MPI代码).比如说每台机器总和1到1000,然后发送回主节点,主节点然后添加所有这些数字以获得最终总和.
我的问题是如何在网络中启动MPI编程?我应该在每台机器上运行所有工具/软件.
如果你能给我一个教程指针,我将非常感激.
MPI Implemnetation: MPICH2
O.S:each machine is having Windows 7, 32 bit CPU: Intel's Pentium 4 and Dual core
Network: Ethernet
IDE:MSVC2010
Run Code Online (Sandbox Code Playgroud)
更新:
我用Jev的答案清除了一些疑虑.我最近的问题是:
我是否在每台机器上安装MPICH2.在cfg文件中每行写入每台机器的名称后,我是否还需要执行其他操作或只是给出命令:
<path-to-mpich2>/bin/mpiexec.exe -machinefile hosts.cfg -n nPEs <your-executable>
Run Code Online (Sandbox Code Playgroud)
我怎么知道我的应用程序在每台机器上运行?在运行应用程序时,我是否需要在每台机器上进行一些特殊配置?
将连接的计算机添加到主机文件并将文件传递到mpiexec
:
<path-to-mpich2>/bin/mpiexec.exe -machinefile hosts.cfg -n nPEs <your-executable>
Run Code Online (Sandbox Code Playgroud)
查看MPICH 用户指南的第 5.4 节和第 9 节。
更新:
是的,您需要在每台机器上安装 MPI 库。此外,您需要在每台机器上启动进程管理器守护程序并启用自动远程登录(例如使用ssh)。mpdtrace
然后使用简单的 hello world 程序运行测试,该程序打印出每台计算机的主机名。如果它有效,您将打印不同的主机名。如果安装顺利进行,则无需进行特殊配置(例如设置库的正确路径)。