Почему процессор MIPS имеет 32 регистра в файле регистров? Может ли быть больше или меньше? Как это повлияет, если мы изменим размер файла реестра?
3 ответа
MIPS - это архитектура "RISC" или «load-store».
Оперативная память раньше была такой же быстрой, как и у процессоров. Поэтому люди будут писать программы, которые будут использовать оперативную память в качестве промежуточного или временного хранилища. Ранние процессоры имели только несколько регистров из-за этого (то есть 6502, Z80 - у 6502 было только 3 регистра общего назначения. Некоторые процессоры, такие как TMS9900, фактически использовали ОЗУ в качестве регистров). Это позволило процессорам использовать меньше транзисторов, что означает, что они дешевле, легче получать хорошую прибыль, легче разрабатывать (в 70-х годах не было проектирования микросхем на основе САПР ...)
ОЗУ работало так же быстро, как ЦП, перестало быть правдой примерно в 1985 году или около того, и стало только хуже.
RISC стал частично для решения этой проблемы (это было до того, как кэш ЦП стал обычным или большим, как сегодня) - имея кучу регистров, можно избежать медленного ОЗУ много времени для промежуточных результатов вычислений и тому подобного.
Уменьшение количества доступных регистров означает, что для этой цели приходится чаще использовать ОЗУ медленнее.
Я не совсем уверен, почему 32 была выбрана в качестве "приятного места" - кроме 5-битных, и я знаю, что коды операций MIPS имеют 3 5-битных поля, то есть их легко декодировать (еще один атрибут философии "RISC") - и это действительно 31, так как первый регистр всегда возвращает 0.
В системе с переименованием регистров вы можете изменять количество физических регистров и влиять только на производительность.
Но вы не можете изменить количество имен регистров без создания совершенно новой архитектуры. Попробуйте удалить некоторые имена, и программы, которые использовали эти имена, потерпят неудачу. Попробуйте добавить несколько имен, и 5-битной кодировки уже недостаточно для их описания.
Вы можете попытаться использовать приемы, такие как префиксы команд, чтобы расширить набор команд, чтобы включить расширенные инструкции, которые принимают больше или другие имена, сохраняя при этом старые кодировки без изменений для обеспечения обратной совместимости. Я не знаю, чтобы кто-то делал это с MIPS, но AMD64, также известная как EM64T, известная как x86_64, использовала подход «расширения с (в основном) обратной совместимостью», основанный на x86.
Это не обязательно, но это хороший компромисс с другими дизайнерскими решениями.
Итак, во-первых, длина инструкции в MIPS составляет 32 бита (в большинстве MIPS существует 64-битная версия). (Вы можете увидеть много деталей, как это ломается здесь). Во многих инструкциях MIPS необходимо указать три регистра, например, два источника и один пункт назначения (например, r4 = r2+r4). Архитектура MIPS позволяет 5 битам указывать каждый из этих регистров, а 32 - это максимальное число, которое вы можете представить с помощью пяти битов, поэтому нет смысла давать вам больше регистров, к которым у вас нет доступа.
Если MIPS позволяет вам иметь 6 битов для выбора регистра, то вы можете использовать до 64 различных регистров, но эти дополнительные биты должны откуда-то приходить, возможно, за счет сокращения количества операций или режимов адресации.
Существуют и другие подходы, некоторые процессоры используют переключение банков, которое в основном говорит:«У меня есть эти 32 регистра, которые я сейчас использую, но у меня также есть эта специальная инструкция SWITCH, которая позволяет мне вытащить эти 32 других регистра для использования на некоторое время. перед переключением назад "это удобно для некоторых приложений, но концептуально сложно для некоторых других.