ich diesen Test Matlab-Script-Datei erstellt haben:Vector Werte unterscheiden zugegriffen, wenn außen oder von innen 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
Wenn ich es laufen, bekomme ich konsequent die folgende Ausgabe:
29
37
44
54
62
***
112
111
107
117
115
***
29
37
44
54
62
***
29
37
44
54
62
Die fprintf
innerhalb der parfor
Block druckt die scheinbar zufällige Menge von Zahlen, die jedoch immer die gleichen ist (112, 111, 107, 117, 115). Irgendeine Idee, warum das passiert?
UPDATE
Interessanterweise geschieht dies nur, wenn ich das Skript von der Kommandozeile aus:
matlabR2012b -nodesktop -nosplash -nodisplay -r "run parfortest.m; exit"
Wenn ich zum ersten Mal eine Sitzung Matlab öffnen und parfortest
dort laufen, dann werden die Zahlen gedruckt korrekt.
Interessant - das passiert mir nicht. In welcher Version bist du? – jazzbassrob
Wozu dient der 'Matlab Pool'? Ich habe anscheinend keine Lizenz dafür, aber nachdem ich das entfernt habe, bekomme ich die gleichen Nummern (wenn auch in umgekehrter Reihenfolge). – KronoS
'Matlabpool' öffnet einen Pool von Arbeitern, um parallelen Code auszuführen, ohne ihn ist' parfor' ein einfaches 'for'. – Oleg