我想在MATLAB中使用以下代码运行parfor循环
B=load('dataB.mat'); % B is a 1600*100 matrix stored as 'dataB.mat' in the local folder
simN=100;
cof=cell(1,simN);
se=cell(1,simN);
parfor s=1:simN
[estimates, SE]=fct(0.5,[0.1,0.8,10]',B(:,s));
cof{s}=estimates';
se{s}=SE';
end
然而,代码似乎不起作用 - 没有警告,它只是在没有任何输出的情况下永远运行 - 我终止循环并发现它从未进入函数' fct'。任何帮助将不胜感激如何加载外部数据,如' dataB.mat'在MATLAB的并行计算中?
答案 0 :(得分:1)
如果我在我的控制台上输入此内容:
dataB.mat
然后我将当前工作区保存为B = load('dataB.mat');
,此命令:
ans
将为我带来一个包含B
字段的1 x 1结构作为1600x100双矩阵。因此,因为在应用程序的每个循环中,必须在调用函数fct
之前提取B
列(提取的列成为调用的第三个参数,并且必须在传递之前定义它)。 ..我想知道在继续进行parfor
循环之前,您是否没有使用断点检查parfor
变量组合。
另外,请记住,第一次使用全新的Matlab实例执行for
循环时,Matlab引擎必须实例化所有工作人员......这可能需要很长时间。请耐心等待,并最终进行第二次测试,以确定一旦确定工人已经实例化,问题是否仍然存在。
如果这些不是您问题的原因,我建议您运行标准循环(parfor
而不是NaN
)并在您的迭代的第一行设置断点。这应该可以帮助您快速发现问题。