Программа ведет себя странно
От: DTF  
Дата: 20.07.19 00:05
Оценка:
Добрый вечер, коллеги.
Пишу я тут себе программку для разобраться, меряю время ее работы, и вижу очень странные результаты.

Есть очередь, защищенная мьютексом. Главный поток пихает в нее таски, остальные — извлекают и исполняют.
После того, как главный поток поместил все таски в очередь, он запускает функцию потока-читателя, т.е. начинает обрабатывать таски.

Таск — это небольшой класс c методом-числодробилкой.

Каждый таск замеряет время своей работы, эти времена потом суммируются.
Также замеряется полное время работы программы.

Всё это исполняется на процессоре i7-4790 (4 физических ядра, 8 логических).

Я меняю количество дополнительных потоков и смотрю на результаты.
При изменении количества потоков в пределах 0-7 общее время работы программы уменьшается, что логично.

А вот суммарное время работы тасков увеличивается странным образом:
(кол-во дополнительных потоков — примерное суммарное время работы тасков в миллисекундах)
0 — 14884
1 — 14878
2 — 15001
3 — 15001
4 — 16940
5 — 16983
6 — 18325
7 — 19643

При количестве доп. потоков <= 5 время увеличивается при добавлении каждого второго потока, а далее при добавлении каждого потока.
Почему так? Это как-то связано с HyperThreading?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.