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

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

流体や、電磁気の解析に用いられるポアソン方程式の並列化を行います。

ここでは話を簡単にするため、1次元の計算領域を、2つの領域に分割し、同時に並列計算することを考えてみましょう。


ポアソン方程式は次の式1のように与えられ、これを差分式にすると式2となります。

式1ファイル:メニーコアと格闘ブログ:ポアソン方程式の並列化-図3.jpg


式2ファイル:メニーコアと格闘ブログ:ポアソン方程式の並列化-図1.jpg


ポアソン方程式(右辺が0の場合はラプラス方程式)は、ガウスザイデル法や、SOR法といった手順で数値的に解を求める方法が知られています。空間的に分割して複数のCPU/COREを使って並列に計算を行えば、高速に解を求めることができそうです。


<ポアソン方程式には、そもそも並列性がない>

結論から言うと、単純に計算領域を2分割しただけでは、正しい計算結果を得ることができません。その理由として差分法は、ある1点を計算するために周りの格子点の情報を必要とするためです。

話を簡単にするために、1次元の等間隔格子を考えます。格子点i番目の計算が終了しなければ、i+1番目の計算を行うことができません。このとき、i番目の格子とi+1番目の格子は、依存関係があると言い、この依存関係のために、同時に計算することができないのです。


ファイル:メニーコアと格闘ブログ:ポアソン方程式の並列化-図6.jpg


<並列性は、生み出すことができる>

上の手順で考えると、確かにi番目とi+1番目は依存性があり、同時に計算することができません。

では少し考え方を変えてみましょう。同時に計算する格子をi番目と、i+2番目とするとどうでしょう。


i番目の計算に必要な値は  i-1番目とi+1番目の値。

i+2番目の計算に必要な値は i+1番目とi+3番目の値。

このように考えると、i番目とi+2番目は、必要とする値が独立に存在するので、同時に(並列に)計算することができます。

差分法は並列性がないと上で述べましたが、実は、ガウスザイデル法やSOR法は、計算順序によって並列性を持たせることができるのです。


ファイル:メニーコアと格闘ブログ:ポアソン方程式の並列化-図7.jpg


では、もう少し計算を進めてみます。

今度はi+1番目と、i+3番目の格子についてみてみると、

i+1番目の計算に必要な値は  i番目、i+2番目の値。

i+3番目の計算に必要な値は i+2番目、i+4番目の値。

と、なります。ここでも、計算に必要とする値は依存関係がない値なので、同時に計算を行っても問題は発生しません。


ファイル:メニーコアと格闘ブログ:ポアソン方程式の並列化-図8.jpg


以上のように、偶数番目の格子についての計算、奇数番目の格子についての計算と分けることで、計算に並列性を持たせることができました。


次回は空間的に2分割する方法について掲載します。

<参考資料> 並列プログラミング入門(MPI版) 5-57 http://accc.riken.jp/HPC/training/mpi/mpi_all_2007-02-07.pdf


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

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

<comments hideform="false" />


Comments

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

個人用ツール