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.
Tekintsünk egy hurkot:
i = 1-től nagy számig A(i) Kettős) C(i) végeEbben 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.
A következő hardvermegoldások egyszerűsítik a leírt optimalizálást: [2]