不打印

时间:2013-01-08 16:32:47

标签: matlab parfor

我正在运行一个带有parfor循环的小脚本。该脚本从以下行开始:

parfor i=1:length(vX)
    fprintf('%d/%d\n',i,length(X));
    ...

显然我应该立即看到打印输出。当我使用由matlabpool(2)打开的两名工作人员的帐户运行时,我看到打印输出。当我关闭工人,保持parfor循环时,我看到打印输出,但只有当我按下ctrl-c时。当我将parfor更改为常规for时,我会看到输出。请注意,我从来没有看到循环运行完成,因为它很长,但打印输出是脚本的第二行,应该立即发生,除非在matlab中有一些缓冲区刷新问题我不知道。 发生了什么事?

2 个答案:

答案 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));