我有一台有 4 个物理内核的笔记本电脑和 MatLab 并行计算工具箱。我需要执行两个独立的任务(真的很昂贵,比如说计算一个密集的大矩阵的最大特征值)。
所以,我想通过以下方式将任务分配给我的核心:
- 第一个任务有 2 个核心
- 第二个任务有 2 个核心
但我真的无法理解/找到如何在 MatLab 代码中设置它。
经过大量搜索,我发现我应该使用spmd
,但我在文档中找不到一个合适的示例,它允许我使用2 个核心来完成相同的任务。
MatLab 中的任何最小工作示例将不胜感激!
在丹尼尔的评论后编辑: 在创建一个由 4 个工人组成的并行池之后,我可以这样做:
spmd
if labindex == 1
%first worker, do something
elseif labindex == 2
%second worker, do sometihng
end
end
编辑(2)
我可以设置NumThreads=2
,所以每个工人都会做两个任务(对吧?)。现在的问题是:我是否必须创建一个有4 个工作人员的 parpool,所以每个工作人员执行 2 个线程?更明确地说:
parpool(4);
%set NumThreads = 2 via Parallel computing toolbox
%define matrix A1, A2 of size 1000x1000
parfor i=1:2
x(i) = max(abs(eigs(A(i))));
end
我现在希望前两个核心在 上工作x(1)
,而另外两个在x(2)
最后编辑:
使用parfor
评论中写的 a ,我会这样做:
c = parcluster('local');
A = {rand(2000), rand(2000),rand(2000), rand(2000),rand(2000),
rand(2000),rand(2000),rand(2000)};
c.NumThreads = 2;
pool = parpool(c, 2); %2 workers
parfor i=1:8
x(i) = max(abs(eig(A{i})));
end