Välimuistin hallintaohjeet - Cache control instruction

In computing , joka on välimuisti ohjauskäskyn on vihje upotettu opetus virrasta prosessorin tarkoituksena on parantaa suorituskykyä laitteisto välimuistit , käyttäen ennakkotietoa on muistin käsittely toimittamien ohjelmoija tai kääntäjä . Ne voivat vähentää välimuistin pilaantumista , vähentää kaistanleveysvaatimusta, ohittaa latenssit tarjoamalla paremman hallinnan työskentelyjoukolle . Useimmat välimuistin hallintaohjeet eivät vaikuta ohjelman semantiikkaan, vaikka jotkut voivat.

esimerkit

Useita sellaisia ​​käskyjä, joissa on variantteja, tuetaan useilla suorittimen käskyjoukkoarkkitehtuureilla , kuten ARM , MIPS , PowerPC ja x86 .

prefetch

Tätä termiä kutsutaan myös datavälimuistin estotoimenpiteeksi , joten pyydetään tiettyyn osoitteeseen liittyvän välimuistirivin lataamista. Tämä suoritetaan PREFETCHopetusta x86 -käskykannan. Jotkut variantit ohittavat välimuistihierarkian korkeammat tasot , mikä on hyödyllistä "suoratoisto" -tilassa tiedoille, jotka kulkevat kerran, sen sijaan että niitä pidettäisiin työjoukossa. Esihaun pitäisi tapahtua riittävän kauas aika lieventää latenssi muistin pääsy, esimerkiksi silmukan poikittainen muisti lineaarisesti. Gcc itsenäisiä toimintoja __builtin_prefetch voidaan vedota tätä ohjelmointikielet C tai C ++: .

Ohjeen etuhaku

Muunnelma käskyvälimuistin esihausta.

Tietovälimuistilohko varaa nolla

Tätä vihjettä käytetään välimuistirivien valmisteluun ennen sisällön täydellistä korvaamista. Tässä esimerkissä suorittimen ei tarvitse ladata mitään päämuistista . Semanttinen vaikutus vastaa välimuistilinjan kokoisen lohkon kohdistettua muistikuvaa nollaan, mutta toiminta on käytännössä vapaa.

Tietovälimuistilohko kelpaa

Tätä vihjettä käytetään välimuistilinjojen hylkäämiseen sitoutumatta niiden sisältöä päämuistiin. Hoitoa tarvitaan, koska virheelliset tulokset ovat mahdollisia. Toisin kuin muut välimuistivihjeet, ohjelman semantiikkaa muutetaan huomattavasti. Tätä käytetään yhdessä allocate zeroväliaikaisten tietojen hallintaan. Tämä säästää tarpeetonta päämuistin kaistanleveyttä ja välimuistin pilaantumista.

Tietovälimuistin estotoiminto

Tämä vihje vaatii välimuistin välitöntä hävittämistä, mikä antaa tilaa tuleville varauksille. Sitä käytetään, kun tiedetään, että data ei ole enää osa työryhmää .

Muita vinkkejä

Jotkut prosessorit tukevat varianttia lataus-myymälä-ohjeista, jotka myös viittaavat välimuistivihjeisiin. Esimerkkinä load laston PowerPC käskykannan, mikä viittaa siihen, että tietoja käytetään vain kerran, eli välimuistirivissä osalta voidaan työntää pää häätö jonon, pitäen sen käyttöä, jos vielä suoraan tarvitaan.

vaihtoehtoja

Automaattinen etuhaku

Viime aikoina välimuistin ohjausohjeet ovat olleet vähemmän suosittuja, koska Intelin ja ARM: n entistä edistyneemmät sovellusprosessorisuunnittelut omistavat enemmän transistoreita perinteisten kielten kirjoittaman koodin kiihdyttämiselle, esimerkiksi suorittamalla automaattisen ennakkohaun, laitteistoilla, jotka havaitsevat lineaariset käyttökuviot lennossa. Tekniikat voivat kuitenkin pysyä voimassa suorituskykykeskeisissä prosessoreissa, joilla on erilainen suorituskyky vs. latenssinvaihto, ja ne voivat mieluummin omistaa enemmän aluetta suoritusyksiköille.

Scratchpad-muisti

Jotkut prosessorit tukevat tyhjästä muistia , johon voi sijoittaa väliaikaisia ​​toimintoja, ja ohjaavat muistin käyttöoikeutta (DMA) siirtääksesi tietoja päämuistiin ja tarvittaessa niistä. Soluprosessori ja jotkut sulautetut järjestelmät käyttävät tätä lähestymistapaa . Nämä voitaisiin paremmin hallita muistia liikenteen ja sijainti (kuten työ- joukko hallinnoi nimenomaisen siirrot), ja eliminoi kalliit välimuistin yhdenmukaisuus on manycore kone.

Haittana on se, että sen käyttäminen vaatii huomattavasti erilaisia ​​ohjelmointitekniikoita. On hyvin vaikeaa mukauttaa perinteisillä kielillä, kuten C ja C ++, kirjoitettuja ohjelmia, jotka tarjoavat ohjelmoijalle yhdenmukaisen kuvan suuresta osoitetilasta (joka on välimuisioiden simuloima illuusio). Perinteinen mikroprosessori voi helpommin ajaa vanhaa koodia, jota voidaan sitten kiihdyttää välimuistin ohjausohjeilla, kun taas raaputusalustapohjainen kone vaatii erityistä koodausta maasta asti tasaisen toiminnan varmistamiseksi. Välimuistin ohjausohjeet koskevat tiettyä välimuistilinjakokoa, joka käytännössä voi vaihdella saman arkkitehtuurperheen prosessorien sukupolvien välillä. Välimuistit voivat myös auttaa lukemaan ja kirjoittamaan vähemmän ennustettavia käyttökuvioita (esim. Tekstuurikartoituksen aikana ), kun taas raaputusalustan DMA vaatii algoritmien uudelleenkäsittelyä ennakoitavissaisemmille 'lineaarisille' kulkuille.

Sellaisia ​​naarmuuntimia on yleensä vaikeampi käyttää perinteisten ohjelmointimallien kanssa, vaikkakin datavirtamallit (kuten TensorFlow ) saattavat olla sopivampia.

Hae vektorista

Vektoriprosessorit (esimerkiksi moderni grafiikkaprosessoriyksikkö (GPU) ja Xeon Phi ) käyttävät massiivista rinnakkaisuutta korkean suorituskyvyn saavuttamiseksi samalla kun työskentelevät muistin viiveellä (vähentävät esihaun tarvetta). Monet lukuoperaatiot annetaan samanaikaisesti, myöhemmin invocations on laskea ytimen ; laskelmat voidaan lykätä odotettaessa tulevaa tietoa, kun taas suoritusyksiköt ovat omistautuneet työskentelemään aiempien pyyntöjen tietojen kanssa, jotka ovat jo muodostuneet. Tätä on ohjelmoijien helpompi hyödyntää yhdessä asianmukaisten ohjelmointimallien ( laskentaytimien ) kanssa, mutta vaikeampaa soveltaa yleiskäyttöiseen ohjelmointiin.

Haittana on, että monta kopiota väliaikainen tiloja voidaan pitää, että paikalliseen muistiin on käsittelyelementin , odottaa dataa lennon.

Viitteet