Быстродоступная рабочая память, доступная как часть цифрового процессора
Регистр процессора — это быстродоступное место, доступное процессору компьютера . [1] Регистры обычно состоят из небольшого количества быстрого хранилища , хотя некоторые регистры имеют определенные аппаратные функции и могут быть только для чтения или только для записи. В архитектуре компьютера регистры обычно адресуются механизмами, отличными от основной памяти , но в некоторых случаях им может быть назначен адрес памяти , например, DEC PDP-10 , ICT 1900. [ 2]
Почти все компьютеры, независимо от того, имеют ли они архитектуру загрузки/хранения или нет, загружают элементы данных из большей памяти в регистры, где они используются для арифметических операций , побитовых операций и других операций, и обрабатываются или проверяются машинными инструкциями . Обработанные элементы затем часто сохраняются обратно в основную память, либо той же инструкцией, либо последующей. Современные процессоры используют либо статическую , либо динамическую оперативную память в качестве основной памяти, причем к последней обычно осуществляется доступ через один или несколько уровней кэша .
Регистры процессора обычно находятся наверху иерархии памяти и обеспечивают самый быстрый способ доступа к данным. Этот термин обычно относится только к группе регистров, которые напрямую кодируются как часть инструкции, как определено набором инструкций . Однако современные высокопроизводительные процессоры часто имеют дубликаты этих «архитектурных регистров» для повышения производительности посредством переименования регистров , что позволяет выполнять параллельные и спекулятивные команды . Современная архитектура x86 приобрела эти методы около 1995 года с выпуском Pentium Pro , Cyrix 6x86 , Nx586 и AMD K5 .
Регистры обычно измеряются по количеству бит , которые они могут содержать, например, « 8-битный регистр», « 32-битный регистр», « 64-битный регистр» или даже больше. В некоторых наборах инструкций регистры могут работать в различных режимах, разбивая свою память хранения на меньшие части (например, 32-битную на четыре 8-битных), в которые можно загружать и обрабатывать несколько данных (вектор или одномерный массив данных) одновременно. Обычно это реализуется путем добавления дополнительных регистров, которые отображают свою память в больший регистр. Процессоры, которые имеют возможность выполнять отдельные инструкции для нескольких данных, называются векторными процессорами .
Типы
Процессор часто содержит несколько видов регистров, которые можно классифицировать в соответствии с типами значений, которые они могут хранить, или инструкциями, которые с ними работают:
Регистры, доступные пользователю, могут быть прочитаны или записаны машинными инструкциями. Наиболее распространенное разделение регистров, доступных пользователю, — это разделение на регистры данных и регистры адреса.
Адресные регистры хранятадресаи используются инструкциями, которые косвенно обращаются кпервичнойпамяти.
Некоторые процессоры содержат регистры, которые могут использоваться только для хранения адреса или только для хранения числовых значений (в некоторых случаях используются как индексный регистр, значение которого добавляется как смещение от некоторого адреса); другие позволяют регистрам хранить любой вид количества. Существует широкий спектр возможных режимов адресации , используемых для указания эффективного адреса операнда.
Регистры общего назначения (GPR могут хранить как данные, так и адреса, т. е. они представляют собой комбинированные регистры данных/адресов; в некоторых архитектурахфайл регистровунифицирован,так что GPR могут хранить также числа с плавающей точкой.
Регистры, специфичные для модели (также называемыемашинно-специфичными регистрами), хранят данные и настройки, относящиеся к самому процессору. Поскольку их значения привязаны к конструкции конкретного процессора, не ожидается, что они останутся стандартными между поколениями процессоров.
Архитектурные регистрырегистры, видимые программному обеспечению и определяемые архитектурой. Они могут не соответствовать физическому оборудованию, если переименование регистров выполняется базовым оборудованием.
В некоторых архитектурах (таких как SPARC и MIPS ) первый или последний регистр в файле регистров целых чисел является псевдорегистром, поскольку он жестко настроен на то, чтобы всегда возвращать ноль при чтении (в основном для упрощения режимов индексации), и его нельзя перезаписать. В Alpha это также делается для файла регистров с плавающей точкой. В результате этого регистровые файлы обычно цитируются как имеющие на один регистр больше, чем их фактическое количество, пригодное для использования; например, цитируются 32 регистра, когда только 31 из них соответствует приведенному выше определению регистра.
Примеры
В следующей таблице показано количество регистров в нескольких основных архитектурах ЦП. Обратите внимание, что в процессорах, совместимых с x86 , указатель стека ( ESP) считается целочисленным регистром, хотя существует ограниченное количество инструкций, которые могут использоваться для работы с его содержимым. Аналогичные оговорки применимы к большинству архитектур.
Хотя все перечисленные ниже архитектуры различны, почти все они находятся в базовой компоновке, известной как архитектура фон Неймана , впервые предложенная венгерско-американским математиком Джоном фон Нейманом . Также следует отметить, что количество регистров на графических процессорах намного больше, чем на центральных процессорах.
Использование
Количество регистров, доступных на процессоре, и операции, которые могут быть выполнены с использованием этих регистров, оказывают значительное влияние на эффективность кода, сгенерированного оптимизирующими компиляторами . Число Стрэлера дерева выражений дает минимальное количество регистров, необходимых для оценки этого дерева выражений.
^ "Что такое регистр процессора?". Образовательные: интерактивные курсы для разработчиков программного обеспечения . Получено 2022-08-12 .
^ «Обзор методов проектирования и управления файлом регистров ЦП».
^ "Cray-1 Computer System Hardware Reference Manual" (PDF) . Cray Research . Ноябрь 1977. Архивировано (PDF) из оригинала 2021-11-07 . Получено 2022-12-23 .
^ "Руководство пользователя микрокомпьютерного набора MCS-4" (PDF) . Intel. Февраль 1973 г. Архивировано (PDF) из оригинала 24.02.2005.
^ "8008 8 Bit Parallel Central Processor Unit User Manual" (PDF) . Intel. Ноябрь 1973. Архивировано (PDF) из оригинала 2007-10-04 . Получено 23 января 2014 .
^ "Руководство пользователя микрокомпьютерных систем Intel 8080" (PDF) . Intel. Сентябрь 1975 г. Архивировано (PDF) из оригинала 2010-12-06 . Получено 23 января 2014 г. .
^ "Справочное руководство программиста 80286 и 80287" (PDF) . Intel. 1987. Архивировано (PDF) из оригинала 2015-07-23.
^ ab "Руководства для разработчиков программного обеспечения для архитектур Intel 64 и IA-32". Intel. 4 декабря 2019 г.
^ «Руководство программиста по архитектуре AMD64. Том 1: Прикладное программирование» (PDF) . AMD . Октябрь 2013 г.
^ «Справочник по программированию расширений набора инструкций архитектуры Intel и будущих функций» (PDF) . Intel . Январь 2018 г.
^ F8, Предварительное руководство пользователя микропроцессора (PDF) . Fairchild. Январь 1975 г.
^ F8 Руководство по программированию (PDF) . Fairchild MOS Microcomputer Division. 1977.
^ "Справочное руководство по процессору Nios II Classic" (PDF) . Altera . 2 апреля 2015 г.
^ "Справочное руководство по процессору Nios II Gen2" (PDF) . Altera. 2 апреля 2015 г.
^ "M6800 Programming Reference Manual" (PDF) . Motorola . Ноябрь 1976. Архивировано (PDF) из оригинала 2011-10-14 . Получено 18 мая 2015 .
^ "Motorola M68000 Family Programmer's Reference Manual" (PDF) . Motorola. 1992 . Получено 10 ноября 2024 .
^ "Руководство по программированию CUDA C". Nvidia. 2019. Получено 9 января 2020 г.
^ Цзя, Чжэ; Маджиони, Марко; Штайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры графического процессора NVIDIA Volta с помощью микробенчмаркинга». arXiv : 1804.06826 [cs.DC].
^ Control Data 6000 Series Computer Systems, Reference Manual (PDF) . Control Data Corporation. Июль 1965 г.
^ Принципы работы IBM System/360 (PDF) . IBM.
^ IBM System/370, Принципы работы (PDF) . IBM. 1 сентября 1975 г.
^ z/Архитектура, принципы работы (PDF) (Седьмое изд.). IBM. 2008.
^ "IBM Enterprise Systems Architecture/370 и System/370 - Vector Operations" (PDF) . IBM. SA22-7125-3 . Получено 11 мая 2020 г. .
^ "Микропроцессор IBM S/390 G5" (PDF) .
^ "Домашняя страница MMIX".
^ "Series 32000 Databook" (PDF) . National Semiconductor . Архивировано (PDF) из оригинала 2017-11-25.
^ Архитектура Intel Itanium, Руководство разработчика программного обеспечения, Том 3: Справочник по набору инструкций Intel Itanium (PDF) . Intel. Май 2010 г.
^ Уивер, Дэвид Л.; Джермонд, Том (ред.). Руководство по архитектуре SPARC, версия 9 (PDF) . Санта-Клара, Калифорния: SPARC International, Inc.
^ Power ISA Version 3.1B (PDF) . OpenPOWER Foundation. 14 сентября 2021 г.
^ Blackfin Processor, Справочник по программированию, Версия 2.2 (PDF) . Analog Devices. Февраль 2013 г.
^ "Архитектура набора инструкций блока синергического процессора, версия 1.2" (PDF) . IBM. 27 января 2007 г.
^ Леонард, Тимоти Э., ред. (1987). Архитектура VAX, справочное руководство (PDF) . Книги DEC.
^ Справочное руководство по архитектуре Alpha (PDF) (Четвертое издание). Compaq Computer Corporation. Январь 2002 г.
^ "Изучение сборки 65816". Super Famicom Development Wiki . Получено 14 ноября 2019 г.
^ "Стандарт вызова процедур для архитектуры ARM" (PDF) . ARM Holdings . 30 ноября 2013 г. . Получено 27 мая 2013 г. .
^ "2.6.2. Набор регистров состояния большого пальца". Техническое справочное руководство по ARM7TDMI . ARM Holdings .
^ Архитектура набора инструкций Arm A64, Armv8, для профиля архитектуры Armv8-A (PDF) . Arm. 2021.
^ Архитектура MIPS64 для программистов, том II: набор инструкций MIPS64 (PDF) . RISC-V Foundation. 12 марта 2001 г. Получено 6 октября 2024 г.
^ Waterman, Andrew; Asanovi, Krste, ред. (май 2017 г.). RISC-V, Руководство по набору инструкций, Том I: ISA на уровне пользователя, Версия документа 2.2 (PDF) . RISC-V Foundation.