2016-07-18 156 views
0

如果parfor認爲計算機沒有足夠的RAM來並行運行代碼,它會自動序列化它嗎?這絕對是這種情況。沒有足夠的內存用於parfor

我有兩個相同的parfor循環(除了關於它們中矩陣的大小)。第一個很容易達到100%的CPU和一半的RAM,第二個達到12-20%的CPU和所有的RAM,代碼是完全相等的(除了它們中的矩陣的大小)。

+0

如果您的代碼足夠短[mcve],請編輯您的問題以包含代碼。根據我的經驗,'parfor'總是會在內存不足時拋出一個簡單的內存不足錯誤,並且不會進入串口。 – Adriaan

回答

0

我已經解決了這個問題中的相同問題here

簡而言之,作爲獨立於其他人的Matlab池中的每個工人,每個工人都需要自己的內存量。

否,如果內存不足,Matlab不會自動將for循環序列化。如果Matlab拋出一個適當的錯誤(因爲我知道它發生在Windows PC上),你可以做一些try-catch聲明。 try-catch只是試圖執行try分支中的代碼,如果發生錯誤,它會自動執行catch塊。在你的情況下,它會像

try 
    % parfor here 
catch 
    % standard for here 
end 
+1

你可以做到這一點。我會添加關於嘗試捕獲的想法總體上有多糟糕的信息,因爲它會使代碼方式變慢。 –

+2

「try/catch」的問題是,如果你的代碼在並行處理2小時後耗盡內存,你只是浪費了2個小時的時間去嘗試做一些無法完成的事情。更好的辦法是估計輸出的大小,看看它是否適合整個RAM,然後根據這個決定。 – Adriaan

相關問題