Форум программистов, компьютерный форум CyberForum.ru

Потоки и их влияние на скорость - C++

Восстановить пароль Регистрация
 
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
08.06.2013, 21:59     Потоки и их влияние на скорость #1
Есть необходимость использовать несколько потоков, которые будут в цикле обрабатывать значения. Как будет быстрее, разбить задачу на несколько частей и каждую поместить в поток (получится примерно 10 потоков) или запихнуть в каждый побольше и получить меньше (5 потоков)?
Вопрос не в прямой скорости, а в том, как будет лучше для процессора обрабатывать? Как лучше для общей производительности системы? Как будет меньше нагрузки на процессор?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 21:59     Потоки и их влияние на скорость
Посмотрите здесь:

C++ Потоки.
C++ Потоки
C++ Потоки
потоки C++
Влияние выходного параметра функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 22:11     Потоки и их влияние на скорость #2
Это зависит от алгоритма, который ты хочешь распараллелить..
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
08.06.2013, 22:29  [ТС]     Потоки и их влияние на скорость #3
lazybiz, да ясен пень, но что лучше, иметь один поток с условиями типа
C++
1
2
3
4
5
6
7
8
while (1)
{
if (f)
z+=2;
if (r) 
z+=4;
Sleep(5);
}
или разделить на 2 потока по 1 условию?
При том, что в каждом будет Sleep(5);
Или это только нагрузит процессор еще одним потоком, который должен быстро обрабатыватья (слип же на 5 мс, а не на 500)?
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,406
Завершенные тесты: 1
08.06.2013, 22:32     Потоки и их влияние на скорость #4
Идеальная операция для распараллеливания - такая, где потоки нигде не
пересекаются друг с другом, не конкурируют за общие ресурсы, не
ждут друг друга и не обращаются к памяти, лежащей в чужих кэшах.

В таких случаях обычно создается количество потоков, равное количеству
логических процессоров в системе, причем часто каждый поток еще и
закрепляется за "своим" процессором, чтобы "не дергаться".

При таком раскладе общая загрузка вычислительных мощностей легко может
достигать планки в 100% и постоянно держаться на этой отметке на все время
вычисления. И тогда выигрыш от многопоточности становится прямо
пропорционален количеству задействованных процессоров.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 22:33     Потоки и их влияние на скорость #5
Именно такой пример распараллеливать смысла нет. При таких простых вычислениях производительность может даже упасть.. К тому же требования к ресурсам увеличатся.
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,406
Завершенные тесты: 1
08.06.2013, 22:35     Потоки и их влияние на скорость #6
Цитата Сообщение от MrCath Посмотреть сообщение
слип же на 5 мс, а не на 500
Во-первых, Sleep работает с миллисекундами, а не с микросекундами.
Во-вторых, даже паузу в 5 миллисекунд Windows гарантировать не может.
Если нужны такие крохотулечные задержки, уж лучше использовать
процессорную инструкцию PAUSE (_mm_pause в Visual C++).
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 22:36     Потоки и их влияние на скорость #7
Цитата Сообщение от MrCath Посмотреть сообщение
При том, что в каждом будет Sleep(5);
Распараллеливать с целью оптимизации и пихать туда Sleep() ? Или твоя цель не оптимизация?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 23:04     Потоки и их влияние на скорость
Еще ссылки по теме:

C++ потоки
Оказывает ли исход инструкции условного перехода (if) какое-либо влияние на стек C++
C++ Влияние оптимизации? Или UB?

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

Или воспользуйтесь поиском по форуму:
Dr_Quake
Заблокирован
08.06.2013, 23:04     Потоки и их влияние на скорость #8
Цитата Сообщение от Убежденный Посмотреть сообщение
Во-первых, Sleep работает с миллисекундами, а не с микросекундами.
Во-вторых, даже паузу в 5 миллисекунд Windows гарантировать не может.
Если нужны такие крохотулечные задержки, уж лучше использовать
процессорную инструкцию PAUSE (_mm_pause в Visual C++).
Sleep работает с миллисекундами только в винде, в никсах(а точнее POSIX) тот же Sleep работает с секундами, там свой nanosleep для малых интервалов или что-то такое.
Yandex
Объявления
08.06.2013, 23:04     Потоки и их влияние на скорость
Ответ Создать тему
Опции темы

Текущее время: 16:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru