showtime ..... 計算時間の表示・非表示を切り替える変数

変数 showtime には true、false または all を設定する(デフォルトは false)。

CLISP v.s. CMUCL

CLISP を使った場合と CMUCL を使った場合とで、どのくらい計算時間に差が出るか実験してみました。

CPU PowerPC G4 1.25GHz
OS Mac OS X 10.3.8
CLISP 2.33.2
CMUCL 19a+

[実験 1] random 関数を用いて 1000 個の整数(概ね 10 桁)をランダムに発生させ、素因数分解するのにかかった時間を比較してみます。まずは CLISP から、

(%i1) showtime:true;

Evaluation took 0.00 seconds (0.00 elapsed) using 32 bytes.

(%o1)                           true


(%i2) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 9.78 seconds (10.05 elapsed) using 34388.145 KB.

(%o2)                           done


(%i3) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 9.72 seconds (10.11 elapsed) using 34003.969 KB.

(%o3)                           done


(%i4) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 8.92 seconds (9.20 elapsed) using 30233.461 KB.

(%o4)                           done


(%i5) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 9.77 seconds (10.08 elapsed) using 34466.152 KB.

(%o5)                           done


(%i6) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 8.94 seconds (9.24 elapsed) using 31146.852 KB.

(%o6)                           done
5 回の平均値は 9.426 秒でした。続いて、CMUCL でやってみましょう。
(%i1) showtime:true;

Evaluation took 0.00 seconds (0.00 elapsed) using 48 bytes.

(%o1)                           true


(%i2) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 3.45 seconds (5.27 elapsed) using 76363.359 KB.

(%o2)                           done


(%i3) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 3.26 seconds (3.50 elapsed) using 76973.070 KB.

(%o3)                           done


(%i4) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 3.38 seconds (3.63 elapsed) using 80868.266 KB.

(%o4)                           done


(%i5) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 3.98 seconds (4.21 elapsed) using 97923.695 KB.

(%o5)                           done


(%i6) for i:1 thru 1000 do factor(random(10^10));

Evaluation took 3.54 seconds (3.78 elapsed) using 86055.703 KB.

(%o6)                           done
なんと平均 3.522 秒、実に 2.7 倍近くも高速という結果となりました。

[実験 2] 一旦終了してもう一例、今度は (x + y + z)100 の展開をやってみます。まずは CLISP から:

(%i1) (showtime:true, expand((x+y+z)^100))$

Evaluation took 9.28 seconds (9.59 elapsed) using 9764.086 KB.
期待しつつ CMUCL で実行:
(%i1) (showtime:true, expand((x+y+z)^100))$

Evaluation took 1.35 seconds (1.44 elapsed) using 10945.242 KB.
CMUCL の方が CLISP より 7 倍近くも高速という結果となりました。

[再実験] 以下の環境で再度実験してみました。

実験日 2006/03/14 2006/03/27 2006/04/11 2007/06/02
CPU Core Duo 1.66GHz
OS Mac OS X 10.4.5 Windows XP SP2
Maxima 5.9.2.99rc2 5.9.3 5.12.0 5.12.0cvs
LISP CLISP 2.38 SBCL 0.9.11 GCL 2.6.7 GCL 2.6.8 CLISP 2.41
実験 1(5 回の平均) 5.336 0.912 3.316 1.064 0.724
実験 2 6.31 0.50 0.44 0.42 2.92
実験日 2008/08/29 2008/08/30
CPU Core 2 Extreme 2.8GHz Core 2 Duo 2.66GHz
OS Mac OS X 10.5.4
Maxima 5.15.0cvs
LISP CMUCL 2008-08 SBCL 1.0.19 CMUCL 2008-08
実験 1(5 回の平均) 0.32 0.1816 0.346
実験 2 0.1600 0.2290 0.1800