є основою технології VLIW-компілятора. p> Перший VLIW-компілятор компанії Multi-Flow 7/300 використовував два АЛУ для цілих чисел, два АЛУ для чисел з плаваючою точкою і блок логічного розгалуження. Усе це було зібрано на декількох мікросхемах. Його 256-бітове слово інструкції містило сім 32-бітних кодів операцій. Модулі для обробки цілих чисел могли виконувати 2 операції за один такт довжиною 130 нс (то є всього 4 при двох АЛП), що при обробці цілих чисел забезпечувало швидкодія близько 30MIPS (Million Instruction Per Second). Перший VLIW-комп'ютер Cydrome Cydra-5 використовував 256-бітну інструкцію і спеціальний режим, що забезпечує виконання інструкцій як послідовності з шести 40-бітних операцій. Тому його компілятори могли генерувати суміш паралельного коду й звичайного послідовного. Існує думка, що в той час, як ці VLIW-машини використовували кілька мікросхем, процесор Intel i860 став першим VLIW-процесором на одній мікросхемі. При установці правильної послідовності операцій цей процесор більшою мірою залежить від компілятора, ніж від апаратури. p> Незважаючи на те, що архітектура VLIW з'явилася ще на зорі комп'ютерної індустрії (Тьюринг розробив VLIW-комп'ютер ще в 1946 році), вона досі не мала комерційного успіху. Проте значного підвищення продуктивності і швидкості обчислень можна домогтися лише шляхом перенесення інтелектуальних функцій з апаратного забезпечення в програмне (у компілятор). У цілому успіх цього заходу буде визначатися в основному програмними засобами, саме в цьому і полягає проблема. <В
4.1 Апаратно-програмний комплекс VLIW
Архітектура VLIW являє собою одну з останніх реалізацій концепції внутрішнього паралелізму в процесорах. Їх швидкодія можна підвищити двома способами: збільшивши або тактову частоту, або кількість операцій, виконуваних за один такт. У першому випадку потрібно винахід "Швидких" технологій (наприклад, використання арсеніду галію або кремнію на сапфірі) і застосування таких архітектурних рішень, як глибинна конвеєризація (конвеєризація в межах одного такту, коли в кожний момент часу задіяний весь кристал, а не окремі його частини). Для збільшення кількості виконуваних за один цикл операцій необхідно на одній мікросхемі розмістити безліч функціональних модулів обробки і забезпечити надійне паралельне виконання машинних інструкцій, що дає можливість включити в роботу всі модулі одночасно. Надійність в такому контексті означає, що результати обчислень будуть правильними. Для прикладу розглянемо два вирази, які пов'язані один з одним таким чином: А = В + С і В = D + Е. Значення змінної А буде різним у залежності від порядку, в якому обчислюються ці вирази (спочатку А, а потім В, або навпаки), але в програмі мається на увазі тільки одне певне значення. p> Планування порядку обчислень досить важке завдання, яку доводиться вирішувати при проектуванні сучасного процесора. У суперскалярних процесорах (процесор з двома і більше конвеєрами, що дозволяє виконувати більше однієї команди за один такт в ідеальних умовах) для розпізнавання залежностей між машинними інструкціями застосовується спеціальне досить складне апаратне рішення (в процесорі Pentium Pro, наприклад, для цього використовується буфер переупорядочивания інструкцій). Проте розміри такого апаратного планувальника при збільшенні кількості функціональних модулів обробки зростають в геометричній прогресії, що, зрештою, може "З'їсти" весь кристал процесора. Тому суперскалярні проекти зупинилися на позначці п'ять-шість керованих за цикл инструкций. При друг му підході можна передати все планування програмному забезпеченню, як це робиться в конструкціях з VLIW. "Розумний" компілятор повинен вишукати в програмі всі інструкції, які є абсолютно незалежними, зібрати їх разом в дуже довгі рядки (довгі інструкції) і потім відправити на одночасне виконання функціональними модулями, кількість яких суворо дорівнює кількості операцій у такої довгої інструкції. Дуже довгі інструкції зазвичай мають розмір від 256 біт до 1024 біт. Розмір полів, що кодують операції для кожного функціонального модуля, в такій метаінструкціі набагато менше. <В
4.2 Устройство VLIW-процесору
Процесор VLIW, що має таку схему, може виконувати вісім операцій за один такт і працювати при аналогічній тактовій частоті на 80-100% швидше існуючих суперскалярних чіпів. Додаткові функціональні блоки можуть підвищити продуктивність (за рахунок зменшення конфліктів), не надто ускладнюючи чіп. Однак це розширення обмежується фізичними можливостями: кількістю портів читання-запису, необхідним для забезпечення одночасного доступу функціональних блоків до файлу, регістрів і взаємозв'язків, яке геометрично зростає при збільшенні кількості функціональних блоків. До того ж компілятор мав распараллеліть програму до потрібного рівня, щоб забезпечити завантаження кожному блоку. Процесор виконує 8 операцій за один цикл. p> Ця гіпотетична інструкція довжиною в 256 біт має віс...