本Kitの製品構成は以下の通りです。
MinGW-1.1の構成は以下の通りです。
Tcl/Tk 8.3.4のソースコードをビルドするには、以下のように行います。
configureが-mno-cygwinオプション付きのMakefileを生成してくれます。
$ cd tcl8.3.4/win $ ./configure --enable-gcc --enable-threads $ make $ cd tk8.3.4/win $ ./configure --enable-gcc --enable-threads $ make |
出来た実行形式がcygwin1.dllに依存していないかを調べるにはobjdumpコマンドを使います。
$ objdump -p tclsh83.exe | grep "\.dll" DLL Name: msvcrt.dll DLL Name: KERNEL32.dll DLL Name: tcl83.dll $ objdump -p wish83.exe | grep "\.dll" DLL Name: msvcrt.dll DLL Name: KERNEL32.dll DLL Name: USER32.dll DLL Name: tcl83.dll DLL Name: tk83.dll |
cygwin1.dllの代わりにmsvcrt.dllが表示されれば、問題ないでしょう。
ちなみに、msvcrt.dllは、MS社のCランタイムで、Windowsに標準で備わっています。
オプション | 説明 |
---|---|
-O | -O1と同じ |
-O0 | 最適化を行わない |
-O1 | コードサイズ削減と実行速度向上を目指す最適化を行う 変数をレジスタに割り当てたり、多重条件ジャンプの最適化などを行う |
-O2 | さらに高度な最適化を実行する。ほとんどの最適化機能が有効になが、 ループ展開と関数のインライン展開、レジスタのリネームは行わない |
-O3 | -O2より進んだ最適化を行う。ループ展開や関数のインライン展開なども行う |
-Os | コードサイズを小さくするための最適化を行う。-O0〜3などの実行速度を向上させるオプションとも併用できます |
通常、コンパイラのバグなどに遭遇する恐れがあるので、-O2を使うのが無難です。
CPUタイプ | 説明 |
---|---|
i386 | i386やその互換CPU |
i486 | i486やその互換CPU |
i586 | Pentium, MMX Pentium,やその互換CPU |
i686 | Pentium Pro, Pentium II, Pentium III, Pentium 4, Celeronなど |
pentium | i586と同じ |
pentiumpro | i686と同じ |
k6 | K6, K6-2, K6-III |
athlon | Athlon, Athlon MP, Athlon XP |
環境 | TkEngine値 |
---|---|
ActiveTcl 8.3.4.1 | 31 |
Tcl8.3.4 MinGWビルド版 | 33 |
次に、須栗歩人さんが、1997年11月に公開されたTcl/Tk Benchmark Ver.1.3を使ってテストしました。
この結果も、MinGWビルド版の方が若干速いという結果になりました。誤差の範囲かもしれません。
環境 | 項目 | 実行時間 |
---|---|---|
ActiveTcl 8.3.4.1 | LINE | 0.98秒 |
PAINT | 0.89秒 | |
MOVE | 1.77秒 | |
TOTAL | 3.64秒 | |
Tcl8.3.4 MinGWビルド版 | LINE | 0.93秒 |
PAINT | 0.85秒 | |
MOVE | 1.69秒 | |
TOTAL | 3.47秒 |
最後に、MetaCardのPerformance Benchmarks を使ってテストしました。
この結果は、MinGWビルド版の方が若干遅いという結果になりました。誤差の範囲かもしれません。
環境 | 項目 | 実行時間 |
---|---|---|
ActiveTcl 8.3.4.1 | 1000000 repeats | 1.162秒 |
10000 iterative factorial(100) | 49.942秒 | |
10000 iterative factorial(100) with 'if' | 50.382秒 | |
10000 recursive factorial(100) | 87.316秒 | |
1000 exec calls | 16.183秒 | |
2000 100-line file writes and reads | 6.199秒 | |
10 stem generation took | 5.017秒 | |
total time was | 216.201秒 | |
Tcl8.3.4 MinGWビルド版 | 1000000 repeats | 1.122秒 |
10000 iterative factorial(100) | 50.803秒 | |
10000 iterative factorial(100) with 'if' | 51.354秒 | |
10000 recursive factorial(100) | 88.858秒 | |
1000 exec calls | 16.864秒 | |
2000 100-line file writes and reads | 5.398秒 | |
10 stem generation took | 5.658秒 | |
total time was | 220.057秒 |
これだけのデータでは、なんとも言えませんが、このテストの結果では、
ActiveTclとMinGWビルド版は互角の性能で、十分に実用的であると言えます。
さらに、gcc 3.0でどのくらい最適化機能が向上しているか期待してしまう。