メニーコアと格闘ブログ:ランク番号の偶数と奇数で、処理を分ける

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

タイトルから通信処理の想像がつくかもしれませんが、自分のランク番号が偶数か奇数かにより、処理を分ける方法を紹介します。 先日ご紹介した通信方法との具体的な違いは、偶数、奇数で処理を分けることにより、通信処理を複数同時に起動することができる点です。

図を使って説明します。

図1では、 いちばん右のランクがrecv、それ以外のランクが右側ランクに向かってsend処理を呼び出します。 この瞬間にsendが実行できるのはrank2だけです。なぜなら、rank3がrecvを呼び出しているからです。 rank0はrank1がrecvしてくれるまで“待ち”、rank1もrank2がrecvしてくれるまで“待ち”の状態となります。 ここから分かるように、この通信方法では、順番が回ってくるまでデータをsend/recvすることができません。 領域境界の計算は、通信が終わらなければ実行することができないため、この待ち時間はばかにできません。

ファイル:090731_zu1.jpg
図1.n並列化 実装その1

図2で説明する、偶数ランク、奇数ランクで、処理を分ける方法を使うと、この待ち時間を減らすことができます。 同時に、偶数rankがデータを右に送リ、奇数rankがデータを左からrecvという形で処理を開始します。 このようなパターンで通信を行えば、4並列の場合、最大で2つの通信が同時に発生します。つまり通信時間を1/2に短縮することができます(境界のrankに限っては、このように都合よくいきませんが)。

ファイル:090731_zu2.jpg
図2.n並列化 実装その2

この方法を使うことで、通信時間を減らし速度向上率を引き上げることに成功しました。

ファイル:090804_zu3.jpg
図3.偶数奇数で分けたときの速度向上率


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:メニーコアと格闘ブログ:ランク番号の偶数と奇数で、処理を分ける

個人用ツール