問題が解決するまで動作するために「n」個のプロセスを必要とするプロジェクトがあります。各スレーブプロセスは同じコードを実行します。特定の条件が発生した場合、プロセスは他のすべてのプロセスに非ブロッキング方式で通知する必要があります。他のプロセスも、このメッセージを非ブロッキング方式で受信する必要があります。
別のループをスレッド化せずに処理する方法はありますか?
MPIを使って久しぶりです。しかし、I関数は非ブロッキングです。多分このようなもの:
int comm_size = comm.Get_size();
int comm_rank = comm.Get_rank();
int* data = new int[comm_size];
while (some_condition)
{
//During each iteration, check for messages from other nodes
for (int node = 0; node < comm_size; node++)
{
if (node != comm_rank)
{
if (comm.Iprobe(node, TAG_NUM))
{
comm.Irecv(data[node], 1, MPI_INT, node, TAG_NUM);
}
}
}
if (some_other_condition)
{
//Send the message to every node
for (int node = 0; node < comm_size; node++)
{
if (node != comm_rank)
{
comm.Isend(data[node], 1, MPI_INT, node, TAG_NUM);
}
}
}
//do normal work here.
}
delete [] data;