我正在运行一个带有parfor循环的小脚本。脚本以下面的行开始:
parfor i=1:length(vX)
fprintf('%d/%d\n',i,length(X));
...所以很显然我应该马上看指纹。当我用一个由matlabpool(2)打开的由两个工人组成的池运行它时,我看到没有输出。当我关闭工人,保持parfor循环,我看到打印,但只有当我点击ctrl。当我将parfor转换为常规的for时,我会看到输出。请注意,我从来没有看到循环运行到完成,因为它是相当长的,但打印是第二行脚本,应该立即发生,除非有一些缓冲区冲洗问题,我不知道在matlab中。发生什么事了??
发布于 2013-01-08 17:30:36
我怀疑延迟是由于设置parfor循环的开销造成的。
根据我的经验,初始化循环需要几秒钟,最多15秒。当我的a循环中的代码使用具有大内存足迹的变量时,情况尤其如此,因为变量必须复制到工作人员。
工作人员之间的数据复制是通过网络进行的,一个基本的网络活动监视器应该会显示该活动。我发现确定我的parfor执行时间中有多少会被消耗掉初始化工作人员是有用的。
我一直在parfor循环中使用parfor;但是,由于循环迭代不是按顺序进行的,所以我试图对生成的输出保持创造性。
如果您正在寻找的只是一个进度指示符,请检查:http://www.mathworks.com/matlabcentral/fileexchange/32101-progress-monitor-progress-bar-that-works-with-parfor
发布于 2016-11-15 13:07:53
我也遇到了同样的问题,我花了几个月的时间来寻找解决方案。但最后我还是求助于
disp(['text ',num2str(variable));https://stackoverflow.com/questions/14219676
复制相似问题