使用Code :: Blocks运行具有多个进程的MPI程序

时间:2014-06-22 22:18:51

标签: c++ gcc mpi codeblocks

我是MPI的新手并试图运行'hello world'计划。这是我的程序

#include <iostream>
#include <mpi.h>
using namespace std;


int main(int argc, char ** argv)
{
    int mynode, totalnodes;
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &totalnodes);
    MPI_Comm_rank(MPI_COMM_WORLD, &mynode);
    cout << "Hello world from process " << mynode;
    cout << " of " << totalnodes << endl;
    MPI_Finalize();
}

输出只是

来自1的过程0的Hello world

我有多核CPU,我认为应该至少运行4个进程。所以输出应该是:

来自4的进程0的Hello world    来自过程1的Hello世界    来自4的过程2的Hello world    来自4的过程中的Hello world

或类似的东西。任何人都可以评论我在程序或编译命令中错过了什么?顺便说一下,我在Code :: Blocks IDE上的Windows,MSMPI,gcc编译器上运行。感谢。

1 个答案:

答案 0 :(得分:1)

它对我有用。

我将你的代码复制粘贴到mpi_app.cpp中。 mpicxx由MPI实现者提供的编译器包装脚本,用于处理包含和库。 mpirun是一个用于启动mpi程序的包装脚本,也是由MPI实现者提供的。我使用的MPI实现是mpich2。

$ mpicxx -O0 -o mpi_app mpi_app.cpp
$ mpirun -n 4 ./mpi_app
Hello world from procHello world from process 2 Hello world from process Hello world from process 0 oess 1 of 4
of 4
3 of 4
f 4

注意:&#34; f 4&#34;不是复制粘贴错误。当多个进程写入stdout时,您应该会看到乱码或散布的消息。

听起来好像是要编译它,但如果没有,它看起来像在Windows上你必须手动添加include和lib:http://blogs.msdn.com/b/risman/archive/2009/01/04/ms-mpi-with-visual-studio-2008.aspx

从同一个链接看起来,Windows命令行上的命令是:

mpiexec –n 10 MyMPIProject.exe

要让它在code :: blocks中运行,你需要告诉code :: blocks如上所述运行命令。从下面链接的博客文章看,代码:: blocks使用了&#39; cb_console_runner.exe&#39;运行已编译的程序。这篇博文有一个该程序的修改版本,它将接受一个-mpi标志,告诉它mpiexec在哪里。

http://www.blog.kubiak.co.uk/post/44

设置-mpi标志:

&#34;参数必须在Project中的Codeblocks菜单中定义 - &gt;设置程序的参数?

-mpi <path to mpiexec> -n <number of processes>

示例:

-mpi C:/Progra~1/MPICH2/bin/mpiexec -n 8 

&#34;