3

私はMPIを使用して並列アプリケーションを作成しています。このアプリケーションでは、マスタープロセスに、各プロセスに送信するキャッシュ(作業中のプラットフォームでは4MB)とほぼ同じサイズのデータ​​があります。4MBはマスターが一度に送信するには大きすぎる可能性があるため、データ全体を送受信に適した特定のサイズの小さなチャンクに分割する必要があります。

私の質問は、データ全体のサイズを考慮して、それぞれの小さなチャンクを送受信するための最適なサイズについて何か提案はありますか?

ありがとう。

4

1 に答える 1

3

4MBは、MPIの実装には問題ありません。「大きすぎる」とはどういう意味かわかりませんが。

経験則では、データをすべて1つのメッセージで簡単に送信できる場合、通常は高速です。これは、1つのメッセージの送受信に必要な時間(遅延)が限られているためです。関数呼び出し、トランスポート層への呼び出しなどから。さらに、追加のデータバイト(帯域幅を超える1バイト)を送信するのにかかる時間は、通常はほぼ固定されています。プロセッサ間でメッセージ(特に大きなメッセージ)を送信する実際の複雑さの非常に大まかな概算にすぎませんが、これは非常に有用な概算です。そのモデル内では、送信するメッセージが少ないほど、レイテンシのオーバーヘッドが発生する回数が少なくなるため、より良い結果が得られます。

多くの小さなメッセージを送信することを検討している場合、上記はほとんどの場合当てはまります。ただし、(たとえば)4つの1MBメッセージと1つの4MBメッセージの送信について話している場合、そのモデルでも差は小さく、トランスポートに固有の他の効果に圧倒される可能性があります。プラットフォームにかかる時間をより正確に評価したい場合は、実際にかかる時間を経験的に測定することに代わるものはありません。最善の方法は、コードでいくつかの方法を試して、何が最善かを確認することです。それが本当に唯一の決定的な答えです。2番目の方法は、MPIの「マイクロベンチマーク」を確認することです。

上記の両方に、さまざまなサイズのメッセージの送受信にかかる時間のベンチマークが含まれています。上記をMPIでコンパイルすると、4MBメッセージと4x 1MBメッセージの送受信にかかる時間を簡単に読み取ることができます。これにより、続行する方法についての手がかりが得られる場合があります。

于 2011-03-09T13:36:39.023 に答える