【问题标题】:How to load .mat files in the folder for parfor in MATLAB如何在 MATLAB 中的 parfor 文件夹中加载 .mat 文件
【发布时间】:2017-11-20 01:33:24
【问题描述】:

我想使用以下代码在 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”。关于如何在 MATLAB 的并行计算中加载诸如“dataB.mat”之类的外部数据的任何帮助将不胜感激?

【问题讨论】:

  • 我看不出代码有什么问题。这可能只是需要很长时间。当您进行并行计算时,MATLAB 需要将所有必要的数据发送给每个工作人员。在这种情况下,B 需要复制到每个工人。如果B 非常大,那么这可能会导致严重延迟,通常比正常的for 循环花费更多时间。

标签: matlab parallel-processing


【解决方案1】:

如果我在控制台上输入:

rand(1600,100)

然后我将当前工作区保存为dataB.mat,这个命令:

B = load('dataB.mat');

将为我带来一个包含 ans 字段作为 1600x100 双矩阵的 1 x 1 结构。因此,由于在应用程序的每个循环中,您必须在调用函数 fct 之前提取一列 B(提取的列成为您调用的第三个参数,并且必须在传递它之前定义它)......我'我想知道在继续 parfor 循环之前,您是否没有使用断点检查您的 B 变量组合。

另外,请记住,第一次使用全新的 Matlab 实例执行 parfor 循环时,Matlab 引擎必须实例化所有工作人员......这可能需要很长时间。请耐心等待,并在确定工人已被实例化后,最终运行第二次测试以查看问题是否仍然存在。

如果这些不是您的问题的原因,我建议您运行一个标准循环(for 而不是parfor)并在迭代的第一行设置一个断点。这应该可以帮助您快速发现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2011-08-25
    • 2013-09-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多