Нелинейная производительность Java-функции в параллельном MATLAB - PullRequest
4 голосов
/ 01 июня 2011

Недавно я реализовал распараллеливание в моей программе MATLAB , во многом благодаря предложениям, предложенным в Slow xlsread в MATLAB .Однако реализация параллелизма породила еще одну проблему - нелинейно увеличивающееся время обработки с увеличением масштаба .

Виновным представляется метод java.util.concurrent.LinkedBlockingQueue, как видно из прилагаемогоизображения профилировщика и соответствующие сжатые графики.

Проблема: Как убрать эту нелинейность, поскольку моя работа включает обработку более 1000 листов за один прогон - что займет безумно долгийвремя?

Примечание: Распараллеленная часть программы включает в себя только чтение всех файлов .xls и их сохранение в матрицах, после чего я запускаю оставшуюся часть своей программы.dlmwrite используется ближе к концу программы, и оптимизация его времени на самом деле не требуется, хотя также может быть предложено.


Profiler details for reading a single Excel sheet from a file having n sheets.

Graph for the times in the above tables.


Processing multiple sheets from file containing multiple sheets.

Processing multiple sheets from file containing multiple sheets.


Culprit:

Enter image description here

Код распараллеливается:

parfor i = 1:runs
    sin = 'Sheet';
    sno = num2str(i);
    sna = strcat(sin, sno);

    data(i, :, :) = xlsread('Processes.xls', sna, '' , 'basic');
end

1 Ответ

0 голосов
/ 27 июля 2011

Выполнение параллельной операции ввода-вывода, вероятно, будет проблемой (на самом деле может быть медленнее), если, возможно, если вы храните все на SSD. Если вы всегда читаете один и тот же файл, и он не очень большой, вы можете попробовать прочитать его до цикла и просто параллельно выполнять манипуляции с данными.

...