MPI程序中的初始设置

时间:2013-12-09 19:56:43

标签: c++ mpi

我想允许用户通过命令行在应用程序中设置设置。

在实验中,我发现我只能使用这种方法在第一种方法中设置变量;因此我意识到我需要使用发送和接收。但是我的代码不起作用

以下是我的代码:

#include <mpi.h>
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[]){

  cout << "Enter v" << endl;
  double v;
  cin >> v;
  cout << v << endl;

  MPI::Init(argc,argv);

  int rank = MPI::COMM_WORLD.Get_rank();
  int size = MPI::COMM_WORLD.Get_size();

  if (rank == 0)
  {
    MPI::COMM_WORLD.Send(&v, 8, MPI_DOUBLE, v, 1);
  }
  else
  {
    MPI::COMM_WORLD.Recv(&v, 8, MPI_DOUBLE, v, 1, );
  }

  cout << "My rank is " << rank <<". My v is " << v << endl; 
  MPI::Finalize();
  return 0;
}

它报告了这个:

enter v
5
5
enter v
2.23533e-317
enter v
2.23533e-317
enter v
2.23533e-317
0 - MPI_SEND : Invalid rank 5
[0]  Aborting program !
[0] Aborting program!
p0_11420:  p4_error: : 8262
Killed by signal 2.
Killed by signal 2.
Killed by signal 2.

1 个答案:

答案 0 :(得分:1)

错误来自:

MPI::COMM_WORLD.Send(&v, 8, MPI_DOUBLE, v, 1);

如果你想发一个双,那么:

MPI::COMM_WORLD.Send(&v, 1, MPI_DOUBLE, v, 1);

为避免错误,请先检查v&lt; size ...您提供的代码将值v发送到proc v。要将相同的参数值发送到所有进程,请使用MPI_Bcast()(广播)。

http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Bcast.html

MPI::COMM_WORLD.Bcast( &v, 1, MPI_DOUBLE, 0);

再见,

弗朗西斯