Szoftver csővezeték

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2016. május 23-án felülvizsgált verziótól ; az ellenőrzések 8 szerkesztést igényelnek .

A ciklusok szoftveres pipeline- kezelése a  fordítók által a ciklusok optimalizálására használt technika , hasonlóan a mikroprocesszorok számítási folyamatához . Ez a soron kívüli végrehajtás egyik formája , azzal a különbséggel, hogy az átrendezést nem a processzor, hanem a fordító (vagy manuális optimalizálás esetén a programozó) végzi el. Egyes számítógép-architektúrák, mint például az Intel IA-64 [1] , kifejezetten hardvertámogatással rendelkeznek a szoftverhurok folyamatok egyszerűsítésére.

Amikor egy ciklust folyamatban van, minden időpontban fut egy kód, amely a ciklus több iterációjához kapcsolódik , de a ciklus különböző részeihez.

Példa

Tekintsünk egy hurkot:

i = 1-től nagy számig A(i) Kettős) C(i) vége

Ebben a példában a , A(i), B(i), C(i)utasításokat jelöli, amelyek mindegyike az elemszámmal működik i, és minden utasítás az előzőtől függ. Más szóval, A(i)a futtatás előtt végre kell hajtania B(i). Az utasítás Ajelentheti például egy elem betöltését a memóriából egy processzorregiszterbe , B - valamilyen aritmetikai műveletet egy regiszter elemén, és - egy elem memóriábaC  írását . Ugyanakkor feltételezzük, hogy a ciklus különböző értékű iterációi között nincs függőség , vagyis az utasítás az utasítás befejezése előtt elindítható . iA(2)A(1)

A hurokvezeték-technika nélkül a műveletek a következő sorrendben történnének:

A(1) B(1) C(1) A(2) B(2) C(2) A(3) B(3) C(3) ...

Tegyük fel, hogy minden utasítás végrehajtásához három ciklusra lesz szükség (nem vesszük figyelembe magának a ciklusnak a futtatásának költségeit). Tételezzük fel azt is, hogy az utasítások minden óraciklus végrehajtására vannak ütemezve, ha nem függenek a végrehajtható utasításoktól. Csővezetékezés nélkül minden ciklus iterációja 9 ciklust vesz igénybe, 3 ciklust A(1), 3 ciklust B(1) és 3 ciklust C(1) esetében.

Most alkalmazzuk a hurokvezetékezést. A végrehajtási sorrend a következő lesz:

A(1) A(2) A(3) B(1) B(2) B(3) C(1) C(2) C(3) ...

Ebben az esetben az utasítások minden ciklusban végrehajtásra kerülnek, és minden három iteráció 9 ciklusban kerül végrehajtásra, ami iterációnként átlagosan 3 ciklust ad.

Ebben a példában a csővezetékezést a huroktekercseléssel együtt használták . De általánosabban, a kibontás megakadályozhatja, hogy egy csővezetékes hurok a legjobban teljesítsen. Ez megtörténhet olyan ciklusokban, amelyek hosszú ideig futó műveletekkel rendelkeznek (például osztási vagy matematikai függvények). Az ehhez hasonló hurkok a hosszadalmas műveletek késleltetésének elrejtésére vannak kiképezve.


Hardver támogatás

A következő hardvermegoldások egyszerűsítik a leírt optimalizálást: [2]

Jegyzetek

  1. 1 2 Itanium processzor microarchitecture psu.edu PDF Archivált : 2016. március 5., a Wayback Machine H Sharangpani, K Arora - IEEE Micro, 2000
  2. M. Lam, "Szoftver pipelining: Egy hatékony ütemezési technika VLIW gépekhez", In Proceedings of the ACM SIGPLAN 88 Conference on Programming Language Design and Implementation (PLDI 88) , 1988. július, 318-328. oldal. ACM SIGPLAN Notices 23(7) néven is megjelent.
  3. Aho, 10.5.12
  4. Az if-konverzió és az elágazás előrejelzésének hatása a program végrehajtására az Intel Itanium processzoron
  5. Aho, 10.5.11
  6. Átfedett hurok támogatás a Cydra-5- ben . brtop, a következő utasítások
  7. Itanium architektúra programozóknak: a 64 bites processzorok megértése , 313. oldal, 10.4.2 "a szoftveres csővezetékekben használt hurokszám (ar.lc) regiszter (5.6. szakasz), az epilog count (ar.ec) regiszter és a speciális ág utasítások a counted vagy while ciklusok létrehozásához regiszterforgatással", 10.4.5 "Elágazási utasítások szoftveres csővezetékekhez .. br.ctop, .. br.cexit.. br.wtop... br.wexit"

Irodalom