Архитектура набора инструкций (ISA) — это часть процессора, видимая программисту или автору компилятора. ISA служит границей между программным обеспечением и оборудованием. Мы кратко опишем наборы команд, используемые во многих современных микропроцессорах. ISA процессора можно описать с помощью 5 категорий:
Хранение операндов в ЦП Где хранятся операнды, кроме памяти? Количество явно именованных операндов Сколько операндов именовано в типичной инструкции. Расположение операнда Может ли любой операнд инструкции АЛУ быть расположен в памяти? Или все операнды должны храниться внутри ЦП? Операции Какие операции предусмотрены в ISA. Тип и размер операндов Каков тип и размер каждого операнда и как он указывается?
Из всего вышеперечисленного наиболее отличительным фактором является первый.
Не все процессоры можно четко отнести к одной из вышеуказанных категорий. У i8086 есть много инструкций, которые используют неявные операнды, хотя он имеет общий набор регистров. Еще одним примером является i8051, у него есть 4 банка GPR, но большинство инструкций должны иметь регистр A в качестве одного из своих операндов.
Каковы преимущества и недостатки каждого из этих подходов?
Преимущества: простая модель оценки выражений (обратная полировка). Краткая инструкция.
Недостатки: доступ к стеку невозможен. Это затрудняет создание эффективного кода. К самому стеку обращаются при каждой операции, и он становится узким местом.
Преимущества: Краткие инструкции.
Недостатки. Аккумулятор — это только временное хранилище, поэтому трафик памяти при таком подходе самый высокий.
Преимущества: упрощает генерацию кода. Данные могут храниться в течение длительного времени в регистрах.
Недостатки: все операнды должны быть названы, что приводит к более длинным инструкциям.
Раньше ЦП относились к первым двум типам, но за последние 15 лет все ЦП были процессорами GPR. Две основные причины заключаются в том, что регистры быстрее, чем память, и чем больше данных может храниться внутри ЦП, тем быстрее будет работать программа. Другая причина заключается в том, что компилятору проще использовать регистры.
Как мы упоминали ранее, большинство современных процессоров относятся к типу GPR (регистр общего назначения). Несколько примеров таких процессоров: IBM 360, DEC VAX, Intel 80x86 и Motorola 68xxx. Но хотя эти ЦП были явно лучше, чем предыдущие ЦП на основе стека и аккумулятора, им все еще не хватало нескольких областей:
Таким образом, в начале 80-х была представлена идея RISC. Проект SPARC был начат в Беркли, а проект MIPS — в Стэнфорде. RISC расшифровывается как «Компьютер с сокращенным набором инструкций». ISA состоит из инструкций одинакового размера, обычно 32 бита. Таким образом, они могут быть предварительно загружены и успешно конвейеризированы. Все инструкции ALU имеют 3 операнда, которые являются только регистрами. Доступ к памяти осуществляется только через явные инструкции LOAD/STORE.
Таким образом, C = A + B будет собран как:
Хотя для этого требуется 4 инструкции, мы можем повторно использовать значения в регистрах.
Количество регистров в RISC обычно составляет 32 или более. Первый RISC-процессор MIPS 2000 имеет 32 GPR по сравнению с 16 в архитектуре 68xxx и 8 в архитектуре 80x86. Единственным недостатком RISC является размер кода. Обычно требуется больше инструкций, а короткие инструкции (POP, PUSH) — пустая трата времени.
Почему же до сих пор разрабатываются процессоры CISC? Почему Intel тратит время и деньги на производство Pentium II и Pentium III?
Ответ прост, обратная совместимость. IBM-совместимый ПК является самым распространенным компьютером в мире. Intel требовался ЦП, который мог бы запускать все приложения, находящиеся в руках более 100 миллионов пользователей. С другой стороны, Motorola, создавшая серию 68xxx, которая использовалась в Macintosh, совершила переход и вместе с IBM и Apple создала Power PC (PPC) с RISC-процессором, который устанавливается в новых Power Mac. На данный момент Intel и производители ПК зарабатывают больше денег, но с учетом того, что Microsoft также играет в области RISC (Windows NT работает на платформе Compaq Alpha), а с обещаниями Java будущее CISC вообще не ясно.
Важный урок, который можно извлечь из этого, заключается в том, что превосходные технологии являются важным фактором в компьютерной индустрии, но также важны маркетинг и цена (если не больше).
Когда декодер инструкций обнаруживает инструкцию ветвления в конце фрагмента, он обновляет ПК, выбирая BTA или следующую инструкцию.
Секция выполнения программы микроконтроллера содержит регистр инструкций, декодер инструкций, а также логику синхронизации и управления. 14-битные инструкции, хранящиеся в памяти программ, копируются в регистр инструкций для декодирования; каждая инструкция содержит как код операции, так и операнд. Логика декодера инструкций преобразует биты кода операции в настройки для всех внутренних линий управления. Операнд предоставляет литерал, адрес файлового регистра или адрес программы, который будет использоваться инструкцией.
Если, например, используется инструкция MOVLW (переместить литерал в W), линии управления будут настроены на передачу литерального операнда в W через литеральную шину данных в мультиплексор и АЛУ. Если указана инструкция MOVWF, управляющие линии будут настроены на копирование содержимого W в указанный файловый регистр через внутреннюю шину данных. Операндом будет требуемый адрес файлового регистра (от 00 до 4F). Если мы посмотрим на коды инструкций «перемещения», приведенные в наборе инструкций, мы увидим разницу в структуре кода для трех инструкций перемещения:
Все процессоры выполняют свои требуемые операции, выполняя последовательности инструкций. Каждая инструкция определяет простую операцию, например, простую операцию АЛУ, доступ к данным в системе памяти, операцию ветвления программы и т. д.
Для процессора он принимает инструкции в виде двоичного кода и декодирует их на внутреннем оборудовании (декодере инструкций), а затем передает информацию о декодированной инструкции на этап выполнения. В простых конструкциях процессоров требуются как минимум следующие типы инструкций:
Обработка данных (арифметические операции, такие как «сложение»/«вычитание», логические операции, такие как «И»/«ИЛИ»)
Инструкции управления потоком программы (переходы, условные переходы, вызовы функций)
Кроме того, для процессоров ARM ® Cortex ® -M0 и Cortex-M0+ также есть инструкции для
Набор инструкций, поддерживаемый процессорами ARM Cortex-M, называется Thumb®, а процессоры Cortex-M0 и Cortex-M0+ поддерживают только подмножество определенных инструкций (56 из них). Большинство этих инструкций имеют размер 16 бит, и только шесть из них 32-битные.
В таблице 5.1 показаны базовые 16-битные инструкции Thumb, поддерживаемые процессорами Cortex-M0/M0+.
Таблица 5.1. 16-битные инструкции Thumb®, поддерживаемые процессорами Cortex®-M0 и Cortex-M0+
Процессоры Cortex-M0/M0+ также поддерживают ряд 32-битных инструкций Thumb из технологии Thumb-2 ( Таблица 5.2 ).
Таблица 5.2. 32-битные инструкции Thumb®, поддерживаемые процессорами Cortex®-M0 и Cortex-M0+
32-битные инструкции Thumb, поддерживаемые процессорами Cortex-M0/M0+ |
---|
BL | DSB | DMB | ISB | MRS | MSR | tr>
таблица>
Инструкции по доступу к специальным регистрам MRS и MSR
Инструкции по синхронизации памяти ISB, DSB и DMB
Инструкция BL (BL поддерживалась в традиционном наборе инструкций Thumb, но определение битового поля было расширено в Thumb-2)
С таким небольшим набором команд процессоры Cortex-M0 и Cortex-M0+ не предназначены для тяжелых задач по обработке чисел. Процессоры Cortex-M3, Cortex-M4 и Cortex-M7 лучше подходят для этих приложений, поскольку они имеют гораздо более богатый набор инструкций. Процессоры Cortex-M0 и Cortex-M0+ предназначены для выполнения общих задач обработки данных и управления вводом-выводом, а также для систем со сверхнизким энергопотреблением и недорогих систем, в которых требуется крошечный размер микросхемы.
Одной из ключевых характеристик набора инструкций для процессоров Cortex-M является восходящая совместимость. Как показано на рисунках 1.4 и 2.7, набор инструкций, поддерживаемый процессорами Cortex-M0 и Cortex-M0+, поддерживается процессорами Cortex-M3, Cortex-M4 и Cortex-M7. Таким образом, программный код, разработанный для процессоров Cortex-M0 и Cortex-M0+, часто может работать на процессорах Cortex-M3, Cortex-M4 и Cortex-M7 без изменений.
Перенос приложения с процессора с более высокой производительностью на процессор с меньшим процессором также может быть выполнен легко. Если разработчику программного обеспечения необходимо перенести приложение с процессора Cortex-M3 на процессор Cortex-M0+, часто ему нужно всего лишь заменить драйвер устройства в проекте и перекомпилировать приложение. Программные модели этих процессоров очень похожи друг на друга, поэтому часто нет необходимости изменять исходный код C.
Встроенное программное обеспечение в системах обработки сигналов реального времени: технологии проектирования
ГЕРТ ГУССЕНС , . ЧЛЕН IEEE, Чтения по совместному проектированию аппаратного и программного обеспечения, 2002 г.
1 язык на основе списка соединений
Первый тип языков спецификации процессора описывает процессор как список соединений аппаратных строительных блоков , включая путь данных, память, декодер инструкций и контроллер. Этот подход используется в компиляторе MSSQ, который принимает спецификацию процессора на языке Mimola [32] . Преимуществом этих языков является их полнота. Однако список соединений не всегда может быть доступен разработчику компилятора. Кроме того, этот подход требует, чтобы архитектурный проект был завершен, что не позволяет создавать компиляторы во время этапа изучения архитектуры в проекте ASIP.
2 языка высокого уровня
В качестве альтернативы формализму на основе списка соединений было предложено несколько высокоуровневых языков описания процессора. Идея этих языков состоит в том, чтобы собрать информацию, доступную в руководстве программиста процессора. Обычно такое описание содержит структурный каркас процессора (по сути, объявление элементов памяти и типов данных) и описание фактического набора инструкций. Первым примером является язык ISP [33] и его потомок ISPS [34]. В ISP набор инструкций фиксируется путем указания поведения, соответствующего определенным наборам битов инструкций. Для последнего используется процедурный формализм. Совсем недавно был предложен язык nML [35]. nML использует атрибутивную грамматику. Продукционные правила грамматики определяют состав набора инструкций в компактной иерархической форме. Семантика инструкций (например, их поведение при передаче регистров, их сборка и двоичное кодирование) фиксируется атрибутами. nML используется компиляторами CBC [36] и Chess [22].
Дизайн микрокомпьютера
II.F Арифметико-логическое устройство (ALU)
По аналогии, АЛУ можно рассматривать как суперсчетную машину, ключи которой автоматически управляются управляющими сигналами, вырабатываемыми в декодере команд и схемах управления. По сути, именно так был задуман первый цифровой компьютер с хранимой в памяти программой. АЛУ, естественно, мало похож на настольный сумматор. Основное отличие заключается в том, что ALU выполняет расчеты, создавая электрическую аналогию, а не механическую аналогию. Еще одно важное отличие состоит в том, что АЛУ использует двоичные методы, а не десятичные, для представления чисел и манипулирования ими. В принципе, однако, удобно думать об АЛУ как о калькуляторе с электронным управлением. АЛУ должен содержать сумматор, способный объединять содержимое двух регистров в соответствии с логикой двоичной арифметики. Это положение позволяет процессору выполнять арифметические операции с данными, которые он получает из памяти и с других входных данных. Используя только базовый сумматор, способный программист может написать процедуры, которые будут вычитать, умножать и делить, предоставляя машине полные арифметические возможности. На практике, однако, большинство АЛУ предоставляют другие встроенные функции, включая аппаратное вычитание, булевы логические операции и возможности сдвига.
АЛУ содержит флаговые биты, которые регистрируют определенные условия, возникающие в ходе арифметических операций. Флаги обычно включают carry и zero. Можно запрограммировать переходы, условно зависящие от состояния одного или нескольких флагов. Например, программа может быть предназначена для перехода к специальной процедуре, если бит переноса установлен после инструкции добавления. Наличие переноса обычно указывает на переполнение аккумулятора и иногда требует специальных действий по обработке.
Работа микроконтроллера
2.1.3 Регистр инструкций и декодер
Для выполнения инструкции процессор копирует код инструкции из памяти программ в регистр инструкций (IR). Затем он может быть декодирован (интерпретирован) декодером команд, который представляет собой комбинационный логический блок, который настраивает линии управления процессором по мере необходимости. Эти линии управления не показаны явно на блок-схеме, так как они идут ко всем частям микросхемы и сделали бы ее слишком сложной. В PIC код инструкции включает операнд (рабочие данные), который может быть буквальным значением или адресом регистра. Например, если литерал (число), указанный в инструкции, должен быть загружен в рабочий регистр (W), он помещается на внутреннюю шину данных, а линии разрешения защелки регистра W активируются логикой синхронизации и управления. Внутреннюю шину данных можно увидеть на блок-схеме производителя ( рис. 1-1 в техпаспорте PIC 16F84A).
Микроконтроллеры ARM
3.3.6 Архитектура ядра Cortex
Рис. 3.2 показана упрощенная блок-схема архитектуры ядра Cortex-M4. В верхней левой части мы видим ЦП, который включает в себя АЛУ, банки регистров, декодер инструкций, модуль DSP и интерфейс памяти. Модуль DSP недоступен в ядрах Cortex-M0 или Cortex-M3. Обратите внимание, что память не является частью ядра Cortex и поставляется компанией, производящей процессор. Контроллер вложенных векторных прерываний показан в верхнем левом углу рисунка. Это внешние входы прерывания, которые можно использовать в приложениях реального времени, управляемых прерываниями. Ядро включает в себя FPU, используемый для ускорения математических операций с плавающей запятой. Интерфейс тестирования и отладки показан в нижней правой части рисунка. Матрица шины, блок защиты памяти и периферийные интерфейсы расположены в нижней правой части рисунка. Обратите внимание, что ядро не включает порты ввода-вывода.
Рис. 3.2. Упрощенная блок-схема ядра Cortex.
Рис. 3.3 показан микроконтроллер, построенный на ядре Cortex. Обратите внимание, что на этом рисунке указаны порты ввода-вывода, память и т. д.
Рис. 3.3. Микроконтроллер построен на ядре Cortex.
Используется с разрешения Arm Holdings.
Компьютеры и их применение
4.7.13 Реализация процессора
Значительный объем управляющей логики, необходимой для выполнения всех возможных инструкций ЦП и других функций, реализуется одним из двух способов.
4.7.13.1 Случайная логика
Случайная логика использует доступные логические элементы вентилей, триггеров и т. д., объединенные подходящим образом для реализации всех шагов для каждой инструкции, используя как можно больше общего между инструкциями. Различные логические комбинации вызываются выводами декодера команд.
4.7.13.2 Микрокод
Это последовательность внутренне запрограммированных шагов, составляющих каждую инструкцию. Эти шаги или микроинструкции загружаются в ПЗУ с использованием шаблонов, определенных во время разработки, и для каждой декодированной инструкции ПЗУ микропрограммы вводится в соответствующий момент для этой инструкции. При управлении внутренними часами микрокоманды задействуют соответствующие линии управления для выполнения тех же шагов, что и в случае, если бы ЦП был разработан с использованием метода (1).
Большое преимущество микрокодированных наборов инструкций заключается в том, что их можно легко модифицировать или полностью изменить с помощью альтернативного ПЗУ, которым может быть просто один чип в сокете. Таким образом, может быть задействован другой набор инструкций ЦП.
В сочетании с микрокодом микропроцессоры с побитовыми сегментами могут использоваться для реализации ЦП. Микропроцессор битового среза содержит срез или секцию всего ЦП, т. е. регистры, арифметику и логику, с подходящими путями между этими элементами. Слайс может иметь длину 1, 2 или 4 бита, и путем каскадного объединения нескольких из них может быть достигнута любая желаемая длина слова. Требуемый набор инструкций реализуется путем соответствующего программирования микропроцессоров битовых срезов с использованием их внешних входов, управляемых микрокодом.
Комбинация микрокода, хранящегося в ПЗУ, и микропроцессоров с побитовыми срезами используется в реализации многих моделей ЦП, каждая из которых использует одно и то же устройство с побитовыми срезами.
Традиционные микроархитектуры
Сигэюки Такано, Thinking Machines, 2021
2.1.2.2 Концепция модели программирования на микропроцессорах
Рис. 2.3 (а) показан псевдокод программы (вверху) и ее ассемблерный код (внизу). Программа использует массивы и цикл for.
Рисунок 2.3. Программная модель микропроцессора.
Массив транслируется в два значения индекса, а именно: базовый адрес памяти данных и индекс позиции (смещение), указывающий позицию относительно базового адреса. Сборка, двоичная инструкция, извлекается из памяти инструкций в регистр инструкций (IR) с помощью счетчика команд (PC), т. е. гарвардской архитектуры, которая разделяет адресное пространство инструкций и данных на каждое, как показано на рис. 2.3 (б). Декодер инструкций декодирует значение IR в набор управляющих сигналов. Сигнал определяет, какая операция должна быть выполнена, расположение исходных операндов в RF и местонахождение операнда назначения для хранения результата операции.
Типичный базовый блок имеет инструкцию перехода или ветвления в конце базового блока. Цикл for преобразуется в вычисление времени повторения, инструкция сравнивается для проверки времени повторения в цикле, достигнутого для выхода из цикла, а затем применяется условный переход с инструкцией перехода, как показано внизу Рис. 2.3 (а). Результат сравнения сохраняется в регистре состояния управления (CSR), и следующая инструкция перехода определяет следующий базовый блок на основе значения CSR. ПК обновляется со значением смещения больше 1 или меньше -1, если условие истинно; таким образом, ветвь делает условную ветвь для перехода на адрес памяти инструкций.
Микроконтроллерные системы PIC
Задания 1
Задание 1.1
Задание 1.2
Изучите список периферийных устройств SPI и I 2 C, которые могут быть полезны при создании приложений PIC. Определите типичные микросхемы памяти, интерфейсов и сенсоров, которые используют эти интерфейсы, и суммируйте диапазон устройств, доступных для каждого интерфейса.
Задание 1.3
Приложения, ASIC и доменно-ориентированные архитектуры
Сигэюки Такано, Thinking Machines, 2021
4.2.1.1 Концепция местоположения
Каждая инструкция, составляющая поток инструкций, может быть идентифицирована по адресу памяти, который является адресом отображения инструкции, хранящейся в памяти, как показано на рис. 4.1 (a). Точно так же все данные или переменные также могут быть идентифицированы по адресу памяти, который является адресом отображения данных, хранящихся в памяти данных. Что касается потока управления, фрагмент потока команд обычно имеет инструкцию перехода в конце фрагмента, при этом переход обновляет BTA. Фрагмент называется базовым блоком, как показано на рис. 4.1 (б). Существует петлевая часть «BB-F». Выполнение программы имеет указатель, называемый ПК, который обращается к следующей инструкции выборки. PC увеличивается каждый цикл на базовом блоке. Когда декодер инструкций обнаруживает инструкцию ветвления в конце фрагмента, он обновляет ПК, выбирая BTA или следующую инструкцию.
Рисунок 4.1. Программа в памяти и управление потоком при выполнении.
Следующая инструкция находится по адресу памяти следующей инструкции, исходя из предположения о последовательном выполнении в базовом блоке. Для адресного пространства памяти команд характеристики шаблона адреса, основанные на приращении, называются пространственной локальностью. Данные также имеют пространственную локализацию, когда несколько данных объединяются в массив, а также при доступе к массиву по определенному шаблону в порядке следования, например, на основе увеличения адреса памяти данных.
Когда определенный базовый блок, такой как часть цикла в программе, выполняется повторно, этот базовый блок, имеющий повторяющиеся выполнения, имеет доступ к одним и тем же адресам с временным шаблоном, который называется временной локальностью. При многократном повторении выполнения и доступе к определенной области адресов памяти возникает высокотемпоральная локальность.
Подобно инструкции, данные, имеющие временную локализацию на основе шаблона доступа к памяти, можно рассматривать как адреса на временной шкале. Поэтому у программы есть своя уникальная местность. Изменение потока управления основано на специальном регистре (CSR), содержащем условие перехода, и имеет характеристики, аналогичные данным, как описано в разделе 4.2.3. Кэш-память инструкций и данных являются типичными примерами использования пространственной и временной локализации на основе непрерывного адресного пространства памяти и отображения на такую область памяти.
Машина предназначена для работы путем повторения следующих двух фаз для каждой инструкции в программе.
Фаза 1 – выборка инструкции
Блок управления генерирует управляющие сигналы, которые копируют байт инструкции из памяти в регистр инструкций, IR. Адрес этой инструкции находится в Счетчике программ, ПК.
Фаза 2. Выполнение инструкции
8 бит в IR подключаются к блоку управления. Эти 8 бит определяют последовательность управляющих сигналов, которые генерирует блок управления. Последовательность управляющих сигналов, генерируемых блоком управления, вызывает выполнение инструкции. Последовательность заканчивается запуском фазы 1, поэтому следующая инструкция загружается в IR.
Блок управления представляет собой сложную последовательную схему, имеющую входы от ИК, которые определяют последовательность управляющих сигналов, генерируемых блоком управления. Системный тактовый сигнал определяет синхронизацию всех этих управляющих сигналов. Существует большое количество управляющих сигналов. Таким образом, будет сигнал управления, подключенный к входу разрешения буфера с тремя состояниями, который соединяет регистр с шиной. Будут другие сигналы, которые подключены к входу загрузки каждого регистра, что приведет к загрузке этого регистра с шины. Еще другие сигналы будут поступать в сигналы управления ALU_mode ALU, заставляя ALU быть настроенным на выполнение конкретной арифметической или логической операции. Другой управляющий сигнал подключается к входу WriteEnable памяти, определяя, будет ли память читать или писать.
Эти сигналы будут устанавливаться один за другим, создавая таким образом последовательность управляющих сигналов, которые вызывают выборку инструкции в IR и ее последующее выполнение. Например, если набор битов в IR представляет собой инструкцию по копированию данных из одного регистра в другой, последовательность управляющих сигналов будет аналогична описанной в разделе 5.3.
Блок управления — самый сложный из основных компонентов вычислительной машины. Мы рассмотрим его конструкцию в главе 13.
Оценка производительности встроенного программного обеспечения с моделированием кэша инструкций
ЯУ-ЦУН СТИВЕН ЛИ , . ЭНДРЮ ВУЛФ, Чтения по совместному проектированию аппаратного и программного обеспечения, 2002 г.
4.1 Модифицированная функция стоимости
При использовании кэш-памяти каждая выборка инструкции приводит либо к попаданию в кэш, либо к промаху, что, в свою очередь, может привести к двум очень разным временам выполнения инструкции. Простая модель микроархитектуры, согласно которой каждая инструкция выполняется за постоянное время, больше не точно моделирует эту ситуацию. Нам нужно разделить количество исходных инструкций на количество попаданий и промахов в кэш. Если мы сможем определить эти счетчики, а также время выполнения каждой инструкции, то можно будет установить более жесткие ограничения на время выполнения программы.
Как и в предыдущем разделе, мы можем сгруппировать смежные инструкции вместе. Мы определяем новый тип атомарной структуры для анализа, линейный блок или просто l-блок. l-блок определяется как непрерывная последовательность кода в одном и том же базовом блоке, которая отображается в один и тот же набор кэшей в кэше инструкций. Другими словами, l-блоки формируются путем пересечения базовых блоков с размером строки набора кеша.Все инструкции внутри l-блока всегда выполняются вместе последовательно. Далее, поскольку контроллер кеша всегда загружает строку кода в кеш, эти инструкции либо находятся в кеше полностью, либо вообще не в кеше. Они обозначаются как попадание в кэш или промах в кэше l-блока соответственно.
На рисунке 2 (i) показана CFG с 3 базовыми блоками. Предположим, что кэш инструкций имеет 4 набора кэшей. Поскольку начальный адрес каждого базового блока можно определить из исполняемого кода программы, мы можем найти все наборы кэшей, которым сопоставлен каждый базовый блок, и добавить запись об этих строках кэша в таблицу кэшей (рис. 2 (ii)) . Граница каждого l-блока показана сплошным прямоугольником. Предположим, что базовый блок Bi разделен на блоки ni< /sub> l-блоки. Обозначим эти l-блоки Bi.1, B i.2, …, Bini .
Рис. 2 . Пример, показывающий, как строятся l-блоки. Каждый прямоугольник в кэш-таблице представляет l-блок.
Для любых двух l-блоков, сопоставленных с одним и тем же набором кэшей, они будут конфликтовать друг с другом, если у них разные теги адресов. Выполнение одного l-блока вытеснит содержимое кеша другого. Например, l-block B1.1 конфликтует с l-block B3.1 на рис. 2. Также бывают случаи, когда два l-блока не конфликтуют друг с другом. Такая ситуация возникает, когда граница базового блока не совпадает с границей строки кэша. Например, l-блоки B1.3 и B2.1 на рисунке 2, каждый из которых занимает неполную строку кэша и они не конфликтуют друг с другом. Они называются неконфликтующими l-блоками
.
Поскольку l-блок Bij находится внутри базового блока Bi , его счетчик выполнения равен xi. Количество попаданий в кэш и количество промахов в кэше l-блока Bi.j обозначаются как x i j h i t и x i j m i s s соответственно, и
Новое общее время выполнения (функция стоимости) определяется как
(13) всего e x e c u t i o n t i m e = ∑ i = 1 N ∑ j = 1 n i ( c i j h i t x i j h i t + c i j miss x i j miss )
где cijhit и cijmiss — это соответственно стоимость попадания и стоимость промаха l-блока Bij.
Уравнение (12) связывает новую функцию затрат (13) со структурными ограничениями программы и ограничениями функциональности программы, которые остаются неизменными. Кроме того, поведение кэша теперь можно указать с помощью новых переменных x i j h i t и x i j m i s s.
Логическая организация
Брюс Джейкоб, . Дэвид Т. Ван, системы памяти, 2008 г.
Различные стратегии извлечения и выравнивания
Конте исследует широкий спектр реализаций выборки инструкций, используя традиционную структуру кэша, уделяя особое внимание схемам маскирования и переупорядочивания, которые необходимы для обработки несмежных потоков инструкций, охватывающих более одного базового блока [ Conte et al. . 1995]. В исследовании исследуются схемы, которые варьируются от нижней границы (выборка одного блока кэша и извлечение инструкций с остановкой на первой ветви) до верхней границы (выборка достаточного количества инструкций из такого количества блоков кэша, которое необходимо для заполнения буфера выборки) и включают следующее: /p>
Последовательный чередование: выборка двух блоков кеша в последовательном порядке и прекращение заполнения буфера на первой ветви
Последовательный банкинг: выборка двух блоков кэша, второй на основе выходных данных буфера целевого перехода (т. е. не обязательно последовательных блоков, поэтому схема эффективно обрабатывает переходы между блоками) и прекращение заполнения буфера на первом переходе внутри блока< /p>
Сворачивающийся буфер: выборка двух блоков кэша, второй на основе выходных данных буфера целевого перехода (т. е. не обязательно последовательных блоков, поэтому схема эффективно обрабатывает переходы между блоками) и обработка переходов внутри блока путем «свертывания» буфер (т. е. маскирование пропущенных инструкций и уплотнение остальных)
Экспериментальные результаты показывают, что по мере усложнения схемы выборки различные схемы улучшают нижнюю границу и приближаются к производительности верхней границы, но одним из наиболее важных вкладов является демонстрация объема работы. связанные с обработкой несмежных потоков инструкций, и насколько это может быть дорого в обоих случаях перехода ветвей к инструкциям в одном и том же блоке кеша и перехода ветвей к инструкциям в разных блоках кеша.
Обзор реализации Cortex-M3
6.6 Типичные соединения
Поскольку на процессоре Cortex-M3 есть несколько шинных интерфейсов, вам может показаться запутанным, как он будет подключаться к другим устройствам, таким как память или периферийные устройства. На рис. 6.4 показан упрощенный пример.
РИСУНОК 6.4. Блок-схема системы процессора Cortex-M3.
Поскольку к области памяти кода можно получить доступ по шине инструкций (если это выборка инструкций) и по шине данных (если это доступ к данным), переключатель шины AHB называется BusMatrix 3 или требуется мультиплексор шины AHB. При использовании BusMatrix к флэш-памяти и дополнительной статической оперативной памяти (SRAM) (если она реализована) можно получить доступ через любой интерфейс шины. BusMatrix доступен от ARM в составе AMBA Design Kit 4 (ADK). Когда и шина данных, и шина команд пытаются получить доступ к одному и тому же устройству памяти одновременно, доступ к шине данных может иметь более высокий приоритет для лучшей производительности.
При использовании AHB BusMatrix, если шина инструкций и шина данных одновременно обращаются к разным устройствам памяти (например, выборка инструкции из выборки и шина данных, считывающая данные из дополнительной SRAM), передачи могут быть осуществляется одновременно. Однако, если используется мультиплексор шины, передачи не могут происходить одновременно, но размер цепи будет меньше. Общие конструкции микроконтроллеров Cortex-M3 используют системную шину для подключения SRAM.
Основной блок SRAM должен быть подключен через интерфейс системной шины, используя адресную область памяти SRAM. Это позволяет осуществлять доступ к данным одновременно с доступом к командам. Он также позволяет настраивать логические типы данных с помощью функции битового диапазона.
Некоторые микроконтроллеры могут иметь интерфейс внешней памяти. Для этого требуется внешний контроллер памяти, потому что вы не можете подключать внешние устройства памяти напрямую к AHB. Внешний контроллер памяти можно подключить к системной шине Cortex-M3. Дополнительные устройства AHB также можно легко подключить к системной шине без использования BusMatrix.
Простые периферийные устройства можно подключить к Cortex-M3 через мост AHB-to-APB. Это позволяет использовать более простой шинный протокол APB для периферийных устройств.
Диаграмма, показанная на рис. 6.4, — это очень простой пример; Разработчики чипов могут выбирать различные схемы подключения к шине. Для разработки ПО/прошивки вам нужно знать только карту памяти.
Блоки конструкции, показанные на схеме, такие как BusMatrix, шинный мост AHB-APB, контроллер памяти, интерфейс ввода-вывода, таймер и универсальный асинхронный приемник/передатчик (UART), доступны от ARM и количество провайдеров интернет-протокола. Поскольку у микроконтроллеров могут быть разные поставщики периферийных устройств, при разработке программного обеспечения для систем Cortex-M3 вам необходимо получить доступ к спецификации вашего микроконтроллера для правильной модели программатора.
Процессоры цифровых сигналов
9.2.2.3 Кэши программ
Кэш программы — это небольшой объем памяти для хранения программных инструкций в ядре процессора. Это уменьшает необходимость извлечения инструкций из памяти программы, тем самым ускоряя операции. Обычно они намного проще, чем те кэши, которые есть в некоторых современных микропроцессорах общего назначения.
Самый простой тип кэша программ — буфер повторения одной инструкции. Используется вместе с командой повтора. В этот буфер загружается инструкция, которая должна выполняться несколько раз. Впоследствии та же самая инструкция извлекается из кэша, а не из памяти программы. Это реализовано в семействах процессоров Texas Instruments TMS320C2x и TMS320C5x. Поскольку доступ к памяти программы не требуется во время повторного выполнения, память программы может использоваться для чтения или записи данных. В это время процессор фактически имеет еще одну доступную шину данных.
Буфер повторения может быть предназначен для хранения более чем одной инструкции. В этом случае блок инструкций может быть загружен в кэш и повторен, освобождая шину памяти программы для доступа к данным. Это очень полезно для алгоритмов, содержащих циклы с несколькими инструкциями. Такие циклы часто используются при преобразованиях, блочном перемещении данных и фильтрации.
Более общей формой буфера повторов с несколькими инструкциями является односекторный кэш инструкций. Он хранит количество последних выполненных инструкций. Если поток программы возвращается к одной из инструкций в кэше (это называется попаданием в кэш), инструкция выполняется из кэша. Очевидно, что эффективность этого типа кэша зависит от количества попаданий в кэш, что, в свою очередь, зависит от алгоритма. В некоторых случаях разработчик программного обеспечения может адаптировать код для получения большего количества попаданий в кэш и, таким образом, ускорения выполнения алгоритма.Этот тип кеша можно найти в Zoran ZR3800x.
Кэш инструкций с несколькими секторами также можно найти в некоторых чипах DSP. Он работает так же, как и вариант с одним разделом, за исключением того, что можно хранить два или более независимых сегмента кода. Процессоры Texas Instruments TMS320C3x имеют два сектора по 32 слова в каждом. Каждый сектор хранит инструкции из разных областей памяти программ. Кэш обновляется, когда происходит промах кеша (в отличие от попадания в кеш). В этом случае, если внешний адрес относится к одному из двух секторов, связанных в данный момент с кэшем, то инструкция сохраняется в соответствующем месте кэша. Если адрес находится за пределами отслеживаемого кешем, то все содержимое сектора отбрасывается и будет отслеживаться новый набор адресов. Алгоритм, который решает, какой сектор кэша будет отброшен, называется алгоритмом наименее недавно использовавшегося (LRU). Как следует из названия, кеш с самым последним попаданием сохраняется, а другой отбрасывается.
Некоторые чипы DSP позволяют программисту лучше контролировать использование кэша. В некоторых случаях программист может заблокировать содержимое кеша в какой-то момент программы или отключить кеш. Разрешение ручного управления использованием кэша помогает разработчику гарантировать, что его программы будут соответствовать критическим временным ограничениям.
Даже в тех случаях, когда физический кэш отсутствует, программист часто может вручную переместить часть программного кода из более медленной внешней памяти в более быструю внутреннюю память для выполнения. Это называется кэшированием вручную и часто значительно ускоряет выполнение программы.
Кодирование CUDA с помощью c-mex
Юнг В. Су , Янгмин Ким , в книге «Ускорение MATLAB с помощью вычислений на GPU», 2014 г.
4.4.4 Деформация
SM специально планирует потоки в группах по 32 параллельных потока, называемых warp . Все потоки в одном и том же варпе совместно используют одну команду, извлекаемую из памяти. Все нити в каждом варпе идут в одном темпе. SM обрабатывает следующий варп только тогда, когда все потоки в текущем варпе завершат свою работу. Например, если одному потоку требуется 10 секунд, чтобы завершить свою работу, в то время как остальным потокам требуется 1 секунда, SM должен ждать еще 9 секунд, пока он не будет готов перейти к следующему варпу.
В целом GPU получает несколько сеток. Блоки из сеток затем назначаются SM. SM назначает потоки SP и управляет ими в единице, называемой warp, как показано на рисунках 4.6 и 4.7. Потоки обрабатываются в группе, которая называется warp. Фактическое физическое количество параллельных потоков ограничено количеством SP. SM отвечает за планирование потоков в варпах.
Рисунок 4.6. GPU получает одну инструкцию для потоков в варпе.
Она ждет, пока все потоки в одном и том же варпе завершат выполнение инструкции, а затем переходит к следующему варпу.
Рисунок 4.7. Как сетки, блоки и потоки маршрутизируются в GPU.
Архитектура встроенного процессора
Питер Барри , Патрик Кроули , Modern Embedded Computing , 2012 г.
Микроархитектура
Микроархитектура процессора Intel Atom состоит из набора компонентов процессора, позволяющих реализовать и обеспечить поддержку IA-32 и Intel 64 ISA. Разработчикам встраиваемого программного обеспечения необходимо базовое понимание микроархитектуры, если они занимаются низкоуровневым программированием на языке ассемблера, например, разработчики, работающие над драйверами устройств или критически важными для производительности частями приложения. Разработчики встраиваемого программного обеспечения, ориентированные на максимальную производительность, также должны понимать микроархитектуру и ее значение для высокопроизводительного ассемблера или машинного языка. Способность проверять код на ассемблере или дизассемблировать приложение и понимать разницу между высокопроизводительными и низкопроизводительными последовательностями кода при выполнении на процессоре Intel Atom имеет решающее значение для успеха продукта. В этом разделе представлены основные сведения о микроархитектуре, необходимые для этого.
На рис. 5.12 представлена общая схема микроархитектуры процессора Intel Atom. На первом уровне микроархитектура исходного процессора Intel Atom классифицируется как упорядоченный суперскалярный конвейер. Термин по порядку означает, что машинные инструкции выполняются в том же порядке, в котором они появляются в приложении. Термин суперскалярный означает, что одновременно может выполняться более одной инструкции. Процессор Intel Atom классифицируется как двухширинный суперскаляр, поскольку он может выполнять и удалять две инструкции за один и тот же такт.Современные процессоры являются конвейерными, что позволяет одновременно выполнять несколько инструкций на разных этапах обработки.
РИСУНОК 5.12. Микроархитектура процессора Intel Atom.
Конвейер целочисленных данных для процессора Intel Atom подробно показан на рис. 5.13. Конвейер разделен на шесть этапов обработки инструкций:
CWE-1281: последовательность инструкций процессора приводит к неожиданному поведению
Определенные комбинации инструкций процессора приводят к нежелательному поведению, такому как блокировка процессора до тех пор, пока не будет выполнен аппаратный сброс.
Если архитектура набора инструкций (ISA) и логика процессора не были тщательно разработаны и тщательно протестированы, определенные комбинации инструкций могут привести к блокировке процессора или другому неожиданному и нежелательному поведению. При обнаружении нереализованных кодов операций инструкций или недопустимых операндов инструкций процессор должен генерировать исключение и продолжать работу без негативного влияния на безопасность. Однако определенные комбинации допустимых и недопустимых инструкций могут привести к неожиданному поведению с последствиями для безопасности, например к разрешению непривилегированным программам полной блокировки ЦП.
Некоторыми примерами являются ошибка Pentium f00f, MC6800 HCF, ошибка запятой Cyrix и другие общие инструкции "Остановись и загорись".
В этой таблице показаны недостатки и категории высокого уровня, связанные с этим недостатком. Эти отношения определяются как ChildOf, ParentOf, MemberOf и дают представление об аналогичных элементах, которые могут существовать на более высоких и более низких уровнях абстракции. Кроме того, такие отношения, как PeerOf и CanAlsoBe, определены для выявления аналогичных недостатков, которые пользователь может захотеть изучить.
Природа | Тип | ID | Имя |
---|
ChildOf | Столб — слабость наиболее абстрактного типа слабости и представляет собой тему для всех слабостей класса/базы/варианта, связанных с ним. Столп отличается от Категории, поскольку технически Столп по-прежнему является типом слабости, который описывает ошибку, в то время как Категория представляет собой общую характеристику, используемую для группировки связанных вещей. | 691 td> | Недостаточное управление потоком управления |
В этой таблице показаны недостатки и категории высокого уровня, связанные с этим недостатком. Эти отношения определяются как ChildOf, ParentOf, MemberOf и дают представление об аналогичных элементах, которые могут существовать на более высоких и более низких уровнях абстракции. Кроме того, такие отношения, как PeerOf и CanAlsoBe, определены для выявления аналогичных недостатков, которые пользователь может захотеть изучить.
Природа | Тип | ID | Имя |
---|
MemberOf | Категория — запись CWE, содержащая набор другие записи, имеющие общие характеристики. | 1201 | Основные и вычислительные проблемы |
< /таблица>
Различные Способы внедрения предоставляют информацию о том, как и когда может быть введена эта слабость. Этап определяет точку жизненного цикла, в которой может произойти внедрение, а в примечании приводится типичный сценарий, связанный с внедрением на данном этапе. Фаза | Примечание |
---|
Архитектура и дизайн | Неожиданное поведение при выполнении определенной инструкции комбинации могут возникать из-за ошибок в ISA |
Реализация | Неожиданное поведение от определенные комбинации инструкций могут возникать из-за деталей реализации, таких как спекулятивное выполнение, кэширование и т. д. |
В этом списке показаны возможные области, в которых может проявиться данная слабость. Это могут быть определенные названные языки, операционные системы, архитектуры, парадигмы, технологии или класс таких платформ. Платформа указана вместе с тем, как часто данный недостаток появляется для этого экземпляра.
Класс: не зависящий от языка (неопределенная распространенность)
Класс: независимый от ОС (неопределенная распространенность)
Класс: независимый от архитектуры (неопределенная распространенность)
Класс: независимые от технологий (неопределенная распространенность)
Технические последствия: зависит от контекста
Ошибка Pentium F00F — реальный пример того, как последовательность инструкций может заблокировать процессор. Инструкция cmpxchg8b сравнивает содержимое регистров с ячейкой памяти. Ожидается, что операнд будет ячейкой памяти, но в плохом фрагменте кода это регистр eax. Поскольку указанный операнд является недопустимым, генерируется исключение, что является правильным поведением и само по себе не является проблемой безопасности. Однако при префиксе инструкции «lock» процессор взаимоблокируется, потому что заблокированные транзакции памяти требуют выполнения пары транзакций чтения и записи, прежде чем блокировка на шине памяти будет снята. Исключение приводит к чтению, но соответствующей записи нет, как это было бы, если бы инструкции cmpxchg8b был предоставлен допустимый операнд.
Ошибка в некоторых процессорах Intel Pentium допускает отказ в обслуживании (зависание) с помощью недопустимой инструкции "CMPXCHG8B", что приводит к взаимоблокировке
Внедрите строгую стратегию тестирования, включающую рандомизацию для изучения последовательностей инструкций, которые вряд ли появятся при обычных рабочих нагрузках, чтобы выявить последовательности инструкций остановки и возгорания.
Этап: исправление и обслуживание
Исправьте операционную систему, чтобы избежать запуска последовательностей типа Halt и Catch Fire или уменьшить ущерб, вызванный непредвиденным поведением. См. [REF-1108].
Читайте также: