Що означає банківська справа при застосуванні до реєстрів?


13

Ця відповідь на запитання в StackOverflow про те, що означає банківська справа в контексті банківських реєстрів ARM, вказує на певну плутанину щодо значення банківської діяльності при застосуванні до реєстрів.

Що означає банківська діяльність щодо реєстрів?

Відповіді:


16

Слово банкінг використовується в двох різних значеннях при застосуванні до регістрів.

Банківські регістри для обробки перерв

Сенс, з яким стосується питання StackOverflow, аналогічний використанню в (пам'яті) банку комутації (використовується деякими 8-бітовими та 16-бітовими процесорами) у функції . Назви колекції регістрів відображаються в іншій колекції фізичних регістрів. ARMv7 забезпечує один додатковий банк для 7 з 16 GPR та ще п'ять банків для реєстру вказівника стека та реєстру посилань (ARM використовує регістр посилань, щоб зберегти ПК, який буде використовуватися для повернення з переривання). Itanium надає додатковий банк для 16 з 31 статичних GPR. (MIPS надає цілі набори з 31 GPR, називаючи їх "тіньовими регістрами".)

На відміну від комутації банку пам'яті, основною метою цього типу реєстрування банківських реєстрів є (як правило) не розширення адресного сховища, а забезпечення швидшого керування перериваннями, уникаючи необхідності збереження значень реєстру, завантаження значень, використовуваних обробником переривання, та відновлення вихідних зареєструвати значення та спростити обробку переривань.

(Використання стека програми для збереження стану реєстру відкриває можливість переповнення пам'яті, виділеної для цього стека, генеруючи виняток, який потім повинен якось обробляти економію стану. Гірше, якщо сторінка пам'яті, що негайно перевищує межу стека, може бути записана ескалація привілею обробника переривання, але не через додаток, тоді програма ефективно записує на сторінку, на яку не має дозволу на запис. Деякі ABI уникали цієї проблеми, визначаючи один або кілька реєстрів як мінливі через переривання. Це дозволяє переривати обробник для завантаження вказівника на збереження стану без стану прикладного всмоктування, але на відміну від банківських регістрів, такі програмно визначені програмне забезпечення нестабільних регістрів не можна вірити, що вони не змінюються прикладним програмним забезпеченням.)

(За допомогою таких банків реєстрів як фіксованих вікон було запропоновано розширити кількість доступних регістрів, наприклад, "Збільшення кількості ефективних регістрів у процесорі малої потужності за допомогою файлу віконного реєстру", Rajiv A. Ravindran et al., 2003. Можна також відзначити подібність реєстрації стека, що використовується для уникнення збереження реєстру та відновлення накладних витрат для викликів функцій, як у Itanium та SPARC [який використовує термін "зареєструвати вікна"], хоча ці механізми зазвичай зміщують імена регістрів, а не замінюють їх з.)

Що стосується обладнання, банківські регістри можуть бути реалізовані шляхом перейменування регістрів в декодування інструкцій. Для відносно складної банківської системи ARM це, мабуть, було б кращим механізмом. Для такої простої банківської системи, як та, яка використовується Itanium з єдиним додатковим банком з потужністю двох номерів регістрів, може бути практичним включення перейменування в індексацію самого файлу реєстру. (Звичайно, це не було б сумісно з певними формами перейменування, що використовуються для підтримки виконання поза замовленням.)

Визнаючи, що різні банки не мають доступу до них одночасно, розумна оптимізація за допомогою цього механізму може зменшити (обмежений провідним) область надмірно перенесеного файлу реєстру за допомогою "3D-регістрів". (Ця методика була запропонована в контексті вікон реєстру SPARC - "Тривимірний файл реєстру для суперскалярних процесорів", Tremblay et al., 1995, - і Intel використовував варіант для SoEMT - "Багатопотоковий, захищений паритетом Файли реєстрації 128-слів Word на двоядерному процесорі сімейства Itanium ", Fetzer et al., 2005.)

Банківська справа для збільшення кількості можливих звернень

Другий сенс, у якому термін "банкінг" використовується для регістрів, стосується поділу набору регістрів на групи (банки), до кожного з яких можна отримати доступ паралельно. Використання чотирьох банків збільшує максимальну кількість доступу, підтримуваних коефіцієнтом чотири, що дозволяє кожному банку підтримувати меншу кількість портів доступу (зменшення площі та енерговикористання) для заданого ефективної кількості доступу. Однак, якщо доступ у певному циклі не рівномірно розподілений між банками, максимальна кількість доступу не буде досягнута. Навіть у випадку великої кількості банків щодо бажаного числа доступу конфлікти банків можуть, в гіршому випадку, обмежити фактичну кількість доступу до кількості портів, наданих одним банком.

Було багато наукових праць про файли банківських реєстрів ( пошук Google Scholar) та запропоновано кілька загальних методик зменшення впливу банківських конфліктів. Найбільш очевидною методикою є буферування інструкцій (як це робиться для виконання поза замовленнями), що забезпечує деяке статистичне усереднення банківських конфліктів. Можна також прочитати операнд реєстру до того, як інструкція буде готова до виконання (наприклад, якщо інший операнд ще не готовий або виконання структурної небезпеки затримує). Виділення регістрів банкам може використовувати інформацію про очікуване використання для зменшення ймовірності конфліктів. (Програмне забезпечення може надавати перевагу, використовуючи регістри очікуваним чином.) Використовуючи імена віртуальних фізичних регістрів, можна затримати розподіл імен фізичних регістрів (і, таким чином, банків), поки значення не збережеться в реєстрі;

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

(Однією з альтернатив такому банкінгу є реплікація файлу реєстру. Використання двох копій файлу реєстру дозволяє кожній копії вимагати вдвічі менше портів для читання, хоча потрібна однакова кількість портів запису. Ця методика використовувалася в POWER2 та Alpha 21264 і зазвичай використовується у високопродуктивних процесорах.)

Підсумок

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

Тимчасовий банкінг, як правило, піддається програмному забезпеченню і використовується для зменшення накладних витрат (і складності) переривань. (Концептуально перемикання потоку в процесорі Switch-on-Event-MultiThreaded дуже схоже на обробку переривань і може використовувати подібні механізми, щоб зменшити накладні витрати.)

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.