Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / Посовие_1.docx
Скачиваний:
92
Добавлен:
10.05.2015
Размер:
217.48 Кб
Скачать

Команда monitor устанавливает диапазон адресов памяти (обычно используется одна строка кэша), по которому будет осуществляться отслеживание записей по стандартному протоколу write-back.

Команда MWAIT вводит логический процессор в оптимизированный режим (режим низкого энергопотребления) при ожидании записей по протоколу write-back по пространству адресов, заданных инструкцией MONITOR. С архитектурной точки зрения ее поведение идентично NOP. Выход из оптимизированного состояния осуществляется в случае записи по установленному пространству адресов, а также при срабатывании любого прерывания или исключения.

10. Технология Hyper-Threading

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

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

Если для борьбы с простоями при отсутствии данных существуют различные методы, например, можно увеличивать объем кэш-памяти, то загрузить весь процессор целиком при существующей концепции последовательных вычислений, как правило, никак не получается. Например, если программа выполняет сложение целых чисел, блоки операций с вещественными числами задействованы не будут. В итоге, получается достаточно печальная картина: большинство x86 программ использует одновременно не более 35% исполнительных устройств микропроцессора Pentium4.

Именно этому факту и обязана своим появлением технология Hyper-Threading, основная идея которой была предложена в 1993 году почетным сотрудником корпорации Intel Гленом Хинтоном, заметившим, что ресурсы процессора используются не в полной мере. В 1996 году инженеры Intel приступили к интеграции этой технологии в разрабатываемую перспективную архитектуру процессоров следующего поколения - Willamette/Foster. 28 августа 2001 года новая технология Hyper-Threading, наконец, была представлена, а 6 февраля 2002 года были официально объявлены первые процессоры семейства Intel Xeon с Hyper-Threading. Впоследствии технология Hyper-Threading была использована и в микропроцессорах Pentium 4.

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

В настоящее время рынок полностью завоевали многозадачные операционные системы, идеология которых построена на одновременном существовании нескольких вычислительных потоков (threads), относящихся к одному или разным активным приложениям, либо к самой операционной системе. Потоки часто называют также потоками выполнения (thread of execution), иногда называют «нитями» (буквальный перевод thread). Если на многопроцессорных системах эти потоки могут выполняться одновременно (по одному на процессор), то в однопроцессорных системах CPU вынуждены непрерывно переключаться между потоками, квантуя процессорное время между исполнением их различных частей.

Таким образом, если разрешить процессору одновременное выполнение более чем одного потока, то его работа может осуществляться более эффективно. Именно в этом и состоит основная идея Hyper-Threading. Благодаря технологии Hyper-Threading один физический процессор воспринимается операционной системой и приложениями как два логических процессора. Соответственно, операционная система предполагает, что CPU с технологией Hyper-Threading может одновременно выполнять два потока и загружает такой процессор работой гораздо полнее.

Поскольку физический процессор с технологией Hyper-Threading представляет собой два логических CPU, некоторые блоки в таких процессорах должны быть продублированы. Причем, продублированы должны быть лишь отдельные управляющие элементы, основные же исполнительные ресурсы остаются теми же – теперь они попросту загружаются более плотно и эффективно. В итоге, в процессорах с Hyper-Threading продублированы регистры, включая регистры общего назначения и управляющие регистры, усовершенствованный программируемый контроллер прерываний (Advanced Programmable Interrupt Controller - APIC) и некоторые служебные регистры, например, Instruction Pointer – указатели на очередную инструкцию для исполнения. Остальные же ресурсы, включая кэши, исполнительные блоки, логику предсказания переходов, контроллер шины и т.п. логические процессоры разделяют друг с другом. Именно поэтому реализация технологии Hyper-Threading обошлась разработчикам достаточно дешево – площадь процессорного ядра увеличилась всего лишь примерно на 5%, но позволяла увеличить производительность на 15—30 %.

В концепции многонитевой архитектуры (MultiThreading Architecture - MTA) "базовым" типом MTA можно считать грубозернистый (coarse grained). При этом в микропроцессоре имеется не менее двух аппаратных контекстов нитей. Контекст включает, в частности, регистры общего назначения, счетчик команд, слово состояния процесса и т.п. В любой момент времени работает только одна нить, чей контекст активен. Нить выполняется до возникновения "прерывания" (например, выполнение команды загрузки регистра при отсутствии данных в кэше). При прерывании процессор осуществляет замену контекста нити на контекст другой нити и начинает выполнение последней.

Следующий тип MTA - тонкозернистый (fine grained). В подобном процессоре поддерживается N контекстов нитей, и команды каждой нити распределяются на выполнение каждый N-й такт. Суммарная "пропускная способность" процессора при этом возрастает, поскольку для нитей будут (возможно, частично) скрыты задержки выполнения некоторых длинных команд. Пусть, например, умножение с плавающей запятой занимает 4 такта (N=4). Тогда на первом такте, когда контекст нити активен, запустится команда умножения. Через 4 такта, когда контекст нити снова станет активным, устройство с плавающей запятой как раз завершит выполнение умножения, и нить сможет выполнять следующую команду. Аппаратная "стоимость" такого решения невелика: необходима поддержка N контекстов нитей, плюс логика для переключения команд и данных различных нитей. Недостаток такого подхода также ясен: хотя суммарная пропускная способность процессора на смеси нитей возрастает, производительность для отдельной нити уменьшается.

Наиболее продвинутой является архитектура с одновременным выполнением нитей (SMT - Simultaneous Multi-Threading). Само ее название указывает на допустимость одновременного выполнения нескольких нитей, когда на каждом новом такте на выполнение в какое-либо функциональное устройство может направляться команда любой нити. В SMT, если программные коды нити обеспечивают выполнение большого количества команд за один такт, такая нить будет потреблять большинство ресурсов процессора. "Плохие" же в смысле количества выполняемых команд нити будут разделять ресурсы с другими подобными себе. Для реализации SMT необходимы следующие аппаратные средства:

- несколько счетчиков команд (по одному на нить) с возможностью выбора любого из них на каждом такте;

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

- несколько стеков адресов возврата (по одному на нить) для предсказания адресов возврата из подпрограмм;

- специальная дополнительная память в процессоре (в расчете на каждую нить) для осуществления процедуры удаления из буфера выполненных внеочередным образом команд.

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

Подводя итог материалу, представленному в разделах 4-10, можно сделать вывод о том, что в соответствии с принципом ILP (Instruction Level Parallelism) современный процессор состоит из различных функциональных блоков, или подсистем, работающих параллельно и независимо. С целью повышения производительности необходимо, чтобы микропроцессор как можно больше обеспечивал полную загрузку блоков. В описанных микропроцессорах такая загрузка обеспечивается при помощи аппаратных средств, работу которых можно охарактеризовать алгоритмом динамического выполнения команд.

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

Соседние файлы в папке 12-12-2013_11-21-32