Välimuistin pilaantuminen - Cache pollution
Välimuisti saastuminen kuvaa tilanteita, joissa suorittavan tietokoneohjelman kuormien tiedot CPU välimuisti tarpeettomasti, aiheuttaen siten muita hyödyllisiä tietoja häädetään välimuistista tulee alemmille tasoille muistihierarkia , suorituskyvyn alentumisen. Esimerkiksi monisydämisessä prosessorissa yksi ydin voi korvata muiden ytimien noutamat lohkot jaetuksi välimuistiksi tai valmiiksi haetut lohkot voivat korvata kysynnän hakemat lohkot välimuistista.
Esimerkki
Harkitse seuraavaa kuvaa:
T[0] = T[0] + 1; for i in 0..sizeof(CACHE) C[i] = C[i] + 1; T[0] = T[0] + C[sizeof(CACHE)-1];
(Tässä oletuksena on, että välimuisti koostuu vain yhdestä tasosta, se on lukitsematon, korvauskäytäntö on pseudo-LRU , kaikki tiedot ovat välimuistissa, välimuistin asetettu assosiatiivisuus on N (missä N> 1) ja enintään yksi prosessorirekisteri on käytettävissä sisältämään ohjelma-arvot).
Juuri ennen silmukan alkua T [0] haetaan muistista välimuistiin, sen arvo päivitetään. Silmukan toteutuessa, koska silmukan viittaamien tietoelementtien lukumäärä vaatii koko välimuistin täyttämisen kapasiteettiinsa, T [0]: n sisältävä välimuistilohko on kuitenkin poistettava. Täten seuraavan kerran, kun ohjelma pyytää T [0]: n päivittämistä, välimuisti puuttuu, ja välimuistiohjaimen on pyydettävä tietoväylää vastaavan välimuistilohkon tuomiseksi päämuistista uudelleen.
Tällöin välimuistin sanotaan olevan "saastunut". Datayhteyksien mallin muuttaminen sijoittamalla T [0]: n ensimmäinen päivitys silmukan ja toisen päivityksen väliin voi poistaa tehottomuuden:
for i in 0..sizeof(CACHE) C[i] = C[i] + 1; T[0] = T[0] + 1; T[0] = T[0] + C[sizeof(CACHE)-1];
Ratkaisut
Edellä mainitun koodin uudelleenjärjestelyn lisäksi ratkaisu välimuistin pilaantumiseen on varmistaa, että välimuistiin tallennetaan vain paljon uudelleenkäyttöä koskevia tietoja. Tämä voidaan saavuttaa käyttämällä erityisiä välimuistinhallintaohjeita , käyttöjärjestelmän tukea tai laitteistotukea.
Esimerkkejä erikoistuneista laitteisto-ohjeista ovat "lvxl", jonka tarjoaa PowerPC AltiVec . Tämä ohje kuormia 128 bittiä leveä arvon rekisteriin ja merkkien vastaava välimuistilohkoa nimellä "viime aikoina vähiten käytetty" eli oivana häädön Olipa tarve häätää korttelin välimuististaan asetettu. Jotta tätä käskyä voidaan käyttää tarkoituksenmukaisesti yllä olevan esimerkin yhteydessä, silmukan viittaamat tietoelementit olisi ladattava tämän käskyn avulla. Tällä tavalla toteutettuna välimuistin pilaantumista ei tapahtuisi, koska tällaisen silmukan suorittaminen ei aiheuttaisi T [0]: n ennenaikaista häätöä välimuistista. Tätä vältettäisiin, koska silmukan edetessä C: n elementtien osoitteet kartoitetaan samalla välimuistilla, jättäen tosiasiallisesti vanhemmat (mutta ei merkitty "viimeksi käytetyiksi") tiedot koskemattomiksi toisella tavalla ). Ainoastaan vanhimmat tiedot (jotka eivät liity annettuun esimerkkiin) poistetaan välimuistista, johon T [0] ei kuulu, koska sen päivitys tapahtuu juuri ennen silmukan alkua.
Vastaavasti käyttöjärjestelmän tuen avulla päämuistissa olevat sivut, jotka vastaavat C-tietoryhmää, voidaan merkitä "välimuistin estoina" tai toisin sanoen välimuistittamattomiksi. Vastaavasti laitteistotasolla voidaan käyttää välimuistin ohitusmenetelmiä, jotka tunnistavat vähän uudelleenkäyttöä olevat tiedot ohjelman käyttömallin perusteella ja ohittavat ne välimuistista. Jaettu välimuisti voidaan myös jakaa osiin, jotta vältetään tuhoavat häiriöt käynnissä olevien sovellusten välillä. Näiden ratkaisujen kompromissi on se, että käyttöjärjestelmiin perustuvilla järjestelmillä voi olla suuri viive, mikä voi mitätöidä välimuistin pilaantumisen välttämisellä saavutettavan voiton (ellei muistialue ole ollut alusta välimuistissa), kun taas laitteistopohjaisilla tekniikoilla ei välttämättä ole maailmanlaajuista näkymä ohjelman ohjauksen kulusta ja muistin käyttökuviosta .
Kasvava merkitys
Välimuistin pilaantumisen hallinnan merkitys on kasvanut, koska ns. " Muistiseinän " aiheuttamat seuraamukset kasvavat jatkuvasti. Sirunvalmistajat suunnittelevat edelleen uusia temppuja voittamaan jatkuvasti kasvava suhteellinen muisti-CPU-viive. He tekevät sen lisäämällä välimuistin kokoja ja tarjoamalla hyödyllisiä tapoja ohjelmistosuunnittelijoille hallita tietojen saapumista ja pysymistä prosessorissa. Välimuistin pilaantumisen hallinta on yksi (lähinnä sulautetun) ohjelmoijan käytettävissä olevista lukuisista laitteista. Kuitenkin käytetään myös muita menetelmiä, joista suurin osa on omia ja erittäin laitteisto- ja sovelluskohtaisia.