Я ещё раз проверил без Hyperthread. Лучшее время на 4-х ядрах с 4-мя потоками 96-97 сек. Иногда появляются те же самые глюки и время выполнение почти удваивается. Увеличение количества потоков так же ведёт лишь к весьма незначительному замедлению работы. В общем, получается, что с Hyperthread примерно на 10% лучше.
По поводу этого глюка, я отследил следующее. В некоторых случаях, когда потоки начинают завершатся, последний поток начинает "метаться" по разным ядрам. Ядра загружены хоть и понемногу но все. И этот процесс довольно продолжительный. Если бы все потоки оставались на своих ядрах, наверное, такого бы не было. В программе ошибок может никаких и нет.
Как бы привязать потоки к ядрам?
Есть и ещё одна идея: поделить задачу на много частей, но не запускать их все сразу. Сначала, скажем, запустить только 8 потоков, а остальные - "подбрасывать" по мере завершения уже запущенных. Так получится, что все ядра будут загружены на 100% почти постоянно и не будет этого длительного периода, когда они работают только на 25%.
Что Вы думаете по этому поводу?
-- 06.01.2020, 02:13 --Если мерять посредством GetThreadTimes
, то будут две важные полезности
спасибо
SergeCpp надо будет попробовать