【问题标题】:MATLAB Creating Tasks while Passing in Matrix ArgumentsMATLAB 在传递矩阵参数时创建任务
【发布时间】:2016-05-10 09:07:48
【问题描述】:

我正在尝试在 Matlab 中并行化作业。我有一大组矩阵,我想将它们传递给一个函数,然后该函数返回一个向量。我想做的是将矩阵的一个子集分配给每个任务,然后返回它们的输出。我已经能够让代码工作,其中每个任务只分配一个矩阵来传递,但是当我尝试为每个任务分配多个矩阵时,我得到了 Too Many Arguments 错误。

通过阅读createTask 上的文档,我怀疑我用来传递矩阵的结构是问题所在。

numTasks=4;

%Setting up the splitting of my 60 matrices among 4 tasks.
[xSplit, numTasks] =pctdemo_helper_split_vector(linspace(1,60,60, numTasks));

%XSplit shows the splits of the numbers 1-60 to each of 4 cells in XSplit
celldisp(xSplit);

%Substituting in my matrices for the indices in XSplit
for i=1:numTasks

    xSplitVec=xSplit{i};
    for j=1:length(xSplitVec);

        %SCov is an array where I have collected all my matrices
        xSplitMat{i,j}=SCov_array(:,:, xSplitVec(j));

    end
end

parallel.defaultClusterProfile('local');
c = parcluster();

job=createJob(c);
for i=1:numTasks

    xThis=xSplitMat(i,:);

    %@Norm1MinVar_par is my function, which takes matrices and returns a vector
    createTask(job, @Norm1MinVar_par, 1, xThis);

end

submit(job);
wait(job);
y=fetchOutputs(job);
delete(job);
cat(2, y{:})

我的代码遵循Dividing Tasks 中的示例。

【问题讨论】:

    标签: matlab matrix parallel-processing task cells


    【解决方案1】:

    尝试使用:

    createTask(job, @Norm1MinVar_par, 1, {xThis})
    

    createTask 将输入参数的单元格数组中的每个元素解释为函数的单独参数,方法是将其包装在一个单元格中,正如我建议您告诉createTask 只提供一个输入,它本身就是一个单元格.我假设这当然是你想要的,我猜是因为我看不到你对 Norm1MinVar_par 的定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2016-03-08
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      相关资源
      最近更新 更多