использование spmd в MatLab - PullRequest
       19

использование spmd в MatLab

0 голосов
/ 10 ноября 2019

Я очень плохо знаком с параллельными вычислениями MatLab, поэтому мне нужна помощь.

Я пытаюсь распределить массив, который мне нужно рассчитать, по всем моим работникам.

Код, который яя пытаюсь распараллелить lokks следующим образом:

a = (normrnd(1,1,[100000,1]))+5;

i=0;

while i<=10000

    b=randperm(length(a),length(a));
    a=a(b);    

    for j=1:length(a)

        a(j)=a(j)+1/a(j);
        % some more function
    end

   i=i+1; 
end

Теперь я хочу, чтобы внутренний цикл for работал, например, на 1/4 длины a на 4 ядрах. Это не может быть сделано с помощью parfor, потому что когда запускается внутренний цикл, это делает вычисления зависимыми друг от друга

Поэтому я хочу выбрать 4 произвольно выбранных массива одинакового размера из a и распределить их по моим работникам.

То, что я до сих пор делал, выглядит следующим образом

parcomp=parpool;

cores=parcomp.NumWorkers;

ind=0;

while ind<50000
    % some serial code

    b=randperm(length(a),length(a));

    c=rem(length(b),cores);
    d=reshape(b(1:end-c),[(length(b)-c)/cores,cores]);

for k=1:c
    d((length(a)-c)/cores+1,k)=b((length(a)-c)+k);

end

spmd (cores)

    ids = d(:,labindex);
    grains=a;

    [a]=myfun(ids{labindex},grains{labindex});

%     
end
ind=ind+1;
% put a's together in one array for next itteration of while
% some more serial code
end

function[a]=myfun(ids,grains)

ids=ids(ids>0);

a=grains(ids);

for i=1:length(a)
    a(i)=a(i)+1/a(i);
end

end

Функция myfun уже существует в моем серийном коде, я просто хочу, чтобы она вычисляла четвертую часть данных от одного, но на четырех рабочихпараллельно.

Каким-то образом я всегда получаю некоторые ошибки, такие как: Ошибка при использовании trypara (строка 19) Ошибка, обнаруженная на рабочих 1 2 3 4.

Причина: Ошибка при использовании trypara (строка 19) Индекс скобкине поддерживается для переменных этого типа.

Так что есть некоторая проблема с данными, когда я передаю их функции, но я понятия не имею, почему.

Может быть, кто-то может помочь мне с этим.

Большое спасибо заранее С уважением, Марк

...