Быстродоступная рабочая память, доступная как часть цифрового процессора
Описание уровня передачи регистров (RTL) 8-битного регистра с подробной реализацией, показывающее, как можно хранить 8 бит данных.
Регистр процессора — это быстро доступное место, доступное процессору компьютера . [1] Регистры обычно состоят из небольшого объема быстрой памяти , хотя некоторые регистры имеют определенные аппаратные функции и могут быть доступны только для чтения или только для записи. В компьютерной архитектуре регистры обычно адресуются с помощью механизмов, отличных от основной памяти , но в некоторых случаях им может быть назначен адрес памяти, например DEC PDP-10 , ICT 1900 . [2]
Почти все компьютеры, независимо от архитектуры загрузки/сохранения или нет, загружают элементы данных из большей памяти в регистры, где они используются для арифметических операций , побитовых операций и других операций, а также управляются или проверяются машинными инструкциями . Манипулируемые элементы затем часто сохраняются обратно в основную память либо с помощью той же инструкции, либо с помощью следующей. Современные процессоры используют в качестве основной памяти либо статическое , либо динамическое ОЗУ , причем доступ к последней обычно осуществляется через один или несколько уровней кэша .
Регистры процессора обычно находятся на вершине иерархии памяти и обеспечивают самый быстрый способ доступа к данным. Этот термин обычно относится только к группе регистров, которые непосредственно закодированы как часть инструкции, как определено набором команд . Однако современные высокопроизводительные процессоры часто имеют дубликаты этих «архитектурных регистров» для повышения производительности за счет переименования регистров , что позволяет выполнять параллельное и спекулятивное выполнение . Современный дизайн x86 приобрел эти методы примерно в 1995 году с выпусками Pentium Pro , Cyrix 6x86 , Nx586 и AMD K5 .
Регистры обычно измеряются количеством бит , которые они могут хранить, например, « 8-битный регистр», « 32-битный регистр», « 64-битный регистр» или даже больше. В некоторых наборах команд регистры могут работать в различных режимах, разбивая свою память на более мелкие части (например, 32-битные на четыре 8-битные), в которые помещаются несколько данных (вектор или одномерный массив данных). могут загружаться и работать одновременно. Обычно это реализуется путем добавления дополнительных регистров, которые отображают свою память в регистр большего размера. Процессоры, способные выполнять отдельные инструкции для нескольких данных, называются векторными процессорами .
Типы
Процессор часто содержит несколько типов регистров, которые можно классифицировать по типам значений, которые они могут хранить, или по командам, которые с ними работают:
Доступные пользователю регистры можно читать или записывать с помощью машинных инструкций. Наиболее распространенным разделением регистров, доступных пользователю, является деление на регистры данных и регистры адреса.
Адресные регистры содержатадресаи используются инструкциями, которые косвенно обращаются кпервичнойпамяти.
Некоторые процессоры содержат регистры, которые могут использоваться только для хранения адреса или только для хранения числовых значений (в некоторых случаях используются в качестве индексного регистра , значение которого добавляется как смещение от некоторого адреса); другие позволяют регистрам хранить любые количества. Существует множество возможных режимов адресации , используемых для указания эффективного адреса операнда.
Регистры общего назначения ( GPR ) могут хранить как данные, так и адреса, т.е. они представляют собой комбинированные регистры данных/адреса; в некоторых архитектурах файл регистров унифицирован , поэтому георадарытакже могут хранить числа с плавающей запятой .
Регистры констант хранят значения, доступные только для чтения, такие как ноль, единица иличисло «пи».
Векторные регистры содержат данные длявекторной обработкивыполняемойSIMD(одна инструкция, несколько данных).
Регистры специального назначения ( SPR ) хранят некоторые элементы состояния программы ; они обычно включают в себя счетчик программ , также называемый указателем команд, и регистр состояния ; счетчик программы и регистр состояния могут быть объединены в регистр слова состояния программы (PSW). Вышеупомянутый указатель стека иногда также включается в эту группу. Встроенные микропроцессоры также могут иметь регистры, соответствующие специализированным аппаратным элементам.
В некоторых архитектурах регистры, специфичные для модели (также называемые регистрами, специфичными для машины ), хранят данные и настройки, относящиеся к самому процессору. Поскольку их значения привязаны к конструкции конкретного процессора, нельзя ожидать, что они останутся стандартными между поколениями процессоров.
Архитектурные регистрыЯвляются ли регистры видимыми для программного обеспечения и определяются архитектурой. Они могут не соответствовать физическому оборудованию, если переименование регистров выполняется базовым оборудованием.
В некоторых архитектурах (таких как SPARC и MIPS ) первый или последний регистр в файле целочисленных регистров является псевдорегистром, поскольку он запрограммирован так, чтобы всегда возвращать ноль при чтении (в основном для упрощения режимов индексации), и его нельзя перезаписать. . В Alpha это также делается для файла регистров с плавающей запятой. В результате этого в файлах регистров обычно указывается, что они содержат на один регистр больше, чем их реальное количество; например, котируются 32 регистра, если только 31 из них соответствует приведенному выше определению регистра.
Примеры
В следующей таблице показано количество регистров в нескольких основных архитектурах ЦП. Обратите внимание, что в x86 -совместимых процессорах указатель стека ( ESP) считается целочисленным регистром, хотя существует ограниченное количество инструкций, которые можно использовать для работы с его содержимым. Подобные предостережения применимы к большинству архитектур.
Хотя все перечисленные ниже архитектуры различны, почти все они имеют базовую структуру, известную как архитектура фон Неймана , впервые предложенную венгерско-американским математиком Джоном фон Нейманом . Примечательно также, что количество регистров на графических процессорах намного больше, чем на центральных процессорах.
Применение
Количество регистров, доступных на процессоре, и операций, которые можно выполнить с их помощью, оказывают существенное влияние на эффективность кода , генерируемого оптимизирующими компиляторами . Число Стралера дерева выражений дает минимальное количество регистров, необходимое для вычисления этого дерева выражений.
^ «Что такое регистр процессора?». Образовательные: интерактивные курсы для разработчиков программного обеспечения . Проверено 12 августа 2022 г.
^ «Обзор методов проектирования и управления файлом регистров ЦП» .
^ «Справочное руководство по аппаратному обеспечению компьютерной системы Cray-1» (PDF) . Крейские исследования . Ноябрь 1977 г. Архивировано (PDF) из оригинала 7 ноября 2021 г. Проверено 23 декабря 2022 г.
^ «Руководство пользователя 8-битного параллельного центрального процессора 8008» (PDF) . Интел. Ноябрь 1973 года . Проверено 23 января 2014 г.
^ «Руководство пользователя микрокомпьютерных систем Intel 8080» (PDF) . Интел. Сентябрь 1975 года . Проверено 23 января 2014 г.
^ «Справочное руководство программиста 80286 и 80287» (PDF) . Интел. 1987.
^ ab «Руководства для разработчиков программного обеспечения для архитектур Intel 64 и IA-32» . Интел. 4 декабря 2019 г.
^ «Руководство программиста по архитектуре AMD64, том 1: Прикладное программирование» (PDF) . АМД . Октябрь 2013.
^ «Расширения набора команд архитектуры Intel и справочник по программированию будущих функций» (PDF) . Интел . Январь 2018.
^ F8 Руководство по программированию (PDF) . Подразделение микрокомпьютеров Fairchild MOS. 1977.
^ «Справочное руководство по процессору Nios II Classic» (PDF) . Альтера . 2 апреля 2015 г.
^ «Справочное руководство по процессорам Nios II Gen2» (PDF) . Альтера. 2 апреля 2015 г.
^ «Справочное руководство по программированию M6800» (PDF) . Моторола . Ноябрь 1976 года . Проверено 18 мая 2015 г.
^ «Справочное руководство программиста семейства Motorola M68000» (PDF) . Моторола. 1992 год . Проверено 13 июня 2015 г.
^ «Руководство по программированию на CUDA C» . Нвидиа. 2019 . Проверено 9 января 2020 г.
^ Цзя, Чжэ; Маджиони, Марко; Штайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры графического процессора NVIDIA Volta с помощью микробенчмаркинга». arXiv : 1804.06826 [cs.DC].
^ «IBM Enterprise Systems Architecture/370 и System/370 — векторные операции» (PDF) . ИБМ. SA22-7125-3 . Проверено 11 мая 2020 г.