Страницы

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

понедельник, 1 октября 2018 г.

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

Изучаю архитектуру компьютера по книгам Танненбаума и Харрис
И все равно не понимаю многих вроде бы простых вещей. Вопросов много, но почти все они так или иначе связаны с машинным словом. Это самая непонятная для меня тема.
Хочу оговориться, что я понимаю, что между разрядностью процессора, разрядностью регистров, размером адресуемой памяти и быстродействием компьютера существует прямая связь. Я не понимаю почему так.
Как рязрядность процессора влияет на его быстродействие. Вроде как 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-разрядный процессор? От чего это вообще зависит? Чем определяется? Разрядностью регистров? А в чем сложность увеличить разрядность регистров? Чем она определяется?


Ответ

Основная работа процессора заключается не в передаче информации, а в ее преобразовании. Регистр - это та же оперативная память, но от которой идет прямая разводка к куче исполняющих устройств, которые производят арифметические и другие действия с данными. Этих линий делается очень много. На каждый разряд регистра будет свой и большой набор транзисторов для выполнения конкретных операций. Отсюда и сложность увеличения количества разрядов. При росте размерности регистра в 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)...

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

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