Отключение Hyper-Threading в 6-ядерном Intel Xeon - PullRequest
6 голосов
/ 04 октября 2010

У нас есть 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 быстрых задач.Мы работаем над реализацией разделяемой памяти, но это будет долгосрочный проект.Поэтому нам нужно выяснить, как сделать существующее аппаратное / программное обеспечение максимально быстрым.

Ответы [ 4 ]

8 голосов
/ 04 октября 2010

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

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

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

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

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

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

Веселитесь.

2 голосов
/ 04 октября 2010

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

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

Редактировать: обновлено с вашими номерами.

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

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

1 голос
/ 04 октября 2010

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

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

0 голосов
/ 28 декабря 2012

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

(Вы запускаете приложение Instruments, отменяете начальный экран, а затем изменяете настройки процессора).

...