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