スライド 1

phononの分散関係の計算
-カイラルナノチューブ(18,3)-
齋藤グループ
小林 直樹
2003.5.30
プログラムの実行
(1) 座標計算
プログラム tube-xyz1.f
(2) 最近接情報データ
プログラム saikin1.f
この計算に
非常に時間が
掛かる
(3) tube の phonon の分散関係
プログラム tu-phonon1.f
コンパイラ
tube
GNU Fortran 77
wire
DIGITAL Fortran 77
計算時間
tube
wire
Pentium4
4時間28分
Xeon
4時間38分
Alpha
5時間24分
MPIへの対応①
-新しく追加-
include 'mpif.h'
include ‘nk-size’ の下に追加
integer myrank, tnode, error
include ‘mpif.h’ の下に追加
call mpi_init(error)
call mpi_comm_rank(MPI_COMM_WORLD, myrank, error)
call mpi_comm_size(MPI_COMM_WORLD, tnode, error)
変数宣言の下に追加
call mpi_finalize(error)
メインプログラムの stop の上に追加
MPIへの対応②
-編集-
do 20 i=1,nj
メイン do ループの開始部分
lb = nj/tnode
lc = mod(nj,tnode)
if(myrank+1.le.lc) then
is = myrank*lb+myrank+1
ie = is + lb
else
is = myrank*lb+lc+1
ie = is + lb - 1
end if
計算回数をプロセス数に分割
doループで計算開始
Fortranソースファイル
do 20 i=is,ie
MPI実行時のエラー
-2プロセス-
167.244732086528
167.244732086528
T = 27.9346881484990
T = 27.9346881484990
3.14159265358979
do 20 i,nj =
1
100
3.14159265358979
do 20 i,nj =
51
100
back deigch nnv=
0
e(j)<0 ,i , j = -1.94576220049562D-002
end of do 20
do 20 i,nj =
2
100
back deigch nnv=
0
end of do 20
do 20 i,nj =
52
100
back deigch nnv=
0
e(j)<0 ,i , j = -1.91680048132009D-002
end of do 20
do 20 i,nj =
3
100
back deigch nnv=
0
end of do 20
1
1548
2
1548
MPI実行時のエラー
-4プロセス-
167.244732086528
167.244732086528
167.244732086528
167.244732086528
T = 27.9346881484990
T = 27.9346881484990
T = 27.9346881484990
T = 27.9346881484990
3.14159265358979
do 20 i,nj =
1
100
3.14159265358979
do 20 i,nj =
26
100
3.14159265358979
do 20 i,nj =
76
100
3.14159265358979
do 20 i,nj =
51
100
back deigch nnv=
0
e(j)<0 ,i , j = -1.94576220049562D-002
end of do 20
do 20 i,nj =
2
100
1
1548
エラーの比較
FORTRAN77
での計算結果
mpif 77 での
計算結果
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
e(j)<0 ,i , j =
-1.94576220049562D-002
-1.91680048132009D-002
-1.82991541008149D-002
-1.68510724552458D-002
-1.48237641860310D-002
-1.22172353223910D-002
-9.03149361193790D-003
-5.26654851925671D-003
-9.22411227420725D-004
-2.52867103E-14 1 1545
-1.90233719E-13 1 1546
-3.9641748E-13 1 1547
-0.019457622 1 1548
-0.0191680048 2 1548
-0.0182991541 3 1548
-0.0168510725 4 1548
-0.0148237642 5 1548
-0.0122172353 6 1548
-0.00903149361 7 1548
-0.00526654852 8 1548
-0.000922411227 9 1548
1
2
3
4
5
6
7
8
9
1548
1548
1548
1548
1548
1548
1548
1548
1548
プロセス数と計算時間の関係
np
2.5
1.5
1
0.5
m
s
1
2
11
43
2
1
7
15
3
0
45
4
4
0
33
19
5
0
26
42
6
0
23
33
7
0
19
7
8
0
18
56
9
0
22
45
4
0
1
2
3
4
5
プロセス数
6
7
8
9
計算時間×プロセス数
計算時間 [h]
2
h
3
2
1
0
1
2
3
4
5
6
プロセス数
7
8
9
問題点
各プロセスで計算
出力ファイルが各プロセスに分割
正しい出力ファイルが得られない
解決法及び今後の課題
サブルーチン 『MPI_GATHER』を用いてデータの結合
(サブルーチン機能 : 全プロセスから1プロセスにメッセージ送信)