Запуск симуляции с гиперпоточностью удваивает время выполнения - PullRequest
4 голосов
/ 07 декабря 2011

Я использую симуляцию, написанную на python / numpy / cython. Поскольку мне нужно усреднить по многим прогонам симуляции, я использую многопроцессорный модуль для запуска всех отдельных прогонов симуляции в пакетах.

В офисе у меня есть рабочая станция i7-920 с HT. Дома у меня есть i5-560 без. Я думал, что смогу запустить в два раза больше экземпляров симуляции в каждой партии в офисе и сократить время выполнения в два раза. Удивительно, но время выполнения каждого отдельного экземпляра удвоилось по сравнению со временем, которое требуется на моей домашней рабочей станции. То, что запуск 3 экземпляров симуляции параллельно дома займет, скажем, 8 минут, в то время как запуск 6 экземпляров в офисе займет около 15 минут. Используя 'cat / proc / cpuinfo', я проверил 'siblings' = 8 и 'cpu cores' = 4, поэтому HT включен.

Я не знаю ни одного закона "сохранения общего времени выполнения" (хотя с научной точки зрения это может быть довольно интересно :)), и прыгающий кто-то здесь может пролить свет на эту головоломку.

Ответы [ 4 ]

5 голосов
/ 07 декабря 2011

Гиперпоточность может быть полезна для некоторых видов рабочей нагрузки.Интенсивные числовые вычисления не являются одним из них - когда вы хотите сделать какое-то сокращение чисел, вам лучше отключить гиперпоточность.То, что дает гиперпоточность, - это «свободное переключение контекста» между задачами, но процессор имеет только очень много исполнительных блоков.

В этом случае это может ухудшить ситуацию, поскольку ОС не может знать, какие процессы выполняются на отдельных ядрах (где они получают полную производительность), а какие на одном и том же ядре, только наразные «гиперобитки».

(На самом деле, я бы поспорил, что ядро ​​Linux может предоставить способ для точного управления этим, но многопроцессорный модуль Python просто запустит дополнительные процессы, которые будут использовать распределение ресурсов по умолчанию).

Итог: выключите HT, если можете - по крайней мере, вы полностью задействуете 4 ядра.

3 голосов
/ 07 декабря 2011

Возможно, переключение контекста приводит к дополнительным издержкам, вызванным 6 массовым вычислительным процессом и только 4 реальными ядрами. Если процессы конкурируют за ресурсы ЦП, они могут использовать неэффективные кэши ЦП.

Если вы включите только 4 ядра вместо 6, каков результат?

1 голос
/ 21 января 2012

Другие в значительной степени дали вам представление о проблеме, я просто хочу поделиться, соединив эту статью, в которой объясняется немного больше о том, как работает HT и как это влияет на производительность многопоточной программы: http://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology/

0 голосов
/ 16 сентября 2015

с моей рабочей станцией HP (16 ядер / процессор, с использованием гиперпоточности доходит до 32 процессоров), когда при выполнении численного моделирования включается гиперпоточность даже на сломанном питоне, код ошибки 0x000005 это озадачило меня долгое время, пока я не выключил HT, и симуляция работает хорошо! может быть, вы могли бы проверить и сравнить время выполнения для обоих HT включен и выключен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...