計算機・Fortranプログラミング(ベンチマークテスト)
ここでは、1990年代から2011年代までのFortranコンパイラーおよび実行環境である インテル系CPUを用いて、化学工学計算のベンチマークプログラムを実行し、その実行 時間を計測したデータを以下紹介します。
ベンチマークプログラム
ベンチマーク・プログラムとしては、収束計算である反応蒸留の計算プログラムを用い ています。化学工学の分野では、多段蒸留塔による「蒸留操作」は汎用シミュレータでは よく利用されます。汎用シミュレータでは、化学反応を伴う蒸留操作は、反応による非線型性、 気液平衡による非線型性があり、各段の気液組成および温度・圧力を同時に解かなければなりません。 解くべき方程式は、連立非線型方程式になります。
Fortranソースコードは、基本的に倍精度演算を採用しています。段数50段で、成分数 4、温度、蒸気流量の6変数、全変数は50x6=300元の連立非線型方程式の問題となります。 なお、連立線型方程式の解法等の数値計算ルーチンは、コンパイラー付属のライブラリ を使用せず、すべて自作コードを採用しています。
反応蒸留計算プログラムは、Fortranソースコードからコンパイルしています。ソース コードと計時用のサンプル入力データはほとんど変更していません。CPU時間の計測は 入力データのファイル読み込み、出力データのファイル書き込みなどInput/Output以外の 純粋に算術計算部分(途中経過の出力は無しとしています)を測定しています。測定は GETTIMルーチンを呼び出し、1/10sec(100ミリ秒)まで測定しています。
実行は、1990年代はDOS/V環境、Windows3.1環境ではDOS窓、その後のWindows環境でも DOS Promptで実行しています。OSはLinux(Redhat版)でも一部実行しています。
使用コンパイラー
Fortranコンパイラーとして、次のコンパイラーを使っています。
- Microsoft Fortran (16bit)、1990年代 (MS Fortran)
- Microsoft Power Fortran (32bit) (MS PF)
- DEC Visual Fortran (32bit) (DVF)
- Compaq Visual Fortran (32bit) (CVF)
- Intel Visual Fortran (32bit,64bit) (IVF)
計算速度はこれらFortranコンパイラーのバージョンにも依存しますが、後述の表の各種バージョン でソースコードをコンパイルし、実行モジュールを作成しています。 IVF以外は、コードの最適化オプションはなく、シングルスレッドで走らせています。
使用CPU
1990年代以降に、ベンチマークで使用したCPUの種類を次に示します。
- 486DX2 (66MHz)、1990年代
- Pentium (75-133MHz)、1990年代
- Pentium Pro (200MHz)、1990年代
- Celeron 300A(300MHz)、1990年代
- Pentium 2 (400MHz)、2002年頃
- Pentium 4 (1.6GHz)、2002年頃
- Pentium 4 (3.0GHz)、2004年頃
- Itanium 2 (1.5GHz)、2004年頃
- Core 2 Duo (2.66GHz)、2008年頃
- Core i7,920,Quad (2.67GHz)、2009年頃
詳しくは、次のベンチマーク結果表をご覧下さい。
ベンチマークの結果
ベンチマーク・テストによる計算時間を表1に、年代順に記載しています。表の年代は 使用CPUの発売年月ではなく、ベンチマーク・テストを実施した年を示しています。1990年代の DOS/Vの時代ではコンパイラーはMicrosoft Fortranで、16ビットのアプリケーション(*.exe)を 出力するもので、16ビット環境でのテスト結果です。Microsoft Power Fortranから32ビットの アプリを生成できるようになり、最近のIVFコンパイラーで64ビットアプリ(IA64)に対応できる ようになりました。
この表から、反応蒸留プログラムによる計算時間の測定は、ほぼ1.0秒以下となり、測定 限界に到達しています。ほぼ10数年にわたるCPUとコンパイラーの進化の過程が分かります。 まさにMooreの法則を具現しています。
2008年以降のIVFによるコンパイルでは、最適化コンパイルが可能であり、コンパイル・ オプションをRemarks欄に記載しました。
Date | CPU | Clock | OS | Compiler | Version | CPU Time [s] | Remarks |
---|---|---|---|---|---|---|---|
1996 | 486DX2 | 66MHz | DOS/V | MS Fortran(*1) | 175.5 | 16bit Application | |
Pentium | 75MHz | DOS/V | MS Fortran(*1) | 83.4 | |||
Pentium | 133MHz | DOS/V | MS Fortran(*1) | 48.1 | |||
Pen.Pro | 200MHz | DOS/V | MS Fortran(*1) | 39.3 | |||
Pen.Pro | 200MHz | Win31 | MS PF | V4 | 19.5 | 32bit Application | |
Pen.Pro | 200MHz | Win31 | DVF | V5 | 14.0 | ||
1999 | Celeron 300A | 300MHz | WinNT/Dos Prompt | DVF | V5 | 9.1 | |
Pen. II | 400MHz | WinNT/Dos Prompt | DVF | V6 | 7.2 | ||
2002 | Pen. IV | 1.6GHz | WinNT/Dos Prompt | F2C+V.Studio | 2.8 | Convert Fortran to C, MSC(*2) | |
2004 | Pen. IV | 1.6GHz | WinNT/Dos Prompt | DVF | V6.5 | 2.5 | |
Pen. IV | 1.6GHz | WinNT/Dos Prompt | CVF | V6.6C3 | 2.5 | ||
Pen. IV | 1.6GHz | WinNT/Dos Prompt | IVF | V8 | 1.4 | ||
Pen. IV | 3.0GHz | Linux | IVF (*3) | V8 | 1.8 | ||
Itanium II | 1.5GHz | Linux | IVF (*3) | V8 | 1.0 | ||
2008 | Pent. IV | 3.0GHz | WinXP/Dos Prompt | IVF | V9.1 | 0.6 | /c |
Core 2 Duo | 2.66GHz | Linux | IVF | V9.1 | 0.4 | /c | |
Celeron | 3.06GHz | WinXP/Dos Prompt | IVF | V9.1 | 0.6 | /c /O3 /Qprefetch /QaxN | |
2009 | Core i7, 920 | 2.67GHz | WinXP64/Dos Prompt | IVF | V11.0 | 0.2 | /c /O3 /Qprefetch /QaxN (IA32) |
Core i7, 920 | 2.67GHz | WinXP64/Dos Prompt | IVF | V11.0 | 0.2 | /c /O3 (IA64) (*4) |
- note
- 1) MS Fortranは16ビット・アプリを生成。 それ以降は32ビットアプリ。または64ビットアプリ。
- 2) FortranソースコードをC言語ソースに変換するユーティリティを用い、 その後Visual StudioのMSCでコンパイル し、32ビット・アプリを生成。
- 3) Intel Fortran for Linuxを使用。
- 4) 64bit版Windows XP上で、64ビットアプリとして起動。
この表を見ると、およそ10数年で計算速度はおよそ1000倍まで速くなっていること が分かる。ICの集積度とクロック周波数の増加、コンパイラーの性能向上が著しいこと が分かる。特に2004年のCVFからIVFへの変換だけで速度がおよそ倍(計算時間が半減) している。CPUを知り尽くしたIntelならではの性能向上と考えられる。