MatLab并行工具箱:用核心划分工作

MatLab并行工具箱:用核心划分工作,matlab,matrix,parallel-processing,parfor,Matlab,Matrix,Parallel Processing,Parfor,在我的笔记本电脑上,我有MatLab和并行工具箱,我想执行以下任务(我有12个物理核):使用parfor循环计算6个不同(大)矩阵的最大特征值 我有两种可能: 2芯用于第一个矩阵(A1),2芯用于第二个矩阵(A2),…,2芯用于第六个矩阵(A6) 6芯用于第一个基体(A1),6芯用于第二个基体(A2)。然后我对循环进行另一次迭代,第三次(A3)使用6个核,第四次(A4)使用6个核,通过另一次迭代,我还可以计算最后两个矩阵的光谱半径 让我们关注第一种方法:使用并行工具箱,我如何将“前两个核在

在我的笔记本电脑上,我有MatLab和并行工具箱,我想执行以下任务(我有12个物理核):使用parfor循环计算6个不同(大)矩阵的最大特征值

我有两种可能:

  • 2芯用于第一个矩阵(A1),2芯用于第二个矩阵(A2),…,2芯用于第六个矩阵(A6)

  • 6芯用于第一个基体(A1),6芯用于第二个基体(A2)。然后我对循环进行另一次迭代,第三次(A3)使用6个核,第四次(A4)使用6个核,通过另一次迭代,我还可以计算最后两个矩阵的光谱半径


让我们关注第一种方法:使用并行工具箱,我如何将“前两个核在第一个矩阵A1上工作”和“第三个和第四个核在A2上工作”,依此类推

以下是我的想法:我将(在工具箱中)指定NumWorkers=6和NumThreads=2,如下图所示:

然后我会写下以下内容:

%initialize six large random matrices A(1),...,A(6)
x = zeros(6,1);
parfor i=1:6
    x(i) = max(abs(eig(A(i))));
end

我希望现在,对于
I=1
,我的前两个核心工作是计算
x(1)
,等等。这是正确的方法吗?

我认为你的
A
矩阵的大小决定了哪种方法更好;无论哪种情况,您都需要将矩阵分发给工人。问题是这六个操作(包括
eig()
操作)是否同时放入内存。此外,如果矩阵没有那么大,在操作完成之前,六个核可能无法达到全部操作功率,因此每个矩阵使用两个核的速度更快。@Adriaan A是一个2000x2000矩阵。你说得对!事实上,我想做模拟来发现这件事!:)确切地说,我的问题是,我在工具箱里写的东西是否符合我的想法。你认为是吗?关于这个问题的答案可能会提供一些见解。@Adrian从我所看到的,我应该使用
spmd
,因为我可以说“对于每个矩阵,使用2个核”,对吗?我几乎没有使用
spmd
的经验,对不起。通常,我只是将所有内容放入
parfor
循环中。