Znečištění mezipaměti - Cache pollution

Znečištění mezipaměti popisuje situace, kdy vykonávající počítačový program zbytečně načte data do mezipaměti CPU , což způsobí, že z mezipaměti budou vypuzena další užitečná data do nižších úrovní hierarchie paměti , což sníží výkon. Například ve vícejádrovém procesoru může jedno jádro nahradit bloky načtené jinými jádry do sdílené mezipaměti, nebo předem načtené bloky mohou nahradit bloky načtené z mezipaměti.

Příklad

Zvažte následující obrázek:

 T[0] = T[0] + 1;
 for i in 0..sizeof(CACHE)
   C[i] = C[i] + 1;
 T[0] = T[0] + C[sizeof(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 ukládána do mezipaměti, nastavená asociativita mezipaměti je N (kde N> 1) a maximálně je k dispozici jeden registr procesoru, který 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žadovat datovou sběrnici, aby znovu přivedl odpovídající blok mezipaměti z hlavní paměti .

V tomto případě se o mezipaměti říká, že je „znečištěná“. Změna vzorce přístupů k datům umístěním první aktualizace T [0] mezi smyčku a druhou aktualizaci může eliminovat neefektivitu:

 for i in 0..sizeof(CACHE)
   C[i] = C[i] + 1;
 T[0] = T[0] + 1;
 T[0] = T[0] + C[sizeof(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 uložena pouze data s vysokým opětovným použitím. Toho lze dosáhnout pomocí speciálních pokynů pro řízení mezipaměti , podpory operačních systémů nebo hardwarové podpory.

Mezi příklady specializovaných hardwarových pokynů patří „lvxl“ poskytované programem 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ž bude třeba vyřadit 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. Pokud by byl implementován tímto způsobem, ke znečištění mezipaměti by 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 její aktualizaci dochází těsně před začátkem smyčky.

Podobně lze pomocí podpory operačního systému (OS) označit stránky v hlavní paměti, které odpovídají datovému poli C, jako „potlačeno ukládání do mezipaměti“ nebo jinými slovy neukládatelné. Podobně lze na úrovni hardwaru použít schémata obejití mezipaměti, která identifikují data s nízkým počtem opakovaných použití na základě přístupového vzoru programu a obcházejí je z mezipaměti. Sdílenou mezipaměť lze také rozdělit na oddíly, aby se zabránilo ničivému rušení mezi spuštěnými aplikacemi. Kompromis v těchto řešeních spočívá v tom, že systémy 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 oblast paměti nebyla 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 má stále větší význam, protože pokuty způsobené takzvanou „ paměťovou zdí “ stále rostou. 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 zvětšením velikosti mezipaměti a poskytnutí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. Kontrola znečištění mezipaměti je jedním z mnoha zařízení, která má programátor k dispozici (hlavně zabudovaný). Používají se však i jiné metody, z nichž většina je proprietární a vysoce specifická pro hardware a aplikace.

Reference