kategória | ||||||||||
| ||||||||||
| ||
|
||||||||||
Adatfüggöségek (fogalma, föbb fajtái, teljesítmény-korlátozó hatása)
Az adatfüggöségek fogalma:
Ha egy program két egymást követö utasítása ugyanazt a regiszter-, vagy memória operandust használja, kivéve, ha a közös operandus mindkét uta 727e46h sításban forrás operandus. Az adatfüggöség nyilvánvaló esete az, hogy a soron következö utasítás az elözö utasítás eredményt használja forrás operandusként. Amíg egy processzor az utasításokat sorosan hajtja végre, az adatfüggöségek nem okoznak gondot. Más a helyzet, ha az utasításokat a processzor párhuzamosan dolgozza fel, mint ILP végrehajtásnál. Ilyenkor az adatfüggöségek észrevétele és megfelelö kezelése a processzor elsödleges feladatává válik.
Az adatfüggöségek föbb fajtái:
Adatfüggöség
Jellege szerint Helye szerint
Soros utasítás- Ciklusban Regiszter Memória
Szekvenciákon
Valós függöség Álfüggöség
(RAW)
WAR WAW
RAW-függöség (írást követö olvasási függöség, true dependence).
Valamely utasítás forrásoperandusza felhasználja a másik utasítás eredményét
i1: load r1, a // r1 <=(a)
i2: add r2,r1,r1 // r2 <=(r1)+(r1)
Az i2 utasítás az r1 regisztert, mint forrást használja. Így az i2 utasítás mindaddig nem hajtható végre helyesen, míg az i1 utasítás nem hajtódik végre és eredménye nem áll rendelkezésre. Ezért i2 utasítás RAW-függöségben van az i1 utasítástól.
A RAW függöségek fajtái
Behívási függöség: a kívánt operandust elöbb be kell olvasni (r1-be) ahhoz, hogy i2 végrehatható legyen.
i1: load r1, a // r1<=(a)
i2: add r2,r1,r1 // r2<=(r1)+(r1)
Müveleti függöség: ha a keresett operandust a megelözö utasítás aritmetikai, logikai stb. müveletek eredményeként állítja elö.
i1: mul r1, r4, r5 // r1<=(r4)*(r5)
i2: add r2, r1, r1 // r2<=(r1)+(r1)
WAR-függöség (olvasást követö írásfüggöség, anti dependence)
Valamely utasítás célregisztere megegyezik az elözö utasítás forrásregiszterével
i1: mul r1, r2, r3 //r1<=(r2)*(r3)
i2: add r2, r4, r5 //r2<=(r4)+(r5)
Ebben az esetben, az i2 utasítás az r2 regiszterbe ír, míg az i1 utasítás r2 tartalmát forrásoperandusként használja. Ha bármely okból i2 elöbb hajtódik végre, mint i1, akkor r2 tartalmát i2 korábban írná át, mint ahogy azt i1 olvasná, és ez nyilvánvalóan hibát eredményezne.
WAW-függöség (írást követö írásfüggöség, output dependence)
Valamely utasítás célregisztere megegyezik az elözö utasítás célregiszterével
i1: mul r1,r2,r3 // r1<=(r2)*(r3)
i2: add r1,r4,r5 // r1<=(r4)+(r5)
A ciklusbeli adatfüggöség:
Ciklusokban megjelenö függöségek. Akkor van, ha a ciklusmag valamely utasítása olyan értékre hivatkoznak, amely valamely elözö ciklus eredménye. Fontos probléma, mivel a futásidöt döntöen a ciklusok összideje adja ki. (80/20-as szabály). Kezelésük a compiler feladata.
Pl. do i=2, n x(i)=a(i)*x(i-1)+b enddo
Elsörendü ciklusok
Ha a ciklus az öt közvetlenül megelözö ciklus eredményét használja fel.
Általános formája: X(i) = a(i) * X(i-1) + b(i)
Teljesítmény-korlátozó hatása
- valódi adatfüggöség (RAW): ki kell várni, amíg a szükséges adat elkészül. Nem lehet kiküszöbölni.
- hamis adatfüggöség (WAR, WAW): csak az ugyanarra a tároló helyre hivatkozás miatti függöség, regiszter átnevezéssel megszüntethetö.
Valódi adatfüggöség esetén,a teljesítménycsökkenés nem kiküszöbölhetö, de csökkenthetö, részlegesen feloldható utasítás várakoztatással és eredmény elöreküldéssel.
Találat: 476