MATLAB在传递矩阵参数时创建任务

时间:2016-02-01 19:24:54

标签: matlab matrix parallel-processing task cells

我正在尝试在Matlab中并行化一项工作。我有一大堆矩阵,我想传递给一个函数,然后返回一个向量。我想要做的是为每个任务分配矩阵的子集,然后返回它们的输出。我已经能够使代码工作,每个任务只分配1个矩阵传递,但当我尝试为每个任务分配多个矩阵时,我收到太多参数错误。

通过阅读文档,在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的示例。

1 个答案:

答案 0 :(得分:0)

尝试使用:

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

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