В.А. Фисун - Прикладное программирование в задачах математической физики. Архитектурные принципы построения ЭВМ (doc) (1127760), страница 10
Текст из файла (страница 10)
Форматы команд ведут историю от первобытных ЭВМ, когда все ко-манды имели одинаковую длину и формат. Наиболее удобной для программирования формой описания арифметических вычислений являются трех-адресная команда, формата (ЭВМ М-20, БЭСМ-4, Весна): <КОП><А1><А2><А3>, при выполнении которой над операндами А1 и А2 производится вычисление функции, определенной <КОП>ом, а результат фиксируется в А3. С увеличением размеров ОЗУ размещение трех адресов, апеллирующих непосредственно к оперативной памяти, в формате команды стало затруднительным и в командах стало меньше операндов. Так, в двух-адресных командах ЭВМ оперирует парой операндов - операндом назначения dest (destination) и операндом-источником src (source). Базовая схема выполнения команды: dest = F(dest, src), где F - некоторая функция от двух переменных. Это означает, что при выполнении команды процессор извлекает из указанных в команде адресов (регистр, память, константа в самой инструкции) пару двоичных аргументов и результат действия над ними записывает на место одного из них (dest). Для выполнения той же функции над следующей парой чисел требуется повторное исполнение команды, но уже с другой парой операндов. Такой принцип исполнения используется для архитектуры процессоров IА-32.
Если зафиксировать в качестве операнда назначения dest сумматор, то его содержимое можно брать по умолчанию и формат команды станет одноадресный, как это было реализовано в БЭСМ-6. Если аргументы операции занести в стек, который используется также в качестве операнда назначения, то задавать порядок вычислений можно безадресными командами. Итак, команды ЭВМ бывают трех, двух, одно адресными, а также – четырех адресными (четвертый задает следующую команду для исполнения), нуль и полуторно адресные. Кроме набора команд с фиксированной постоянной длиной, имеются реализации архитектур микропроцессоров с командами переменной длины. Так, команды процессоров IА32 могут занимать от одного до четырех байтов, формат, длина команды фиксируется в известных полях первого байта команды. Соответственно, программа для ЭВМ данной архитектуры с искаженными или утраченными значениями первых байтов текста превращается в китайскую грамоту.
Набор арифметических команд в современных процессорах дополняется векторными командами, которые ведут начало от процессоров Pentium, в них было введено расширение – группа команд MMX, направленное на ускорение обработки потоков и массивов данных. Это расширение стало реализацией принципа SIMD (Simple Instruction - Multiple Data, одна инструкция на множество данных). Здесь вводятся новые упакованные форматы данных: в один регистр MMX можно помещать не только один операнд (64-битное число), но и пару 32-битных, четверку 16-битных или восьмерку 8-битных чисел. Одна инструкция MMX выполняет однотипные действия сразу над всеми числами, упакованными в регистры MMX, заданные адресной частью данной команды.
Все множество архитектур процессоров по типу системы команд делятся на две глобальные категории - RISC и CISC, к которым добавляются комбинированные схемы. Традиционные процессоры универсальных ЭВМ называются CISC (Complex (Complicated) Instruction Set Computer) - компьютерами с полной системой команд (семейство Intel ЭВМ от серии ix86 до Pentium и Pentium Pro, архитектура IA32). Помимо арифметических и логических операций в систему команд (аппаратно реализуемые функции) включались сложные операции, такие, как извлечения корня; реализуются сложные схемы формирования исполнительных адресов (в i486 доступно до 12 способов). Расширение спектра операций облегчает программирование и отладку программ, однако увеличивает трудоемкость разработки процессоров. Так ошибка в АЛУ одного из процессоров фирмы Intel была выявлена пользователями только после выхода процессора на рынок. Время выполнения даже таких операций, как умножение и деление чисел с плавающей запятой, варьируется в зависимости от значений аргументов операций, что ограничивает возможности аппаратного планирования совмещенного выполнения команд. CISC набор команд нельзя было разместить целиком на одном кристалле – чипе первых СБИС.
Исполнение процессоров на кристалле потребовало ревизии системы команд, что привело к реализации компьютеров с сокращенным набором команд - RISC (Reduced Inctruction Set Computing) архитектуры. Основными чертами микропроцессоров данной архитектуры принято считать следующие: выполнение одной команды за цикл; использование простых видов адресации; трехадресные арифметические команды над операндами в регистрах; фиксированный формат команд. Традиционное число команд здесь - 128. Выполнение команд, не входящих в этот состав, производится программно, для этого в архитектуре предусматривается развитый механизм реализации подпрограмм: реализация запоминания-восстановления регистров, стеки и т.д.
Упрощение оборудования, конвейеризация выполнения команд, позволили RISC процессорам резко повысить производительность. Сокращенный набор команд означает также ряд других упрощений оборудования для достижения высокой производительности. Команды в архитектуре RISC имеют фиксированную и небольшую длину, они не нуждаются в интерпретации. Использование трехадресных команд упрощает их дешифрацию и дает возможность сохранять большее число переменных в регистрах без перезагрузки. По мере развития архитектуры RISC она обзаводилась все новыми возможностями наращивания производительности. Ключевыми из них являются суперскалярная или многоконвейерная обработка, внеочередное выполнение команд, появление смешанных или групповых команд для выполнения часто повторяющихся последовательностей.
Массовому переходу на RISC процессоры препятствует большой объем накопленного фонда алгоритмов и программ в кодах самой массовой ЭВМ, в кодах IA32. Интеграция обсуждаемых архитектур была приведена в процессоре Pentium Pro. Этот процессор – реализация CISC-среды на RISC оборудовании ядра. Поступающие в процессор на исполнение объектные коды, написанные в системе команд IA32, аппаратно перекодируются на входе во внутреннее представление, в коды команд внутреннего RISC представления. Таким образом достигается совместимость накопленного фонда алгоритмов и программ с современными технологическими новациями.
5.2. Суперскалярные микропроцессоры
Конвейеризация (pipelining) предполагает разделение выполнения каждой инструкции (команды) на несколько этапов, причем каждый этап выполняется на своей ступени конвейера процессора. При выполнении инструкция продвигается по конвейеру по мере освобождения последующих ступеней. Таким образом, на конвейере одновременно может обрабатываться несколько последовательных инструкций и производительность процессора можно оценивать темпом выхода выполненных инструкций со всех его конвейеров. Конвейеры процессоров имеют большее число ступеней, что позволяет повысить производительность микропроцессоров, однако при этом повышается вероятность роста конвейерных конфликтов.
В типовой конвейерной схеме работы обычного “скалярного” УУ первые два этапа выполняют предварительную, подготовительную работу исполнения команды. Затем функциональная часть команды - третий этап - реализуется на одном из операционных блоков (опять модельная схема): на АЛУ с плавающей точкой, на целочисленном АЛУ и в блоке анализа условных операторов. Можно заметить, что при работе третьего этапа загружен всегда только один блок из трех. Микропроцессоры с единственным конвейером для выборки и декодирования команд называются “скалярными”, к этому типу относятся 486 процессоры фирмы Intel.
Другое направление повышения производительности микропроцессоров находится в области реализации параллелизма на уровне команд (instruction level parallelism, ILP), в архитектуре “суперскалярных” (superscalar) микропроцессорах. На уплотнении загрузки функциональных блоков путем дублирования конвейера и выполнении в функциональном блоке сразу двух команд одновременно и основана суперскалярная версия конвейера, реализованная в процессорах Pentium. Суперскалярный процессор имеет более одного (Pentium - два) конвейера, способных обрабатывать инструкции параллельно. Эти процессоры содержат два пятиэтапных конвейера: главный конвейер, u-конвейер может выполнять любую команду, а второй, дополнительный v-конвейер- только некоторые. Конвейерные блоки первого этапа выбирают сразу две команды, причем они ассиметричны, право изменять счетчик выбираемых команд имеет только один из этих блоков. Общий блок выборки команд компонует из потока команд по-парно совместимые команды и передает их на исполнение в два конвейера. Команды всегда выполняются по заданному порядку, несовместимые команды выполняются последовательно на главном конвейере. Реализация процессоров с 3-4 конвейерами признана нецелесообразной, суперскалярная архитектура современных микропроцессоров опирается на более общую схему.
В такой схеме мультиплицируется оборудование подготовительных этапов конвейера команд для выборки команд и их декодирования. Коэффициент дублирования подготовительных этапов называют иногда степенью суперскаляра. Состав функциональных блоков также может расширяться. Так, у Pentium III блоки целочисленной арифметики и арифметики с плавающей запятой дублированы, а у Рentium IV размножены с коэффициентом три. После декодирования команд и преобразования их во внутреннее представление диспетчер организует выполнение вычислительных работ с учетом возможного параллелизма на уровне команд и обеспечения максимальной загрузки функциональных устройств. Возможные конвейерные конфликты разрешаются способами, описанными выше. Переименование регистров (register renaming) позволяет обойти архитектурное ограничение на возможность параллельного исполнения инструкций. Продвижение данных (data forwarding) подразумевает начало исполнения инструкции до готовности всех операндов.
При этом выполняются все возможные действия и декодированная инструкция с одним операндом помещается в исполнительное устройство, где дожидается готовности второго операнда. Предсказание переходов (branch prediction) позволяет продолжать выборку и декодирование потока инструкций после выборки инструкции ветвления (условного перехода), не дожидаясь проверки самого условия.
Суперскалярная схема выполнения программы реализует алгоритмы внеочередного и спекулятивного порядка выполнения команд. При этом возможно совмещенное по времени выполнение независимых команд. Однако эта схема не позволяет учитывать параллелизм на уровне команд, который выявляется на уровне трансляции программ.
5.3. Сверхдлинные команды
Идеи VLIW архитектуры ЭВМ просты: для достижения большей производительности логично прибегнуть к статическому распараллеливанию вычислений и заставить один физический процессор параллельно обрабатывать несколько инструкций. Считается, что начало работ по архитектуре ЭВМ со сверхдлинными командами VLIW (Very Long Instruction Word) положили в начале 80-х Алан Чарльзворт (Alan Charlesworth), Джош Фишер (Josh Fisher) и Боб Рау (Bob Rau). Такая архитектура подразумевает применение специальных компиляторов, способных обнаруживать в тексте программы независимые инструкции и формировать из них длинные машинные слова инструкций. В архитектурах VLIW - машин команды могут иметь широкий формат (длину) и команда может содержать несколько содержательных инструкций, выполнение которых детально регламентируется в терминах тактов работы АЛУ (допускается параллельное выполнение нескольких инструкций). В таких архитектурах имеется возможность программировать вычислительные алгоритмы (включая векторные) с максимальной производительностью для данной аппаратуры. В них вся работа по оптимальному программированию возлагается на системы программирования (или ручное программирование). Главные особенности VLIW архитектуры:
- существование одного центрального управляющего устройства (УУ), обрабатывающее за один такт одну длинную команду;
- наличие нескольких функциональных устройств (ФУ);
- разделение длинной команды на поля, каждое из которых содержит команду управления некоторым функциональным устройством или команду обращения к памяти;
- фиксированная длина в тактах времени исполнения каждой операции, причем операции ФУ могут быть конвейеризованными;
- ОЗУ имеет большой коэффициент расслоения памяти, банки памяти идентифицируются при программировании;
- сложность ручного программирования в силу большого числа комбинаторных задач.
Достоинством данной архитектуры является возможность статически задавать работу всем ФУ на каждом такте. Однако упрощения в архитектуре управления приводят к значительному возрастанию сложности задачи планирования выдачи команд, так как программными средствами должна быть обеспечена точная синхронизация считывания и записи данных. При этом необходимо так планировать параллельное выполнение операций машины, чтобы выполнялись определенные ограничения на число одновременно считываний и записей в наборы регистров, использование ФУ и т.д. Размер командного слова в машинах данной архитектуры - FPS (AP-120B) - 64 бита, Multilow Tract – 1024 бита.
В 1997 г. на проходившем совещании - Microprocessor Forum - появились первые подробности относительно разрабатываемой архитектуры и тогда же появился термин EPIC (Explicitly Parallel Instruction Computing). Набор инструкций для новой архитектуры получил название IA64. Компании Intel потребовалось еще 4 года, прежде чем она смогла представить на рынке готовый образец процессора. Процессоры IA64 с архитектурой EPIC, патент США 96/24895, имеют 128-битовую внутреннею шину, но в отличие от VLIW-программ объектный код IA64 не зависит от числа специализированных конвейеров в конкретном процессоре. Merced, одно из первых воплощений новой архитектуры, содержит два блока по 128 регистров для хранения целых и плавающих чисел, независимые кэши для инструкций и данных, специализированные конвейерные устройства (шесть для процессоров "нижнего уровня"). В микропроцессоре реализована схема динамического распределения регистров, условной (спекулятивной) загрузки данных из памяти при обработке ветвлений. Команда – связка (bundie) - длиной 128 бит здесь имеет три слота, задающие три операции и поле маски, уточняющее порядок выполнения этих операций. В мае 2001 г. появился первый Itanium, а набор инструкций IA64 для него из маркетинговых соображений переименовали в IPF (Itanium Processor Family).
Уровень вычислительной мощности новых процессоров весьма высок и позволяет успешно конкурировать с RISC-системами. Недавно суперкомпьютер "Колумбия" из 10240 процессоров Itanium-2 в списке ТОР500 занимал второе место, а его производительность достигла 52 ТФлоп в штатном режиме или более 60 ТФлоп в пиковом. Распространению архитектуры EPIC в немалой степени способствует и продолжающийся рост количества оптимизированных для нее приложений. Системы на базе процессоров Itanium могут работать под управлением различных ОС - Windows, Linux, HP-UX, Solaris и др.
Отличием архитектуры EPIC по сравнение с современными суперскалярными архитектурами, с одной стороны, и VLIW архитектуры, с другой, является попытка совместить достоинств обеих архитектур при решении задач распараллеливания программы на уровне инструкций.
Данная архитектура обеспечивает:
- статическую проверку зависимостей между командами ЭВМ для выявления тех из них, которые можно сгруппировать для параллельного выполнения, поиск микропроцессов;
- динамическое распределение вычислительных работ между функциональными блоками процессора.