Joh*_*nak 5 parallel-processing matlab parfor
我已经创建了这个测试Matlab脚本文件:
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
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下输出:
29
37
44
54
62
***
112
111
107
117
115
***
29
37
44
54
62
***
29
37
44
54
62
Run Code Online (Sandbox Code Playgroud)
在fprintf该内parfor块打印的看似随机组数字中的哪一个,但是,总是相同的(112,111,107,117,115).知道为什么会这样吗?
UPDATE
有趣的是,只有从命令行运行脚本才会发生这种情况:
matlabR2012b -nodesktop -nosplash -nodisplay -r "run parfortest.m; exit"
Run Code Online (Sandbox Code Playgroud)
如果我首先打开一个Matlab会话并在parfortest那里运行,那么正确打印数字.
这是具体的运行问题,而不是节点问题。要验证这一点,您可以尝试
>> run parfortest.m
Run Code Online (Sandbox Code Playgroud)
从 MATLAB 桌面,您会发现相同的输出。
虽然这不是一个解决方案;如果你省略运行,只使用
>> parfortest
Run Code Online (Sandbox Code Playgroud)
错误的输出将被纠正。