• 検索結果がありません。

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

2

2 体: 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)

次 次 次

次の時刻での速度 の時刻での速度 の時刻での速度 の時刻での速度

t m

fx v

v k + 1 = k + 2 / 1 * ∆

t v

t v

x

x k + 1 = k + k * ∆ + ∆ k / 2 * ∆

deltav

deltav

N 体問題の並列性

aa bb

cc dd

計算 1,2 間に依存性がない 互いに独立して実行できる

=並列に計算できる 並列に計算できる 力の計算1 :

力の計算2 : 時刻 t1 :

2 ab

b a

r m G m

F =

2 d c

r m G m

F =

関連したドキュメント