Автор работы: Пользователь скрыл имя, 11 Июня 2013 в 18:24, курсовая работа
Мета дослідження – розглянути принципи мультитредової архітектури та описати функціонування сучасних мультитредових мікропроцесорів.
Для досягнення мети дослідження було визначено наступні завдання:
розглянути поняття тред та багатопотоковість;
дослідити мультитредову архітектуру;
вказати на особливості виявлення тредів;
вказати на перспективи мультитредовості.
ВСТУП…………………………………………… 5
РОЗДІЛ І АНАЛІТИЧНИЙ ОГЛЯД ПРЕДМЕТНОЇ ОБЛАСТІ..….... 7
1.1 Основи мультитредової архітектури ……..………………………....... 7
1.2 Переваги мультитредової архітектури 11
1.3 Виявлення тредів 13
1.3 Специфіка мультитредових моделей розпаралелювання 14
РОЗДІЛ ІІ ТЕОРЕТИЧНА ЧАСТИНА 17
2.1 Мультитредові процесори з тредами, що виявляються шляхом аналізу
потоків управління програми 17
2.2 Мультитредові процесори з тредами, що виявляються шляхом аналізу
потоків даних програми 25
РОЗДІЛ ІІІ ПРАКТИЧНА ЧАСТИНА 29
3.1 Опис технології Hyper-Threading 29
3.2 Особливості реалізації Hyper-Threading у процесорі Pentium 4 на
прикладі виконання коду різного типу 32
ВИСНОВКИ 39
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 42
Основними перешкодами для подальшого зростання продуктивності мікропроцесорів традиційної архітектури при збільшенні ступеня інтеграції та супутньої можливості зростання тактової частоти служать обмеження швидкості поширення сигналів на кристалі, енергоспоживання і тепловиділення. Зі зменшенням технологічних норм все більша частина енергії споживається не для обчислень, а для передачі і зберігання даних. Вже при технологічних нормах 90 нм на тактовій частоті 1 ГГц 64-розрядний блок операцій з плаваючою точкою займає площу менше, ніж 1кв. мм і споживає близько 50 pJ енергії на одну операцію, в той час як при передачі даних на відстань 14 мм, яка дорівнює довжині боку кристала, витрачається в 20 разів більше, близько 1 nJ. У мікропроцесорі Itanium тільки 1% площі кристала обробляє дані, а 99% займають схеми управління та зберігання даних. Потужність, що розсіюється на одиницю площі сучасних кристалів досягає значень, що роблять неможливим подальше зростання частоти для сучасних традиційних процесорів.
Суперскалярні мікропроцесори і мікропроцесори з довгим командним словом мають один лічильник команд і, в силу цього, можуть бути названі однотредовимі. У цих мікропроцесорах команди, досліджувані на предмет можливості їх паралельного спільного виконання, прив'язані до лічильника команд процесора або вікном виконання як в суперскалярних мікропроцесорах, або довгою командою як в мікропроцессоpax з довгим командним словом. Для того щоб більш агресивно вибирати для паралельного виконання команди однієї або кількох програм, в мікропроцесор вводиться кілька лічильників команд і, можливо, інше устаткування. Мікропроцесори з декількома лічильниками команд отримали назву мультитредових.
Мультитредова архітектура вирішує проблему боротьби з простоями функціональних пристроїв процесора, що виникають через неможливість виконання наступної команди, шляхом перемикання на інший регістровий файл, тим самим процесор отримує інший контекст для продовження обчислень, переходячи до виконання іншого треду (процесу).
Переключення процесора на інший регістровий файл виконується або по настанню деякої події, що тягне за собою простій процесора (промах у кеш-пам'ять, звернення до оперативної пам'яті, настуння переривання), або примусово, наприклад, в кожному такті, як у Теrа МТА.
При всій відмінності підходів до створення мультитредових мікропроцесорів загальним в них є введення множини процесорних елементів, що містять пристрій вибірки команд, яке організовує вікно виконання для одного треду. У рамках одного треду може виконуватися передбачення переходів, перейменування регістрів, динамічна підготовка команд до виконання. Тим самим, загальна кількість команд, що знаходяться в обробці, значно перевищує розмір вікна виконання суперскалярного процесора, з одного боку, і тактова частота не лімітується розміром вікна виконання, з іншого боку.
Виявлення тредів може виконуватися компілятором при аналізі вихідного коду на мові високого рівня або виконуваного коду програми. Однак компілятори не завжди можуть вірішити проблеми залежностей при використанні регістрів і комірок пам'яті між тредами, що вимагає вирішення цих залежностей вже в ході виконання тредів.
Для цього в мікропроцесор вводиться спеціальна апаратура умовного виконання тредів, що передбачає повернення з відкиданням напрацьованих результатів у разі виявлення порушення залежностей між тредами. Порушенням залежності, наприклад, може служити запис по обчислюваній адресі в одному треді в ту ж комірку пам'яті, з якої виконується читання, яке має слідувати за цим записом, в іншому треді. У цьому випадку, якщо адреси запису і читання не збігаються, порушення відсутня. При збігу адрес - фіксується порушення, яке має повернути виконання треду до команди читання правильного значення.
Інтерфейс між апаратурою мультитредового процесора, що підтримує протікання кожного окремого треду, і апаратурою, загальною для виконання всіх тредів, може бути встановлений як після пристроїв вибірки команд треду і функціональних пристроїв, які належать треду, так і на рівні доступу до пам'яті, що розділяється. У першому випадку кожен тред використовує власні функціональні пристрої, наприклад, цілочисельний АЛП і ряд загальних для всіх тредів функціональних пристроїв, наприклад, для виконання операцій з плаваючою крапкою. Тісний зв'язок по ресурсах дозволяє ефективно виконувати послідовні програми з сильною залежністю між тредами. У цьому випадку має місце реалізація мультискалярного мультитредового процесора (SMT - simultaneous multithreading).
У другому випадку для виконання кожного треду фактично виділяється функціонально закінчений процесор. У цілому, ця структура орієнтована на виконання незалежних і слабко пов'язаних тредів, породжуваних або однією програмою, або їх сукупністю. У цьому випадку скоріше треба говорити не про процесор, а про однокристальну систему (CMP - chip multiprocessing).
1.2 Переваги мультитредової архітектури
Мультитредовий процесор має деякі властивості, які вигідно відрізняють його від традиційних суперскалярних мікропроцесорів.
При суперскалярному підході точність передбачення розгалужень обмежує ступінь паралелізму. Якщо середня ймовірність правильного передбачення переходу 0,9, то ймовірність правильного передбачення на п'ять розгалужень вперед тільки 0,6.
Мультитредовий процесор має велику глибину передбачення і забезпечує велику ймовірність вибору правильного напряму обчислень. Ця властивість обумовлена вибірковістю передбачення гілок. Мультитредовий процесор розбиває послідовний потік команд на сегменти. Хоча сегменти можуть містити внутрішні гілки, планувальник повинен передбачати лише гілки, які відокремлюють сегменти. Гілки, що містяться всередині сегментів, не передбачаються (якщо вони не передбачені окремо всередині процесора).
Для суперскалярних процесорів наявність широкого вікна виконання призводить до збільшення числа відкладених команд і ускладнює контроль результатів виконання всіх команд в цьому вікні.
У мультитредовій реалізації вікно може бути дуже широким, проте в будь-який момент часу тільки кілька команд повинні бути розглянуті на предмет видачі результатів (тільки одна для кожного процесора). Межі вікна відкладених команд можуть бути ідентифіковані першою та останньою командами в черзі на виконання.
Для одночасної видачі n результатів в процесорі повинна використовуватися логіка зі складністю n2, щоб виконати перехресну перевірку залежностей команд. У суперскалярному процесорі це обмежує пропускну здатність логіки видачі. У мультитредовому процесорі кожен процесор видає команди незалежно, тобто складність логіки порядку n.
Перш ніж змінити порядок доступ до пам'яті, необхідно ідентифікувати і обчислити всі адреси завантаження і запису значень.
Залежності між операторами програми з управління представляються як граф управляючих залежностей (ГУЗ), в якому вершинами є сегменти, а дугами задається порядок їх виконання.
У суперскалярному процесорі в принципі можлива генерація досить широкого вікна виконання з великою глибиною передбачення розгалужень. Можна генерувати дуже гнучкий план виконання команд. Однак суперскалярний процесор не має уявлення про ГУЗ програми.
Тому і виникає необхідність передбачення кожного переходу, що, в кінцевому результаті, призводить до зниження точності прогнозу і продуктивності.
Мультитредовий процесор багато в чому схожий на багатопроцесорну систему зі спільною пам'яттю і дуже низьким рівнем непродуктивних витрат на планування. Головна їхня відмінність полягає в тому, то багатопроцесорна система вимагає, щоб компілятор ділив програму на сегменти, де всі співвідношення залежностей між сегментами відомі (передбачені програмістом шляхом використання операторів синхронізації і міжпроцесорних комунікацій), а мультитредовий процесор не вимагає ніякого апріорного знання щодо зв'язків команд по керуванню та по даних.
Мультитредова архітектура поєднує принципи низько- та високорівневого розпаралелювання, методи аналізу статичної та динамічної структур програми, завдяки чому дозволяє домогтися більш високих значень ефективності використання обчислювальних ресурсів процесора, ніж інші типи архітектур. Фактично в мультитредових процесорах реалізований симбіоз автоматично розпаралелювального компілятора, що дає вказівки апаратурі процесора у вигляді відміток команд і спеціальних команд, і апаратних засобів, що сприймають ці вказівки.
Звичайно, викладений підхід не є єдино можливим при реалізації цієї плідної ідеї - залучення компілятора до розподілу завдань по процесорах і балансуванню завантаження процесорів в багатопроцесорних системах.
1.3 Виявлення тредів
Треди можуть виявлятися як на основі потоків управління (control driven), так і на основі потоків даних (data driven) програм. Треди бувають умовно чи безумовно виконуваними.
У безумовно виконуваних тредах доступ до розділених змінним у регістрах і пам'яті повинен бути синхронізований. Треди повинні породжуватися оператором fork тільки тоді, коли вони дійсно необхідні, оскільки апаратура процесора не відстежує порушень порядку доступу. Стан розділюваних змінних має бути таким же, як при послідовному виконанні програми. Безумовно виконувані треди мають явно задані оператори синхронізації та взаємодії між собою. Відмінність безумовно виконуваних тредів на мультитредовому процесорі від протікання тредів в процесорах паралельної системи полягає в тому, що в другому випадку процеси взаємодіють між собою за допомогою пересилання даних і синхронізації без всяких обмежень, тому що вони являють собою паралельну програму. У першому ж випадку передачі даних можливі тільки від раніше породжених тредів до тредів, породжених пізніше, тому що в цьому випадку виконується послідовна програма.
В умовно виконуваних тредах потрібний порядок доступу до розділюваних змінних підтримується апаратними засобами, що виявляють порушення порядку доступу. Доступ до змінних виконується у припущенні, що він допустимий, а якщо виявилося, що відбулося порушення порядку, то невірні результати відкидаються. Для цього можуть бути використані буфери, які зберігають значення, не змінюючи архітектурного стану треду до підтвердження правильності доступу.
При виявленні тредів на основі потоків управління аналізуються керуючі структури послідовної програми, такі як цикли, ітерації звернення до функцій і підпрограм. Робиться спроба виявлення сегментів коду з мінімальними взаємозалежностями.
На концептуальному рівні треди, які виявляються на основі потоків даних програми, складаються з однієї команди. Тред породжується, коли у команди з'являється один операнд. Можливим розширенням концепції цих тредів служить виконання не однієї команди по готовності всіх операндів, а послідовності команд, очолюваної цією командою. Передачі даних між тредами вказуються явно.
Автоматичне перетворення програм на імперативних мовах в програми потоків даних знаходиться в стадії дослідження. Програми потоків даних пишуться на функціональних мовами або спеціальних мовах потоків даних.
1.4 Специфіка мультитредових моделей розпаралелювання
При реалізації мультитредових архітектур важливо встановити, що виконується програмістом, компілятором, операційною системою і процесором. Процесор повинен виконувати треди, але є ще управління тредами: вибірка тредів, породження тредів, встановлення порядку їх виконання, призначення ресурсів, комунікації між тредами.
Найбільш складний процес, а саме: вибірку тредів повинен робити компілятор чи програміст. При цьому необхідно формувати допоміжні вказівки для апаратури, що дозволяють надалі спростити роботу процесора.
Мультитредова архітектура пропонує рішення для наступних проблем, що перешкоджають розвитку суперскалярних мікропроцесорів:
- ефективного завантаження великої кількості функціональних пристроїв;
- подолання розриву у швидкодії виконання регістрових команд і команд доступу в пам'ять;
- зменшення часу обслуговування переривань в порівнянні з суперскалярними процесорами за рахунок можливості виділення окремого треду, який виконує програми обробки переривання, і можливість роботи в режимі жорсткого реального часу;
- ефективного поєднання обчислень в мікропроцесорах з міжпроцесорними обмінами.
3.1 Опис технології Hyper-
Hyper-threading (англ. Hyper-threading - гіперпоточність, офіційна назва Hyper-Threading Technology (HTT)) - це торгова марка компанії Intel для реалізації технології «одночасної мультипоточності» (англ. Simultaneous multithreading) на мікроархітектурі Pentium 4. Розширена форма суперпоточності (англ. Super-threading), що вперше з'явилася в процесорах Intel Xeon і пізніше додана в процесори Pentium 4. Процесори Pentium 4 з включеним Hyper-threading операційна система визначає як два різних процесора замість одного. У процесорах Core 2 Duo підтримка технології Hyper-threading не була реалізована. У процесорах Core i7 знову використовується Hyper-threading, при цьому кожна фізична ядро процесора визначається операційною системою як два логічних. Так само ця технологія присутня в мобільних процесорах Core i3 і Core i5.
Основна проблема збільшення продуктивності процесорів полягає в тому, що кількість виконуваних за такт інструкцій зростає не пропорційно числу виконуваних модулів в процесорі, а набагато повільніше. Зокрема, хоча Pentium 4 і містить чотири паралельних блоки для операцій з цілими числами, два блоки для роботи з дійсними числами і два блоки для роботи з пам'яттю, одночасно всі ці ресурси практично ніколи не використовуються. У переважній більшості випадків істотна частина процесора простоює або в очікуванні даних, або через її непотрібність при виконанні чергової операції. Якщо з простоями при відсутності даних ще можна якось боротися, нарощуючи обсяг кеш-пам'яті, то завантажити весь процесор цілком при існуючій концепції послідовних обчислень ніяк не вийде. Наприклад, якщо вже програма виконує додавання цілих чисел, блоки операцій з дійсними числами задіяні не будуть. У підсумку, отримуємо досить сумну картину: більшість x86 програм використовує одночасно не більше 35% виконавчих