Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточное программирование 
V
    Опции темы
Annuta
Дата 2.2.2013, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.10.2006
Где: Dubna

Репутация: нет
Всего: 1



Привет всем!
Такой вопрос: есть задача, которая очень долго считается. Хочу разбить её на части и считать параллельно.
Есть два вариант: 
1- открыть 10 консолей и параллельно запустить в в каждой свой кусок;
2- написать на С++ программу, которая создаст 10 потоков для каждого куска.

Дорогие форумчане, скажите, какой способ более рационален ? Что по вашему мнению, даст больший выигрыш в производительности и времени ? 


Спасибо! 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
Фантом
Дата 2.2.2013, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 1
Всего: 49



Если задача действительно допускает разбиение на независимые блоки, то с точки зрения быстродействия собственно программы разница будет невелика, но вот на реализацию первого варианта Вы сами, скорее всего, потратите заметно меньше времени.
PM   Вверх
DProf
Дата 8.2.2013, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.9.2012

Репутация: нет
Всего: 1



Цитата(Фантом @ 2.2.2013,  13:27)
Если задача действительно допускает разбиение на независимые блоки, то с точки зрения быстродействия собственно программы разница будет невелика

С чего это вдруг такое решение? Если задача А начинает работать только когда закончатся независимые задачи Б, С, Д, Е, Ж, то запараллелить Б, С, Д, Е, Ж милое дело.

10 консолей - это не для программиста )
А если потом придется еще 10 раз эту же задачу решать? 100 консолей в сумме откроете? а если 100 раз ?

Это сообщение отредактировал(а) DProf - 8.2.2013, 17:55
PM MAIL   Вверх
Фантом
Дата 8.2.2013, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 1
Всего: 49



Цитата(DProf @  8.2.2013,  18:53 Найти цитируемый пост)
С чего это вдруг такое решение? Если задача А начинает работать только когда закончатся независимые задачи Б, С, Д, Е, Ж, то запараллелить Б, С, Д, Е, Ж милое дело.


Прочитайте выше (и внимательно) вопрос, на который я давал ответ.  smile 

Цитата(DProf @  8.2.2013,  18:53 Найти цитируемый пост)
А если потом придется еще 10 раз эту же задачу решать? 100 консолей в сумме откроете? а если 100 раз ?

А это надо в условии оговаривать, а в среднем такая ситуация менее вероятна. К тому же открыть сколько угодно консолей (а точнее, запустить сколько угодно независимых процессов) можно с помощью простейшего внешнего скрипта.
PM   Вверх
Annuta
Дата 28.2.2013, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 3.10.2006
Где: Dubna

Репутация: нет
Всего: 1



ОК, спасибо за обсуждение! 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
baldina
Дата 5.3.2013, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(DProf @  8.2.2013,  17:53 Найти цитируемый пост)
10 консолей - это не для программиста )

консоль - условность. поиск оптимального пути решения задачи (в т.ч. по времени реализации) вполне инженерная, программистская задача.
PM MAIL   Вверх
svlary
Дата 14.3.2013, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 8.9.2009

Репутация: 4
Всего: 4



Цитата(Annuta @  2.2.2013,  10:21 Найти цитируемый пост)
есть задача, которая очень долго считается.


Если проблема в том, что задача долго именно СЧИТАЕТСЯ (т.е. занимает процессор), то хоть как Вы её разбивайте, хоть на консоли, хоть на нитки, хоть на процессы, хоть вдоль, хоть поперек : результат будет один с очень небольшими отклонениями.

Для того, что бы задача, критическая по вычислительной мощности считалась быстрее, надо поднять вычислительную мощность ПРОЦЕССОРА. 

Проще говоря, в поллитровую бутылку не налить литр пива, хоть как её разбивай на части...
PM MAIL   Вверх
xvr
Дата 14.3.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(svlary @  14.3.2013,  12:37 Найти цитируемый пост)
Если проблема в том, что задача долго именно СЧИТАЕТСЯ (т.е. занимает процессор), то хоть как Вы её разбивайте, хоть на консоли, хоть на нитки, хоть на процессы, хоть вдоль, хоть поперек : результат будет один с очень небольшими отклонениями.
Не всегда. Если в машине больше одного процессорного ядра (а их сейчас практически везде больше одного), то процесс ускорится.

Цитата(svlary @  14.3.2013,  12:37 Найти цитируемый пост)
Проще говоря, в поллитровую бутылку не налить литр пива, хоть как её разбивай на части... 

Угу, но можно взять еще несколько бутылок  smile 

PM MAIL   Вверх
bsa
Дата 14.3.2013, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



svlary, все зависит от задачи. Есть задачи, которые легко распараллеливаются (единообразная обработка кучи несвязанных данных), а есть которые в принципе не параллелятся (когда способ обработки i-го значения зависит от результата обработки i-1), но такое встречается значительно реже.
PM   Вверх
mkvih
Дата 16.6.2014, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.6.2014
Где: Москва

Репутация: нет
Всего: нет



Хотелось бы добавить, что можно выделить 2 технологии многопоточности.

Первый вариант классический - несколько потоков - стартуют одновременно, выполняют какие-то свои задачи и потом "складывают" свои результаты.

Второй вариант - организовать конвейер. Такая техника используется, например в графических приложениях. Несколько "работников" по цепочке передают некоторые данные. Такая техника позволяет повысить количество кадров в секунду. Если важна частота "продуктов" в единицу времени - хорош этот вариант. 
http://www.youtube.com/watch?v=Sk4puph6GCI

Вроде бы ещё шаблоны существуют...

Это сообщение отредактировал(а) mkvih - 16.6.2014, 21:34
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.