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).
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á.
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ězceTechnologie 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.
procesorů | Technologie digitálních|||||||||
---|---|---|---|---|---|---|---|---|---|
Architektura | |||||||||
Architektura instrukční sady | |||||||||
strojové slovo | |||||||||
Rovnoběžnost |
| ||||||||
Implementace | |||||||||
Komponenty | |||||||||
Řízení spotřeby |