参加メモ:「並列Fortranの現状と展望」~Fortranは絶滅危惧種なのか?~
イベント名:「並列Fortranの現状と展望」~Fortranは絶滅危惧種なのか?~
URL:http://site.hpfpc.org/home/events/parallel_fortran_sympo
日付:2015-08-18
参加者:80人くらい。
関連ツイート:https://twitter.com/senopen/status/633608746413899776
目次
- 並列Fortranの歴史と現状
- Fortran規格の歴史
- エクサスケール時代の Fortran の役割
- 航空宇宙技術研究所から宇宙航空研究開発機構にかけてのソフトウェア開発について
- 核融合プラズマ・シミュレーションでの Fortran での活用
- 大学のSX利用者から見たFortranプログラミング
- 富士通のFortranへの取り組み
- NECのFortranへの取り組み
- 計算機システムの進化とFortranの将来
- インテルのFortranへの取り組み
- XMP
- ディスカッション
- 懇親会
並列Fortranの歴史と現状
初期
- FORTRAN77
- PCF Fortran
共有メモリ向け。
PCF Fortran-77(1987)
OpenMPと比べて流行らなかった。
- いろんなベンダが実装。
Numerical Wind Tunnel:数値風洞。
解きたい問題があってできた。Navie-Stokes/ADI法。
ベンダがいろいろ作ったけど何一つ残らなかった。標準でなければ普及しない。
中期
Fortran90革命。
今まではCの部分集合だった。
- 形状を持つ。
- 部分配列。
配列演算は並列性がしやすい。
これを背景に出来たのが,HPF(High Performance Fortran)。
HPF1.0(1993)
HPF2.0(1997):ベンダのエゴで派生いろいろ。
2007年。
ユーザーの失望。
高性能とポータビリティは用意に得られない。ベンダ独自実装になるしかない。
HPFに関する取り組み。JAHPF。
- 言語仕様の検討。
- ユーザーの自動化への拡張機能
FortranができないとHPFもできない。
OpenMP:唯一成功している並列Fortran/C。
トレンドをおっている。
今後
PGAS:Partitioned Global Address Space。
Coarray Fortran:Fortran2008の実装。
質疑
- HPFの失敗の一つはコンパイラに要求しすぎたのでは。OpenMPは最小限。
- OpenMPは作りながらできた。HPFはできないから仕様を付け足してやろうとしている。
- OpenMPは最初から共有メモリだからうまくいった。HPFは分散メモリだから難しかった。
Fortran規格の歴史
江戸川大学。
Coarrayの話はしない。
Fortranの関わりはここ3年くらいの課題のため。
国際会議の規格にはでているが,普段の生活ではFortranとかかわりない。
1986:岩波FORTRAN辞典。FORTRAN77の仕様について書かれたもの。歴史とかを書いたもの。
1988:国際会議に出席。日本の規格を国際規格に盛り込もうと。
1993:詳解Fortran90。規格について詳しくわかりやすく書いてある本。の翻訳本。
なぜFortranが初期の言語で生き残ったか(FORTRAN辞典)。
- キーワードの冗長性など,言語の設計が的確だった。
- コンパイラの最適化が極めて強力だった。
- IBMがソフトウェアを重視した。
- IBMとIBM 704が商業的に成功した。
古典的FORTRAN規格。
FORTRAN 66:ANSI規格。
賛成が足りなくて国際規格にはならなかった。推進規格となった。
FORTRAN 77:77はドキュメント番号。77年にできたからじゃないらしい。77が決まってからあとづけで66ができた。
Fortran 90:90の必要性が理解されるか心配だった。
Fortran 95:アメリカ規格は作らなくなった。国際規格をアメリカ規格とすればよいという国の方針が変わった。国際規格に注力しようと。
90とか95は適当に選んだわけではなく,その年に仕様がほぼ決まったから。今までは適当だった。
現在のFortran規格
Fortran 2003:国際規格は既に廃止されて2008が最新。
2009年にJISが2003。
2008は2013年にJISになるかも。JISにする必要があるかどうか。
Fortran 2015:既に2018年にできる。予定は決まっている。
次の規格がでるときに一個前のJISを出しては混乱する。Fortranの翻訳したJISが必要と委員会で合意。
規格の開発母体の変遷。
ANSI X3.4.3
ANSI X3J3
NCITS/J3
INCITS/J3(National Commitie )
INCITS/PL22.3(PL:プログラミング言語。)
Jがプログラミング言語というのはわかりにくいので変更。
国際規格の委員会。
ISO
IEC 国際電気標準会議
情報関係はISO/IEC合同で出している。
ISO/IEC JTC1 情報技術の標準化を担う Joint Techinikacl COmmittee
ISO/IEC JTC 1/SC 22 言語やOSの標準化を担うSub Commitete
ISO/IEC JTC 1/SC 22/WG 5 Fortranの標準化を担うWG。
メンバー国からの個人メンバー。
国際規格の開発フェーズ
NP()New work item protoposal
WD (Working Draft) WG5レベル
CD(Commitee draft)投票 SC22レベル
DIS(
各Fortran規格の性質
Fortran90の主な特徴。
もともと1982年くらいにつくるつもりだったが,13年もかかった。大改定。
- 革新/慣習
- 小さく単純/大きく協力
- 廃止の容認
90後の工夫。
列車方式の採択。
5年ごとに改正規格。間に合ったものをのせる。▷95
列車に間に合わないが,急ぐものはTRとして別途開発。
95:FORALLでHPF対応。
Q&A
実ユーザーの声が届いていないのでは?
エクサスケール時代の Fortran の役割
略歴:
- Fortran 77のコンパイラを並列処理用に作成
- Fortran 77のOpenMP Omni OpenMP
- XMP作っている。
Fortranは絶滅危惧種か
Yes。
ACM SIGPLAN。
少なくともベスト10にはない。Lispよりも下。
しかし,京のアプリはほとんどがFortran
Fortranである理由
- 昔からのコードがFortranだった。
- Fortranのコンパイラがいい。
- C++が増えている。
Fortranは高級言語。
C(低級言語)の宣言は,サイズを指定する。
double A[100];
Fortranの宣言は範囲を指定。
エクサスケールに向けたトレンド。
- 高レベルの記述。
- 並列性の記述
- フレームワーク化。
- 高スケーラビリティ
- 大規模。数万ノード,数百万コア。
言語に求める機能:
- 通信機能,PGAS
- 同期のrelaxation
Fortranのこれからの役割。
以前のコードを引き継ぎ
- FORTRAN 77 + allocatable
Fortranが早いという伝説。
コードを書いてMPIでつなぐにはFortran(C,…)+MPIが残る。
- 高レベルな記述
- もっとユーザーが使わないと成熟しない。
- 高レベルでかいてくれないと並列解析できない。
C++のテンプレートでも書けるけど,Fortranは言語仕様にはいっている。
- PGAS,通信機能。
言語機能として配列がはいっているのが,Fortranは数値演算の分野でもいいのではないか?
質疑
チューニングするときに,配列演算はDOループに直したりする。
昔のFORTRANは静的なので最適化しやすかった。動的になったらFORTRANじゃない?
航空宇宙技術研究所から宇宙航空研究開発機構にかけてのソフトウェア開発について
航空機周りの空気の流れのシミュレーション。
- 市販ソフトがない
- 外注は資金面の問題。
この人の意見。
- 素直なプログラムならFORTRAN
- 非構造などはCの構造体のほうが有利
Fortranは数学に近い。
Cは変数名が値を指したり,入れ物を指したり。
核融合プラズマ・シミュレーションでの Fortran での活用
アンケート
Fortran,C/C++,Python
用途:
- 大規模数値計算
- 数値計算
- 数値データ解析
Fortranを使う理由・使わない
- 周りが使っている
- 過去の遺産
- 簡単
- 他を知らない。
- 必要を感じない。
- I/Oが不便
- Fortranがつかえても開発現場でつかえない
大学のSX利用者から見たFortranプログラミング
1. 教育現場でのFortran
制御はCでやっている。
国会図書館で検索すると面白い結果。
2000年入ったところで,情報処理試験の科目から外れた。ので本が数年なかった。
研究は過去の積み重ねだから。Fortranを使うしかない。
新しく始めるならCもあり。C++は速度が出にくいらしい。
質疑:
- 昔はFortranしかなかったのでFortranを全員に教えていた。教育としては,今はいろんなのがあるからFortranである必要がない。
- 研究としては,Fortranは必要な人がやればいい。研究で過去の引き継ぎで必要ならいるかな。
- SX-ACEでの性能は,FortranとCと同じ。
- Fortranで教えるメリットはなんだろう。こういう議論が必要かな。
- FortranはポインタがないのでCより楽。
- 宣言しないといけないかな。
富士通のFortranへの取り組み
富士通Fortranの歴史=スパコンの歴史
HPCに求められること:超高速計算
- 数万プロセス動作
- キャッシュ利用効率
なぜFortran使うか?
- 既存資産がFortran
- 数学ライブラリが充実
目的を早く実現するためにFortran。
開発コスト・保守コスト・拡張性を犠牲にして,性能を追求したのがFortran。
NECのFortranへの取り組み
コンパイラ開発者視点での利点。
FortranもCもコンパイラの最適化は同じ。言語自体はない。
同じ最適化はできる。あとは,書き方の問題。
Fortranの場合はあまり意識しなくていい。
意識すればCでも回避可能。
引数チェックとか。
Fortranもモダンな機能を使うとCと同じような感じになってしまうかも。
計算機システムの進化とFortranの将来
今後
バックエンドとしてFortranを使う。
フロントなどの入出力はCとかJavaでやってしまうとか。
質疑:
- CとFortranでの速度差。
- パラメーターの受け渡しの言語仕様間。
- ポインタの別名解析をちゃんとやるかどうかでループで差が出る。
- restrictキーワードをつけると同じ性能が出る。
インテルのFortranへの取り組み
コンパイラ開発者は不参加。開発者にいくつか質問をしてそれの回答という内容の発表だった。
世界で一番Fortranを使っているのは日本。
質疑
- Cの数学関数が充実。Cのlong doubleみたいなのあるか?これがないために精度的になくなくCで書いている。
- ない。
- Macでifortは数学関数がない。coarrayがない。
- Mac版は機能が遅れている。
XMP
質疑
- MPIと比べて劣る点があるのか。
- グローバルビューでは,非構造格子になると難しい。そのためにローカルビューがある。
- Omni XMPが吐き出すソースコードは見てわかるのか?
- 一応わかるけど,ここを触るのはやめたほうがいい。
ディスカッション
- 便利な機能が使われて役立っているのか?コードを維持して少しずつよくするのがいいのか。維持するだけなら進化は不要。
- HPFしようとするとFortran90にしないといけない。Fortran77だと最新の機能はつかえない。ただし,2003以降はいらない。
- staticからallocatableになったのはいい。
- でも2003以降で使わない機能が入ってコンパイラが遅れるのはよくない。coarrayを使って正しい機能でやっていけばいいと思う。
- HPFを求めず,あまり進化を求めないのがいいのではないか。
- スパコン前提の話があった。貧乏人はGPUを使うしかない。GPUの登場でCになった。CUDA Fortranは使いにくい。オブジェクト指向もいいよ。FORTRANが廃れたのは77が読みにくい。Cが好きだけどFortran滅べばいい。とかある。保守しにくい。汚いところは見せないほうがいい。だからオブジェクト指向がいる。しかし,速度が落ちる。C++なら一時オブジェクトを作らないやり方がある。Fortranにはない。20倍くらい遅くなる。どうせ数値計算しかないのだから,コンパイラ側がしっかり解析でやってほしい。
- FORTRAN77で複雑な計算をやれというのは厳しい。90で入った構造体とかつかえれたらいい。なくてもできるけど。これがつかえないと複雑な現象を記述できない。
- 規格の委員会でもいろいろ議論あるのだけど,ベンダー中心でやっている中でユーザーがいて,こういう議論もあった。期待してもいい。
- 2003は派生型にいろいろ種別を入れて,ここのベンダーの実装がたいへんそう。提供する予定のないベンダーもいる。
懇親会
- なぜFortranの規格ではC言語との連携についてあるか?
- 生き残りのため。FortranからC言語を使いたい・逆の要望があった。
- Fortranが使える場面が少ない。Cのほうが汎用性が高い。
- 77の頃は汎用性があった。しかし,90が出るまで時間がかかりすぎた。90がもっと早く出てきたら汎用的な言語になったかもしれない。でもC言語がでてきて無理になった。分野に特化するという方針になった。
- Fortranとは何かという議論があったが,こうだと思う。「過去のいい意味で保守的で,必要なものを先取りするところ。」