Технология Hyper-Threading и компьютерные игры

Страница 1 из 4

Автор: Лев Дымченко (levdym@virtualray.ru)

Введение

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

В начале HT появилась в серверных процессорах Intel Xeon, затем в самом топовом Intel Pentium IV 3.06GHz, сейчас же вышла линейка "средних" процессоров Pentium IV 2.4, Pentium IV 2.6, Pentium IV 2.8, обладающих технологией Hyper-Threading. Отныне эта технология будет поддерживаться всеми новыми процессорами Intel, даже Celeron на новом ядре Prescott, если такой будет. Постепенно процессоры без HT снимут с производства, и все новые настольные системы на базе процессоров Intel будут поддерживать технологию Hyper-Threading.

Итак, с точки зрения пользователя, процессор с HT представляется как два процессора. То есть, операционная система опознает один "физический" процессор как два "логических" процессора. Если не упоминать HT дополнительно, пользователь может думать, что у него в системном блоке находятся два процессора. Таким образом получается "виртуальная" многопроцессорность.

А что в принципе может дать пользователю многопроцессорность, пусть даже настоящая? Если он не работает со специально написанными многопоточными программами, эффективно нагружающими все имеющиеся процессоры. Рассмотрим для примера продвинутого геймера. Вот он запустил свою любимую трехмерную стрелялку. Но ему просто так скучно в нее играть. Он запускает проигрыватель своей любимой музыки, потому что игровая музыка ему надоела. Вот уже лишний полноценный процесс, который может занять отдельный процессор, дабы не мешать основному. Правда, воспроизведение звуков в самой игре тоже использует отдельный поток, которому тоже неплохо бы предоставить отдельный процессор. Но геймеру и этого мало. Он запускает процесс скачивания из интернета какой-нибудь альфа-бета-гама версии Doom N, и заодно записи на DVD для знакомых демо-версии Unreal Tournament 10000. У него еще работает почтовый клиент, который периодически просыпается и получает почту. Соответственно, неусыпно трудится антивирусный монитор, отслеживая подозрительную активность.

Геймеры очень привередливы, и хотят, чтобы FPS никогда не падал ниже 200 кадров в секунду. И тут им очень помогла бы многопроцессорность, чтобы активные потоки не вытесняли основной игровой поток, и не снижали рывками скорость игры.

На геймерах свет клином не сошелся, есть еще разработчики. Им тоже не помешала бы многопроцессорность. Пока они "играют", например, в MSVC, судорожно пытаясь во время компиляции еще что-то дописать, к ним течет бурным ручьем нечто вроде DirectX12.15 SDK. И очередная недоделанная демо-версия записывается на диск.

И вот, поскольку истинные дуальные системы дороги, предлагается использовать "логические" дуальные процессоры.

Hyper-Threading

Рассмотрим теперь принцип работы технологии Hyper-Threading. В процессоре Pentium IV инструкции x86 расщепляются на микрооперации, микрооперации попадают в специальный пул, в котором ждут выполнения. Для выполнения микрооперации требуется, чтобы были известны все операнды, они были загружены из памяти во внутренние регистры, и был свободен необходимый исполняющий модуль.

У Pentium IV 6 исполняющих модулей, 2 целочисленных, 2 для выполнения операций с плавающей точкой, один модуль чтения из памяти и один модуль записи в память. Эти модули могут выполнять операции параллельно, если есть готовые микрооперации с известными операндами.

Никакой код не сможет загрузить одновременно все модули, хорошо, если половину. Остальные будут простаивать. И вот возникает идея загрузить свободные вычислительные ресурсы. Для этого процессор будет одновременно исполнять команды двух потоков. В пуле микроинструкций теперь содержатся команды, относящиеся к двум различным процессам. Какие из них готовы к исполнению, те и выбираются. Опустим рассмотрение вопроса, как инструкции различных потоков попадают в один пул. Это не является лимитирующим производительность фактором. Доступные из программ и ОС регистры x86 являются виртуальными, они все равно отображаются нужным образом на гораздо большее количество физических регистров. Это позволяет эффективно работать с архитектурными состояниями, то есть содержимым регистров в данный момент сразу нескольких потоков. Часть процессора, отвечающая за технологию HT, занимает всего 5% площади на кристалле, то есть почти ничего. Она изначально присутствовала во всех процессорах на ядре Pentium IV, даже в самых первых, но не была активирована. Почему? Это вопрос будет рассмотрен ниже.

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

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

 
  стр. 1 из 4  
0

Copyright © 1999–2010 ООО "ДТФ". Все права защищены.

Воспроизведение материалов или их частей в любом виде и форме без письменного согласия запрещено.

Замечания и предложения отправляйте по адресу team@dtf.ru