PC Press
O nama
O nama
Pretplata
O nama
Postanite saradnik PC-ja
Kontakt sa redakcijom
PC Press
Novi broj
Novi broj   
Pretrazivanje
Arhiva
Arhiva   
PC Online
PC Plus   
Specijalna izdanja
Hardver Hardver
PC #32 : Februar 1998

 Naslovna  Sadržaj 
Bojan Petrović  

Merced i njegovi kompajleri

Pentium II smo već doživeli, a sledeća stepenica je P7 ili Merced. Kakve će biti njegove karakteristike?

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 predstavili ovaj zajednički projekat.

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 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 redosled radnji dao najbolje rezultate. Tu spada i obrada grananja, gde ugrađena logika pokušava da predvidi buduća grananja u kodu (oslanjajući se na statistiku prethodnog izvršavanja) i tako dođe do nizova instrukcija koje se mogu izvršiti u paraleli. Sve to spada u komplikovanu, vrhunsku tehnologiju, koja zahteva mnogo hardvera, vremena za testiranje i novca. 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...

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.

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. Testovi ove metode pokazuju da se dobrom optimizacijom može eliminisati 50% skokova u kodu, što je fantastičan rezultat, ako znamo da se u isto vreme eliminiše preko 40% grešaka u predviđanju. Kompajler je taj koji generiše ove instrukcije, pa će on podnositi najveći teret: bolje je da kompajliranje traje duže, a da se kod izvršava brže.

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 će 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 i naredbu za proveru validnosti. Znači, 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 (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 Pentiuma II, krenuće Deschutes, koji će ovu tehnologiju dovesti na 0.25 mikrometarski proces i omogućiti 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.

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 tržištu. IA-64 tehnologija će prvenstveno obuhvatiti najviši segment tržišta, gde će Merced odskakati cenom i performansama. 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 podelu: IA-32 arhitektura će biti zastupljena na mobilnim i stonim računarima, dok će IA-64 mesto naći u klasi jakih radnih stanica i servera...

Početak

Mnoge kompanije su već započele rad na softveru i hardveru namenjenom Merced-u i njegovoj arhitekturi. Pomenimo samo Microsoft, Compaq, NEC, Oracle, IBM, Informix, ALR, Adobe... Microsoft već razvija 64-bitni Windows NT, koji će garantovati uspeh platforme, a baza postojećeg 32-bitnog softvera garantuje lako "primanje" Merced-a u početku, dok nema dovoljno 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!