Znečištění mezipaměti - Cache pollution
tento článek ne uvést žádný Zdroje.Prosince 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Znečištění mezipaměti popisuje situace, kdy vykonání počítačový program načte data do Mezipaměť CPU zbytečně, což způsobí vypuzení dalších užitečných dat z mezipaměti do nižších úrovní hierarchie paměti, snižující výkon. Například v a vícejádrový procesor, jedno jádro může nahradit bloky načtené jinými jádry do sdílené mezipaměti, nebo předem načteno bloky mohou nahradit bloky vyžádané z mezipaměti.
Příklad
Zvažte následující obrázek:
T [0] = T [0] + 1; pro i v 0 ..velikost (CACHE) C [i] = C [i] + 1; T [0] = T [0] + C [velikost (CACHE) -1];
(Předpoklady zde jsou, že mezipaměť se skládá pouze z jedné úrovně, je odemčena, zásada nahrazení je pseudo-LRU, všechna data jsou uložitelná v mezipaměti, nastavit asociativitu mezipaměti je N (kde N> 1) a maximálně jedna registr procesoru obsahuje hodnoty programu).
Těsně před spuštěním smyčky bude z paměti do mezipaměti načteno T [0], jeho hodnota bude aktualizována. Jak se však smyčka provádí, protože počet datových prvků, na které smyčka odkazuje, vyžaduje vyplnění celé mezipaměti do své kapacity, musí být blok mezipaměti obsahující T [0] vystěhován. Takže příště, když program požádá o aktualizaci T [0], mezipaměť zmešká a řadič mezipaměti musí požádat o datová sběrnice přivést odpovídající blok mezipaměti z hlavní paměť znovu.
V tomto případě se o mezipaměti říká, že je „znečištěná“. Změna struktury přístupů k datům umístěním první aktualizace T [0] mezi smyčku a druhou aktualizaci může eliminovat neefektivitu:
pro i v 0 ..velikost (CACHE) C [i] = C [i] + 1; T [0] = T [0] + 1; T [0] = T [0] + C [velikost (CACHE) -1];
Řešení
Kromě výše zmíněné restrukturalizace kódu řešení znečištění mezipaměti zajišťuje, že do mezipaměti jsou ukládána pouze data s vysokým opětovným použitím. Toho lze dosáhnout použitím speciální pokyny pro ovládání mezipaměti, operační systém podpora nebo hardwarová podpora.
Mezi příklady specializovaných hardwarových pokynů patří „lvxl“ poskytované serverem PowerPC AltiVec. Tato instrukce načte hodnotu 128 bitů do registru a označí odpovídající blok mezipaměti jako „nejméně nedávno použitý“, tj. Jako hlavní kandidát na vystěhování, když je potřeba vypudit blok z jeho sady mezipaměti. Aby bylo možné vhodně použít tuto instrukci v kontextu výše uvedeného příkladu, musely by se datové prvky odkazované smyčkou načíst pomocí této instrukce. Při implementaci tímto způsobem by ke znečištění mezipaměti nedošlo, protože provedení takové smyčky by nezpůsobilo předčasné vystěhování T [0] z mezipaměti. Tomu by se dalo vyhnout, protože jak by smyčka postupovala, adresy prvků v C by se mapovaly na stejný způsob mezipaměti, přičemž by naopak zůstala ve skutečnosti starší (ale ne označená jako „nejméně nedávno použitá“) data (s ). Z mezipaměti, které není T [0] členem, by byla vyřazena pouze nejstarší data (pro uvedený příklad neplatí), protože k jejich aktualizaci dochází těsně před začátkem smyčky.
Podobně pomocí podpory operačního systému (OS) stránky v hlavní paměť které odpovídají datovému poli C, lze označit jako „ukládání do mezipaměti zablokováno“ nebo jinými slovy bez mezipaměti. Podobně na hardwarové úrovni schémata obejití mezipaměti[1] lze použít k identifikaci dat s nízkým počtem opakovaných použití na základě vzorce přístupu k programu a jejich obejití z mezipaměti. Sdílenou mezipaměť lze také rozdělit na oddíly, aby se zabránilo destruktivnímu rušení mezi spuštěnými aplikacemi. Kompromis v těchto řešeních spočívá v tom, že schémata založená na operačním systému mohou mít velkou latenci, což může anulovat zisk dosažitelný zamezením znečištění mezipaměti (pokud nebyla oblast paměti pro začátek bez mezipaměti), zatímco techniky založené na hardwaru nemusí mít globální pohled na tok řízení programu a vzor přístupu do paměti.
Rostoucí význam
Kontrola znečištění mezipaměti nabyla na důležitosti, protože pokuty způsobené tzv.paměťová zeď "Pokračujte v růstu. Výrobci čipů pokračují v navrhování nových triků, jak překonat stále rostoucí relativní latenci paměti k CPU. Dělají to zvyšováním velikostí mezipaměti a poskytováním užitečných způsobů, jak mohou softwaroví inženýři kontrolovat způsob, jakým data přicházejí a zůstávají na CPU Řízení znečištění mezipaměti je jedním z mnoha zařízení, která má programátor k dispozici (hlavně vestavěný). Používají se však i jiné metody, které jsou většinou proprietární a vysoce specifické pro hardware a aplikace.
Reference
- ^ S. Mittal, “Průzkum technik obcházení mezipaměti ", JLPEA, 6 (2), 2016