我正在运行一个带有parfor循环的小脚本。该脚本从以下行开始:
parfor i=1:length(vX)
fprintf('%d/%d\n',i,length(X));
...
显然我应该立即看到打印输出。当我使用由matlabpool(2)
打开的两名工作人员的帐户运行时,我看到否打印输出。当我关闭工人,保持parfor循环时,我看到打印输出,但只有当我按下ctrl-c时。当我将parfor
更改为常规for
时,我会看到输出。请注意,我从来没有看到循环运行完成,因为它很长,但打印输出是脚本的第二行,应该立即发生,除非在matlab中有一些缓冲区刷新问题我不知道。
发生了什么事?
答案 0 :(得分:3)
我怀疑延迟是由于设置parfor
循环的开销。
根据我的经验,初始化循环可能需要几秒甚至15秒。当我的循环中的代码使用具有大内存占用的变量时,尤其如此,因为必须将变量复制到工作者。
工作人员之间的数据复制是通过网络完成的,基本网络活动监视器应该显示此活动。我发现有必要确定我的parfor
执行时间有多少被用来初始化工人。
我在fprintf
循环中始终使用parfor
;但是,我试图对生成的输出有创意,因为循环迭代不是顺序的。
如果您要查找的是进度指示,请查看:http://www.mathworks.com/matlabcentral/fileexchange/32101-progress-monitor-progress-bar-that-works-with-parfor
答案 1 :(得分:0)
我遇到了同样的问题,并尝试了几个月才找到解决方案。但最后我只是使用了
disp(['text ',num2str(variable));