- •Процессор
- •Эволюция технологий изготовления процессора
- •Закон Мура
- •Транзисторы.
- •Логические функции.
- •Реализация логических элементов на транзисторах
- •Реализация базовых компонент вычислительных систем на логических функциях.
- •Триггер
- •Регистр
- •Дешифратор
- •Сумматор
- •Программы, моделирующие логические схемы. Multimedia Logic.
- •Алгоритм действий процессора.
- •Формат команды процессора
- •Операнд n
- •Операнд 1
- •Основные регистры процессора
- •Регистры общего назначения.
- •Сегментные регистры
- •Регистры состояния и управления
- •Пример программы
- •Система команд процессора
- •Команда пересылки
- •Команды обработки данных
- •Команды ветвления
- •Команды обращения к процедурам
- •Что такое стек и для чего он нужен
- •Пара слов об адресации
- •Упрощенная схема современного процессора
- •Производительность процессора. Способы увеличения производительности.
- •Конвейеризация
- •Суперскалярность
- •Параллельная обработка данных и технология Hyper-Threading
- •Технология Turbo Boost
- •Эффективность выполнения команд
- •Энергопотребление процессора
Конвейеризация
Алгоритм работы процессора при выполнении одной команды можно свести к следующим этапам:
Если выполнять команду за командой последовательно, то выполнение нескольких команд будет выглядеть следующим образом:
Из
рисунка видно, что в то время, как команда
считывается, остальные блоки процессора
простаивают. Чтобы не было простоя
рабочих блоков процессора, можно начинать
считывать 2-ую команду сразу, как только
первая команда поступает на блок
дешифрации:
При подобной организации выполнения команд организуется конвейер: каждый блок процессора загружен в любой момент времени. Четыре команды выполненные в режиме конвейера будут выполнены в два с половиной раза быстрее. Если в конвейерном режиме будут реализовываться большее количество команд, выигрыш во времени выполнения будет еще больше.
Конвейеризация применяется в построении процессоров, начиная с 50-х-60х годов.
Но конвейеризация не всегда дает однозначный выигрыш. В случае, если для выполнения второй команды требуется результат выполнения первой, то вторая команда должна дождаться окончания работы первой команды; конвейер будет простаивать.
Чтобы избежать подобных простоев программистам рекомендуется составлять программы, исключающие идущие подряд взаимозависимые команды.
Суперскалярность
Суперскалярность подразумевает, что наиболее загруженные блоки процессора продублированы. Например, в микропроцессоре Pentium III блоки целочисленной арифметики и операций с плавающей запятой дублированы, а в микропроцессорах Pentium 4 и Athlon – троированы.
Таким
образом, одновременно, в течении одного
такта, может выполняться несколько
независимых друг от друга команд.
Суперскалярность хорошо сочетается с
конвейерной обработкой; при этом
желательно, чтобы конвейеров было
несколько. В этом случае на этапе выборки
команд в каждом такте будет извлекаться
из памяти несколько команд одновременно.
Также дублируются блок декодирования
и блок выборки данных.
Появление этой технологии привело к существенному увеличению производительности. Начиная с конца 90х годов бОльшая часть процессоров реализованы с применением суперскалярности. Но, при всех преимуществах данной технологии, существует предел роста числа дублирования блоков, при превышении которого производительность перестает расти, а блоки простаивают.
Параллельная обработка данных и технология Hyper-Threading
Изначально архитектура Фон-Неймана предполагала последовательную обработку команд. Идея параллельной (одновременной) обработки команд зародились еще в 60-е годы. И были реализованы в конвейеризации (как временной параллелизм), в суперскалярности (за счет одновременной обработки инструкций), в многопроцессорных системах (где несколько процессоров работают одновременно над решением общей задачи).
Конвейеризация и суперскалярность активно используются в настоящее время. Многопроцессорные системы не столь популярны (для персональных компьютеров), так как требуют сложных и дорогих материнских плат, поддерживающих многопроцессорность.
Наиболее эффективным направлением в настоящее время является концепция многопоточности – параллельная обработка нескольких потоков команд.
Представленная компанией Intel в 2002 технология Hyper-Threading позволяла выполнять на одном физическом ядре несколько программных потоков одновременно. Иначе говоря технология Hyper-Threading на одном физическом процессоре организует два логических процессора (два виртуальных ядра). С точки зрения операционной системы и запущенных приложений в системе существуют два процессора, и нагрузка распределяется между ними. В конструктивном плане реализация данной технологии возможна за счет дублирования на одном ядре некоторых функциональных блоков: набора регистров, счетчика команд и контроллера прерываний. Две параллельно исполняемые задачи могут работать со своими собственными независимыми регистрами и прерываниями, при этом используя одни и те же ресурсы процессора для выполнения своих задач.
Технология Hyper-Threading увеличивает производительность процессора, эффективна для поддержки операционной системы в мультизадачном режиме, но увеличение производительности заметно не на любых задачах. Для достижения эффекта увеличения производительности либо выполняемые программы должны поддерживать выполнение независимыми потоками (в силу специфики кода программы), либо операционная система должна уметь распределять выполняемые задачи между виртуальными ядрами.
Тем не менее, именно технология Hyper-Threading подтолкнула развитие технологий от виртуальной к реальной многоядерности. Классическим примером параллельной обработки данных в настоящее время являются многоядерные процессоры.
Ядро процессора – кристалл кремния, площадью приблизительно один квадратный сантиметр, на котором и реализована логическая схема процессора. Ядро расположено на текстолитовой основе, по которой подходят контакты к «ножкам» процессора и залито термическим интерфейсом.
Исходно процессоры были одноядерными. В предыдущем веке рост производительности процессоров преимущественно основывался на увеличении тактовой частоты работы процессора и за счет увеличения количества транзисторов на кристалле. С начала текущего века производительность процессоров стала увеличиваться за счет увеличения количества ядер на одном кристалле процессора.
Основная
идея многоядерности: на одной микросхеме
процессора располагаются одновременно
два (или более) ядра, каждое из которых
способно выполнять свой поток команд.
Каждое ядро процессора должно быть
независимым по энергопотреблению и по
потребляемой мощности. Предусмотрена
возможность отключения неиспользуемых
ядер.
Естественно, в многоядерной архитектуре процессора возникает много проблем. Одна из них - проблема при работе различных ядер с общей памятью: допустимы ситуации, при которых разные ядра процессора одновременно желают получить доступ к одной и той же памяти. Или проблема скоростного взаимодействия ядер процессора. Для эффективной коммуникации между ядрами процессора используются специальные высокоскоростные интерфейсы для обмена данными – например, QuickPath Interconnection (подробнее – в разделе интерфейсов).
Многоядерность обеспечивает прирост производительность, однако, для эффективного использования всех ядер так же, как в случае использовании технологии Hyper-Threading, программное обеспечение и операционные системы должны быть оптимизированы под многоядерные процессоры.
С 2006 года практически все разработчики процессоров перешли на двух- (и более) ядерные процессоры.
