我正在使用mpi代码,我有关于标记的错误。我当时正在使用MPI_ANY_tag。当我有这个错误时,我将标签替换为零,它根本没有产生任何东西。任何人都可以告诉我原因
#include<iostream>
#include<mpi.h>
using namespace std;
void ParaStochSimulator::first_reacsimulator()
{
if (mnprocess_id != 0)/*worker node*/
{
PrepareRun();
//SimulateSingleStep();
//PostProcessRun();
CalculateAllHazardValues();
sent_taus = calc_tau();
std::cout << "tau =" << sent_taus << std::endl;
MPI_Send(&sent_taus, 1, MPI_DOUBLE, 0, 0,MPI_COMM_WORLD);
/*FireTransition(min_mu, long p_nEnabledness = 1);*/
}
else if (mnprocess_id = 0)/*master*/
{
/*SimulateSingleRun();*/
MPI_Status status;
MPI_Recv(&sent_taus, 1, MPI_DOUBLE, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD,&status);
std::cout << sent_taus << std::endl;
MPI_Reduce(&sent_taus, &min_rec_taus, 1, MPI_DOUBLE, MPI_MIN, 0, MPI_COMM_WORLD);
std::cout << min_rec_taus << std::endl;
}
ParaStochSimulator::~ParaStochSimulator()
{
MPI_Finalize();
}
答案 0 :(得分:1)
你去了:
您只能在接收时使用MPI_ANY_TAG,而不能在发送时使用。三思而后行就会明白! if(mnprocess_id = 0)应该是“==”!大师的减少在工人中是无与伦比的。
我的意思是我看不到工人对MPI_Reduce的调用。也许它隐藏在CalculateHazardValues中?