Теория мультипроцессорных систем предполагает, что несколько процессоров всегда выполняют быстрее одни и те же операции, чем один. Каким же способом можно увеличить быстродействие, если на физическом уровне система не предполагает установки дополнительных процессоров?
Для того чтобы осознать, что такое мультипроцессорность и как она может быть реализована, мы полагаем, не будет лишним освежить в памяти некоторые теоретические знания.
Представим идеальную модель процессора, который может выполнять одну любую инструкцию за один такт. Для выполнения простейшей операции, предположим сложения двух чисел, потребуется три инструкции — взять данные из памяти, выполнить сложение и отправить результат обратно в память. Таким образом, нужно три такта машинного времени на решение этой задачи. А если потребуется провести две операции — сложения и вычитания, то общее время, затрачиваемое на выполнение, возрастает до шести тактов.
Теперь предположим, что в системе находится не один идеальный процессор, а два. Поскольку за один такт каждый процессор может выполнять только одно действие, то теоретически общая производительность должна составить две инструкции за один такт. Возвращаясь к вышеуказанному примеру, при выполнении двухпроцессорной системой только одной операции сложения произойдет следующая ситуация: все три инструкции должны четко следовать одна за другой, поэтому их нельзя выполнять одновременно. Следовательно, они будут выполняться одним процессором, а второй будет простаивать, и общее время выполнения останется таким же, как и в первом примере.
Однако если система, состоящая из двух идеальных процессоров, станет обрабатывать две простейшие операции одновременно, например сложение и вычитание, то события будут развиваться по немного другому сценарию. Такт 1: оба процессора берут данные из памяти для выполнения своих операций. Такт 2: оба процессора производят свои вычисления. Такт 3: оба процессора заносят в память результаты вычислений. Итог такой работы – скорость выполнения одинаковой задачи на двухпроцессорной системе по сравнению с однопроцессорной вырастает вдвое.
Разумеется, современные процессоры отличаются от идеальных более сложной структурой и способны выполнять не одну инструкцию за такт, а гораздо больше. Правда, и задачи, которые они решают, серьезно отличаются от простейших. Как правило, большинство процессов просчитывается одновременно, так как последовательное выполнение инструкций существенно снижает производительность. А чем сложнее и более витиевато протекают одновременно запущенные процессы, тем больше должна быть мощность процессора для их реализации.
Однако даже существенное увеличение рабочей скорости системы не всегда способно адекватно увеличить производительность всей системы в целом. Например, если в сферу интересов пользователя попадает только простейшая работа с офисными приложениями, то замена процессора с тактовой частотой около 1 ГГц на более совершенную модель никак не повлияет на скорость набора пользователем листа текста. Или же другой пример: рабочей станции требуется выполнить рендеринг сверхсложной трехмерной сцены. Замена процессора более мощным конечно позволит несколько сократить время на исполнение всех команд, однако не всегда такая замена будет оправданной, так как прирост производительности может составить всего пару процентов, а затраты при этом выйдут за пределы разумных норм. Гораздо более эффективным будет являться переход на многопроцессорную платформу, что позволит увеличить быстродействие. Но и здесь появляются свои ограничения. Для того чтобы добиться роста производительности, потребуется соблюдение некоторых условий. Во-первых, операционная система должна уметь правильно распараллеливать команды для нескольких процессоров. Во-вторых, само программное обеспечение, которое отвечает за выполнение основной задачи, также должно поддерживать мультипроцессорные конфигурации. Последним условием, которое может повлиять на решение о таком переходе, является фактор цены.
До недавнего времени мультипроцессорные решения были наиболее эффективными и реальной альтернативы им не было. Однако в конце августа 2001 года на Intel Developer Forum, проходившим в Сан-Хосе, компания Intel представила новинку — процессор Хеоn, поддерживающий технологию Hyper-Threading. Прошло чуть более года, и теперь такой технологией оснащаются не только процессоры Хеоn, используемые лишь в узком сегменте рынка, но и Pentium 4, которые предпочитают большинство пользователей для установки в компьютеры, выполняющие, как правило, весьма большое количество самых разнообразных задач.
Любой современный процессор, условно относящийся к шестому поколению, содержит большое количество математических блоков, каждый из которых может рассчитывать только свои инструкции. При этом скорость вычислений каждого блока существенно отличается от других. Следовательно, при выполнении общих инструкций какие-либо из блоков могут выполнить свои части задачи быстрее остальных. В результате получается, что часть процессора еще продолжает рассчитывать оставшиеся инструкции, а другая часть простаивает. Инженеры Intel задумались над вопросом: как повысить КПД процессора и максимально исключить такие ситуации? Решение было найдено. В процессор был встроен блок, который отвечает за разделение инструкций разных задач. То есть, в случае выполнения двух и более процессов одновременно при просчете первой задачи этот блок проверяет загруженность остальных блоков и по мере высвобождения ресурсов частично подает инструкции второй задачи, таким образом сокращая общее машинное время на выполнение обеих задач.
Первоначально эта технология получила название Jackson Technology, однако маркетинговый отдел компании Intel предложил сменить название на более созвучное — Hyper-Threading, что можно дословно перевести на русский язык как «гиперпоточность».
Как и в общем случае многопроцессорных систем, использование Hyper-Threading также накладывает свои ограничения. Добиться сколь угодно большого увеличения производительности системы можно будет только в том случае, если будут соблюдены основные условия. Во-первых, операционная система должна знать и уметь распознавать процессоры, оснащенные такой технологией. Если операционная система будет контролировать все происходящие процессы, риск фатальной ошибки будет сведен к минимуму. Во-вторых, приложение, в котором пользователь рассчитывает получить увеличение производительности, должно быть оптимизировано для работы с Hyper-Threading. В свою очередь, это снизит время на распределение различных инструкций, которые предстоит выполнить процессору.
И в-третьих, поддержка Hyper-Threading должна быть полностью реализована на аппаратном уровне. То есть, если процессор поддерживает эту технологию, а материнская плата — нет, то работать она не будет.
Первые два из этих ограничений могут привести к тому, что производительность не только не вырастет, но может еще и снизиться. Дело в том, что если приложение или операционная система не смогут правильно распределить поступающие потоки, то какой-либо из важных блоков процессора будет простаивать и, соответственно, машинное время на обработку будет увеличиваться. Следовательно, производительность в неоптимизированных приложениях будет снижаться.
Поэтому использовать Hyper-Threading рекомендуется только в специализированных приложениях, которые выполняют расчет большого числа параметров одновременно. К таким относятся программные продукты 3D Studio MAX, Lightwave 3D, Maya и др.
Для того чтобы подтвердить фактами все вышеизложенное, нами был протестирован процессор Pentium 4, поддерживающий Hyper-Threading. Мы оценивали работу этой технологии в нескольких приложениях. Подробнее о том, какие комплектующие мы использовали для тестирования, можно прочитать в блоке «Оборудование для тестирования».
Поскольку этот тест максимально использует возможности компьютера, мы полагаем, что он дает наиболее адекватную оценку производительности в так называемых игровых приложениях.
Было проведено в общей сложности 48 измерений (по 24 на каждую видеокарту) в трех режимах - 640х480@16, 1024x768 @32 и 1600x1200@32, — в каждом из которых проводилось по четыре измерения: сначала при минимальных и максимальных настройках драйверов видеокарты (регулировались уровни анизотропной фильтрации и полноэкранного сглаживания), а затем то же самое, только с параллельно загруженной программой BurnCPUS.
Охарактеризовать полученные результаты можно так: с любой видеокартой при работе в низком разрешении и с минимальными настройками драйверов разница от включения режима Hyper-Threading находится в пределе погрешности измерений. В том случае, если запустить параллельно BurnCPU5, разница будет достигать +50%, что является очень хорошим результатом. При установке максимальных настроек видеокарты сохраняется такая же тенденция.
При увеличении разрешения экрана до 1024х768@32 и при минимальных настройках драйверов ситуация повторяется — прирост производительности появляется только при запуске BurnCPUS. Далее, при улучшении качества изображения, на системе с видеокартой Radeon 9700 Pro наблюдается значительное снижение производительности ( -50%). В таком же режиме при использовании GeForce 4 Ti 4200 8х различия опять не выходят за пределы погрешности измерений. Дальнейшее увеличение разрешения экрана также не влияет на разницу в производительности при использовании Hyper-Threading.
Исходя из полученных результатов, можно сделать несколько очень важных выводов: драйверы видеокарт, даже самые современные, не оптимизированы для работы с технологией Hyper-Threading. Кроме того, сама программа ЗDМагк 2001 не поддерживает Hyper-Threading. В результате, независимо от того, какую видеокарту вы собираетесь использовать, как такового прироста производительности в игровых приложениях вы не получите.
Этот тестовый пакет как нельзя лучше предназначен для использования на мультипроцессорных системах. Дело в том, что все измерения производятся при одновременной работе нескольких приложений. Соответственно, включение функции Hyper-Threading ведет к увеличению производительности. Справедливости ради стоит отметить, что хотя эта программа и измеряет быстродействие системы при работе с офисными приложениями, далеко не все будут одновременно пользоваться тремя и более программами. Поэтому эффект от использования Hyper-Threading на офисных системах кажется весьма сомнительным.
Это еще один программный продукт, ориентированный на измерение производительности компьютерных систем. Здесь наблюдается точно такая же ситуация, как и в 3DMark: включение Hyper-Threading положительно сказывается только при запуске еще одного, параллельно выполняемого приложения.
Все операционные системы, базирующиеся на ядре Linux, поддерживают многопроцессорные системы, а вместе с тем и Hyper-Threading. Оценить влияние этой технологии на работу операционной системы мы смогли, выполнив компиляцию ядра (по команде «make -j 10»). Разница по времени более чем заметна — включение Hyper-Threading ускоряет работу на 21%.
Этот программный продукт также поддерживает многопроцессорность и Hyper-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