Если вы хотите создать 4 массивов размера (300,1) на отдельном работнике каждого, это лучше сделать, как в следующем. Обратите внимание, что у меня 4 ядра на моем компьютере/в Matlab.
clc
clear
spmd
RandomArray = rand(300,1); % Matlab automatically creates a (300,1) array in each worker.
end
FinalArray = [RandomArray{:}]; % Concatenate everything outside of the spmd block.
whos % Check the results
Name Size Bytes Class Attributes
FinalArray 300x4 9600 double
RandomArray 1x4 1145 Composite
Как вы видите, FinalArray имеет размер (300,4), как вы хотите. С вашим кодом выше было бы очень больно собрать все вместе во втором блоке spmd, потому что каждый работник не знает, что находится в других рабочих, и каждая переменная будет неопределенной для рабочих, которые их не использовали. Я не знаю, правильной терминологии извините, но вы можете прочитать документ, чтобы получить лучшее объяснение :)
EDIT:
Чтобы ответить на комментарий, вот простой пример. Надеюсь, это то, что вы имели в виду :)
clc
clear
% Define different variables.
w = ones(1,10);
x = 1:10;
y = x/2;
z = rand(1,10);
% Use different functions in each worker. Of course you could use the same function with different inputs.
spmd
if labindex==1
a = w;
end
if labindex==2
b = sin(x);
end
if labindex==3
c = y.^2;
end
if labindex==4
d = 4*z;
end
end
% This is the important part
FinalArray = [a{1} ;b{2}; c{3} ;d{4}];
whos
И выход Whos является:
Name Size Bytes Class Attributes
FinalArray 4x10 320 double
a 1x4 497 Composite
b 1x4 497 Composite
c 1x4 497 Composite
d 1x4 497 Composite
w 1x10 80 double
x 1x10 80 double
y 1x10 80 double
z 1x10 80 double
Спасибо! Я понимаю этот пример, но что, если я хочу, чтобы каждое ядро выполняло другую работу, например. запускать функцию, которая вычисляет некоторые значения, но с другой переменной в качестве входных данных для каждого ядра? – holistic
Хорошо, я вижу. См. Мой отредактированный ответ. Надеюсь, это то, что вы хотите! –
Так это то, что вы хотели? –