mpi错误:无效的标记值为-1

时间:2016-11-06 18:14:29

标签: mpi

我正在使用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();
}

1 个答案:

答案 0 :(得分:1)

你去了:

您只能在接收时使用MPI_ANY_TAG,而不能在发送时使用。三思而后行就会明白! if(mnprocess_id = 0)应该是“==”!大师的减少在工人中是无与伦比的。

我的意思是我看不到工人对MPI_Reduce的调用。也许它隐藏在CalculateHazardValues中?