フォートランのたまりば
謹啓 |
初めて触れたプログラミング言語『FORTRAN 77』、高校のとき汎用機(FACOM M-140F)で習いました。 COBOLやPL/Iも習いましたが、PC(IBM JX)でFORTRANコンパイラーを揃えて学校の課題を自宅でも学習していました。 当時はPCの性能も貧弱で(とゆうか、IBM JXが更に低性能で)FORTRAN 77の基本水準しかサポートしておらず… しかも、PC本体とプリンターとディスプレイ(12"CRTモノクロ)、OSとFORTRANコンパイラー等一式で80万(!!)ぐらいしました…古き良き時代です。。。 当時、親がちょっとしたお店をやっていてFORTRANで売り上げ管理/グラフ作成(といっても、アスキーアートでのグラフ描写です)などに活用していました。 確か、IBMの雑誌に事例として掲載されたりもしていた記憶があります。 高校卒業後も、しばらくIBM JXとFORTRANコンパイラーは使ってました。 FORTRANも、90から『Fortran』と大小文字表記になり、95(いわゆる、HPF:High Performance Fortranが騒がれてた頃)あたりまでは市販書籍も購入したりして動向を追従していました。 PCもDOS→Windows、16bit→32bit→64bitへと性能が飛躍的に向上しました。 Windows 7までは、DOS窓(コマンド・プロンプト)上で使い続けて自己満足していましたが、Windows 10で64bit OSになり16bitアプリが切り捨てられてしまい、いつしか忘却の彼方へ… そして、初めてFORTRANを学習して早なんと40年!(2023年現在…年齢がバルる?!)、、、 ふとしたきっけで『Intel OneAPI Toolkit』とやらにて無償で最新のIntel Fortran Compilerが使えるとゆう、インターネット上の記事を目にして早速、ダウンロードして使ってみました。 そしたら、なっ!?なんと!!ホントに最新規格のFortranコンパイラーがフルスペックで使えるではありませんか!!!しかもIntel謹製のMKLまでも無償で使えるッ!! 言語仕様もHPF〜CAF、OpenMP対応と着実&確実に進化・進歩しており、あまりにもの懐かしさに震え、Fortan専用ページを作ることと相成りました。 |
謹白 |
みなさんのフォートラン応援歌を教えてください!!(もれなく掲載させていただきます!) | ||
おお フォートラン | ♪やぁ〜っ、ほぅ〜ぉっ!ふぉ〜とぅらんらんらんっ♪ | |
元歌 | おお ブネレリ(スイス民謡) | |
歌う場面 | これ、割と有名な応援歌みたいです。 ここではサビの部分のみ掲載しますが、フルコーラス版もあるみたいです。 (メーカーのマニュアルに書いてあったり、標準規格の検討委員会でも歌われてたそうです。) プログラムが完成した時やプロジェクトの打ち上げの時になどに皆で大合唱しました。 (-.-)y-゚゚゚ |
|
フォートラン ストリート | ♪フォートラン!フォートラン!フォートラン!フォートラン!♪ ♪きっとぉ、あなたわぁ戻ってぇ来る〜だろ〜ぉぅ♪ |
|
元歌 | ブーメラン ストリート(西城秀樹) | |
歌う場面 | プログミングに詰まった時や、自分はまだプログラムが完成してなくて(残業・徹夜に突入し) そんな中、同僚達が先に終わって帰ろうとした時に、指を刺し叫びながら歌っていました。 (-.-)y-゚゚゚ |
|
フォートランのたぬきばやし | ♪フォッ、ふぉっ、ふぉ〜とらんッ、フォートランのバグは♪ ♪つ、つ、潰さ〜ないと♪ ♪みぃんな出〜てぇ〜 こい コイ 来いッ♪ |
|
元歌 | 証城寺の狸囃子(童謡) | |
歌う場面 | プログラムにバグが発見された時、独り言のように呟きながら関係メンバー全員に緊急呼集をかけながら歌ったモンです。 (-.-)y-゚゚゚ |
CAF | . | Co-Array Fortran (Fortran 95/2003の拡張) |
||
F | . | Fortran 95のサブセット |
||
HPF | 1997.1 | HPF-2 | HPF 2.0 | High Performance Fortran (Fortran 90/95の拡張) |
1994.10 | HPF-1 | HPF 1.1 | ||
1993.5 | HPF 1.0 | |||
F o r t r a n |
204x.** | Fortran of the Distant Next Future Generations | ||
203x.** | ||||
2028.** | Fortran 2028 (202y、2025) |
Fortran 2023(202X)のモデレート・バージョン・アップ Generics句、Reduction句(OpenMP) 暗黙の型宣言を廃止 汎用サブプログラム/テンプレート、非同期タスク、標準プリプロセッサ、ポリモーフィズムの導入 |
||
2023.11 | Fortran 2023 (202X、2020) |
Fortran 2018のマイナー・バージョン・アップ Language elements ・Allow much longer statement lines and overall statement length:言語要素 (1行の長さ:10,000文字、1文の長さ:1,000,000文字、行数制限の撤廃) ・Automatic allocation of lengths of character variables ・The specifiers typeof and classof ・Conditional expressions and arguments ・More use of binary, octal, and hexadecimal constants Intrinsic procedures and intrinsic modules:組込プロシージャと組込モジュール ・Extracting tokens from a string ・Trig functions that work in degrees ・Trig functions that work with half revolutions ・selected logical kind ・Changes to system clock ・Changes for conformance with new IEEE standard ・Additional named constants to specify kinds Interoperability with C:C言語との相互運用性 ・Input-output ・The at edit descriptor ・Control over leading zeros in output of real values ・Namelist Coarrays:共配列 ・Allow an object of a type with a coarray ultimate component to be an array or allocatable ・Put with notify ・Error conditions in collectives Procedures:手続き ・Simple procedures Array features:配列 ・Using integer arrays to specify subscripts and section subscripts ・Using integer arrays to specify the rank and bounds of an array ・Using an integer constant to specify rank ・Reduction specifier for do concurrent Enumerations:列挙 ・Introduction ・Enumeration types ・Enum types Obsolete and deleted features:廃止・削除予定機能 ・none |
||
2018.11 | Fortran 2018 (2015) |
Fortran 2008のモデレート・バージョン・アップ ISO/IEC TS 29113:2012 Further Interoperability with C ISO/IEC TS 18508:2015 Additional Parallel Features in Fortran |
||
2010.9 | Fortran 2008 (2005) |
Fortran 2003のモデレート・バージョン・アップ 分散メモリー型並列機能(Co-Array、Do Concurrent) BLOCK 構造 |
||
2004.10 | Fortran 2003 (2000) |
Fortran 95のメジャー・バージョン・アップ (…列車発車方式の崩壊…) オブジェクト指向 動的メモリー確保(代入時自動確保) |
||
1998.10 | Fortran 95 | Fortran 90のマイナー・バージョン・アップ 共有メモリー型並列機能(HPFの組み込み) 組み込み関数の拡張 以下の削除(90の削除予定事項で定義された機能を削除) ・実数型変数のDO文 ・ブロック外部からのEND IF文へのブランチ ・PAUSE文 ・ASSIGN機能 ・ホレリス定数 |
||
1991.8 | Fortran 90 (8X、88、83) |
FORTRAN 77のメジャー・バージョン・アップ (列車発車方式(5年毎にその時点での仕様策定結果を反映)の採用) 自由記述形式、表記を『Fortran』とする モジュール構造、分割コンパイル(Separate Compile) 全配列操作(Whole Array Operation) 行内注釈 継続行の制限緩和 変数名は31文字以内の英数字と記号(『_』のみ) 英字は小文字も可(ただし大文字と区別されない) 削除予定事項の定義(実際には削除はされていない) |
||
F O R T R A N |
1978.4 | FORTRAN 77 | FORTREV(FORTRAN REVISION) 文字型、プロックIF、実数型のDO変数 整数・実数の混合演算(66では混合演算は不可) DOループは1回も実行しない場合もある(66では必ず1回は実行する) ループ後のDO変数の確定(66では不定になる、77では終値+増分値となる) |
|
上位水準 | Full Language | |||
基本水準 | Subset Language | |||
1966.3 | FORTRAN 66 | 規格化された最初のプログラムミング言語 | ||
水準7000 | Full FORTRAN FORTRAN IV相当 |
|||
水準5000 | Intermediate FORTRAN ECMA原案相当 |
|||
水準3000 | Basic FORTRAN、Tiny FORTRAN FORTRAN II相当 |
|||
IBM | Open XL Fortran | 規格準拠 ・ISO/IEC TS 29113:2012 の部分的サポート ・ISO/IEC 1539-1:2010(Fortran 2008)の部分的サポート ・ISO/IEC 1539-1:2004(Fortran 2003) ・ISO/IEC 1539-1:1997 (Fortran 95) ・ISO/IEC 1539-1:1991、ANSI X3.198-1992(Fortran 90) ・ANSI X3.9-1978(FORTRAN 77) 拡張機能 ・ベクトル・プログラミング言語拡張 ・IBMによって定義された機能拡張およびSAA Fortranで指定されている拡張 ・他のコンパイラーベンダーによって定義された共通のFortran言語拡張 ・さまざまなコンパイラーベンダーからのFortran製品に見られる業界の標準的機能拡張 |
||
XL Fortran | Fortran 2008/2003準拠 64bit演算 Parallel Engineering and Scientific Subroutine Library |
|||
1985 1981 |
VS FORTRAN | Version 2 | Fortran 90準拠、ベクトル機構(VF:Vector Facility)、自動多倍精度演算 | |
Version 1 | FORTRAN 77準拠 | |||
1961 | FORTRAN IV | FORTRAN 66の原型 論理型(LOGICAL)、論理演算、ブロックIFおよび論理IF文、倍精度型、複素数型 |
||
(1959) | FORTRAN III | 未リリース、インラインアセンブラ | ||
1958 | FORTRAN II | SUBROUTINE文、FUNCTION文、COMMON文 | ||
1957 | FORTRAN I | 最初のFORTRAN言語、IBM 704用は命令数32個 |
コーディング・スタイル | プログラミング構造 | 標準規格 | |
Modern Fortran (Free coding style) |
Dynamic | Fortran 2028 | (202y) |
Fortran 2023 | ISO/IEC 1539-1:2023 | ||
Fortran 2018 | ISO/IEC 1539-1:2018 JIS X 3001-1:2009 |
||
Fortran 2008 | ISO/IEC 1539-1:2010 | ||
Fortran 2003 | ISO 1539-1:2004 JIS X 3001-1:2009 |
||
Static | Fortran 95 | ISO 1539:1991 JIS X 3001:1994 |
|
Fortran 90 | ANS X3.198:1992 ISO 1539:1991 JIS X 3001:1994 |
||
Classical FORTRAN (Fixed coding style) |
FORTRAN 77 | ANS X 3.9:1978 ISO 1539:1980 JIS C 6201:1982 |
|
FORTRAN 66 | ANS X 3.9:1966 JIS C 6201:1967 JIS C 6202:1967 JIS C 6203:1967 |
Fortran 90以降(自由記述形式)※書く桁目の制限は無い | |||||
PROGRAM文 | |||||
$ | 注釈(コメント)は1桁目に『$』『!』『*』『C』のいずれかを書くと行全体がコメントとなる ※推奨は『$』『!』(翻訳指示文になるため) |
||||
宣言文 | 宣言文は実行文よりも前に書く ※暗黙の型宣言は非推奨 IMPLICIT NONE を推奨 |
||||
実行文 | 実行文は宣言文の後に書く | ||||
& | 継続行 | 行の右端に『&』を書くと次の行は継続行になる | |||
END PROGRAM文 | |||||
主な特徴 ・暗黙の型宣言は非推奨(IMPLICIT NONEを推奨) ・変数名は英字で始まる31文字以内の英数字と記号(アンパーサンド)※英字は小文字も可だが大文字と区別されない ・継続行は最大39行まで ・文番号による参照指定は非推奨 … |
|||||
FORTRAN 77以前(固定記述形式)※桁目によって書く内容が制限される | |||||
1桁目 | 2〜5桁目 | 6桁目 | 7〜72桁目 | 桁目によって書く内容が決まっている | |
PROGRAM文 | PROGRAM文は7桁目以降に書く | ||||
C | 注釈文(コメント行)は1桁目に『C』または『*』を書く(行全体がコメントとなる) | ||||
宣言文 | 宣言文は実行文よりも前に、かつ7〜72桁の間に書く ※暗黙の型宣言 変数名がI,J,K,L,M,Nで始まる場合:整数型 変数名がA〜H,O〜Zで始まる場合:実数型 |
||||
実行文 | 実行文は宣言文の後に、かつ7〜72桁の間に書く | ||||
FORMAT文 | FORMAT文は宣言文の後に、かつ7〜72桁の間に書く | ||||
文番号 | 文番号は1〜5桁目に数字を書く | ||||
C | 継続行 | 継続行は6桁目に『C』または『0』(ゼロ)以外の文字を書く | |||
STOP文 | STOP文は7桁目以降に書く | ||||
END文 | END文は7桁目以降に書く | ||||
主な特徴 ・暗黙の型宣言(I〜Nで始まる変数は整数型、A〜H,O〜Zで始まる変数は実数型) ・変数名は英字で始まる6文字以内の英数字(英字は大文字のみ) ・継続行は最大19行まで … |
ISO_FORTRAN_ENV | |
定数 | |
ATOMIC_INT_KIND | |
ATOMIC_LOGICAL_KIND | |
CHARACTOER_KINDS | |
CHARACTOER_STORAGE_SIZE | |
ERROR_UNIT | |
FILE_STORAGE_SIZE | |
INT8 | |
INT16 | |
INT32 | |
INT64 | |
INTEGER_KINDS | |
INPUT_UNIT | |
IOSTAT_END | |
IOSTAT_EOR | |
IOSTAT_INQUIRE_INTERNAL_UNIT | |
LOGICAL_KINDS | |
NUMERIC_STORAGE_SIZE | |
OUTPUT_UNIT | |
REAL32 | |
REAL64 | |
REAL128 | |
REAL_KINDS | |
STAT_LOCKED | |
STAT_UNLOCKED | |
STAT_LOCKED_OTHER_IMAGE | |
STAT_STOPPED_IMAGE | |
STAT_UNLOCKED_OTHER_IMAGE | |
STAT_FAILED_IMAGE | |
STAT_UNLOCKED_FAILED_IMAGE | |
INITIAL_TEAM | |
CURRENT_TEAM | |
PARENT_TEAM | |
関数 | |
COMPILER_OPTIONS | |
COMPILER_VERSION | |
サブルーチン | |
CPU_TIME | |
DATE_AND_TIME | |
MVBITS | |
RANDOM_NUMBER | |
RANDOM_SEED | |
SYSTEM_CLOCK | |
ISO_C_BINDING | |
IEEE_FEATURES | |
IEEE_EXCEPTIONS | |
IEEE_ARITHMETIC | |
IEEE_ARITHMETIC |
Intel oneAPI Toolkit (2025.0.0) |
BASE Toolkit | Intel DPC++/C++ Compiler (icx) |
Version 2025.0.0 Build 20241008 |
(icl) |
Build 20230609_000000 |
||
HPC Toolkit | Intel Fortran Compiler (ifx) |
Version 2025.0.0 Build 20241008 |
|
(ifort) |
Build 20240222_000000 |
||
Intel oneMKL (Math Kernel Library) |
Version 2025.0.0.929 | ||
Intel MPI Library | Version 2021.14.0.785 | ||
※32bit版の利用は非推奨になりました。 Classic コンパイラは削除されました。 2025.0.0:組込間数のFortran 2023準拠(Fortran 2018からは非準拠)、ifort 削除 2024.2.0: 2024.1.0: 2024.0.0:Fortran 2023 一部実装、OpenMP 6.0 一部実装、icl 削除 2023.2.0: 2023.1.0: 2023.0.0:Fortran 2018 完全準拠、Classic(ifort、icl)および32bit版の非推奨 |
Microsoft Visual Studio 2022 (Version 17.12.3 Build 35527.113) |
Microsoft C/C++ Optimizing Compiler (cl) |
Version 19.42.34435 |
Microsoft Incrimental Linker (LINK) |
Version 14.42.34435.0 | |
Microsoft Library Manager (LIB) |
Version 14.42.34435.0 | |
Microsoft Macro Assembler (ml64) |
Version 14.42.34435.0 |
コンパイラー | 規格準拠性 | 標準で使える機能 | ||||||||||
並列化機能 | 数値演算ライブラリー | |||||||||||
CAF | FPGA | HPF | MPI | OpenMP | GPU-O/L | OpenACC | ||||||
Intel | Fortran Compiler (ifx)2025.0.0 |
Fortran 2023 | ○ | ○ | ○ | 6.0/5.2 | ○ | − | Intel oneMKL (Math Kernel Library) |
|||
(ifort)2021.12.0 |
Fortran 2018 | 5.1 | − | |||||||||
GNU | Fortran Compiler (gfortran)10.3.0 |
− | − | 4.5 | − | − | ||||||
nVIDIA | NV Fortran Compiler ※ |
…Commming Soon… | ||||||||||
WATCOM | FORTRAN 77 Optimizing Compiler (wfc)1.9※ |
FORTRAN 77 | − | |||||||||
【注意事項】 ・Intel Fortran Compiler (ifx)は64bitの実行ファイルを生成できます ・Intel Fortran Compiler Classic(ifort)は廃止されました ・Intel Fortran Compiler Classic(ifort)は32bitおよび64bitの実行ファイルを生成できます ・Intel Fortran Compiler Classic(ifort)にはGPU OFF-LOAD機能はありません(将来的にも実装される予定はありません) GPU OFF-LOAD機能を利用する場合はIntel Fortran Compiler(ifx)を使用します ・GNU Fortranには4倍精度の組込関数はありません(定数としての4倍精度の指定(1.0q0形式)はあります) ・GNU Fortran単体ではCAFおよびMPIは実行できません(別途MPIの実行環境が必要になります) ※NV Fortran CompilerのWindows版は未だ公開されていません ※WATCOM FORTRAN 77 Optimizing Compiler(wfc)の64bit版は公開されていません ├32bit版:wfc386.exe └16bit版:wfc.exe ・WATCOM FORTRAN 77 Optimizing Compilerは4倍精度には対応していません 並列化機能 ・CAF:Co-Array Fortran ・FPGA:Field Programmable Gate Array ・HPF:High-Performance Fortran ・MPI:Message Passing Interface ・OpemMP:Open Multi-Processing └GPU-O/L:Graphics Processing Unit - Off Load ・OpenACC:Open Accelerator |
||||||||||||
Intel oneMKL(Math Kernel Library) | ||||||||||||
主 な 機 能 |
線形代数 ・BLAS ・一部のスパース BLAS 機能 ・一部の LAPACK 機能 ・GEMMルーチン拡張機能 三角 GEMM ルーチン バッチ GEMM ルーチン パックされた GEMM ルーチン |
|||||||||||
高速フーリエ変換(FFT) ・単精度および倍精度の一次元バージョン ・任意の長さの多次元、複素数間、実数-複素数間、実数 - 実数間の変換 ・業界標準の API との互換性のための FFTW インターフェイス ・クラスター向けのフーリエ変換関数 |
||||||||||||
ベクトル演算 ・要素ごとの加減乗除および共役 ・累乗 ・平方根 ・逆数 ・対数 ・三角関数/三角法 ・双曲線(逆)エラーと累積正規分布 ・パックおよびアンパック ・信頼領域アルゴリズム ・部分微分方程式 |
||||||||||||
直接法および反復法スパースソルバー | ||||||||||||
乱数ジェネレーター ・単精度の一様分布、ガウス分布、対数正規分布 |
||||||||||||
Intel MPI Library | ||||||||||||
主 な 機 能 |
MPI-3、MPI-2.2、MPI-1 仕様への準拠 | |||||||||||
低オーバーヘッドにより大量のデータを解析可能 | ||||||||||||
アプリケーションの高速化に役立つ MPI チューニング・ユーティリティー | ||||||||||||
インターコネクトに依存しない、柔軟なランタイム・ファブリックの選択 ・共有メモリー DAPL を介した RDMA 対応ネットワーク・ファブリック ・ソケット、イーサネット経由の TCP/IP、ギガビット・イーサネット、その他のインターコネクト |
Intel | MKL intel oneMKL(Math Kernel Library) |
Numerical Algorithms Group | NFL(NAG) NAG Fortran Library |
Rogue Wave Software | IMSL International Mathematics and Statistics Library |
富士通 | SSL II Scientific Subroutine Library II |
日本電気 | NLC NEC Numeric Library Collection ASL Advanced Scientific Library |
IBM | ESSL Engineering and Scientific Subroutine Library MASS Mathematical Acceleration Subsystem |
DFPORT | Fortran用環境情報ライブラリ |
IFPORT | |
DFLIB | Fortran用グラフィックスライブラリ |
IFLIB | |
MSFLIB | Windows API呼び出しのFortranラッパー |
stdlib | Fortran標準ライブラリ |
定量制限 | Intel Fortran Compilerでの制限 |
GNU gFortran Compilerでの制限 |
||||
1 | 配列の次元数 | 31 | ||||
2 | 次元毎の要素数 | Intel-64 | 2**63-1 | |||
IA-32 | 2**31-1 | |||||
3 | 文字長 | Intel-64 | 2**63-1 | |||
IA-32 | 2**31-1 | |||||
4 | 識別子の長さ | 63文字 | ||||
5 | 定数の長さ | 文字列定数 | 7,198文字 | |||
リスト指定I/Oでの入力文字数 | 2,048文字 | |||||
6 | ソース行の長さ | 固定記述形式 | 72〜132文字 | |||
自由記述形式 | 7,200文字 | |||||
継続行 | 225行以上 | |||||
7 | 入れ子の数 | データ、I/Oを含むDOの入れ子 | 31 | |||
配列構造を含むDOの入れ子 | ||||||
結合された入れ子 (DO、CASE、FORALL、WHERE、整構造IF文) |
512 | |||||
編集記述子の入れ子 | 8 | |||||
INCLUDE ファイルの入れ子 | 20 | |||||
インターフェイス・ブロックの入れ子 | 無制限 | |||||
DO、IF、CASE構文の入れ子 | ||||||
括弧形式の入れ子 | ||||||
構造体の入れ子 | 30 | |||||
コンパイル・オプション | Intel Fortran Compilerでの指定 |
GNU gFortran Compilerでの指定 |
||||
0 | Compile Only(コンパイルのみ) | /C | -c | |||
1 | Co-Array | /Qcoarray | − | |||
2 | MKL | /Qmkl | − | |||
3 | OpenMP | /openmp | -fopenmp | |||
4 | Optimize(最適化) | /Od /O1 /O2 /O3 /Ofast /Os /Ot |
-O0 -O1 -O2 -O3 -Ofast -Os -Oz |
|||
実際の演算精度(固定小数点以下) | Intel Fortran Compilerでの結果 |
GNU Fortran Compilerでの結果 |
||||
1 | 単精度(REAL*4)REAL32 | 5桁 | 7桁 | |||
2 | 倍精度(REAL*8)REAL64 | 12桁 | 17桁 | |||
3 | 4倍精度(REAL*16)REAL128 | 32桁 | 32桁 | |||
特殊な(禁則含む)数学的 定義値の主な演算結果例 |
数学的定義値 | Intel Fortran Compilerでの結果 |
GNU gFortran Compilerでの結果 |
|||
1 | ゼロでの除算 【n/0】 |
禁止 | 整数型 | 不定 | ||
実数型 | エラー | |||||
2 | ゼロのゼロ乗 【0**0】 |
1 or 未定義 | 整数型 | 0 | ||
実数型 | 1 | |||||
3 | マイナス値の階乗 【-n!】 |
禁止 | 整数型 | 0 | ||
実数型 | エラー | |||||
4 | 実数値の階乗 【x.y!】 |
未定義 or 複素階乗 | ガンマ関数にて算出 | |||
5 | 配列の添え字の0 【n(0)】 |
禁止 | 宣言することで可能 (デフォルトでは1からはじまる) |
|||
6 | 配列の添え字の実数型 【n(x.y)】 |
禁止 | エラー |
レガシーなFORTRANコンパイラー | |||||
IBM Personal Computer FORTRAN Compiler |
Version 2.00(5600-JFP) (IBM 5550 series) |
Version 1.00(5601-JCB) (IBM JX series) |
|||
1 | 規格準拠性 | FORTRAN 77 上位水準 | FORTRAN 77 基本水準 | ||
2 | 倍精度演算 | ○ | − | ||
3 | 数値演算コ・プロセッサ | ○ | − | ||
4 | OS/CPU | 日本語DOS K3.4x i8086 16bit (Maxim Mode) |
日本語DOS K2.2x i8088 16bit (Minimum Mode) |
||
Mainframe's FORTRAN Compiler |
ACOS series | FACOM M series | |||
最適化FORTRAN77 | FORTRAN77 | ||||
1 | OS | ACOS-4/AVP ACOS-2/EF |
OSIV/MSP E20 OSIV/X8 OSIV/ESP III |
||
2 | 規格準拠性 | FORTRAN 77 上位水準 | FORTRAN 77 上位水準 | ||
3 | サブルーチン ライブラリ |
NLC:NEC Numeric Library Collection ASL:Advanced Scientific Library ・ASL統合I/F ・FFTW I/F ・ASL ・SCA ・BLAS/CBLAS ・LAPACK ・ScaLAPACK ・SBLAS ・HeteroSolver |
SSL II:Scientific Subroutine Library II ・標準機能 広範囲な科学計算 (線型計算) (固有値・固有ベクトル) (非線型計算) (極値問題) (補間近似) (変換) (数値微積分) (微分方程式) (特殊関数) (擬似乱数) (その他) ・拡張機能(グループ1) 標準機能のベクトル化 ・拡張機能(グループ2) 大規模問題指向(ベクトル演算) |
||
教育用FORTRAN
教育用FORTRANとは、FORTRAN言語の教育向けに特別に作られた処理系です。 '80年代頃までは、プログラミング言語の学習(教育)としてはFORTRANやCOBOLが大多数でした。 一般的に教育用途での言語処理系の使われ方には以下の特徴があります。 ・プログラムが小さい(ソースステップ数が少ない) ・構文エラーが多発する ・実行形式のプログラムが実行される頻度が低い(ほとんど1回実行するだけ) ・致命的なロジックエラーが潜在する ・コンパイルする回数が多い(多人数での同時利用および個人での複数回のコンパイル) 通常のコンパイラよりも少ないメモリで動作し同時に多くのコンパイルを行うように設計されていました。 教育用FORTRANでは、前述のような特徴に加えて以下の点を考慮し実装されていました。 ・コンパイル&ゴーの形式(リンケージエディタを必要としない) ・診断メッセージが豊富 ・デバッグ情報が豊富 ・最適化は行わない(またはごくわずか) |
|||||
1 | 富士通 | FAST:FORTRAN to Assist Students Training (FORTRAN 66 水準7000(FORTRAN IV)レベル) |
|||
2 | 日立 | FORTCG:Compile-and-Go FORTRAN Compiler (FORTRAN 66 水準7000(FORTRAN IV)レベル) |
|||
HITFOR:Hitachi Teaching FORTRAN (FORTRAN 66 水準3000(FORTRAN II)レベル) |
|||||
3 | 日本電気 | FORTRAN E:実行型FORTRAN (FORTRAN 77 上位水準レベル) |
|||
FORTRANインタプリタ:常駐型(スタック構造型)FORTRAN (FORTRAN 66 水準7000(FORTRAN IV)レベル) |
|||||
4 | WATCOM | WATFOR-77:WATerloo FORTRAN 77 Compiler (FORTRAN 77 レベル) |
|||
WATFIV:WATerloo FORTRAN IV Compiler (FORTRAN 66 レベル) |
弧度法による三角関数の精度誤差の例(Fortran 2023) (Intel Fortran Compiler V2024.0.1) |
RADIAN2023.TXT | ※7 |
標準組み込みモジュールの使用例(Fortran 2008) (Intel Fortran Compiler V2024.0.2) |
STDENV08.TXT | |
変数のメモリアドレス(番地)の取得例(Fortran 2003) (Intel Fortran Compiler V2024.0.2) |
TESTLOC.TXT | ※6 |
マンデルブロー集合の描写の例(Fortran 2003) (Intel Fortran Compiler V2023.1.0) (Intel Fortran Compiler Classic V2021.9.0) |
MAND2003.TXT
(MAND2003oop.LST) (MAND2003oop.BMP) |
※5 |
IFPORTによるソート関数の例(Fortran 95) (Intel Fortran Compiler V2024.0.2) ・QSORT ・SORTQQ |
QSORT95.TXT
SORTQQ95.TXT |
|
MKLの使用例(Fortran 90) BLAS レベル 1(sdot)、レベル 2(sger)、レベル 3(ssymm) (Intel Fortran Compiler V2024.0.2) (Intel oneMKL V2024.0.1) |
BLAS90MKL.TXT | |
Co-Arrayの例(Fortran 90) (Intel Fortran Compiler V2023.1.0) |
CAF90.TXT | |
OpenMPの例(Fortran 90) (Intel Fortran Compiler V2023.1.0) (GNU Fortran Compiler V10.3.0) |
OPENMP90.TXT | |
三項演算による約数の求値の例(Fortran 90) (Intel Fortran Compiler V2024.0.2) |
SANKOU90.TXT | ※4 |
2の平方根での演算精度の差の例(FORTRAN 77) (Intel Fortran Compiler V2023.1.0) (GNU Fortran Compiler V10.3.0) (Open WATCOM FORTRAN 77 Compiler V1.9) |
ROOT2.TXT SQRTRQS.TXT |
|
サインカーブを描写するプログラム例(FORTRAN77) (Intel Fortran Compiler Classic V2021.9.0) (GNU Fortran Compiler V10.3.0) |
SINEWAVE.TXT | ※3 |
円周率を求めるプログラム例(FORTRAN77) (FACOM OSIV FORTRAN77 V10L10) (IBM PC FORTRAN Compiler V1.00) (WATCOM FORTRAN 77 Compiler V1.9) (Intel Fortran Compiler Classic V2021.10.0) |
SPIGOT77.TXT | ※2 |
FORT77PI.TXT (FORT77PIwFC.TXT) (FORT77PIiFX.TXT) |
※1 | |
参考…m(_ _)m… ※1:埼玉県立 新座総合技術高等学校 情報技術科 ※2:Spigot 法による pi 計算 ※3:ChatGPT 3.5 ※4:Fortran で三項演算子(改訂) ※5:今時の Fortran 入門 ( Introduction to Modern Fortran ) ※6:Fortran で変数の番地を得る ※7:【メモ帳】Intel Fortran 2024.0..0 で Fortran 2023 機能を試す |
べき乗根10種類の100,000,000回の演算速度性能向上率 | ||||
並列処理方式 | 実行コア数 | |||
2 | 4 | 8 | 10 | |
Co-Array | 2.85 | 4.70 | 11.55 | 19.16 |
OpenMP | 2.26 | 2.84 | 3.02 | 10.71 |
Scalar※ | 1.00 | |||
10 vCores:CPU i9-10910、vRAM 16GB 8 Cores:CPU i7-7700K、RAM 64GB 4 Cores:CPU i7-8550U、RAM 16GB 2 Cores:CPU i7-4500U、RAM 16GB |
(Single Instruction Multiple Data stream) |
(Super Pipeline) |
(Super Scalar) |
(Out of Order) |
(Register Renaming) |
(Branch Prediction) |
(Speculative Execution) |
最適化のレベル | 最適化する主な内容 |
レベル0 | 最適化なし(一切の最適化をおこないません) |
レベル1 | 命令の実行順序に影響を与えない範囲での最適化をおこないます 定数伝播/たたき込み/不要代入の除去など |
レベル2 | レベル1よりも強い最適化をおこないます ベクトル展開の際には必須となります ループ・アンローリング/演算順序の変更など |
レベル3 | レベル2よりも更に強い最適化をおこないます 実行ファイルのサイズや必要メモリが増大する場合があります これ以降の最適化レベルでは、命令の実行順序が変更される場合があり結果に影響を与える場合があります インライン展開/ループ・リ・スケジューリング/例外順序変更など |
レベル4 | レベル3よりも更に強い最適化をおこないます グローバル変数や引数の伝播/データ構造の再編成など |
レベル5 | レベル4よりも更に強い最適化をおこないます プロシージャ間やコンパイル単位でのコードのインライン化/別名割り当ての最適化など |
コンパイラによる最適化は大変便利な機能で一般的には効率が良く処理速度が速くなる実行ファイルを生成してくれますが、 プログラミング(コーディング)次第では必ずしも高速化にならなかったり、意図しない実行結果になる場合があります。 最適化を行う際の主な留意事項を以下に記します。 具体的なコーディング方法や推奨されるコンパイルオプションについては、各コンパイラのマニュアル等にて確認してください。 |
1 | コンパイル時間、必要なメモリ/ディスク容量の増大 |
コンパイラによる最適化を行うと、コンパイラが処理する時間が増えるのでコンパイル時間が増大します。 また、コンパイル時にはより多くのメモリやディスク(一時ファイル)を確保する必要があります。 |
|
2 | 実行ファイルのサイズ増加 |
コンパイラによる最適化を行うと、コンパイラが生成した実行ファイルのサイズが増加する場合があります。 コンパイラによっては、実行サイズを増加させないで最適化を行うオプションか用意されている場合もあります。 |
|
3 | 実行メモリ必要量の増加 |
コンパイラによる最適化を行うと、コンパイラが生成した実行ファイルを実行する際に必要なメモリのサイズが増加する場合があります。 コンパイラによっては、実行時のメモリサイズを増加させないで最適化を行うオプションか用意されている場合もあります。 |
|
4 | 実行時間の増加 |
コンパイラによる最適化を行うと、実行ファイルを実行する際に処理時間が増加する場合があります。 (実行速度が速くならない場合もあります) コンパイラによっては、実行時間を増加させないで最適化を行うオプションか用意されている場合もあります。 |
|
5 | 命令の実行順序の変更 |
コンパイラによる最適化を行うと、コンパイラによって命令の実行順序が変更される場合があります。 そのため、意図しない実行結果となる場合があります。 最適化レベルを高めるほど、命令の実行順序が変更される可能性が高くなり、実行結果に注意が必要です。 |
機能拡張 | 非同期タスク機能の追加 |
C言語との相互利用可能性の拡張 | |
C言語との相互利用以外でも大域束縛名が使用可能 | |
列挙名の値の入出力を許可 | |
Fortran用のプリプロセッサを定義 | |
名前空間に似た方法でのモジュール参照 | |
列挙型の値へのスコープ付きアクセス | |
ターゲットが不変であることの指定 | |
種別パラメータのデフォルト値の指定 | |
ジェネリックなテンプレートの導入 | |
総称サブプログラムの導入 | |
組み込みモジュール、 手続きの拡張 |
ソース位置についての組み込み手続きの提供 |
組み込みモジュールに最大次元/共次元を追加 | |
廃止機能 | 暗黙の型宣言の使用を非推奨 |
D編集記述子の今後の拡張を停止 | |
仕様書の修正 | 実数の数体系について注釈を追加 |
その他 | 次元数無依存の機能の改善 |
純粋関数の結果が多目的である場合 |