現在(2017-08-03 (木) 11:54:42)作成中です。 既に書いている内容も大幅に変わる可能性が高いので注意。


神戸大学 大学院システム情報学研究科 計算科学専攻 陰山 聡


【目次】


 
 
 

2次元並列化

  • 引き続き、正方形領域の熱伝導問題(平衡温度分布)を解く例題を扱う。
  • これまでMPIで並列化を行うにあたり、正方形領域のy方向(j方向)に複数の領域に分割し、 それぞれの領域に一つずつMPIプロセスを割り当てて並列化していた。 このような並列化を1次元領域分割による並列化という。 下の図は正方形領域を16個の領域に分割した例である。
domain_decomp_1d.png
  • 同様に二次元領域分割による並列化も考えられる。 正方形を16個の領域に2次元的に分割すると下の図のようになる。
domain_decomp_2d.png
  • 上の二つの図はどちらも16個のMPIプロセスで並列化しているので、 計算速度の点で見ればどちらも同じと思うかもしれない。
  • だがそれは違う。 プロセス間の通信にかかる時間がゼロであれば、そのとおりだが、実際にはプロセス間の通信(MPI_SENDやMPI_RECV等)には有限の―それどころかかなり長い―時間がかかる。
  • では、プロセス間通信に長い時間がかかるという前提の下で、 1次元領域分割と、2次元領域分割ではどちらが計算が速いであろうか? 2次元領域分割にも様々な分割方法があるが、その中で最も最適な分割方法な何であろうか?
 
 
 

計算と通信

  • 1次元空間を格子点で離散化した上で、MPIでプロセス間通信を行う場合を考える。
mpi_comm_points_1d.png
  • 計算格子には2種類ある。一つは、その上で計算だけを行う格子。 もう一つはMPI通信のデータを送ったり、受けたりする格子である。 (一番外側から2番目の格子は計算も通信も行う。)
  • 一つのMPIプロセスが行う通信の量は、通信を行う格子点の数に比例する。 通信に時間がかかる場合、通信を行う格子点は少ないほうが望ましい。
 
 
 

1次元領域分割と2次元領域分割

  • 下の図は正方形領域を400個の格子点で離散化した場合を示す。
400_points_raw.png
  • これを4つのMPIプロセスで並列化することを考える。 1次元領域分割の場合、下の図のようになる。
400_points_1d_decomp.png
  • 2次元領域分割の場合、同じく4つのMPIプロセスで並列化すると、下の図のようになる。
400_points_2d_decomp.png
  • 明らかにプロセスあたりの通信量は2次元領域分割の方が少ない。
 
 
 

2次元領域分割の方法

  • 同じMPIプロセス数による2次元領域分割でも様々な可能性がある。 たとえば、正方形を16個の長方形に分割する場合、次の二つではどちらが通信量が少ないであろうか?
domain_decomp_2db.png
domain_decomp_2d.png
  • 正方形を16個に分割するのだから、どちらも方法でも一つのMPIプロセスが担当する面積は等しい(最初の正方形の16分の1)。 だが、下の二つの図を見ればわかるとおり、長方形よりも正方形に近い方が通信量が少ない。
domain_decomp_2d_points_00.png
domain_decomp_2d_points_01.png
  • 面積の等しい長方形の中で、4辺の長さの合計が最も小さいものは正方形である、ということを考えれば自明であろう。

 
 

授業アンケート

今回の演習内容はどうでしたか?(どれか一つ、一度だけ押してください。)

選択肢 投票
簡単すぎた 0  
難しすぎた 0  
ちょうどよかった 0  
 
 
 

質問、コメントなど自由にどうぞ

「お名前」欄は空欄で可。

コメントはありません。 コメント/7.実践編?

お名前:

as of 2024-04-23 (火) 21:07:48 (7573)