Кіріспе

Өте ұзақ нұсқаулық сөз (VLIW) – нұсқаулық деңгейіндегі параллелизмді (ILP) пайдалануға арналған нұсқаулық жиынтық архитектураларын білдіреді. VLIW процессоры бағдарламаларға параллель орындалатын нұсқауларды тікелей көрсетуге мүмкіндік береді, ал дәстүрлі орталық процессорлар (CPU) бағдарламаларға көбінесе тек реттілікпен орындалатын нұсқауларды көрсетуге мүмкіндік береді. VLIW кейбір басқа конструкциялардағы күрделіліксіз жоғары өнімділікке қол жеткізуге арналған. Процессорлардағы өнімділікті арттырудың дәстүрлі тәсілдеріне нұсқауларды кіші қадамдарға бөлу (бұл құбырландыру деп аталады), процессордың әртүрлі бөліктерінде тәуелсіз орындалатын жеке нұсқауларды жіберу (суперскалярлық архитектуралар) және тіпті бағдарламадағы реттіліктен өзгеше тәртіппен нұсқауларды орындау (ретсіз орындау) кіреді. Бұл әдістердің барлығы аппараттық құралды күрделілендіреді (үлкен схемалар, жоғары құн және энергия тұтыну), өйткені процессор осы әдістердің жұмыс істеуі үшін барлық шешімдерді ішкі түрде қабылдауы керек. Керісінше, VLIW әдісі бағдарламалардың бір мезгілде орындалатын нұсқаулар мен қақтығыстарды шешу туралы шешімдерді беруіне байланысты. Іс жүзінде, бұл компилятордың (соңғы бағдарламаларды жасауға қолданылатын бағдарламалық құрал) күрделірек болатынын, бірақ аппараттық құралдың көптеген басқа параллелизм тәсілдеріне қарағанда қарапайым болатынын білдіреді.

Тарих

VLIW архитектурасының тұжырымдамасы және VLIW термині 1980 жылдардың басында Йель университетіндегі зерттеу тобында Джош Фишер тарапынан ойлап табылды. Оның VLIW-ді құрастыру әдісі ретінде трассалық кестелеуді алғаш рет Нью-Йорк университетінде аспирант кезінде жасады. VLIW-ге дейін бағдарламалық жасақтамада орындау бірліктерін алдын ала кестелеу және нұсқаулар деңгейіндегі параллелизм туралы түсінік көлденең микрокодты әзірлеу тәжірибесінде жақсы қалыптасқан еді. Фишерден бұрын VLIW деп кейіннен аталатын теориялық аспектілерді советтік компьютер ғалымы Михаил Картсев өзінің 1960 жылдардағы әскери мақсаттағы M 9 және M 10 компьютерлері бойынша жұмысына негізделген. Оның идеялары кейін дамытылып, Фишердің маңызды еңбегінен екі жыл бұрын оқулық ретінде жарияланды. Бірақ, «Темір перде» болғандықтан және Картсевтің жұмысы көбінесе әскери саламен байланысты болғандықтан, ол Батыста кеңінен танылмады. Фишердің инновациялары қарапайым бағдарламалау тілінде жазылған бағдарламалардан көлденең микрокодты нысаналайтын компиляторды әзірлеуді қамтыды. Ол жақсы өнімділікке қол жеткізу үшін және кең ауқымды машинаны нысанаға алу үшін, әдетте негізгі блок шегінен тыс параллелизмді табу қажет екенін түсінді. Ол сондай-ақ негізгі блоктардан тыс параллелизмді анықтау үшін аймақтық кестелеу әдістерін әзірледі. Трассалық кестелеу – осындай әдіс, ол негізгі блоктардың ең мүмкін жолын бірінші кезекте кестелеуді, болжамды қозғалыстарды өтеу үшін толықтыру кодын енгізуді, екінші ең мүмкін трассаны кестелеуді және кесте толыққанша жалғастырады. Фишердің екінші инновациясы – мақсатты CPU архитектурасы компилятор үшін қолайлы нысана болуы үшін жобалануы керек деген тұжырым; VLIW процессоры үшін компилятор мен архитектура бірлесіп жобалануы тиіс. Бұл Фишердің Йельде байқаған қиындықтарымен шабыктандырылды, мысалы, Floating Point Systems FPS164 сияқты архитектуралар үшін компиляциялау қиындығы, оның күрделі нұсқаулар жиынтығын есептеу (CISC) архитектурасы нұсқауларды бастауды нәтиже сақтайтын нұсқаулардан бөліп, өте күрделі кестелеу алгоритмдерін қажет етті. Фишер дұрыс VLIW дизайнын сипаттайтын принциптер жиынтығын әзірледі, мысалы, өзін-өзі тазартатын құбырлар, кең көп портты регистрлік файлдар және жад архитектуралары. Бұл принциптер компиляторларға жылдам код шығаруды жеңілдетті. VLIW-тің алғашқы компиляторы Джон Эллистің Ph.D. диссертациясында, Фишердің жетекшілігімен сипатталған. Компилятор Йель университетінің талисманынан шыққан «Булдог» деп аталды. Фишер 1984 жылы Йельден шығып, негізін қалаушылар Джон О'Доннелл мен Джон Руттенбергпен бірге «Мултифлоу» стартап компаниясын құрды. Multiflow TRACE сериялы VLIW мини-суперкомпьютерлерін шығарды және алғашқы машиналарын 1987 жылы жеткізді. Multiflow-тың VLIW-і бір нұсқауда 28 операцияны параллельді түрде орындай алды. TRACE жүйесі орташа масштабтағы интеграция (MSI), үлкен масштабтағы интеграция (LSI) және шкафтарға орнатылған өте үлкен масштабтағы интеграция (VLSI) қоспасында іске асырылды, бұл технология процессордың барлық компоненттерін (жадты қоспағанда) бір чипке интеграциялаудың тиімділігі артып кеткендіктен ескірді. Multiflow келесі толқынды ұстау үшін тым ерте болды, өйткені чип архитектурасы бірнеше мәселелік CPU-ға мүмкіндік бере бастады. Ірі жартылай өткізгіш компаниялары осы контексте Multiflow технологиясының құндылығын мойындады, сондықтан компилятор мен архитектура кейіннен осы фирмалардың көпшілігіне лицензияланды.

Мотивация

Әрбір нұсқауды бірінен соң бірі орындайтын процессор (яғни, құбырланбаған скалярлық архитектура) процессор ресурстарын тиімсіз пайдаланады, нәтижесінде өнімділік нашарлауы мүмкін. Өнімділікті ретті нұсқаулардың әртүрлі кіші қадамдарын бір мезгілде орындау арқылы (бұл құбырлау деп аталады) немесе тіпті суперскалярлық архитектуралардағыдай бірнеше нұсқауды толығымен бір мезгілде орындау арқылы жақсартуға болады. Орындауды одан әрі жақсарту үшін нұсқауларды бағдарламадағы орындалу ретінен өзгеше ретпен орындауға болады, мұны ретсіз орындау деп атайды. Кейбір процессорлар параллель жұмыс істеу үшін бірнеше арифметикалық-логикалық құрылғыларды (ALU) қосты. Суперскалярлық процессорлар орындалу кезінде қандай операцияларды параллель орындауға болатынын анықтау үшін аппаратты пайдаланады, ал VLIW процессорлары бағдарламалық құралды (компиляторын) алдын ала параллель орындалатын операцияларды анықтау үшін пайдаланады. Нұсқауларды жоспарлаудың күрделілігі компиляторға көшкендіктен, аппараттық құрылымның күрделілігі айтарлықтай төмендеуі мүмкін. Параллельдеуге болатын нұсқаудың нәтижесі тармақталудың кірісі ретінде қолданылғанда ұқсас мәселе туындайды. Көптеген қазіргі заманғы процессорлар есептеу аяқталмас бұрын қай тармаққа өту керектігін болжайды, осылайша тармақтың нұсқауларын жүктеуге немесе (кейбір архитектураларда) оларды болжамды түрде есептеуге кіріседі. Егер процессор қате болжаса, барлық нұсқаулар мен олардың контексі тазартылып, дұрыс нұсқаулар жүктелуі керек, бұл уақытты қажет етеді. Бұл нұсқауларды жіберу логикасының күрделенуіне әкелді, ол дұрыс болжауға тырысады, ал бастапқы қысқартылған нұсқаулар жиынтығын есептеу (RISC) жобаларының қарапайымдылығы жойылды. VLIW мұндай логикадан құрылғандықтан, энергия тұтыну, жобалаудағы мүмкін қателер және басқа да теріс аспектілерден бос. VLIW-де компилятор тармақтың бағытын болжау үшін эвристикалық әдістерді немесе профильдік ақпаратты пайдаланады. Бұл оған тармақ арқылы күтілетін ең мүмкін жолды қолдана отырып, тармақ алынбастан бұрын операцияларды болжамды түрде жылжытуға және алдын ала жоспарлауға мүмкіндік береді. Егер тармақ күтпеген бағытқа бұрылса, компилятор бағдарламаның семантикасын сақтау үшін болжамды нәтижелерді жою үшін толықтыру кодын жасайды. Векторлық процессорлық ядролар (векторлар деп аталатын үлкен бір өлшемді деректер массиві үшін жасалған) VLIW архитектурасымен біріктірілуі мүмкін, мысалы, Fujitsu FR V микропроцессорында, бұл өткізу қабілетін және жылдамдықты одан әрі арттырады.

Артқа қарай үйлесімділік

Кремний технологиясы кеңірек іске асыруларға (көбірек орындау бірліктерімен) мүмкіндік берген кезде, бұрынғы буынға арналған құрастырылған бағдарламалар кеңейтілген іске асыруларда жұмыс істемейтін болды, себебі бинарлық нұсқаулардың кодталуы машинаның орындау бірліктерінің санына байланысты еді. Transmeta бұл мәселені x86 архитектурасының Crusoe нұсқасында екілік-екілік бағдарламалық компилятор қабатын (кодты өзгерту деп атайды) қосу арқылы шешті. Бұл механизм x86 опкодтарын орындау кезінде қайта құрастыру, оңтайландыру және CPU-ның ішкі машиналық кодына аудару үшін жарнамаланды. Осылайша, Transmeta чипі ішкі жағынан VLIW процессоры болып табылады, ол x86 CISC нұсқаулар жиынтығынан тиімді түрде ажыратылған. Intel-дің Itanium архитектурасы (басқаларымен қатар) кері үйлесімділік мәселесін көбірек мүмкіндік беретін механизммен шешті. Әрбір көптеген опкод нұсқауларының ішінде бағдарламалық нұсқау ағынындағы алдыңғы VLIW нұсқауына тәуелділікті көрсету үшін биттік өріс бөлінеді. Бұл биттер компиляция кезінде орнатылады, соның салдарынан аппараттық құралдар осы тәуелділік туралы ақпаратты есептеуден босатылады. Нұсқау ағынына тәуелділік туралы ақпаратты енгізу кеңейтілген іске асыруларға цикл бойына бірнеше тәуелсіз VLIW нұсқауларын параллель шығаруға мүмкіндік береді, ал тар іске асырулар цикл бойына азырақ VLIW нұсқауларын шығарады. VLIW дизайнының тағы бір кемшілігі – кодтың ұлғаюы, бірінші немесе бірнеше орындау бірліктерінде пайдалы жұмыс болмаған кезде және оларға операциясыз (NOP) нұсқауларын орындау қажет болады. Бұл кодта тәуелділіктер болғанда және келесі операцияларға рұқсат беру үшін нұсқау құбырларын босату қажет болғанда болады. Чиптегі транзисторлардың саны артқандықтан, VLIW-тің кемшіліктерінің маңыздылығы азайды. VLIW архитектурасы, әсіресе кіріктірілген жүйелер нарығында, процессорды жүйедегі чиптегі қолданбаға бейімдеуге болатындықтан, танымалдылығы артып келеді.