У меня есть алгоритм myAlgo()
, который использует параметр par1
для анализа набора данных (около 1000 файлов .mat). Путь к файлам .mat - это некоторый массив ячеек, который я передаю также myAlgo()
. Функция myAlgo()
содержит классы и другие функции. Для каждого значения par1
Мне нужно протестировать все 1000 файлов .mat. Так что было бы намного быстрее, если бы я мог использовать параллельный цикл, поскольку у меня есть независимая (?) Проблема.Matlab parfor и файлы ввода
Я использую следующий код parfor
:
par1 = linespace(1,10,100);
myFiles % cell array with the .mat file location
myResult = zeros(length(par1),1);
parfor k=1:length(par1)
myPar = par1(k);
myResult(k) = myAlgo(myPar, myFiles);
end
% do something with myResult
.
function theResult = myAlgo(myPar, myFiles)
for ii=1:length(myFiles)
tempResult = initAlgo(myPar, myFiles(ii));
end
theResult = sum(tempResult);
end
Таким образом, для каждого параметра в par1
я делаю то же самое. К сожалению, время обработки не уменьшается. Но если я проверю рабочую нагрузку процессора (i5), все ядра будут активны.
Теперь мой вопрос: возможно ли, что parfor
не работает в этом случае, потому что каждый рабочий, инициализированный parfor
, должен получить доступ к папке с 1000 файлами .mat. Поэтому они не могут выполнять свою работу в одно и то же время. Правильно? Так есть способ справиться с этим?
Вы правы. Это делает его, вероятно, медленнее. Но на самом деле 'parfor' даже не работает в приведенном выше примере. Это связано с тем, что каждый процесс требует доступа к файлам .mat одновременно? – Samuel
Это должно сделать это намного медленнее. Вы пытались изменить структуру цикла? Насколько мне известно, параллельное чтение файлов не должно быть проблемой, в соответствии с этим сообщением он может быть даже быстрее в некоторых случаях: https://de.mathworks.com/matlabcentral/answers/20863-parfor-file-reading Что вы имеете в виду «даже не работает»? Было ли сообщение об ошибке? BTW Вы инициализировали параллельную обработку с использованием parpool? – mzunhammer
Ошибка отсутствует. Но если я измеряю время «для» и «parfor», то нет существенной разницы. Если я использую пример веб-сайта MATLAB, который сравнивает обе петли, то есть огромная разница в вычислительном времени. Так что это работает. Но я не могу инициализировать параллельную обработку с использованием parpool. Если я попробую, я получаю сообщение об ошибке лицензии. – Samuel