Weitere ähnliche Inhalte Ähnlich wie Fortranが拓く世界、VSCodeが架ける橋 (20) Fortranが拓く世界、VSCodeが架ける橋3. 自己紹介
名前: 出川智啓(でがわ ともひろ)
所属: モダンFortran勉強会
経歴: 名古屋大学大学院情報科学研究科修了,博士(情報科学)
大学,高専での教育・開発を経て,製造業のIT子会社で熱流体
シミュレーションソフトウェア開発に従事.その傍ら,大学客員
教員として教育・研究に従事.
「ウケるかな?」という単純な理由でFortranによるオブジェク
ト指向プログラミングを始める.以来,物理シミュレーションプ
ログラムの効率的な学習・開発方法に興味を持つ.
専門: 流体工学,数値流体力学,混相流工学,HPC
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 3
4. モダンFortran勉強会の立ち位置
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 4
国内 国外
情報発信
ユーザ同士の交流
ツール開発
参加
情報収集
交流
普及・啓発
研究会開催
要望の具体化
情報発信
ユーザ同士の交流
要望の集約
Fortran標準化活動
JIS Fortran計画
Feature
List提出
用語策定・
翻訳
機能提案
運営協力
Fortran
規格策定
技術的議論
の中心
Fortranの
国際会議
参画
情報処理学会
情報規格調査会
SC22/
Fortran
WG 小委
員会
高性能
Fortran
推進協議
会
モダン
Fortran
勉強会
ISO/IEC
JTC1/SC22/
WG5
ANSI
X3J3
Fortran
Con
Fortran
-lang
Commun
ity
6. 対象範囲
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 6
数値計算法の
開発
並列化手法
の開発
💻💻
📖📖
🖊🖊
開発した方法
の実証
大規模シミュレーション
Fortran Fortran+OpenMP
CUDA Fortran
OpenACC
Fortran+OpenMP, MPI
CUDA Fortran
OpenACC
Fortranの主戦場
*掲載許可取得済み
8. 14 15 16 22 23 246 7 8-2 -1 0
配列添字は1から?
範囲無指定なら1始まり
範囲指定すれば整数型変数の取れる任意の範囲
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 329 10 11 17 18 19 25 26 27 33 34 35
is = (rank-1)*num_elem + 1
ie = (rank )*num_elem
allocate(f(is-3:ie+3))
rank=1 rank=2 rank=3 rank=4
Send(f(ie-2:ie ), rank+1)
Recv(f(ie+1:ie+3), rank+1)
Recv(f(is-3:is-1), rank+1)
Send(f(is :is+2), rank+1)
send recv sendrecv
袖領域が左右3要素ずつ
あることが明確
袖領域と隣のランクのメモリとの対応が明確
9. テストやってないんでしょ?
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 9
物理現象
概念的モデル
数学モデル
解析モデル
解析結果
不確かさを考慮
した解析結果
物理モデル
実験計画
実験結果
不確かさを考慮
した実験結果
物理的モデル化数学的モデル化
実装
実験
不確かさの
定量的評価
離散化して実装
解析
不確かさの
定量的評価
Validation
(予備計算)
Code Verification
Calculation
Verification
定量的比較
物理現象を忠実に
模擬しているか?
数学モデルに従って
正しく記述されているか?
(ここがテスト)
メッシュ作成やデータ入力,
結果表示が正しく
行われているか?
ASME V&V 10-2006
10. 検証駆動開発の手順
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 10
非定常
1点 空間1次元 空間2次元時間
空間
時間積分
移流
方程式
拡散
方程式
移流
方程式
拡散
方程式
⑧ ⑨ ⑩ ⑪ ⑫
1階差分 1階差分 2階差分
x方向
1階差分
x方向
2階差分
y方向
1階差分
y方向
2階差分
定常
① ② ③ ④
⑤
⑥
⑦
Laplace
方程式
Poisson
方程式
Laplace
方程式
Poisson
方程式
⑬
⑭
⑮
⑯
(
空
間
平
衡
)
Navier-Stokes方程式
Taylor-
Green渦
Cavity
流れ
⑰ ⑱
12. 計算科学*(Computational Science & Engineering)
理論,実験と並ぶ第3の科学
◦ 計算機科学,応用数学,理工学から孤立せず,
つながりを強化
◦ 計算科学はデータ科学も包括
計算科学という概念の形成
◦ ハードウェアの進展
◦ 性能を引き出すソフトウェア技術の進展
◦ 科学技術計算のためのアルゴリズムの進展
FORTRANが駆動したと言っても過言ではない
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 12
計算機科学
=コンピュータの
高度利用
応用数学
=計算アル
ゴリズム
理工学
=現象への
適用
計算科学
*金田,笹井監修,超自由度系の新しい科学,共立出版,東京,2010.
13. 良い道具は世界観を変える
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 13
🔬🔬🔭🔭
宇宙に対する考え方を変えた ミクロな世界に対する考え方を変えた
🔍🔍
遠くのものを拡大して観察 小さなものを拡大して観察
望遠鏡 顕微鏡計算科学
物理現象を再現して観察
変革や開拓を担う人を
育てることも必要
*望遠鏡,顕微鏡の例は,金田,笹井監修,超自由度系の新しい科学,
共立出版,東京,2010を参照
16. 開発環境の構築
コンパイラ
◦ Absoft
◦ Cray
◦ Fujitsu
◦ GNU
◦ HP
◦ IBM
◦ Intel
◦ NAG
◦ Oracle
◦ PathScale
◦ PGI
◦ Flang
開発環境(エディタ)
◦ Absoft Pro Fortran
◦ Atom
◦ Code::Blocks
◦ emacs
◦ Eclipse
◦ FTranProjectBuilder
◦ Geany
◦ Kate
◦ PyCharm
◦ Simply Fortran
◦ Sublime Text 2
◦ Vim
◦ Visual Studio
◦ VS Code
◦ Zeus
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 16
所望の機能
◦ 構文強調
◦ 自動補完
◦ 自動フォーマット
◦ コードスニペット
◦ 定義・参照への移動
◦ 関数・構造体の一覧
◦ リファクタリング
◦ プロジェクト構成
◦ 任意コンパイラ対応
◦ ビルド・実行
◦ デバッグ
◦ バージョン管理
◦ ターミナル作業
◦ 遠隔での編集
× ×
17. VSCode
VSCode+拡張なら大半の機能を利用可能
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 17
◦ 遠隔での編集◦ プロジェクト構成
◦ ビルド・実行
◦ 自動フォーマット◦ デバッグ◦ 構文強調
◦ 自動補完
◦ 定義・参照へ移動
◦ 関数・構造体の一覧
◦ リファクタリング
◦ 構文強調
◦ 自動補完
◦ コードスニペット
◦ ターミナル作業
◦ 任意コンパイラ対応(+ tasks.json)
◦ バージョン管理
Modern
Fortran
FORTRAN
IntelliSense
Fortran
Breakpoint
Support
fprettify CMake Remote-SSH
+
19. Modern Fortran Docker
VSCode以外の要求ソフトウェア多過ぎ問題
◦ gfortran - Modern Fortran拡張に必要
◦ gdb - デバッグに必要
◦ Python - FORTRAN IntelliSense拡張, fprettify拡張に必要
◦ CMake - CMake拡張に必要
◦ make - CMakeの動作に必要
◦ その他 - Fortranコンパイラの要求するソフトウェア(VS等)
モダンFortran勉強会のメンバーがModern Fortran Dockerを作成中
◦ https://github.com/mmer547/docker/tree/master/fortran_container
◦ ゆくゆくはCMakeをfpm(Fortran Package Manager)に置き換え
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 19
23. 変数の型宣言
型名+種別(kind)で区別
◦ kind=バイト数とは規定されていない
◦ kind(), selected_int_kind(), selected_real_kind()で指定
◦ Fortran 20032008でkindとバイト数を対応付ける定数を導入
◦ 定数はiso_fortran_envモジュールで定義
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 23
integer(selected_int_kind(r=桁数)) :: an_integer_variable
integer(kind(9223372036854775807)) :: another_integer_variable
real(selected_real_kind(r=桁数,p=指数範囲)) :: a_real_variable
real(kind(0d0)) :: another_real_variable
use,intrinsic :: iso_fortran_env, only:int32, real64
integer(int32) :: a_32bit_integer_variable
real(real64) :: a_64bit_real_variable
24. 構文の記述
Fortranの構文の基本
◦ [名前:] 構文名 [構文のオプション]
end 構文名 [名前]
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 24
program main
...
end program main
SOR_Convergence: do while(error >= Err_Tolerance)
...
end do SOR_Convergence
function do_something() result()
...
end function do_something
26. ユーザスニペット
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 26
"Using iso_fortran_env module": {
"prefix": "usf",
"body": [
"use,intrinsic :: iso_fortran_env"
],
"description": "Using iso_fortran_env module"
},
"Declaration of binary64": {
"prefix": "r8",
"body": [
"real(real64)"
],
"description": "Declaration of binary64"
},
27. ユーザスニペット
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 27
"main routine template": {
"prefix": "prog",
"body": ["program $1",
" use, intrinsic :: iso_fortran_env",
" implicit none",
" $0",
"end program $1"],
"description": "main routine template"
},
"allocation inspection": {
"prefix": "allocated?",
"body": "if(.not.allocated($1)) allocate($1($0))",
"description": "allocation inspection"
},
30. リモートで実行
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 30
ssh
コンパイル
ジョブ投入
ローカル
ログインノード
ssh
コンパイル
実行
ビジュアル環境
ターミナル(全ての作業)
コンパイル
実行
*掲載許可取得済み
34. リモートで実行
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 34
ビジュアル環境
+統合ターミナル(必要最低限のコマンド実行)
ssh
コンパイル
ジョブ投入
ローカル
ログインノード
ssh
コンパイル
実行
コンパイル
実行
*掲載許可取得済み
39. Fortran撲滅論
起源は1961年
We wish to obsolete FORTRAN and scrap it, not
perpetuate it.
R.W. Bemer
1990年代以前 FORTRANが挑戦を受ける
1990年代以降 Fortran撲滅論が当然という風潮
◦ 古いから滅ぼさなければならない
◦ 古い言語を使っている,知識を更新できない劣った人達と共に滅ぼす
べきだ
Nov. 21st, 2020 VS CODE CONFERENCE JAPAN 39
https://qiita.com/cure_honey/items/71a78657225573aad471