Předběžné načtení kódu

V architektuře počítače je předběžné načítání instrukcí technologie používaná v mikroprocesoru ke zvýšení rychlosti provádění programu doby nečinnosti procesoru kvůli nedostatku instrukcí k provedení.  

Moderní mikroprocesory jsou mnohem rychlejší než paměť , v důsledku čehož nelze instrukce spustitelného programu číst dostatečně rychle, aby byla zajištěna kontinuita procesoru [1] . Přidání mezipaměti může poskytnout rychlejší přístup k potřebným pokynům.

Prefetching kódu  je vydávání požadavků z procesoru do paměti RAM , aby si předem přečetly instrukce, než je třeba tyto instrukce provést. V důsledku těchto požadavků jsou instrukce načteny z paměti do mezipaměti. Když je potřeba provést instrukce, přístup k nim bude mnohem rychlejší, protože zpoždění při přístupu do mezipaměti je řádově menší než při přístupu k RAM.

Čím konzistentnější je program, tím větší je efekt předběžného načítání kódu. Předběžné načítání kódu však může být součástí složitého algoritmu predikce větvení, který se snaží předpovědět, které instrukce bude třeba v budoucnu provést, a načíst je z paměti. Ve vyhrazeném hardwaru (jako je GPU ) může algoritmus předběžného načítání využít prostorovou koherenci dat , která je běžně pozorována během mapování textur . V tomto případě to nejsou instrukce, které jsou předem načteny, ale prvky textury ( texely ), které jsou kandidáty na polygonové mapování .

První sériově vyráběné mikroprocesory využívající přednačítání kódu byly Intel 8086 (6 bajtů) a Motorola 68000 (4 bajty).

Způsoby implementace

Pro implementaci prefetchingu kódu existují hardwarové, softwarové a kombinované metody [2] [3] . Hlavním kritériem pro klasifikaci metod je povaha implementace analýzy kódu, která určuje, které části kódu budou předem staženy [4] . Pokud je například předběžné načtení kódu implementováno jako optimalizace kompilátoru , která umístí instrukce předběžného načtení na správná místa, pak je tato metoda softwarová.

Hardware

Předběžně načíst další řádek

Metoda byla navržena v roce 1978 [5] a jak název napovídá, spočívá v přehození dalšího nebo několika následujících řádků do instrukční cache. V tomto případě je aktuální řádek mezipaměti instrukce chápán jako řádek mezipaměti obsahující instrukci, která se právě provádí. Při implementaci této metody má největší význam volba optimální pagingové vzdálenosti [6]  — vzdálenosti od konce aktuálního řádku k poslednímu načtenému řádku . Pokud je vzdálenost stránkování zvolena příliš malá, pak se kód nestihne načíst do mezipaměti instrukcí a procesor přejde do stavu čekání kvůli nedostatku kódu. Pokud zvolíte příliš velkou vzdálenost, pak může negativní efekt znečištění mezipaměti (tedy vytlačení příliš velkého množství užitečných dat z mezipaměti) převážit nad pozitivním efektem předběžného načítání.

Metoda ukazuje svou efektivitu v po sobě jdoucích sekcích kódu, ale nenabízí nic pro přednačítání kódu, který by se měl začít vykonávat po zavolání instrukce skoku nebo procedury. Přes své zjevné nedostatky je metoda snadno implementovatelná, vyžaduje minimální množství přídavného hardwaru v procesoru [6] a snižuje počet blokování z důvodu nedostatku kódu o 20-50 % [2] [7] .

Přednačítání daného řetězce

Technologie byla navržena v roce 1992 [7] . Tato metoda, na rozdíl od předběžného načítání dalšího řádku, je navržena tak, aby poskytovala stránkování kódu, na který přechází řízení programu v důsledku operace přechodu. K tomu je přidána hardwarová tabulka, do které se zapíše každá již provedená operace přechodu s jejím výsledkem (adresou přechodu). Metoda je založena na předpokladu: pokud jednou byla při jakémkoli přenosu řídicí operace vypočtena určitá adresa přechodu, pak je vysoce pravděpodobné, že při opakování stejné operace bude vypočítána stejná adresa.

Tento přístup není schopen zabránit vynechání mezipaměti studeného startu , protože pro použití tabulky při zpracování jakékoli přechodové operace je nutné tuto operaci nejprve provést alespoň jednou. Metoda navíc vyžaduje značné množství dodatečného hardwaru v procesoru [6] .

Selhalo předběžné načtení přechodu [6] Předběžné načítání s Markovovým prediktorem [8]

Pomocí Markovova prediktoru můžete kód načíst předem.

Poznámky

  1. Abdel-Hameed Badawy, Aneesh Aggarwal, Donald Yeung, Chau-Wen Tseng. Efektivita předběžného načítání softwaru a optimalizace lokalit na budoucích paměťových systémech  // The Journal of Instruction-Level Parallelism. - 2004. - T. 6 . Archivováno z originálu 30. června 2013.
  2. 1 2 Galazin A.B. Metody pro optimalizaci přístupu k paměťovému subsystému ve fázi kompilace pro mikroprocesorové systémy s širokou architekturou instrukčního slova. — 2008.
  3. Skupina CA Moritz, Yao Guo a SSA. Úvod do předběžného načítání . Získáno 29. června 2013. Archivováno z originálu 30. června 2013.
  4. Chi-Keung Luk, Todd C. Mowry. Kooperativní přednačítání: Kompilátor a hardwarová podpora pro efektivní přednačítání instrukcí v moderních procesorech // 31. mezinárodní sympozium o mikroarchitekturě. — 1998.
  5. AJ Smith. Předběžné načítání sekvenčního programu v hierarchiích paměti // IEEE Computer Society Press Los Alamitos, CA, USA. - 1978. - T. 11 , č. 12 . - S. 7-21 .
  6. 1 2 3 4 Jim Pierce, Trevor Mudge. Předběžné načítání instrukce nesprávné cesty  // Technická zpráva CSE-222-94. - 1994. - S. 165-175 . Archivováno z originálu 30. června 2013.
  7. 1 2 J. E. Smith, W.-C. hsu. Předběžné načítání v mezipaměti instrukcí superpočítače // Supercomputing '92 Sborník z konference ACM/IEEE z roku 1992 o superpočítači. - 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. Archivováno 30. června 2013.

Odkazy