Як пов’язані розрядність процесора, розрядність його регістрів, розмір пам’яті, і як все

Вивчаю архітектуру комп'ютера по книгам Танненбаума і Харріс.

І все одно не розумію багатьох начебто простих речей. Питань багато, але майже всі вони так чи інакше пов'язані з машинним словом. Це сама незрозуміла для мене тема.

  1. Як розрядний процесор впливає на його швидкодію. Ніби як 64-розрядні швидше ніж 32-розрядні. Але чому? Не розумію. Наведу приклад: Система команд для процесорів MIPS-32. Адже там сама архітектура команд така, що всі команди прибираються в 32 біта. Тобто, якщо зробити 64 біта, старші 32 біта доведеться просто заповнити нулями. І що, процесор стане від цього швидше?

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

Тепер про пам'ять. Знову з Вікіпедії:

  • Про розрядність ОС я начебто розумію, але хотілося б уточнити. Як я розумію, ОС пов'язана з усім цим так: 64-розрядна ОС працює на 64-розрядному процесорі, 32-розрядна - на 32-розрядному. Тобто з появою 64-розрядного процесора було неминуче поява 64-розрядної ОС. Чи правильно я розумію це?
  • І ось тут питання скоріше історичний, але так само дуже важливий для мене. Я завжди вважав що 64-розрядний процесор з'явився недавно і це підносилося як великий прорив. А на Вікіпедії ось що написано:

    Вимоги до точності наукових обчислень зросли, і в 1974 році з'явилася перша машина з 64-бітовим словом - суперкомп'ютер Cray-1

    У чому взагалі була складність створити 64-розрядний процесор? І в чому зараз складність створити, наприклад, 128-розрядний процесор? Від чого це взагалі залежить? Чим визначається? Розрядністю регістрів? А в чому складність збільшити розрядність регістрів? Чим вона визначається?

    Основна робота процесора полягає не в передачі інформації, а в її перетворенні. Регістр - це та ж оперативна пам'ять, але від якої йде пряма розводка до купи виконуючих пристроїв, які виробляють арифметичні та інші дії з даними. Цих ліній робиться дуже багато. На кожен розряд регістра буде свій і великий набір транзисторів для виконання конкретних операцій. Звідси і складність збільшення кількості розрядів. При зростанні розмірності регістра в 2 рази як мінімум подвоюється і об'єм всіх виконуючих пристроїв. росте кристал, зростає тепловиділення.

    Подивіться на систему команд, будь-які перетворення даних вимагають участі як мінімум одного регістра. А частина операцій відбувається виключно в регістрах. У x86 архітектурі можна додати до регістру пам'ять. Але наприклад можна зробити зрушення або множення осередки пам'яті. не можна скласти значення двох осередків пам'яті не забравши попередньо одну з них в регістр. тому що виконавчий механізм даної операції має пряму розводку тільки з регістром.

    До речі, розрядність команди і розрядність процесора різні речі. В MIPS упакували все команди в 32 біта. А x86 платформа з незапам'ятних часів була зі змінною розрядністю операцій. від коротких однобайтовим, до довжелезних монстрів з купою префіксів. Розрядність процесора = розрядність регістра = максимальний розмір оброблюваної однією інструкцією інформації (в звичайних командах, з яких складається основний код, всякі SSE не беремо).

    Але давайте візьмемо RSA-шифрування, яке використовується в тому ж повсюдне SSL. Для нього необхідні складні розрахунки з дуже великими числами. Припустимо, що у нас немає спеціалізованих інструкцій процесора для нього. Зрозуміло якщо процесор оперує 64 бітними регістрами він виконає розрахунок в 2 рази швидше, просто тому, що за один такт він здатний обробити в 2 рази більше інформації. Так, на розрахункових задачах з великими числами виграш від збільшення розрядності складно переоцінити.

    В: 64-розрядна ОС працює на 64-розрядному процесорі, 32-розрядна - на 32-розрядному.

    відповідь дан 21 Березня '16 о 22:58

    @ АлександрЕлізаров Взагалі мені здається варто зробити команду ширше регістрів. сама команда ж не в регістр (в загальному розумінні) вантажиться, може в виконавці команди більше місця передбачити. А то буде як то тупо виглядати якщо ми захочемо реалізувати завантаження константи в регістр і не зможемо за одну операцію завантажити в 16 бітний регістр 16 бітове значення. - Mike 22 Березня '16 о 15:41

    Щоб остаточно вас заплутати: Чи не повинні.

    Наприклад, рас-параллеліваніе алгоритмів може вигравати на процесорах з декількома ядрами, але лише в разі - якщо алгоритм піддається распараллеливанию. Тобто якщо завдання можна розділити на дві паралельні нитки.

    Так само і з розрядністю процесора. Якщо алгоритм можна оптимізувати під великі регістри - то так, на x86_64 він буде виконуватися швидше, ніж на i386.

    Але якщо сам алгоритм не піддається оптимізації і його швидкість не залежить від розміру регістра - то ніякого прискорення Ви не отримаєте.