Сначала я подумал, что вы спрашиваете, возможно ли иметь CPU без определенного размера регистра. Это не имеет никакого смысла, поскольку количество и размер регистров являются физическим свойством аппаратного обеспечения и не могут быть изменены.
Однако некоторые архитектуры позволяют программисту работать с меньшей частью регистра или парными регистрами.
x86 делает это, например, с add al, 9
(использует только 8 бит 64-разрядного rax
) и div rbx
(пары rdx:rax
для формирования 128-битного регистра). Причина, по которой эта схема не настолько размыта, заключается в том, что она поставляется с множеством компромиссов.
Больше регистров означает больше бит, необходимых для их устранения, просто введите: более длинные инструкции.
Более длинные инструкции означают меньше плотность кода, более сложные декодеры и меньшую производительность.
Кроме того, большинство элементарных операций, таких как логические, сложение и вычитание, уже реализованы как работающие по полному регистру за один цикл.
Наконец, одно исполнительное устройство может обрабатывать только одну команду за раз, мы не можем одновременно выпускать восемь 8-битных дополнений в 64-разрядном АЛУ. Таким образом, не было бы никаких улучшений, ни латентности, ни пропускной способности.
Доступ к частичным регистрам полезен для программиста, чтобы развернуть количество доступных регистров, например, если алгоритм работает с 16-разрядными данными, программист может использовать один физический 64-разрядный регистр для хранения четырех элементов и работают на них независимо (но не параллельно).
ISA, которые имеют инструкции с переменной длиной, также могут извлечь выгоду из использования частичного регистра, поскольку обычно это означает меньшие непосредственные значения, например, и инструкция, которая устанавливает регистр для определенного значения, обычно имеет непосредственный операнд, который соответствует размеру загружаемого регистра (хотя RISC обычно подписывает-расширяет или нулевое - расширяет его).
Аппаратные средства, как правило, работает на всех битах параллельно в любом случае. 64-разрядный xor не медленнее, чем 8-бит xor. Только несколько операций на некоторых процессорах медленнее для большего размера операнда. (x86 имеет переменный размер операнда, хотя ширина регистра является фиксированной. См. http://agner.org/optimize/ для таблиц инструкций и особенно смотря на задержку/пропускную способность для MUL и DIV (зависит от операнда) vs. почти все остальное (постоянное).) –