Ho creato questo test Matlab file di script:valori Vector differiscono se si accede dall'esterno o dall'interno di parfor
numbers = [29 37 44 54 62];
for i=1:length(numbers)
fprintf('%d\n', numbers(i));
end
fprintf('***\n');
matlabpool local 5;
parfor i=1:length(numbers)
fprintf('%d\n', numbers(i));
end % image loop
fprintf('***\n')
for i=1:length(numbers)
fprintf('%d\n', numbers(i));
end
matlabpool close;
fprintf('***\n');
for i=1:length(numbers)
fprintf('%d\n', numbers(i));
end
quando l'eseguo, ottengo costantemente il seguente output:
29
37
44
54
62
***
112
111
107
117
115
***
29
37
44
54
62
***
29
37
44
54
62
Il fprintf
all'interno del blocco parfor
viene stampato il set apparentemente casuale di numeri che è, tuttavia, sempre lo stesso (112, 111, 107, 117, 115). Qualche idea sul perché questo sta accadendo?
UPDATE
È interessante notare che questo accade solo se corro lo script da riga di comando:
matlabR2012b -nodesktop -nosplash -nodisplay -r "run parfortest.m; exit"
Se io prima aprire una sessione di Matlab e corro parfortest
lì, allora i numeri sono stampati correttamente.
Interessante - questo non mi succede. Che versione usi? – jazzbassrob
A cosa serve il 'matlab pool'? Non mi sembra di avere una licenza per questo, ma dopo averlo rimosso ottengo gli stessi numeri (anche se in ordine inverso). – KronoS
'matlabpool' apre un pool di worker per eseguire il codice parallelo, senza di esso,' parfor' è un semplice 'for'. – Oleg