Kód előzetes letöltése

A számítógép-architektúrában az utasítás-előletöltés egy olyan technológia  , amelyet a mikroprocesszorok használnak a programvégrehajtás sebességének növelésére hogy csökkentik a processzor tétlenségének idejét a végrehajtandó utasítások hiánya miatt.

A modern mikroprocesszorok sokkal gyorsabbak, mint a memória , aminek következtében a végrehajtható program utasításai nem olvashatók elég gyorsan ahhoz, hogy biztosítsák a processzor folytonosságát [1] . A gyorsítótár hozzáadása gyorsabb hozzáférést biztosít a szükséges utasításokhoz.

A kód előzetes lehívása  azt jelenti, hogy a processzor kéri a RAM -ot , hogy előzetesen olvassa el az utasításokat, mielőtt ezeket az utasításokat végre kellene hajtani. E kérések eredményeként az utasítások a memóriából betöltődnek a gyorsítótárba. Amikor utasításokat kell végrehajtani, a hozzáférés sokkal gyorsabb lesz, mivel a gyorsítótár elérésekor a késleltetés nagyságrendekkel kisebb, mint a RAM elérésekor.

Minél konzisztensebb a program, annál nagyobb a kód előzetes lehívásának hatása. A kód előzetes letöltése azonban része lehet egy összetett elágazás - előrejelzési algoritmusnak , amely megpróbálja megjósolni, hogy mely utasításokat kell végrehajtani a jövőben, és betölti azokat a memóriából. Dedikált hardverben (például GPU -ban) az előzetes letöltési algoritmus kihasználhatja az adatok térbeli koherenciáját, amely általában megfigyelhető a textúra -leképezés során . Ebben az esetben nem az utasítások vannak előre lehívva, hanem a textúraelemek ( texel ) a sokszögleképezés jelöltjei .

Az első sorozatgyártású mikroprocesszorok, amelyek kód-előhívást alkalmaztak, az Intel 8086 (6 bájt) és a Motorola 68000 (4 bájt) voltak.

A megvalósítás módszerei

Léteznek hardver, szoftver és kombinált módszerek a kód-előhívás megvalósítására [2] [3] . A módszerek osztályozásának fő kritériuma a kódelemzés megvalósításának jellege, amely meghatározza, hogy a kód mely részeit töltsék le előzetesen [4] . Például, ha a kód-előzetes letöltést fordítóoptimalizálásként valósítják meg, amely az előzetes letöltési utasításokat a megfelelő helyekre helyezi, akkor a módszer szoftveres.

Hardver

Következő sor előhívása

A módszert 1978-ban javasolták [5] , és ahogy a neve is sugallja, ez abból áll, hogy a következő vagy több következő sort be kell cserélni az utasítás-gyorsítótárba. Ebben az esetben az aktuális utasítás-gyorsítótár sor alatt azt a gyorsítótár-sort értjük, amely az éppen végrehajtott utasítást tartalmazza. Ennek a módszernek a megvalósítása során az optimális lapozási távolság megválasztása [6]  – az aktuális sor végétől az utolsó betöltött sorig terjedő távolság – a legnagyobb jelentőséggel bír . Ha a lapozási távolságot túl kicsire választjuk, akkor a kódnak nem lesz ideje betölteni az utasítás-gyorsítótárba, és a processzor kódhiány miatt várakozási állapotba kerül. Ha túl nagy távolságot választ, akkor a gyorsítótár-szennyezés negatív hatása (vagyis a túl sok hasznos adat kiszorítása a gyorsítótárból) felülmúlhatja az előzetes letöltés pozitív hatását.

A metódus hatékonyságát a kód egymást követő szakaszaiban mutatja meg, de nem kínál semmit annak a kódnak az előzetes lekérésére, amelynek végrehajtása az ugrásutasítás vagy eljáráshívás után induljon el. A módszer nyilvánvaló hiányosságai ellenére könnyen megvalósítható, minimális mennyiségű további hardvert igényel a processzorban [6] és 20-50%-kal csökkenti a kódhiány miatti blokkolások számát [2] [7] .

Adott karakterlánc előhívása

A technológiát 1992-ben javasolták [7] . Ezt a módszert, ellentétben a következő sor előzetes lekérésével, úgy tervezték, hogy biztosítsa annak a kódnak a lapozását, amelyre a programvezérlés az átállási művelet eredményeként átkerül. Ehhez hozzáadunk egy hardvertáblát, amelyben minden már végrehajtott átmeneti művelet az eredményével (az átmenet címével) bekerül. A módszer azon a feltételezésen alapul, hogy ha egyszer, bármely irányítás átadási műveletnél egy bizonyos átmeneti címet számítottak ki, akkor nagy valószínűséggel ugyanaz a cím kerül kiszámításra ugyanazon művelet megismétlésekor.

Ez a megközelítés nem képes megakadályozni a hidegindítási gyorsítótár kihagyását , mivel ahhoz, hogy a táblázatot bármilyen átmeneti művelet feldolgozásakor használni lehessen, először legalább egyszer végre kell hajtani ezt a műveletet. Ezenkívül a módszer jelentős mennyiségű további hardvert igényel a processzorban [6] .

Failed Transition Prefetch [6] Előzetes letöltés Markov-előrejelzővel [8]

A Markov-prediktor segítségével előre lekérheti a kódot.

Jegyzetek

  1. Abdel-Hameed Badawy, Aneesh Aggarwal, Donald Yeung, Chau-Wen Tseng. Szoftver-előzetes letöltés és lokalitásoptimalizálás hatékonysága jövőbeli memóriarendszereken  // The Journal of Instruction-Level Parallelism. - 2004. - T. 6 . Az eredetiből archiválva : 2013. június 30.
  2. 1 2 Galazin A.B. Módszerek a memória alrendszerhez való hozzáférés optimalizálására a fordítási szakaszban széles utasításszó-architektúrával rendelkező mikroprocesszoros rendszerek esetében. – 2008.
  3. CA Moritz, Yao Guo és SSA csoport. Bevezetés az előzetes letöltésbe . Letöltve: 2013. június 29. Az eredetiből archiválva : 2013. június 30.
  4. Chi-Keung Luk, Todd C. Mowry. Kooperatív előlehívás: fordító- és hardvertámogatás a hatékony utasítás-előhíváshoz modern processzorokban // 31. Nemzetközi Mikroarchitektúra Szimpózium. – 1998.
  5. AJ Smith. Soros program-előzetes letöltés a memóriahierarchiákban // IEEE Computer Society Press Los Alamitos, CA, USA. - 1978. - T. 11 , 12. sz . - S. 7-21 .
  6. 1 2 3 4 Jim Pierce, Trevor Mudge. Hibás útvonalú utasítások  előlehívása // Technikai jelentés CSE-222-94. - 1994. - S. 165-175 . Az eredetiből archiválva : 2013. június 30.
  7. 1 2 J. E. Smith, W.-C. hsu. Előzetes letöltés a szuperszámítógép utasítási gyorsítótáraiban // Supercomputing '92 Proceedings of the 1992 ACM/IEEE Conference on Supercomputing. - 1992. - S. 588-597 .
  8. Doug Joseph, Dirk Grunwald. Prefetching using Markov Predictors  // In Proceedings of the 24th Annual International Symposium on Computer Architecture. - 1997. Archiválva : 2013. június 30.

Linkek