2013-03-12 23 views
1

我目前在MATLAB中實現不同的信號處理算法,以後用C++實現其中的一個。要在這些之間進行選擇,我將執行一些測試,其中一個是內存使用檢查。也就是說,我想看看不同算法使用多少內存。由於實現分爲子功能,因此在收集有關實際內存使用情況的信息時遇到問題。Matlab - 程序的內存使用

這是我到目前爲止已經試過:

  1. 我使用Profiler來檢查每個函數的內存使用情況。 問題:它只顯示分配的內存使用情況。它沒有顯示例如每個函數中變量的內存使用情況。

  2. 我在每個函數的末尾都使用了whos來收集有關函數工作區中所有變量的信息。然後我將這些添加到全局變量中。 問題:即使執行完成後,全局變量仍在增加,它似乎永不停止。

現在我的問題。我怎樣才能以一種相當簡單的方式獲得關於我的程序的內存使用情況的信息,包括所有功能?

致以問候

回答

2

我認爲你的策略在每個函數結束時(在它返回之前)調用whos是一個好方法;但也許你想把結果打印到屏幕上而不是全局。如果它「持續增長」,那麼你可能有一個被稱爲你不知道的回調函數,並且包括你的whos調用中的一個。通過打印到屏幕(可能包括一個disp('**** memory usage at the end of <function name> ***')就在它之前,你會發現它爲什麼「繼續前進」。

使用memory的替代方法有點幫助,但它提供了有關「可用」內存的信息如用Matlab使用的所有內存(而不僅僅是變量)

當然內存使用的任何快照不一定搶峯 - 這可能是像

x = sum(repmat(A, [1000 1])); 

聲明將需要相當大峯值內存使用率(如您複製1000次矩陣A),那麼內存(或運行whos)權之前或之後不會告訴你到底發生了什麼TA快照...

+0

感謝您的回答。這意味着我將無法看到我的程序的峯值內存使用情況,對不對?你認爲在程序運行時查看任務管理器會有幫助嗎?或者,當我不執行任何代碼時,MATLAB的內存使用情況會發生變化? – shizzle 2013-03-13 19:08:43

+0

'top'可能不會更新得足夠快以至於看不到內存中的短暫尖峯(比如將由我的答案中的代碼創建)......並且Matlab在做一些內存管理時很聰明,所以_application_似乎並沒有在每次分配一個變量時從操作系統請求內存。但在粗糙的層面上,它確實對你有一點幫助。看起來'pmap -x [pid]'命令提供了很多信息,但很難分析... – Floris 2013-03-13 19:45:19

+1

+1任務管理器?聽起來像你在Windows上。從Sysinternals抓取Process Explorer;它具有可記住高水位的峯值內存使用量(從操作系統的角度來看)。如果你使用未記錄的「profile on -memory」選項,我相信每個函數都有一個高峯的內存使用,所以你可以從Matlab的角度來看它,你可以通過'profile('info')編程獲得它。 '。 .NET System.Diagnostics.Process類(可以從M代碼調用)將從操作系統視圖中顯示峯值內存度量。 – 2013-03-18 04:59:51

1

監視內存的使用情況,最好的辦法就是使用Profiler使用存儲器選項打開:

在 %

輪廓-Memory運行代碼 profreport

探查返回內存使用和函數調用的統計數據。請注意,內存選項會影響執行速度。