Väärä jakaminen - False sharing

Vuonna tietojenkäsittelytiede , väärä jakaminen on tehokkuuteen halventava käyttö kuvio, joka voi syntyä järjestelmissä hajautettu, johdonmukaista välimuistit on pienimmän resurssilohko hallinnoi välimuistimekanismiin. Kun järjestelmä osallistuja yrittää ajoittain käyttää tietoja, jota ei muuteta toinen osapuoli, mutta nämä tiedot jakaa välimuistilohkoa tietoja, jotka ovat parhaillaan muutetaan, välimuistin protokolla voi pakottaa ensimmäinen osallistuja ladata koko välimuistilohkoa puutteesta huolimatta looginen välttämättömyys. Välimuistijärjestelmä ei ole tietoinen tämän lohkon toiminnasta ja pakottaa ensimmäisen osallistujan kantamaan välimuistijärjestelmän yleiskustannukset, joita resurssin todellinen jaettu käyttö edellyttää.

Moniprosessorin suorittimen välimuistit

Tämän termin ylivoimaisesti yleisin käyttö on nykyaikaisissa moniprosessorisuorittimien välimuistissa , joissa muisti tallennetaan välimuistiin pienen , kahden sanan kokoisen rivin riveillä (esim. 64 kohdistettua , viereistä tavua ). Jos kaksi prosessoria toimivat riippumattomilla tiedoilla samalla muistiosoitealueella , jotka voidaan tallentaa yhdelle riville, järjestelmän välimuistin yhtenäisyysmekanismit voivat pakottaa koko linjan väylän yli tai muodostaa yhteyden jokaiseen datakirjoitukseen pakottaen muistihäiriöt järjestelmän kaistanleveyden tuhlaamisen lisäksi . Joissakin tapauksissa väärän jakamisen poistaminen voi parantaa suorituskykyä suuruusjärjestyksessä. Väärä jakaminen on automaattisesti synkronoitujen välimuistiprotokollien luontainen artefakti, ja sitä voi esiintyä myös esimerkiksi hajautetuissa tiedostojärjestelmissä tai tietokannoissa, mutta nykyinen esiintyvyys rajoittuu RAM -välimuistiin.

Esimerkki

static struct {
    int x;
    int y; 
} f;

/* The two following functions run concurrently: */

int read_x(void) {
    return f.x;
}

void write_y(void) {
    ++f.y;
}

Tässä read_xsaattaa olla tarpeen lukea uudelleen xpäämuistista (välimuistin sijasta), vaikka write_ysamanaikaisen muutoksen ei ypitäisi olla merkityksellistä.

Lieventäminen

On olemassa keinoja lieventää väärän jakamisen vaikutuksia. Esimerkiksi CPU -välimuistien väärä jakaminen voidaan estää järjestämällä muuttujat uudelleen tai lisäämällä täyte (käyttämättömiä tavuja) muuttujien väliin. Jotkin näistä ohjelmamuutoksista voivat kuitenkin lisätä objektien kokoa, mikä lisää muistin käyttöä. Käännösaikaiset tietojen muunnokset voivat myös lieventää väärän jakamista. Jotkut näistä muutoksista eivät kuitenkaan aina ole sallittuja. Esimerkiksi C ++ -ohjelmointikielen standardi velvoittaa tietojäsenet asettamaan niin, että myöhemmillä jäsenillä on korkeammat osoitteet.

On työkaluja väärän jakamisen havaitsemiseksi. On myös järjestelmiä, jotka sekä havaitsevat että korjaavat väärän jakamisen suorittavissa ohjelmissa. Nämä järjestelmät aiheuttavat kuitenkin jonkin verran suorituskuluja.

Viitteet

Ulkoiset linkit