- •5. Способы адресации в пэвм с 32-разрядной архитектурой
- •9. Эффект гонок в микропрограммных автоматах и способы его устранения
- •17. Сегментация микропрограмм
- •18. Назначение, основные характеристики и функции систем прерывания программ
- •19. Запоминание состояния, переход к прерывающей программе и возврат из нее
- •20. Приоритетное обслуживание прерываний
- •22. Сравнение систем прерываний ес эвм и пэвм
- •23. Классификация систем памяти (см. Пособие Память эвм)
- •24. Сегментная адресация памяти
- •25. Страничная адресация памяти
- •26. Защита памяти
- •27. Защищенный режим в пэвм
- •28. Алгоритмы замещения информации в основной памяти
- •29. Алгоритмы управления очередностью обмена с внешними зу (см. Пособие Память эвм)
- •30. Принципы построения систем ввода-вывода в эвм
- •31. Организация интерфейсов ввода-вывода (должно дорабатываться)
- •32. Программное управление вводом-выводом
- •33. Передача данных с прямым доступом к памяти
- •34. Структура эвм Единой Системы и см эвм
- •35. Основные типы микропроцессоров. Структура микроЭвм
- •36. Совмещение во времени выполнения нескольких команд программы
- •37. Суперскалярная и пакетно-сетевая архитектуры процессоров пэвм
- •38. Процессоры с risc-архитектурой и эвм, управляемые потоками данных
- •39. Гиперпоточная архитектура в пэвм и архитектура эвм с большой длиной командного слова
- •40. Классификация вычислительных систем
38. Процессоры с risc-архитектурой и эвм, управляемые потоками данных
Одной из альтернатив, существенно влияющей на архитектуру (или структуру) процессора, является концепция построения системы команд.
В классических ЭВМ система команд с момента создания первых ЭВМ шла по пути усложнения. Причина этого заключалась в стремлении приблизить внутренний язык (команд) машины к используемым языкам программирования высокого уровня. Однако ряд исследований реальных программ показал, что доля сложных команд в программах не столь высока, чтобы полностью оправдывать усложнение аппаратуры, требующееся для поддержки этих команд.
Кроме того было установлено также, что операторы языков высокого уровня часто реализуются в исполнительном модуле подпрограммами, что требует вызова их, передачи им параметров, возврата результатов и возврата из подпрограмм. Процессорное время, затрачиваемое на такие вспомогательные действия, может достигать до 40% от общего времени вычислений.
Эти, а также некоторые другие результаты анализа программ привели к появлению концепции процессоров с упрощенным набором команд. Термин RISC(ReducedInstructionSetComputers– компьютеры с упрощенным, или сокращенным, набором команд) и соответствующая архитектура процессоров появились в начале 1980-х годов.
Основные соображения, положенные в основу RISC-архитектуры предполагали следующее:
- в набор команд процессора должны входить простые наиболее часто используемые команды одинаковой длины, время выполнения которых примерно одинаково;
- поскольку время обращения к памяти достаточно велико, по сравнению со временем выполнения простых команд, то обращение к памяти выполняется только командами чтение и запись, а все остальные операции имеют формат регистр-регистр;
- поскольку простые команды будут генерировать много обращений к переменным, то количество регистров, доступных командам, должно быть большим, обычно это 32 регистра или более.
Таким образом, RISC-процессоры имеют простую и небольшую систему команд (около 100 команд одинаковой длины, трех-четырех форматов и малое количество способов адресации), быстрое устройство управления с жесткой логикой, значительное количество регистров общего назначения.
Значительное внимание уделяется эффективности использования регистров, для чего применяются программные и аппаратные методы.
С появлением RISC-процессоров обычные процессоры стали иногда называтьCISC-процессорами (ComplexилиCompleteInstructionSetComputers– компьютеры со сложной или полной системой команд). Предсказываемого в 1980-х годах вытесненияCISC-процессоровRISC-процессорами не произошло и в настоящее время каждый из типов имеет свои области применения.
RISC-процессоры более просты, имеют более высокие рабочие частоты, их проще и быстрее разработать, они меньше стоят и более надежны. Но из этих достоинств следуют и определенные недостатки. Простота системы команд приводит к более длинным программ. Большое количество регистров приводит к увеличению времени доступа к ним из-за усложнения схемы декодирования. Короткие команды и простые схемы адресации усложняют доступ к памяти достаточной емкости.
Поэтому на практике RISC-процессоры используются в различных специализированных и управляющих системах. Часто встречается и сочетание использования в одной ЭВМ процессоров обеих архитектур. Хотя в этих случаяхRISC-архитектуры могут выполнять вспомогательные функции, например, мониторинг системных средств.
Однако, помимо классических архитектур, в русле поиска структур ЭВМ, поддерживающих параллелизм на уровне команд, были найдены иные решения, обеспечивающие возможность автоматического распараллеливания выполнения команд программы. Их суть сводилась к выполнению операций программы не строго в порядке, предписанном алгоритмом, а по мере а) наличия свободных исполнительных ресурсов и готовности данных или б) необходимости получения результата операции для выполнения дальнейших действий. Это дает три механизма управления запуском команд:
- традиционный (controlflowdriven) – выполнение последовательности команд в соответствии с программой
- управление потоком данных (dataflowdriven) – выполнение команды при готовности всех ее операндов и наличии свободного операционного блока
- рекурсивный вызов (или вызов по запросу- recursiveилиdemanddriven) – постановка команды в очередь на выполнение, если ее результат нужен другой команде.
Третий случай, вообще говоря, требует обратного просмотра программы, начиная от команд получения конечного результата, что предполагает два прохода по программе: обратный предварительный просмотр, определяющий порядок выполнения, и прямой исполнительный проход в соответствии с выявленным порядком.
Архитектура ЭВМ, управляемой потоком данных, схематически может быть представлена так, как это показано на рис. 38.1,а). В памяти этой ЭВМ хранятся команды программы, формат которых показан на рис. 38.1,б). Этот формат отличен от классических команд. Помимо кода операции, он содержит:
- поле адресов назначения, по которым должен рассылаться результат выполнения команды;
- поля данных, куда записываются значения операндов команды;
- флаги данных, которые взводятся при готовности операндов;
- поля типов условий, определяющие порядок приема данных в соответствующее поле (безусловный, при значении .t.флага условия, при значении.f.флага условия, константа)
- поля значений флагов условий (не поступил, .t.,.f.).
Порядок работы этой ЭВМ следующий. Селекторная сеть просматривает содержимое памяти и находит команды, у которых готовы данные (взведены флаги данных). При наличии свободных операционных блоков такие данные и коды операций таких команд пересылаются в исполнительные блоки и выполняются. После этого распределительная сеть рассылает результат выполнения команды из исполнительного блока в поля данных по тем адресам, которые указаны в поле адресов назначения, с проверкой значений соответствующих флагов и типов условий и взводит соответствующие флаги данных.
Рис. 38.1. Упрощенное представление структуры ЭВМ, управляемой потоком данных (а) и формат ее команды (б)
Такая структура позволяет выполнять параллельно команды программы, без нарушения логики алгоритма, автоматически выявляя возможность такого выполнения.
Известны несколько разновидностей таких ЭВМ, рассматриваемые, например, в [1].
В ЭВМ с управлением потоком данных готовые к выполнению команды исполняются при наличии свободных исполнительных блоков вне зависимости от того, потребуется ли это при выполнении алгоритма. Стремление исключить выполнение ненужных команд положено в основу организации рекурсивных ЭВМ с выполнением команд по запросу их результата. (В некоторых источниках такие ЭВМ называют редукционными.)
Поскольку анализ программ в этом случае происходит в обратном порядке – от конечных операций, то для таких ЭВМ также применяют специальные языка программирования, называемые функциональными.