간단한 매트릭스 벤치 마크 테스트에서 혁명 분석R 2.13.2
의 LU 분해가 행렬 곱셈보다 거의 5 배 느리다는 것을 나타냅니다. 이론과 많은 연습을 통해 LU가 A*A
의 1/3에서 2/3 시간이어야 함을 알 수 있습니다.누구든지 Revol R에서 LU 분해의 비정상적인 동작을 설명 할 수 있습니까?
Revo R 및 Matlab은 인텔의 수학 커널을 사용합니다. R 2.14.1
은 커널을 사용하고 있지 않습니다. 모든 것이 64 비트입니다.
이상은 아래 표 2에 나와 있습니다. 표 1은 약 A*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.
UPDATE : 나는 사이먼 Urbánek의의 조언을 따라 lu(A)
로 LUP = expand(lu(Matrix(A)));
을 대체했다; 레보 R 행은 테이블을 포함하는
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
업무와 진행 보고서 및 사용되는 코드에 초
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
시간 지금 here이다.
업데이트 2 : 나는 행렬 분해 만 테스트 할 수있는 매트릭스 기준을 수정 한
. 이것들은 다른 모든 매트릭스 알고리즘이 구축되는 토대이며, 이것이 흔들리는 경우 다른 모든 알고리즘도 역시 불안정합니다. Core i7
프로세서는 높은 수요를 감지하면 최대 3.5GHz의로 클럭 속도를 증가 인텔의 터보 부스트 (Turbo Boost)이 있습니다
나는 새 브랜드
Lenovo ThinkPad X220, Intel Core i7-2640M CPU @ 2.80GHz,
8GB ram, 1 Processor, 2 Cores and 4 Threads
Windows 7 Professional, 64-bit.
주로 변경되었습니다. 내가 아는 한, Turbo Boost는 세 시스템 중 하나에서 프로그램 (mer) 제어를받지 못합니다.
이러한 변경 사항은 결과를 더욱 유용하게 만듭니다.
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
스팟 (보조 노트로 - 또한 관심을 당신이
microbenchmark
R 패키지 수에 - 당신은 당신의 벤치 마크에서system.time
을 사용할 수 있습니다)! 확장 (...)은 오버 헤드를 추가합니다. 위의 표를 업데이트하겠습니다. 또한'microbenchmark '팁에 감사드립니다. –FWIW 메인 오버 헤드가'Matrix'에 있고, 오버 헤드가 훨씬 더 작아서'확장됩니다. –