線型方程式

C と C++ と D と FortranOCamlCommon Lisp で 千元一次方程式を解いてみました。
https://github.com/yshl/1000x1000
手元のパソコンでは、C (GCC 4.7.1) や C++ (G++ 4.7.1) や Fortran (GNU Fortran 4.7.1) は 0.75〜0.8 秒程度、D (DMD v2.058) も 0.8 秒前後で計算できますが、OCaml (OCaml 4.00.1) は 4 秒ほど、Common Lisp (SBCL 1.0.55) は 55 秒ほどかかります。
といっても私の OCaml 力と Common Lisp 力は低く、最適化オプションの付け方も分かっていませんので、高速化の余地は大いにあるはず。
追記: 使わない結果は collect しない、配列作成時に型を指定する、で Common Lisp が 30 秒になった。
追記: OCaml が 1.4 秒になった。
追記: SBCL が前進消去の関数の型指定で 21.2 秒に。さらに ECL で試したら 12.5 秒になった。
追記: BLASLAPACK ライブラリに ATLAS-3.10.0 を使った R、OctaveScilab で試したら、R が 0.4 秒、OctaveScilab が 0.26 秒でした。専門家はすごいですね。
追記: ATLAS を直接 C や Fortran から使うと 0.1 秒。