H a r d v e r
PC home - osnovna strana
PC #32 - Februar 1998

Merced i njegovi kompajleri

Istorija je pokazala da se performanse procesora udvostručuju svakih osamnaest meseci. Pošto smo već doživeli Pentium II, i videli šta se može sa trenutnom tehnologijom, sa pravom se pitamo šta je sledeće? Odgovor se zove Merced. 

Bojan Petrović


U Santa Klari, Kalifornija, 9. oktobra 1997. godine, korporacija Intel je objavila da će prvi primerci nove, 64-bitne familije procesora pod kodiranim imenom Merced biti u prodaji tokom 1999. godine. Procesor će u početku biti rađen u 0.18 mikrometarskom procesu koji se upravo razvija. Uporedo sa 64-bitnim softverom koji je takođe u razvoju, Merced će izvršavati i sav postojeći Intel kompatibilan 32-bitni softver. Mesec dana kasnije, 14. oktobra Intel i Hewlett-Packard su u San Hozeu (Kalifornija) detaljnije predstavili ovaj zajednički projekat - uz kasnije objavljene informacije, svi važni detalji o ovom projektu koji će obeležiti narednu godinu poznati su javnosti.

Paralelne ideje

Problem u rastu performansi današnjih procesora nije u tehnologiji njihove izrade, već na prvom mestu u saradnji sa memorijom. Brzina memorije ne prati rast brzine procesora: godišnji rast brzine memorije je oko pet procenata, što je u velikoj nesrazmeri sa rastom snage procesora od gotovo 60% godišnje. Ova disproporcija se ogleda u izvršavanju mašinskih programa, koji su u velikoj meri sekvencijalni - instrukcije se izvršavaju jedna za drugom, a svaki zahtev za podatkom znači čekanje na sporu memoriju. Problem se rešava na više načina: višestepenom keš memorijom čija je brzina mnogostruko veća od standardne, upotrebom malobrojnih procesorskih registara za čuvanje dobavljenih podataka koji će se koristiti ponovo i uvođenjem paralelizma u mašinski kod.
Neka forma paralelizma već postoji: inteligentni kompajleri, kakve danas koristimo, umeju da optimizuju kod tako da se ovaj podeli na sekvence koje se mogu odvijati nezavisno i paralelno. Nakon toga, sam procesor nastavlja isti deo posla, bukvalno "pogađajući" koji bi sled radnji dao najbolje rezultate. Tu spada i obrada grananja, gde ugrađena logika pokušava da predvidi buduća grananja u kodu (najčešće oslanjajući se na statistiku prethodnog izvršavanja) i na taj način dođe do nizova instrukcija koje se mogu izvršiti u paraleli. Sve to spada u vrlo komplikovanu, vrhunsku tehnologiju, koja zahteva mnogo hardvera, pažljiv i dugotrajan razvoj, testiranje i, naravno, skupu proizvodnju. Sam proces "pogađanja" redosleda radnji i grananja donosi dodatne penale u performansama.
Kako bi izgledalo efikasnije rešenje? Pravi, eksplicitni paralelizam u samom kodu, formiran u vidu seta instrukcija, čime bi se procesoru unapred objasnilo šta da radi. Ideja je da se svaki pipeline koji ne čeka na podatak konstantno puni nizom pripremljenih instrukcija, čime bi se maksimalno iskoristila snaga procesora. Ako sada iznesemo činjenicu da preko 20% procesorskog vremena odlazi na pogađanje grananja i paralelizaciju izvršavanja koda, možemo zamisliti skok u performansama.

Novi set instrukcija

Tako dolazimo do novog pojma koga ćemo koristiti u budućnosti kada su procesori u pitanju: EPIC (Explicitly Parallel Instruction Computing) je nova tehnologija koja je u rangu da CISC ili RISC, i koja definiše eksplicitno korišćenje paralelizama u izvornom kodu (sorsu) programa. Novi set instrukcija je dobio oznaku IA-64, za razliku od postojećeg 32-bitnog seta sa imenom IA-32.
Prvi korak, osim definicije samog seta instrukcija, je povećanje broja registara: Merced će imati 128 celobrojnih registara, što je omogućeno smanjenjem potrošnje logičkih kola na jedinice za izvršavanje van redosleda (današnje rešenje za paralelizam). Njima će se pridružiti još 128 registara za rad sa racionalnim brojevima (pokretni zarez). Ovaj ogroman broj registara je pre svega tu da bi se omogućilo stvarno paralelno izvršavanje koda, a njegovo postojanje je uslovljeno potrošnjom dodatnih hardverskih resursa (pre svega tranzistora). Izborom ove tehnologije nestaje potreba za postojećom logikom za dinamičko odlučivanje o toku izvršavanja, pa se u zbiru dobija jasna ušteda.
Potom, predviđanje. Recimo da u kodu postoji odluka koju treba doneti, u obliku "Ako-onda-inače". Kada je "Ako" uslov ispunjen, uradiće se ono što sledi posle "onda", a kada nije, ono što sledi posle "inače". U praktičnom životu se tu slabo šta može postići predviđanjem: situacija u potpunosti odgovara ulasku u banku, gde ako hoćete samo stanje žiro računa, dajete karticu, inače prelazite na podizanje/uplatu novca.

Predikati instrukcija

Kada je procesor u pitanju, ono što sledi posle "onda" i "inače" su instrukcije; koje od njih će biti izvršene se zna tokom obrade onoga što sledi iza "Ako", i na osnovu toga se bira niz instrukcija. Dakle, neka logika mora da odlučuje o tome koje instrukcije preskočiti, koje grananje odbaciti i tako redom.
EPIC donosi nešto mnogo prostije, skoro genijalno: za svaku instrukciju će postojati i predikat (logički) koji će moći da ima vrednost true ili false. Tokom ispitivanja uslova "Ako" će se doći do ove vrednosti, pa će svim instrukcijama biti prosleđen predikat: one koje slede posle "onda" će dobiti predikat true, a one iza "inače" dobiće false. U zavisnosti od predikata, jedinice za obradu će nakon izvršenja instrukcije da ignorišu rezultat ili ga predaju dalje - uopšte nema grananja, niti razdvajanja na dve ili više celina, već će se održati postojeća struktura koda koji će se izvršavati potpuno sekvencijalno.
Ovim se dobija veliki blok instrukcija koji se može izvršiti u jednom pipeline-u, bez problema sa mogućim skokovima koji bi prekinuli izvršavanje. U drugom pipeline se u isto vreme može izvršavati neki drugi segment koda, pripremljen na isti način. Praktični testovi ove metode (upotreba predikata za predviđanje toka) pokazuju da se dobrom optimizacijom može eliminisati 50% skokova u kodu, što je zaista fantastičan rezultat, ako uzmemo da se u isto vreme eliminiše preko 40% grešaka u predviđanju skoka. Naravno, kompajler je taj koji generiše ovakve instrukcije, pa će on od sada podnositi najveći teret: bolje je da proces kompajliranja (koji se radi jednom) traje duže, a da se rezultujući kod izvršava brže, nego obrnuto.

Spekulativno izvršavanje

Šta se dešava kada se negde u kodu javi potreba za učitavanjem podataka iz memorije? Program bi se do tog trenutka normalno izvršavao, a onda bi sve stalo da se sačeka na spori RAM. Dobra "špekulacija" rešava ovaj zaostatak tako što inicira učitavanje podatka pre nego što je on zaista i potreban, tako da u trenutku kada podatak bude potreban on već bude u nekom registru.
Problem je što treba znati trenutak kada je taj podatak zaista i validan - možda će ga nešto promeniti pošto je čitanje već inicirano. Novi mehanizam omogućava da se podatak učita praktično bilo kada, tako što se uz njega pojaviti i fleg koji će govoriti o validnosti informacije: ako se tokom učitavanja ne javi greška, podatak je validan.
Opet će kompajler brinuti o tome da se potreba za podatkom ne pojavi pre nego što je on učitan i da on bude usklađen sa sledom instrukcija. Kompajler će sam umetnuti instrukciju za spekulativno učitavanje podatka, kao i naredbu za proveru validnosti. Znači, opet nema potrebe za intervencijom na prevedenom kodu kojom bi se amortizovao problem spore memorije - veliki plus za paralelizam.

Šlag na torti

Šlag na torti je vertikalna kompatibilnost: IA-64 set instrukcija neće biti jedini u budućim procesorima. Za početak, sigurno je da će postojeći IA-32 set (dakle onaj koji nalazimo u svim Intel kompatibilnim procesorima) biti prenesen u novu generaciju i da će, zahvaljujući tome, postojeća baza softvera biti potpuno sačuvana. Istovremeno, novi procesori će, zahvaljujući velikim brzinama i novoj logici, biti dovoljno moćni da se umešaju u tržište jakih radnih stanica, a da se pri tom ne obustavi rad na IA-32 procesorima.
Čak je i redosled događaja poznat: nakon svima znanog Pentium II procesora, krenuće Deschutes, koji će ovu tehnologiju dovesti na 0.25 mikrometarski proces i omogućiti još veće brzine u megahercima, ali i rad Pentium II procesora u notebook računarima. Za novi procesor će biti korišćen Slot 1 i Slot 2, čime se dobijaju dva nivoa performansi sa dva nivoa cena, za isti procesor.
Napredak IA-32 će biti obezbeđen kroz dalji razvoj mikroarhitekture, proizvodnog procesa i samih radnih platformi, tako da će ova klasa procesora u početku sasvim sigurno ostati dominantna na većem segmentu tržišta. IA-64 tehnologija će prvenstveno obuhvatiti najviši segment tržišta, gde će Merced odskakati cenom i performansama. Nešto posle njega, najverovatnije 2001. godine, pojaviće se sledeći procesor IA-64 klase, čiji planovi već postoje. Njegove performanse zahvaljujući naučenom na Merced-u, će biti dva puta bolje.
Očekujemo, dakle, ciljnu podela po platformama: IA-32 arhitektura će biti zastupljena na mobilnim i stonim računarima kao i jeftinijim serverima i radnim stanicama, dok će IA-64 svoje mesto naći u klasi jakih radnih stanica i servera... dok cena ne padne toliko da ova oprema postane interesantna i jednostavnije poslovne, pa čak i kućne primene.

Početak

Mnoge velike kompanije su već započele ili uveliko rade na softveru i hardveru namenjenom Merced-u i njegovoj arhitekturi. Pomenimo samo Microsoft, Comapaq, NEC, Oracle, IBM, Informix, ALR, Adobe... Microsoft već razvija 64-bitni Windows NT, koji će garantovati uspeh platforme u celini, a velika baza postojećeg 32-bitnog softvera garantuje lako "primanje" Merced-a u prvim trenucima nedovoljne ponude 64-bitnog softvera.
Znajući politiku cena koju Intel vodi, jasno je da 1999. neće biti godina u kojoj ćemo na svom stolu ugledati računar zasnovan na Merced procesoru. Možda ni 2000. neće biti srećna u tom smislu, ali jedno je sigurno: Merced i EPIC tehnologija su prvi pravi napredak posle mnogo vremena!


PC home - osnovna strana Novi broj|Arhiva|Pretrazivanje svih brojeva|O nama
Pretplatite se na PC|Postanite saradnik casopisa PC|Pitanja i komentari u vezi casopisa