Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Intel_Corei_Lections_2012.doc
Скачиваний:
4
Добавлен:
05.09.2019
Размер:
3.47 Mб
Скачать

Предсказание ветвлений

Последнее улучшение в передней части конвейера касается предсказания ветвлений. Эффективность алгоритмов предсказания ветвлений критична для архитектур, где используется высокий уровень параллелизма инструкций. Ветвления разрывают параллелизм, поскольку необходимо ждать результат предыдущей инструкции, прежде чем продолжить выполнение потока инструкций. Предсказание ветвлений прогнозирует, будет взята ветвь или нет, и если ветвь будет взята, то быстро вычисляет дальнейший адрес для продолжения выполнения. Для этого не требуется каких-либо сложных техник; всё что нужно - массив ветвлений, так называемый Branch Target Buffer (BTB), который сохраняет результаты ветвлений по мере продолжения выполнения кода (взята ветвь или нет, а также целевой адрес). К массиву прилагается алгоритм определения результата следующего ветвления.

Intel не обеспечила деталей по поводу алгоритма, используемого в новых блоках предсказания ветвлений, но широко известно, что теперь есть два уровня предсказаний. Первый уровень не изменился с архитектуры Conroe, но был добавлен новый уровень с медленным доступом, который позволяет хранить большую историю ветвлений. По информации Intel, эта конфигурация улучшает предсказание ветвлений в некоторых приложениях, которые используют массивные участки кода, таких как базы данных. Другое улучшение касается Return Stack Buffer, который хранит адрес возврата функций, когда они вызываются. В некоторых случаях этот буфер может переполняться, что приводит к ошибочным предсказаниям. Чтобы ограничить такую возможность, AMD увеличила его размер до 24 записей, а в Nehalem появилась система переименования для этого буфера.

Возвращение Hyper–Threading

Итак, первые ступени конвейера были не очень сильно изменены. То же самое касается и замыкающих ступеней. Здесь используются такие же исполнительные блоки, что и в самых последних процессорах Core, но, опять же, инженеры вновь поработали над их более эффективным использованием.

С Nehalem вернулась технология Hyper–Threading. Впервые она появилась в версии Northwood архитектуры Intel NetBurst. Технология Hyper–Threading, известная как Simultaneous Multi–Threading (SMT), позволяет использовать параллелизм на уровне потоков, чтобы оптимизировать нагрузку исполнительных блоков ядра, в результате чего на уровне приложений одно физическое ядро превращается в два виртуальных.

Принцип ее работы заключается в распределении операций с данными между двумя виртуальными потоками одного физического ядра. В частности, четырехъядерные модели Core i7 будут функционировать в 8 потоков.

Чтобы поддерживать параллельное выполнение потоков, некоторые ресурсы, такие как регистры, должны быть продублированы. Другие ресурсы можно совместно использовать двумя потоками, сюда входит вся логика внеочередного выполнения (буфер изменения порядка инструкций/instruction reorder buffer, исполнительные блоки и Cache). Внедрение SMT было обусловлено простым наблюдением: чем "шире" (больше исполнительных блоков) и "глубже" (больше ступеней конвейера) становятся процессоры, тем сложнее получать достаточную степень параллелизма для загрузки исполнительных блоков на каждом такте.

Механизм работы технологии Hyper-Threading

Если Pentium 4 был очень "глубоким", конвейер превысил 20 ступеней, у Nehalem он очень "широкий". У процессора доступно шесть исполнительных блоков, которые способны одновременно выполнять три операции работы с памятью и три операции вычисления. Если механизм выполнения не сможет обеспечить параллелизм инструкций на должном уровне, с загрузкой всех блоков, в конвейере появляются так называемые "пузырьки" – холостые такты.

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

Впрочем, в большинстве ситуаций влияние SMT на производительность положительное, а себестоимость технологии по ресурсам невысокая, что и объясняет её возвращение. Но программистам следует быть внимательными, поскольку в случае Nehalem не все потоки создаются одинаковыми. Intel обеспечивает способ точно определить топологию процессора (число физических и логических процессоров), а программисты могут использовать механизм привязки ОС (affinity), позволяющий привязать поток к виртуальному ядру.

Так как SMT сильнее нагружает внеочередной исполнительный движок, Intel увеличила размер некоторых встроенных буферов, чтобы они не превратились в "узкое место". Так, буфер изменения порядка команд (reorder buffer), который отслеживает все выполняемые инструкции, был увеличен с 96 записей у Core 2 до 128 записей у Nehalem. На практике, поскольку буфер статически распределён, чтобы ни один из потоков не смог монополизировать все ресурсы, его размер уменьшен до 64 записей для каждого потока в SMT. Вполне понятно, что в случае выполнения одного потока обеспечивается доступ ко всем записям, то есть потенциально устранены специфические случаи, в которых Nehalem дал бы меньшую производительность, чем предшественник.

Станция резервации (reservation station), которая отвечает за привязку инструкций к разным исполнительным блокам, тоже была увеличена с 32 до 36 записей. Но, в отличие от буфера изменения порядка команд, здесь распределение уже динамическое, поэтом поток может использовать больше или меньше записей как функцию его потребностей.

Два других буфера тоже были изменены: буфер загрузки (load buffer) и буфер хранения (store buffer). Первый получил 48 записей против 32 у Conroe, а второй – 32 вместо 20. Здесь, опять же, распределение ресурсов между потоками статическое.

Hyper-Threading позволяет эффективно обрабатывать разнотипные данные в пределах одного ядра. В то же время, интенсивные вычисления схожей природы увеличивают нагрузку на буфер изменения порядка команд (reorder buffer) вследствие соперничества операционных блоков за первоочередной доступ к кэшу. В подобных условиях активация HT приносит мало пользы, а в некоторых игровых приложениях даже приводит к снижению производительности.

Впрочем, основная масса программ положительно реагирует на многопотоковый алгоритм вычислений. Учитывая невысокую себестоимость внедрения Hyper-Threading и приобретенный инженерами Intel опыт, нет повода сомневаться в целесообразности нововведения.

С течением времени все большее количество разработчиков ПО будут адаптировать свою продукцию для процессоров с Simultaneous Multithreading. Уже сейчас список подобных приложений содержит, по крайней мере, полсотни наименований. Мы же приведем самые известные из них:

SSE 4.2.

Nehalem поддерживает SSE 4.2, то есть весь перечень потоковых SIMD-расширений v.4.1, которые присутствовали у Penryn (SSE4.1) плюс ещё семь новых инструкций.

Возможности SSE 4.2

Благодаря SSE 4.2, процессоры Core i7 быстрее обрабатывают XML-код и введенный, с целью распознавания, рукописный текст. Идеально подходят для сложных математических вычислений: генный анализ, расчет расстояния Хэмминга или моделирование динамики роста населения, а также обладают расширенными коммуникационными возможностями – ускоренной работой с NAS-хранилищами и механизмом экономии электропитания.

Переходя к описанию платформы Intel LGA1366 в целом, выделим два архитектурных блока, связывающих кристалл процессора с другими компонентами системы, – это QuickPath Interconnect (QPI) и Integrated Memory Controller (IMC).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]