1

ソースのリストをMPI_Recv(または同等の)呼び出しに渡すことは可能ですか?現在、私のコードは次のようになっています。

do i=nod1,nod2
    call mpi_recv(tmp,n,MPI_REAL,MPI_ANY_SOURCE,tag,MPI_COMM_WORLD,status,ierr)
    ... do stuff with tmp here
    call mpi_send(tmp,n,MPI_REAL,status(MPI_SOURCE),tag,MPI_COMM_WORLD,ierr)
enddo

もちろん、これは私が望むことをすることを保証するものではありません。(nod2が1つのメッセージを送信する前に、nod1がここで2つのメッセージを送信した場合、この反復中にnod2のメッセージは受信されません。これは悪いことです。)私のアプリケーションでは、nod1とnod2に他の制約があるため、これは発生しません。互いに(十分に)同期されている...しかし、受信が許可されているプロシージャのリストを指定する方法があるかどうか疑問に思いました。

4

1 に答える 1

1

そうではありません。ただし、で使用MPI_Probe()してから、オブジェクトのフィールドを、受信するプロセスのリストMPI_ANY_SOURCEと比較することができます。一致するものがある場合は、通常のブロッキング受信を使用して、そのソースからの受信に進むことができます。MPI_SOURCEstatus

于 2012-04-17T15:38:22.577 に答える