logo
AOM / Мельник А

5.7. Комп'ютери з комбінованою архітектурою

При реалізації архітектури КДФК виникають серйозні проблеми. Компілятор цього комп'ютера повинен в деталях враховувати внутрішні особливості процесора, аж до ор­ганізації роботи його функціональних пристроїв. Як наслідок, при випуску нової версії комп'ютера з більшою кількістю функціональних пристроїв доводиться радикально пе­реписувати і компілятор. Інша проблема - це за своєю суттю статична природа оптимі-зації, яку забезпечує компілятор КДФК. Важко передбачити, як, наприклад, поведеться компілятор, коли зіткнеться під час компіляції з непередбаченими динамічними ситуа­ціями, такими як очікування введення/виведення. Тому розробники сучасних швидко­діючих комп'ютерів починають відходити від чистої архітектури КДФК

У 2000 році корпорація Трансмета випустила процесор Crusoe,сумісний із системою команд процесора х86, який характеризується високою продуктивністю та зниженою споживаною потужністю. Покращання характеристик досягнуто шляхом заміни відчут­ної частки апаратури процесора допоміжною, але обов'язковою, програмною оболон­кою Процесор Crusoeскладається з апаратного ядра та програмної оболонки, яка фор­мує програмний код для цього ядра. Ядром є нескладний КДФК, здатний виконувати до чотирьох простих команд в кожному такті. Доповнення апаратного ядра програмною оболонкою для формування програмного коду створює ефект присутності повноцінно­го набору апаратних засобів архітектури х86. Програмну оболонку формування коду на­зивають Code Morphing™ тому, що вона динамічно відбиває ("morphs") зовнішні (склад­ні) команди процесора х86 у внутрішні (спрощені) в'язанки команд апаратного ядра

Технологія Code Morphing™ фірми Трансмета змінює традиційні методи проекту­вання процесорів. Практична апробація того, що серійні процесори можна реалізувати як гібрид програмних і апаратних засобів, суттєво розширила можливості проектуваль­ників по вибору та впровадженню оптимальних рішень. По перше, паралельна робота проектувальників апаратного ядра процесора та системних програмістів, які розробля­ють програмну оболонку, сприяє скороченню термінів розробки. По друге, зовнішня програмна оболонка формування коду із в язанок команд для ядра процесора забез­печує незалежний від прихованої апаратної архітектури розвиток програмних засобів комп'ютерної системи в цілому тобто системних та прикладних програм

Ядро процесора включає два функціональні пристрої для операцій з фіксованою ко­мою, функціональний пристрій для операцій з рухомою комою, функціональний при­стрій звернення до пам'яті (load/store)та функціональний пристрій виконання умовних переходів (рис. 5.28).

197

Тут ADD- операція додавання з фіксованою комою, FADD- операцією додавання з рухомою комою, LD- завантаження подвійного слова, aBRCC- умовний перехід за деякою умовою (Conditional Code Branch).

В'язанка команд процесора Crusoe отримала назву молекули. Вона має довжину 64/128 бітів та вміщує чотири команди (чотири атоми). Усі атоми в межах молекули ви­конуються паралельно. Формат молекули прямо визначає зв'язок атома із конкретним функціональним пристроєм, що значно і спрощує, і прискорює апаратні засоби. Самі молекули процесор опрацьовує із збереженням черговості, тобто без використання складних апаратних засобів невпорядкованого опрацювання. Для забезпечення ефек­тивного використання процесора мінімізується кількість незаповнених атомів, а у ви­падках несумісності атомів за паралельністю, на місце відсутнього атома вставляється пуста операція.

Програма Code Morphing є фундаментальною системою динамічної трансляції, що транслює команди однієї архітектури (в даному випадку КССК процесора х86) в команди іншої архітектури (КДФК). Програму Code Morphing розміщено в ПЗП процесора і вона є першою програмою, що виконується при завантаженні процесора. Рис. 5.29 ілюструє зв'язок між кодом процесора х86, програмою Code Morphing та ядром процесора Crusoe.

Завдяки тому, що програма формування коду КДФК, а саме, CodeMorphing,ізолює програми процесора х86 (системні та прикладні разом із BIOSі операційною системою) від апаратури процесора Crusoeіз притаманною йому системою команд КДФК, цю сис­тему команд можна змінювати без жодного виливу на систему команд процесора х8б. Але при зміні архітектури КДФК певних змін зазнає і програма Code Morphing. Проте зміни до програми формування коду CodeMorphingтреба виконувати лише один раз на кожну зміну архітектури ядра.

Приховування реальної архітектури рівня машинних команд за шаром фірмової про­грами CodeMorphingдозволяє уникнути проблем, притаманних чистим КДФК. Чисті КДФК змушують розробника компілятора враховувати усі деталі роботи конвеєра. При

198

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

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

Програма CodeMorphingформування коду КДФК транслює групи команд проце­сора х86, а не кожну відокремлену команду, як у суперскалярному процесорі. Зрозумі­ло, що опрацювання групи команд розширює діапазон дій програмного транслятора, що дає йому можливість враховувати семантику фрагмента коду, разом із притаман­ною фрагментові кореляцією поміж сусідніми командами. Саме це обумовлює перева­гу трансляційної технологій Crusoe.Більше того, суперскалярний процесор транслює команду кожного разу, як її виконує. Crusoe виконує трансляцію команди одноразово, зберігаючи результат трансляції у так званій трансляційній кеш пам'яті. Коли виконан­ня фрагмента програми процесора х86 повторюється, Crusoeне виконує повторну тран­сляцію, а забирає потрібне з трансляційної кеш пам'яті. Зрозуміло, що "компільований" фрагмент коду процесора х86 виконується швидше від "інтерпретованого".

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

Зрозуміло, що програма Code Morphing використовує властивість локалізації (local­ity of reference) вибирань програмних кодів будь-якої універсальної машини. Апаратура процесора Crusoeопрацьовує отриманий від CodeMorphingмолекулярний код не хао­тично, а впорядковано, за природною чергою. Це гарантує впорядковане опрацювання оригінальних команд процесора х86. Саме молекули однозначно визначають паралелізм рівня машинних команд, тому апаратна реалізація процедури паралельного опрацюван­ня спрощується.

5.8. Комп'ютери з явним паралелізмом виконання команд

Як ми вже побачили з матеріалу даного розділу, планування порядку обчислень є досить важким завданням, яке доводиться вирішувати при проектуванні сучасного комп'ютера. У суперскалярній архітектурі для розпізнавання залежностей між команда­ми застосовуються досить складні апаратні рішення (наприклад, в Р6 і наступних про­цесорах фірми Intelдля цього використовується буфер перевпорядковування команд - ReorderBuffer).Проте розміри такого апаратного планувальника при збільшенні кіль­кості функціональних пристроїв зростають в геометричній прогресії. Тому суперскалярні

199

проекти зупинилися на відмітці 5-6 оброблюваних за цикл команд. Навіть КДФК теж далеко не завжди можуть забезпечити повне заповненням в'язанок команд - реальне завантаження близько 6-7 команд в такті.

Вище зазначені проблеми призначена вирішувати нова архітектура із назвою EPIC (Explicitly Parallel Instruction Set Computing).

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

Архітектура EPICпередбачає пряме розпаралелювання виконання програми, тобто компілятор мусить повідомляти процесор про те, яка частина коду може виконуватися паралельно. Оптимізований за попереднім означенням компілятор EPICаналізує про­грамний код, аби визначати, де та коли відбудуться/не відбудуться умовні переходи та знайти і позначити ті частини програмного коду, які можна виконувати паралельно.

Прикладом процесора з архітектурою EPICє процесор ІА-64 фірми Intel.В цьому процесорі команди, як і в архітектурі КДСК, пакуються компілятором в 128-розрядні в'язанки команд. Кожна в'язанка команд процесора ІА-64 містить три команди та ша­блон, як це показано на рис. 5.30.

В шаблоні вказується залежність між командами в одній в'язанці та між в'язанками, тобто вона вказує, чи можна одночасно виконувати і-ту (і= 0,1,2) команду в'язанки mод­ночасно з j-ю (j=0,1,2) командою в'язанки п. Кожній в'язанці в процесорі виділяється три функціональних пристрої, тобто кожній команді виділяється один пристрій. Вміст поля шаблону встановлюється або при генеруванні коду компілятором, або безпосередньо системним програмістом, що пише мовою асемблер. Процес генерації коду виконують так, аби гарантовано позбутися конфліктів типу RAW,WAWв межах командної групи.

Кожна з трьох команд в'язанки має формат, приведений на рис. 5.31.

200

До складу команди входять наступні поля: коду операції, предиката, номери регістрів двох операндів та регістра результату. Розрядності кожного поля вказані на рисунку.

Поле предиката вказує номер регістра предиката, яких в процесорі є 64. Предикація - це спосіб обробки умовних переходів. В процесорі ІА-64 виконуються обидві вітки переходу. Суть способу предикації полягає в наступному. Командам різних гілок одного умовного переходу виділяються різні регістри предиката. Ці команди виконуються на функціональних пристроях процесора, а їх результати записуються до пам'яті тільки після визначення вмісту регістрів предиката, тобто після обчислення умови переходу. Вмісту регістрів вітки переходу, якій відповідає умова переходу, присвоюється значення і, а вмісту регістрів вітки переходу якій не відповідає умова переходу присвоюється значення 0. Процесор перевіряє вміст регістрів предикату і записує в пам'ять результати тільки тих команд, які вказують на регістри предикатів з одиничним вмістом.

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