Соотношение программ на ЯВУ и машинном языке Здесь ЯВУ можно рассматривать как язык ассемблера, т.е. имеется взаимно Компиляция идет между натипами операторов и знаков операций ЯВУ с однозначное соответствие Это традиционный подход. командами машинного Здесь идет ассемблирование, а не компилирование, во машинный язык языка. более После компилирования время которого удаляются комментарии и пробелы в исходной программе, высокого уровня, сокращая преобразуются разделители, ключевые слова и знаки операций в машинные коды, программа переводится на тем самым семантический имена – в адреса полейапамяти. Таким образом, многих привычных функций машинный язык, затем разрыв и привязка программы к ЭВМ происходит перед компиляторамежду здесь нет. ЯВУ Остальная интерпретируется машиной; машиной; выполнением программы; 1 2 К Промежуточный машинный язык Программа на ЯВУ И 3 Здесь машинный язык является ЯВУ и идет процесс интерпретации программы на компьютере 4 Машинный язык низкого уровня К Машинный А язык "Один к одному" с ЯВУ И И И ЭВМ Основные принципы RISC-архитектуры • • • • каждая команда независимо от ее типа выполняется за один машинный цикл, длительность которого должна быть максимально короткой; все команды должны иметь одинаковую длину и использовать минимум адресных форматов, что резко упрощает логику центрального управления процессором; обращение к памяти происходит только при выполнении операций записи и чтения, вся обработка данных осуществляется исключительно в регистровой структуре процессора; система команд должна обеспечивать поддержку языка высокого уровня. (Имеется в виду подбор системы команд, наиболее эффективной для различных языков программирования.) Отличительные особенности CISC- и RISC-архитектур CISC-архитектура Многобайтовые команды Малое количество регистров Сложные команды Одна или менее команд за один цикл процессора Традиционно одно исполнительное устройство 1. 2. 3. 4. 5. RISC-архитектура Однобайтовые команды Большое количество регистров Простые команды Несколько команд за один процессора Несколько исполнительных устройств Достоинства RISC-архитектуры: Компактность процессора, как следствие отсутствие проблем с охлаждением; Высокая скорость арифметических вычислений; Наличие механизма динамического прогнозирования ветвлений; Большое количество оперативных регистров; Многоуровневая встроенная кэш-память; Недостаток – проблема в обновлении регистров процессора, что привело к появлению двух методов обновления: аппаратный и программный. цикл Задача выбора оптимального набора операций Требует из набора стандартных задач, для выполнения которых предназначен компьютер, выбрать пакет контрольных программ и построить для них профиль их выполнения, либо использовать метод статических или динамических измерений параметров самих программ. Определяется доля общего времени центрального процессора, затрачиваемого на выполнение каждого оператора Подсчет в программе количества вхождений того или иного оператора (операции) Основа для оптимизации процессорной архитектуры Пример экспериментального измерения количественной оценки операций Результаты измерений в статике, проведенные для программкомпиляторов: операторы присваивания – 48 % условные операторы – 15; циклы – 16; операторы вызова-возврата – 18; прочие операторы – 3 % Измерение процедур показали использование следующих типов операндов: константы – 33 %; скаляры – 42; массивы (структуры) – 20 и прочие – 5 % Статистика среди команд управления потоком данных следующая: команды условного перехода занимают от 66 до 78 %, команды безусловного перехода – от 12 до 18 %, частота переходов на выполнение составляет от 10 до 16 %. Вывод: операторы присваивания занимают основную часть в программахкомпиляторах; операнды типа константа и локальные скаляры составляют основную часть операндов в процедурах, к которым происходит обращение в процессе выполнения программы. Результат анализа типов операндов Константы – не меняются во время выполнения программы и имеют, как правило, небольшие значения. Скаляры – обращение к ним происходит, как правило, явно по их имени. Их обычно немного, и они описываются в процедурах как локальные. Обращение к элементам массивов и структур происходит посредством индексов и указателей, т. е. через косвенную адресацию. Этих элементов, как правило, много. Для осуществления доступа к операнду необходимо вначале определить физический адрес ячейки, где хранится операнд, а затем осуществить доступ к операнду. Если операнд – константа, ее можно указать в команде. Доступ к ней может быть осуществлен немедленно после обращения. Регистровые блоки адресуются короткими номерами регистров, которые обычно указываются в команде, что упрощает их декодирование. Важно распределение скалярных переменных по регистрам, так как существенно влияет на скорость обработки. Архитектура системы команд Аккумуляторная архитектура Регистровая архитектура Стековая архитектура ROSC (Removed Operand Set Computer) Стековая организация регистровой памяти СISC (Complex Instruction Set Computer) RISC (Reduced Instruction Set Computer) VLIW (Very Long Instruction Word) Компьютеры с регистровыми окнами Регистровые окна Программа Подпрограмма №1 Подпрограмма №3 Подпрограмма №4 Перекрывающиеся блоки регистров Накладные расходы на выполнение команд сохранения/восстановления данных при вызове и возврате из процедур на стандартных процессорах доходит до 50 % всех обращений к памяти. Для уменьшения время передачи данных между процедурами-родителями и процедурами-дочерьми (в случае, когда глубина их вложенности больше единицы), можно создать блок регистров, предоставив и родителям, и дочерям доступ к некоторым из них. VLIW-архитектура Эта гипотетическая инструкция имеет восемь операционных полей, каждое из которых выполняет традиционную трехоперандную RISC-подобную инструкцию типа <регистр приемника> = <регистр источника 1> - <операция> - <регистр источника 2> (типа классической команды MOV AX BX) и может непосредственно управлять специфическим функциональным блоком при минимальном декодировании. Процессор VLIW, имеющий схему, представленную выше, может выполнять в предельном случае восемь операций за один такт и работать при меньшей тактовой частоте намного более эффективнее существующих суперскалярных чипов. Добавочные функциональные блоки могут повысить производительность (за счет уменьшения конфликтов при распределении ресурсов), не слишком усложняя чип. Однако такое расширение ограничивается физическими возможностями: количеством портов чтения/записи, необходимых для обеспечения одновременного доступа функциональных блоков к файлу регистров, и взаимосвязей, число которых геометрически растет при увеличении количества функциональных блоков. К тому же компилятор должен распараллелить программу до необходимого уровня, чтобы обеспечить загрузку каждому блоку — это самый главный момент, ограничивающий применимость данной архитектуры. Структура команд 1А КОП А1 2А КОП А1 А2 3А КОП А1 А2 БА КОП БДС КОП Адреса Теги А3 Дескрипторы Стековая организация регистровой памяти процессора В память P1 АЛУ P2 P3 Pn Основные операция и спецкоманды • • • • Операции с регистрами: Движение вниз: (P1) P2, (P2) P3, ..., а P1 заполняется данными из главной памяти Движение вверх: (Pn) Pn-1, (Pn-1) Pn-2, а Pn заполняется нулями Регистры P1 и P2 связаны с АЛУ, образуют два операнда для выполнения операции. Результат операции записывается в P1, т.е. (P1) (P2)(P1) При выполнении любой операции над двумя регистрами осуществляется продвижение операндов вверх, не затрагивая P1, т. е. (P3) P2, (P4) P3 и т. д Спецкоманды: • дублирование (P1) P2, (P2) P3, ... и т. д., а (P1) остается при этом неизменным; • реверсирование (P1) P2, а (P2) P1, что удобно для выполнения некоторых операций. Программа решения математической задачи для одноадресного компьютера Номер команды 1 2 Команда C b 3 P 4 a 5 6 7 8 9 10 Комментарии 1 a P 2 P1 – рабочая ячейка P2 – рабочая ячейка b b P : P 2 1 a 2 b2 bc a 2 b2 X bc Программа решения математической задачи на ЭВМ со стековой организацией памяти № п/п Команда P1 P2 P3 P4 1 2 2 3 4 5 1 Вызов b b 2 Дублирование b B 3 Вызов c c B 4 Сложение b+c B 5 Реверсирование b b+c 6 Дублирование b B 7 Умножение b2 b+c 8 Вызов a a b2 b+c 9 Дублирование a A b2 10 Умножение a2 b2 b+c 11 Сложение a2+b2 b+c 12 Деление a 2 b2 bc B b+c b+c a 2 b2 X bc Основные типы команд Примеры Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т. д. Операции загрузки/записи Пересылки данных потоком Безусловные и условные переходы, вызовы процедур и Управление возвраты команд Системные вызовы, команды управления виртуальной Системные операции памятью и т. д. Операции с плавающей Операции сложения, вычитания, умножения и деления над вещественными числами точкой Десятичное сложение, умножение, преобразование форматов Десятичные операции и т. д. Операции над строками Пересылки, сравнения и поиск строк Тип операции Арифметические и логические Методы адресации Метод адресации Пример команды Прямая или абсолютная Косвенная Add R1, (1000) Add R1, @(R3) Автоинкрементная Add R1, (R2)+ Автодекрементная Add R1, (R2)– Базовая индексная Add со смещением и R1, масштабированием 100(R2)(R3) Смысл команды Использование команды Полезна для обращения к статическим данным R1 = R1+M(M(R3)) Если R3 – адрес указателя р, то выбирается значение по этому указателю R1 = R1+M(R2) Полезна для прохода в цикле по R2 = R2+d массиву с шагом: R2 – начало массива. В каждом цикле R2 получает приращение d R2 = R2–d Аналогична предыдущей. Обе R1 = R1+M(R2) могут использоваться для реализации стека R1=R1+M(100)+R2 Для индексации массивов +R3*d R1=R1+M(1000) Методы адресации Метод адресации Пример команды Смысл команды Использование команды Регистровая Add R4, R3 R4 = R4+R3 Непосредственная или литерная Базовая со смещением Косвенная регистровая Индексная Add R4, #3 R4 = R4+3 Add R4, 100(R1) Add R4, (R1) Add R3, (R1+R2) R4= R4+M(100+R1) Для обращения к локальным переменным R4 = R4+M(R1) Для обращения по указателю к вычисленному адресу R3 = R3+M(R1+R2) Полезна при работе с массивами: R1 – база, R3 – индекс Для записи требуемого значения в регистр Для задания констант Способы проектирования системы команд 1. Сокращение набора команд, присущих СК выбранного микропроцессора. Все частоты встреч операций для задания их в СК всякий раз можно определить из соотношений "стоимость затрат – сложность реализации – получаемый выигрыш". 2. Второй путь проектирования СК состоит в расширении имеющейся системы команд. Один из способов такого расширения – создание макрокоманд, второй – используя имеющийся синтаксис языка СК, дополнить его новыми командами с последующим переассемблированием, через расширение функций ассемблера. Оба эти способа принципиально одинаковы, но отличаются в тактике реализации аппарата расширения. Способы оптимизации системы команд 1. Выявление частоты повторений сочетаний двух или более команд, следующих друг за другом в некоторых типовых задачах для данного компьютера, с последующей заменой их одной командой, выполняющей те же функции. 2. Исследование часто генерируемых компилятором последовательностей команд с последующим редактированием и ликвидацией из них избыточных кодов. 3. Оптимизацию можно проводить и в пределах отдельной команды, исследуя ее информационную емкость. Для этого можно применить аппарат теории информации, в частности для оценки количества переданной информации – энтропию источника . Развитие микропроцессорных архитектур на основе оптимизации системы команд январь 1997 MMX MultiMedia eXtensions Pentium MMX K6 (Little Foot) AMD 6х86MX Cyrix 57 новых команд, предназначенных для обработки звуковых и видеосигналов MMX-расширение микропроцессора Pentium предназначено для поддержки приложений, ориентированных на работу с большими массивами данных целого типа, над которыми выполняются одинаковые операции. Основа аппаратной компоненты – 8 MMX регистров, каждый размером в 64 бит = 8 байт. MMX работает только с целыми числами; поддерживаются данные размером в 1, 2, 4 или 8 байт. сентябрь 1999 SSE Streaming SIMD Extensions Pentium III (ядро Katmai) Athlon XP (Palomino) 70 новых команд SSE оперирует с данными вещественного типа, которые используются в геометрических расчётах, то есть, приложениях трёхмерной графики, компьютерных играх, редакторах типа 3DStudioMax, и многих других.. При внедрении SSE процессор получил в дополнение к стандартным регистрам архитектуры x87 (математический сопроцессор) 8 новых больших регистров размером по 128 бит, в каждом из которых может содержаться 4 32-битных вещественных числа. сентябрь 1999 Продолжение MMX и SSE (симбиоз) SSE2 Streaming SIMD Extensions 2 Pentium 4 (начиная с Willamette) Athlon 64 (начиная с Clawhammer) 144 команды, ориентированные на работу с потоковыми данными Команды SSE2 оперирует со 128-битными регистрами, но уже не только с четверками чисел одинарной точности, но и с любыми другими типами данных, которые умещаются в 128 бит. В SSE2 регистры по сравнению с MMX удвоились, то есть, там стало помещаться не, например, 8 чисел, а 16. Поскольку скорость выполнения инструкций не изменилась, при оптимизации под SSE2 программа запросто получала двукратный прирост производительности. февраль 2004 SSE3 Streaming SIMD Extensions 3 Prescott New Instruction Pentium 4 (начиная с Prescott ) Athlon 64 (начиная с Venice) Появилась возможность горизонтального выполнения операций. Вертикальное сложение Горизонтальное сложение В SSE3 появились удобные команды горизонтального последовательного сложения и вычитания операндов, а также другие разнообразные вспомогательные команды, облегчающие работу с данными. май 1998 3DNow AMD серия К7 21 новая команда и возможность оперировать 32-битными вещественными типами в стандартных MMX-регистрах. Добавлены специальные инструкции, оптимизирующие переключение в режим MMX/3DNow! . Технология 3DNow! расширяла возможности технологии MMX, не требуя введения новых режимов работы процессора и новых регистров Важное отличие расширения 3DNow! Можно складывать между собой содержимое одного регистра, то есть, так же как и в SSE3, производить не только вертикальные операции, но и горизонтальные. июнь 1999 Enhanced 3DNow! AMD K6-2 (Chomper) Набор команд расширился на 24 инструкции июнь 2002 3DNow! Professional AMD (Thoroughbred) Отсутствовал оптимизирующий компилятор, к тому же разработчики программ не торопились оптимизировать свои программы под эти инструкции. май 2005 Архитектура EM64T Технология 64-разрядного расширения Расширение включает новые режимы работы и новые расширенные инструкции, обеспечивающие увеличение функциональных возможностей процессоров. Процессор с реализацией технологии 64-разрядного расширения полностью поддерживает все существующие особенности IA-32. В дополнение к ним вводится новый рабочий режим, получивший наименование IA-32e. Режим включает два подрежима. Первый – режим совместимости, доступный 64-разрядной операционной системе, создан для эксплуатации существующего наследия не модифицированного 32-разрядного программного обеспечения. Второй, названный 64-разрядным режимом, доступен 64-разрядной операционной системе, обеспечивающий работу приложений, написанных специально под 64-битную адресацию пространства памяти. Основные усовершенствования Intel • • • • • Intel Wide Dynamic Execution Intel Advanced Digital Media Boost Intel Advanced Smart Cache Intel Smart Memory Access Intel Intelligent Power Capability Принцип управления операциями на основе «жесткой» логики ФИ Формирователь И И Л И операция n такт i И операция m такт j переполнение Горизонтальное микропрограммирование ФИ1 ФИ2 ФИ3 ФИ4 МК1 1 1 0 1 МК1 0 1 1 0 МК3 1 1 0 1 … МКN 0 1 0 0 … ФИМ 1 0 0 1 Вертикальное микропрограммирование МК1 МК2 МК3 МК4 … МКN ФИ1 0000 ФИ2 0001 ФИ3 0010 0010 0000 1100 0011 1111 1010 1100 1011 1100 1100 1111 ФИ4 0011 1101 ФИ16 1111 • VLIW • Спецкоманды компьютеров со стековой организацией памяти Архитектура системы команд Аккумуляторная архитектура Регистровая архитектура СISC (Complex Instruction Set Computer) Стековая архитектура ROSC (Removed Operand Set Computer) RISC (Reduced Instruction Set Computer) Суперскалярные процессоры (динамическое планирование, неупорядоченная модель обработки) VLIW (Very Long Instruction Word) CMP (Chip Multiprocessor) SMT (Simultaneous Multithreading) VLIW-архитектура Эта гипотетическая инструкция имеет восемь операционных полей, каждое из которых выполняет традиционную трехоперандную RISC-подобную инструкцию типа <регистр приемника> = <регистр источника 1> - <операция> - <регистр источника 2> (типа классической команды MOV AX BX) и может непосредственно управлять специфическим функциональным блоком при минимальном декодировании. Процессор VLIW, имеющий схему, представленную выше, может выполнять в предельном случае восемь операций за один такт и работать при меньшей тактовой частоте намного более эффективнее существующих суперскалярных чипов. Добавочные функциональные блоки могут повысить производительность (за счет уменьшения конфликтов при распределении ресурсов), не слишком усложняя чип. Однако такое расширение ограничивается физическими возможностями: количеством портов чтения/записи, необходимых для обеспечения одновременного доступа функциональных блоков к файлу регистров, и взаимосвязей, число которых геометрически растет при увеличении количества функциональных блоков. К тому же компилятор должен распараллелить программу до необходимого уровня, чтобы обеспечить загрузку каждому блоку — это самый главный момент, ограничивающий применимость данной архитектуры. май 1998 Enhanced 3DNow! AMD K6-2 (Chomper) Набор команд расширился на 24 инструкции июнь 2002 3DNow! Professional AMD (Thoroughbred) Отсутствовал оптимизирующий компилятор, к тому же разработчики программ не торопились оптимизировать свои программы под эти инструкции. июнь 1999 3DNow AMD серия К7 21 новая команда и возможность оперировать 32-битными вещественными типами в стандартных MMX-регистрах. Добавлены специальные инструкции, оптимизирующие переключение в режим MMX/3DNow! . Технология 3DNow! расширяла возможности технологии MMX, не требуя введения новых режимов работы процессора и новых регистров Важное отличие расширения 3DNow! Можно складывать между собой содержимое одного регистра, то есть, так же как и в SSE3, производить не только вертикальные операции, но и горизонтальные.