2008-10-08

Matlab 記憶體問題

前一陣子要將Matlab語法改成C,結果遇到莫名的記憶體錯誤,迴圈跑的次數太多會掛掉,次數少一點就可以正確跑完,還以為是程式寫錯了,原來是記憶體的限制。應該算是windows XP的問題吧。


以為是程式寫錯,花了兩天在找bug,結果是記憶體的問題。

適用環境
MATLAB 7.0(R14) on 32bit CPU and Windows XP

MATLAB 在 Windows XP 所需要的記憶體超過 1.7GB 時,MATLAB會發生 "out of memory" 的 warning。不管你怎麼增加 physical memory 或 virtual memory 都無法改善這個問題。

其原因在於 Windows XP 限制最多配置 2GB virtual memory 給每一個 process。
所以 MATLAB 預設在 Windwos XP 上只能使用大約 1.5GB 的記憶體。

但是 MATLAB 7.0 之後,開始支援 3GB switch 開機選項。可以藉著修改 C:\boot.ini 的方式,使 Windows XP 對每一個 process 的 virtual memory 配額上限到達 3GB。

如何修改Windows XP 中的 Boot.ini 檔
http://support.microsoft.com/kb/289022
如果您要檢視和編輯 Boot.ini 檔:
1. 以滑鼠右鍵按一下 [我的電腦],再按 [內容]。
-或-
在 [控制台] 中啟動 [效能及維護] 工具,然後按一下 [系統]。
2. 在 [進階] 索引標籤的 [啟動及修復] 下,按一下 [設定]。
3. 在 [系統啟動] 下,按一下 [編輯]。

然後在最後面加上 /3GB
http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx

再重新開機即可。

接下來在 Matlab 下 feature('memstats'); 這個指令就可以看到 virtual memory 變成3G囉。


(繼續閱讀...)