2011-07-12 5 views
1

を呼び出します1つのスレッド)、これは他のすべてのスレッドによって受信されるか、または各プロセスからの1つのスレッド(最速)で受信されますか?スレッドをサポートしてMPIとBCASTは、あなたがスレッドのサポートがあることを指定するMPIプログラムでは、すべてのスレッドが呼び出しで、送信者のプロセスのみが所有しているMPI :: BCASTコール(作るSHUREを作る場合、私は思っていた

答えて

3

一般的なMPI実装は、プロセス間の通信を処理します。スレッドをサポートしている実装は、複数スレッドが単なるMPI呼び出しではなく、MPI呼び出しの一部またはすべてを作成することを許可します。 MPI_Bcastを呼び出すプロセス内のTスレッドのすべては、プロセスがMPI_BcastをT回呼び出すことを意味し、コミュニケータの他のすべてのランクは同じことを行うと予測します。 Novelocratによって与えられた答えに追加するには

+0

Novelocrat、これは意味があります。だから、Basterを呼び出す別のプロセスからのすべてのスレッドを持つことは大きな災害です。答えをありがとう。 – SwatchPuppy

+0

Novelocrat、もう一つの質問があります。複数スレッドのサポートを有効にした場合、同じプロセスに2つのスレッドがあり、MPI_SendとMPI_Recvを使ってそれらの間で通信できるか、デッドロックになりますか? – SwatchPuppy

+0

プロセスは、おそらくIsend/Irecvを使って自分自身と通信することができますが、それはやや愚かです。プロセス内のすべてのスレッドは、依然として同じMPIランクの一部であることを覚えておいてください。また、 'MPI_Send'は、一致する受信が完了するまでブロックすることができます。それがそれ自身であり、受信が掲示されていなければ、それはデッドロックです。 – Novelocrat

1

はMPIの実装では、スレッドのサポートのレベルに応じて、MPI呼び出しが唯一のプロセスごとに一度行われている(非常に不完全であるMPIでのサポートをスレッド、チェックしてください)。

1

:「ランク」MPIにおける計算の基本的な単位がある

MPIのほとんどの(すべての)興味深い実装では、ランクはプロセスです。プロセス内のすべてのスレッドは同じランクIDを共有します。

MPI標準では、MPI_THREAD_SINGLE、MPI_THREAD_FUNNELED、MPI_THREAD_SERIALIZED、およびMPI_THREAD_MULTIPLEという複数レベルのスレッド並列処理がサポートされています。これらのうち

、唯一MPI_THREAD_MULTILEは、実際にMPIライブラリへの呼び出しが重複する複数のスレッドを持っています。他の3つのケースは、ランクを「シングルスレッド」として扱うことができるというアプリケーションからのアサーションです。詳細についてはMPI Standard entry on MPI_INIT_THREADをご覧ください。

関連する問題