Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 963
Завершенные тесты: 3
1

Странное распараллеливание

12.03.2015, 18:55. Просмотров 547. Ответов 16
Метки нет (Все метки)

Добрый вечер, коллеги. У меня следующая проблема.
Преподаватель сказал распараллелить программу, обрабатывающую изображения в папке. Причем распараллеливание выполняется за счет неоднократного запуска экзешника. Через потоки он не хочет. Говорит, что как он предложил, это не трудно сделать.
Нормальный ли такой подход? Если да, то как быть с общими данными? Если нет, то как объяснить ему, что так не делают в 21 веке???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2015, 18:55
Ответы с готовыми решениями:

Распараллеливание
Всем добрый вечер. Если кто знает подскажите,мне надо распараллелить...

распараллеливание
Скажите, кто-нибудь занимался распараллеливанием в си++? В моих попытках...

Распараллеливание циклов
Доброго времени суток. Возникла необходимость распараллелить один численный...

Распараллеливание циклов
Есть такой цикл std::list<int>::iterator iter; std::list<int>_paramsFFT; ...

Распараллеливание программы
Помогите эту последовательную программу распараллелить на параллельных 2...

16
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.03.2015, 19:25 2
mat_for_c, Почему не делают? Делают. У нас на работе так вся архитектура построена, не потоки, а процессы, которые берут получают сообщения из очереди/отправляют сообщения в очередь. Механизмы для межпроцессорного взаимодействия

Добавлено через 21 минуту
Хотя тут конечно в процессах особо смысла не наблюдается да и shared данных я сходу не вижу.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.03.2015, 21:35 3
mat_for_c, если препод просит, то почему бы и не сделать? К тому же, это ведь в образовательных целях делается, а не для коммерческого применения.
Цитата Сообщение от mat_for_c Посмотреть сообщение
как быть с общими данными?
С какими? Если каждый процесс будет обрабатывать отдельно взятые файлы, то общих данных как бы и нет.
0
Mistik
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
12.03.2015, 21:41 4
Цитата Сообщение от Tulosba Посмотреть сообщение
С какими? Если каждый процесс будет обрабатывать отдельно взятые файлы, то общих данных как бы и нет.
как я понял, то каждая программа обрабатывает одно изображение... Оо

по теме:
если ж каждая программа обрабатывает своё изображение.. тогда просто создай какой-нибудь файлик в котором будет расписано, что тот-то файлик уже обрабатывается
0
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 963
Завершенные тесты: 3
13.03.2015, 12:21  [ТС] 5
Цитата Сообщение от Tulosba Посмотреть сообщение
Если каждый процесс будет обрабатывать отдельно взятые файлы, то общих данных как бы и нет
а вот чтобы распределить данные, нужен общий список и номер последнего блока обработки
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2015, 14:03 6
Цитата Сообщение от mat_for_c Посмотреть сообщение
а вот чтобы распределить данные, нужен общий список и номер последнего блока обработки
Как я вижу решение: запускаем основной процесс, которому параметром передается путь к каталогу. Этот процесс составляет список файлов для обработки (например по шаблону *.img). Дальше запускает нужное кол-во дочерних процессов, передав этим процессам непересекающиеся списки с названиями файлов. В крайнем случае, каждому такому процессу будет назначен один единственный файл. Когда все дочерние процессы отработают, основной процесс может уведомить об этом пользователя. Всё. Никаких общих данных м/у дочерними процессами нет.
0
Fallenworld
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
13.03.2015, 15:07 7
Цитата Сообщение от Tulosba Посмотреть сообщение
В крайнем случае, каждому такому процессу будет назначен один единственный файл.
интересно, какой тогда смысл в паралеле, ведь временные затраты на запуск процесса для каждого элемента, будут явно выше, чем даже не параллельная обработка.
Если только в качестве чисто учебной программы...
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2015, 15:47 8
Цитата Сообщение от Fallenworld Посмотреть сообщение
ведь временные затраты на запуск процесса для каждого элемента, будут явно выше, чем даже не параллельная обработка.
Это всё очень сильно зависит от того какова сложность обработки. Если один файл будет обрабатываться хотя бы (как минимум) несколько секунд, то временем, потраченным на запуск процесса, можно пренебречь.
0
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
13.03.2015, 18:30 9
Цитата Сообщение от Tulosba Посмотреть сообщение
Этот процесс составляет список файлов для обработки (например по шаблону *.img)
Или так:
Bash
1
@for %%i in (*.img) do start /B process.exe %%i
0
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 963
Завершенные тесты: 3
13.03.2015, 19:41  [ТС] 10
Цитата Сообщение от Tulosba Посмотреть сообщение
Дальше запускает нужное кол-во дочерних процессов,
это почти как с потоками, но на деле будет запускаться экзешник еще раз именно пользователем, а не процессом. И сколько раз он его запустит, не известно поэтому надо передавать блок списка определенной длины.

Добавлено через 41 секунду
Цитата Сообщение от Fallenworld Посмотреть сообщение
интересно, какой тогда смысл в паралеле
поверьте, там очень много изображений
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2015, 20:22 11
mat_for_c, если честно, я не понял о каком запуске "на деле" ты говоришь. Опиши подробнее задание, которое дал препод. Желательно в оригинале.
0
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 963
Завершенные тесты: 3
13.03.2015, 21:42  [ТС] 12
есть папка. в ней лежит большая куча изображений. есть программа, обрабатывающая последовательно эти изображения.
что хочет преподаватель:
распараллелить обработку за счет нескольких запусков этой программы именно пользователем.
0
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
13.03.2015, 22:33 13
mat_for_c, в такой постановке мучить C++ вообще и межпроцессные коммуникации не требуется. Достаточно научить программу принимать имя обрабатываемого файла из командной строки и запустить BAT-файл с вышеописанной командой. Или сразу выполнить эту строчку в командной строке, только надо будет %%i заменить на %i.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2015, 22:34 14
Заводим таблицу: имя файла, признак занятости, признак готовности. Например в виде служебного файла для каждого каталога.
Первая программа заполняет эту таблицу именами файлов. Всё файлы ещё свободны (и не готовы). Когда таблица заполнена - можно брать первый свободный и не готовый файл в обработку. При этом установить признак занятости. Когда файл готов установить признак готовности. Каждая вновь запускаемая пользователем программа берет себе очередной свободный файл.
В таком варианте надо обеспечить монопольный доступ к таблице, чтобы всё более менее адекватно работало.
1
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 963
Завершенные тесты: 3
14.03.2015, 09:23  [ТС] 15
Цитата Сообщение от Tulosba Посмотреть сообщение
надо обеспечить монопольный доступ к таблице
а есть какая-нибудь идея межпроцессового мьютекса?
0
taras atavin
4204 / 1766 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
14.03.2015, 09:32 16
Скорей всего потом окажется, что надо распараллелить дважды двумя способами: один раз процессами и один раз потоками. А потом сравнить.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
14.03.2015, 10:12 17
Цитата Сообщение от mat_for_c Посмотреть сообщение
а есть какая-нибудь идея межпроцессового мьютекса?
по ссылке от ForEveR можно было найти Семафор + разделяемая память (вместо файла).
0
14.03.2015, 10:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2015, 10:12

Распараллеливание вычислений
Здравствуйте. Может кто сможет подсказать как мне решить следующую задачу:...

Распараллеливание вычислений
Вычисляю произведение матриц несколькими потоками (количество задаётся...

Распараллеливание циклов
Возникли трудности с освоением OpenMP Непонимаю, почему если закоментировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru