単純なマトリックス ベンチマーク テストでは、Revolution Analytics R 2.13.2
の LU 分解がマトリックス乗算よりも 5 倍近く遅いことが示されています。理論と長年の実践により、LU は の 1/3 から 2/3 の時間になるはずですA*A
。
Revo R と Matlab は、このテストに
Intel の Math Kernelを使用しています。R 2.14.1
カーネルを使用していません。すべてが 64 ビットです。
この異常は、以下の表 2 に示されています。これは、 について正規化された表 1A*A
です。他にも(明らかな)異常がありますが、LU が最も目立つ異常です。
Table 1 (secs)
A*A LU A\b Det Inv
----------------------------------------------------
R 2.14.1 0.757 0.43 0.45 0.20 1.11
Revo R 2.13.2 0.063 0.35 0.11 0.03 0.14
Matlab 2011b 0.062 0.08 0.10 0.07 0.16
----------------------------------------------------
Averaged over 20 runs on a 1000x1000 random matrix
Table 2 (normalized)
A*A LU A\b Det Inv
----------------------------------------------------
R 2.14.1 1 0.57 0.19 0.26 1.47
Revol R 2.13.2 1 4.67* 1.58 1.33 2.17
Matlab 2011b 1 0.67 1.72 0.61 1.68
----------------------------------------------------
Note: x = A\b in Matlab is x <- solve(A,b) in R.
更新: Simon Urbanek のアドバイスに従い、 ; に置き換えLUP = expand(lu(Matrix(A)));
ましたlu(A)
。Revo R列は現在
Revol R 2.13.2
A*A LU A\b Det Inv
---------------------------------
time 0.104 0.107 0.110 0.042 0.231
norm time 1.000 1.034 1.060 0.401 2.232
秒単位の時間
Dell Precision 690, 2 x Intel® Xeon® E53405 CPU @ 2.33GHz,
16GB ram, 2 Processors, 8 Cores and 8 Threads,
Windows 7 Prof., 64-bit
テーブルと使用されたコードを含む進行中のレポートはこちらです。
更新 2 :
行列分解のみをテストするように行列ベンチマークを変更しました。これらは、他のすべての行列アルゴリズムが構築される基盤であり、これらが不安定な場合、他のすべてのアルゴリズムも不安定になります。
新品に変えました
Lenovo ThinkPad X220, Intel Core i7-2640M CPU @ 2.80GHz,
8GB ram, 1 Processor, 2 Cores and 4 Threads
Windows 7 Professional, 64-bit.
注:Core i7
プロセッサにはIntel のターボ ブーストが搭載されており、高い需要を感知すると、クロック レートが最大 3.5 GHz まで上がります。私の知る限り、Turbo Boost は 3 つのシステムのいずれにおいてもプログラム (マー) の制御下にありません。
これらの変更により、結果がより有用になることを願っています。
Table 3. Times(secs)
A*A chol(A) lu(A) qr(A) svd(A) eig(A) Total
-----------------------------------------------------------------------------
R 2.14.1 0.904 0.157 0.260 0.568 4.260 6.967 13.11
Revol R 2.13.2 0.121 0.029 0.062 0.411 1.623 3.265 5.51
Matlab 2011b 0.061 0.014 0.033 0.056 0.342 0.963 1.47
-----------------------------------------------------------------------------
Times(secs) averaged over 20 runs
Table 4. Times(normalized)
A*A chol(A) lu(A) qr(A) svd(A) eig(A) Total
----------------------------------------------------------------------------
R 2.14.1 1.000 0.174 0.288 0.628 4.714 7.711 14.52
Revol R 2.13.2 1.000 0.237 0.515 3.411 13.469 27.095 45.73
Matlab 2011b 1.000 0.260 0.610 0.967 5.768 16.774 25.38
----------------------------------------------------------------------------
Times(secs) averaged over 20 runs
表 4 から、疑似異常が消失し、すべてのシステムが理論の予測どおりに動作することがわかります。
Table 5. Times/Matlab Times
A*A chol(A) lu(A) qr(A) svd(A) eig(A) Total
----------------------------------------------------------------------------
R 2.14.1 15 11 8 10 12 7 9
Revol R 2.13.2 2 2 2 7 5 3 4
----------------------------------------------------------------------------
Rounded to the nearest integer