| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Многопоточное программирование |
| Автор: Annuta 2.2.2013, 10:21 |
| Привет всем! Такой вопрос: есть задача, которая очень долго считается. Хочу разбить её на части и считать параллельно. Есть два вариант: 1- открыть 10 консолей и параллельно запустить в в каждой свой кусок; 2- написать на С++ программу, которая создаст 10 потоков для каждого куска. Дорогие форумчане, скажите, какой способ более рационален ? Что по вашему мнению, даст больший выигрыш в производительности и времени ? Спасибо! |
| Автор: Фантом 2.2.2013, 13:27 |
| Если задача действительно допускает разбиение на независимые блоки, то с точки зрения быстродействия собственно программы разница будет невелика, но вот на реализацию первого варианта Вы сами, скорее всего, потратите заметно меньше времени. |
| Автор: DProf 8.2.2013, 17:53 | ||
С чего это вдруг такое решение? Если задача А начинает работать только когда закончатся независимые задачи Б, С, Д, Е, Ж, то запараллелить Б, С, Д, Е, Ж милое дело. 10 консолей - это не для программиста ) А если потом придется еще 10 раз эту же задачу решать? 100 консолей в сумме откроете? а если 100 раз ? |
| Автор: Annuta 28.2.2013, 10:47 |
| ОК, спасибо за обсуждение! |
| Автор: baldina 5.3.2013, 10:36 |
консоль - условность. поиск оптимального пути решения задачи (в т.ч. по времени реализации) вполне инженерная, программистская задача. |
| Автор: svlary 14.3.2013, 12:37 |
Если проблема в том, что задача долго именно СЧИТАЕТСЯ (т.е. занимает процессор), то хоть как Вы её разбивайте, хоть на консоли, хоть на нитки, хоть на процессы, хоть вдоль, хоть поперек : результат будет один с очень небольшими отклонениями. Для того, что бы задача, критическая по вычислительной мощности считалась быстрее, надо поднять вычислительную мощность ПРОЦЕССОРА. Проще говоря, в поллитровую бутылку не налить литр пива, хоть как её разбивай на части... |
| Автор: xvr 14.3.2013, 13:30 | ||||
Угу, но можно взять еще несколько бутылок |
| Автор: bsa 14.3.2013, 16:14 |
| svlary, все зависит от задачи. Есть задачи, которые легко распараллеливаются (единообразная обработка кучи несвязанных данных), а есть которые в принципе не параллелятся (когда способ обработки i-го значения зависит от результата обработки i-1), но такое встречается значительно реже. |
| Автор: mkvih 16.6.2014, 21:33 |
| Хотелось бы добавить, что можно выделить 2 технологии многопоточности. Первый вариант классический - несколько потоков - стартуют одновременно, выполняют какие-то свои задачи и потом "складывают" свои результаты. Второй вариант - организовать конвейер. Такая техника используется, например в графических приложениях. Несколько "работников" по цепочке передают некоторые данные. Такая техника позволяет повысить количество кадров в секунду. Если важна частота "продуктов" в единицу времени - хорош этот вариант. http://www.youtube.com/watch?v=Sk4puph6GCI Вроде бы ещё шаблоны существуют... |