メニーコアと格闘ブログ:ポアソン方程式の並列化 その2

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

前回は、方程式(ラプラス方程式)に並列性を持たせるため、格子点の偶数番目と奇数番目を交互に計算する方法をご紹介しました。

今回は生み出した並列性を利用して、空間的に分割(並列)計算する方法をご紹介します。

今回も、話を簡単にするため1次元で進めていきます。


8格子点の領域を考え、x=0とx=7が境界とします。

まず、領域を2つに分けます。rank0はx=0~3、rank1はx=4~7です。


ファイル:ポアソン方程式の並列化その2画像1.jpg


それぞれの領域で、「偶数番目、奇数番目繰り返し計算」を行うわけですが、ここで問題となるのが、分割境界、つまりx=3、x=4の格子点の計算をしようとした場合です。


[MPI_Send/Recv]

たとえば、

rank0の奇数番目の格子点を計算する時、x=3の計算を行う場面が生じます。このとき必要な情報はx=2とx=4ですが、rank0はx=4の値を持っていません。


ファイル:ポアソン方程式の並列化その2画像2.jpg


そこで、MPIのsend/recvを使って、rank0はrank1からx=4のデータを受け取ル処理をします。これにより、rank0はx=3の計算を行うことができるのです。


ファイル:ポアソン方程式の並列化その2画像4.jpg


同時に、

rank1の奇数番目の格子点を計算する時は、データの送受信は必要ありません。なぜなら、rank1奇数番目はx=5,7であり、それぞれに必要なデータはすべてrank1が持っているからです。


以上のことは、偶数番目の計算でもあてはめることができます。 今度はrank1がrank0からデータを受け取ることになります。その理由は、rank0の担当範囲内の偶数番は0,2で、それぞれの計算に必要なデータはrank0が持っているからです。逆に、rank1は分割境界のx=4の計算を行うために、rank0が持つx=3の値を必要とします。そのため、ここでも、MPI_Send/Recvを使って、x=4の値を送受信しなければなりません。


ファイル:ポアソン方程式の並列化その2画像5.jpg

ナン 2009年8月13日 (木) 16:53 (JST)


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

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

<comments hideform="false" />


Comments

ノート:メニーコアと格闘ブログ:ポアソン方程式の並列化 その2

個人用ツール