Недавно я реализовал распараллеливание в моей программе MATLAB , во многом благодаря предложениям, предложенным в Slow xlsread в MATLAB .Однако реализация параллелизма породила еще одну проблему - нелинейно увеличивающееся время обработки с увеличением масштаба .
Виновным представляется метод java.util.concurrent.LinkedBlockingQueue
, как видно из прилагаемогоизображения профилировщика и соответствующие сжатые графики.
Проблема: Как убрать эту нелинейность, поскольку моя работа включает обработку более 1000 листов за один прогон - что займет безумно долгийвремя?
Примечание: Распараллеленная часть программы включает в себя только чтение всех файлов .xls
и их сохранение в матрицах, после чего я запускаю оставшуюся часть своей программы.dlmwrite
используется ближе к концу программы, и оптимизация его времени на самом деле не требуется, хотя также может быть предложено.
Culprit:
Код распараллеливается:
parfor i = 1:runs
sin = 'Sheet';
sno = num2str(i);
sna = strcat(sin, sno);
data(i, :, :) = xlsread('Processes.xls', sna, '' , 'basic');
end