Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Architektura Mercedu podrobněji (2)

20.10.1999, Jindřich Šaršon, zpráva
Architektura Mercedu podrobněji (2)
Co vymyslel Intel tak převratného? To se dozvíte v pokračování našeho seriálu.
V minulém dílu jsme skončili u seskupování instrukcí Mercedu do balíčků a superbalíčků. Všem, co první díl seriálu nečetli, bych doporučil si ho nejprve přečíst (resp. pro pochopení druhé části to považuji za nutnost) a teprve poté pokračovat tímto dílem.

Jak funguje seskupování instrukcí
Jen pro osvěžení paměti bych připomněl, že balíček je trojice 41-bitových instrukcí které se mohou vykonat najednou, aniž by došlo ke konfliktu. Podobně superbalíček je skupina na sobě nezávislých balíčků. K objasnění toho, jak to funguje bych uvedl krátký příklad, zapsaný v pseudokódu. Představme si následující programovou posloupnost:

(1) A = 1
(2) B = 2
(3) C = 3
(4) A = A + 1
(5) B = A + 1
(6) C = C + 1
(7) Zobraz B

Pokud by tato část programu proběhla na počítači bez pipeliningu, tak by se na obrazovce objevilo číslo 4. Ovšem jak již bylo napsáno dříve, pomocí pipeliningu je možné zpracovat několik instrukcí najednou a pokud by najednou probíhaly řádky (4) a (5) a provedení řádku (5) skončilo dříve než řádek (4) (což se u procesoru s pipeliningem může docela běžně stát), byl by výsledek programu číslo 2, což je evidentně špatně. Kompilátor pro Merced proto musí rozdělit výše uvedený kód do skupin (superbalíčků), ve kterých již konflikty nejsou (za instrukcí je vždy uvedeno číslo řádku původního kódu)

Sk. 1
A = 1 (1)
B = 2 (2)
C = 3 (3)
A = A + 1 (4)
C = C + 1 (6)
Sk. 2
B = A + 1 (5)
Sk. 3
Zobraz B (7)

Procesor pak může vzít tyto balíčky a instrukce v nich provádět současně. Ušetří se tím značná část výkonu, protože není nutné provádět detekci při běhu programu.

Předvídání podmínek – verze od Intelu
O předvídání podmínek jsem již psal v článku o Apple G4, proto jen ve zkratce. Představme si následující část programu:

Pokud A = 1 pak
dělej něco
jinak
dělej něco jiného

Moderní procesory (např. G4) udržují v paměti informaci, kolikrát proběhly jednotlivé větve podmínky. Proto pokud narazí na toto rozvětvení, nečeká na vyhodnocení podmínky, ale začne zpracovávat častěji probíhající větev. Itanium na to jde trochu jinak. Kompilátor přepíše výše uvedenou část programu asi takto:

(1) Pokud A = 1 pak potvrď [1] jinak potvrď [2]
(2) [1] dělej něco
(3) [2] dělej něco jiného
    Tak a teď co s tímto kódem udělá Itanium: Na řádku (1) zjistí, že dojde k větvení programu, konkrétně že může pokračovat jednou ze dvou větví. Začne proto zpracovávat obě větve najednou a současně vyhodnocovat podmínku. Ve chvíli, kdy je podmínka vyhodnocená, potvrdí se platnost jedné větve. Což znamená, že se zapíší všechny změny (do paměti, registrů a podobně) které instrukce vybrané větve provedly. Síla Itania spočívá v tom, že může provádět až 64 větví najednou, náš příklad byl velmi jednoduchý, ve skutečnosti jsou podmínky v programu mnohem složitější.

    Příště: Registry

    Podle Firing Squad