我想允许用户通过命令行在应用程序中设置设置。
在实验中,我发现我只能使用这种方法在第一种方法中设置变量;因此我意识到我需要使用发送和接收。但是我的代码不起作用
以下是我的代码:
#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.
答案 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);
再见,
弗朗西斯