Explicit Data Graph Execution
Explicit data graph execution, явне виконання графу даних (EDGE) — це тип архітектури набору команд (ISA), який має на меті покращити обчислювальну продуктивність у порівнянні зі звичайними процесорами, такими як родина Intel x86. EDGE поєднує багато індивідуальних інструкцій у більшу групу, яку називають «гіперблок». Гіперблоки спроектовані для того, щоб можна було реалізувати паралельне виконання інструкцій.
Паралельність сучасних конструкцій центральних процесорів зазвичай реалізується використанням близько восьми внутрішніх блоків і від одного до чотирьох "ядер", конструкція EDGE має намір підтримувати сотні внутрішніх блоків і пропонувати швидкість обробки в сотні разів більшу, ніж існуюча конструкція. Основним внесок в розвиток концепції EDGE вніс Техаський університет в Остіні в рамках програми поліморфних обчислювальних архітектур (DARPA ) із заявленою метою створити до 2012 року одночиповий дизайн процесора з продуктивністю 1 TFLOPS, який ще не реалізований станом на 2018 рік.[1]
Архітектури EDGE - це новий клас ISA, заснований на статичному розміщенні, динамічному дизайні завдань. Системи EDGE компілюють вихідний код у форму, що складається із статично виділених гіперблоків, що містять багато окремих інструкцій, сотні чи тисячі. Потім ці гіперблоки динамічно плануються до виконання процесором. Таким чином, EDGE поєднує в собі переваги VLIW-концепції пошуку незалежних даних під час компіляції з суперскалярною RISC-концепцією виконання інструкцій, коли дані для них стануть доступними.
У переважній більшості реальних програм зв’язок даних та інструкцій є очевидним та явним. Програми поділяються на невеликі блоки, які називаються підпрограмами, процедурами чи методами (залежно від епохи та мови програмування, що використовується), які, як правило, мають чітко визначені точки входу та виходу, куди дані передаються або отримуються. Ця інформація втрачається, оскільки мова високого рівня перетворюється на значно простіший ISA процесора, але ця інформація настільки корисна, що сучасні компілятори узагальнили поняття як " основний блок ", намагаючись ідентифікувати їх у програмах, одночасно оптимізуючи доступ до пам'яті через регістри. Блок інструкцій не містить команд контролю, але може мати попередні інструкції. Граф потоку даних кодується за допомогою цих блоків, вказуючи потік даних від одного блоку інструкцій до іншого або до якоїсь області зберігання.
Основна ідея EDGE полягає в безпосередній підтримці та роботі з цими блоками на рівні ISA. Оскільки основні блоки отримують доступ до пам'яті чітко визначеними способами, процесор може завантажувати відповідні блоки та планувати їх так, що вихід одного блоку надходить безпосередньо в той, який буде споживати його дані. Це усуває необхідність у глобальному файлі реєстру та спрощує завдання компілятора при плануванні доступу до регістрів програмою в цілому кожному базовому блоку надаються власні локальні регістри, а компілятор оптимізує доступ всередині блоку, що набагато простіше завдання.
Системи EDGE мають сильну схожість з мовами потоків даних 1960–1970-их років та 1990-их. Комп’ютери потоку даних виконують програми відповідно до «правила запуску потоку даних», яке передбачає, що інструкція може виконуватися в будь-який час після того, як доступні її операнди. Завдяки ізоляції даних, подібно до EDGE, мови потоків даних за своєю суттю паралельні, і інтерес до них послідував за загальним інтересом до масового паралелізму як рішення загальних обчислювальних проблем. Дослідження, засновані на існуючій на той час технології процесорів, продемонстрували, що машині потоку даних буде важко зберігати достатньо даних у пам'яті центрального процесора, щоб бути широко паралельними, і саме це вузьке місце може вирішити сучасна техніка виготовлення, розмістивши сотні процесорів та їх пам'ять на одній матриці.
Ще однією причиною того, що системи потоку даних не набули популярності, є те, що компіляторам того часу було важко працювати із загальнообов’язковими мовами, такими як C++. Натомість більшість систем потоку даних використовували спеціальні мови, такі як Prograph, що обмежувало їх комерційн е застосуванняй. Десятиліття досліджень та розробки нових компіляторів усунуло багато з цих проблем, і ключова різниця між потоками даних та підходами EDGE полягає в тому, що конструкції EDGE мають намір працювати із загальновживаними мовами.
Процесор на базі EDGE буде складатися з одного або декількох невеликих блоків із власними локальними регістрами; реалістичні конструкції можуть мати сотні цих одиниць. Блоки взаємопов’язані між собою за допомогою виділених міжблокових ліній зв'язку. Завдяки інформації, закодованій у блок компілятором, планувальник може дослідити цілий блок, щоб перевірити, чи доступні його входи, і відправити його в движок для виконання необхідності вивчати окремі інструкції всередині.
З невеликим збільшенням складності, планувальник може дослідити кілька блоків, щоб побачити, чи надходять виходи одного як входи іншого, і розмістити ці блоки на блоках, що зменшують їх затримки зв'язку між блоками. Якщо сучасний центральний процесор вивчає тисячу інструкцій щодо можливого паралелізму, однакова складність в EDGE дозволяє йому вивчити тисячу гіперблоків, кожен з яких складається з сотень інструкцій. Це надає планувальнику значно кращий обсяг без додаткових витрат. Саме така схема дії дає поняттю назву; "графік" - це рядок блоків, з'єднаних даними, що протікають між ними.
Ще одна перевага концепції EDGE полягає в тому, що вона масштабована. Дизайн низького класу може складатися з одного блоку з планувальником заглушок, який просто надсилає блоки, як їх надає програма. Процесор EDGE, призначений для настільного використання, натомість містив би сотні блоків. Критично все, що змінюється між цими конструкціями, це фізичне розташування мікросхеми та приватна інформація, відома лише планувальнику; програма, написана для одиничної машини, працювала б без будь-яких змін у настільній версії, хоча і в тисячі разів швидше. Масштабування потужності також значно покращено та спрощено; блоки можна вмикати та вимикати за необхідності з лінійним впливом на споживання енергії.
Мабуть, найбільшою перевагою концепції EDGE є те, що вона підходить для запуску будь-якого типу завантаження даних. На відміну від сучасних конструкцій процесорів, де різні частини процесора присвячені різним типам даних, процесор EDGE, як правило, складається з одного типу ALU- подібного блоку. Користувач настільного комп'ютера, який одночасно запускає кілька різних програм, отримав би стільки ж паралелізму, скільки науковий користувач, який харчується в одній програмі, використовуючи лише плаваючу крапку; в обох випадках планувальник просто завантажує кожен блок, який міг, в блоки. На низькому рівні продуктивність окремих блокових двигунів не відповідала б, наприклад, спеціальному FPU, але вона намагалася б перемогти будь-яку таку перевагу за допомогою масивного паралелізму.
Техаський університет в Остіні розробляв EDGE ISA, відомий як TRIPS. Для спрощення мікроархітектури центрального процесора, призначеного для його роботи, TRIPS ISA накладає кілька чітко визначених обмежень на кожен гіперблок TRIPS, вони мають:
- мати не більше 128 інструкцій,
- видавати не більше 32 завантажень та/або збережень,
- мати щонайбільше 32 реєстрові банки, які можна читати та/або записувати,
- мати одне рішення про відгалуження, що використовується для позначення кінця блоку.
Компілятор TRIPS статично об'єднує інструкції в гіперблоки, але також статично компілює ці блоки для роботи на певних ALU. Це означає, що програми TRIPS мають певну залежність від точної реалізації, для якої вони складені.
У 2003 році вони випустили зразок прототипу TRIPS із шістнадцятьма блоковими механізмами в мережі 4 на 4, а також мегабайт локальної кеш-пам'яті та пам'яті передачі. Однокристальна версія TRIPS, створена IBM у Канаді за допомогою 130 nm технологічного процесу, містить два таких "двигуни" разом із загальним кешем 2-го рівня та різними системами підтримки. Чотири такі чіпи та гігабайт оперативної пам'яті розміщені разом на дочірній платіі для експериментів.
Команда TRIPS поставила перед собою кінцеву мету - створити одночипову реалізацію, здатну працювати зі стабільною продуктивністю 1 TFLOPS, приблизно в 50 разів перевищуючи продуктивність високоякісних процесорних процесорів, доступних у 2008 році (двоядерний Xeon 5160 забезпечує близько 17 GFLOPS).
CMU CASH «є компілятор, який виробляє проміжний код, названий" Pegasus ".[2] CASH та TRIPS дуже схожі за концепцією, але CASH не призначений для отримання результатів для певної архітектури, і тому не має жорстких обмежень щодо розміщення блоків.
Архітектура WaveScalar Вашингтонського університету за своєю суттю схожа на EDGE, але статично не розміщує інструкцій в її "хвилях". Натомість спеціальні вказівки ( phi і rho ) позначають межі хвиль і дозволяють планування.[3]
- ↑ University of Texas at Austin, "TRIPS : One Trillion Calculations per Second by 2012" [Архівовано 28 лютого 2021 у Wayback Machine.]
- ↑ "Phoenix Project". Архів оригіналу за 18 травня 2021. Процитовано 27 січня 2021.
- ↑ "The WaveScalar ISA". Архів оригіналу за 20 січня 2021. Процитовано 27 січня 2021.
- University of Texas at Austin, "TRIPS Technical Overview" [Архівовано 21 квітня 2021 у Wayback Machine.]
- A. Smith et al., "Compiling for EDGE Architectures" [Архівовано 31 липня 2020 у Wayback Machine.], 2006 International Conference on Code Generation and Optimization, March, 2006