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

mpi错误:无效的标记值为-1,mpi,Mpi,我正在编写mpi代码,但在标记方面出现了一个错误。我用的是MPI_ANY_标签。当我出现这个错误时,我将标记替换为零,它根本不会产生任何东西。有人能告诉我原因吗 #include<iostream> #include<mpi.h> using namespace std; void ParaStochSimulator::first_reacsimulator() { if (mnprocess_id != 0)/*worker node*/ { PrepareR

我正在编写mpi代码,但在标记方面出现了一个错误。我用的是MPI_ANY_标签。当我出现这个错误时,我将标记替换为零,它根本不会产生任何东西。有人能告诉我原因吗

#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();
}
#包括
#包括
使用名称空间std;
void parastocchimulator::first_reacchimulator()
{
如果(mnprocess_id!=0)/*工作节点*/
{
PrepareRun();
//SimulateSingleStep();
//后处理运行();
计算lHAZARDVALUES();
发送头=计算头();

std::cout您只能在接收时使用MPI\u ANY\u标记,而不能在发送时使用

另外,
if(mnprocess\u id=0)
应该是
if(mnprocess\u id==0)
。主要的
MPI\u Reduce
在工人中是不匹配的


我在workers中看不到对
MPI\u Reduce
的调用。它可能隐藏在
CalculateHazardValues
中?

您只能在接收时使用MPI\u任何标记,而不能在发送时使用。三思而后行,它就会被清除!if(mnprocess\u id=0)应该是“=”!主控中的Reduce在worker中是不匹配的。worker中的unmatched是什么意思?unmatched的确切含义是什么?根是0,因为接收者rankI的意思是我看不到在worker中调用MPI_Reduce。可能它隐藏在CalculateHazardValues中?@GeorgBisseling您应该将该评论作为对该问题的回答,因为它是lly解决了这个问题(顺便说一句,谢谢!)。