1 / 27

多圏間・階層間結合モデル カップラーの開発

多圏間・階層間結合モデル カップラーの開発. 寺田直樹( NICT/JST )、深沢圭一郎( NICT )、 金田香織(京大理)、陣英克( NICT )、 田中高史(九大)、品川裕之( NICT ). 本研究の目的. 前回の検討会では、開発者ごとに異なるディレクトリでモデル(モジュール)開発を行い、ディレクトリを跨いでモデル結合を行う方法案を紹介した 今回の発表では、モデル結合の具体例、特にインターフェース部の紹介と説明を行う       個人作業 → 多人数での作業      まずはインターフェースの整備が必要. 本研究の目的は”基盤部”の整備

cyrus-tyson
Download Presentation

多圏間・階層間結合モデル カップラーの開発

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 多圏間・階層間結合モデルカップラーの開発 寺田直樹(NICT/JST)、深沢圭一郎(NICT)、 金田香織(京大理)、陣英克(NICT)、 田中高史(九大)、品川裕之(NICT)

  2. 本研究の目的 • 前回の検討会では、開発者ごとに異なるディレクトリでモデル(モジュール)開発を行い、ディレクトリを跨いでモデル結合を行う方法案を紹介した • 今回の発表では、モデル結合の具体例、特にインターフェース部の紹介と説明を行う       個人作業 → 多人数での作業      まずはインターフェースの整備が必要

  3. 本研究の目的は”基盤部”の整備 • 共有して初めて意味を成す • 誰でも自由に利用して頂きたい (ボランティアベースで提供。×特定グループのプロジェクト) • 助言、批判、協力 大歓迎です • 目標とするインターフェース • 多人数での作業が可能。加えて、個人のサイエンスを楽しむことも可能 • モデルの単なる結合から、究極コード(ブラソフ等)への連続的移行が可能 • 複数領域モデルの結合 • 計算エンジンの切り替え • 便利ツールの共有化 ... などを自由に行える • 並列化・非並列化コードを吸収 • (ペタコンを狙うなら非並列は論外ですが。。)

  4. 本発表では、開発中のインターフェース部(カップラーと接合ルーチン)を紹介本発表では、開発中のインターフェース部(カップラーと接合ルーチン)を紹介 • 現在は近くの研究者と不定期に議論 • リソースを共有出来る場所を見つけて公開して行きたい

  5. 適用範囲例1: 宇宙天気モデル            → 磁気嵐シミュレータ • 多くの開発要素 • 一人のスーパーマンから多人数での開発へ [Toth et al., 2005]

  6. 適用範囲例2: HZs • G,M,K型恒星放射スペクトル観測(I. Ribas, Spain) • 恒星風, CMEモデル(M. Khodachenko, Austria) • 惑星熱圏モデル(Y. Kulikov, Rusia) • 惑星外圏モデル(H. Lammer, Austria) • 惑星電磁圏モデル(N. Terada, Japan) • 隕石デリバリー, 環境進化・気候モデル, ... • ISSIチームプロポーザル(2007-) • Europlanet, ADAM&M [Lammer et al., Astrobiology, 2007] 200個以上の系外惑星が発見 地球型も

  7. 今回、開発したカップラーによって結合した3モデル今回、開発したカップラーによって結合した3モデル 外圏底より上側 粒子モデル [Kaneda et al.] 太陽風-火星電離圏MHDモデル [Terada et al.] 外圏底より下側 two-streamモデル [Kaneda et al.]

  8. モデル結合方法 簡易結合からソース公開まで、4段階の開発レベルを用意 • レベル1 • カップラー(最上位ルーチン)とその接合部(接合ルーチン)の編集だけでモデル結合を実現。下位ルーチンはなるべく触らないで済むようにする • 下位ルーチンは実行形式(静的ライブラリ)のみ公開 • Grid converterはカップラー内で用意 • 結合変数は、接合ルーチン内でMKS単位系に変換 • レベル2 • 結合変数の規格化量・規格化ルーチンを共有化 • レベル3 • 下位ルーチンにおいてもプログラムの記述形式を統一 • 下位ルーチンも汎用性のあるもの(引数で呼ぶ形)にする • レベル4 • 下位ルーチンも含めてソース公開

  9. カップラーと接合ルーチンの記述ルール • 気象庁・気象研究所で策定されたルールに準拠 • 基本的には、電脳倶楽部dcmodelのコーディングルールを踏襲させて頂く • 変数命名法、配列代入文の上下限指定の省略は廃止(可読性はある程度犠牲にする)などが異なる • 用意された“ひな形”を編集して結合を実現 • カップラー • exm3_couple.f90 • 接合ルーチン • pkm3_ntmism.f90, pkm3_kkexsp.f90, pkm3_kfmgsm.f90, ... • Makefileのひな形も各所に用意 exm: execution module pkm: package module crm: constant reference module vrm: variable reference module

  10. ディレクトリ構成 kkexsp ntmism kfmgsm tuutlv couple beta (開発中コード) kkexsp_kfmgsm ... kkexsp_ntmism_kfmgsm

  11. ディレクトリ構成 静的ライブラリ libkkexsp.a(←pkm3_kkexsp.o, a.o, b.o, ...) を作成・公開 make.ink kkexsp ntmism kfmgsm tuutlv couple beta (開発中コード) Makefile_ar pkm3_kkexsp.f90 コード群(a.f90, b.f90, ...) kkexsp_kfmgsm ... kkexsp_ntmism_kfmgsm Makefile Makefile exm3_local.f90 静的ライブラリ(*.a)と exm3_couple.f90 を結合 Makefile_couple exm3_couple.f90

  12. ディレクトリ構成 静的ライブラリ libkkexsp.a を作成 libtuutlv.a make.ink kkexsp ntmism kfmgsm tuutlv couple beta (開発中コード) Makefile_ar 変数は引数で渡す pkm3_kkexsp.f90 Makefile_ar 計算エンジン部(ブラソフなど) 便利ツール群, ... コード群(a.f90, b.f90, ...) コード/ツールを用いたら、その ディレクトリ開発者(と共同開発者) を共著に入れるルール ⇒ 腕自慢の若手が活躍出来る場

  13. ディレクトリ構成 静的ライブラリ libkkexsp.a を作成 libtuutlv.a make.ink kkexsp ntmism kfmgsm tuutlv couple beta (開発中コード) Makefile_ar 変数は引数で渡す pkm3_kkexsp.f90 Makefile_ar 計算エンジン部(ブラソフなど) 便利ツール群, ... コード群(a.f90, b.f90, ...) 領域モデルの結合 ⇒ 計算エンジンの切り替え   便利ツール群の共有化 究極コードへの連続移行を視野に

  14. 結合の実践手順 • 手持ちのプログラムのメイン部分を以下の3つに分割 -init (初期値設定、ファイル読み込み部) -exe (メインループ部) -finalize (終了処理、ファイル書き出し部) • 接合ルーチン(pkm3_ntmism.f90 など)の”ひな形”の指定箇所に、分割したプログラムを挿入 • カップラー(exm3_couple.f90)の”ひな形”のサブルーチンコール部分と、結合変数に関する部分を書き換え • 必要に応じて grid converter を作成or書き換え (あと、細かい変更箇所が数カ所、、) exm: execution module pkm: package module crm: constant reference module vrm: variable reference module

  15. カップラー(exm3_couple.f90)の説明(1/5) PROGRAM exm3_couple !--------------------------------------------------------------------- ! Execution module ! Coupler of 'kkexst', 'kkexsp', and 'ntmism' ! kkexst : Kaori Kaneda, Exosphere two-stream model (open file no.*) ! kkexsp : Kaori Kaneda, Exosphere particle tracing model (open file no.*) ! ntmism : Naoki Terada, Takashi Tanaka, and Hiroyuki Shinagawa, ! Magneto-ionosphere MHD model (open file no.*) !--------------------------------------------------------------------- USE vrm3_couple ! MPI変数やexm3_couple内で使う変数を宣言 USE pkm1_kkexst USE vrm1_kkexst ! kkexstの結合変数を宣言 USE pkm3_kkexsp USE vrm3_kkexsp ! kkexspの結合変数を宣言 USE pkm3_ntmism USE vrm3_ntmism ! ntmismの結合変数を宣言 USE pkm3_ntmism2kkexsp IMPLICIT NONE ! ! Initialize ! ! ! MPI initialize ! (MPI初期化, MPI_INIT, MPI_COMM_SIZE, MPI_COMM_RANK) (MPI初期化, MPI_SPLIT, MPI_COMM_SIZE, MPI_COMM_RANK)

  16. カップラー(exm3_couple.f90)つづき(2/5) ! ! kkexst initialize ! CALL pkm1_kkexst_init(引数) ! 引数には主に結合変数が入る ! ! kkexsp initialize ! CALL pkm3_kkexsp_init(引数) ! ! ntmism initialize ! CALL pkm3_ntmism_init(引数) ! ! Grid conversion initialize (@ ntmism master PE) ! CALL ntmism2kkexsp_gconv_init(引数) ! ! Send to master PEs ! CALL MPI_BCAST(引数)

  17. カップラー(exm3_couple.f90)つづき(3/5) ! ! Main loop ! tim0_couple_t = 0.0_npr0_r tim0_couple_dt = 1.0e-0_npr0_r ! in [s] nlp0_couple_lmax = 1000 DO nlp0_couple_loop = 1, nlp0_couple_lmax ! ! kkexst exe ! CALL pkm1_kkexst_exe(引数) ! 引数には主に結合変数が入る ! ! kkexsp exe ! CALL pkm3_kkexsp_exe(引数) ! ! ntmism exe ! CALL pkm3_ntmism_exe(引数)

  18. カップラー(exm3_couple.f90)つづき(4/5) ! ! Grid conversion (@ ntmism master PE) ! CALL ntmism2kkexsp_gconv_exe(引数) ! ! Send to master PEs ! CALL MPI_BCAST(引数) ! ! Advance coupling variable ! fld3_kkexsp_nhi(変数範囲) = fld3_kkexsp_nhi_adv(変数範囲) fld3_kkexsp_noi(変数範囲) = fld3_kkexsp_noi_adv(変数範囲) fld3_kkexsp_no2i(変数範囲) = fld3_kkexsp_no2i_adv(変数範囲) fld3_kkexsp_nco2i(変数範囲) = fld3_kkexsp_nco2i_adv(変数範囲) fld3_kkexst_phai_u(変数範囲) = fld3_kkexst_phai_u_adv(変数範囲) tim0_couple_t = tim0_couple_t + tim0_couple_dt END DO ! ! Finalize !

  19. カップラー(exm3_couple.f90)つづき(5/5) ! ! kkexst finalize ! CALL pkm1_kkexst_finalize(引数) ! ! kkexsp finalize ! CALL pkm3_kkexsp_finalize(引数) ! ! ntmism finalize ! CALL pkm3_ntmism_finalize(引数) ! ! MPI finalize ! CALL MPI_FINALIZE(引数) STOP END PROGRAM exm3_couple

  20. 接合ルーチン(pkm3_ntmism.f90等)の説明 MODULE pkm3_kkexsp !--------------------------------------------------------------------- ! モジュールの説明 (open file no.*) ! 内部サブルーチンの簡単な説明 ! - pkm3_kkexsp_init : initialize calculation (public) ! - pkm3_kkexsp_exe : execute calculation (public) ! - pkm3_kkexsp_finalize : finalize calculation (public) !--------------------------------------------------------------------- IMPLICIT NONE PRIVATE ! private宣言で閉じ込め PUBLIC :: pkm3_kkexsp_init, & & pkm3_kkexsp_exe, & & pkm3_kkexsp_finalize INTEGER(KIND = 4), PARAMETER :: npr0_i = 4, & & npr0_r = 8, & & npr0_c = 1 ! ! ここで kkexsp コード群に共通の定数や変数を宣言(もしくは宣言モジュールを USE する) ! 例えば、、、 ! INTEGER(KIND = npr0_i), PARAMETER :: natom = 100000000 REAL (KIND = npr0_r), SAVE :: vel(natom)

  21. 接合ルーチン(pkm3_ntmism.f90等)の説明 CONTAINS SUBROUTINE pkm3_kkexsp_init(引数) ! 引数には主に結合変数が入る !------------------------------------------------------------------- ! 内部サブルーチンの説明 !------------------------------------------------------------------- IMPLICIT NONE ! ! ここで内部サブルーチンで用いる定数や変数を宣言 ! !------------------------------------------------------------------- ! Start main block ! ! ! ここにプログラムの初期化部分を挿入 ! ! ! End main block !------------------------------------------------------------------- RETURN END SUBROUTINE pkm3_kkexsp_init !---------------------------------------------------------------------

  22. 接合ルーチン(pkm3_ntmism.f90等)の説明 SUBROUTINE pkm3_kkexsp_exe(引数) ! 引数には主に結合変数が入る !------------------------------------------------------------------- ! 内部サブルーチンの説明 !------------------------------------------------------------------- IMPLICIT NONE ! ! ここで内部サブルーチンで用いる定数や変数を宣言 ! !------------------------------------------------------------------- ! Start main block ! ! ! ここにプログラムのメインループ部分を挿入 ! ! ! End main block !------------------------------------------------------------------- RETURN END SUBROUTINE pkm3_kkexsp_exe !---------------------------------------------------------------------

  23. 接合ルーチン(pkm3_ntmism.f90等)の説明 SUBROUTINE pkm3_kkexsp_finalize(引数) !------------------------------------------------------------------- ! 内部サブルーチンの説明 !------------------------------------------------------------------- IMPLICIT NONE ! ! ここで内部サブルーチンで用いる定数や変数を宣言 ! !------------------------------------------------------------------- ! Start main block ! ! ! ここにプログラムの終了処理部分を挿入 ! ! ! End main block !------------------------------------------------------------------- RETURN END SUBROUTINE pkm3_kkexsp_finalize !--------------------------------------------------------------------- END MODULE pkm3_kkexsp

  24. 並列実行時のモデル間データ(結合変数)伝送並列実行時のモデル間データ(結合変数)伝送 • MPIを用いて行う • 各モデルで master PE を定義 • 各モデルの接合ルーチン: master PEにデータを集める • カップラー: master PE 間でデータ通信 • 必要に応じて新コミュニケータを作成(以下パターン2では必要) • パターン1 • 全てのモデルがMPI非対応 (カップラーでのみMPIを利用) • パターン2 • いくつかのモデルがMPI対応 • パターン3 • 全てのモデルがMPI対応   (ペタコンでは必須?) モデル1 モデル2 モデル3 青:master PE BCAST (or SENDRECV) モデル1 モデル2 モデル3 GATHERV BCAST (or SENDRECV) モデル1 GATHERV モデル2 GATHERV モデル3 GATHERV

  25. 結合変数: 更新のタイミング 結合変数 nM 結合変数 nI 結合変数 nT t=t0 磁気圏モデル 電離圏モデル 熱圏モデル 結合変数は t=t0 ~ t0+dtcouple の間は固定 t=t0+dtcouple nM’ nI’ nT’ 更新

  26. 問題点、その他 • 問題点 • MPIを理解している人が一人は必要 → 一人ぐらいいるでしょう • 変数のネーミング → 検討中 • grid converterの一般化は困難 → 個別対応 • ファイル番号 → 開けたらすぐに閉める(例えばファイル番号10-19は一時的な開け閉め用とする)。開けっ放しのファイル番号はカップラーのコメント欄に明示 • 実数(整数?)の精度 → 結合変数に渡す際に double に統一 • grid conversionで保存則等は満たすべき → 将来の課題

  27. 問題点、その他 • その他 • どれぐらいの手間と時間がかかったか • 規格を決定してからは約10日。今やれば2〜3日 • 苦労したところ • MPIが絡むところがやっかい(だった) • 他モデル開発者とのやりとり • 金田さんからはA4で3枚の説明書きをもらった • 格子情報は電話で確認

More Related