Паралелізм на рівні команд
Паралелізм на рівні команд (англ. Instruction-level parallelism, ILP) — є мірою того, яка кількість операцій в комп'ютерній програмі може виконуватися одночасно. Потенційне поєднання виконання команд називається паралелізмом на рівні команд.
Є два підходи до паралелізму на рівні команд:
Рівень апаратного забезпечення працює на динамічному паралелізмі, тоді як, рівень програмного забезпечення працює на статичному паралелізмі. Процесор Pentium працює на динамічній послідовності паралельного виконання, але Itanium процесор працює на статичному паралелізмі.
Розглянемо наступну програму:
- e = a + b
- f = c + d
- m = e * f
Операція 3 залежить від результатів 1 і 2, тому вона не може бути розрахована, поки обидві з них не будуть завершені. Однак операції 1 і 2 не залежать від будь-якої іншої операції, тому вони можуть бути обчислені одночасно. Якщо припустити, що кожна операція може бути завершена в одну одиницю часу, то ці три інструкції можуть бути завершені в цілому за дві одиниці часу, даючи ILP 3/2.
Мета розробників компілятора і процесора, полягає у виявленні та отриманні від ILP максимально можливої вигоди. Звичайні програми, як правило, написані під послідовну модель виконання, де команди виконуються одна за одною в порядку, встановленому програмістом. ILP дозволяє компілятору і процесору перекривати виконання декількох інструкцій або навіть змінити порядок виконання команд.
Скільки ILP існує в програмах — сильно залежить від області застосування програми. У деяких областях, таких як графіка і наукові обчислення, число може бути дуже великим. Тим не менш, робочі навантаження, такі як криптографія, можуть проявляти набагато менше паралелізму.
Мікроархітектурні методи для забезпечення ILP::
- Обчислювальний конвеєр, де виконання декількох інструкцій може частково перекриватися.
- Суперскалярне виконання, VLIW і тісно пов'язана з ними концепція мікропроцесорної архітектури з явним паралелізмом команд, в якій кілька функціональних блоків використовуються для виконання декількох команд паралельно
- Позачергове виконання, де інструкції виконуються в будь-якому порядку, що не порушує залежності даних. Зверніть увагу, що цей метод не залежить ні від конвеєра, ні від суперскаляра. Поточна реалізація позачергового виконання динамічно (тобто, в той час як програма виконується і без всякої допомоги з боку компілятора) витягує ILP від звичайних програм. Як альтернативу можна витягти цей паралелізм під час компіляції і якось передати цю інформацію до апаратного забезпечення. Через складність техніки перерахунку позачергового виконання, промисловість переглянула набір команд, які явно кодують кілька незалежних операцій в інструкції.
- Перейменування регістрів, яке посилається на метод, який використовується, щоб уникнути непотрібної серіалізації операцій, вироблених програмою, які накладають повторне використання регістрів по цих операціях, використовується для позачергового виконання.
- Спекулятивне виконання, яке дозволяє виконанню повних інструкцій або частин інструкцій переконатися, чи слід цьому виконанню відбутися. Часто використовуваною формою спекулятивного виконання є пропозиція управління потоком, де інструкції пропускають управління потоком інструкцій (наприклад, перехід) і виконуються до того як визначиться мета потоку управління інструкцій. Кілька інших форми спекулятивного виконання були запропоновані і використовуються в тому числі для спекулятивного виконання, обумовлені прогнозуванням значення, прогнозуванням залежностей пам'яті і прогнозування латентності кешу.
- Передбачення переходів, який використовується, щоб уникнути припинення контролю залежностей, які необхідно вирішити. Провісник переходів використовується з спекулятивним виконанням.
Потокові архітектури являють собою інший клас архітектур, де ILP явно вказані. Наприклад, архітектуру TRIPS.
Реалізації
В останні роки методи ILP використовувалися для підвищення продуктивності, незважаючи на зростаючу невідповідність між робочими частотами процесора і часом доступу до пам'яті (ранні реалізації ILP, такі як IBM System/360 Model 91 використовували методи ILP щоб подолати обмеження, що накладаються відносно невеликого файлу регістрів).
В даний час його втрати кешу в основну пам'ять будуть коштувати кілька сотень циклів процесора. Хоча в принципі можна використовувати ILP допускаючи навіть такі затримки пам'яті зв'язують ресурси і витрати розсіюваної потужності непропорційно. Крім того, складність і часто латентність базового обладнання структур призводить до зниження робочої частоти і подальшого скорочення переваг. Таким чином, вищезазначені методи виявляються недостатніми, щоб стримати процесор від зупинки даних поза кристалом. Замість цього, галузь рухається в бік використання більш високих рівнів паралелізму, які можуть бути використані за допомогою таких методів, як багатопроцесорність і багатопоточність .