![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| LEXX413 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 10.7.2012 Репутация: нет Всего: нет |
Всем привет. Есть такая проблема. Имеется программа А, в цикле из программы А вызывается другая программа В (в консольном режиме) и уже программа В выполняет обработку файлов, пишет данные в xml файлы и тд. Обработка в программе B идет не то, что долго, но учитывая то, что цикл состоит из большого числа итераций и имеется многоядерный процессор, который практически всегда простаивает(загруженность очень маленькая) было решено распараллелить цикл с помощью OpenMP. Возникла такая проблема, что при большом числе потоков >4, программа B не пишет логов, ничего не делает, данных на выходе нет. В чем дело не понятно. То ли жесткий диск не успевает(хотя сомневаюсь в этом, смотрел загрузку запись и чтение, есть еще запас), то ли несколько копий программы B сами себя блокируют(вот к этому варианту склоняюсь больше). Что интересно, это то, что на 4 ядерной машине все работает нормально, на 8 ядерной уже ничего не пашет. Копии программы B висят в диспетчере задач, мало едят оперативы и собственно ничего не происходит. Если на 8 ядернйо машине сделать 2 потока, то все тоже работает, при 4 и даже 3 потоках уже не пашет, хотя на 4 ядерной машине работает.
Я пробовал программу B размножить и для каждого потока указывал свою папку с копией программы B, все-равно, то же самое, файлов на выходе нет, лог пустой. Вообще никто не сталкивался с запуском нескольких копий одной и той же программы в параллельном режиме? Может это вообще нельзя делать или зависит все от написания программы и зависимости ее самой от своего запуска что ли... |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Точно можно. Я делал. Никаких проблем не было. Возможно проблема в том, что программа В (в Вашей же терминологии) использует одинаковые ресурсы - например создаёт сокет или открывает на запись какой-нибудь файл не в своём каталоге, а где-нибудь в Temp... Кстати, Вы не указали ОС, а это, скорее всего, имеет значение -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| LEXX413 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 10.7.2012 Репутация: нет Всего: нет |
ОС WIN7 и Win server 2003(на сервере работает намного нестабильнее), сейчас удалось вызвать ошибку и отладиться в студии(10). Думаю понял в чем причина данного поведения. Дело в том, что программа B предназначена не только для обработки файлов в консольном режиме, у нее так же есть GUI режим, программа очень большая и когда она разрабатывалась, сделали так, что некоторые вещи в консольном режиме похоже зависят от GUI, создаются объекты окон, кнопок и тп. Собственно отладчик вывалился в деструкторе на удалении этих объектов, прийдется по ходу все переписывать и делать так, чтобы от GUI консоль никак не зависила, а еще лучше весь код консоли из программы B вынести в программу А...
Это сообщение отредактировал(а) LEXX413 - 11.7.2012, 11:08 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |