Я хочу смешивать последовательный и параллельный код в Matlab, но мой единственный опыт работы с параллельным Matlab - это функция parfor.
Я создал надуманный код ниже, чтобы проиллюстрировать мою проблему. В коде есть два цикла for, первый из которых является обычным для l oop, а второй - для l oop. Parfor l oop использует результаты обычного для l oop.
Теперь, вместо того, чтобы запускать обычный для l oop и ждать его полного завершения перед запуском parfor l oop, Я хотел бы запустить код в разделе parfor , как только станут доступны результаты каждой итерации обычного для l oop .
По сути, результат от каждая итерация обычного для l oop указывает конкретную задачу, которую нужно вычислить, и я хотел бы добавить эту задачу в список задач, которые выполняются параллельно, пока все задачи не будут выполнены.
Можно ли это сделать с помощью Matlab?
function main()
N = 200;
results = zeros(N,1);
for i=1:N
results(i) = DoSeqCalculation(i);
end
output = zeros(N,1);
parfor i=1:N
matSize = results(i);
output(i) = max(abs(eig(rand(matSize))));
end
total = sum(output);
end
function result = DoSeqCalculation(i)
result = 0;
for j=i:1e7
result = result + (3+4)/j;
end
result = 3*floor(result);
end