Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Как связаны разрядность процессора, разрядность его регистров, размер адресуемой памяти и как все это влияет на быстродействие?


Изучаю архитектуру компьютера по книгам Танненбаума  и Харрис.

И все равно не понимаю многих вроде бы простых вещей. Вопросов много, но почти все они так или иначе связаны с машинным словом. Это самая непонятная для меня тема.

Хочу оговориться, что я понимаю, что между разрядностью процессора, разрядность
регистров, размером адресуемой памяти и быстродействием компьютера существует прямая связь. Я не понимаю почему так.  


Как рязрядность процессора влияет на его быстродействие. Вроде как
64-разрядные быстрее чем 32-разрядные. Но почему? Не понимаю.
Приведу пример: Система команд для процессоров MIPS-32. Там ведь
сама архитектура команд такая, что все команды убираются в 32 бита.
То есть, если сделать 64 бита, старшие 32 бита придется просто
заполнить нулями. И что, процессор станет от этого быстрее?
Из Википедии: 


  разрядность процессора (разрядность его машинного слова). Машинное
  слово — машинно-зависимая и платформозависимая величина, измеряемая в
  битах или байтах (тритах или трайтах), равная разрядности регистров.


Почему машинное слово обязательно должно быть равно разрядности
регистров? Почему мы не можем читать данные по 64 бита за раз имея
16-разрядные регистры, например?
Теперь про память. Снова из Википедии:


  64-битный регистр способен хранить в себе одно из 264 = 18 446 744 073
  709 551 616 значений. Процессор с 64-битной адресацией памяти может
  напрямую обращаться к 16 ЭБ памяти.


Я понимаю что количество памяти зависит от адреса количества бит в
адресе. Но опять же, как это связано с регистрами? Я вижу только
одну связь: если мы собираемся хранить адреса в регистрах, то
регистры должны иметь ту же разрядность что и адреса. Но разве
обязательно хранить адреса в регистрах?
Про разрядность ОС я вроде понимаю, но хотелось бы уточнить. Как я
понимаю, ОС связана со всем этим так: 64-разрядная ОС работает на
64-разрядном процессоре, 32-разрядная - на 32-разрядном. То есть с
появлением 64-разрядного процессора было неизбежно появление
64-разрядной ОС. Правильно ли я понимаю это?
И вот тут вопрос скорее исторический, но так же очень важный для
меня. Я всегда считал что 64-разрядный процессор появился недавно и
это преподносилось как большой прорыв. А на Википедии вот что
написано: 


  Требования к точности научных вычислений возросли, и в 1974 году
  появилась первая машина с 64-битным словом — суперкомпьютер Cray-1

В чем вообще была сложность создать 64-разрядный процессор? И в чем
сейчас сложность создать, например, 128-разрядный процессор? От чего
это вообще зависит? Чем определяется? Разрядностью регистров? А в
чем сложность увеличить разрядность регистров? Чем она определяется?

    


Ответы

Ответ 1



Основная работа процессора заключается не в передаче информации, а в ее преобразовании Регистр - это та же оперативная память, но от которой идет прямая разводка к куче исполняющи устройств, которые производят арифметические и другие действия с данными. Этих лини делается очень много. На каждый разряд регистра будет свой и большой набор транзисторов для выполнения конкретных операций. Отсюда и сложность увеличения количества разрядов. При росте размерности регистра в 2 раза как минимум удваивается и объем всех исполняющих устройств. растет кристалл, растет тепловыделение. Посмотрите на систему команд, любые преобразования данных требуют участия как миниму одного регистра. А часть операций происходит исключительно в регистрах. В x86 архитектур можно добавить к регистру память. Но например нельзя произвести сдвиг или умножение ячейки памяти. нельзя сложить значения двух ячеек памяти не забрав предварительно одну из них в регистр. потому что исполнительный механизм данной операции имеет прямую разводку только с регистром. В: Почему мы не можем читать данные по 64 бита за раз имея 16-разрядные регистры Можем, но куда читать и зачем ? Вообще современные процессоры так и делают, заполняю внутренний кеш и оперируют при этом разрядностью шины, регистры тут не участвуют. Прочитал мы 64 бита в кеш, а теперь нам надо их умножить на 3, например. А регистр у нас 16 битный, как умножать ? Правильно, частями, применяя кучу дополнительных преобразований и тратя на это драгоценные такты. Поэтому размерность шины передачи вторична. Главное - это разрядность регистра. И это назвали машинным словом. В: Но разве обязательно хранить адреса в регистрах? Да, обязательно. Процессору как то надо сказать - возьми вот там данные. А там эт где ? В памяти ? А как тогда будет выглядеть инструкция - возьми адрес, находящийс по адресу, вон по тому адресу лежащему в инструкции ... А если нам надо работать подряд с блоком данных (мы в цикле обрабатываем массив) и этот адрес надо увеличивать (т.е. выполнять сложение, которое мы можем произвести только в регистре) Кстати, разрядность команды и разрядность процессора разные вещи. В MIPS упаковал все команды в 32 бита. А x86 платформа с незапамятных времен была с переменной разрядность операций. от коротких однобайтных, до длиннющих монстров с кучей префиксов. Разрядность процессора = разрядность регистра = максимальный размер обрабатываемой одной инструкцией информации (в обычных командах, из которых состоит основной код, всякие SSE не берем). Быстродействие - кто сказал, что разрядность играет ключевую роль. Да, разрядност влияет. Бум на 64 битные процессоры и ОС отличный пример маркетинга. 64 битный код част оказывается медленнее 32 битного. Если программе не надо адресовать более 4 Гб памяти а ее код хранит 64 битные адреса - то размер программы в 2 раза больше. Больше размер - дольше читать в кеш. Требуется больше памяти. Начинается гонка за гигабайтами оперативки ... Сейчас даже пошел обратный процесс. во всю развивается x32 ABI - работа 32 битного кода в 64 битном режиме. Но давайте возьмем RSA-шифрование, которое используется в том же повсеместном SSL Для него необходимы сложные расчеты с очень большими числами. Предположим, что у на нет специализированных инструкций процессора для него. Разумеется если процессор оперирует 64 битными регистрами он выполнит расчет в 2 раза быстрее, просто потому, что за один такт он способен обработать в 2 раза больше информации. Да, на расчетных задачах с большими числами выигрыш от увеличения разрядности сложно переоценить. В: 64-разрядная ОС работает на 64-разрядном процессоре, 32-разрядная - на 32-разрядном. Нет, 64 битная ОС состоит из 64 битного кода, способного адресовать память 64 битным адресами. Конечно она может это делать только на 64 битном процессоре. Появление О конечно было неизбежно. Хотя и тут маркетинг сыграл значительную роль. 90% разбирающег в компах народа считают, что для адресации свыше 4 Гб оперативной памяти на платформе intel нужна 64 Бит ОС. Да, в Windows было насильно введено такое ограничение. Процессоры Intel в 32 битном режиме PAE адресуют до 64 Гб оперативки, при этом правда один процесс ограничен 4 Гб. 32 Бит linux отлично себя чувствует с такими объемами. По поводу истории и сложности построения 128 битных регистров ... вопрос только цене. Да, на каких то системах не массового рынка это сделано давно, на массовом рынк было не нужно, вот и не появлялось. И тогда оно стоило баснословно, ибо как мы говорил в начале - каждый бит регистра - это куча исполняющих устройств, а при тех технология производства разместить на кристалле столько транзисторов было, скажем так, затруднительно. Полноценные 128 битные процессоры попросту не нужны, особенно для массового рынка, адресовать больше 64 ЭБ памяти, где бы ее еще найти. Вообще сейчас во всех процессорах intel есть 16 регистров SSE размером 128 бит, это не регистры общего назначения, они для расчетов. А на современных Xeon, предназначенных для серьезных вычислений, 32 регистра ZMM по 512 бит (см. AVX)...

Ответ 2



Я вижу только одну связь: если мы собираемся хранить адреса в регистрах, то регистры должны иметь ту же разрядность что и адреса. Чтобы окончательно вас запутать: Не должны. К примеру, восьмибитные процессоры умеют адресовать 16 бит: инструкция доступа памяти выбирает адрес не из регистра, а из регистровой пары. 8086-й процессор с 16-ю разрядными регистрами умеет адресовать 20 бит (базовый регистр << 4 + регистр смещения). Упомянутый Cray-1 имел 64-разрядные регистры данных и 24-разрядные регистры адреса.

Ответ 3



Всё относительно. К примеру, рас-параллеливание алгоритмов может выигрывать на процессорах с нескольким ядрами, но лишь в случае - если алгоритм поддаётся распараллеливанию. Т.е. если задачу можно разделить на две параллельные нити. Так же и с разрядностью процессора. Если алгоритм можно оптимизировать под большие регистры - то да, на x86_64 он будет выполняться быстрее, чем на i386. Но если сам алгоритм не поддаётся оптимизации и его скорость не зависит от размера регистра - то никакого ускорения Вы не получите.

Комментариев нет:

Отправить комментарий