Jel vidiš Piki ....To znači da mogu i da lupam gluposti...niko neće opet razumeti.
A sad šalu na stranu, tu sam da razjasnim sve pojmove. Da bi objasnio npr. šta je AGU (Adress Generation Unit), moram da objasnim kako radi RAM memorija.
Prvo, memorija je adresirana, adrese idu od 0-42-bita u 64-bitnom sistemu. Fizička memorija je adresirana od strane memorijskog kontrolera i MMU jedinice u procesoru.
Daklem...imamo fizičke adrese i virtuelne. E pa operativni sistem radi sa virtuelnim, a memorija je podeljena na strane. AGU računa te memorijske adrese, a TLB kešira te memorijske strane i onda procesor "zna" gde da nađe podatak u memoriji, t.j. gde je stranica, a ako je stranica istisnuta u pagefile, onda imaš page fault. To sam već pisao u tekstu o HUMA arhitekturi i verovanto još negde. Da bi to sve objasnio ponovo trebalo bi da pišem tekst na 40 strana, a ne na 17. Dakle, suština je mnogo jednostavna, samo treba da pitate.
Haswell ima 3 paralelne AGU jedinice, SB/IB i Piledriver imaju 2. AMD K7/K8/K10 je imao 3, ali je organizacija bila totalno drugacija, pa nisu bile iskoriscene.
Onda šta je front end: pa kroz front end dolaze instrukcije, a kroz back end podaci. To je tzv. harward arhitektura. U memoriji postoji jasna organizacija gde su podaci, a gde je kod. Procesor po konvenciji tacno "zna" odakle da cita podatke, a odakle instrukcije. Instrukcija ima nekoliko bajtova, a u to ulaze, opkdod, adresa prvog operanda, drugog operanda, eventualno treceg operanda ako je fma3 ili avx itd...ima tu jos po nesto da se napise ali ugrubo to je to. Tako npr, fetch instrukcija predstavlja deo u procesoru koji dovodi u serijskom obliku instrukcije na dekodiranje, one se rasporedjuju iz reda u parelizam na dekodiranje po 4 maksimalno. Ako je zagušen fetch onda dekoding rejt nije dovoljan, pa je IPC smanjen. Naravno to je u teoriji tako, a u praksi ima tu mnogo zavrzlama. Prvo nisu sve instrukcije iste duzine, jer je u pitanju x86 CISC. Da je RISC kod bi bio ortogonalan i poravnat, pa bi stvar bila prostija.
Mikrooperacije su dekodirane instrukcije, to je ortogonalan kod, one su sve iste dužine. To je tako uređeno da bi se brže izvršavale i da bi se ostvario bolji paralelizam. To je problem pakovanja, ako imaš cigle različite veličine, mnogo ćeš ih teže upakovati u kutiju, a ako su iste, to onda nije neki problem.
Šta je FAT debelo jezgro, to ste sigurno skontali iz moje priče. Npr. Haswell je debeo, a Piledriver je mršav.
Šta je Reorder Buffer sam nacrtao u tekstu, fora je u tome što instrukcije dolaze u nizu, t.j. mikrooperacije, a isporučuju se na izvršavanje paralelno po 4 ka rezervacionoj stanici, koja predstavlja svojevrsni bazen za instrukcije iz kojeg se biraju instrukcije za koje je u trenutku dostupan izvršni port i podatak iz data keša, odnosno registra. Dakle, operandi, t.j. podaci se učitavaju u PRF (physical register file) odakle izvršne jedinice direktno rade sa njima.
To sve naravno nije nikakva mudrost, ali je mudrost kako postići što veću efikasnost u paralelnom izvršavanju instrkcija, naročito kada imamo međuzavisne podatke u memoriji.
Ima li još nekih pitanja?