PM
MPI
②
③
④
⑤
⑥
①
ネットワーク
ネットワーク構成 構成 ノード数
ノード数 クラスタ名 クラスタ名 [New]
[New]
GUIで簡単クラスタ構築
詳しい資料は 詳しい資料は 詳しい資料は 詳しい資料は 弊社スタッフまで 弊社スタッフまで 弊社スタッフまで 弊社スタッフまで
第三回 第三回 第三回
第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
VNC: リモートデスクトップツール
VNC クライアントの起動
http://www.realvnc.com/
遠隔に 遠隔に
遠隔に 遠隔にLinux Linuxの の のGUI の GUIを使える を使える を使える を使える
コンパイル: mpicc
– MPI ライブラリが自動的にリンクされる
– gcc のオプション( -l や -o )をそのまま使える
• ホームディレクトリでコンパイル(推奨)
– 全ノードで共有されているため
> mpicc matmul-mpi.c
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
実行: mpirun
• マシンファイル
– OpenMPI で利用対象とするノードの情報
– /usr/local/openmpi1.2.8-intel91/etc/openmpi-default-hostfile node01 slots=2
← ←
← ← ノード上のプロセッサ数 ノード上のプロセッサ数 ノード上のプロセッサ数 ノード上のプロセッサ数 node02 slots=2
node03 slots=2 node04 slots=2
> mpirun --hostfile マシンファイルのパス マシンファイルのパス マシンファイルのパス マシンファイルのパス
–np 計算に使う 計算に使う 計算に使う 計算に使う CPU コア総数 コア総数 コア総数 コア総数 ./a.out
おまけ: rank 割当て変更方法
• --byslot 幅優先 • --bynode 深さ優先
> mpirun --hostfile マシンファイルのパス マシンファイルのパス マシンファイルのパス マシンファイルのパス
–np 計算に使う 計算に使う 計算に使う 計算に使う CPU コア総数 コア総数 コア総数 コア総数 -- --byslot byslot ./a.out
0 1 0 1 2 3 4 5 6 7
0 0 4 11 5 22 6 33 7 node01
node02 node03 node04
node01 node02 node03 node04
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
画像ビューア: GQView
S
Slide show
休憩タイム
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
2 次元熱伝導 次元熱伝導 次元熱伝導 次元熱伝導
• 熱伝導は基本的な物理現象の一つ
• 熱伝導方程式から数値的に解析可能
)
( 2
2 2
2
y T x
a T t
T
∂ + ∂
∂
= ∂
∂
∂
] /
[ ] [
] /
[ ] / )[
/(
3 2
kgK J
c
m
mK W
s m c a
比熱 密度
熱伝導率
…
…
…
=
ρ λ
ρ λ
] [ ,
] [
] [
m y
x
t t
K T
座標 時間
温度
…
…
…
ある場所と、
ある場所と、 ある場所と、
ある場所と、
その近傍の温度を基にして、
その近傍の温度を基にして、
その近傍の温度を基にして、
その近傍の温度を基にして、
差分解法 差分解法 差分解法 差分解法
) ( , )
( , )
( 1 , )
( 1 , )
( , 1 )
( , 1 )
1 ( ,
2
) ( , )
( 1 , )
( 1 , 2
) ( , )
( , 1 )
( , 1 )
( , )
1 ( ,
) 4
(
2 ) ( 2
/ 2
n j i n
j i n
j i n
j i n
j i n
j i n
j i
n j i n
j i n
j i n
j i n
j i n
j i n
j i n
j i
T T
T T
T T
T
y
T T
T x
T T
a T t
T T
h t h
y x
+
− +
+ +
=
∆
− + +
∆
−
= +
∆
−
− +
− + +
− +
− + +
∆
=
=
∆
=
∆
γ
γ とすると、
、 とから
格子が等間隔であるこ
)
( 2
2 2
2
y T x
a T t
T
∂ + ∂
∂
= ∂
∂
∂
差分法で用いる形に変換 差分法で用いる形に変換 差分法で用いる形に変換 差分法で用いる形に変換
Copyright (C) 2009 HPC SYSTEMS, Inc. All
逐次版の動作 逐次版の動作 逐次版の動作 逐次版の動作
T_new[i][j] = gamma*(Te + Tw + Tn + Ts - 4.0*T[i][j]) + T[i][j];
• Tw = T[i-1][j];
• Te = T[i+1][j];
• Ts = T[i][j-1];
• Tn = T[i][j+1];
T T
T T
T T
T i , ( n j + 1 ) = γ ( i + ( n 1 , ) j + i − ( n 1 , ) j + i , ( n j + ) 1 + i ( , n j − ) 1 − 4 i ( , n j ) ) +
※本プログラムは、大分大学工学部生産システム工学科
計算条件 計算条件 計算条件 計算条件
格子サイズは 256x256
境界以外の領域全体は 300 ℃
境界条件
• 左端に幅 1 格子、高さ 128 格子の熱源
• 熱源の温度は 800 ℃
• 熱源以外の境界は、断熱条件
[物質の性状]
密度 7.8e3; /* kg / (m^3) */
熱伝導率 420.0; /* J/(kg K) */
比熱 50.0; /* W/(m K) */
Copyright (C) 2009 HPC SYSTEMS, Inc. All
逐次版 逐次版
逐次版 逐次版 実行 実行 実行 実行
差分法の並列化 差分法の並列化 差分法の並列化 差分法の並列化
RANK0 担当範囲 RANK1 担当範囲
Copyright (C) 2009 HPC SYSTEMS, Inc. All
RANK0 担当範囲
分割境界での計算 分割境界での計算 分割境界での計算 分割境界での計算
RANK1 担当範囲
この点を計算するための
データが、隣の領域にある
並列版のソースコード 並列版のソースコード 並列版のソースコード
並列版のソースコード ( ( ( ( pfdm2d_mpi.c 抜粋) 抜粋) 抜粋) 抜粋)
if( rank != 0 ) {
/* send to left side */
for(j=0 ; j<NH ; j++) buf[j] = T[0][j];
MPI_Send(buf, NH, MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD);
}
if( rank != nproc - 1 ) {
/* receive from right side */
MPI_Recv( T_Right,NH,MPI_DOUBLE,rank+1, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE) ; }
右の領域から、左の領域へ 右の領域から、左の領域へ 右の領域から、左の領域へ 右の領域から、左の領域へ 情報を送る処理
情報を送る処理 情報を送る処理 情報を送る処理
Copyright (C) 2009 HPC SYSTEMS, Inc. All
穴埋め問題 穴埋め問題 穴埋め問題 穴埋め問題
if( rank != nproc - 1) { /* send to right side */
for(j=0 ; j<NH ; j++)
buf[j] = T[my_nw-1][j];
MPI_Send( , NH, MPI_DOUBLE, , 1, MPI_COMM_WORLD);
} if(rank != 0 ) {
/* receive form left side */
MPI_Recv( ,NH,MPI_DOUBLE, , 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE );
}
左の領域から、右の領域へ 左の領域から、右の領域へ 左の領域から、右の領域へ 左の領域から、右の領域へ 情報を送る処理
情報を送る処理 情報を送る処理
情報を送る処理
アプリケーションの使い方解説 アプリケーションの使い方解説 アプリケーションの使い方解説 アプリケーションの使い方解説
実行方法
> mpirun –np N ./a.out M
4 コア 4 並列設定: N=4, M=4 8 コア 8 並列設定: N=8, M=8
time コマンドを併用すると、
全体の処理にかかる時間を 計測することが可能
> time mpirun –np N ./a.out M
Copyright (C) 2009 HPC SYSTEMS, Inc. All
<実習:コンパイル>
<実習:コンパイル>
<実習:コンパイル>
<実習:コンパイル>
> mpicc –o pfdm2d pfdm2d_mpi.c alloc.c
※ -o オプションは、実行ファイルの名前を指定する。( -o オプションなしにした場合、デ フォルト設定として、同じディレクトリに a.out という実行ファイルが生成される。)
>
> >
> mpirun –np 2 pfdm2d
<実習:答え合わせ>
<実習:答え合わせ>
<実習:答え合わせ>
<実習:答え合わせ>
if( rank != nproc - 1) {
/* send to right side */
for(j=0 ; j<NH ; j++)
buf[j] = T[my_nw-1][j];
MPI_Send( buf,NH, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD );
} if( rank != 0 ) {
/* receive form left side */
MPI_Recv( T_left, NH,MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE );
}
Copyright (C) 2009 HPC SYSTEMS, Inc. All
<分割数と速度向上率>
<分割数と速度向上率>
<分割数と速度向上率>
<分割数と速度向上率>
0 2 4 6 8 10 12 14 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
速 度 向 上 率 速 度 向 上 率 速 度 向 上 率 速 度 向 上 率
nproc
Linear 速度向上率 多項式(速度向上率)
付録 付録 付録
付録1. MPIで用いる変数の型(一部) で用いる変数の型(一部) で用いる変数の型(一部) で用いる変数の型(一部)
MPI_CHAR char
MPI_BYTE unsigned char と同様
MPI_SHORT short
MPI_INT int
MPI_LONG long
MPI_FLOAT float
MPI_DOUBLE double
MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long
Copyright (C) 2009 HPC SYSTEMS, Inc. All
応用・実習2: N 体問題
重力系シミュレーションを
並列化しよう
お話しすること
• N 体問題を MPI を使って並列化します!
– 基本アルゴリズム – 並列性の理解
– 並列解法の理解
– MPI_Send/Recv を書く(実習)
– 実行時間測定(実習)
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
N 体問題
• N 個の質点間の相互作用の力の方程式を 解いて行う物理シミュレーション
– 一定時間後の速度と位置は?
– 計算量が莫大(質点数の2乗)
銀河形成 銀河形成 銀河形成
銀河形成の の の研究等に の 研究等に 研究等に 研究等に重要 重要 重要 重要
2 12
2 1
r m G m
F =
解説順序
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
2
2 体問題 体問題 体問題 体問題 体問題 体問題 体問題 体問題 逐次版 逐次版 逐次版 逐次版 逐次版 逐次版 逐次版 逐次版
N
N 体問題 体問題 体問題 体問題 体問題 体問題 体問題 体問題 逐次
逐次 逐次 逐次 逐次 逐次 逐次 逐次版 版 版 版 版 版 版 版
N
N 体問題 体問題 体問題 体問題 体問題 体問題 体問題 体問題 並列
並列 並列 並列 並列 並列 並列 並列版 版 版 版 版 版 版 版
差分化 差分化 差分化 差分化 された された された された 式って?
式って? 式って?
式って?
並列化前 並列化前 並列化前 並列化前 ベースを ベースを ベースを ベースを
掴もう 掴もう 掴もう 掴もう
並列化 並列化 並列化 並列化 すると?
すると?
すると?
すると?
基本: 2 体問題のアルゴリズム
• 質点1の万有引力の x 成分:
fx 2 = { 万有引力の大きさ } ・ {x の方向余弦 }
=
• 運動方程式を立てて離散化(差分化):
– 質点1の速度:
– 質点1の位置:
ここから質点が増えた数だけ、万有引力が加算されると考えればよい
} {
} {
12 2 1
2 12
2 1
r x x
r m
G m • • −
t m
fx v
v k + 1 = k + 2 / 1 * ∆
t v
t v
x
x k + 1 = k + k * ∆ + ∆ k / 2 * ∆
[x
1,y
1]
m
1[x
2,y
2]
m
22 体: O(2) の計算量
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
逐次版 N 体問題のアルゴリズム
• 各質点について( N 回)
– 全ての質点について( N-1 回)
– 働く力の総和を計算する – 次の時刻の座標として
座標を更新する
aa
bb cc dd
座標と質量から 座標と質量から 座標と質量から 座標と質量から 座標と質量から 座標と質量から 座標と質量から 座標と質量から
相互作用の力を計算する 相互作用の力を計算する 相互作用の力を計算する 相互作用の力を計算する 相互作用の力を計算する 相互作用の力を計算する 相互作用の力を計算する 相互作用の力を計算する
2 12
2 1
r m G m
F =
N 体: O(N 2 ) の計算量
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)
N 体:逐次版ソースコード概要( 1/2 )
void calculate_forces(void) { int i, j;
coords direction;
body **b = barray;
double distance, magnitude;
for (i = 0; i < N; i++) { for (j = 0; j < N; j++) {
if (i == j) continue;
distance = sqrt( pow((b[i]->p.x - b[j]->p.x), 2.0) + pow((b[i]->p.y - b[j]->p.y), 2.0) );
magnitude = (G * b[i]->m * b[j]->m) / pow(distance, 2.0);
direction.x = b[j]->p.x - b[i]->p.x;
direction.y = b[j]->p.y - b[i]->p.y;
b[i]->f.x = b[i]->f.x + magnitude * direction.x / distance;
b[i]->f.y = b[i]->f.y + magnitude * direction.y / distance;
} } }
質点間の距離 質点間の距離 質点間の距離 質点間の距離
力の総和 力の総和 力の総和 力の総和 相互作用の力 相互作用の力 相互作用の力 相互作用の力 O(N 2 )
※反作用の力も同時に求められるが、それを並列化すると
隣のプロセスを触ることになり複雑化するため今回は考えない
N 体:逐次版ソースコード概要( 2/2 )
void move_bodies(void) { int i;
coords deltav;
coords deltap;
body **b = barray;
for (i = 0; i < N; i++) {
deltav.x = b[i]->f.x / b[i]->m * DT;
deltav.y = b[i]->f.y / b[i]->m * DT;
deltap.x = (b[i]->v.x + deltav.x / 2) * DT;
deltap.y = (b[i]->v.y + deltav.y / 2) * DT;
b[i]->v.x = b[i]->v.x + deltav.x;
b[i]->v.y = b[i]->v.y + deltav.y;
b[i]->p.x = b[i]->p.x + deltap.x;
b[i]->p.y = b[i]->p.y + deltap.y;
/* Reset force vector */
b[i]->f.x = 0.0;
b[i]->f.y = 0.0;
} }
次 次 次
次の時刻での位置 の時刻での位置 の時刻での位置 の時刻での位置
第三回第三回
第三回第三回MPI実践セミナー実践セミナー実践セミナー実践セミナー Copyright (C)