首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迭代次数较高的MATLAB Parfor未启动

迭代次数较高的MATLAB Parfor未启动
EN

Stack Overflow用户
提问于 2020-05-28 19:44:28
回答 1查看 252关注 0票数 0

我正在运行Matlab 2014a,并尝试使用parfor启动脚本。然而,它被卡住了

代码语言:javascript
运行
复制
Starting parallel pool (parpool) using the 'local' profile ... connected to 16 workers.

我之前运行了一个测试脚本,它工作得很好。不同之处在于,测试脚本有4次parfor迭代和2个5x12x3x4大小的数组,它们填充在parfor循环中,而主脚本有100次迭代和2个31x12x3x100大小的数组。有什么办法让它运行吗?谢谢!

编辑:这里是我的代码的一个简化版本来说明这个问题,请注意这个版本,其中我没有包括计算实际工作。包含这些计算是不可行的,因为它们涉及其他Matlab和Python脚本。此外,当我说卡住时,我的意思是我没有从disp(output)行得到任何输出。

代码语言:javascript
运行
复制
close all;
clear all;
clc;

disp('starting');
results_nb = zeros(31,12,3,100);
results_ht = zeros(31,12,3,100);
progress = zeros(1,100);

parfor iter = 1:100

    t = getCurrentTask(); 
    output = ['Worker:' num2str(t.ID) ', Iteration:' num2str(iter)];
    disp(output);
    j_idx=0;
    results_nb_iter=zeros(31,12,3);
    results_ht_iter=zeros(31,12,3);
    for j=[10,20,50]
        j_idx=j_idx+1;
        for i=1:31
            line_nb = zeros(1,12);
            line_ht = zeros(1,12);

            %line_nb = some calculations
            %line_ht = some calculations

            results_nb_iter(i,:,j_idx)=line_nb;
            results_ht_iter(i,:,j_idx)=line_ht;

        end
    end
    results_nb(:,:,:,iter)=results_nb_iter;  
    results_ht(:,:,:,iter)=results_ht_iter;

end

save('results')

exit
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-28 23:16:39

你的推断是错误的,因为你的测量是错误的。

parfor循环中的disp()不能确保在worker到达它时准确地打印到屏幕,相反,它会排队,当worker空闲时,它会将其发送到客户端进行打印。

要保持parfor执行的进度,您需要parallel.pool.DataQueue

也可以阅读另一篇关于同样主题的Mathworks文章:https://uk.mathworks.com/matlabcentral/answers/372416-how-can-i-display-the-progress-of-a-parfor-or-parfeval-loop-in-matlab-r2017a-and-newer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62063859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档