Kiek vietos puslapyje naudojama procesoriui. Kas yra standžiojo disko talpyklos atmintis ir kam ji skirta? Talpyklos architektūra ir principai

Kiek vietos puslapyje naudojama procesoriui. Kas yra standžiojo disko talpyklos atmintis ir kam ji skirta? Talpyklos architektūra ir principai

Laikinoji atmintis (talpykla, grynaisiais pinigais, buferis- eng.) - naudojamas skaitmeniniuose įrenginiuose kaip didelės spartos iškarpinė. Talpyklos atmintį galima rasti kompiuterių įrenginiuose, tokiuose kaip procesoriai, tinklo plokštės, kompaktinių diskų įrenginiai ir daugelis kitų.

Talpyklos veikimo principas ir architektūra gali labai skirtis.

Pavyzdžiui, talpykla gali būti įprasta iškarpinę . Įrenginys apdoroja duomenis ir perkelia juos į didelės spartos buferį, kur valdiklis perduoda duomenis į sąsają. Tokia talpykla skirta užkirsti kelią klaidoms, patikrinti aparatūros duomenų vientisumą arba užkoduoti signalą iš įrenginio į suprantamą sąsajos signalą be delsimo. Ši sistema naudojama, pvz CD/DVD CD diskai.

Kitu atveju talpykla gali tarnauti saugoti dažnai naudojamą kodą ir taip paspartinti duomenų apdorojimą. Tai reiškia, kad įrenginiui nereikia iš naujo skaičiuoti ar ieškoti duomenų, o tai užtruktų daug ilgiau nei nuskaityti iš talpyklos. Šiuo atveju labai svarbų vaidmenį atlieka talpyklos dydis ir greitis.

Ši architektūra dažniausiai randama kietuosiuose diskuose ir centriniuose procesoriuose ( CPU).

Kai įrenginiai veikia, į talpyklą gali būti įkeliama speciali programinė įranga arba dispečerinės programos, kurios dirbtų lėčiau su ROM(tik skaitymo atmintis).

Dauguma šiuolaikinių įrenginių naudoja mišrus talpyklos tipas , kuri gali tarnauti ir kaip iškarpinė, ir kaip dažnai naudojamam kodui saugoti.

Yra keletas labai svarbių funkcijų, skirtų procesorių ir vaizdo lustų talpyklai.

Vykdymo vienetų sujungimas . Centriniai procesoriai ir vaizdo procesoriai dažnai naudoja greitą bendrinamą talpyklą tarp branduolių. Atitinkamai, jei vienas branduolys apdorojo informaciją ir ji yra talpykloje, o gauta komanda tai pačiai operacijai arba dirbti su šiais duomenimis, tada procesorius duomenys nebus apdoroti dar kartą, o bus paimti iš talpyklą tolesniam apdorojimui. Branduolys bus iškrautas, kad būtų galima apdoroti kitus duomenis. Tai žymiai padidina panašių, bet sudėtingų skaičiavimų našumą, ypač jei talpykla yra didelė ir greita.

Bendrinama talpykla, taip pat leidžia branduoliams dirbti su juo tiesiogiai, apeinant lėtą .

Instrukcijų talpykloje. Yra arba bendra, labai greita L1 talpykla, skirta instrukcijoms ir kitoms operacijoms atlikti, arba joms skirta talpykla. Kuo daugiau instrukcijų saugoma procesoriuje, tuo didesnės instrukcijų talpyklos jam reikia. Tai sumažina atminties delsą ir leidžia instrukcijų blokui veikti beveik savarankiškai.

Kitos funkcijos ir savybės.

Pažymėtina, kad į CPU(centriniai procesoriai), taikomi aparatinės įrangos klaidų taisymas (ECC), nes nedidelė klaida talpykloje gali sukelti vieną nuolatinę klaidą toliau apdorojant šiuos duomenis.

IN CPU Ir GPU egzistuoja talpyklos hierarchija , kuri leidžia atskirti atskirų ir bendrųjų branduolių duomenis. Nors beveik visi duomenys iš antrojo lygio talpyklos vis tiek nukopijuojami į trečią, bendrą lygį, bet ne visada. Pirmasis talpyklos lygis yra greičiausias, o kiekvienas paskesnis yra lėtesnis, bet didesnio dydžio.

Procesoriams tai laikoma normalia trys ir mažiau talpyklos lygių. Tai leidžia išlaikyti pusiausvyrą tarp greičio, talpyklos dydžio ir šilumos išsklaidymo. Vaizdo įrašų procesoriuose sunku rasti daugiau nei du talpyklos lygius.

Talpyklos dydis, našumo poveikis ir kitos charakteristikos.

Natūralu, kuo didesnė talpykla, tuo daugiau duomenų gali saugoti ir apdoroti, tačiau yra rimta problema.

Didelė talpykla- Tai didelis biudžetas. Serverio procesoriuose ( CPU), talpyklą galima naudoti iki 80% tranzistoriaus biudžetas. Pirma, tai turi įtakos galutinei savikainai, antra, didėja energijos suvartojimas ir šilumos išsklaidymas, o tai nepalyginama su keliais procentais išaugusiu našumu.

Vienas iš svarbių veiksnių, didinančių procesoriaus našumą, yra talpyklos buvimas, tiksliau, jos tūris, prieigos greitis ir pasiskirstymas tarp lygių.

Jau gana seniai beveik visi procesoriai buvo aprūpinti tokio tipo atmintimi, o tai dar kartą įrodo jos naudingumą. Šiame straipsnyje kalbėsime apie talpyklos atminties struktūrą, lygius ir praktinę paskirtį, o tai labai svarbu. procesoriaus charakteristikos.

Kas yra talpyklos atmintis ir jos struktūra

Laikinoji atmintis yra ypač greita atmintis, kurią procesorius naudoja laikinai saugoti dažniausiai pasiekiamus duomenis. Taip galime trumpai apibūdinti šio tipo atmintį.

Talpyklos atmintis yra sukurta ant šliaužtinukų, kurie savo ruožtu susideda iš tranzistorių. Tranzistorių grupė užima daug daugiau vietos nei tie patys kondensatoriai, kurie sudaro RAM. Tai sukelia daug gamybos sunkumų ir apimties apribojimų. Štai kodėl talpyklos atmintis yra labai brangi atmintis, tačiau jos apimtis yra nereikšminga. Tačiau iš šios struktūros išplaukia pagrindinis tokios atminties privalumas – greitis. Kadangi šlepetės nereikalauja regeneracijos, o vartų, ant kurių jie sumontuoti, delsos laikas yra mažas, laikas, perjungiamas šlepetės iš vienos būsenos į kitą, vyksta labai greitai. Tai leidžia talpyklai veikti tais pačiais dažniais kaip ir šiuolaikiniai procesoriai.

Be to, svarbus veiksnys yra talpyklos atminties vieta. Jis yra pačiame procesoriaus luste, o tai žymiai sumažina prieigos laiką. Anksčiau kai kurių lygių talpyklos atmintis buvo už procesoriaus lusto ribų, specialioje SRAM lustoje kažkur pagrindinėje plokštėje. Dabar beveik visi procesoriai turi talpyklą, esančią procesoriaus mikroschemoje.


Kam naudojama procesoriaus talpykla?

Kaip minėta aukščiau, pagrindinė talpyklos atminties paskirtis yra saugoti duomenis, kuriuos dažnai naudoja procesorius. Talpykla yra buferis, į kurį įkeliami duomenys, nepaisant mažo dydžio (apie 4–16 MB) modernūs procesoriai, tai žymiai padidina našumą bet kurioje programoje.

Norėdami geriau suprasti talpyklos atminties poreikį, įsivaizduokime, kad kompiuterio atmintis tvarkoma kaip biure. RAM bus spintelė su aplankais, kuriuos buhalteris periodiškai pasiekia, kad gautų didelius duomenų blokus (ty aplankus). Ir lentelė bus talpyklos atmintis.

Yra elementų, kurie dedami ant buhalterio stalo, kuriuos jis nurodo kelis kartus per valandą. Pavyzdžiui, tai gali būti telefono numeriai, kai kurie dokumentų pavyzdžiai. Tokio tipo informacija yra tiesiai ant lentelės, o tai savo ruožtu padidina prieigos prie jų greitį.

Lygiai taip pat duomenis iš tų didelių duomenų blokų (aplankų) galima įtraukti į lentelę, kad būtų galima greitai naudoti, pavyzdžiui, dokumentą. Kai šio dokumento nebereikia, jis dedamas atgal į spintelę (į RAM), taip išvalant lentelę (cache atmintį) ir atlaisvinant šią lentelę naujiems dokumentams, kurie bus naudojami kitu laikotarpiu.

Taip pat naudojant talpyklą, jei yra kokių nors duomenų, kurie greičiausiai bus vėl pasiekti, šie duomenys iš RAM įkeliami į talpyklos atmintį. Labai dažnai tai atsitinka kartu įkeliant duomenis, kurie greičiausiai bus naudojami po dabartinių duomenų. Tai yra, yra prielaidų, kas bus naudojama „po“. Tai yra sudėtingi veikimo principai.

Procesoriaus talpyklos lygiai

Šiuolaikiniai procesoriai turi talpyklą, kuri dažnai susideda iš 2 arba 3 lygių. Žinoma, yra išimčių, bet taip dažnai būna.

Apskritai gali būti šie lygiai: L1 (pirmas lygis), L2 (antras lygis), L3 (trečias lygis). Dabar šiek tiek daugiau apie kiekvieną iš jų:

Pirmojo lygio talpykla (L1)– greičiausias talpyklos atminties lygis, veikiantis tiesiogiai su procesoriaus šerdimi, dėl šios glaudžios sąveikos šis lygis turi trumpiausią prieigos laiką ir veikia dažniais, esančiais arti procesoriaus. Tai buferis tarp procesoriaus ir antrojo lygio talpyklos.

Apsvarstysime didelio našumo procesoriaus Intel Core i7-3770K apimtis. Šiame procesoriuje yra 4 x 32 KB L1 talpykla 4 x 32 KB = 128 KB. (32 KB vienam branduoliui)

Antrojo lygio talpykla (L2)– antrasis lygis yra didesnio masto nei pirmasis, tačiau dėl to turi mažesnes „greičio charakteristikas“. Atitinkamai, jis tarnauja kaip buferis tarp L1 ir L3 lygių. Jei dar kartą pažvelgsime į mūsų pavyzdį Core i7-3770 K, tada L2 talpyklos atminties dydis yra 4x256 KB = 1 MB.

3 lygio talpykla (L3)– trečias lygis vėlgi yra lėtesnis nei ankstesni du. Tačiau jis vis tiek yra daug greitesnis nei RAM. L3 talpyklos dydis i7-3770K yra 8 MB. Jei ankstesnius du lygius dalijasi kiekvienas branduolys, tai šis lygis yra bendras visam procesoriui. Figūra gana tvirta, bet ne per didelė. Kadangi, pavyzdžiui, Extreme serijos procesoriams, tokiems kaip i7-3960X, jis yra 15 MB, o kai kuriems naujiems Xeon procesoriams - daugiau nei 20.

Kas yra procesoriaus talpykla?

Talpykla yra atminties dalis, kuri užtikrina maksimalų prieigos greitį ir pagreitina skaičiavimo greitį. Jame saugomi tie duomenys, kurių procesorius prašo dažniausiai, kad procesoriui nereikėtų nuolat prieiti prie sistemos atminties.

Kaip žinia, tai kompiuterinės įrangos dalis, kuri pasižymi lėčiausiu duomenų mainų greičiu. Jei procesoriui reikia informacijos, jis eina į RAM per to paties pavadinimo magistralę. Gavęs užklausą iš tvarkytojo, jis pradeda gilintis į savo metraščius, ieškodamas tvarkytojui reikalingų duomenų. Gavusi RAM siunčia juos atgal į procesorių ta pačia atminties magistrale. Šis duomenų mainų ratas visada buvo per ilgas. Todėl gamintojai nusprendė, kad gali leisti procesoriui saugoti duomenis kur nors netoliese. Talpyklos veikimo būdas yra pagrįstas paprasta idėja.

Pagalvokite apie atmintį kaip apie mokyklos biblioteką. Studentė kreipiasi į darbuotoją dėl knygos, ji nueina prie lentynų, jos ieško, grįžta pas mokinį, tinkamai ją paruošia ir pereina pas kitą studentą. Dienos pabaigoje jis pakartoja tą pačią operaciją, kai jai grąžinamos knygos. Taip veikia procesorius be talpyklos.

Kodėl procesoriui reikia talpyklos?

Dabar įsivaizduokite, kad bibliotekininkė pavargo nuo nuolatinio skubėjimo pirmyn ir atgal su knygomis, kurių iš jos nuolat reikalaujama metai iš metų, diena iš dienos. Jis įsigijo didelę spintą, kurioje saugo dažniausiai prašomas knygas ir vadovėlius. Likusi dalis, žinoma, ir toliau saugoma tose pačiose lentynose. Bet jie visada yra po ranka. Kiek laiko sutaupė su šiuo kabinetu ir sau, ir kitiems. Tai yra talpykla.

Taigi, talpykla gali saugoti tik reikalingiausius duomenis?

Taip. Bet jis gali daugiau. Pavyzdžiui, jau sukaupęs dažnai reikalingus duomenis, jis gali įvertinti (apdorotojo pagalba) situaciją ir paprašyti informacijos, kurios tuoj prireiks. Taigi, video nuomos klientas, kuris paprašė filmo „Die Hard“ su pirmąja dalimi, greičiausiai paprašys ir antrosios. Ir štai ji! Tas pats pasakytina apie procesoriaus talpyklą. Pasiekdamas RAM ir saugodamas tam tikrus duomenis, jis taip pat nuskaito duomenis iš gretimų atminties ląstelių. Tokios duomenų dalys vadinamos talpyklos eilutėmis.

Kas yra dviejų lygių talpykla?

Šiuolaikinis procesorius turi du lygius. Atitinkamai pirmasis ir antrasis. Jie žymimi raide L iš anglų kalbos lygio. Pirmasis – L1 – greitesnis, bet mažo tūrio. Antrasis – L2 – yra kiek didesnis, bet lėtesnis, bet greitesnis už RAM. Pirmojo lygio talpykla yra padalinta į instrukcijų talpyklą ir duomenų talpyklą. Instrukcijų talpykloje saugomas instrukcijų rinkinys, kurio procesoriui reikia skaičiavimams atlikti. Tuo tarpu duomenų talpykloje saugomi kiekiai arba reikšmės, reikalingos dabartiniam skaičiavimui. O antrojo lygio talpykla naudojama duomenims įkelti iš kompiuterio RAM. Talpyklos lygių veikimo principą taip pat galima paaiškinti naudojant mokyklos bibliotekos pavyzdį. Taigi, užpildęs nupirktą kabinetą, bibliotekininkas supranta, kad knygų nebeužtenka, dėl kurių nuolat tenka lakstyti po salę. Tačiau tokių knygų sąrašas buvo baigtas, ir jums reikia nusipirkti tą pačią spintelę. Jis neišmetė pirmojo - gaila - ir tiesiog nusipirko antrą. O dabar, kai užpildoma pirmoji, bibliotekininkė pradeda pildyti antrąją, kuri atsiranda tada, kai pilna pirmoji, bet į ją netelpa reikalingos knygos. Tas pats yra su talpyklos lygiais. Tobulėjant mikroprocesorių technologijai, procesoriaus talpyklos lygis didėja.

Ar talpykla toliau augs?

Vargu ar. Procesoriaus dažnio siekimas taip pat truko neilgai, o gamintojai rado kitų būdų, kaip padidinti galią. Tas pats su talpykla. Kalbant konkrečiai, lygių apimtis ir skaičius negali būti išpūsti be galo. Talpykla neturėtų virsti kita RAM atmintimi su lėtu prieigos greičiu arba sumažinti procesoriaus dydį iki pusės pagrindinės plokštės dydžio. Galų gale, duomenų prieigos greitis visų pirma yra energijos suvartojimas ir paties procesoriaus veikimo sąnaudos. Taip pat dažnėja talpyklos praleidimai (priešingai nei talpyklos įvykiai), kai procesorius pasiekia talpyklos atmintį duomenims, kurių nėra. Duomenys talpykloje nuolat atnaujinami naudojant įvairius algoritmus, siekiant padidinti talpyklos pataikymo tikimybę.

Skaityti: 644

Beveik visi kūrėjai žino, kad procesoriaus talpykla yra nedidelė, bet greita atmintis, kurioje saugomi duomenys iš neseniai aplankytų atminties sričių – apibrėžimas trumpas ir gana tikslus. Tačiau norint suprasti veiksnius, turinčius įtakos kodo veikimui, būtina žinoti nuobodžią informaciją apie talpyklos mechanizmus.

Šiame straipsnyje apžvelgsime keletą pavyzdžių, iliustruojančių įvairias talpyklų funkcijas ir jų įtaką našumui. Pavyzdžiai bus C# kalba ir platformos pasirinkimas neturi didelės įtakos veiklos vertinimui ir galutinėms išvadoms. Natūralu, kad protingomis ribomis, jei pasirinksite kalbą, kurioje reikšmės skaitymas iš masyvo prilygsta prieigai prie maišos lentelės, negausite jokių interpretuojamų rezultatų. Vertėjo pastabos kursyvu.

Habracut - - -

1 pavyzdys: Prieiga prie atminties ir našumas

Kaip manote, kiek greitesnis antrasis ciklas nei pirmasis?
int arr = naujas int;

// Pirmas
už (int i = 0; i< arr.Length; i++) arr[i] *= 3;

// antra
už (int i = 0; i< arr.Length; i += 16) arr[i] *= 3;


Pirmoji kilpa padaugina visas masyvo reikšmes iš 3, antroji kilpa padaugina tik kas šešioliktą reikšmę. Tik baigiamas antrasis ciklas 6% dirba pirmasis ciklas, tačiau šiuolaikinėse mašinose abu ciklai vykdomi maždaug per vienodą laiką: 80 ms Ir 78 ms atitinkamai (mano mašinoje).

Sprendimas paprastas – prieiga prie atminties. Šių kilpų greitį pirmiausia lemia atminties posistemio greitis, o ne sveikųjų skaičių daugybos greitis. Kaip matysime kitame pavyzdyje, tiek pirmuoju, tiek antruoju atveju prieigų prie RAM skaičius yra toks pat.

2 pavyzdys: talpyklos eilučių poveikis

Pasigilinkime ir išbandykime kitas žingsnių vertes, ne tik 1 ir 16:
už (int i = 0; i< arr.Length; i += K /* шаг */ ) arr[i] *= 3;

Štai šios kilpos veikimo laikas skirtingoms žingsnių reikšmėms K:

Atkreipkite dėmesį, kad esant žingsnių reikšmėms nuo 1 iki 16, veikimo laikas praktiškai nesikeičia. Tačiau kai reikšmės yra didesnės nei 16, veikimo laikas sumažėja maždaug perpus kiekvieną kartą, kai žingsnį padidiname dvigubai. Tai nereiškia, kad ciklas kažkaip stebuklingai pradeda veikti greičiau, tiesiog mažėja iteracijų skaičius. Pagrindinis taškas yra tas pats veikimo laikas su žingsnių reikšmėmis nuo 1 iki 16.

Taip yra dėl to, kad šiuolaikiniai procesoriai pasiekia atmintį ne po vieną baitą, o prie mažų blokų, vadinamų talpyklos eilutėmis. Paprastai eilutės dydis yra 64 baitai. Kai skaitote bet kokią reikšmę iš atminties, į talpyklą patenka bent viena talpyklos eilutė. Vėlesnė prieiga prie bet kurios vertės iš šios eilutės yra labai greita.

Kadangi 16 int reikšmių užima 64 baitus, kilpos su žingsniais nuo 1 iki 16 pasiekia tą patį talpyklos eilučių skaičių arba, tiksliau, visas masyvo talpyklos eilutes. 32 veiksme pasiekiama kas antra eilutė, 64 veiksme – kas ketvirta.

Tai suprasti labai svarbu kai kurioms optimizavimo technikoms. Prieigų prie jo skaičius priklauso nuo duomenų vietos atmintyje. Pavyzdžiui, nesuderinti duomenys gali reikalauti dviejų prieigos prie pagrindinės atminties, o ne vienos. Kaip sužinojome aukščiau, veikimo greitis bus du kartus mažesnis.

3 pavyzdys: 1 ir 2 lygio talpyklos dydžiai (L1 ir L2)

Šiuolaikiniai procesoriai paprastai turi du ar tris talpyklos lygius, paprastai vadinamus L1, L2 ir L3. Norėdami sužinoti skirtingų lygių talpyklų dydžius, galite naudoti „CoreInfo“ įrankį arba „Windows API“ funkciją GetLogicalProcessorInfo. Abu metodai taip pat suteikia informacijos apie talpyklos eilutės dydį kiekvienam lygiui.

Mano kompiuteryje „CoreInfo“ praneša apie 32 KB L1 duomenų talpyklos, 32 KB L1 instrukcijų talpyklos ir 4 MB L2 duomenų talpyklos. Kiekvienas branduolys turi savo asmenines L1 talpyklas, L2 talpyklas dalijasi kiekviena branduolių pora:

Loginis procesorius į talpyklos žemėlapį: *--- Duomenų talpykla 0, 1 lygis, 32 KB, Assoc 8, LineSize 64 *--- Instrukcijų talpykla 0, 1 lygis, 32 KB, Assoc 8, LineSize 64 --*-- Duomenų talpykla 1, 1 lygis, 32 KB, Assoc 8, LineSize 64 --*-- Instrukcijų talpykla 1, 1 lygis, 32 KB, Assoc 8, LineSize 64 **- Unified Cache 0, Level 2, 4 MB, Assoc 16, LineS 64 --*- 2 duomenų talpykla, 1 lygis, 32 KB, Assoc 8, LineSize 64 --*- 2 instrukcijų talpykla, 1 lygis, 32 KB, Assoc 8, LineSize 64 ---* 3 duomenų talpykla, 1 lygis, 32 KB, Assoc 8, LineSize 64 ---* Instrukcijų talpykla 3, 1 lygis, 32 KB, Assoc 8, LineSize 64 --** Unified Cache 1, Level 2, 4 MB, Assoc 16, LineSize 64
Patikrinkime šią informaciją eksperimentiškai. Norėdami tai padaryti, pereikime prie savo masyvo, padidindami kas 16 reikšmę – tai paprastas būdas pakeisti duomenis kiekvienoje talpyklos eilutėje. Pasiekę pabaigą grįžtame į pradžią. Patikrinkime skirtingus masyvo dydžius, kai masyvas nebetelpa į skirtingų lygių talpyklas, našumas sumažės.

Kodas yra:

int žingsniai = 64 * 1024 * 1024; // iteracijų skaičius
int ilgisMod = arr.Ilgis - 1; // masyvo dydis -- dviejų galia

už (int i = 0; i< steps; i++)
{
// x & ilgisMod = x % arr.Ilgis, nes dviejų laipsniai
arr[(i * 16) & longMod]++;
}


Testo rezultatai:

Mano įrenginyje pastebimi našumo kritimai po 32 KB ir 4 MB – tai yra L1 ir L2 talpyklos dydžiai.

4 pavyzdys: Instrukcijų lygiagretumas

Dabar pažiūrėkime į ką nors kita. Jūsų nuomone, kuri iš šių dviejų ciklų veiks greičiau?
int žingsniai = 256 * 1024 * 1024;
int a = naujas int ;

// Pirmas
už (int i = 0; i< steps; i++) { a++; a++; }

// antra
už (int i = 0; i< steps; i++) { a++; a++; }


Pasirodo, antroji kilpa veikia beveik dvigubai greičiau, bent jau visose mano bandytose mašinose. Kodėl? Kadangi komandos, esančios kilpose, turi skirtingas duomenų priklausomybes. Pirmosios komandos turi tokią priklausomybių grandinę:

Antrajame cikle priklausomybės yra:

Šiuolaikinių procesorių funkcinės dalys gali vienu metu atlikti tam tikrą skaičių tam tikrų operacijų, dažniausiai ne itin daug. Pavyzdžiui, galima lygiagrečiai prieiti prie duomenų iš L1 talpyklos dviem adresais, taip pat galima vienu metu vykdyti dvi paprastas aritmetines komandas. Pirmuoju ciklu procesorius negali naudotis šiomis galimybėmis, tačiau gali naudoti antrąjį.

5 pavyzdys: talpyklos asociatyvumas

Vienas iš pagrindinių klausimų, į kurį reikia atsakyti kuriant talpyklą, yra tai, ar duomenis iš tam tikros atminties srities galima saugoti bet kuriose talpyklos langeliuose, ar tik kai kuriuose iš jų. Trys galimi sprendimai:
  1. Tiesioginio atvaizdavimo talpykla,Kiekvienos talpyklos eilutės RAM duomenys saugomi tik vienoje iš anksto nustatytoje talpyklos vietoje. Paprasčiausias būdas apskaičiuoti atvaizdavimą yra: row_index_in_memory %_cache_cells_skaičius. Dvi eilutės, susietos su tuo pačiu langeliu, negali būti talpykloje vienu metu.
  2. N įrašo dalinė asociatyvioji talpykla, kiekviena eilutė gali būti saugoma N skirtingose ​​talpyklos vietose. Pavyzdžiui, 16 įrašų talpykloje eilutė gali būti saugoma vienoje iš 16 langelių, sudarančių grupę. Paprastai eilutės su vienodais mažiausiai reikšmingais indeksų bitais turi vieną grupę.
  3. Visiškai asociatyvi talpykla, bet kuri eilutė gali būti saugoma bet kurioje talpyklos vietoje. Sprendimas savo elgesiu prilygsta maišos lentelei.
Tiesiogiai susietos talpyklos yra linkusios ginčytis, pavyzdžiui, kai dvi eilutės konkuruoja dėl to paties langelio, pakaitomis iškeldamos viena kitą iš talpyklos, efektyvumas yra labai mažas. Kita vertus, visiškai asociatyvios talpyklos, nors ir neturi šio trūkumo, yra labai sudėtingos ir brangios. Iš dalies asociatyvios talpyklos yra tipiškas kompromisas tarp diegimo sudėtingumo ir efektyvumo.

Pavyzdžiui, mano kompiuteryje 4 MB L2 talpykla yra 16 įrašų dalinė asociatyvi talpykla. Visa RAM suskirstyta į eilučių rinkinius pagal mažiausiai reikšmingus jų indeksų bitus, eilutės iš kiekvieno rinkinio varžosi dėl vienos 16 L2 talpyklos langelių grupės.

Kadangi L2 talpykloje yra 65 536 langeliai (4 * 2 20 / 64) ir kiekviena grupė susideda iš 16 langelių, iš viso turime 4 096 grupes. Taigi, apatiniai 12 eilutės indekso bitų nustato, kuriai grupei priklauso ši eilutė (2 12 = 4 096). Todėl eilutės, kurių adresai yra 262 144 (4 096 * 64) kartotiniai, turi tą pačią 16 langelių grupę ir konkuruoja dėl vietos joje.

Kad asociatyvumo poveikis įsigaliotų, turime nuolat pasiekti daug eilučių iš tos pačios grupės, pavyzdžiui, naudojant šį kodą:

viešas statinis ilgas AtnaujintiKiekvienas KthByte(baitas arr, int K)
{
const int rep = 1024 * 1024; // iteracijų skaičius

Chronometras sw = Chronometras.StartNew();

int p = 0;
už (int i = 0; i< rep; i++)
{
arr[p]++;

P += K; if (p >= arr.Ilgis) p = 0;
}

Sw.Stop();
return sw.ElapsedMilliseconds;
}


Metodas padidina kiekvieną K-ąjį masyvo elementą. Kai pasiekiame pabaigą, pradedame iš naujo. Po gana didelio iteracijų skaičiaus (2 20) sustojame. Padariau skirtingų masyvo dydžių ir K žingsnių reikšmių paleidimus (mėlyna - ilgas veikimo laikas, baltas - trumpas):

Mėlynos sritys atitinka tuos atvejus, kai nuolat keičiantis duomenims talpykla negali prisitaikyti visus reikiamus duomenis vienu metu. Ryškiai mėlyna spalva rodo apie 80 ms veikimo laiką, beveik balta – 10 ms.

Panagrinėkime mėlynąsias sritis:

  1. Kodėl atsiranda vertikalios linijos? Vertikalios linijos atitinka žingsnių reikšmes, kuriomis pasiekiama per daug eilučių (daugiau nei 16) iš vienos grupės. Dėl šių verčių mano kompiuterio 16 įrašų talpykla negali talpinti visų būtinų duomenų.

    Kai kurios blogų žingsnių reikšmės yra dviejų galių: 256 ir 512. Pavyzdžiui, apsvarstykite žingsnį 512 ir 8 MB masyvą. Atlikus šį veiksmą, masyve yra 32 skyriai (8 * 2 20 / 262 144), kurie tarpusavyje konkuruoja dėl langelių 512 talpyklos grupių (262 144 / 512). Yra 32 skyriai, tačiau talpykloje kiekvienai grupei yra tik 16 langelių, todėl vietos visiems neužtenka.

    Kitos žingsnių reikšmės, kurios nėra dviejų laipsniai, yra tiesiog nesėkmingos, todėl tose pačiose talpyklos grupėse atsiranda daugybė pataisų, be to, paveiksle atsiranda vertikalių mėlynų linijų. Šiuo metu skaičių teorijos mėgėjai kviečiami susimąstyti.

  2. Kodėl vertikalios linijos nutrūksta ties 4 MB riba? Kai masyvo dydis yra 4 MB ar mažesnis, 16 įrašų talpykla elgiasi kaip visiškai asociatyvi talpykla, ty joje be konfliktų gali tilpti visi masyvo duomenys. Dėl vienos talpyklos grupės kovoja ne daugiau kaip 16 sričių (262 144 * 16 = 4 * 2 20 = 4 MB).
  3. Kodėl viršuje kairėje yra didelis mėlynas trikampis? Nes esant mažam žingsniui ir dideliam masyvui, talpykla negali sutalpinti visų reikiamų duomenų. Talpyklos asociatyvumo laipsnis čia vaidina antraeilį vaidmenį, apribojimas yra susijęs su L2 talpyklos dydžiu.

    Pavyzdžiui, kai masyvo dydis yra 16 MB, o žingsnis - 128, pasiekiame kas 128 baitą, taip modifikuodami kas antrą masyvo talpyklos eilutę. Norint išsaugoti kas antrą eilutę talpykloje, reikia 8 MB talpyklos, bet mano kompiuteryje yra tik 4 MB.

    Net jei talpykla būtų visiškai asociatyvi, ji neleistų joje saugoti 8 MB duomenų. Atkreipkite dėmesį, kad jau aptartame pavyzdyje su žingsniu 512 ir masyvo dydžiu 8 MB, mums reikia tik 1 MB talpyklos, kad išsaugotume visus reikiamus duomenis, tačiau to padaryti negalima dėl nepakankamo talpyklos asociatyvumo.

  4. Kodėl kairioji trikampio pusė palaipsniui stiprėja? Didžiausias intensyvumas pasiekiamas esant 64 baitų žingsnio vertei, kuri yra lygi talpyklos eilutės dydžiui. Kaip matėme pirmame ir antrame pavyzdžiuose, nuosekli prieiga prie tos pačios eilutės beveik nieko nekainuoja. Tarkime, su 16 baitų žingsniu turime keturias atminties prieigas už vienos kainą.

    Kadangi mūsų teste bet kurios žingsnio vertės pakartojimų skaičius yra toks pat, pigesnis veiksmas sumažina veikimo laiką.

Aptikti efektai išlieka esant didelėms parametrų reikšmėms:

Talpyklos asociatyvumas yra įdomus dalykas, kuris gali pasireikšti tam tikromis sąlygomis. Skirtingai nuo kitų šiame straipsnyje aptartų problemų, tai nėra tokia rimta. Tai tikrai nėra kažkas, kas reikalauja nuolatinio dėmesio rašant programas.

6 pavyzdys: klaidingas talpyklos skaidymas

Kelių branduolių įrenginiuose galite susidurti su kita problema - talpyklos suderinamumu. Procesoriaus branduoliai turi iš dalies arba visiškai atskiras talpyklas. Mano kompiuteryje L1 talpyklos yra atskiros (kaip įprasta), taip pat yra dvi L2 talpyklos, kurias dalijasi kiekviena branduolių pora. Išsami informacija gali skirtis, tačiau apskritai šiuolaikiniai kelių branduolių procesoriai turi kelių lygių hierarchines talpyklas. Be to, greičiausios, bet ir mažiausios talpyklos priklauso atskiriems branduoliams.

Kai vienas branduolys pakeičia reikšmę savo talpykloje, kiti branduoliai nebegali naudoti senosios vertės. Reikšmė kitų branduolių talpyklose turi būti atnaujinta. Be to, būtina atnaujinti visa talpyklos eilutė, nes talpyklos naudoja duomenis eilutės lygiu.

Parodykime šią problemą naudodami šį kodą:

privatus statinis int s_skaitiklis = naujas int ;

privati ​​galia Atnaujinimo skaitiklis (vidinė pozicija)
{
už (int j = 0; j< 100000000; j++)
{
s_skaitiklis = s_skaitiklis + 3;
}
}


Jei savo keturių branduolių įrenginyje iškviečiu šį metodą su parametrais 0, 1, 2, 3 vienu metu iš keturių gijų, tada veikimo laikas bus 4,3 sekundės. Bet jei aš iškviesiu metodą su parametrais 16, 32, 48, 64, tada veikimo laikas bus tik 0,28 sekundės.

Kodėl? Pirmuoju atveju visos keturios vertės, kurias vienu metu apdoroja gijos, greičiausiai atsidurs vienoje talpyklos eilutėje. Kiekvieną kartą, kai vienas branduolys padidina vertę, jis pažymi talpyklos langelius, kuriuose yra ši vertė kituose branduoliuose, kaip negaliojančius. Po šios operacijos visi kiti branduoliai turės vėl įrašyti eilutę talpykloje. Dėl to talpyklos mechanizmas neveikia, o tai neigiamai veikia.

7 pavyzdys: Aparatinės įrangos sudėtingumas

Net ir dabar, kai talpyklos veikimo principai jums nėra paslaptis, techninė įranga vis tiek pateiks staigmenų. Procesoriai vienas nuo kito skiriasi optimizavimo metodais, euristika ir kitomis įgyvendinimo subtilybėmis.

Kai kurių procesorių L1 talpykla gali lygiagrečiai pasiekti du langelius, jei jie priklauso skirtingoms grupėms, o jei priklauso tai pačiai grupei, tai tik nuosekliai. Kiek žinau, kai kurie netgi gali lygiagrečiai pasiekti skirtingus tos pačios kameros ketvirčius.

Procesoriai gali jus nustebinti sumaniai optimizuodami. Pavyzdžiui, kodas iš ankstesnio pavyzdžio apie klaidingą talpyklos dalijimąsi mano namų kompiuteryje neveikia taip, kaip numatyta – paprasčiausiais atvejais procesorius gali optimizuoti darbą ir sumažinti neigiamą poveikį. Jei šiek tiek pakeisite kodą, viskas atsidurs savo vietose.

Štai dar vienas keistų aparatinės įrangos keistenybių pavyzdys:

privatus statinis int A, B, C, D, E, F, G;

privati ​​statinė tuštuma Keista()
{
už (int i = 0; i< 200000000; i++)
{
<какой-то код>
}
}


Jei vietoj<какой-то код>Pakeiskite tris skirtingas parinktis, galite gauti šiuos rezultatus:

A, B, C, D laukų didinimas užtrunka ilgiau nei A, C, E, G laukų didinimas. Dar keisčiau, kad A ir C laukų didinimas užtrunka ilgiau nei A, C laukų Ir E, G. Tiksliai nežinau, kokios to priežastys, bet galbūt jos susijusios su atminties bankais ( taip, taip, su paprastais trijų litrų taupymo atminties bankais, o ne tai, ką galvojote). Jei turite kokių nors minčių šiuo klausimu, rašykite komentaruose.

Mano įrenginyje aukščiau paminėtų dalykų nesilaikoma, tačiau kartais būna neįprastai blogų rezultatų - greičiausiai užduočių planuotojas atlieka savo „koregavimus“.

Iš šio pavyzdžio galima pasimokyti, kad labai sunku visiškai numatyti aparatinės įrangos elgesį. taip, Gali prognozuoti daug, bet jūs turite nuolat patvirtinti savo prognozes matavimais ir bandymais.

Išvada

Tikiuosi, kad viskas, kas aptarta aukščiau, padėjo suprasti procesoriaus talpyklos struktūrą. Dabar galite pritaikyti šias žinias praktikoje, kad optimizuotumėte savo kodą.

Laikinoji atmintis – tai į procesorių įmontuota atmintis, į kurią įrašomi dažniausiai naudojami RAM duomenys (komandos), o tai žymiai pagreitina darbą.

L1 talpyklos dydis (nuo 8 iki 128 KB)
1 lygio talpyklos dydis.
1 lygio talpykla yra didelės spartos atminties blokas, esantis tiesiai procesoriaus šerdyje.
Į ją nukopijuojami iš RAM išgauti duomenys.

Pagrindinių instrukcijų saugojimas pagerina procesoriaus našumą dėl greitesnio duomenų apdorojimo greičio (apdorojimas iš talpyklos vyksta greičiau nei iš RAM).

Pirmojo lygio talpyklos talpa yra nedidelė ir siekia kilobaitus.
Paprastai „senesni“ procesorių modeliai turi didesnę L1 talpyklą.
Kelių branduolių modeliuose nurodomas L1 talpyklos atminties kiekis vienam branduoliui.

L2 talpyklos dydis (nuo 128 iki 12288 KB)
2 lygio talpyklos dydis.
L2 talpykla yra didelės spartos atminties blokas, kuris atlieka tas pačias funkcijas kaip ir L1 talpykla (žr. „L1 talpyklos talpa“), tačiau pasižymi mažesne sparta ir didesne talpa.

Jei procesorių renkatės daug resursų reikalaujančioms užduotims atlikti, tuomet pirmenybė bus teikiama modeliui su didele L2 talpykla.
Kelių branduolių procesoriams nurodomas bendras antrojo lygio talpyklos atminties kiekis.

L3 talpyklos dydis (nuo 0 iki 16384 KB)
3 lygio talpyklos dydis.
Integruota L3 talpykla, kartu su greita sistemos magistrale, sudaro didelės spartos duomenų mainų kanalą su sistemos atmintimi.

Paprastai trečiojo lygio talpyklos atmintis yra aprūpinta tik serverių sprendimų arba specialių „stalinių“ procesorių leidimų CPU.

Pavyzdžiui, procesorių linijos, tokios kaip „Intel Pentium 4 Extreme Edition“, „Xeon DP“, „Itanium 2“, „Xeon MP“ ir kitos, turi trečiojo lygio talpyklą.

Twin BiCS FLASH – nauja 3D flash atminties technologija

2019 m. gruodžio 11 d. IEEE tarptautiniame elektroninių įrenginių susitikime (IEDM) TOKYO-Kioxia Corporation paskelbė apie 3D „flash“ atminties technologiją – „Twin BiCS FLASH“.

AMD Radeon Software Adrenalin Edition 2020 tvarkyklė 19.12.2 WHQL (pridėta)

Gruodžio 10 d. AMD pristatė milžinišką tvarkyklę Radeon Software Adrenalin 2020 Edition 19.12.2 WHQL.

„Windows 10“ kaupiamasis naujinimas 1909 KB4530684

2019 m. gruodžio 10 d. „Microsoft“ išleido kaupiamąjį naujinimą KB4530684 (versija 18363.535), skirtą „Windows 10“ 2019 m. lapkričio mėn. naujinimui (1909 versija) x86, x64 (amd64), ARM64 ir „Windows Server 2019“ procesų sistemose (190) (190).

NVIDIA Game Ready GeForce 441.66 WHQL tvarkyklė

NVIDIA GeForce Game Ready 441.66 WHQL palaiko MechWarrior 5: Mercenaries ir Detroit: Become Human, taip pat prideda G-SYNC palaikymą MSI MAG251RX ir ViewSonic XG270 monitoriams.

Peržiūros