![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: нет Всего: 1 |
Привет всем!
Такой вопрос: есть задача, которая очень долго считается. Хочу разбить её на части и считать параллельно. Есть два вариант: 1- открыть 10 консолей и параллельно запустить в в каждой свой кусок; 2- написать на С++ программу, которая создаст 10 потоков для каждого куска. Дорогие форумчане, скажите, какой способ более рационален ? Что по вашему мнению, даст больший выигрыш в производительности и времени ? Спасибо! --------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 1 Всего: 49 |
Если задача действительно допускает разбиение на независимые блоки, то с точки зрения быстродействия собственно программы разница будет невелика, но вот на реализацию первого варианта Вы сами, скорее всего, потратите заметно меньше времени.
|
|||
|
||||
DProf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.9.2012 Репутация: нет Всего: 1 |
С чего это вдруг такое решение? Если задача А начинает работать только когда закончатся независимые задачи Б, С, Д, Е, Ж, то запараллелить Б, С, Д, Е, Ж милое дело. 10 консолей - это не для программиста ) А если потом придется еще 10 раз эту же задачу решать? 100 консолей в сумме откроете? а если 100 раз ? Это сообщение отредактировал(а) DProf - 8.2.2013, 17:55 |
|||
|
||||
Фантом |
|
||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 1 Всего: 49 |
Прочитайте выше (и внимательно) вопрос, на который я давал ответ. ![]()
А это надо в условии оговаривать, а в среднем такая ситуация менее вероятна. К тому же открыть сколько угодно консолей (а точнее, запустить сколько угодно независимых процессов) можно с помощью простейшего внешнего скрипта. |
||||
|
|||||
Annuta |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 3.10.2006 Где: Dubna Репутация: нет Всего: 1 |
ОК, спасибо за обсуждение!
--------------------
Программист - это комбинация лени и логики ! |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
||||
|
||||
svlary |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
Если проблема в том, что задача долго именно СЧИТАЕТСЯ (т.е. занимает процессор), то хоть как Вы её разбивайте, хоть на консоли, хоть на нитки, хоть на процессы, хоть вдоль, хоть поперек : результат будет один с очень небольшими отклонениями. Для того, что бы задача, критическая по вычислительной мощности считалась быстрее, надо поднять вычислительную мощность ПРОЦЕССОРА. Проще говоря, в поллитровую бутылку не налить литр пива, хоть как её разбивай на части... |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Не всегда. Если в машине больше одного процессорного ядра (а их сейчас практически везде больше одного), то процесс ускорится.
Угу, но можно взять еще несколько бутылок ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
svlary, все зависит от задачи. Есть задачи, которые легко распараллеливаются (единообразная обработка кучи несвязанных данных), а есть которые в принципе не параллелятся (когда способ обработки i-го значения зависит от результата обработки i-1), но такое встречается значительно реже.
|
|||
|
||||
mkvih |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 11.6.2014 Где: Москва Репутация: нет Всего: нет |
Хотелось бы добавить, что можно выделить 2 технологии многопоточности.
Первый вариант классический - несколько потоков - стартуют одновременно, выполняют какие-то свои задачи и потом "складывают" свои результаты. Второй вариант - организовать конвейер. Такая техника используется, например в графических приложениях. Несколько "работников" по цепочке передают некоторые данные. Такая техника позволяет повысить количество кадров в секунду. Если важна частота "продуктов" в единицу времени - хорош этот вариант. http://www.youtube.com/watch?v=Sk4puph6GCI Вроде бы ещё шаблоны существуют... Это сообщение отредактировал(а) mkvih - 16.6.2014, 21:34 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |