223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
1 | |
Странное распараллеливание12.03.2015, 18:55. Показов 909. Ответов 16
Метки нет Все метки)
(
Добрый вечер, коллеги. У меня следующая проблема.
Преподаватель сказал распараллелить программу, обрабатывающую изображения в папке. Причем распараллеливание выполняется за счет неоднократного запуска экзешника. ![]() Нормальный ли такой подход? Если да, то как быть с общими данными? Если нет, то как объяснить ему, что так не делают в 21 веке???
0
|
|
12.03.2015, 18:55 | |
Ответы с готовыми решениями:
16
распараллеливание
Распараллеливание программы |
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
12.03.2015, 19:25 | 2 |
mat_for_c, Почему не делают? Делают. У нас на работе так вся архитектура построена, не потоки, а процессы, которые берут получают сообщения из очереди/отправляют сообщения в очередь. Механизмы для межпроцессорного взаимодействия
Добавлено через 21 минуту Хотя тут конечно в процессах особо смысла не наблюдается да и shared данных я сходу не вижу.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
12.03.2015, 21:35 | 3 |
mat_for_c, если препод просит, то почему бы и не сделать? К тому же, это ведь в образовательных целях делается, а не для коммерческого применения.
С какими? Если каждый процесс будет обрабатывать отдельно взятые файлы, то общих данных как бы и нет.
0
|
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
|
|
12.03.2015, 21:41 | 4 |
как я понял, то каждая программа обрабатывает одно изображение... Оо
по теме: если ж каждая программа обрабатывает своё изображение.. тогда просто создай какой-нибудь файлик в котором будет расписано, что тот-то файлик уже обрабатывается
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
13.03.2015, 12:21 [ТС] | 5 |
а вот чтобы распределить данные, нужен общий список и номер последнего блока обработки
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
13.03.2015, 14:03 | 6 |
Как я вижу решение: запускаем основной процесс, которому параметром передается путь к каталогу. Этот процесс составляет список файлов для обработки (например по шаблону *.img). Дальше запускает нужное кол-во дочерних процессов, передав этим процессам непересекающиеся списки с названиями файлов. В крайнем случае, каждому такому процессу будет назначен один единственный файл. Когда все дочерние процессы отработают, основной процесс может уведомить об этом пользователя. Всё. Никаких общих данных м/у дочерними процессами нет.
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
13.03.2015, 15:07 | 7 |
интересно, какой тогда смысл в паралеле, ведь временные затраты на запуск процесса для каждого элемента, будут явно выше, чем даже не параллельная обработка.
Если только в качестве чисто учебной программы...
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
13.03.2015, 15:47 | 8 |
Это всё очень сильно зависит от того какова сложность обработки. Если один файл будет обрабатываться хотя бы (как минимум) несколько секунд, то временем, потраченным на запуск процесса, можно пренебречь.
0
|
![]() 1672 / 1044 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
13.03.2015, 18:30 | 9 |
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
13.03.2015, 19:41 [ТС] | 10 |
это почти как с потоками, но на деле будет запускаться экзешник еще раз именно пользователем, а не процессом. И сколько раз он его запустит, не известно
![]() Добавлено через 41 секунду поверьте, там очень много изображений
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
13.03.2015, 21:42 [ТС] | 12 |
есть папка. в ней лежит большая куча изображений. есть программа, обрабатывающая последовательно эти изображения.
что хочет преподаватель: распараллелить обработку за счет нескольких запусков этой программы именно пользователем.
0
|
![]() 1672 / 1044 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
13.03.2015, 22:33 | 13 |
mat_for_c, в такой постановке мучить C++ вообще и межпроцессные коммуникации не требуется. Достаточно научить программу принимать имя обрабатываемого файла из командной строки и запустить BAT-файл с вышеописанной командой. Или сразу выполнить эту строчку в командной строке, только надо будет %%i заменить на %i.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
13.03.2015, 22:34 | 14 |
Заводим таблицу: имя файла, признак занятости, признак готовности. Например в виде служебного файла для каждого каталога.
Первая программа заполняет эту таблицу именами файлов. Всё файлы ещё свободны (и не готовы). Когда таблица заполнена - можно брать первый свободный и не готовый файл в обработку. При этом установить признак занятости. Когда файл готов установить признак готовности. Каждая вновь запускаемая пользователем программа берет себе очередной свободный файл. В таком варианте надо обеспечить монопольный доступ к таблице, чтобы всё более менее адекватно работало.
1
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
14.03.2015, 09:23 [ТС] | 15 |
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.03.2015, 09:32 | 16 |
Скорей всего потом окажется, что надо распараллелить дважды двумя способами: один раз процессами и один раз потоками. А потом сравнить.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
14.03.2015, 10:12 | 17 |
по ссылке от ForEveR можно было найти
![]()
0
|
14.03.2015, 10:12 | |
Помогаю со студенческими работами здесь
17
Распараллеливание вычислений Распараллеливание циклов Распараллеливание цикла Распараллеливание циклов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |