Предсказание переходов. 1 страница

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

Поэтому инструкции перехода надо выявлять заранее и реагировать соответствующим образом. Для этого предназначен специальный блок предсказания переходов (Branch Prediction Unit). Его задача — предвидеть направление перехода и, в случае удачного предсказания, сэкономить время. Соответственно, если результат предсказания будет неудачным, происходит полная остановка конвейера и очистка буферов.

Если в программе есть условные переходы (то есть такие, которые зависят от результата выполнения какой-либо операции), надо постараться «угадать», произойдет этот переход, или нет. Метод гадания на кофейной гуще здесь не подходит. Поэтому блок предсказаний хранит специальную таблицу истории переходов (Branch History Table), в которой записана результативность предыдущих примерно 4000 предсказаний. Кроме того, отслеживается точность последнего предсказания, чтобы при необходимости откорректировать алгоритм работы. Благодаря этому декодер выполняет по подсказке блока предсказания условный переход, а затем блок предсказаний проверяет, правильно ли было предсказано это условие. Микроархитектура Prefetch (предзагрузки или предвыборки) позволяет заранее знать, какие данные понадобятся процессору в будущем.

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

 

Суперскалярная архитектура

Один конвейер - хорошо, а два - еще лучше. Здесь общий отдел вызова команд берет из памяти сразу по две команды и помещает каждую из них в один из конвейеров. Каждый конвейер содержит АЛУ для параллельных операций. Чтобы выполняться параллельно, две команды не должны конфликтовать при использовании ресурсов (например, регистров), и ни одна из них не должна зависеть от результата выполнения другой. Как и в случае с одним конвейером, либо компилятор должен следить, чтобы не возникало неприятных ситуаций (например, когда аппаратное обеспечение выдает некорректные результаты, если команды несовместимы), либо же конфликты выявляются и устраняются прямо во время выполнения команд благодаря использованию дополнительного аппаратного обеспечения.

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

Основная идея — один конвейер с большим количеством функциональных блоков.

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

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

Параллелизм на уровне команд помогает в какой-то степени, но конвейеры и суперскалярная архитектура обычно увеличивают скорость работы всего лишь в 5 - 10 раз. Чтобы улучшить производительность в 50, 100 и более раз, нужно разрабатывать компьютеры с несколькими процессорами.

 

Многоядерность.

Параллельная работа РґРІСѓС… Рё более ядер РїСЂРё меньшей тактовой частоте обеспечивает бóльшую производительность. Работающая РІ текущий момент программа распределяет задачи РїРѕ обработке данных РЅР° РѕР±Р° СЏРґСЂР°. Это обеспечивает максимальный эффект, РєРѕРіРґР° Рё операционная система, Рё прикладные программы работают РІ параллельном режиме, как, например, это часто бывает СЃ приложениями для обработки графики. Многоядерность влияет также РЅР° одновременную работу стандартных приложений. Например, РѕРґРЅРѕ СЏРґСЂРѕ процессора может отвечать Р·Р° программу, работающую РІ фоновом режиме, РІ то время как антивирусная программа занимает ресурсы второго СЏРґСЂР°.

ВСтоит, однако, оговориться, что управление параллельными задачами, тем РЅРµ менее, требует времени Рё задействует РґСЂСѓРіРёРµ ресурсы системы. Рђ РёРЅРѕРіРґР° даже для решения РѕРґРЅРѕР№ РёР· задач приходится ждать результата выполнения РґСЂСѓРіРѕР№. Поэтому РЅР° практике наличие 2-С… ядерного процессора РЅРµ означает производительность вычислений РІ РґРІР° раза быстрее. Хотя РїСЂРёСЂРѕСЃС‚ быстродействия Рё может оказаться весьма значительным, РЅРѕ РІ зависимости РѕС‚ типа приложения.

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

 

35. Понятие шины расширения. Шины PCI, PCI-X, PCI-E.

 

PCI (англ. Peripheral component interconnect, дословно — взаимосвязь периферийных компонентов) — шина ввода/вывода для подключения периферийных устройств к материнской плате компьютера.

 

Стандарт на шину PCI определяет:

физические параметры (например, разъёмы и разводку сигнальных линий);

электрические параметры (например, напряжения);

логическую модель (например, типы циклов шины, адресацию на шине).

 

Развитием стандарта PCI занимается организация PCI Special Interest Group.

 

Весной 1991 года компания Intel завершает разработку первой макетной версии шины PCI. Перед инженерами была поставлена задача разработать недорогое и производительное решение, которое позволило бы реализовать возможности процессоров 486, Pentium и Pentium Pro. Кроме того, было необходимо учесть ошибки допущенные VESA при проектировании шины VLB (электрическая нагрузка не позволяла подключать более 3 плат расширения), а также реализовать автоконфигурирование устройств по примеру протокола Autoconfig для компьютеров Amiga.

 

В 1992 году появляется первая версия шины PCI, Intel объявляет, что стандарт шины будет открытым, и создаёт PCI Special Interest Group. Благодаря этому любой заинтересованный разработчик получает возможность создавать устройства для шины PCI без необходимости приобретения лицензии. Первая версия шины имела тактовую частоту 33 МГц, могла быть 32- или 64-битной, а устройства могли работать с сигналами в 5 В или 3,3 В. Теоретически, пропускная способность шины 133 Мбайт/с, однако в реальности пропускная способность составляла около 80 Мбайт/с.

 

В середине 1993 года компания Intel выходит из ассоциации VESA и начинает предпринимать активные шаги по продвижению шины PCI на рынке. Ответом на критику со стороны специалистов из конференций Usenet и конкурирующих компаний (характеристики шины были во многом аналогичны, например Zorro III, публиковались статьи об ошибочном дизайне шины) стала PCI 2.0.

 

В 1995 году появляется версия PCI 2.1 (ещё одно название — «параллельная шина PCI»), которая обеспечила передачу данных по шине с частотой 66 МГц и максимальную скорость передачи в 533 Мбайт/с (для 64-битного варианта с частотой 66 МГц). Кроме того, эта шина уже была поддержана на уровне ОС Windows 95 (технология Plug and Play). Версия шины PCI 2.1 оказалась настолько популярной, что вскоре уже она была перенесена на платформы с процессорами Alpha, MIPS, PowerPC, SPARC и др.

 

В 1997 году, в связи с развитием компьютерной графики и разработкой шины AGP, шина PCI перестала удовлетворять новым, повышенным требованием к видеокартам и перестала использоваться для установки видеокарт.

 

В настоящее время интерфейс PCI постепенно вытесняется интерфейсами PCI Express, HyperTransport и USB. На современные материнские платы (по состоянию на 2012 год)[источник не указан 66 дней] устанавливается лишь один, редко два PCI-разъёма, вместо 5-6, устанавливавшихся ранее. На некоторые современные материнские платы (в основном High-End-класса или форм-фактора mATX) PCI-разъём не устанавливается вовсе.

 

Первоначально 32 проводника адрес/данные на частоте 33 МГц. Позже появились версии с 64 проводниками (используется дополнительная колодка разъема) и частотой 66 МГц.

 

Шина децентрализована, нет главного устройства, любое устройство может стать инициатором транзакции. Для выбора инициатора используется арбитраж с отдельно стоящей логикой арбитра. Арбитраж «скрытый», не отбирает времени — выбор нового инициатора происходит во время транзакции, исполняемой предыдущим инициатором.

 

Транзакция состоит из 1 или 2 циклов адреса (2 цикла адреса используются для передачи 64-битных адресов, поддерживаются не всеми устройствами, дают поддержку DMA на памяти более 4 Гб) и одного или многих циклов данных. Транзакция со многими циклами данных называется «пакетной» (burst), понимается как чтение/запись подряд идущих адресов и даёт более высокую скорость — один цикл адреса на несколько, а не на каждый цикл данных, и отсутствие простоев (на «успокоение» проводников) между транзакциями.

 

Специальные типы транзакций используются для обращений к конфигурационному пространству устройства.

 

«Пакетная» транзакция может быть временно приостановлена обоими устройствами из-за отсутствия данных в буфере или его переполнения.

 

Поддерживаются «расщеплённые» транзакции, когда целевое устройство отвечает состоянием «в процессе» и инициатор должен освободить шину для других устройств, захватить её снова через арбитраж и повторить транзакцию. Это делается, пока целевое устройство не ответит «сделано». Используется для сопряжения шин с разными скоростями (сама PCI и frontside процессора) и для предотвращения тупиковых ситуаций в сценарии с многими межшинными мостами.

 

Богатая поддержка межшинных мостов. Богатая поддержка режимов кэширования, таких как:

posted write — данные записи немедленно принимаются мостом, и мост сразу отвечает «сделано», уже после этого пытаясь провести операцию записи на ведомой шине.

write combining — несколько запросов на posted write, идущих подряд по адресам, соединяются в мосте в одну «взрывную» транзакцию на ведомой шине.

prefetching — используется при транзакциях чтения, означает выборку сразу большого диапазона адресов одной «взрывной» транзакцией в кеш моста, дальнейшие обращения исполняются самим мостом без операций на ведомой шине.

 

Прерывания поддерживаются либо как Message Signaled Interrupts (новое), либо классическим способом с использованием проводников INTA-D#. Проводники прерываний работают независимо от всей остальной шины, возможно разделение одного проводника многими устройствами.

 

PCI-устройства с точки зрения пользователя самонастраиваемы (Plug and Play). После старта компьютера системное программное обеспечение обследует конфигурационное пространство PCI каждого устройства, подключённого к шине, и распределяет ресурсы.

 

Каждое устройство может затребовать до шести диапазонов в адресном пространстве памяти PCI или в адресном пространстве ввода-вывода PCI.

 

Кроме того, устройства могут иметь ПЗУ, содержащее исполняемый код для процессоров x86 или PA-RISC, Open Firmware (системное ПО компьютеров на базе SPARC и PowerPC) или драйвер EFI.

 

Настройка прерываний осуществляется также системным программным обеспечением (в отличие от шины ISA, где настройка прерываний осуществлялась переключателями на карте). Запрос на прерывание на шине PCI передаётся с помощью изменения уровня сигнала на одной из линий IRQ, поэтому имеется возможность работы нескольких устройств с одной линией запроса прерывания; обычно системное ПО пытается выделить каждому устройству отдельное прерывание для увеличения производительности.

 

Спецификация

частота шины — 33,33 или 66,66 МГц, передача синхронная;

разрядность шины — 32 или 64 бита, шина мультиплексированная (адрес и данные передаются по одним и тем же линиям);

пиковая пропускная способность для 32-разрядного варианта, работающего на частоте 33,33 МГц — 133 Мбайт/с;

адресное пространство памяти — 32 бита (4 байта);

адресное пространство портов ввода-вывода — 32 бита (4 байта);

конфигурационное адресное пространство (для одной функции) 256 байт;

напряжение 3,3 или 5 В.

Стандартные модификации

В

Типы PCI-слотов

PCI 2.0

 

Первая версия базового стандарта, получившая широкое распространение, использовались как карты, так и слоты с сигнальным напряжением только 5 вольт. Пиковая пропускная способность — 133 Мбайт/с.

PCI 2.1 — 3.0

 

Отличались от версии 2.0 возможностью одновременной работы нескольких шинных задатчиков (англ. bus-master, т. н. конкурентный режим), а также появлением универсальных карт расширения, способных работать как в слотах, использующих напряжение 5 вольт, так и в слотах, использующих 3,3 вольта (с частотой 33 и 66 МГц соответственно). Пиковая пропускная способность для 33 МГц — 133 Мбайт/с, а для 66 МГц — 266 Мбайт/с.

Версия 2.1 — работа с картами, рассчитанными на напряжение 3,3 вольта, наличие соответствующих линий питания являлась опциональной.

Версия 2.2 — сделанные в соответствии с этими стандартами карты расширения имеют универсальный ключ разъёма по питанию и способны работать во многих более поздних разновидностях слотов шины PCI, а также, в некоторых случаях, и в слотах версии 2.1.

Версия 2.3 — несовместима с картами PCI, рассчитанными на использование 5 вольт, несмотря на продолжающееся использование 32-битных слотов с 5-вольтовым ключом. Карты расширения имеют универсальный разъём, но не способны работать в 5-вольтовых слотах ранних версий (до 2.1 включительно).

Версия 3.0 — завершает переход на карты PCI 3,3 вольт, карты PCI 5 вольт больше не поддерживаются.

PCI 64

 

Расширение базового стандарта PCI, появившееся РІ версии 2.1, удваивающее число линий данных, Рё, следовательно, РїСЂРѕРїСѓСЃРєРЅСѓСЋ способность. Слот PCI 64 является удлинённой версией обычного PCI-слота. Формально совместимость 32-битных карт СЃ 64-битным слотами (РїСЂРё условии наличия общего поддерживаемого сигнального напряжения) полная, Р° совместимость 64-битной карты СЃ 32-битным слотами является ограниченной (РІ любом случае произойдёт потеря производительности). Работает РЅР° тактовой частоте 33 МГц. Пиковая пропускная способность — 266 Мбайт/СЃ.

Версия 1 — использует слот PCI 64-бита и напряжение 5 вольт.

Версия 2 — использует слот PCI 64-бита и напряжение 3,3 вольта.

PCI 66

 

Версия PCI 66 является работающим на тактовой частоте 66 МГц развитием PCI 64; использует напряжение 3,3 вольта в слоте; карты имеют универсальный, либо форм-фактор на 3,3 В. Пиковая пропускная способность — 533 Мбайт/с.

PCI 64/66

 

Комбинация PCI 64 и PCI 66, позволяет вчетверо увеличить скорость передачи данных по сравнению с базовым стандартом PCI; использует 64-битные 3,3-вольтовые слоты, совместимые только с универсальными и 3,3-вольтовые 32-битные карты расширения. Карты стандарта PCI64/66 имеют либо универсальный (но имеющий ограниченную совместимость с 32-битными слотами) либо 3,3-вольтовый форм-фактор (последний вариант принципиально не совместим с 32-битными 33-мегагерцовыми слотами популярных стандартов). Пиковая пропускная способность — 533 Мбайт/с.

 

PCI-X

Основная статья: PCI Extended

 

Развитие версии PCI 64. Для всех вариантов шины существуют следующие ограничения РїРѕ количеству подключаемых Рє каждой шине устройств: 66 МГц — 4, 100 МГц — 2, 133 МГц — 1 (или 2, если РѕРґРЅРѕ или РѕР±Р° устройства РЅРµ находятся РЅР° платах расширения, Р° уже интегрированы РЅР° РѕРґРЅСѓ плату вместе СЃ контроллером), 266, 533 МГц Рё выше — 1.

 

Версия 1.0 — введено две новые рабочие частоты: 100 и 133 МГц, а также механизм раздельных транзакций для улучшения производительности при одновременной работе нескольких устройств. Как правило, обратно совместима со всеми 3,3-вольтовыми и универсальными PCI-картами. Карты обычно выполняются в 64-битном формате на 3,3 В и имеют ограниченную обратную совместимость со слотами PCI64/66, а некоторые — в универсальном формате и способны работать (хотя практической ценности это почти не имеет) в обычном PCI 2.2/2.3. Пиковая пропускная способность — 1024 Мбайт/с.