Использование parfor в MATLAB для косвенной индексации массива - PullRequest
0 голосов
/ 02 ноября 2018

В настоящее время я пытаюсь распараллелить свой сценарий для получения преимуществ во время выполнения.

Мой код включает в себя сегмент, который имеет следующую форму, если он представлен очень абстрактно:

x=zeros(5,1);

y{1}=[1; 3; 5];
y{2}=[2; 4];

parfor i=1:2
    x(y{i})= func(y{i});
end

Итак, я хочу заполнить индексы переменной x не последовательно, а параллельно. Это дает мне, однако, следующую ошибку:

The variable x in a parfor cannot be classified.

Индексы, которые должны быть назначены, всегда не пересекаются (как, например, [1; 3; 5] и [2; 4]), т. Е. Во время параллельного прогона перезаписи записей не произойдет, что в противном случае поставило бы под угрозу непоследовательную обработку.

Возможно, есть ли другой способ переформулировать эту функциональность?

1 Ответ

0 голосов
/ 02 ноября 2018

Я бы использовал структуры, так как размер выходных данных меняется.

x=zeros(5,1);
y{1}=[1; 3; 5];
y{2}=[2; 4];

parfor i=1:2
    temp{i}= sin(y{i});
end

for i=1:2
    x(y{i})=temp{i};
end
...