2012-04-12 122 views
7

在MATLAB中有一個關於parfor的簡單問題。我想在我的程序中設置一個標誌,以便在parfor和常規for循環之間切換。基本上,我需要這個功能,以便我的代碼的某些部分可以在「調試」模式下更新圖形,然後當標誌關閉時,使用parfor而不用圖形更新來提高速度。Matlab PARFOR循環可以以編程方式打開/關閉嗎?

所以,我在找一些簡單的有此功能:

if (flag) 
    for i = 1:n 
else 
    parfor i = 1:n 
end 

    % Do loop tasks. 

    end 

任何幫助將不勝感激!謝謝!

+0

是否保留的1池大小解決問題了嗎? – Mikhail 2012-04-13 01:50:23

+0

不完全是因爲parfor限制創建任何圖形對象,如圖。因此,無論何時我希望輸出,我都必須手動編輯函數的代碼。 – 2012-04-13 06:34:05

回答

5

不,這是不可能的。但是,如果你能在一個單獨的功能包的循環體,你可以有一個parforfor循環調用體內,即

if (flag) 
    parfor i=1:n 
     out(i) = loopBody(i) 
    end 
else 
    for i=1:n 
     out(i) = loopBody(i) 
    end 
end 

或者,讓你有,你可以編輯代碼,通過parforfor在你的循環之前,這是我經常最終做的。

+2

如果是4月1日,我會評論,比如「我希望MATLAB有'#define's!那麼我們可以'#定義LOOP parfor'或'#define LOOP for',我們不會有這個問題! – 2012-04-13 12:08:15

+2

@ Li-aungYip:是的,這確實很方便。 'parfor'很吸引人的調試。不過,我預計R2015a左右的問題已經解決。 – Jonas 2012-04-13 12:13:09

4

當您通過matlabpool close關閉池時,parfor的行爲與for類似,並允許所有圖形處理。所以你只需要在調試時關閉池。

+0

即使沒有工人羣體,「parfor」也不會像「for」那樣表現。循環迭代的順序不能保證,它們可以按任意順序執行。通常,爲了確保您不依賴正常順序中的數據,它們實際上是以* reverse *順序執行的。 – 2014-05-07 20:22:17

+1

請注意,這不再是完全正確的 - 最近版本的MATLAB和PCT *可以*自動爲您打開一個池,因此您可能需要根據我的答案使用可選數量的參數到'parfor'參數。 – Edric 2015-04-16 13:07:35

5

還有一個選擇 - 使用可選的參數PARFOR

if flag 
    arg = Inf; 
else 
    arg = 0; 
end 
parfor (idx = 1:n, arg) 
    ... 
end 
相關問題