Пређи на садржај

Јако дуга реч инструкције

С Википедије, слободне енциклопедије

Јако дуга реч инструкције или VLIW се односи на архитектуру процесора дизајнирану да искористи предност паралелности на нивоу инструкције (ILP). Док конвенционални процесори углавном прихватају програме који издају инструкције једну за другом, VLIW процесор прихвата програме који експлицитно могу дефинисати које ће се инструкције извршавати истовремено (тј. паралелно). Циљ овог типа процесорске архитектуре је да постигне веће перформансе без додатне комплексности неких других приступа.

Традиционални приступ побољшању перформанси у процесорским архитектурама је укључивао разбијање инструкција на под-кораке да би се инструкције могле извршавати делимично паралелно (проточна обрада), тако што би се индивидуалне инструкције извршавале потпуно независно у различитим деловима процесора (суперскаларна архитектура), или чак у редоследу супротном од онога како је записано у програму (извршавање ван реда). Сви ови приступи укључују повећану сложеност харвера (вишу цену, већа електронска кола, већу потрошњу струје) јер процесор мора суштински све одлуке да прави интерно. VLIW приступ, за разлику од тога, зависи од самих програма код којих мора бити направљена одлука које ће се инструкције извршавати паралелно и како ће се решавати конфликти. У пракси ово значи да компајлер (софтвер који генерише финални програм) постаје доста сложенији, али је хардвер једноставнији од већине других приступа паралелизму.

Као што је случај са сваком новом архитектуром, концепт је употребљив само онолико колико га генерисање кода учини. Архитектура дизајнирана за употребу у обради сигнала може имати одређене наменске инструкције ради убрзања одређених компликованих инструкција као што је брза Фуриерова трансформација (FFT) или одређена израчунавања која се користе у томографским контекстима. Међутим, ове оптимизације су неупотребљиве ако компајлери нису способни да примете релевантне конструкције у изворном коду и конструишу машински код који ће правилно искористити напредне инструкције процесора. Услед тога, програмери морају бити способни да пишу код тако да компајлеру буде лак за читање.

Мотивација

[уреди | уреди извор]

Процесор који извршава сваку инструкцију једну за другом (нпр. скаларна архитектура без проточне обраде) може користити процесорске регистре неефикасно, потенцијално доводећи до лоших перформанси. Перформанса моће бити унапређена извршавањем различитих под-корака секвенцијалних инструкција паралелно (ово је проточна обрада), или чак извршавати инструкције потпуно паралелно као код суперскаларних архитектура. Додатна унапређења се могу постићи извршавањем инструкција редоследом другачијим од онога како је писано у програму; ово се зове извршавање ван реда.

Ове све три технике имају цену сложености харвера. Пре извршавања инструкција паралелно, процесор мора проверити да инструкције немају међусобну зависност. На пример, ако се резултат прве инструкције користи као улаз друге инструкције, онда се те две инструкције не могу извршити паралелно нити се друга инструкција сме извршити пре прве. Модерни процесори са ванредним извршавањем су повећали хардверске ресурсе посвећене распорели инструкција и одређивању међузависности.

VLIW приступ, за разлику од тога, извршава операције паралелно на основу фиксног распореда одређеног приликом компилације програма. С обзиром да се одређивање распореда инстукција (укључујући које се операције могу извршавати паралелно) ради од стране компајлера, процесору није потребан хардвер за расподелу који три горе наведене технике захтевау. Као резултат, VLIW процесори пружају значајну рачунарску моћ са мање хардверске сложености (али већом сложености компајлера) него што је случај са већином суперскаларних процесора.

Код суперскаларног дизајна, број извршних јединица је невидљив са аспекта скупа инструкција. Свака инструкција представља тачно једну операцију. За већину суперскаларних архитектура, ширина инструкције је 32 бита или мање. VLIW је тип MIMD-а.

За разлику од тога, једна VLIW инструкција представља вишеструке операције; специфично, једна интрукција представља бар једну операцију за сваку извршну јединицу уређаја. На пример, ако VLIW уређај има 5 извршних јединица, онда би VLIW инструкција за тај уређај имала 5 операционих поља, где би свако поље одређивало одређивало операцију за једну извршну јединицу. Да би се то постигло, VLIW инструкције су углавном бар 64 бита широке, а на неким архитектурама и много шире.

На пример, ово је инструкција за SHARC. У једном циклусу, она извршава множење са покретним зарезом, сабирање са покретним зарезом и 2 операције аутоинкрементирања. Све ово стаје у једну 48-битну инструкцију:

f12=f0*f4, f8=f8+f12, f0=dm(i0,m3), f4=pm(i8,m9);

Још од најранијих дана рачунарске архитектуре,[1] неки процесори су добили неколико додатних аритметичко логичких јединица (ALU) које раде паралелно. Суперскаларни процесори користе хардвер да одлуче које се операције могу извршавати паралелно. VLIW процесори користе сотфвер (компајлер) да одлуче које ђе се операције извршавати паралелно. С обзиром да је сложеност распоређивања инструкција пренета на компајлер, сложеност хардвера може бити знатно смањена.

Сличан проблем се јавља када се резултат паралелизоване инструкције користи као улаз гранање. Већина модерних процесора „нагађа“ које ће гранање или скок бити предузето и пре него што се рачунање заврши, тако да може унапред да учита инструкције за ту грану, или (код неких архитектура) да их рачуна спекулативно. Ако процесор погреши при нагађању, све ове инструкције и њихов контекст морају бити „одбачене“ и затим поново учитане исправне, што захтева време.

Ово је довело до знатно сложеније логике покађања инструкција, и једноставност оригиналног RISC дизајна је изгубљена. VLIW нема ову логику, и стога има нижу потрошњу енергије, вероватно мање дизајнерских дефеката и других негативних особина.

Код VLIW-а, компајлер користи хеуристике и профиле информација да погоди смер гране. Ово му омогућава да спекулативно помери и преуреди редослед операција пре него што крене гранање, при чему даје предност највероватнијем путу који очекује кроз грану. Ако гранање крене непредвиђеним путем, компајлер је већ генерисао компензаторни код да би одбацио спекулативне резултате ради чувања програмске семантике.

Акроним VLIW се такође може односити на Променљиву дужину речи инструкције, процесорски скуп инструкција дизајниран да учитава (или копира) дословну вредност броја машинског кода у RAM на чипу ради бржег процесорског декодирања.

Векторска процесорска језгра (SIMD) се могу комбиновати са VLIW архитектуром као што је Fujitsu FR-V, додатно повећавајући пропустност и брзину.

Историја

[уреди | уреди извор]

Термин VLIW, и концепт саме VLIW архитектуре, је измислио Josh Fisher у својој истаживачкој групи на Yale универзитету током раних 1980их.[2] Његов оригинални развој распоређивања траса као компилационе технике за VLIW је развијен када је био апсолвент на New York универзитету. Пре VLIW-а, концепт прерасподеле функционалних јединица и паралелизма на инструкцијском нивоу у софтверу је био добро познат у пракси развоја хоризонталног микрокода. Фишерове инвоације су се односиле на развој компајлера који би генерисао хоризонтални микрокод из програма писаних у обичним програмским језицима. Схватио је да ради постизања добрих перформанси и рада на широкоулазним машинама, мора да нађе паралелизам већи од оног унутар основног блока. Развио је технике расподеле региона ради идентификовања дубљег паралелизма него над основним блоковима. Прерасподела траса је једна од таквих техника, и укључује прво прерасподелу највероватнијих путева основног блока, уметање компензационог кода да се избори са спекулативним покретима, распоређује другу највероватнију трасу, и тако даље, док се прерасподела не заврши.

Друга Фишерова иновација је концепт да циљана процесорска архитектура треба бити дизајнирана тако да је лако компајлирати за њу – компајлер и архитектура за VLIW морају бити дизајнирани у пару. Ово је било делимично инспирисано тешкоћом коју је Фишер приметио на Јејлу у вези компајлирања за архитектуре као што је Floating Point Systems-ов FPS164, који је имао сложени архитектуру сета инструкција (CISC) која је раздвајала иницирање инструкције од инструкција које су чувале резултат, што је захтевало јако компликоване алгоритме расподеле. Фишер је развио сет принципа који карактеришу правилни VLIW дизајн, као што су самоизгладњујућа проточна обрада, широке вишепортне регистарске фајлове, и меморијске архитектуре. Ови принципи олакшавају компајлерима да генеришу брз код.

Први VLIW компајлер је описан у докторском раду Џона Елиса, који је надгледао Фишер. Компајлер је назван Bulldog, по маскоти Јејла.[3] Џон Рутенберг је такође развио неке важне алгоритме расподеле.

Фишер напушта Јејл 1984. да би основао своју стартап компанију, Multiflow, заједно са кооснивачима Џоном Одонелом и Џоном Рутенбергом. Multiflow је производила TRACE серију VLIW минисуперрачунара, и испоручила свој први рачунар 1987. Multiflow-ов VLIW је могао да обради 28 операција паралелно по инструкцији. TRACE систем је био имплементиран у MSI/LSI/VLSI комбинацију паковану у кабинете, технологија која није више била толико корисна када је постало финансијски ефикасније интегрисати све компоненте процесора (осим меморије) у један чип. Multiflow је рано захватио следећи талас, када је архитектура чипова почела да дозвољава вишеструке процесоре. Главне полупроводничке компаније су препознале вредност Multiflow технологије у овом контексту, па су компајлери и архитектура лиценцирани већини ових компанија.

Имплементација

[уреди | уреди извор]

Компанија Cydrome је производила нумеричке VLIW процесоре коришћењем ECL технологије у истом временском периоду (касне 1980е). Ова компанија, као и Multiflow, прекинула је пословање након неколико година.

Једна од компанија које су лиценцирале Multiflow технологију је био Хјулет-Пакард, коме се Џош Фишер прикључио након што је Multiflow распуштен. Bob Rau, оснивач Cydrome-а, такође се прикључио HP-у након што се Cydrome распао. Њих двојца су водили истраживање рачунарских архитектура у оквиру Hewlett-Packard-а током 1990их.

Као додатак наведеним системима, отприлике у истом периоду (око 1989-1990), Интел је имплементирао VLIW у Intel i860, њихов први 64-битни процесор; i860 је такође био први VLIW процесор на једном чипу.[4] Овај процесор је могао да ради и у једноставном RISC моду и у VLIW моду:

Током раних 1990их, Интел је представио i860 RISC процесор. Овај једноставни чип је могао да ради у 2 мода: скаларном моду и VLIW моду. У VLIW моду, процесор је увек дохватао 2 инструкције и претпостављао да је једна целобројна инструкција, а друга са покретним зарезом.[4]

VLIW мод је знатно коришћен у уграђеним DSP апликацијама с обзиром да су извршавање и сетови података били једноставни, добро организовани и предвидљиви, што је омогућавало дизајнерима да искористе све предности паралелног извршавања; у VLIW моду i860 је могао да одржи перформансе са покретним зарезом у опсегу од 20-40 MFLOPS са дуплом прецизношћу (што је јако пуно за процесор тог времена који је радио на 25-50Mhz).

Током 1990их, Hewlett-Packard је истражио овај проблем као нуспојаву њиховог истраживања на PA-RISC породици процесора. Они су открили да се процесор може знатно поједноставити уклањањем сложене логике расподеле са процесора преносећи је на компајлер. Компајлери су тада било много сложенији од оних из 1980их, па је додатна сложеност у компајлеру сматрана небитном.

VLIW процесори су углавном конструисани од вишеструких RISC-оликих функционалних јединица које оперишу независно. Модерни VLIW-ови типично имају четири до осам главним функционалних јединица. Компајлери генеришу почетне секвенце инструкција за VLIW процесор на скоро исти начин као за обичне процесоре, генеришући секвенцу RISC-оликих инструкција. Компајлер анализира овај код тражећи зависност међу инструкцијама. Затим расподељује инструкције на основу тих ограничења. У овом процесу, независне инструкције се могу распоредити за паралелно извршавање. С обзиром да VLIW-ови типично представљају инструкције које се извршавају паралелно са дужом речи инструкције која интегрише индивидуалне инструкције, ово резултује много већим опкодом (од чега потиче термин „јако дуга") који дефинише шта се извршава у датом циклусу.

Примери модернијих VLIW процесора укључују TriMedia медијски процесоре из NXP-а (претходно Philips Semiconductors), SHARC DSP из Analog Devices, C6000 DSP породица из Texas Instruments, и STMicroelectronics ST200 породица базирана на Lx архитектури (такође дизајнирана од стране Џоша Фишера). Ови модерни VLIW процесори су примарно успешни као играђени медијски процесори са уређаје корисничке електронике.

VLIW особине су такође убачене у подесива процесорска језгра за SoC дизајн. На пример, Tensilica-ин Xtensa LX2 процесор интегрише технологију названу FLIX (екстензије флексибилне дужине инструкције) која омогућава више-операцијске инструкције. Xtensa C/C++ компајлер слободно може мешати 32- или 64-битне FLIX инструкције са једно-операцијским RISC инструкцијама Xtensa процесора, које су 16 или 24 бита широке. Паковањем вишеструких операција у широку 32- или 64-битну инстркцијску реч и омогућујући да се ове вишеоперацијске инструкције мешају са краћим RISC инструкцијама, FLIX технологија омогућава SoC дизајнерима да реализују предности VLIW перформансе елиминисањем непотребног кода ранијих VLIW архитектура.

The Infineon Carmel DSP је друго VLIW процесорско језгро намењено за SoC чипове; оно користи сличну технику побољшања густине кода звану „подесива дуга реч инструкције“ (CLIW). [5]

Ван тржишта уграђених процесора, Интелов Itanium IA-64 EPIC се појављује као једини пример широко коришћене VLIW процесорске архитектуре. Међутим, EPIC архитектура се понекад разликује од чисте VLIW архитектуре, с обзиром да EPIC пропагира потпуну предвидљивост инструкције, ротирајуће регистарске фајлове, и јако дугу реч инструкције која може представљати групе не-паралелних инструкција. VLIW-ови су такође задобили значајан пробој на тржишту графичких процесора, иако су се и Nvidia и AMD од тада пребацили на RISC архитектуру ради повећања перформанси код не-графичких послова.

Компатибилност са старијим генерацијама

[уреди | уреди извор]

Када је силиконска технологија дозволила да се направи шира имплементација (са више извршних јединица), програми компајлирани за раније генерације нису могли радити на широј имплементацији, јер је формат бинарне инструкције зависио од број извршних јединица машине.

Transmeta решава овај проблем коришћењем бинарни-у-бинарни софтверских компајлера (названо преклапање кода) у својој Crusoe имплементацији x86 архитектуре. У основи, овај механизам је намењен да рекомпајлира, оптимизује, и преведе x86 опкодове током извршења у интерни машински код процесора. С обзиром на то, Transmeta чип је интерно VLIW процесор, ефективно раздвојен од x86 CISC сета инструкција који извршава.

Интелова Itanium архитектура (међу осталима) решава проблем компатибилности на општији начин. У оквиру сваке вишеструке инструкције, поље бита је алоцирано да означи зависност од претходне VLIW инструкције у оквиру тока програмских инструкција. Ови битови се постављају током компајлирања, те растерећују хардвер рачунања ове зависности. Ова уграђена информација о зависности омогућава ширим имплементацијама да изврше вишеструке независне VLIW инструкције у једном циклусу, док уже имплементације могу да извршавају мањи број паралелних VLIW инструкција по циклусу.

Још један недостатак VLIW архитектуре представља нагомилавање непотребног кода које се дешава када нису све извршне јединице ефикасно запослене и морају да извршавају инструкције које не раде ништа. Ово се дешава када има зависности у коду па се низ проточне обраде мора испразнити пре него што се настави са инструкцијама.

С обзиром да је број транзистора на чипу порастао, ови недостаци VLIW архитектуре су изгубили на важности. VLIW архитектури расте популарност, поготово на тржишту уграђених чипова, где је могуће дизајнирати наменски процесор за одрећену сврху унутар система-на-чипу. Уграђени VLIW прозводи су доступни од неколико произвођача, укључујући FR-V из Fujitsu-а, BSP15/16 из Pixelworks-а, ST231 из STMicroelectronics-а, TriMedia из NXP-а, CEVA-X DSP из CEVA-е, Jazz DSP из Improv Systems-а, и Silicon Hive. Texas Instruments TMS320 DSP линија је еволуирала, у својој C6xxx породици, да личи више на VLIW, за разлику од претходне C5xxx породице.

Референце

[уреди | уреди извор]
  1. ^ „CONTROL DATA 6400/6500/6600 COMPUTER SYSTEMS Reference Manual”. 21. 2. 1969. Архивирано из оригинала 2. 01. 2014. г. Приступљено 7. 11. 2013. 
  2. ^ Fisher, Joseph A. (1983). „Very Long Instruction Word architectures and the ELI-512” (PDF). Proceedings of the 10th annual international symposium on Computer architecture. International Symposium on Computer Architecture. New York, NY, USA: ACM. стр. 140—150. ISBN 978-0-89791-101-6. doi:10.1145/800046.801649. Приступљено 27. 4. 2009. 
  3. ^ „ACM 1985 Doctoral Dissertation Award”. ACM. Архивирано из оригинала 2. 04. 2008. г. Приступљено 15. 10. 2007. „For his dissertation Bulldog: A Compiler for VLIW Architecture. 
  4. ^ а б „Архивирана копија” (PDF). Архивирано из оригинала (PDF) 29. 09. 2011. г. Приступљено 12. 12. 2013. 
  5. ^ "EEMBC Publishes Benchmark Scores for Infineon Technologies' Carmel DSP Core and TriCore TC11IB Microcontroller"

Додатна литература

[уреди | уреди извор]

Спољашње везе

[уреди | уреди извор]