Jako duga reč instrukcije

S Vikipedije, slobodne enciklopedije

Jako duga reč instrukcije ili VLIW se odnosi na arhitekturu procesora dizajniranu da iskoristi prednost paralelnosti na nivou instrukcije (ILP). Dok konvencionalni procesori uglavnom prihvataju programe koji izdaju instrukcije jednu za drugom, VLIW procesor prihvata programe koji eksplicitno mogu definisati koje će se instrukcije izvršavati istovremeno (tj. paralelno). Cilj ovog tipa procesorske arhitekture je da postigne veće performanse bez dodatne kompleksnosti nekih drugih pristupa.

Pregled[uredi | uredi izvor]

Tradicionalni pristup poboljšanju performansi u procesorskim arhitekturama je uključivao razbijanje instrukcija na pod-korake da bi se instrukcije mogle izvršavati delimično paralelno (protočna obrada), tako što bi se individualne instrukcije izvršavale potpuno nezavisno u različitim delovima procesora (superskalarna arhitektura), ili čak u redosledu suprotnom od onoga kako je zapisano u programu (izvršavanje van reda). Svi ovi pristupi uključuju povećanu složenost harvera (višu cenu, veća elektronska kola, veću potrošnju struje) jer procesor mora suštinski sve odluke da pravi interno. VLIW pristup, za razliku od toga, zavisi od samih programa kod kojih mora biti napravljena odluka koje će se instrukcije izvršavati paralelno i kako će se rešavati konflikti. U praksi ovo znači da kompajler (softver koji generiše finalni program) postaje dosta složeniji, ali je hardver jednostavniji od većine drugih pristupa paralelizmu.

Kao što je slučaj sa svakom novom arhitekturom, koncept je upotrebljiv samo onoliko koliko ga generisanje koda učini. Arhitektura dizajnirana za upotrebu u obradi signala može imati određene namenske instrukcije radi ubrzanja određenih komplikovanih instrukcija kao što je brza Furierova transformacija (FFT) ili određena izračunavanja koja se koriste u tomografskim kontekstima. Međutim, ove optimizacije su neupotrebljive ako kompajleri nisu sposobni da primete relevantne konstrukcije u izvornom kodu i konstruišu mašinski kod koji će pravilno iskoristiti napredne instrukcije procesora. Usled toga, programeri moraju biti sposobni da pišu kod tako da kompajleru bude lak za čitanje.

Motivacija[uredi | uredi izvor]

Procesor koji izvršava svaku instrukciju jednu za drugom (npr. skalarna arhitektura bez protočne obrade) može koristiti procesorske registre neefikasno, potencijalno dovodeći do loših performansi. Performansa moće biti unapređena izvršavanjem različitih pod-koraka sekvencijalnih instrukcija paralelno (ovo je protočna obrada), ili čak izvršavati instrukcije potpuno paralelno kao kod superskalarnih arhitektura. Dodatna unapređenja se mogu postići izvršavanjem instrukcija redosledom drugačijim od onoga kako je pisano u programu; ovo se zove izvršavanje van reda.

Ove sve tri tehnike imaju cenu složenosti harvera. Pre izvršavanja instrukcija paralelno, procesor mora proveriti da instrukcije nemaju međusobnu zavisnost. Na primer, ako se rezultat prve instrukcije koristi kao ulaz druge instrukcije, onda se te dve instrukcije ne mogu izvršiti paralelno niti se druga instrukcija sme izvršiti pre prve. Moderni procesori sa vanrednim izvršavanjem su povećali hardverske resurse posvećene rasporeli instrukcija i određivanju međuzavisnosti.

VLIW pristup, za razliku od toga, izvršava operacije paralelno na osnovu fiksnog rasporeda određenog prilikom kompilacije programa. S obzirom da se određivanje rasporeda instukcija (uključujući koje se operacije mogu izvršavati paralelno) radi od strane kompajlera, procesoru nije potreban hardver za raspodelu koji tri gore navedene tehnike zahtevau. Kao rezultat, VLIW procesori pružaju značajnu računarsku moć sa manje hardverske složenosti (ali većom složenosti kompajlera) nego što je slučaj sa većinom superskalarnih procesora.

Dizajn[uredi | uredi izvor]

Kod superskalarnog dizajna, broj izvršnih jedinica je nevidljiv sa aspekta skupa instrukcija. Svaka instrukcija predstavlja tačno jednu operaciju. Za većinu superskalarnih arhitektura, širina instrukcije je 32 bita ili manje. VLIW je tip MIMD-a.

Za razliku od toga, jedna VLIW instrukcija predstavlja višestruke operacije; specifično, jedna intrukcija predstavlja bar jednu operaciju za svaku izvršnu jedinicu uređaja. Na primer, ako VLIW uređaj ima 5 izvršnih jedinica, onda bi VLIW instrukcija za taj uređaj imala 5 operacionih polja, gde bi svako polje određivalo određivalo operaciju za jednu izvršnu jedinicu. Da bi se to postiglo, VLIW instrukcije su uglavnom bar 64 bita široke, a na nekim arhitekturama i mnogo šire.

Na primer, ovo je instrukcija za SHARC. U jednom ciklusu, ona izvršava množenje sa pokretnim zarezom, sabiranje sa pokretnim zarezom i 2 operacije autoinkrementiranja. Sve ovo staje u jednu 48-bitnu instrukciju:

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

Još od najranijih dana računarske arhitekture,[1] neki procesori su dobili nekoliko dodatnih aritmetičko logičkih jedinica (ALU) koje rade paralelno. Superskalarni procesori koriste hardver da odluče koje se operacije mogu izvršavati paralelno. VLIW procesori koriste sotfver (kompajler) da odluče koje đe se operacije izvršavati paralelno. S obzirom da je složenost raspoređivanja instrukcija preneta na kompajler, složenost hardvera može biti znatno smanjena.

Sličan problem se javlja kada se rezultat paralelizovane instrukcije koristi kao ulaz grananje. Većina modernih procesora „nagađa“ koje će grananje ili skok biti preduzeto i pre nego što se računanje završi, tako da može unapred da učita instrukcije za tu granu, ili (kod nekih arhitektura) da ih računa spekulativno. Ako procesor pogreši pri nagađanju, sve ove instrukcije i njihov kontekst moraju biti „odbačene“ i zatim ponovo učitane ispravne, što zahteva vreme.

Ovo je dovelo do znatno složenije logike pokađanja instrukcija, i jednostavnost originalnog RISC dizajna je izgubljena. VLIW nema ovu logiku, i stoga ima nižu potrošnju energije, verovatno manje dizajnerskih defekata i drugih negativnih osobina.

Kod VLIW-a, kompajler koristi heuristike i profile informacija da pogodi smer grane. Ovo mu omogućava da spekulativno pomeri i preuredi redosled operacija pre nego što krene grananje, pri čemu daje prednost najverovatnijem putu koji očekuje kroz granu. Ako grananje krene nepredviđenim putem, kompajler je već generisao kompenzatorni kod da bi odbacio spekulativne rezultate radi čuvanja programske semantike.

Akronim VLIW se takođe može odnositi na Promenljivu dužinu reči instrukcije, procesorski skup instrukcija dizajniran da učitava (ili kopira) doslovnu vrednost broja mašinskog koda u RAM na čipu radi bržeg procesorskog dekodiranja.

Vektorska procesorska jezgra (SIMD) se mogu kombinovati sa VLIW arhitekturom kao što je Fujitsu FR-V, dodatno povećavajući propustnost i brzinu.

Istorija[uredi | uredi izvor]

Termin VLIW, i koncept same VLIW arhitekture, je izmislio Josh Fisher u svojoj istaživačkoj grupi na Yale univerzitetu tokom ranih 1980ih.[2] Njegov originalni razvoj raspoređivanja trasa kao kompilacione tehnike za VLIW je razvijen kada je bio apsolvent na New York univerzitetu. Pre VLIW-a, koncept preraspodele funkcionalnih jedinica i paralelizma na instrukcijskom nivou u softveru je bio dobro poznat u praksi razvoja horizontalnog mikrokoda. Fišerove invoacije su se odnosile na razvoj kompajlera koji bi generisao horizontalni mikrokod iz programa pisanih u običnim programskim jezicima. Shvatio je da radi postizanja dobrih performansi i rada na širokoulaznim mašinama, mora da nađe paralelizam veći od onog unutar osnovnog bloka. Razvio je tehnike raspodele regiona radi identifikovanja dubljeg paralelizma nego nad osnovnim blokovima. Preraspodela trasa je jedna od takvih tehnika, i uključuje prvo preraspodelu najverovatnijih puteva osnovnog bloka, umetanje kompenzacionog koda da se izbori sa spekulativnim pokretima, raspoređuje drugu najverovatniju trasu, i tako dalje, dok se preraspodela ne završi.

Druga Fišerova inovacija je koncept da ciljana procesorska arhitektura treba biti dizajnirana tako da je lako kompajlirati za nju – kompajler i arhitektura za VLIW moraju biti dizajnirani u paru. Ovo je bilo delimično inspirisano teškoćom koju je Fišer primetio na Jejlu u vezi kompajliranja za arhitekture kao što je Floating Point Systems-ov FPS164, koji je imao složeni arhitekturu seta instrukcija (CISC) koja je razdvajala iniciranje instrukcije od instrukcija koje su čuvale rezultat, što je zahtevalo jako komplikovane algoritme raspodele. Fišer je razvio set principa koji karakterišu pravilni VLIW dizajn, kao što su samoizgladnjujuća protočna obrada, široke višeportne registarske fajlove, i memorijske arhitekture. Ovi principi olakšavaju kompajlerima da generišu brz kod.

Prvi VLIW kompajler je opisan u doktorskom radu Džona Elisa, koji je nadgledao Fišer. Kompajler je nazvan Bulldog, po maskoti Jejla. [3] Džon Rutenberg je takođe razvio neke važne algoritme raspodele.

Fišer napušta Jejl 1984. da bi osnovao svoju startap kompaniju, Multiflow, zajedno sa koosnivačima Džonom Odonelom i Džonom Rutenbergom. Multiflow je proizvodila TRACE seriju VLIW minisuperračunara, i isporučila svoj prvi računar 1987. Multiflow-ov VLIW je mogao da obradi 28 operacija paralelno po instrukciji. TRACE sistem je bio implementiran u MSI/LSI/VLSI kombinaciju pakovanu u kabinete, tehnologija koja nije više bila toliko korisna kada je postalo finansijski efikasnije integrisati sve komponente procesora (osim memorije) u jedan čip. Multiflow je rano zahvatio sledeći talas, kada je arhitektura čipova počela da dozvoljava višestruke procesore. Glavne poluprovodničke kompanije su prepoznale vrednost Multiflow tehnologije u ovom kontekstu, pa su kompajleri i arhitektura licencirani većini ovih kompanija.

Implementacija[uredi | uredi izvor]

Kompanija Cydrome je proizvodila numeričke VLIW procesore korišćenjem ECL tehnologije u istom vremenskom periodu (kasne 1980e). Ova kompanija, kao i Multiflow, prekinula je poslovanje nakon nekoliko godina.

Jedna od kompanija koje su licencirale Multiflow tehnologiju je bio Hjulet-Pakard, kome se Džoš Fišer priključio nakon što je Multiflow raspušten. Bob Rau, osnivač Cydrome-a, takođe se priključio HP-u nakon što se Cydrome raspao. Njih dvojca su vodili istraživanje računarskih arhitektura u okviru Hewlett-Packard-a tokom 1990ih.

Kao dodatak navedenim sistemima, otprilike u istom periodu (oko 1989-1990), Intel je implementirao VLIW u Intel i860, njihov prvi 64-bitni procesor; i860 je takođe bio prvi VLIW procesor na jednom čipu.[4] Ovaj procesor je mogao da radi i u jednostavnom RISC modu i u VLIW modu:

Tokom ranih 1990ih, Intel je predstavio i860 RISC procesor. Ovaj jednostavni čip je mogao da radi u 2 moda: skalarnom modu i VLIW modu. U VLIW modu, procesor je uvek dohvatao 2 instrukcije i pretpostavljao da je jedna celobrojna instrukcija, a druga sa pokretnim zarezom.[4]

VLIW mod je znatno korišćen u ugrađenim DSP aplikacijama s obzirom da su izvršavanje i setovi podataka bili jednostavni, dobro organizovani i predvidljivi, što je omogućavalo dizajnerima da iskoriste sve prednosti paralelnog izvršavanja; u VLIW modu i860 je mogao da održi performanse sa pokretnim zarezom u opsegu od 20-40 MFLOPS sa duplom preciznošću (što je jako puno za procesor tog vremena koji je radio na 25-50Mhz).

Tokom 1990ih, Hewlett-Packard je istražio ovaj problem kao nuspojavu njihovog istraživanja na PA-RISC porodici procesora. Oni su otkrili da se procesor može znatno pojednostaviti uklanjanjem složene logike raspodele sa procesora prenoseći je na kompajler. Kompajleri su tada bilo mnogo složeniji od onih iz 1980ih, pa je dodatna složenost u kompajleru smatrana nebitnom.

VLIW procesori su uglavnom konstruisani od višestrukih RISC-olikih funkcionalnih jedinica koje operišu nezavisno. Moderni VLIW-ovi tipično imaju četiri do osam glavnim funkcionalnih jedinica. Kompajleri generišu početne sekvence instrukcija za VLIW procesor na skoro isti način kao za obične procesore, generišući sekvencu RISC-olikih instrukcija. Kompajler analizira ovaj kod tražeći zavisnost među instrukcijama. Zatim raspodeljuje instrukcije na osnovu tih ograničenja. U ovom procesu, nezavisne instrukcije se mogu rasporediti za paralelno izvršavanje. S obzirom da VLIW-ovi tipično predstavljaju instrukcije koje se izvršavaju paralelno sa dužom reči instrukcije koja integriše individualne instrukcije, ovo rezultuje mnogo većim opkodom (od čega potiče termin „jako duga") koji definiše šta se izvršava u datom ciklusu.

Primeri modernijih VLIW procesora uključuju TriMedia medijski procesore iz NXP-a (prethodno Philips Semiconductors), SHARC DSP iz Analog Devices, C6000 DSP porodica iz Texas Instruments, i STMicroelectronics ST200 porodica bazirana na Lx arhitekturi (takođe dizajnirana od strane Džoša Fišera). Ovi moderni VLIW procesori su primarno uspešni kao igrađeni medijski procesori sa uređaje korisničke elektronike.

VLIW osobine su takođe ubačene u podesiva procesorska jezgra za SoC dizajn. Na primer, Tensilica-in Xtensa LX2 procesor integriše tehnologiju nazvanu FLIX (ekstenzije fleksibilne dužine instrukcije) koja omogućava više-operacijske instrukcije. Xtensa C/C++ kompajler slobodno može mešati 32- ili 64-bitne FLIX instrukcije sa jedno-operacijskim RISC instrukcijama Xtensa procesora, koje su 16 ili 24 bita široke. Pakovanjem višestrukih operacija u široku 32- ili 64-bitnu instrkcijsku reč i omogućujući da se ove višeoperacijske instrukcije mešaju sa kraćim RISC instrukcijama, FLIX tehnologija omogućava SoC dizajnerima da realizuju prednosti VLIW performanse eliminisanjem nepotrebnog koda ranijih VLIW arhitektura.

The Infineon Carmel DSP je drugo VLIW procesorsko jezgro namenjeno za SoC čipove; ono koristi sličnu tehniku poboljšanja gustine koda zvanu „podesiva duga reč instrukcije“ (CLIW). [5]

Van tržišta ugrađenih procesora, Intelov Itanium IA-64 EPIC se pojavljuje kao jedini primer široko korišćene VLIW procesorske arhitekture. Međutim, EPIC arhitektura se ponekad razlikuje od čiste VLIW arhitekture, s obzirom da EPIC propagira potpunu predvidljivost instrukcije, rotirajuće registarske fajlove, i jako dugu reč instrukcije koja može predstavljati grupe ne-paralelnih instrukcija. VLIW-ovi su takođe zadobili značajan proboj na tržištu grafičkih procesora, iako su se i Nvidia i AMD od tada prebacili na RISC arhitekturu radi povećanja performansi kod ne-grafičkih poslova.

Kompatibilnost sa starijim generacijama[uredi | uredi izvor]

Kada je silikonska tehnologija dozvolila da se napravi šira implementacija (sa više izvršnih jedinica), programi kompajlirani za ranije generacije nisu mogli raditi na široj implementaciji, jer je format binarne instrukcije zavisio od broj izvršnih jedinica mašine.

Transmeta rešava ovaj problem korišćenjem binarni-u-binarni softverskih kompajlera (nazvano preklapanje koda) u svojoj Crusoe implementaciji x86 arhitekture. U osnovi, ovaj mehanizam je namenjen da rekompajlira, optimizuje, i prevede x86 opkodove tokom izvršenja u interni mašinski kod procesora. S obzirom na to, Transmeta čip je interno VLIW procesor, efektivno razdvojen od x86 CISC seta instrukcija koji izvršava.

Intelova Itanium arhitektura (među ostalima) rešava problem kompatibilnosti na opštiji način. U okviru svake višestruke instrukcije, polje bita je alocirano da označi zavisnost od prethodne VLIW instrukcije u okviru toka programskih instrukcija. Ovi bitovi se postavljaju tokom kompajliranja, te rasterećuju hardver računanja ove zavisnosti. Ova ugrađena informacija o zavisnosti omogućava širim implementacijama da izvrše višestruke nezavisne VLIW instrukcije u jednom ciklusu, dok uže implementacije mogu da izvršavaju manji broj paralelnih VLIW instrukcija po ciklusu.

Još jedan nedostatak VLIW arhitekture predstavlja nagomilavanje nepotrebnog koda koje se dešava kada nisu sve izvršne jedinice efikasno zaposlene i moraju da izvršavaju instrukcije koje ne rade ništa. Ovo se dešava kada ima zavisnosti u kodu pa se niz protočne obrade mora isprazniti pre nego što se nastavi sa instrukcijama.

S obzirom da je broj tranzistora na čipu porastao, ovi nedostaci VLIW arhitekture su izgubili na važnosti. VLIW arhitekturi raste popularnost, pogotovo na tržištu ugrađenih čipova, gde je moguće dizajnirati namenski procesor za odrećenu svrhu unutar sistema-na-čipu. Ugrađeni VLIW prozvodi su dostupni od nekoliko proizvođača, uključujući FR-V iz Fujitsu-a, BSP15/16 iz Pixelworks-a, ST231 iz STMicroelectronics-a, TriMedia iz NXP-a, CEVA-X DSP iz CEVA-e, Jazz DSP iz Improv Systems-a, i Silicon Hive. Texas Instruments TMS320 DSP linija je evoluirala, u svojoj C6xxx porodici, da liči više na VLIW, za razliku od prethodne C5xxx porodice.

Reference[uredi | uredi izvor]

  1. ^ „CONTROL DATA 6400/6500/6600 COMPUTER SYSTEMS Reference Manual”. 21. 2. 1969. Arhivirano iz originala 2. 01. 2014. g. Pristupljeno 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. str. 140—150. ISBN 978-0-89791-101-6. doi:10.1145/800046.801649. Pristupljeno 27. 4. 2009. 
  3. ^ „ACM 1985 Doctoral Dissertation Award”. ACM. Arhivirano iz originala 2. 04. 2008. g. Pristupljeno 15. 10. 2007. „For his dissertation Bulldog: A Compiler for VLIW Architecture. 
  4. ^ a b „Arhivirana kopija” (PDF). Arhivirano iz originala (PDF) 29. 09. 2011. g. Pristupljeno 12. 12. 2013. 
  5. ^ "EEMBC Publishes Benchmark Scores for Infineon Technologies' Carmel DSP Core and TriCore TC11IB Microcontroller"

Spoljašnje veze[uredi | uredi izvor]