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プロセスにメッセージ送信)
© Copyright 2024 ExpyDoc