1

質問1。

Scattervの「変位」パラメータの目的は何ですか?そしてそれはGathervとどう違うのですか?また、アドレス空間での「重複」をどのようにサポートしますか?そして、あなたの平均的なジョー変位配列はどのように見えますか?

Scatterv( Object sendbuf, int sendoffset, int[] sendcounts,
int[] displs, Datatype sendtype, Object recvbuf,
int recvoffset, int recvcount, Datatype recvtype,
int root )

Gatherv( Object sendbuf, Object sendbuf, int sendoffset,
int sendcount, Datatype sendtype, Object recvbuf,
int[] recvcounts, int[] displs, Datatype recvtype,
int root )

質問2。

Gathervでは、2つのsendbufパラメーターのどちらが受信または送信していますか?

4

1 に答える 1

3

Q1。分散とカウントの目的は、スキャッターベクトル操作とギャザーベクトル操作の両方で同じです。どちらも、各データブロックが開始する場所と、それがいくつの要素であるかという大きなバッファー内の位置(sendbufスキャッター、ギャザー)を指定します。recvbufこれらでは、コミュニケータ内のすべてのプロセスに分散されるScattervブロックを定義するために使用されます。sendbufこれらは、コミュニケータ内のすべてのプロセスからのさまざまなデータをGathervどこに配置するかを定義するために使用されます。recvbufMPI標準では、スキャッター中に単一の場所を複数回読み取ることはできず、ギャザー中に単一の場所を複数回書き込むことはできません。つまり、個々のブロックは重複してはなりませんが、パフォーマンス上の理由から、ほとんどの(すべてではないにしても)既存のMPI実装はその制約を厳密に適用しません。平均的なジョー変位配列は、ジョーがMPIコードで何をするかによって異なって見えます。ScattervGathervは主に、要素の数がコミュニケータのプロセスの数で割り切れない場合に、データの分散と収集を可能にするために使用されます。ほとんどの場合、displs[0] = 0およびdispls[i] = sendcounts[0] + sendcounts[1] + ... + sendcounts[i-1](またはrecvcountsそれぞれ)です。

Q2。sendbufsendoffsetおよびsendcount収集するデータのローカル部分を指定します。recvbufrecvcounts[]およびdispls[]それらのローカルピースが収集される大きなバッファ内の部分を指定します。

それはすべてMPI標準で書かれており、IMHOは単なる人間が読める数少ない標準の1つです。

于 2012-05-23T10:57:43.873 に答える