2015-04-06 3 views
0

У меня около 250000 изображений для обработки на одном компьютере. В настоящее время я запускаю последовательно входное изображение для одного вывода для моей функции (для вычисления требуется ~ 5 секунд). Это, очевидно, занимает слишком много времени. Какие другие методы я могу использовать для ускорения процесса? Я подумал о запуске нескольких экземпляров MATLAB и запуске каждого из подмножества данных, но я не уверен, действительно ли я реализую параллелизм с этим методом. Каковы лучшие методы повышения общей скорости?Параллелизация обработки изображений на очень большом изображении, установленном в MATLAB без инструмента для параллельной обработки

+1

Попробуйте. Если ваш компьютер не исчерпал память, разделение его на несколько экземпляров matlab должно быть быстрее. – Daniel

+0

Поиск некоторых моих ответов на SO для 'GNU Parallel' ... вы на Windows, хотя? –

+0

Если у вас есть 4 ядра, т. Е. 8 потоков, возможно, только эффективно запустить 4 экземпляра MATLAB, поскольку MATLAB внутренне выполняет некоторую многопоточную обработку при обработке матриц. – hbaderts

ответ

0

Поскольку никто, кажется, не помогает, я думал, что у меня будет небольшая попытка и посмотреть, смогу ли я начать с некоторой параллелизации. Я не использую Windows или Matlab, поэтому может потребоваться исправление ... поэтому, если кто-то знает лучше ... не стесняйтесь вносить свой вклад.

Вы можете установить GNU Parallel под Cygwin в Windows - есть много руководств и блогов, описывающих процесс, если вы их Google.

Во-первых, я предполагаю, что/в надежде, что следующая команда будет обрабатывать один такой файл из командной строки, так что есть небольшой эксперимент и посмотреть, если это будет работать, прежде чем перейти к следующему шагу

matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m image.jpg');exit;" 

Затем, чтобы работать параллельно, вам нужно будет создать список всех 2500000 JPEGs, так что будет выглядеть как этот

DIR /B /S | FINDSTR /I "*JPG$" 

и вам нужно будет кормить, что в GNU Parallel, что-то вроде этого

DIR /B /S | FINDSTR /I "*JPG$" | parallel matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {}');exit;" 

Очевидно, проверьте это на фиктивной директории с копией нескольких ваших файлов, чтобы ничто не сломалось или не было перезаписано.

Как говорит Даниэль, для начала работы Matlab есть накладные расходы, поэтому, вероятно, лучше изменить код для обработки всех изображений, представленных в качестве аргументов, а затем, возможно, вы могли бы передать 2-8 изображений каждому вызову Matlab, что-то например, для 4 изображений на каждый Matlab:

DIR /B /S | FINDSTR /I "*JPG$" | parallel -N 4 matlab.exe -nodisplay -nosplash -nodesktop -r "run('mfile.m {1} {2} {3} {4}');exit;" 
+0

Это именно то, что я использую для длительных процессов matlab, но запуск перезапуска Matlab для каждого изображения - плохая идея. Это решение может быть медленнее, чем последовательная версия. Я бы рекомендовал запустить Matlab с заданиями от 15 минут до 1 часа каждый, поэтому передавая сразу несколько изображений. – Daniel

+0

@ Даниэль Отлично! Большое вам спасибо за отзывы. Возможно, OP может изменить свой код, если понадобится, для обработки нескольких изображений для одного вызова Matlab - я соответственно обновлю ответ. –

+0

Большое спасибо за ответы, это дает мне хорошее направление. – Olivier

Смежные вопросы