За счет чего достигается увеличение производительности процессора при конвейеризации
Классификация конвейерных систем
Вычислительные конвейеры можно классифицировать по их возможностям и областям использования. Одно функциональным конвейером считается система, предназначенная для вычислений основной функции одного типа. То есть она осуществляет одинаковые операции над входными информационными комплектами. Под многофункциональным конвейером понимается система, предназначенная для вычисления различных типов функций.
Многофункциональные конвейерные вычислительные системы делятся на следующие виды:
- Системы, имеющие статическую конфигурацию.
- Системы, имеющие конфигурацию, задаваемую программно (векторные процессоры).
- Системы с динамической конфигурацией (изменяется для разных видов команд).
Готовые работы на аналогичную тему
В случае, когда какая-либо функция при её обычном выполнении реализуется за временной интервал T, но имеется возможность её деления на поочерёдное исполнение N подфункций, то в идеальном конвейере, если вычисление этой функции повторяется многократно, возможно её исполнение за временной период Т/N, то есть в N раз увеличить производительность. Различие реального и идеального конвейера заключается в наличии в реальной вычислительной системе различных помех. Общий смысл помехи заключается в присутствии фактора, который связан с самой функцией, конструктивными особенностями конвейера или его применения, препятствующих постоянному приходу новой информации на конвейерные этапы с самой большой скоростью.
Конвейерные вычисления сводятся к методам реализации компьютерного оборудования. Основными принципами, на которых построены методологии проектирования, являются:
- Реализация вычислений заданной функции аналогично последовательному вычислению набора подфункций.
- Значения, которые являются входными для определённой подфункции, будут выходными для подфункции, стоящей перед ней в очерёдности вычислений.
- Между подфункциями есть только информационный обмен и ничего более.
- Все подфункции обязательно выполняются отдельным аппаратным модулем.
- Все аппаратные модули выполняют свои действия за одинаковое время.
Аппаратные модули являются ступенями выполнения функции, и предполагается дискретность информационного потока. Обычно предполагается, что все ступени являются логическими схемами, не имеющими модуля памяти, но на их входах и выходах такие фиксирующие модули памяти присутствуют. Перемещение дискретных данных между ступенями выполняется по синхронизирующим сигналам.
Организация вычислительного конвейера
Вычислительный конвейер предполагает перемещение команд или данных по этапам цифрового вычислительного конвейера со скоростью, не зависящей от протяжённости конвейера (количества этапов), а зависит только от скорости подачи информации на конвейерные этапы. Скорость задаётся временем, в течение которого один компонент вычислительной операции способен пройти каждый этап, то есть самой большой задержкой на этапе, который выполняет отдельный участок функции. Это также значит, что скорость вычислений задаётся и скоростью поступления информации на вход конвейера.
2.4. Технологии повышения производительности процессоров
Системы команд процессора. Регистры процессоров: сущность, назначение, типы. Параллелизм вычислений. Конвейеризация вычислений.
В общем случае система команд процессора включает в себя следующие четыре основные группы команд:
· команды пересылки данных;
Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник (Destination). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛУ в данном случае не используется.
Арифметические команды выполняют операции сложения, вычитания, умножения, деления, увеличения на единицу (инкрементирования), уменьшения на единицу (декрементирования) и т.д. Этим командам требуется один или два входных операнда. Формируют команды один выходной операнд.
Логические команды производят над операндами логические операции, например, логическое И, логическое ИЛИ, исключающее ИЛИ, очистку, инверсию, разнообразные сдвиги (вправо, влево, арифметический сдвиг, циклический сдвиг). Этим командам, как и арифметическим, требуется один или два входных операнда, и формируют они один выходной операнд.
Наконец, команды переходов предназначены для изменения обычного порядка последовательного выполнения команд. С их помощью организуются переходы на подпрограммы и возвраты из них, всевозможные циклы, ветвления программ, пропуски фрагментов программ и т.д. Команды переходов всегда меняют содержимое счетчика команд. Переходы могут быть условными и безусловными. Именно эти команды позволяют строить сложные алгоритмы обработки информации.
В соответствии с результатом каждой выполненной команды устанавливаются или очищаются биты регистра состояния процессора (PSW). Но надо помнить, что не все команды изменяют все имеющиеся в PSW флаги. Это определяется особенностями каждого конкретного процессора.
У разных процессоров системы команд существенно различаются, но в основе своей они очень похожи. Количество команд у процессоров также различно. Например, у упоминавшегося уже процессора МС68000 всего 61 команда, а у процессора 8086 — 133 команды. У современных мощных процессоров количество команд достигает нескольких сотен. В то же время существуют процессоры с сокращенным набором команд (так называемые RISC-процессоры), в которых за счет максимального сокращения количества команд достигается увеличение эффективности и скорости их выполнения.
Команды пересылки данных
Команды пересылки данных занимают очень важное место в системе команд любого процессора. Они выполняют следующие важнейшие функции:
загрузка (запись) содержимого во внутренние регистры процессора;
сохранение в памяти содержимого внутренних регистров процессора;
копирование содержимого из одной области памяти в другую;
запись в устройства ввода/вывода и чтение из устройств ввода/вывода.
В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок — MOVB) но с различными методами адресации операндов.
В других процессорах помимо команды MOV имеется еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров — разные команды (их обозначения обычно строятся с использованием слова LOAD — загрузка). Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека (PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде).
Иногда в систему команд вводится специальная команда MOVS для строчной (или цепочечной) пересылки данных (например, в процессоре 8086). Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов (MOVSB), то есть инициирует не один цикл обмена по магистрали, а несколько. При этом адрес памяти, с которым происходит взаимодействие, увеличивается на 1 или на 2 после каждого обращения или же уменьшается на 1 или на 2 после каждого обращения. То есть в неявном виде применяется автоинкрементная или автодекрементная адресация.
В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода. Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS) и строчного вывода (команда OUTS). Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода (OUTS) или из устройства ввода/вывода в память (INS). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS).
Также к командам пересылки данных относятся команды обмена информацией (их обозначение строится на основе слова Exchange). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра (SWAP) или между регистром и ячейкой памяти.
Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:
· команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);
· команды операций с плавающей запятой (сложение, вычитание, умножение, деление);
· команды инкремента и декремента;
Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения (ADD) вычисляет сумму двух кодов. Команда вычитания (SUB) вычисляет разность двух кодов. Команда умножения (MUL) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления (DIV) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака.
Команды операций с плавающей запятой (точкой) используют формат представления чисел с порядком и мантиссой (обычно эти числа занимают две последовательные ячейки памяти). В современных мощных процессорах набор команд с плавающей запятой не ограничивается только четырьмя арифметическими действиями, а содержит и множество других более сложных команд, например, вычисление тригонометрических функций, логарифмических функций, а также сложных функций, необходимых при обработке звука и изображения.
Команды очистки (CLR) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется.
Команды инкремента (увеличения на единицу, INC) и декремента (уменьшения на единицу, DEC) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом.
Наконец, команда сравнения (обозначается CMP) предназначена для сравнения двух входных операндов. По сути, она вычисляет разность этих двух операндов, но выходного операнда не формирует, а всего лишь изменяет биты в регистре состояния процессора (PSW) по результату этого вычитания. Следующая за командой сравнения команда (обычно это команда перехода) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений (о командах перехода речь идет в разделе 3.3.4). В некоторых процессорах предусмотрены команды цепочечного сравнения двух последовательностей операндов, находящихся в памяти (например, в процессоре 8086 и совместимых с ним).
Логические команды выполняют над операндами логические (побитовые) операции, то есть они рассматривают коды операндов не как единое число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Логические команды выполняют следующие основные операции:
· логическое И, логическое ИЛИ, сложение по модулю 2 (Исключающее ИЛИ);
· логические, арифметические и циклические сдвиги;
· проверка битов и операндов;
· установка и очистка битов (флагов) регистра состояния процессора (PSW).
Команды логических операций позволяют побитно вычислять основные логические функции от двух входных операндов. Кроме того, операция И (AND) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль). Операция ИЛИ (OR) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице). Операция «Исключающее ИЛИ» (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу). Команды требуют двух входных операндов и формируют один выходной операнд.
Команды сдвигов позволяют побитно сдвигать код операнда вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Тип сдвига (логический, арифметический или циклический) определяет, каково будет новое значение старшего бита (при сдвиге вправо) или младшего бита (при сдвиге влево), а также определяет, будет ли где-то сохранено прежнее значение старшего бита (при сдвиге влево) или младшего бита (при сдвиге вправо). Например, при логическом сдвиге вправо в старшем разряде кода операнда устанавливается нуль, а младший разряд записывается в качестве флага переноса в регистр состояния процессора. А при арифметическом сдвиге вправо значение старшего разряда сохраняется прежним (нулем или единицей), младший разряд также записывается в качестве флага переноса.
Циклические сдвиги позволяют сдвигать биты кода операнда по кругу (по часовой стрелке при сдвиге вправо или против часовой стрелки при сдвиге влево). При этом в кольцо сдвига может входить или не входить флаг переноса. В бит флага переноса (если он используется) записывается значение старшего бита при циклическом сдвиге влево и младшего бита при циклическом сдвиге вправо. Соответственно, значение бита флага переноса будет переписываться в младший разряд при циклическом сдвиге влево и в старший разряд при циклическом сдвиге вправо.
Команды проверки битов и операндов предназначены для установки или очистки битов регистра состояния процессора в зависимости от значения выбранных битов или всего операнда в целом. Выходного операнда команды не формируют. Команда проверки операнда (TST) проверяет весь код операнда в целом на равенство нулю и на знак (на значение старшего бита), она требует только одного входного операнда. Команда проверки бита (BIT) проверяет только отдельные биты, для выбора которых в качестве второго операнда используется код маски. В коде маски проверяемым битам основного операнда должны соответствовать единичные разряды.
Наконец, команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно. Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль. Например, флагу переноса C (от Carry) будут соответствовать команды CLC (очистка) и SEC или STC (установка).
Команды переходов предназначены для организации всевозможных циклов, ветвлений, вызовов подпрограмм и т.д., то есть они нарушают последовательный ход выполнения программы. Эти команды записывают в регистр-счетчик команд новое значение и тем самым вызывают переход процессора не к следующей по порядку команде, а к любой другой команде в памяти программ. Некоторые команды переходов предусматривают в дальнейшем возврат назад, в точку, из которой был сделан переход, другие не предусматривают этого. Если возврат предусмотрен, то текущие параметры процессора сохраняются в стеке. Если возврат не предусмотрен, то текущие параметры процессора не сохраняются.
Команды переходов без возврата делятся на две группы:
· команды безусловных переходов;
· команды условных переходов.
В обозначениях этих команд используются слова Branch (ветвление) и Jump (прыжок).
Команды безусловных переходов вызывают переход в новый адрес независимо ни от чего. Они могут вызывать переход на указанную величину смещения (вперед или назад) или же на указанный адрес памяти. Величина смещения или новое значение адреса указываются в качестве входного операнда.
Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. В качестве таких условий обычно выступают значения флагов в регистре состояния процессора (PSW). То есть условием перехода является результат предыдущей операции, меняющей значения флагов. Всего таких условий перехода может быть от 4 до 16. Несколько примеров команд условных переходов:
· переход, если равно нулю;
· переход, если не равно нулю;
· переход, если есть переполнение;
· переход, если нет переполнения;
· переход, если больше нуля;
· переход, если меньше или равно нулю.
Если условие перехода выполняется, то производится загрузка в регистр-счетчик команд нового значения. Если же условие перехода не выполняется, счетчик команд просто наращивается, и процессор выбирает и выполняет следующую по порядку команду.
Регистры процессора, как сверхбыстродействующая память, предназначены для хранения операндов и команд, сведений о состоянии вычислительного процесса, обмена данными между МП, ОЗУ и портами, организации адресации и взаимодействия между блоками. По выполняемым функциям они подразделяются на пользовательские, системные и регистры сопроцессора. В 16 регистров пользователя (прикладного программиста) включены 8 регистров общего назначения, 6 сегментных регистров, регистр (счетчик) команд и регистр флагов. Определенные буквы в наименованиях регистров несут смысловое значение:
- E (Extended) – расширенный, т.е. 32-битный;
- H (High) – старший байт регистра, разряды ;
- L (Low) – младший байт, разряды .
Описание регистров общего назначения:
- EAX/AX/AL – аккумулятор, регистр для операций ввода/вывода через порты, вместе с DX выступают в качестве неявных операндов в командах умножения и деления; AL – регистр двоично-десятичных операций;
- EBX/BX – регистр для хранения базовых адресов при работе с данными;
- ECX/CX/CL – счетчик, используется при организации циклов;
- EDX/DX/DL – регистр данных, хранит данные по умолчанию, адрес порта при операциях ввода/вывода, используется в командах умножения и деления;
- EBP/BP – указатель базы при работе с данными в стековых структурах;
- ESP/SP – указатель (реверсивный счетчик) стека;
- ESI/SI – адресный регистр – индекс источника;
- EDI/DI – адресный регистр – индекс приемника. Вместе с SI используется в цепочечных инструкциях обработки массивов, хранит смещения (индексы) относительно базы (начала массива).
Сегментные регистры CS, SS, DS, ES, FS, GS используются для сегментной адресации. Регистры FS и GS появились в составе МП, начиная с i386.
Регистр-указатель команд EIP/IP предназначен для определения адреса следующей команды.
По назначению регистры различаются на:
· аккумулятор — используется для хранения промежуточных результатов арифметических и логических операций и инструкций ввода-вывода;
· флаговые — хранят признаки результатов арифметических и логических операций;
· общего назначения — хранят операнды арифметических и логических выражений, индексы и адреса;
· индексные — хранят индексы исходных и целевых элементов массива;
· указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стека);
· сегментные — хранят адреса и селекторы сегментов памяти;
· управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.
Параллельные вычисления — способ организации компьютерных вычислений , при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно). Термин охватывает совокупность вопросов параллелизма в программировании , а также создание эффективно действующих аппаратных реализаций . Теория параллельных вычислений составляет раздел прикладной теории алгоритмов .
Существуют различные способы реализации параллельных вычислений. Например, каждый вычислительный процесс может быть реализован в виде процесса операционной системы , либо же вычислительные процессы могут представлять собой набор потоков выполнения внутри одного процесса ОС. Параллельные программы могут физически исполняться либо последовательно на единственном процессоре — перемежая по очереди шаги выполнения каждого вычислительного процесса, либо параллельно — выделяя каждому вычислительному процессу один или несколько процессоров (находящихся рядом или распределённых в компьютерную сеть ).
Основная сложность при проектировании параллельных программ — обеспечить правильную последовательность взаимодействий между различными вычислительными процессами, а также координацию ресурсов, разделяемых между процессами.
Один из самых простых и наиболее распространенных способов повышения быстродействия процессоров — конвейеризация процесса вычислений. Большое преимущество конвейерных ЭВМ перед параллельными других типов — возможность использования пакетов программ, уже написанных для последовательных ЭВМ.
Под конвейерным режимом понимают такой вид обработки, при котором интервал времени, требуемый для выполнения процесса в функциональном узле (например, в АЛУ) микропроцессора, продолжительнее, чем интервалы, через которые данные могут вводиться в этот узел. Предполагается, что функциональный узел выполняет процесс в несколько этапов, т. е. когда первый этап завершается, результаты передаются на второй этап, на котором используются другие аппаратные средства. Разумеется, что устройство, используемое на первом этапе, оказывается свободным для начала новой обработки данных. Как известно, можно выделить четыре этапа обработки команды микропроцессора: выборка, декодирование, выполнение и запись результата. Иными словами, в ряде случаев, пока первая команда выполняется, вторая может декодироваться, а третья выбираться.
В любом процессоре машинная команда проходит ряд этапов обработки, например: выборку команды из оперативной памяти (ВК), вычисление абсолютного адреса операнда в оперативной памяти (ВА), выборку операнда из памяти (ВО), операцию в АЛУ.
В процессоре последовательной ЭВМ для осуществления этих функций используется единственное устройство, поэтому время выполнения команды равно:
Чс = ^ВК + ^ВА + ^ВО + *АЛУ
Для того чтобы уменьшить /к, можно для каждой функции ввести собственное оборудование. В таком процессоре любая команда последовательно проходит через все устройства, находясь на каждом этапе время А. Конвейерные процессоры применяются во всех без исключения старших моделях семейств ПЭВМ.
Системы команд процессора. Регистры процессора: сущность, назначение, типы. Параллелизм вычислений. Конвейеризация вычислений. Суперскаляризация. Матричные и векторные процессоры. Динамическое исполнение. Технология Hyper-Threading. Режимы работы процессора: характеристики реального, защищенного и виртуального реального.
Технологии повышения производительности процессоров и эффективности эвм Конвейерная обработка команд
Как уже говорилось выше, обработка команды, или цикл процессора может быть разделена на несколько основных этапов (микрокоманд), которых как минимум пять (выборка, декодирование, чтение исходных данных, выполнение, запись результата).
Каждая операция требует для своего выполнения времени, равного такту генератора процессора (tick of the internal clock). Отметим, что к длинным операциям (плавающая точка) это не имеет отношения. Все этапы команды задействуются только один раз и всегда в одном и том же порядке – одна за другой. Это, в частности, означает, что если логическая схема первой микрокоманды выполнила свою работу и передала результаты второй, то для выполнения текущей команды она больше не понадобится, и, следовательно, может приступить к выполнению следующей команды.
Такая технология обработки команд носит название конвейерной (pipeline), обработки. Каждая часть устройства называется ступенью (стадией) конвейера, а общее число ступеней – длиной линии конвейера.
Конвейеризация осуществляет многопоточную параллельную обработку команд, так что в каждый момент одна из команд считывается, другая декодируется и т. д., и всего в обработке одновременно находится пять команд. Таким образом, на выходе конвейера на каждом такте процессора появляется результат обработки одной команды (одна команда в один такт).
Приведенный пример процессора (5 микроопераций) является гипотетическим – в реальных ЦП конвейер обработки команд сложнее и включает большее количество ступеней. Причина увеличения длины конвейера заключается в том, что многие команды являются довольно сложными и не могут быть выполнены за один такт процессора, особенно при высоких тактовых частотах. Поэтому каждая из упомянутых пяти стадий обработки команд в свою очередь может состоять из нескольких ступеней конвейера.
С ростом числа линий конвейера и увеличением числа ступеней на линии увеличивается пропускная способность процессора при неизменной тактовой частоте. Наоборот, чем больше ступеней насчитывается в конвейере, тем меньшая работа выполняется за такт и тем выше можно поднимать частоту процессора.
Суперскаляризация
Процессоры с несколькими линиями конвейера получили название суперскалярных. Pentium — первый суперскалярный процессор Intel. Здесь две линии, что позволяет ему при одинаковых частотах быть вдвое производительней i80486, выполняя сразу две инструкции за такт.
Во многих вычислительных системах, наряду с конвейером команд, используются конвейеры данных. Сочетание этих двух конвейеров дает возможность достичь очень высокой производительности на определенных классах задач, особенно если используется несколько различных конвейерных процессоров, способных работать одновременно и независимо друг от друга.
Операции над вещественными числами (с плавающей запятой)
Сопроцессоры. Для расширения вычислительных возможностей центрального процессора — выполнения арифметических операций, вычисления основных математических функции (тригонометрических, показательных, логарифмических) и т. д. — в состав ЭВМ добавляется математический сопроцессор. Применение сопроцессора повышает производительность вычислений в сотни раз. В разных поколениях процессоров он назывался по-разному — FPU (Floating Point Unit — блок чисел/операций с плавающей точкой — БПЗ) или NPX (Numeric Processor extension — числовое расширение процессора).
Для процессоров 386 и ниже сопроцессор был отдельной микросхемой, подключаемой к локальной нише основного процессора. В любом случае сопроцессор исполняет только свои специфические команды, а всю работу по декодированию инструкций и доставке данных осуществляет ЦП.
Блоки операций с плавающей запятой. С программной точки зрения сопроцессор и процессор выглядят как единое целое. В современных (486+) процессорах БПЗ располагается на одном кристалле с центральным процессором.
Помехи в конвейерах
Различают следующие типы помех:
- Помехи структурного плана.
- Помехи, которые зависят от типа информации.
Первые появляются при попытке двух или более информационных фрагментов применить один и тот же этап одновременно. То есть, фактически это можно трактовать как столкновение.
Второй тип помех проявляется в том случае, если действия на одном этапе конвейера могут разрешить или запретить прохождение данных через другие этапы.
Системы команд процессора. Регистры процессора: сущность, назначение, типы. Параллелизм вычислений. Конвейеризация вычислений. Суперскаляризация. Матричные и векторные процессоры. Динамическое исполнение. Технология Hyper-Threading. Режимы работы процессора: характеристики реального, защищенного и виртуального реального.
Технологии повышения производительности процессоров и эффективности эвм Конвейерная обработка команд
Как уже говорилось выше, обработка команды, или цикл процессора может быть разделена на несколько основных этапов (микрокоманд), которых как минимум пять (выборка, декодирование, чтение исходных данных, выполнение, запись результата).
Каждая операция требует для своего выполнения времени, равного такту генератора процессора (tick of the internal clock). Отметим, что к длинным операциям (плавающая точка) это не имеет отношения. Все этапы команды задействуются только один раз и всегда в одном и том же порядке – одна за другой. Это, в частности, означает, что если логическая схема первой микрокоманды выполнила свою работу и передала результаты второй, то для выполнения текущей команды она больше не понадобится, и, следовательно, может приступить к выполнению следующей команды.
Такая технология обработки команд носит название конвейерной (pipeline), обработки. Каждая часть устройства называется ступенью (стадией) конвейера, а общее число ступеней – длиной линии конвейера.
Конвейеризация осуществляет многопоточную параллельную обработку команд, так что в каждый момент одна из команд считывается, другая декодируется и т. д., и всего в обработке одновременно находится пять команд. Таким образом, на выходе конвейера на каждом такте процессора появляется результат обработки одной команды (одна команда в один такт).
Приведенный пример процессора (5 микроопераций) является гипотетическим – в реальных ЦП конвейер обработки команд сложнее и включает большее количество ступеней. Причина увеличения длины конвейера заключается в том, что многие команды являются довольно сложными и не могут быть выполнены за один такт процессора, особенно при высоких тактовых частотах. Поэтому каждая из упомянутых пяти стадий обработки команд в свою очередь может состоять из нескольких ступеней конвейера.
С ростом числа линий конвейера и увеличением числа ступеней на линии увеличивается пропускная способность процессора при неизменной тактовой частоте. Наоборот, чем больше ступеней насчитывается в конвейере, тем меньшая работа выполняется за такт и тем выше можно поднимать частоту процессора.
Суперскаляризация
Процессоры с несколькими линиями конвейера получили название суперскалярных. Pentium — первый суперскалярный процессор Intel. Здесь две линии, что позволяет ему при одинаковых частотах быть вдвое производительней i80486, выполняя сразу две инструкции за такт.
Во многих вычислительных системах, наряду с конвейером команд, используются конвейеры данных. Сочетание этих двух конвейеров дает возможность достичь очень высокой производительности на определенных классах задач, особенно если используется несколько различных конвейерных процессоров, способных работать одновременно и независимо друг от друга.
Операции над вещественными числами (с плавающей запятой)
Сопроцессоры. Для расширения вычислительных возможностей центрального процессора — выполнения арифметических операций, вычисления основных математических функции (тригонометрических, показательных, логарифмических) и т. д. — в состав ЭВМ добавляется математический сопроцессор. Применение сопроцессора повышает производительность вычислений в сотни раз. В разных поколениях процессоров он назывался по-разному — FPU (Floating Point Unit — блок чисел/операций с плавающей точкой — БПЗ) или NPX (Numeric Processor extension — числовое расширение процессора).
Для процессоров 386 и ниже сопроцессор был отдельной микросхемой, подключаемой к локальной нише основного процессора. В любом случае сопроцессор исполняет только свои специфические команды, а всю работу по декодированию инструкций и доставке данных осуществляет ЦП.
Блоки операций с плавающей запятой. С программной точки зрения сопроцессор и процессор выглядят как единое целое. В современных (486+) процессорах БПЗ располагается на одном кристалле с центральным процессором.
Системы с перекрытиями процессов
Очень близки по принципу работы к системам с конвейеризацией системы с перекрывающимися процессами. В системах, имеющих перекрытия процессов вычислений, отсутствуют отдельные жёсткие условия на способы их проектирования. Системы информационной обработки, имеющие перекрытие процессов, иногда считают (что не совсем правильно) асинхронными или динамическими конвейерными системами. При осуществлении перекрытий допустимы следующие возможности:
- Допускается некоторая зависимость среди отдельных вычислительных действий подфункций.
- Любое вычисление может состоять из своей цепи подфункций.
- Предназначение подфункций может существенно отличаться.
- Временной интервал, требуемый для выполнения одного этапа, может быть не постоянным, а зависящим от типа функции данного этапа и входных данных.
Методики увеличения скорости обработки информации
Увеличение скорости обработки информации является основной задачей формирования организационной структуры компьютеров, компьютерного оборудования и различных систем. Главными направлениями, позволяющими решить эту задачу, являются:
- Разработка и усовершенствование физических компонентов, которые обеспечивают большие скорости переключений.
- Формирование нестандартных методик и технического оборудования информационной обработки.
- Объединение операций.
Последняя методика имеет две возможных реализации, а именно:
- Параллельная обработка информации.
- Конвейерная обработка информации.
По существу, это два абсолютно различных метода. Параллелизм подразумевает возможность совместить операции за счёт их выполнения на разных копиях аппаратной структурной организации. Здесь повышение производительности получается путём использования единовременного и аналогичного функционирования идентичных компонентов компьютерного оборудования, выполняющих решение фрагментов поставленной задачи.
Конвейеризация в обобщённом смысле базируется на разделении выполняемой операции на более мелкие составляющие, которые называются подфункциями, и предоставлении для выполнения каждой подфункции своего аппаратного блока.
2.4. Технологии повышения производительности процессоров
Системы команд процессора. Регистры процессоров: сущность, назначение, типы. Параллелизм вычислений. Конвейеризация вычислений.
В общем случае система команд процессора включает в себя следующие четыре основные группы команд:
· команды пересылки данных;
Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник (Destination). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛУ в данном случае не используется.
Арифметические команды выполняют операции сложения, вычитания, умножения, деления, увеличения на единицу (инкрементирования), уменьшения на единицу (декрементирования) и т.д. Этим командам требуется один или два входных операнда. Формируют команды один выходной операнд.
Логические команды производят над операндами логические операции, например, логическое И, логическое ИЛИ, исключающее ИЛИ, очистку, инверсию, разнообразные сдвиги (вправо, влево, арифметический сдвиг, циклический сдвиг). Этим командам, как и арифметическим, требуется один или два входных операнда, и формируют они один выходной операнд.
Наконец, команды переходов предназначены для изменения обычного порядка последовательного выполнения команд. С их помощью организуются переходы на подпрограммы и возвраты из них, всевозможные циклы, ветвления программ, пропуски фрагментов программ и т.д. Команды переходов всегда меняют содержимое счетчика команд. Переходы могут быть условными и безусловными. Именно эти команды позволяют строить сложные алгоритмы обработки информации.
В соответствии с результатом каждой выполненной команды устанавливаются или очищаются биты регистра состояния процессора (PSW). Но надо помнить, что не все команды изменяют все имеющиеся в PSW флаги. Это определяется особенностями каждого конкретного процессора.
У разных процессоров системы команд существенно различаются, но в основе своей они очень похожи. Количество команд у процессоров также различно. Например, у упоминавшегося уже процессора МС68000 всего 61 команда, а у процессора 8086 — 133 команды. У современных мощных процессоров количество команд достигает нескольких сотен. В то же время существуют процессоры с сокращенным набором команд (так называемые RISC-процессоры), в которых за счет максимального сокращения количества команд достигается увеличение эффективности и скорости их выполнения.
Команды пересылки данных
Команды пересылки данных занимают очень важное место в системе команд любого процессора. Они выполняют следующие важнейшие функции:
загрузка (запись) содержимого во внутренние регистры процессора;
сохранение в памяти содержимого внутренних регистров процессора;
копирование содержимого из одной области памяти в другую;
запись в устройства ввода/вывода и чтение из устройств ввода/вывода.
В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок — MOVB) но с различными методами адресации операндов.
В других процессорах помимо команды MOV имеется еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров — разные команды (их обозначения обычно строятся с использованием слова LOAD — загрузка). Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека (PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде).
Иногда в систему команд вводится специальная команда MOVS для строчной (или цепочечной) пересылки данных (например, в процессоре 8086). Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов (MOVSB), то есть инициирует не один цикл обмена по магистрали, а несколько. При этом адрес памяти, с которым происходит взаимодействие, увеличивается на 1 или на 2 после каждого обращения или же уменьшается на 1 или на 2 после каждого обращения. То есть в неявном виде применяется автоинкрементная или автодекрементная адресация.
В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода. Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS) и строчного вывода (команда OUTS). Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода (OUTS) или из устройства ввода/вывода в память (INS). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS).
Также к командам пересылки данных относятся команды обмена информацией (их обозначение строится на основе слова Exchange). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра (SWAP) или между регистром и ячейкой памяти.
Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:
· команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);
· команды операций с плавающей запятой (сложение, вычитание, умножение, деление);
· команды инкремента и декремента;
Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения (ADD) вычисляет сумму двух кодов. Команда вычитания (SUB) вычисляет разность двух кодов. Команда умножения (MUL) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления (DIV) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака.
Команды операций с плавающей запятой (точкой) используют формат представления чисел с порядком и мантиссой (обычно эти числа занимают две последовательные ячейки памяти). В современных мощных процессорах набор команд с плавающей запятой не ограничивается только четырьмя арифметическими действиями, а содержит и множество других более сложных команд, например, вычисление тригонометрических функций, логарифмических функций, а также сложных функций, необходимых при обработке звука и изображения.
Команды очистки (CLR) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется.
Команды инкремента (увеличения на единицу, INC) и декремента (уменьшения на единицу, DEC) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом.
Наконец, команда сравнения (обозначается CMP) предназначена для сравнения двух входных операндов. По сути, она вычисляет разность этих двух операндов, но выходного операнда не формирует, а всего лишь изменяет биты в регистре состояния процессора (PSW) по результату этого вычитания. Следующая за командой сравнения команда (обычно это команда перехода) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений (о командах перехода речь идет в разделе 3.3.4). В некоторых процессорах предусмотрены команды цепочечного сравнения двух последовательностей операндов, находящихся в памяти (например, в процессоре 8086 и совместимых с ним).
Логические команды выполняют над операндами логические (побитовые) операции, то есть они рассматривают коды операндов не как единое число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Логические команды выполняют следующие основные операции:
· логическое И, логическое ИЛИ, сложение по модулю 2 (Исключающее ИЛИ);
· логические, арифметические и циклические сдвиги;
· проверка битов и операндов;
· установка и очистка битов (флагов) регистра состояния процессора (PSW).
Команды логических операций позволяют побитно вычислять основные логические функции от двух входных операндов. Кроме того, операция И (AND) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль). Операция ИЛИ (OR) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице). Операция «Исключающее ИЛИ» (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу). Команды требуют двух входных операндов и формируют один выходной операнд.
Команды сдвигов позволяют побитно сдвигать код операнда вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Тип сдвига (логический, арифметический или циклический) определяет, каково будет новое значение старшего бита (при сдвиге вправо) или младшего бита (при сдвиге влево), а также определяет, будет ли где-то сохранено прежнее значение старшего бита (при сдвиге влево) или младшего бита (при сдвиге вправо). Например, при логическом сдвиге вправо в старшем разряде кода операнда устанавливается нуль, а младший разряд записывается в качестве флага переноса в регистр состояния процессора. А при арифметическом сдвиге вправо значение старшего разряда сохраняется прежним (нулем или единицей), младший разряд также записывается в качестве флага переноса.
Циклические сдвиги позволяют сдвигать биты кода операнда по кругу (по часовой стрелке при сдвиге вправо или против часовой стрелки при сдвиге влево). При этом в кольцо сдвига может входить или не входить флаг переноса. В бит флага переноса (если он используется) записывается значение старшего бита при циклическом сдвиге влево и младшего бита при циклическом сдвиге вправо. Соответственно, значение бита флага переноса будет переписываться в младший разряд при циклическом сдвиге влево и в старший разряд при циклическом сдвиге вправо.
Команды проверки битов и операндов предназначены для установки или очистки битов регистра состояния процессора в зависимости от значения выбранных битов или всего операнда в целом. Выходного операнда команды не формируют. Команда проверки операнда (TST) проверяет весь код операнда в целом на равенство нулю и на знак (на значение старшего бита), она требует только одного входного операнда. Команда проверки бита (BIT) проверяет только отдельные биты, для выбора которых в качестве второго операнда используется код маски. В коде маски проверяемым битам основного операнда должны соответствовать единичные разряды.
Наконец, команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно. Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль. Например, флагу переноса C (от Carry) будут соответствовать команды CLC (очистка) и SEC или STC (установка).
Команды переходов предназначены для организации всевозможных циклов, ветвлений, вызовов подпрограмм и т.д., то есть они нарушают последовательный ход выполнения программы. Эти команды записывают в регистр-счетчик команд новое значение и тем самым вызывают переход процессора не к следующей по порядку команде, а к любой другой команде в памяти программ. Некоторые команды переходов предусматривают в дальнейшем возврат назад, в точку, из которой был сделан переход, другие не предусматривают этого. Если возврат предусмотрен, то текущие параметры процессора сохраняются в стеке. Если возврат не предусмотрен, то текущие параметры процессора не сохраняются.
Команды переходов без возврата делятся на две группы:
· команды безусловных переходов;
· команды условных переходов.
В обозначениях этих команд используются слова Branch (ветвление) и Jump (прыжок).
Команды безусловных переходов вызывают переход в новый адрес независимо ни от чего. Они могут вызывать переход на указанную величину смещения (вперед или назад) или же на указанный адрес памяти. Величина смещения или новое значение адреса указываются в качестве входного операнда.
Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. В качестве таких условий обычно выступают значения флагов в регистре состояния процессора (PSW). То есть условием перехода является результат предыдущей операции, меняющей значения флагов. Всего таких условий перехода может быть от 4 до 16. Несколько примеров команд условных переходов:
· переход, если равно нулю;
· переход, если не равно нулю;
· переход, если есть переполнение;
· переход, если нет переполнения;
· переход, если больше нуля;
· переход, если меньше или равно нулю.
Если условие перехода выполняется, то производится загрузка в регистр-счетчик команд нового значения. Если же условие перехода не выполняется, счетчик команд просто наращивается, и процессор выбирает и выполняет следующую по порядку команду.
Регистры процессора, как сверхбыстродействующая память, предназначены для хранения операндов и команд, сведений о состоянии вычислительного процесса, обмена данными между МП, ОЗУ и портами, организации адресации и взаимодействия между блоками. По выполняемым функциям они подразделяются на пользовательские, системные и регистры сопроцессора. В 16 регистров пользователя (прикладного программиста) включены 8 регистров общего назначения, 6 сегментных регистров, регистр (счетчик) команд и регистр флагов. Определенные буквы в наименованиях регистров несут смысловое значение:
- E (Extended) – расширенный, т.е. 32-битный;
- H (High) – старший байт регистра, разряды ;
- L (Low) – младший байт, разряды .
Описание регистров общего назначения:
- EAX/AX/AL – аккумулятор, регистр для операций ввода/вывода через порты, вместе с DX выступают в качестве неявных операндов в командах умножения и деления; AL – регистр двоично-десятичных операций;
- EBX/BX – регистр для хранения базовых адресов при работе с данными;
- ECX/CX/CL – счетчик, используется при организации циклов;
- EDX/DX/DL – регистр данных, хранит данные по умолчанию, адрес порта при операциях ввода/вывода, используется в командах умножения и деления;
- EBP/BP – указатель базы при работе с данными в стековых структурах;
- ESP/SP – указатель (реверсивный счетчик) стека;
- ESI/SI – адресный регистр – индекс источника;
- EDI/DI – адресный регистр – индекс приемника. Вместе с SI используется в цепочечных инструкциях обработки массивов, хранит смещения (индексы) относительно базы (начала массива).
Сегментные регистры CS, SS, DS, ES, FS, GS используются для сегментной адресации. Регистры FS и GS появились в составе МП, начиная с i386.
Регистр-указатель команд EIP/IP предназначен для определения адреса следующей команды.
По назначению регистры различаются на:
· аккумулятор — используется для хранения промежуточных результатов арифметических и логических операций и инструкций ввода-вывода;
· флаговые — хранят признаки результатов арифметических и логических операций;
· общего назначения — хранят операнды арифметических и логических выражений, индексы и адреса;
· индексные — хранят индексы исходных и целевых элементов массива;
· указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стека);
· сегментные — хранят адреса и селекторы сегментов памяти;
· управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.
Параллельные вычисления — способ организации компьютерных вычислений , при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно). Термин охватывает совокупность вопросов параллелизма в программировании , а также создание эффективно действующих аппаратных реализаций . Теория параллельных вычислений составляет раздел прикладной теории алгоритмов .
Существуют различные способы реализации параллельных вычислений. Например, каждый вычислительный процесс может быть реализован в виде процесса операционной системы , либо же вычислительные процессы могут представлять собой набор потоков выполнения внутри одного процесса ОС. Параллельные программы могут физически исполняться либо последовательно на единственном процессоре — перемежая по очереди шаги выполнения каждого вычислительного процесса, либо параллельно — выделяя каждому вычислительному процессу один или несколько процессоров (находящихся рядом или распределённых в компьютерную сеть ).
Основная сложность при проектировании параллельных программ — обеспечить правильную последовательность взаимодействий между различными вычислительными процессами, а также координацию ресурсов, разделяемых между процессами.
Один из самых простых и наиболее распространенных способов повышения быстродействия процессоров — конвейеризация процесса вычислений. Большое преимущество конвейерных ЭВМ перед параллельными других типов — возможность использования пакетов программ, уже написанных для последовательных ЭВМ.
Под конвейерным режимом понимают такой вид обработки, при котором интервал времени, требуемый для выполнения процесса в функциональном узле (например, в АЛУ) микропроцессора, продолжительнее, чем интервалы, через которые данные могут вводиться в этот узел. Предполагается, что функциональный узел выполняет процесс в несколько этапов, т. е. когда первый этап завершается, результаты передаются на второй этап, на котором используются другие аппаратные средства. Разумеется, что устройство, используемое на первом этапе, оказывается свободным для начала новой обработки данных. Как известно, можно выделить четыре этапа обработки команды микропроцессора: выборка, декодирование, выполнение и запись результата. Иными словами, в ряде случаев, пока первая команда выполняется, вторая может декодироваться, а третья выбираться.
В любом процессоре машинная команда проходит ряд этапов обработки, например: выборку команды из оперативной памяти (ВК), вычисление абсолютного адреса операнда в оперативной памяти (ВА), выборку операнда из памяти (ВО), операцию в АЛУ.
В процессоре последовательной ЭВМ для осуществления этих функций используется единственное устройство, поэтому время выполнения команды равно:
Чс = ^ВК + ^ВА + ^ВО + *АЛУ
Для того чтобы уменьшить /к, можно для каждой функции ввести собственное оборудование. В таком процессоре любая команда последовательно проходит через все устройства, находясь на каждом этапе время А. Конвейерные процессоры применяются во всех без исключения старших моделях семейств ПЭВМ.
Конвейеризация — это методика выполнения вычислительных процессов, которая применяется в современных процессорных модулях для увеличения их производительности.
Читайте также: