Отключение Hyper-Threading в 6-ядерном Intel Xeon

У нас есть 12-ядерный MacPro для выполнения некоторых расчетов методом Монте-Карло. В его процессорах Intel Xeon включена технология Hyper-Threading (HT), поэтому на самом деле должно быть 24 параллельных процесса, чтобы они были полностью использованы. Однако наши расчеты более эффективны для работы в режиме 12x100%, чем 24x50%, поэтому мы попытались отключить Hyper-Threading через панель Processor в системных настройках, чтобы повысить производительность. Можно также отключить HT,

hwprefs -v cpu_ht=false

Затем мы провели несколько тестов и вот что мы получили:

  1. К нашему разочарованию, 12 параллельных задач выполняются одновременно с HT или без него.
  2. 24 параллельных задачи теряют 20%, если HT выключен (а не -50%, как мы думали)
  3. При включенном HT переключение с 24 на 12 задач снижает эффективность на 20% (тоже удивительно)
  4. При выключенном HT переключение с 24 на 12 ничего не меняет.

Похоже, что Hyper-Threading просто снижает производительность наших вычислений и избежать этого никак нельзя. Программа, которую мы используем для вычислений, написана на Фортране и скомпилирована с помощью gfortran. Есть ли способ сделать его более эффективным с этим железом?


Обновление. Наши расчеты методом Монте-Карло (MCC) обычно выполняются поэтапно, чтобы избежать потери данных и по другим причинам (этих шагов избежать не всегда возможно). В нашем случае каждый шаг состоит из множества симуляций с переменной продолжительностью. Поскольку каждый шаг разделен между несколькими параллельными задачами, они также имеют разную продолжительность. По сути, все более быстрые задачи должны ждать, пока не будут выполнены самые медленные. Этот факт заставляет нас делать более крупные шаги, которые заканчиваются с меньшим отклонением во времени за счет усреднения, чтобы процессоры не тратили время на ожидание. Это наша мотивация иметь 12*2,66 ГГц вместо 24*1,33 ГГц. Если бы можно было отключить HT, то мы бы получили примерно +10% производительности, переключившись с 24 задач с HT на 12 задач без HT. Однако тесты показывают, что мы теряем 20%. Так что мой вывод таков, что расчет на 30% неэффективен.

Для тестов я использовал довольно большие шаги, однако обычно шаги короче, поэтому эффективность становится еще выше.

Есть еще одна причина — для некоторых наших расчетов требуется 3-5 ГБ памяти, так что вы, наверное, видите, насколько экономично было бы для нас иметь 12 быстрых задач. Мы работаем над реализацией разделяемой памяти, но это будет долгосрочный проект. Поэтому нам нужно выяснить, как сделать существующее аппаратное/программное обеспечение максимально быстрым.


person Andrei Fokau    schedule 04.10.2010    source источник
comment
forums.macrumors.com/archive/index.php/t-733238. html   -  person rwong    schedule 04.10.2010
comment
Обычно это можно отключить в настройках BIOS, но я не знаком с Mac, поэтому это может не применяться.   -  person Brian Rasmussen    schedule 04.10.2010
comment
В вашем вопросе есть что-то странное... Кажется, вы выигрываете от HyperThreading, но отключили бы его? Вы говорите, что ваши вычисления более эффективны с 12//, чем с 24, но ваши тесты, похоже, говорят об обратном. Итак, почему вы хотите отключить HT?   -  person jv42    schedule 04.10.2010
comment
@ jv42, я хочу отключить его таким образом, чтобы 12 задач выполнялись как минимум так же быстро, как 24 с HT. Так что если нет такой возможности, то отключать HT не хотелось бы точно. Моя мотивация в обновленном вопросе.   -  person Andrei Fokau    schedule 04.10.2010
comment
Откуда вы взяли информацию, что активация HT вдвое снижает тактовую частоту процессора? Я думаю, что на процессорах Xeon скорость процессора не вообще изменится. Из того, что я видел, HT почти всегда положительно влияет на производительность, за исключением редких особых случаев.   -  person jv42    schedule 04.10.2010
comment
@jv42, ну, теперь я вижу, что это сложнее. Моя первоначальная мысль заключалась в том, что отключение HT заставит ЦП работать только с одним каналом, а не проверять его каждый второй раз (то есть на половинной скорости).   -  person Andrei Fokau    schedule 04.10.2010
comment
Тактовая частота ЦП может меняться в зависимости от нагрузки на последние процессоры Intel (серии Core i*), поэтому ваши мысли могут быть справедливы для этих процессоров, в зависимости от того, что ограничивает ваше приложение.   -  person jv42    schedule 04.10.2010


Ответы (4)


Это скорее расширенный комментарий, чем ответ:

Я не нахожу ваши наблюдения ужасно удивительными. Гиперпоточность — это подход бедняков к распараллеливанию, он позволяет вам иметь 2 конвейера ожидающих выполнения инструкций на одном процессоре. Но он не предоставляет дополнительных арифметических единиц с плавающей запятой или целых чисел или дополнительных регистров; когда один конвейер не может питать ALU (или как там его называют в наши дни), другой конвейер активируется в течение одного или двух тактов. Это контрастирует с ситуацией на ЦП без гиперпоточности, где, когда конвейер инструкций останавливается, его необходимо сбросить и заполнить инструкциями из другого процесса, прежде чем ЦП снова наберет скорость.

В статье Википедии о гиперпоточности все это довольно хорошо объясняется.

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

ЕСЛИ (это большое если) вы можете написать программу, которая никогда не останавливается в конвейере команд, тогда гиперпоточность не даст никакой выгоды (с точки зрения ускорения выполнения). То, что вы измерили, — это не ускорение из-за HT (ну, это ускорение из-за HT, но на самом деле вы этого не хотите), а неспособность ваших потоков поддерживать движение конвейера.

Что вам нужно сделать, так это уменьшить ускорение из-за HT! Или, скорее, вам нужно увеличить скорость выполнения 12 процессов (по одному на ядро), оставив конвейер заполненным. Лично я бы отключил гиперпоточность, пока оптимизировал выполнение программы на 12 ядрах.

Повеселись.

person High Performance Mark    schedule 04.10.2010

Мне немного трудно понять ваше описание тестов.

Давайте определим 100% как объем работы, которую вы можете выполнить с 12 задачами и без перерыва. И если бы вы могли сделать в два раза больше за тот же период времени, мы бы назвали это 200%. Итак, какие числа вы бы вписали в остальные три поля?

Изменить: обновлено с вашими номерами.

             without HT     with HT
12 tasks     100%           100%
24 tasks     100%           125%

Итак, насколько я понимаю, с отключенным HT есть промежутки времени, когда ваши потоки в основном приостановлены (например, когда они ждут данных из памяти или с диска), поэтому они фактически не работают на частоте 2,66 ГГц, а немного меньше. При включенной гиперпоточности CUP переключает задачи, а не делает паузу для этих мгновенных промежутков, поэтому общий объем используемой вычислительной мощности увеличивается.

person Douglas    schedule 04.10.2010
comment
Ваш стол - отличная идея. 12+HT=100%, 24+HT=125%, 24-HT=100%. Я ожидал получить 12-HT=125-140% вместо 100. Но это кажется невозможным. - person Andrei Fokau; 04.10.2010

Что ж, это означает, что при включенном HT переключение с 12 задач на 24 задачи повышает эффективность на 20%! Хороший бенчмаркинг!

С другой стороны, если ваша программа написана так, что каждый поток может работать только над отдельной задачей (в отличие от возможности разделить одну задачу на более мелкие фрагменты и выполнять их одновременно), то с целью уменьшения задержки для каждого задача (от начала до конца) вам просто нужно ограничить количество потоков до 12 в программном обеспечении. Аппаратный переключатель HT может оставаться в любом положении.

person rwong    schedule 04.10.2010

См. эту публикацию для приложения в инструментах Xcode для включения/отключения гиперпоточности (и количества активных процессоров). Параметр НЕ сохраняется в спящем режиме или при перезагрузке: http://www.logicprohelp.com/forum/viewtopic.php?f=5&t=88835

(Вы запускаете приложение «Инструменты», отменяете начальный экран, а затем меняете настройки ЦП).

person user1935218    schedule 28.12.2012