2016-11-06 3 views
0

mpiコードで作業していますが、タグに関するエラーがありました。私はMPI_ANY_tagを使用していました。私はこのエラーがあったとき、私はゼロでタグを置き換え、それは全く何も生成されませんでした。mpiエラー:無効なタグ値は-1

送信するときに、ない受信時にのみ、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

送信時ではなく、受信時のみMPI_ANY_TAGを使用できます。二度考えてみましょう。 if(mnprocess_id = 0)は "=="にする必要があります。 マスターの削減は、労働者の中では比類のないものです。 –

+0

あなたは、比類のない労働者はどういう意味ですか?受信者のランクとしてルートが0であると正確には一致しません –

+0

私は労働者のMPI_Reduceへの呼び出しがないことを意味します。多分それはCalculateHazardValuesに隠されていますか? –

答えて

1

を伝えることができます。二度考えてみましょう。 if(mnprocess_id = 0)は "=="にする必要があります。マスターでの削減は、労働者の中で比類のないものです。

私は、労働者にMPI_Reduceの呼び出しがないことを意味します。多分それはCalculateHazardValuesに隠されていますか?

関連する問題