我正在尝试在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的示例。
答案 0 :(得分:0)
尝试使用:
createTask(job, @Norm1MinVar_par, 1, {xThis})
createTask
将输入参数的单元格数组中的每个元素解释为函数的单独参数,方法是将其包装在单元格中,因为我建议您告诉createTask
只提供一个输入,本身就是一个细胞。我假设你当然想要的是,我猜不到我对Norm1MinVar_par
的定义。