18:30:54)追加された行はこの色です。削除された行はこの色です。現在(&lastmod;)作成中です。書いている内容も&color(#ff0000){大幅に変わる};可能性が高いので注意。このページは現在(&_now;)作成中です。引き続き、正方形領域の熱伝導問題(平衡温度分布)を解く例題を扱う。これまでMPIで並列化を行うにあたり、正方形領域のy方向(j方向)に複数の領域に分割し、それぞれの領域に一つずつMPIプロセスを割り当てて並列化していた。このような並列化を1次元領域分割による並列化という。下の図は正方形領域を16個の領域に分割した例である。同様に二次元領域分割による並列化も考えられる。正方形を16個の領域に2次元的に分割すると下の図のようになる。計算速度の点で見ればどちらも同じと思うかもしれない。熱伝導問題(床暖房システム)を例にとり、本格的な並列シミュレーションを行う。プロセス間の通信にかかる時間がゼロであれば、そのとおりだが、実際にはプロセス間の通信(MPI_SENDやMPI_RECV等)には有限の—それどころかかなり長い—時間がかかる。1次元空間を格子点で離散化した上で、MPIでプロセス間通信を行う場合を考える。計算格子には2種類ある。一つは、その上で計算だけを行う格子。一つはMPI通信のデータを送ったり、受けたりする格子である。(一番外側から2番目の格子は計算も通信も行う。一つのMPIプロセスが行う通信の量は、通信を行う格子点の数に比例する。通信に時間がかかる場合、通信を行う格子点は少ないほうが望ましい。下の図は正方形領域を400個の格子点で離散化した場合を示す。これを4つのMPIプロセスで並列化することを考える。1次元領域分割の場合、下の図のようになる。2次元領域分割の場合、同じく4つのMPIプロセスで並列化すると、下の図のようになる。明らかにプロセスあたりの通信量は2次元領域分割の方が少ない。同じMPIプロセス数による2次元領域分割でも様々な可能性がある。正方形を16個に分割するのだから、どちらも方法でも一つのMPIプロセスが担当する面積は等しい(元の正方形の16分の1)。mn個のMPIプロセスを用いて2次元領域分割をする場合を考える。mn=16の時、最適な領域分割数mとnは何か。下の二つの図を見ればわかるとおり、長方形よりも正方形に近い方が通信量が少ない。面積の等しい長方形の中で、4辺の長さの合計が最も小さいものは正方形である、ということを考えれば自明であろう。領域分割による並列化を行うときに注意すべき点は、MPIプロセスの配置方法である。2次元領域分割の場合、あるプロセスに注目すると、最も頻繁に通信する相手は、隣(東西南北)の4つのプロセスである。隣同士の通信がもっとも通信速度的に「近い」位置に配置することが望ましい。MPI関数の一つMPI_CART_CREATEを使えば、この点を自動的に考慮した最適な配置でプロセスを多次元に分配してくれる。[#k801d0b1]今回の演習内容はどうでしたか?(どれか一つ、一度だけ押してください。[#o9c99adc]「お名前」欄は空欄で可。