Naslov bi mogao da se postavi i kao pitanje: Koji dizajn pobeđuje: “kompleksno i brzo” vs “jednostavno i elegantno”? Uporedićemo dva glavna pravca u dizajnu arhitekture procesora. Uzeli smo računarske procesore kao primer, iako smatram da je ovo poređenje i šire primenljivo, pa je samim tim i zanimljivije.
Da krenemo od značenja termina. CISC – Complex Instruction Set Computer. RISC – Reduced Instruction Set Computer. Kompeksnost naspram Jednostavnosti.
CISC i RISC predstavljaju dva glavna i u početku dijemetralno suprotna pravca u dizajnu procesora. Istorijski, na samom početku ova podela nije postojala, i prvi procesori 1970-ih godina su sledili “CISC dizajn”.
Ideja RISC arhitekture je da postoji mali skup osnovnih instrukcija od kojih svaka obavlja jednostavan zadatak. Instruckije su “kratke” i uniformne. Uglavnom jedan CPU ciklus je dovoljan da se izvrši jedna instrukcija. Ova konzistentnost i jednostavnost omogućava efikasnost izvršavanja instrukcija i visoku mogućnost paralelizacije. Nedostatak je što programer mora da poznaje arhitekturu računara i generalno traži se više razmišljanja kako bi se napravio optimalan (asemblerski) kod.
CISC arhitektura suprotno tome ima veliki skup namenskih instrukcija različite dužine. Svaka instrukcija izvršava kompleksniji, specifičan zadatak pa je zato i skup (broj) instrukcija nužno veći nego kod RISC arhitekture. Za izvršavanje jedne CISC instrukcije potrebno je više CPU ciklusa. Možemo zamisliti da se jedna CISC instrukcija sastoji od više RISC instrukcija. Ovakav instrukcijski skup iziskuje kompleksniji dizajn čipa, veći utrošak tranzistorskog budžeta na namenske sklopove. Sa druge strane, programeru (odnosno danas kompajleru) je posao znatno lakši. Međutim, problem ovog pristupa je suštinske prirode i dolazi do izražaja na duže staze — vremenom svaka nova funkcionalnost će značiti dodatne instrukcije i možda i namenske sklopove u hardveru za njihovo izvršavanje, a starih se ne možemo odricati zbog potrebe za kompatibilnošću sa starijim (engl. legacy) kodom. Vremenom dobijamo “kalemljen”, neoptimalan dizajn instrukcijskog skupa i samog procesora, gde se značajan procenat čipa koristi samo za izvršavanje starog koda (čini mi se da je procena da je to minimalno 30% u savremenim Intel procesorima, ali moram da pronađem izvor).
RISC arhitektura omogućava “čist”, jednostavan dizajn arhitekture, gde se instrukcije kombinuju kao “lego kockice”. To daje veliku fleksibilnost (u smislu broja mogućnosti šta sve možemo napraviti) i mogućnost optimalnog dizajna softvera za hardver, ali traži veće znanje, umeće i razmišljanje od strane programera. Dobra analogija se može pronaći u dizajnu komandne linijie UNIX-a gde se koriste osnovne operacije (copy, move i sl.) koje se mogu lako kombinovati redirekcijom ulaza i izlaza, pipe-ovanjem (povezivanjem dve komande) i sl. Nasuprot tome imamo specijalizovane, krupne i moćne komande iz programskih “frejmvorka” koji u pozadini rade mnoge stvari za programera koji ih je pozvao.
Elem, pobedio je CISC dizajn i danas on preovladava na tržištu. Intel, kao dominantan igrač u industriji je dokaz toga. Iako su današnji CISC procesori uzeli delove iz RISC dizajna, x86 arhitektura je i dalje dominantno zasnovana na CISC principima. Možemo reći da je “brute force” pristup pobedio.
Zašto je to tako? Pogledajmo prvo istorijski kontekst. RISC je nastao 1980-ih godina i imao je osetno bolje performanse u odnosu na tadašnje CISC arhitekture jer je omogućavao veliku efikasnost u izvršavanju. Međutim, kako je razvoj računarstva ubrzano napredovao, posebno hardvera koji je sledio Moore-ovu zakonitost (dupliranje broja tranzistora na čipu svakih 12-18 meseci), tako smo mogli da priuštimo sebi da pravimo sve “brži” hardver koristeći sirovu snagu sve većeg broja komponenti (veći takt, kasnije veći broj jezgara). Sa druge strane, visoko kvalitetnih programerki i programera nikad nije bilo dovoljno. Nije to ništa novo danas, imali smo softversku krizu i 1960-ih godina zbog čega je, između ostalog, i propao prvi pokušaj Utility (Cloud) računarstva.
U tom smislu, u pogledu dizajna sistema, trampili smo pamet programera za sirovu (glupu?) snagu hardvera.
Da se vratimo na pitanje “zašto?”. Industrija u svetu kapitala skoro uvek ide linijom manjeg otpora i donosi rešenja na tržište što je pre moguće, ne obraća se mnogo pažnje na lepotu dizajna i dugovečnost arhitekture (koga to još zanima, biznis je ionako uvek glasniji od tehnike) — prvi proizvod koji radi i koji je dovoljno dobar, pobeđuje. Naravno, to prati i agresivnost komercijalno-propagandne mašinerije. Prvi korisnici sistema sa inferiornijim dizajnom (uglavnom jedini dostupan na početku) se formiraju, proizvođači zahvaljujući tom prilivu novca postaju još agresivniji… i kroz par iteracija formira se “pozitivna petlja” (zatvoreni ciklus) koju je skoro nemoguće u tržišnoj praksi razbiti — dominantan igrač je rođen. Pogledajmo samo Microsoft vs Apple, Windows vs UNIX, VHS vs Betamax. Drugi su imali bolji tehnički dizajn, ali su bili manje agresivni na tržištu. Dodatno, zbog pomenutog ubrzanog razvoja računarske tehnike, sve veća sposobnost i mogućnost donosi i sve veće potrebe i želje korisnika, i tako se vrzino kolo (pomenuta pozitivna petlja) formira koje traje do današnjih dana. Kapital pokreće svet, a tražnju valja zadovoljiti… kako bismo zaradili još više para, razume se.
Šta je rezultat ove tehničko-ekonomsko-društvene evolucije, odnosno višedecenijske tržišne utakmice u našem kapitalističnom svetu? Računarstvo ima enormnu snagu i potencijal, ali je fragmentirano. Računarski kapaciteti su rasuti, nepovezani i nedovoljno iskorišćeni. Svi izmišljamo “toplu vodu” i pravimo svoje sisteme, slab je stepen ponovnog iskorišćenja postojećih komponenti, tzv. programerska okruženja (engl. programming frameworks) su sve zastupljenija i niču kao pečurke, … Ima pomaka u dobrom smeru, kao što su korišćenje API-ja, mikroservisna arhitektura (ni ovo nije ništa novo) i sl, ali sa strane sistemskog dizajna i postavke arhitekture, naš pragreh i dalje prisutan.
Da ne bude sve baš crno… što se tiče sudbine RISC arhitekture, možda nije sve gotovo. Mislim da će se krug zatvoriti i da će RISC biti ponovo u modi. Usled popularnosti koncepta Internet of Things,dolazi do nagle proliferacije broja malih, namenskih (engl. embedded) sistema koji uglavnom koriste ARM procesore (RISC arhitektura!) i Linux operativni sistem (Unix-oliki OS). Dodatno, već smo dobrano udarili u plafon povećavanja performansi procesora na tradicionalan način pukim povećanjem brzine, odnosno frekvencije. Pošto Moore-ova zakonitost i dalje važi (pitanje koliko još dugo – predikcije kažu do 2025.), taj dodatni “tranzistorski budžet” koristimo tako što pravimo sisteme sa više procesora i više jezgara. To znači da hteli – ne hteli moramo da budemo mudriji u dizajnu softvera jer softver koji se oslanja na paralelno programiranje teži za pisanje. Ovaj trend vidimo i u dizajnu data centar serverskih sistema, ne samo u krajnjim, perifernim uređajima.
Zaključak prepuštam vama, a umesto toga ostavljam vas sa citatom čuvenog (ali ne dovoljno poznatog) Alana Keja, koji je inače bio značajan uzor Stiv Džobsu, ako je to uopšte ovde relevantno… Ja lično čvrsto verujem da će sistemski, integralan pristup dizajnu računarskih sistema “vratiti u modu” i dobiti ponovo na značaju.
Ako želiš da budeš u toku sa mitovima, trendovima i novostima iz sveta računarstva u Oblaku, prijavi se dole na naš Bilten!