Я пытаюсь создать кусок параллельного кода, чтобы ускорить обработку большого массива (пару сотен миллионов строк). Чтобы распараллелить это, я расколол свои данные на 8 (мое количество ядер) штук и попытался отправить каждого работника 1 часть. Однако, глядя на мое использование ОЗУ, кажется, что каждая часть отправляется каждому работнику, эффективно умножая использование ОЗУ на 8. Минимальный рабочий пример:
A = 1:16;
for ii = 1:8
data{ii} = A(2*ii-1:2*ii);
end
Теперь, когда я отправляю эти данные рабочим, используя parfor
, кажется, что отправляет полную ячейку вместо требуемой части:
output = cell(1,8);
parfor ii = 1:8
output{ii} = data{ii};
end
Я фактически использую некоторую функцию в цикле parfor
, но это иллюстрирует случай. Действительно ли MATLAB отправляет полную ячейку data
каждому работнику, и если да, то как заставить ее отправлять только желаемую часть?