Dosta je tesko zakljuciti nesto iz patenata. Taj iz
1999. definise 4 instrukcije za rad sa spekulativnim thread-ovima ali nista ne govori o tome da li te instrukcije generise sam procesor ili ipak treba specijalan kompajler koji ce da generise odgovarajuci kod. U drugom slucaju, to u sustini nije nista novo. Intel je radio (i valjda jos radi?) na takvom projektu:
Intel Mitosis. (I u ne-x86 svetu ima takvih projekata.)
U slucaju AMD-a je sigurno samo jedno: Ako stvarno postoji RHT, K8 je morao od starta biti prilagodjen za tako nesto. Da nije, cela stvar bi se vise nego jasno videla na rev. F die shot-ovima (sem ako AMD nije photoshop-ova die shotove pre nego sto su stigli u javnost, ali to vec ide u teoriju zavere
😀 ).
Ako su isli na neki sistem slican tom patentu iz '99, ali sa harderski generisanim threadovima, to bi izgledalo ovako:
Bilo bi jedno master i jedno slave jezgro gde bi master jezgro dekodirao sve instrukcije i kasnije jedan deo slao slave-u na izvrsavanje. U ovom slucaju decode postaje usko grlo i prakticno cini bilo kakavu tradicionalnu zamisao 6-way izvrsavanja besmislenom. U tom slicaju bi bilo najlogicnije da slave procesor izvrsava drugu stranu branch instrukcije - a patent bas definise Fork instrukciju koja to cini. Uz to bi slave jezgro moglo da sluzi i za neki tip load forwarding-a, mada je to veci znak pitanja.
Potrebne modifikacije jezgra: Dekoderi koji ce generisati odgovarajuci kod (moguca veza sa virtuelizacijom, ali nije sigurno); direktna veza izmedju jezgara na reorder buffer-u i bypass bus-u; buffer za prevodjenje instruction tag-ova sa jednog na drugi procesor i synchronization jedinica kao u patentu.
Drugi tip implementacije je onaj sto mnogi predlazu tj. da se dva procesora vide kao jedan 6-way i da tako funkcionisu od pocetka do kraja. Za tako nesto bi bilo potrebno da su jezgra izuzetno blisko povezana, pogotovo dekoderi. Opet bi postojalo master i slave jezgro, ali ovoga puta bi master fetchovao parne, a slave neparne linije koda (umesto da ih sve master dekodira kao u proslom slucaju). Tu problem predstavlja grananje, jer u tom slucaju jedno jezgro mora drugome da posalje adressu sledece instrukcije ili eventualno samo neka vrsta konstrole tako da master ponisti slave-ove instrukcije. Kako god bilo to mora da se izvede jako brzo - najvise 1 ciklus kasnjenja (idealno 0). Zbog toga dekoderi moraju biti izuzetno blisko povezani i mnogi govore da je to moguce samo ako jezgra dele jedinstveni dekoder. Posle dekodera problem nastaje kod register file-ova i schedulera, mada je ovo mnogo lakse resivo nego dekoderi. AMD ima patente i za simetricne scheduler-e povezane dependecy vector-om (mada je to po svemu sudeci namenjeno post-K8L jezgru). Dva reorder buffera nije tako veliki problem (Alpha EV6 radi tako uz 1 ciklus kasnjenja izmedju register file-ova), ali zbog specificnog dizajna 2xK8 bi morao imati komplementarne reorder buffere (umesto dve kopije istog kao kod Alphe) da bi mogao odrzati 6-way izvrsavanje. Sve u svemu ova druga implementacija nije uopste naivna.
Naravno, postoji i mogucnost da je ceo RHT rezultat igre gluvih telefona i da ce AMD u stvari da omoguci dinamicno iskljucivanje jednog jezgra i overklokovanje drugog. I tako bi mogli dobiti par % u single threaded programima.
S druge strane digla se prasina i oko
Intel Core Multiplexing, koji je po jednima novi hyper-threading, po drugima intelov reverse HT, a mozda nije ni jedno ni drugo... Lik sa xtremesystems je rekao da na enabled sve radi normalno ali na disabled nece da se podigne sistem. Na osnovu toga bih rekao da se radi o tehnologiji vezanoj za FSB. Kad je multiplexing ukljucen FSB vidi dva jezgra kao jedno (pa FSB moze da radi na 1066 i 1333 za razliku od Preslera), a kad je iskljucen vidi kao dva opterecenja. To bi bar bilo u skladi sa klasicnim terminom multiplexing na polju slanja signala.
P.S. Cisto da dolijem malo ulja na AMD+ATI vatru
🙂
AMD Patent iz 2004 - CPU and graphics unit with shared cache