【问题标题】:Running MPI programs with multiple processes with Code::Blocks使用 Code::Blocks 运行具有多个进程的 MPI 程序
【发布时间】:2014-06-23 20:53:35
【问题描述】:

我是 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();
}

输出只是

Hello world 来自进程 0 of 1

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

来自进程 0 of 4 的 Hello world 来自进程 1 of 4 的 Hello World 来自过程 2 of 4 的 Hello World 来自进程 3 of 4 的 Hello world

或类似的东西。谁能评论我在程序或编译命令中遗漏了什么?顺便说一句,我在 Windows、MSMPI、Code::Blocks IDE 上的 gcc 编译器上运行。谢谢。

【问题讨论】:

  • 你是如何运行程序的? mpirun 的完整命令行是什么?

标签: c++ gcc mpi codeblocks


【解决方案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

注意:“f 4”不是复制粘贴错误。当多个进程写入标准输出时,您应该会看到乱码或散布消息。

听起来你正在编译它,但如果没有,看起来在 Windows 上你必须手动添加包含和库: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 像上面一样运行命令。从下面链接的博客文章中,看起来 code::blocks 使用“cb_console_runner.exe”来运行已编译的程序。这篇博文有该程序的修改版本,该版本将接受一个 -mpi 标志,告诉它 mpiexec 在哪里。

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

设置 -mpi 标志:

"Argument this must be defined in Codeblocks menu in Project -> Set programs' arguments?

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

示例:

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

"

【讨论】:

  • 我没有使用包装器 mpiexec.exe 。我使用了 code::blocks ide,只是指向目录。要包含的文件。但是我没有得到想要的输出(你得到的)。
  • 那么您实际上是在以某种方式从 code::blocks 中运行程序吗?如果是这种情况,在 code::blocks 设置中的某处应该有一种方法可以更改 code::blocks 运行的内容。 code::blocks 只是交接,没有做任何特别的事情。无论是通过 IDE 还是在命令行上,您都希望可执行文件是 mpiexec,其余部分作为参数。至少在命令行上尝试一次可能是值得的。
  • 我按照你在链接中所说的做了,你的方法奏效了!谢谢!但是我如何在 code::blocks 中做到这一点?我的意思是我没有找到任何可以使用包装器 mpiexec.exe 来运行程序的东西。有cmets吗?
  • 答案已编辑,并带有有关如何执行此操作的链接。警告:我对 code::blocks 没有直接经验,只有 MPI
  • 那篇博文有点难读,但现在我再看一遍,似乎他实际上发布了一个修改后的 cb_console_runner.exe,你需要它来使用 -mpi 标志。跨度>
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2012-05-04
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
相关资源
最近更新 更多