MATLAB: How to specify the number of labs in smpd

smpd parallel

My computer has 4 cores. When I use
smpd(3)
c=labindex;
if(c==1)
a=1;
elseif(c==2)
b=1;
elseif(c==3)
d=2;
end
end
Error: Could not create an SPMD block to match the requested size: 3. The parallel pool size is: 4, the active SPMD context is of size: 4.
So one can't specify the number of labs? Also smpd is based on shared memory like OpenMP?

Best Answer

You're only allowed to have a single spmd context active at any given time. An spmd context is created when you open an spmd block, and remains active after completion of that block if you create any Composite or distributed objects. In your case, I presume you have some of these objects from a previous spmd block. Here's how you might hit the problem:
parpool('local', 4);
% The next line creates an spmd context of size 4:
spmd, x = 1; end
% The following line will throw an error because the Composite "x" is
% keeping the spmd context active:
spmd(3), y = 2; end
% We can close the active spmd context by clearing "x":
clear x
% This will now work correctly:
spmd(3), y = 2; end
Related Question