Procesoriuose su ilgu komandos žodžiu (VLIW) specialiuose komandų laukuose yra nuorodos dėl lygiagretaus duomenų apdorojimo.
Šiuose procesoriuose yra keli funkciniai įtaisai galintys vienu metu apdoroti duomenis atskiruose konvejeriuose.
Pagrindinės problemos, kurias projektuotojai turi išspręsti juos projektuodami yra:
Ø Komandų priklausomybės pagal duomenis pašalinimas;
Ø Adresų ir duomenų apdorojimo paskyrimas atskiriems procesoriams;
Ø Išankstinis komandų išrinkimas ir nukreipimų nuspėjimas.
Komandų priklausomybės pagal duomenis sumažinimas svarbus, kai programoje po rašymo W yra skaitymo R komanda (RAW read after write). Žr. pav 2.2. Tokias komandas vykdant atskiruose procesoriuose vienu metu, gaunamas neteisingas rezultatas. Kad taip neatsitiktų, registrus galima pervardinti, antrosios komandos vykdymo fazę pradėti tik jau turint atnaujintą registro r3 turinį.
2.2. pav. Komandų priklausomybė pagal duomenis
Adresų ir duomenų apdorojimo paskyrimas atskiriems procesoriams įgalina sutapatinti laike adresų ir duomenų apdorojimą. Adresai visada yra tik sveiki skaičiai. Tuo tarpu duomenys gali būti ir slankaus kablelio formos. Parengti adresai ir duomenys sudaro eiles, todėl tik atsilaisvinus techniniams resursams, operacija vykdoma nedelsiant.
Adresų procesorius Komandų procesorius
2.3. pav. Procesorius su paskirstyta architektūra
Išankstinis komandų išrinkimas ir nukreipimų nuspėjimas taip pat yra labai svarbus. Nemaža kliūtimi organizuojant lygiagretųjį duomenų apdorojimą yra programoms charakteringi ciklai. Nukreipimo sąlygos formavimas, komandos išrinkimas, dešifravimas ir veiksmų su adresais atlikimas užima nemažai laiko, todėl konvejeriuose atsiranda tušti taktai. To išvengti įmanoma tokiais būdais:
Ø Nuspėjant nukreipimus;
Ø Keičiant atliekamų komandų eiliškumą;
Ø Sąlyginai vykdant tiek nukreipimo, tiek ir kitos programos šakos komandas.
Nuspėjant nukreipimus nelaukiama kol sąlyga bus patikrinta, o pradedamos vykdyti nukreipimo (dažniausiai tai naujo ciklo) komandos. Jei vėliau išaiškėja, kad nuspėjimas neteisingas, tenka atliktus veiksmus anuliuoti.
Keičiant atliekamų komandų eiliškumą taip pat galima išvengti tuščių taktų, tačiau duomenų tarpusavio priklausomybių šalinimas tuo atveju vėlgi lėtina procesoriaus darbą.
Sąlyginai vykdant tiek nukreipimo, tiek ir kitos programos šakos komandas užimami du konvejeriai, tačiau vieno iš jų dabas gali būti pratęstas po to, kai patikrinama nukreipimo sąlyga.
Superskaliarinio procesoriaus architektūra pateikta pav. 2.4.
Kadangi vienu taktu superskaliariniame procesoriuje reikia išrinkti kelias komandas, padidinti reikalavimai keliami procesoriaus – atmintinės magistralei, pirmiausia jos pločiui. L1 priešatmintinės duomenims ir komandos naudojamos atskiros. Dešifruotos ir parengtos vykdyti komandos perduodamos į buferinius įtaisus ir, atsilaisvinus reikiamiems vykdomųjų įtaisų resursams, jos patenka į atitinkamus vykdymo konvejerius. Apdorojami duomenys perduodami iš atitinkamų registrų. Svarbu, kad atliktų operacijų rezultatai būtų pertvarkomi ir fiksuojami taip, kaip numatyta programos kode.
2.4 pav. Superskaliarinio procesoriaus architektūra
Baigiamasis komandos vykdymo etapas – procesoriaus būsenos pakeitimas priklausomai nuo atliktos komandos. Tai reiškia, kad nežiūrint lygiagretaus programos komandų vykdymo procesoriuje, turi būti išsaugomas nuoseklaus komandų vykdymo, numatyto programoje modelis.
Nors fizinė procesoriaus būsena pasikeičia iš karto įvykdžius komandą, architektūrinė būsena tampa aiški tik tuomet, kai jau nustatytas sąlyginio nukreipimo tikrasis rezultatas.
Superskaliarinio mikroprocesoriaus struktūra parodyta pav.2.5.
2.5 pav. Superskaliarinio mikroprocesoriaus sandara
Tiek superskaliariniai, tiek ir ilgo žodžio procesoriai turi tik vieną komandų skaitiklį, todėl juos galima būtų pavadinti vienagijais, tuo tarpu procesoriai turintys du ar daugiau komandų skaitiklių vadinami daugiagijiniais. Toks jų organizavimo būdas leidžia pasiekti žymiai gilesnį lygiagretaus duomenų apdorojimo lygį. Tokiu būdu geriau išnaudojami funkciniai įtaisai duomenims apdoroti ir tuo pačiu užtikrinamas didesnis procesoriaus darbo stabilumas (jis paprastai “nepakimba”). Kaip matyti iš pav.2.6. kiekvienas procesorinis įtaisas vykdo atskirą programos komandų giją naudodamas atskirą registrų failą. Planuotojas atsakingas už savarankiškų programos gijų išskyrimą ir nukreipimą į procesorinius įtaisus.
2.6 pav. Daugiagijinio (hypertreading) procesoriaus sandara
Programos gijos ne visada yra pakankamai nesusietos viena su kita, todėl ir gaunami rezultatai ne visada patvirtinami.
Komentarų nėra:
Rašyti komentarą