Процессоры - груз обратной совместимости.
В одном паблике у школьников и прочей аудитории разрыв шаблона был, когда я написал, что раньше в байте могло и 6, и 7, и даже 9 бит. Восьмеричная запись чисел в Си, думаю, оттуда пришла - удобно 9 бит тремя символами писать.
Так вот, мне кажется нерациональным, что байты до сих пор используются. Было бы логично забить на остальные типы и оставить только int на 32 бита и на 64. (К слову, в JVM так и есть, для всяких byte и short есть только команды загрузки в регистр и сохранения обратно)
Зачем может быть нужен отдельный байт? Хранить bool? Простите, уже нерационально 8 бит занимать. Ну а тут 32, всего лишь в 4 раза больше. Если кто-то захочет экономить, может как и сейчас, упаковать 32 значения в инт. Хранить символ текста? Кодировки типа юникод всё равно не влазят. При хранении структур компилятор их любит выравнивать, чтобы кратно 4 байтам было.
В итоге из 32 бит адреса последние два практически не используются. Ещё в наследие достался всякий треш с регистрами - ah, al, ax, eax, rax - по всем из них доступно практически одно и то же. Есть всякие флаги типа флага чётности, которые никто не использует, но нет исключений при переполнении - хотя второе нужнее.
Есть расширения типа x87 и MMX, которые делают почти одно и то же, но которые непоиспользовать одновременно, есть ещё SSE. Но для работы с ними данные в памяти, опять же, надо выравнивать (к слову о ненужности современных байтов), я не встречал способа кратко и красиво написать SIMD команды в высокоуровневом языке программирования. Компиляторы, имхо, самостоятельно могут сделать криво или вообще не сделать.
Да, интел пытались сделать Itanium c несовместимой системой команд и провалились. Мне интересно - когда будет адекватная новая архитектура? Возможно, с уклоном в параллельность или ещё что-нибудь, не важно. Но груз совместимости, имхо, пора сбросить и забыть.
Можно проанализировать кучу современного ПО, понять, как часто та или иная инструкция выполняется, в каком контексте это происходит. Можно на основе этого разработать систему команд, удобную для декодирования процессором и компактную по объёму кода.
ПО с открытым исходным кодом, опять же, при желании можно скомпилировать под другую архитектуру - надо только компилятор переписать.
Ядра процессора, имхо, можно начать делать разными. Пусть, например, из 4 ядер в обычном ноуте два медленно работают c floating-point, но зато тратят минимум энергии и исполняют процессы, которые вычисления с плавающей запятой не используют. Другие два - работают быстро с чем угодно, но жрут энергию.
P.S. А ещё если бы ячейки были по 32 бита - адресного пространства хватило бы на 16 современных гигабайт.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|