如果在外部或在parfor内访问,矢量值会有所不同

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那里运行,那么正确打印数字.

Hug*_*not 2

这是具体的运行问题,而不是节点问题。要验证这一点,您可以尝试

>> run parfortest.m
Run Code Online (Sandbox Code Playgroud)

从 MATLAB 桌面,您会发现相同的输出。

虽然这不是一个解决方案;如果你省略运行,只使用

>> parfortest
Run Code Online (Sandbox Code Playgroud)

错误的输出将被纠正。