Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
1. Preposielanie údajov (obtok):
* Mechanizmus: Toto je najbežnejšia a najpriaznivejšia metóda. Ak je výsledok inštrukcie v neskoršej fáze potrubia potrebný inštrukciou v skoršej fáze, výsledok sa posiela priamo z neskoršej fázy do skoršej fázy, čím obchádza prístup k pamäti.
* Príklad: Povedzme, že inštrukcia i1 píše na registráciu R1 a inštrukcia I2 znie z R1. Preposielanie údajov by poslalo hodnotu napísanú I1 priamo na I2, čím by zabránilo stánku, aj keď I1 nedokončil svoj zápis do pamäte.
* Účinnosť: Vysoko účinné pri riešení RAW (čítané po zápise) Riziká, kde závislosť je medzi písaním pokynov a potom čítaním toho istého registra.
2. Zastavenie (vloženie bubliny):
* Mechanizmus: Ak nie je možné presmerovanie údajov (napr. Závislosť je v potrubí príliš ďaleko od seba alebo zahŕňa prístup k pamäti), potrubie sa zastaví vložením „bublín“-pokynov na bez-op-, až kým údaje nie sú pripravené.
* Príklad: I1 zapisuje do pamäte a I2 číta z tohto miesta pamäte. Preposielanie údajov nie je možné, pretože zápis I1 musí dokončiť, ako bude možné čítať i2. Potrubie sa zastaví, kým I1 nedokončí jeho zápis.
* Účinnosť: Jednoduchšie implementovať ako presmerovanie, ale významne znižuje priepustnosť potrubia.
3. Zaregistrujte sa premenovanie:
* Mechanizmus: Kompilátor alebo hardvér priraďuje k pokynom, ktoré môžu mať závislosť od údajov, rôzne registre. To eliminuje nebezpečenstvo vojny (zapisujte po prečítaní) a WAW (WAIT (Write Po zápise). Napríklad, ak dva pokyny používajú rovnaký register, hardvér môže jeden z nich premenovať na iný register, čím vyrieši konflikt.
* Príklad: Dve pokyny chcú napísať na R1. Premenovanie zaregistrovania priradí druhej inštrukcie iným dočasným registrom, ktorý vyrieši nebezpečenstvo WAW.
* Účinnosť: Vysoko účinný pri odstraňovaní nebezpečenstiev vojny a WAW, ale zahŕňa zložitosť hardvéru. Často sa používajú v spojení s presmerovaním údajov.
4. Optimalizácia kompilátora:
* Mechanizmus: Kompilátory môžu analyzovať kód pre závislosti na údajoch a pokyny na zmenu poradia, aby sa minimalizovalo nebezpečenstvá. To môže zahŕňať plánovanie inštrukcií na oddelenie pokynov, ktoré sú navzájom závislé, a tým znížia potrebu zastavenia alebo presmerovania.
* Príklad: Kompilátor by mohol zmeniť pokyny na presun pokynov, ktoré čítajú údaje ďalej od pokynov, ktoré tieto údaje píšu, a tak poskytne potrubiu viac času na dokončenie skôr, ako to potrebuje závislá inštrukcia.
* Účinnosť: Znižuje frekvenciu nebezpečenstiev na úrovni zdrojového kódu, ale účinnosť závisí od schopností kompilátora.
Výber techniky zmierňovania závisí od špecifickej architektúry procesora. Moderné procesory zvyčajne používajú kombináciu presmerovania údajov, premeny registrov a optimalizácií kompilátorov pre efektívne spracovanie nebezpečenstva údajov. Zastavenie sa často používa ako posledná možnosť, keď sú iné techniky nedostatočné.