223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
1

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

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

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

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

Распараллеливание
Подскажите, что не так. Есть массив из 13 элементов, мне нужно разбить на три блока, один блок...

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

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

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, если препод просит, то почему бы и не сделать? К тому же, это ведь в образовательных целях делается, а не для коммерческого применения.
Цитата Сообщение от mat_for_c Посмотреть сообщение
как быть с общими данными?
С какими? Если каждый процесс будет обрабатывать отдельно взятые файлы, то общих данных как бы и нет.
0
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
12.03.2015, 21:41 4
Цитата Сообщение от Tulosba Посмотреть сообщение
С какими? Если каждый процесс будет обрабатывать отдельно взятые файлы, то общих данных как бы и нет.
как я понял, то каждая программа обрабатывает одно изображение... Оо

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

Добавлено через 41 секунду
Цитата Сообщение от Fallenworld Посмотреть сообщение
интересно, какой тогда смысл в паралеле
поверьте, там очень много изображений
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.03.2015, 20:22 11
mat_for_c, если честно, я не понял о каком запуске "на деле" ты говоришь. Опиши подробнее задание, которое дал препод. Желательно в оригинале.
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
Цитата Сообщение от Tulosba Посмотреть сообщение
надо обеспечить монопольный доступ к таблице
а есть какая-нибудь идея межпроцессового мьютекса?
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
Цитата Сообщение от mat_for_c Посмотреть сообщение
а есть какая-нибудь идея межпроцессового мьютекса?
по ссылке от ForEveR можно было найти Семафор + разделяемая память (вместо файла).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2015, 10:12
Помогаю со студенческими работами здесь

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

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

Распараллеливание цикла
есть цикл for (unsigned n = 0; n < threads; n++) { func (sigma, sub_noisy, sub_basic,...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru