【轉】Matlab使用過程中記憶體不足問題的總結

來源:互聯網
上載者:User

標籤:

使用matlab過程中經常會出現記憶體不足的問題,這裡轉載一篇來自http://blog.csdn.net/xiaojidan2011/article/details/8089532 的博文,解決這一問題。

 

 

  做影像處理的,對matlab這工具軟體一定不會陌生,他的高整合度為影像處理提供了很大的方便,但我們在使用時難免會出現記憶體不足的問題,2、3G的記憶體還不夠處理一次簡單映像,這確實很恐怖。但這裡的警告並不是說真的實體記憶體用完了,一般out of memenry存在以下幾種情況:
1、 變數需要的儲存空間超過了可用的記憶體空間
2、 資料需要的儲存空間,超過記憶體中最大的可用連續儲存空間
3 、程式和問題求解方法的設計不周,導致記憶體溢出

       個人認為,第一種出現情況最少,第二種出現情況應該是福士情況,第三種那我只能說你是個不太地道、不夠細心的程式員,至少分配大點的地方給變數麼!!下面就簡單說下處理和應對方法:

       由於在使用的過程中,由於儲存單元的不斷的被分配和清除,記憶體會被分割成不連續的地區,這是很容易造成“Out of Memory”。

1、為矩陣變數預製記憶體而不是動態分配
       在動態分配的過程中,由於開始Matlab所用的Block隨著矩陣的增大而連續的為此矩陣分配記憶體,但是由於Block的不連續性,很有可能最開始分配的Block不能滿足儲存的需要,Matlab只好移動此Block以找到更大的Block來儲存,這樣在移動的過程中不但佔用了大量的時間,而且很有可能它找不到更大的塊,導致Out of Memory。而當你為矩陣變數預製記憶體時,Matlab會在計算開始前一次性找到最合適的Block,此時就不用為變數連續的分配記憶體。
比較下面兩個程式:
       (1)for k = 2:1000
                      x(k) = x(k-1) + 5;
                end
      (2)x = zeros(1, 1000);
                for k = 2:1000
                      x(k) = x(k-1) + 5;
                end
     顯然,第二個更好!!!最好的方法是,在程式一開始就位所有大的矩陣變數預製存儲存單元!!!

2、盡量早的分配大的矩陣變數
        Matlab使用heap method管理記憶體。當在Matlab heap中沒有足夠的記憶體使用量時,它會向系統請求記憶體。但是只要記憶體片段可以存下當前的變數,Matlab會重新使用記憶體。所在在大記憶體變數clear以後,建立的小記憶體變數仍可以使用那部分記憶體空間,但相反就不行了。比如說a變數4M,b、c、d、e分別為1M,如果a被clear以後定義bcde,則可以使用a的空間,如果clear b,c,d,e以後,假如這四個變數不是連續的,那麼a就不能使用它們釋放的記憶體。
3、盡量避免產生大的瞬時變數,當它們不用的時候應該及時clear

4、將矩陣轉化成稀疏形式
    如果矩陣中有大量的0,最好儲存成稀疏形式。稀疏形式的矩陣使用記憶體更少,執行時間更短。

5、使用pack命令
      當記憶體被分為很多片段以後,其實本身可能有很大的空間,只是沒有作構的連續空間即大的Block而已。如果此時Out of Memory,此時使用pack命令可以很好的解決此問題。

6、如果可行的話,將一個大的矩陣劃分為幾個小的矩陣,這樣每一次使用的記憶體減少。

7、增大虛擬記憶體
     Windows XP,右鍵“我的電腦”->屬性->進階->效能->設定,從而改變其虛擬記憶體。
      Windows 7,右鍵“電腦”->屬性->(左側邊欄)進階系統設定->進階->(效能)設定->進階->(虛擬記憶體)更改,建議實體記憶體的兩倍左右,如果實體記憶體已經3G+,那就不用調整了。

8、盡量少使用系統資源(對於Windows)
     Windows中字型、視窗等都是要佔用系統資源的,所以在Matlab運行時盡量不要開啟不用的視窗。

9、如果沒有必要,不要啟動java虛擬機器,採用matlab -nojvm啟動 (在捷徑屬性裡面的 "..../matlab.exe") 改為("...../matlab.exe" - nojvm)

10、關閉Matlab Server

【轉】Matlab使用過程中記憶體不足問題的總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.