複数の凝結成分混合比に対し同じ処理を行うことが多い. そのため凝結成分混合比を格納する配列は, その種類を表す次元を追加することにした.
変数名, それに対する関数名は以下のルールに沿って名前付けしている.
配列の次元の数と接頭詞の数を一致させる. 接頭詞名は任意の次元を表すということで "a" とする.
変数名の例) ◯ xza_MixRtAl(:,:,:) × xz_MixRtAl(:,:,SpcNum) × xz_MixRtH2OAl(:,:)
関数の入力配列については必ずしも一致させなくてよい. 既存の配列関数の次元を無理に拡張する必要はない.
関数名の例) ◯ xza_AdvScalar_xza_pz_xr(xza_MixRtNl, pz_VelXNl, xr_VelZNl) ◯ xz_AdvScalar_xz_pz_xr(xza_MixRtNl(:,:,scp), pz_VelXNl, xr_VelZNl)
配列を定義する際に 2 次元配列を 3 次元配列に拡張しておく
例) ... real(8) :: xza_LatentHeat(:,:,:) ! 潜熱(空間2次元, 成分1次元の配列) real(8) :: xza_Exner(:,:,:) ! エクスナー関数, 第3次元はダミー real(8) :: xza_Wrok(:,:,:) ! 作業配列 ... ! L/Cpπを計算 ! xza_Work = xza_LatentHeat / CpDry / xza_Exner ...
第 3 次元方向には明示的に do ループを回す
例) ... real(8) :: xza_LatentHeat(:,:,:) ! 潜熱(空間2次元, 成分1次元の配列) real(8) :: xz_Exner(:,:) ! エクスナー関数(空間2次元の配列) real(8) :: xza_Wrok(:,:,:) ! 作業配列 ... ! L/Cpπを計算 ! do i = 1, SpcNum xza_Work(:,:,i) = xza_LatentHeat(:,:,i) / CpDry / xz_Exner(:,:) end do ...
中島 D 論の設定を模した設定での計算時間を F77 版 deepconv で計算した場合と比較.
診断結果
Real Time (sec) : 5034.168499 User Time (sec) : 4831.629951 Sys Time (sec) : 31.166349 Vector Time (sec) : 4148.497315 Inst. Count : 368012728048. = 3.68e11 V. Inst. Count : 76307870792. = 7.63e10 V. Element Count : 15815891446632. = 1.58e13 FLOP Count : 5464992091877. = 5.46e12 MOPS : 3333.781036 MFLOPS : 1131.086641 VLEN : 207.264222 V. Op. Ratio (%) : 98.189023 Memory Size (MB) : 80.031250 MIPS : 76.167408 I-Cache (sec) : 61.197880 O-Cache (sec) : 297.626815 Bank (sec) : 211.926124 Start Time (date) : 2006/11/09 16:45:16 End Time (date) : 2006/11/09 18:09:10
ステップ数では、上の4倍程度?leapfrog の dt をどう数えているか不明)
経過時間 (秒) : 3079.189877 ユーザ時間 (秒) : 3023.975054 システム時間 (秒) : 20.424250 ベクトル命令実行時間 (秒) : 2963.736662 全命令実行数 : 223385416231. = 2.23e11 ベクトル命令実行数 : 105500763338. = 1.06e11 ベクトル命令実行要素数 : 23461688851033. = 2.35e13 浮動小数点データ実行要素数 : 11402358113232. = 1.14e13 MOPS 値 : 7797.542334 MFLOPS 値 : 3770.652174 平均ベクトル長 : 222.384067 ベクトル演算率 (%) : 99.500056 メモリ使用量 (MB) : 64.031250 MIPS 値 : 73.871448 命令キャッシュミス (秒) : 19.829645 オペランドキャッシュミス (秒) : 6.877994 バンクコンフリクト時間 (秒) : 12.538144