В настоящее время у меня очень большой каталог, содержащий более 9000 папок, каждый из которых содержит jpeg-изображения (в среднем 40 на каждую папку).Параллелизация программ обработки изображений на большом наборе изображений
Моя программа принимает входную папку с изображениями и выводит вектор характеристик изображений в этой папке в текстовые файлы:
./process_image images/ output/
У меня также есть скрипт, с использованием в качестве следующего:
./script.sh dirlist.txt images/ output/ 1
Первый вход dirlist.txt содержит имена папок внутри каталога ввода Второй и третий входы являются базовым каталогом для входов и выходов. 4-ый аргумент является индексом, для которого запись в DirList Я хочу, чтобы получить доступ к
Приведенный выше пример будет вызывать, если предположить, что imageset1 был с индексом 1 в dirlist.txt:
./process_image images/imageset1/ output/imageset1/
Если бы я сделайте это последовательно, мне понадобится несколько дней, чтобы обработать все 9000 папок. Каков наилучший метод распараллеливания в этом случае? Должен ли я писать сценарий, который разделяет 9000 папок на блоки и запускает сценарий отдельно, каждый из которых работает с определенным диапазоном индексов? Кроме того, как определить, сколько программ я могу запустить, учитывая, что один исполняемый файл может варьироваться от 100 МБ до 1 ГБ в ОЗУ? У меня 32 ГБ оперативной памяти.
Что является узким местом? io или процессор или пропускную способность памяти? Что C++ связано с этой проблемой? – Yakk
Я не уверен, как подойти к проблеме и каково мое узкое место. Программа написана на C++. – Olivier
Я просто пробовал обрабатывать 10 папок одновременно, а использование моего процессора - около 90%. Можно ли сказать, что моим узким местом является процессор? Я работаю на i7-3770 – Olivier