创建图形进度指示器,以监视长时间运行循环中的迭代完成。使用类似于WAITBAR功能的MATLAB,但除了普通循环之外,它还适用于PAR循环。Worker线程写入临时文件以记录每个Parer迭代的完成,并且定时器定期更新进度条。通过在内部传递到WaitBar的可选参数,用户可以设置取消按钮或等待栏支持的任何其他选项。金宝app目前,只支持本地执行,但可以修改该函数以替换所有工人可访问的位置的金宝app临时器。
示例用法:
N = 50;parfor迭代的总数
hbar = parfor_progressbar(n,'请等待...');%创建进度条
parfor i = 1: N,
暂停(rand);%计算
hbar.iterate (1);%一次迭代更新进度
结束
关闭(百巴);%关闭进度条
丹尼尔·特里(2021)。parfor_progressbar.(//www.tatmou.com/matlabcentral/fileexchange/53773-parfor_progressbar), MATLAB中央文件交换。检索.
如果您有许多工人和许多迭代,则磁盘I / O操作会降低性能,以便使使用不可能。
对文本文件的多次读写有一些严重的限制:1。非常耗时,2。同时读/写可能会引起一些麻烦,3。只在本地池上工作。
我实现了我自己的parfor进度监视器基于udp套接字(没有读/写问题,快得多,不仅在本地池工作)。
它显示了每个worker ->的剩余时间和进度https://de.mathworks.com/matlabcentral/fileexchange/71436-parfor-progress-monitor-progress-bar-v4
伟大的功能且易于实施,但有了大迭代,即1000,我强烈建议在10个周期增加进度栏,以加快过程。在没有进度栏的情况下采取的时间:60秒,每次迭代205秒,每十个:66秒。
只需添加此:
'''
如果〜mod(i,10)
hbar.iterate (10);%一次迭代更新进度
“终结”
伟大的功能,易于实现!
为进度条添加百分比值是不是很好
伟大的功能。这正是我需要的。它不限于parfor循环。我只用了spmd块。谢谢。
克丽丝
当我比较两个运行的案例和没有hbar.terate(1)时,我看到这个进度条使Par循环运行更慢
伟大的功能,谢谢!
伟大的功能!在任何使用parfor循环的代码中,这都是一个非常好的特性。我想知道你有没有考虑过mo。en的建议增加一个百分比或剩余时间的估计?
为什么我收到以下错误?
为计时器parfor_progressbar计算TimerFcn时出错
parfor_progressbar类没有公共属性ipcfile
几乎按预期工作。
我有两个建议:
1.在进度条中添加百分比值。
2.添加一般的“剩余时间”估计
如果添加了取消按钮,等待栏不能被删除:
hbar = parfor_progressbar(10,'请等待...'','createcanceLbtn','@()disp(''取消'')');
关闭(百巴);%不能删除hbar
删除(hbar);%不会删除hbar
对不起,应该是
hbar = parfor_progressbar(10,'请等待...'','createcanceLbtn','@()disp(''取消'')');
在MATLAB 2016b上测试和工作。
伟大的工具,适用于2014年和2015年,但不再为2016年工作了。
有用!
谢谢你的评论,吉尔特。
我有一些如何做到这一点的想法。棘手的是,GUI对象在parfor循环中不会更新。可以在GUI线程中为等待栏窗口添加一个回调,该回调删除parfor_progress.txt状态文件,以告诉parfor线程停止。
如果我有什么可行的方法,我会随时通知你的。
精心制作,非常有用。谢谢!
只有一个问题:我希望在关闭waitbar时,parcon循环停止(例如,如果用户看到算法需要年龄完成,他/她可以选择停止处理)。
到目前为止,我还没有做到这一点。我的代码
如果是谬误(hbar.wbh)
删除(GCP('nocreate'));
返回
结束
似乎不能工作,因为对象句柄WBH在关闭等待栏时不是空的。知道我该怎么做吗?
提前致谢。干杯,地球
伟大的提交,谢谢。
在最近的版本中修正了这个错误。请再试一次。
运行它时,备用栏不会进展。并且有一个摇摆:
警告:在-nodisplay和-noFigureWindows启动选项. ...下金宝app不再支持此功能