4

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

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

所以显然我应该马上看到打印输出。当我使用由 启动的两个工人池运行它时matlabpool(2),我看不到任何打印输出。当我关闭工作人员并保持 parfor 循环时,我会看到打印输出,但只有在我按 ctrl-c 时才会看到。当我将其更改parfor为常规时for,我会看到输出。请注意,我从未见过循环运行完成,因为它很长,但打印输出是脚本的第二行,应该立即发生,除非在 matlab 中存在一些我不知道的缓冲区刷新问题。怎么了??

4

2 回答 2

3

我怀疑延迟是由于设置parfor循环的开销造成的。

根据我的经验,初始化循环可能需要几秒钟,最多 15 秒钟。当我的 a 循环中的代码使用具有大内存占用的变量时尤其如此,因为必须将变量复制到工作人员。

工作人员之间的数据复制是通过网络完成的,基本的网络活动监视器应该显示此活动。我发现确定我有多少parfor执行时间被用于初始化工作程序很有用。

fprintf一直在parfor循环中使用;但是,由于循环迭代不是按顺序进行的,因此我尝试对生成的输出进行创新。

如果您正在寻找的只是一个进度指示器,请查看: http: //www.mathworks.com/matlabcentral/fileexchange/32101-progress-monitor-progress-bar-that-works-with-parfor

于 2013-01-08T17:30:36.913 回答
0

我遇到了同样的问题,并尝试了几个月来找到解决方案。但最后我只是诉诸使用

disp(['text ',num2str(variable));
于 2016-11-15T13:07:53.327 回答