我是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编译器上运行。感谢。
答案 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;