【问题标题】:parfor not printingparfor 不打印
【发布时间】:2016-11-15 21:14:54
【问题描述】:

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

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

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

【问题讨论】:

  • 这是否意味着您立即按 ctrl-c?您等待输出出现在控制台中多长时间? parfor 循环是否完成?
  • 不,我等待几秒钟然后按 ctrl-c。不过,打印输出应该是即时的。我会将此信息添加到问题中。
  • 也许stdout 上的parfor 上存在某种锁定?

标签: matlab parfor


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    disp(['text ',num2str(variable));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多