6

問題が解決するまで動作するために「n」個のプロセスを必要とするプロジェクトがあります。各スレーブプロセスは同じコードを実行します。特定の条件が発生した場合、プロセスは他のすべてのプロセスに非ブロッキング方式で通知する必要があります。他のプロセスも、このメッセージを非ブロッキング方式で受信する必要があります。

別のループをスレッド化せずに処理する方法はありますか?

4

1 に答える 1

4

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;
于 2012-10-10T01:14:41.930 に答える