當我使用eigs
時,我似乎獲得不同的性能結果。在相同的矩陣上,呼叫
[c, v] = eigs(A, 2, 'sm');
somtimes需要30秒,有時2秒。
我需要知道是否有使用一些緩存對同一矩陣隨後呼籲eigs
因爲我要報時代的加速......爲eigs做matlab緩存解決方案
回答
如果是這樣,這並不似乎是一個通用的功能。我跑在命令行
A = randn(10000);
B = randn(10000);
C = B;
tic; [c1,v1] = eigs(A,2,'sm'); toc;
tic; [c2,v2] = eigs(A,2,'sm'); toc;
tic; [c3,v3] = eigs(B,2,'sm'); toc;
tic; [c4,v4] = eigs(C,2,'sm'); toc
該項測試,並得到了這個結果
經過的時間32.373128秒。
已用時間爲28.412905秒。
已用時間爲32.752616秒。
已用時間爲29.024055秒。
我很驚訝,因爲通常MATLAB試圖智勝你,並將存儲結果重用。
如果MATLAB試圖通過簡單地返回它所做的最後一件事來規避重複調用,這將是一件壞事。如果你的功能是一個隨機過程呢?你想讓MATLAB返回相同的結果嗎?例如,應該重複調用rand來返回相同的結果嗎?當然不是。但實際上,eigs使用隨機起始值,所以它可能會在最低位產生不同的結果。或者,它可能會返回相同的一組特徵向量,但具有不同的符號。 – 2012-05-22 17:57:28
@woodchips:MATLAB是一種腳本語言。解釋器通常可以確定重複函數調用是否會返回相同的值,尤其是內置函數。正如你所說,它可能是MATLAB知道eigs使用rand調用,所以每次都應該從頭開始。 – Marc
對不起,但我知道一個事實,即MATLAB不會像你說的那樣做,我可以證明這是一個真實的陳述。從3.2版本開始從未如此(早在我作爲一個大用戶時,儘管我有一個早期版本的副本),但在最新版本中仍然不是這樣。 – 2012-05-22 18:28:59
在某些情況下,足夠大的矩陣可能會將事物推入虛擬內存,或者不是,這取決於是否有足夠大的連續RAM可用塊。或者,你可能在做一些事情。
您可以通過在測試時觀察過程監視器來驗證發生了什麼。突然有大量的磁盤訪問?如果是這樣,那麼虛擬內存正在被觸摸。是否有一個不同的,不相關的進程正在佔用CPU?
- 1. 緩存解決方案
- 2. 我的緩存解決方案解決方案是否安全?
- 3. matlab內存最終解決方案
- 4. 檢查存在的解決方案Matlab
- 5. Matlab編程解決方案
- 6. 解決方案使用MATLAB
- 7. 最佳的NoSQL緩存解決方案
- 8. 需要Java緩存解決方案
- 9. 快速緩存解決方案PHP
- 10. 需要我的asp.net mvc解決方案的緩存解決方案
- 11. java - 支持索引/查詢緩存的緩存解決方案
- 12. 在Matlab中'內存不足'。一個緩慢但永久的解決方案?
- 13. MATLAB簡單的MLE解決方案
- 14. Matlab中的double sqrt解決方案?
- 15. Matlab需要的解決方案
- 16. Matlab解決方案的兩個圖
- 17. 尋找內存中的緩存解決方案
- 18. 想要一個好的內存+磁盤緩存解決方案
- 19. 爲VS2008解決方案創建VS2010解決方案文件
- 20. QUERY的解決方案是緩慢
- 21. 做ILP時的多種解決方案
- 22. 作爲矩陣的方程的Matlab解決方案
- 23. Specflow stepdefinitionreport爲解決方案
- 24. MVVM解決方案爲wpf
- 25. 解決方案爲eval
- 26. 簡單注射器的生活方式作爲緩存解決方案
- 27. 在asp.net MVC3中輸出緩存的替代緩存解決方案是什麼?
- 28. 有條件頁面緩存[解決方案:條件片段緩存]
- 29. 下載和緩存圖像的最佳解決方案
- 30. 無緩存解決方案和圖像的問題
真的嗎? 30秒?這個矩陣有多大?也許你正在運行一些需要大量CPU的進程? –