2010-10-04 3 views
5

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

hwprefs -v cpu_ht=false 

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

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

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


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

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

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

+0

http://forums.macrumors.com/archive/index.php/t-733238.html – rwong

+0

Обычно это можно отключить в настройках BIOS, но я не знаком с компьютерами Mac, поэтому он может не применяться. –

+2

В вашем вопросе есть что-то странное ... Вы, кажется, * получаете * от HyperThreading, но вы бы отключили его? Вы говорите, что ваши вычисления более эффективны с 12 // 24, но ваши тесты, похоже, говорят иначе. Итак, почему вы хотите отключить HT? – jv42

ответ

7

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

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

Wikipedia article on hyperthreading объясняет все это довольно хорошо.

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

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

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

Удачи.

1

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

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

2

Мне немного сложно понять ваше описание эталонных тестов.

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

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

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

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

+0

Ваш столик - отличная идея. '12 + HT = 100%', '24 + HT = 125%', '24-HT = 100%'. Я ожидал получить «12-HT = 125-140%» вместо 100. Но это кажется невозможным. –

0

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

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

Смежные вопросы