Магия Hyper-Threading

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

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

Представим идеальную модель про­цессора, который может выполнять од­ну любую инструкцию за один такт. Для выполнения простейшей операции, предположим сложения двух чисел, по­требуется три инструкции — взять данные из памяти, выполнить сложение и отправить результат обратно в память. Таким образом, нужно три такта ма­шинного времени на решение этой за­дачи. А если потребуется провести две операции — сложения и вычитания, то общее время, затрачиваемое на выпол­нение, возрастает до шести тактов.

Теперь предположим, что в системе находится не один идеальный процес­сор, а два. Поскольку за один такт каждый процессор может выполнять только одно действие, то теоретически общая производительность должна составить две инструкции за один такт. Возвраща­ясь к вышеуказанному примеру, при вы­полнении двухпроцессорной системой только одной операции сложения про­изойдет следующая ситуация: все три инструкции должны четко следовать одна за другой, поэтому их нельзя выпол­нять одновременно. Следовательно, они будут выполняться одним процессором, а второй будет простаивать, и общее вре­мя выполнения останется таким же, как и в первом примере.

Однако если система, состоящая из двух идеальных процессоров, станет об­рабатывать две простейшие операции одновременно, например сложение и вычитание, то события будут развивать­ся по немного другому сценарию. Такт 1: оба процессора берут данные из памяти для выполнения своих операций. Такт 2: оба процессора производят свои вычис­ления. Такт 3: оба процессора заносят в память результаты вычислений. Итог та­кой работы – скорость выполнения одинаковой задачи на двухпроцессорной системе по сравнению с однопроцессор­ной вырастает вдвое.

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

Однако даже существенное увеличе­ние рабочей скорости системы не всегда способно адекватно увеличить произво­дительность всей системы в целом. На­пример, если в сферу интересов пользо­вателя попадает только простейшая ра­бота с офисными приложениями, то за­мена процессора с тактовой частотой около 1 ГГц на более совершенную мо­дель никак не повлияет на скорость на­бора пользователем листа текста. Или же другой пример: рабочей станции требу­ется выполнить рендеринг сверхслож­ной трехмерной сцены. Замена процес­сора более мощным конечно позволит несколько сократить время на исполне­ние всех команд, однако не всегда такая замена будет оправданной, так как при­рост производительности может соста­вить всего пару процентов, а затраты при этом выйдут за пределы разумных норм. Гораздо более эффективным будет яв­ляться переход на многопроцессорную платформу, что позволит увеличить быс­тродействие. Но и здесь появляются свои ограничения. Для того чтобы до­биться роста производительности, по­требуется соблюдение некоторых усло­вий. Во-первых, операционная система должна уметь правильно распараллели­вать команды для нескольких процессо­ров. Во-вторых, само программное обес­печение, которое отвечает за выполне­ние основной задачи, также должно под­держивать мультипроцессорные конфи­гурации. Последним условием, которое может повлиять на решение о таком пе­реходе, является фактор цены.

До недавнего времени мультипроцес­сорные решения были наиболее эффек­тивными и реальной альтернативы им не было. Однако в конце августа 2001 года на Intel Developer Forum, проходившим в Сан-Хосе, компания Intel представила новинку — процессор Хеоn, поддержи­вающий технологию Hyper-Threading. Прошло чуть более года, и теперь такой технологией оснащаются не только про­цессоры Хеоn, используемые лишь в уз­ком сегменте рынка, но и Pentium 4, ко­торые предпочитают большинство пользователей для установки в компьютеры, выполняющие, как правило, весьма большое количество самых разнообраз­ных задач.

Hyper-Threading

Любой современный процессор, услов­но относящийся к шестому поколению, содержит большое количество матема­тических блоков, каждый из которых может рассчитывать только свои инст­рукции. При этом скорость вычислений каждого блока существенно отличается от других. Следовательно, при выполне­нии общих инструкций какие-либо из блоков могут выполнить свои части за­дачи быстрее остальных. В результате получается, что часть процессора еще продолжает рассчитывать оставшиеся инструкции, а другая часть простаивает. Инженеры Intel задумались над вопро­сом: как повысить КПД процессора и максимально исключить такие ситуа­ции? Решение было найдено. В процес­сор был встроен блок, который отвечает за разделение инструкций разных задач. То есть, в случае выполнения двух и бо­лее процессов одновременно при про­счете первой задачи этот блок проверяет загруженность остальных блоков и по мере высвобождения ресурсов частично подает инструкции второй задачи, таким образом сокращая общее машинное вре­мя на выполнение обеих задач.

Первоначально эта технология полу­чила название Jackson Technology, одна­ко маркетинговый отдел компании Intel предложил сменить название на более созвучное — Hyper-Threading, что мож­но дословно перевести на русский язык  как «гиперпоточность».

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

И в-третьих, поддержка Hyper-Threa­ding должна быть полностью реализова­на на аппаратном уровне. То есть, если процессор поддерживает эту техноло­гию, а материнская плата — нет, то рабо­тать она не будет.

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

Поэтому использовать Hyper-Threa­ding рекомендуется только в специали­зированных приложениях, которые вы­полняют расчет большого числа параме­тров одновременно. К таким относятся программные продукты 3D Studio MAX, Lightwave 3D, Maya и др.

Тестирование

Для того чтобы подтвердить фактами все вышеизложенное, нами был протести­рован процессор Pentium 4, поддерживающий Hyper-Threading. Мы оценивали работу этой технологии в нескольких приложениях. Подробнее о том, какие комплектующие мы использовали для тестирования, можно прочитать в блоке «Оборудование для тестирования».

3DMark 2001 SE 330 Pro

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

Было проведено в общей сложности 48 измерений (по 24 на каждую видеокарту) в трех режимах - 640х480@16, 1024x768 @32 и 1600x1200@32, — в каждом из ко­торых проводилось по четыре измере­ния: сначала при минимальных и макси­мальных настройках драйверов видео­карты (регулировались уровни анизот­ропной фильтрации и полноэкранного сглаживания), а затем то же самое, толь­ко с параллельно загруженной програм­мой BurnCPUS.

Охарактеризовать полученные резуль­таты можно так: с любой видеокартой при работе в низком разрешении и с ми­нимальными настройками драйверов разница от включения режима Hyper-Threading находится в пределе погреш­ности измерений. В том случае, если за­пустить параллельно BurnCPU5, разни­ца будет достигать +50%, что является очень хорошим результатом. При уста­новке максимальных настроек видео­карты сохраняется такая же тенденция.

При увеличении разрешения экрана до 1024х768@32 и при минимальных на­стройках драйверов ситуация повторяет­ся — прирост производительности появ­ляется только при запуске BurnCPUS. Далее, при улучшении качества изобра­жения, на системе с видеокартой Radeon  9700 Pro наблюдается значительное сни­жение производительности ( -50%). В та­ком же режиме при использовании Ge­Force 4 Ti 4200 8х различия опять не вы­ходят за пределы погрешности измере­ний. Дальнейшее увеличение разреше­ния экрана также не влияет на разницу в производительности при использовании Hyper-Threading.

Исходя из полученных результатов, можно сделать несколько очень важных выводов: драйверы видеокарт, даже са­мые современные, не оптимизированы для работы с технологией Hyper-Threa­ding. Кроме того, сама программа ЗDМагк 2001 не поддерживает Hyper-Threading. В результате, независимо от того, какую видеокарту вы собираетесь использовать, как такового прироста производительности в игровых прило­жениях вы не получите.

SysMark 2002

Этот тестовый пакет как нельзя лучше предназначен для использования на мультипроцессорных системах. Дело в том, что все измерения производятся при одновременной работе нескольких приложений. Соответственно, включе­ние функции Hyper-Threading ведет к увеличению производительности. Спра­ведливости ради стоит отметить, что хо­тя эта программа и измеряет быстродей­ствие системы при работе с офисными приложениями, далеко не все будут од­новременно пользоваться тремя и более программами. Поэтому эффект от ис­пользования Hyper-Threading на офисных системах кажется весьма сомни­тельным.

PCMark 2002

Это еще один программный продукт, ориентированный на измерение произ­водительности компьютерных систем. Здесь наблюдается точно такая же ситуа­ция, как и в 3DMark: включение Hyper-Threading положительно сказывается только при запуске еще одного, парал­лельно выполняемого приложения.

SuSe Linux 8.1

Все операционные системы, базирую­щиеся на ядре Linux, поддерживают многопроцессорные системы, а вместе с тем и Hyper-Threading. Оценить влия­ние этой технологии на работу операци­онной системы мы смогли, выполнив компиляцию ядра (по команде «make -j 10»). Разница по времени более чем за­метна — включение Hyper-Threading ус­коряет работу на 21%.

3D Studio MAX 5

Этот программный продукт также под­держивает многопроцессорность и Hy­per-Threading. Мы оценивали время рендеринга сцены, входящей в комплект поставки (AnimatedSimmetry.max), в не­сжатое видео с разрешением 480x360. Те­стирование показало, что включение Hyper-Threading ускоряет работу на 22,5%.

* - при минимальных настройках

** - при максимальных настройках

*** - с BurnCPU5

Вывод

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

На вопрос о том, нужна ли вообще та­кая технология, мы ответим утверди­тельно, ведь это единственный способ увеличить быстродействие существую­щей системы, не прибегая к трате допол­нительных финансовых средств.

Alien

Лично мое мнение, все эти технологии Intel-а, типа  Hyper-Threading, для тех, кто хочет, чтобы его компьютер был скорее «модным», чем «хорошим», потому что большинство даже и не предполагают, как эти технологии работают и для чего нужны. Вот так и попадаются люди на маркетинговые уловки производителей процессоров. Эти все технологии «заточены» под определенный класс задач и «простому смертному» не нужны, ну, а если вы не можете, чтобы у вас в диспетчере устройств был только один процессор, то срочно бегите в магазин за процессором с технологией Hyper-Threading. (Не забудьте еще купить новую материнскую плату под него…). Также есть люди, у которых 2+2 ну никак не вычисляется на 32 разрядном  процессоре, для этого им нужно как минимум 64…(Это про AMD64 в 2004 г.) 

 

Материалы взяты из журнала Chip.

Alien_vv@mail.ru

Hosted by uCoz