2012-04-12 12 views
7

Masz proste pytanie na temat parfor w MATLAB. Chciałbym ustawić flagę w moim programie, aby zmienić pomiędzy parfor i regular dla pętli. Zasadniczo potrzebuję tej funkcji, aby niektóre części mojego kodu mogły aktualizować grafikę w trybie "debugowania", a kiedy flaga jest wyłączona, należy użyć polecenia parfor bez aktualizacji graficznych dla szybkości.Czy pętla Matlab PARFOR może być programowo włączona/wyłączona?

Więc szukam czegoś prostego, który ma tę funkcjonalność:

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

    % Do loop tasks. 

    end 

Każda pomoc będzie bardzo mile widziane! Dzięki!

+0

Czy zastrzegając wielkość puli 1 w rozwiązaniu problemu? – Mikhail

+0

Niezupełnie dlatego, że parfor ogranicza tworzenie jakichkolwiek obiektów graficznych, takich jak wykresy. Dlatego zawsze, kiedy chcę tego wyjścia, muszę ręcznie edytować kod funkcji. –

Odpowiedz

5

Nie, nie jest to możliwe. Jednakże, jeśli można owinąć ciało pętli w osobnej funkcji, można mieć albo parfor lub połączenia for pętli organizmu, tzn

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

Alternatywnie można zmodyfikować kod tak, że masz albo parfor lub for przed twoją pętlą, co często robię.

+2

Gdyby był 1 kwietnia, skomentowałbym: "Chciałbym, żeby MATLAB miał # # define!", Wtedy moglibyśmy # #define LOOP parfor' lub '#define LOOP for', a my nie mielibyśmy tego problemu!" –

+2

@ Li-aungYip: tak, to rzeczywiście byłoby wygodne. 'parfor' jest do bani do debugowania. Spodziewam się, że około R2015a problem jest jednak rozwiązany. – Jonas

4

Po zamknięciu basenu przez matlabpool close, parfor zachowuje się jak for i umożliwia obsługę wszystkich grafik. Musisz tylko zamknąć pulę podczas debugowania.

+0

'parfor' nie zachowuje się jak' dla', nawet gdy nie ma puli pracowników. Kolejność iteracji pętli nie jest gwarantowana i mogą być wykonywane w dowolnej kolejności. Zazwyczaj, aby upewnić się, że nie polegasz na nich w normalnej kolejności, są one wykonywane w kolejności * odwrotnej *. –

+1

Zauważ, że to już nie jest prawdą - ostatnie wersje MATLAB i PCT * mogą * automatycznie otwierać pulę dla ciebie, więc możesz potrzebować użyć opcjonalnej liczby argumentów pracowników do 'parfor' jak na moją odpowiedź. – Edric

5

Jeszcze jedna opcja - użyć opcjonalnego argumentu PARFOR

if flag 
    arg = Inf; 
else 
    arg = 0; 
end 
parfor (idx = 1:n, arg) 
    ... 
end 
Powiązane problemy