我正在学习MPI。我遵循的第一个教程是here
我在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();
}
我在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
更新
我对Jev的回答得到了一些疑虑。我的最新问题是:
我是否在每台机器上安装MPICH2。在cfg文件中每行写入每台机器的名称后,我是否还需要做其他事情或只是给出命令:
<path-to-mpich2>/bin/mpiexec.exe -machinefile hosts.cfg -n nPEs <your-executable>
我怎么知道我的应用程序在每台机器上运行?在运行应用程序时,我是否需要在每台机器上进行一些特殊配置?
答案 0 :(得分:3)
将连接的计算机添加到主机文件,并将文件传递给mpiexec
:
<path-to-mpich2>/bin/mpiexec.exe -machinefile hosts.cfg -n nPEs <your-executable>
检查MPICH user's guide中的5.4和9节。
更新:
是的,您需要在每台计算机上安装MPI库。此外,您需要在每台计算机上启动进程管理器守护程序并启用自动远程登录(例如,使用ssh)。然后使用mpdtrace
或打印出每台机器的主机名的简单hello world程序运行测试。如果它有效并且您将打印不同的主机名。如果安装顺利进行,则不需要特殊配置(例如,设置库的正确路径)。
答案 1 :(得分:2)
经过艰苦的努力,我能够联系支持团队,我得到的答案是:
不幸的是,MPICH团队不再支持他们的Windows版本
然而,仍有一些希望,因为仍然可以使用MS-MPI:
不幸的是,由于缺乏开发人员资源和兴趣, MPICH2支持Windows的MPICH的最后一个版本 1.4.1p。此版本的支持率很低,但您可以在下载页面上找到它:http://www.mpich.org/downloads/ 或者,Microsoft保留了MPICH的衍生产品 提供您需要的功能。您还可以找到指向该链接的链接 下载上面的页面。该版本更有可能适用于您的版本 系统并将在未来继续更新。我们推荐所有 Windows用户迁移到使用MS-MPI。