Atviras
Uždaryti

Už ką atsakinga procesoriaus talpykla? Naujas požiūris į procesoriaus talpyklą. Kas yra garsumas ir ką jis įtakoja?

CPU talpykla- speciali atmintis procesoriaus viduje, siekiant pagreitinti prieigą prie RAM. Kartais procesoriaus talpykla vadinama pagrindine atmintimi, nes ją galima pasiekti per labai trumpą laiką. Paprastai procesorių talpykla yra pagrįsta klasikiniais „flip-flops“ - vadinamąja statine atmintimi (SRAM). Pavyzdžiui, RAM yra pastatyta ant kondensatorių, kurie laikas nuo laiko įkraunami. Trigeriai suteikia beveik akimirksniu prieigą prie savęs, tačiau jie turi du pagrindinius trūkumus:

  • palyginti didelės gamybos sąnaudos
  • nuolatinis energijos suvartojimas
  • Būtent šie SRAM apribojimai neleidžia sukurti RAM remiantis juo.

    Procesoriaus talpyklos lygiai

    Šiuolaikiniuose procesoriuose talpykla yra padalinta į kelis lygius

    Talpyklos atminties algoritmas

    Talpyklos veikimo algoritmą valdo specialus valdiklis, esantis procesoriuje. Jis gali dinamiškai keisti savo veikimo modelį, priklausomai nuo aplinkybių. Tačiau bendras talpyklos algoritmas yra toks:

    Kai procesorius pateikia skaitymo užklausą, talpyklos valdiklis ieško reikšmės talpykloje ir, jei randama, siunčia ją procesoriui. Jei reikšmė nerandama, valdiklis siunčia užklausą toliau: į žemesnio lygio talpyklą arba į RAM. Nuskaitęs reikšmę iš žemesnio lygio, talpykla prideda šią reikšmę prie savęs ir kitą kartą prie jos iš karto pateiks procesoriui.

    Kai procesorius pateikia rašymo užklausą į RAM, ji talpyklos valdiklis atnaujina vertę sau ir perduoda ją žemesniems lygiams. Galiausiai vertė patenka į RAM. Rašymo talpykla paprastai veikia naudojant šį algoritmą. Žinoma, galite išsaugoti vertę tik talpykloje, tačiau tada kiti komponentai (pavyzdžiui, DMA - tiesioginė prieiga prie atminties) gali gauti pasenusią reikšmę, kai pasiekiate RAM.

    Talpyklos dažnis

    Kadangi SRAM atmintis gali veikti labai aukštais dažniais, procesoriaus talpyklos atmintis paprastai veikia tuo pačiu dažniu kaip ir pats procesorius. Tai dar labiau padidina darbo su tokio tipo atmintimi greitį.

    Išmanioji talpykla

    Šiuolaikiniai talpyklos valdikliai gali atspėti, kurias atminties ląsteles procesorius greitai pasieks ir iš anksto įkelti jas į talpyklą. Pavyzdžiui, jei procesorius pasiekė 42 langelį, tada 43, tada yra didelė tikimybė, kad trečioji prieiga bus prie 44 langelio. Todėl valdiklis iš anksto įkelia 44 langelio reikšmę į savo itin greitą atmintį.

    Pirmoji talpykla

    8086 procesoriuje buvo šiek tiek talpyklos panašumas. Jis turėjo 6 baitų instrukcijų talpyklą. Nedidelis skaičius, be didelių intelektinių gebėjimų, tačiau tai žymiai padidino sistemos našumą. Tačiau tikra talpykla buvo pradėta naudoti su 80386 procesoriumi. Tais laikais prieigai prie RAM prireikė 120 ns. Bet šalia procesoriausįrengė specialų talpyklos atminties lustas ir prieiga prie jos buvo 12 kartų greitesnė nei prie RAM. Tačiau ši atmintis (SRAM) buvo gana brangi, o didelės talpyklos atminties lusto įdiegimas buvo nuostolingas. Todėl pirmojo procesoriaus talpyklos buvo apribotos iki 64 kilobaitų ir buvo įdiegtos atskirai. Pradedant nuo 80486 procesoriaus CPU talpykla pradėjo pateisinti savo pavadinimą, nes buvo įdiegta tiesiai į procesorių.

    Talpyklos diegimo vieta

    Kaip minėta aukščiau, 80386 procesorius neturėjo vidinės talpyklos. Talpykla buvo įdiegta kaip atskiras lustas pagrindinėje plokštėje. Kompiuteriuose, kurių pagrindas yra 80486 procesorius, kaip ir anksčiau, talpykla buvo pagrindinėje plokštėje, tačiau tai buvo antrasis lygis. Buvo nustatytas pirmasis talpyklos lygis tiesiai procesoriuje. Laikui bėgant ir tobulėjant lustų gamybos technologijai, procesoriaus talpykla visiškai persikėlė į procesorių, taip pat į RAM valdiklį.

    CPU talpykla yra veiksmingas būdas padidinti procesoriaus našumą didinant darbo su RAM greitis.

    Pirmasis procesorius, pagamintas su L2 talpykla, buvo Pentium Pro 1995 m. Jis turėjo 256 arba 512 KB lustinės L2 talpyklos, o tai suteikė didelį pranašumą prieš įprastus Pentium procesorius, kurių talpykla buvo pagrindinėje plokštėje. Atsiradus „Pentium II“, 1 lizdo modulyje šalia procesoriaus „nusėdo“ skirta talpyklos atmintis. Tačiau tik antrosios kartos Pentium III, skirtas Socket 370, talpyklos atmintį perkėlė į procesoriaus lustą. Tai tęsiasi iki šiol, tačiau yra procesorių su nedideliu talpyklos kiekiu, o kitų su dideliu kiekiu. Ar verta leisti pinigus modeliui su didele talpykla? Anksčiau papildoma talpyklos atmintis ne visada turėjo pastebimos įtakos našumui.

    Nors visada galima rasti išmatuojamų skirtumų tarp dviejų skirtingų talpyklos dydžių procesorių, buvo visiškai įmanoma nusipirkti procesorius su mažesnėmis talpyklomis, kad sutaupytumėte pinigų. Tačiau prieš „Core 2 Duo“ nebuvo galima įsigyti procesoriaus su trimis skirtingomis talpyklos parinktimis.

    Pirmosios kartos Pentium 4 (Willamette, 180 nm) buvo aprūpintas 256 KB talpykla, o sėkmingesnėje antroje kartoje (Northwood, 130 nm) – jau 512 KB talpyklos. Tuo metu pigūs „Celeron“ procesoriai su mažesnėmis talpyklomis buvo gaminami tuose pačiuose skaičiavimo branduoliuose. Celeron priklauso pirmos kartos gaminiams, turintiems vienodą technologinę bazę aukščiausios klasės ir pigių modelių modeliams, besiskiriančiais tik turimu talpyklos dydžiu ir FSB/core dažniais. Vėliau buvo pridėti funkcijų skirtumai, siekiant dar labiau atskirti rinkos segmentus.

    Išleidus 90 nm Prescott branduolį, L2 talpykla padidėjo iki 1 MB, o šis procesorius tapo pagrindiniu Intel stalinių kompiuterių procesorių linijos ramsčiu iki pat 2 MB 65 nm Cedar Mill pristatymo. „Intel“ netgi panaudojo du iš šių branduolių, kad sukurtų antrosios kartos „Pentium D 900“ procesorius. Tačiau greitesnis laikrodžio greitis ir didesnis talpyklos dydis dar nereiškė labai daug. Šiandien situacija pasikeitė: geresnį Core 2 Duo (Conroe, 65 nm) našumą ir mažesnes energijos sąnaudas daugiausia lemia talpyklos dydis.

    AMD buvo labai atsargus dėl talpyklos dydžio didinimo. Greičiausiai taip yra dėl lusto ploto (tranzistoriaus biudžeto), nes 65 nm procesorių skaičius negali patenkinti rinkos paklausos, o mažiau pelningiems 90 nm modeliams ši problema yra dar opesnė. Kita vertus, „Intel“ turi pranašumą, nes gamina visus pagrindinius procesorius naudodama 65 nm proceso technologiją, o L2 talpyklos talpa ir toliau augs. Pavyzdžiui, naujos kartos Core 2 45 nm Penryn branduolyje bus aprūpintas iki 6 MB L2 talpyklos. Ar tai gali būti vertinama kaip rinkodaros žingsnis, ar padidinus L2 pajėgumus iš tikrųjų padidės našumas? Pažiūrėkime.

    Didelė L2 talpykla: rinkodara ar produktyvumo augimas?

    Procesoriaus talpyklos atlieka labai specifinį vaidmenį: sumažina prieigų prie atminties skaičių, buferiuodami dažnai naudojamus duomenis. Šiandien RAM talpa svyruoja nuo 512 MB iki 4 GB, o talpyklos talpa – nuo ​​256 KB iki 8 MB, priklausomai nuo modelio. Tačiau net ir nedidelio 256 arba 512 KB talpyklos pakanka, kad būtų užtikrintas aukštas našumas, o tai šiandien yra savaime suprantama.

    Yra įvairių būdų, kaip organizuoti talpyklos hierarchiją. Dauguma šiuolaikinių kompiuterių turi procesorius su maža pirmojo lygio talpykla (L1, iki 128 KB), kuri dažniausiai skirstoma į duomenų talpyklą ir instrukcijų talpyklą. Didesnė L2 talpykla paprastai naudojama duomenims saugoti ir yra bendrinama tarp dviejų „Core 2 Duo“ procesoriaus branduolių, nors „Athlon 64 X2“ arba „Pentium D“ turi atskirą talpyklą kiekvienam branduoliui. L2 talpykla gali būti išskirtinė arba įtraukta, tai reiškia, kad ji gali saugoti L1 talpyklos turinio kopiją arba ne. AMD netrukus pristatys procesorius su trečiuoju talpyklos lygiu, kurį dalins keturi AMD Phenom procesorių branduoliai. To paties tikimasi ir „Nehalem“ architektūrai, kurią „Intel“ pristatys 2008 m., pakeisdama dabartinį „Core 2“.

    L1 talpykla visada buvo procesoriaus dalis, tačiau L2 talpykla iš pradžių buvo įdiegta pagrindinėse plokštėse, kaip ir daugelyje 486DX ir Pentium kompiuterių. Pirmojo lygio talpyklai buvo naudojami paprasti statinės atminties lustai (SRAM, Static RAM). Netrukus juos pakeitė „Pentium“ procesorių konvejerinė spartinančioji atmintis, kol tapo įmanoma įdiegti talpyklą mikroschemoje. „Pentium Pro“ 150–200 MHz dažniu tapo pirmuoju procesoriumi, kuriame yra 256 KB L2 talpyklos lustoje, sumušdamas didžiausio keramikos paketo dydžio staliniams kompiuteriams ir darbo stotims rekordą. Pentium III, skirtas Socket 370, veikiantis dažniais nuo 500 MHz iki 1,13 GHz, buvo pirmasis procesorius, turintis 256 KB lusto L2 talpyklos, kuri suteikė delsos pranašumą, nes talpykla veikė procesoriaus greičiu.

    Integruota L2 talpykla žymiai padidino našumą beveik bet kurioje programoje. Našumo padidėjimas pasirodė toks reikšmingas, kad integruotos L2 talpyklos atsiradimą galima vadinti svarbiausiu x86 procesorių našumo faktoriumi. Išjungus L2 talpyklą, našumas sumažės labiau nei išjungus antrąjį dviejų branduolių procesoriaus branduolį.

    Tačiau talpyklos atmintis turi įtakos ne tik našumui. Tai tapo galingu įrankiu, leidžiančiu kurti skirtingus procesorių modelius žemos klasės, pagrindiniams ir aukščiausios klasės segmentams, nes gamintojas gali lanksčiai pasirinkti procesorius pagal atmetimą ir taktinius dažnius. Jei kristale nėra defektų, galima įjungti visą L2 talpyklą, o dažniai bus aukšti. Jei nepavyksta pasiekti norimų laikrodžio dažnių, kristalas gali tapti pradinio lygio modeliu aukščiausios klasės linijoje, pavyzdžiui, Core 2 Duo 6000 su 4 MB talpykla ir žemais dažniais. Jei L2 talpykloje yra defektų, gamintojas turi galimybę išjungti dalį jos ir sukurti pradinio lygio modelį su mažesniu talpyklos dydžiu, pavyzdžiui, Core 2 Duo E4000 su 2 MB L2 talpyklos ar net Pentium Dual Core su tik 1 MB talpyklos. Visa tai tiesa, tačiau kyla klausimas: kiek talpyklos dydžio skirtumas turi įtakos našumui?

    Core 2 Duo variantai

    „Intel“ į rinką išleido platų stalinių kompiuterių procesorių asortimentą. Šiandien vis dar galite rasti „Pentium 4“ ir „Pentium D“, tačiau dauguma modelių yra sukurti remiantis „Core“ mikroarchitektūra. Nerekomenduojame „Pentium 4“ ar „Pentium D“ procesorių, nors jų taktinis dažnis iki 3,8 GHz gali atrodyti patraukliai. Tačiau bet kuris 2,2 GHz ar aukštesnio dažnio Core 2 procesorius gali nugalėti net greičiausius Pentium D modelius (iš tikrųjų, kaip Athlon 64 X2), nes Core 2 suteikia daug geresnis našumas vienam laikrodžiui .

    Dėl mažesnio laikrodžio dažnio Core 2 procesoriai taupo energiją. Jei geriausi Pentium D 800 modeliai „suvalgo“ iki 130 W, tai 100 W slenkstį įveikia tik keturių branduolių „Core 2 Extreme“. Visi dviejų branduolių procesoriai sunaudoja ne daugiau kaip 65 W. Be to, Core 2 Duo procesorių energijos suvartojimas tuščiąja eiga yra dar mažesnis, nes tuščiosios eigos dažnis yra mažesnis (maksimalus 1,2 GHz Core 2 Duo/Quad ir 2,8 GHz Pentium D/4). Energijos suvartojimo sumažėjimui įtakos turėjo patobulinta tranzistoriaus konstrukcija su mažesnėmis nuotėkio srovėmis.

    Šiandien yra E ir X modeliai. E modeliai skirti masinei rinkai, o X modeliai yra Extreme Edition. Q reiškia keturis branduolius, kuriuos „Intel“ sukuria įdėdamas du dviejų branduolių antgalius į vieną fizinį paketą. E6000 procesoriuose yra 4 MB L2 talpyklos, jei jų modelio numeris yra didesnis nei E6400 arba baigiasi 20 (pavyzdžiui, E6320). Modeliai, kurie baigiasi 00 (pvz., E6600), veikia FSB 266 MHz dažniu (FSB1066), o modeliai, kurie baigiasi 50 (E6750), veikia FSB 333 MHz dažniu (FSB1333). Pastarasis reikalauja P35 arba X38 mikroschemų rinkinio ir užtikrina šiek tiek didesnį našumą. E4000 veikia su 200 MHz FSB (FSB800) ir turi tik 2 MB L2 talpyklos. Versijos su 1 MB talpykla parduodamos kaip Pentium Dual Core E2140, E2160 ir E2180, kurių dažniai yra nuo 1,6 iki 2,0 GHz. Neskaitant pavadinimo ir kai kurių funkcijų, kurias „Intel“ išjungia pigiuose procesoriuose, minėti „Pentium Dual Cores“ yra identiški „Core 2 Duo“.

    Core 2 Duo procesorių charakteristikos
    65nm procesoriaus numeris Talpykla Laikrodžio dažnis FSB Virtualizacijos technologija Patikima vykdymo technologija
    E6850 4 MB L2 3 GHz 333 MHz X X
    E6750 4 MB L2 2,66 GHz 333 MHz X X
    E6700 4 MB L2 2,66 GHz 266 MHz X
    E6600 4 MB L2 2,40 GHz 266 MHz X
    E6550 4 MB L2 2,33 GHz 333 MHz X X
    E6540 4 MB L2 2,33 GHz 333 MHz X
    E6420 4 MB L2 2,13 GHz 266 MHz X
    E6400 2 MB L2 2,13 GHz 266 MHz X
    E6320 4 MB L2 1,86 GHz 266 MHz X
    E6300 2 MB L2 1,86 GHz 266 MHz X
    E4600 2 MB L2 2,40 GHz 200 MHz
    E4500 2 MB L2 2,20 GHz 200 MHz
    E4400 2 MB L2 2 GHz 200 MHz
    E4300 2 MB L2 1,80 GHz 200 MHz


    Platforma
    CPU I „Intel Pentium Dual Core E2160“ (65 nm; 1800 MHz, 1 MB L2 talpykla) 2,4 GHz (266 MHz x 9)
    CPU II Intel Core 2 Duo E4400 (65 nm; 2000 MHz, 2 MB L2 talpykla) 2,4 GHz (266 MHz x 9)
    CPU III „Intel Core 2 Duo X6800“ (65 nm; 3000 MHz, 4 MB L2 talpykla) 2,4 GHz (266 MHz x 9)
    Pagrindinė plokštė ASUS Blitz Formula, Rev: 1.0
    Lustų rinkinys: Intel P35, BIOS 1101
    Atmintis Corsair CM2X1024-888C4D, 2x 1024 MB DDR2-800 (CL 4-4-4-12 2T)
    HDD Western Digital Raptor WD1500ADFD, 150 GB, 10 000 aps./min, 16 MB talpykla, SATA/150
    DVD-ROM Samsung SH-S183
    Vaizdo plokštė Zotac GeForce 8800 GTS, GPU: GeForce 8800 GTS (500 MHz), atmintis: 320 MB GDDR3 (1 600 MHz)
    Garso plokštė Įmontuotas
    energijos vienetas „Enermax EG565P-VE“, ATX 2.01, 510 W
    Sistemos programinė įranga ir tvarkyklės
    OS Windows XP Professional 5.10.2600, 2 pakeitimų paketas
    DirectX versija 9.0c (4.09.0000.0904)
    Intel platformos tvarkyklės 8.3.1013 versija
    nvidia grafikos tvarkyklė Forceware 162.18

    Testai ir nustatymai

    3D žaidimai
    Call of Duty 2 Versija: 1.3 Mažmeninė prekyba
    Vaizdo įrašo režimas: 1280x960
    Anti slapyvardis: išjungtas
    Vaizdo plokštė: vidutinė
    Timedemo demo2
    Grobis Versija: 1.3
    Vaizdo įrašo režimas: 1280x1024
    Vaizdo įrašo kokybė: žaidimo numatytasis nustatymas
    Vsync=off
    Etalonas: THG-Demo
    4 drebėjimas Versija: 1.2 (dviejų branduolių pataisa)
    Vaizdo įrašo režimas: 1280x1024
    Vaizdo įrašo kokybė: aukšta
    THG Timedemo atliekų.žemėlapis
    timedemo demo8.demo 1 (1 = įkelti tekstūras)
    Garsas
    Šlykštus MP3 3.98 Beta 5 versija
    Audio CD „Terminatorius II SE“, 53 min
    bangą į mp3
    160 kbps
    Vaizdo įrašas
    TMPEG 3.0 Express Versija: 3.0.4.24 (be garso)
    kumštis 5 minutės DVD Terminator 2 SE (704x576) 16:9
    Kelių gijų sukūrimas atvaizduojant
    DivX 6.7 Versija: 6.6 (4 loginiai procesoriai)
    Profilis: didelės raiškos profilis
    1 praėjimas, 3000 kbit/s
    Kodavimo režimas: beprotiška kokybė
    Patobulintas daugiasriegis siūlas
    nėra garso
    XviD 1.1.3 Versija: 1.1.3
    Tikslinis kvantatorius: 1,00
    Mainconcept H.264 v2 2.1 versija
    260 MB MPEG-2 šaltinis (1920 x 1080) 16:9
    Kodekas: H.264
    Režimas: NTSC
    Garsas: AAC
    Profilis: Aukštas
    Srautas: programa
    Programos
    WinRAR 3.70 versija
    (303 MB, 47 failai, 2 aplankai)
    Suspaudimas = geriausias
    Žodynas = 4096 kB
    Autodesk 3D Studio Max Versija: 8.0
    Veikėjai „Dragon_Charater_rig“
    atvaizduojamas HTDV 1920x1080
    Cinebench Versija: R10
    1 CPU, x CPU paleidimas
    PCMark05 Pro Versija: 1.2.0
    CPU ir atminties testai
    Windows Media Player 10.00.00.3646
    Windows Media Encoder 9.00.00.2980




    Išvada

    Nors talpyklos dydis turi ribotą poveikį sintetiniams testams, tokiems kaip PCMark05, daugumos realaus pasaulio programų našumo skirtumas buvo gana didelis. Iš pradžių tai atrodo stebina, nes patirtis rodo, kad būtent sintetiniai testai suteikia labiausiai pastebimą našumo skirtumą, o tai mažai veikia realias programas.

    Atsakymas paprastas: spartinančiosios atminties dydis yra labai svarbus šiuolaikiniams procesoriams su Core 2 Duo mikroarchitektūra. Naudojome 4 MB Core 2 Extreme X6800, 2 MB Core 2 Duo E4400 ir Pentium Dual Core E2160, kuris yra Core 2 Duo procesorius su tik 1 MB L2 talpykla. Visi procesoriai veikė ta pačia 266 MHz sistemos magistrale ir su 9x daugikliu, kad būtų pasiektas 2400 MHz dažnis. Vienintelis skirtumas yra talpyklos dydis, nes visi šiuolaikiniai dviejų branduolių procesoriai, išskyrus senąjį Pentium D, yra pagaminti iš tų pačių lustų. Koks bus branduolys – „Core 2 Extreme Edition“ ar „Pentium Dual Core“, lemia tinkamų kristalų išeiga (defektai) arba rinkos paklausa.

    Jei palyginsite 3D šaudyklių „Prey“ ir „Quake 4“, kurios yra tipiškos žaidimų programos, rezultatus, 1–4 MB našumo skirtumas yra maždaug vienas dažnio žingsnis. Tas pats pasakytina apie vaizdo kodavimo testus, skirtus DivX 6.6 ir XviD 1.1.2 kodekams, taip pat WinRAR 3.7 archyvatoriui. Tačiau daug procesoriaus reikalaujančios programos, pvz., 3DStudio Max 8, Lame MP3 Encoder arba MainConcept H.264 Encoder V2, neturi daug naudos iš didesnio talpyklos dydžio.

    Tačiau Intel požiūris, būtent, naudojant visą turimą tranzistorių biudžetą, kuris padidėjo pereinant nuo 65 nm proceso technologijos prie 45 nm, turi tam tikrą reikšmę Core 2 Duo mikroarchitektūrai. Šių procesorių L2 talpykla veikia labai efektyviai, ypač turint omenyje, kad ją dalijasi du branduoliai. Todėl talpykla neutralizuoja skirtingų atminties dažnių įtaką ir užkerta kelią „butelio kakleliui“ FSB pavidalu. Ir tai daro nepaprastai gerai, nes testai aiškiai rodo, kad procesoriaus, turinčio vieną megabaitą talpyklos atmintį, našumas yra mažas.

    Šiuo požiūriu prasminga padidinti L2 talpyklos dydį nuo 4 MB iki daugiausiai 6 MB būsimiems 45 nm dviejų branduolių Penryn procesoriams (Core 2 Duo E8000 linija). Gamybos proceso sumažinimas nuo 65 iki 45 nm leidžia „Intel“ padidinti tranzistoriaus biudžetą, o dėl talpyklos dydžio padidėjimo vėl pamatysime našumo padidėjimą. Tačiau „Intel“ turės naudos iš skirtingų procesoriaus parinkčių su 6, 4, 2 ar net 1 MB L2 talpyklos. Naudodama kelias parinktis, „Intel“ gali naudoti daugiau štampų vienai plokštelei, nepaisant retkarčiais pasitaikančių defektų, kurie kitu atveju atsidurtų šiukšliadėžėje. Didelis talpyklos dydis, kaip matome, svarbus ne tik našumui, bet ir Intel pelnui.

    Visi vartotojai puikiai žino tokius kompiuterio elementus kaip procesorius, atsakingas už duomenų apdorojimą, taip pat laisvosios kreipties atmintis (RAM arba RAM), kuri yra atsakinga už jų saugojimą. Tačiau tikriausiai ne visi žino, kad yra ir procesoriaus talpyklos atmintis (Cache CPU), tai yra paties procesoriaus RAM (vadinamoji ultra-RAM).

    Kokia priežastis paskatino kompiuterių dizainerius naudoti specialią procesoriaus atmintį? Ar neužtenka kompiuterio RAM talpos?

    Iš tiesų, ilgą laiką asmeniniai kompiuteriai veikė be talpyklos atminties. Tačiau, kaip žinote, procesorius yra greičiausias įrenginys asmeniniame kompiuteryje ir jo greitis didėja su kiekviena naujos kartos procesoriu. Šiuo metu jo greitis matuojamas milijardais operacijų per sekundę. Tuo pačiu metu standartinė RAM žymiai nepadidino savo našumo per savo evoliuciją.

    Paprastai kalbant, yra dvi pagrindinės atminties lustų technologijos – statinė atmintis ir dinaminė atmintis. Nesigilindami į jų dizaino detales, pasakysime tik tiek, kad statinė atmintis, skirtingai nei dinaminė, nereikalauja regeneracijos; Be to, statinė atmintis naudoja 4-8 tranzistorius vienam informacijos bitui, o dinaminėje atmintyje – 1-2 tranzistorius. Atitinkamai, dinaminė atmintis yra daug pigesnė nei statinė, bet tuo pačiu ir daug lėtesnė. Šiuo metu RAM lustai gaminami dinaminės atminties pagrindu.

    Apytikslė procesorių ir RAM greičio santykio raida:

    Taigi, jei procesorius visą laiką imtų informaciją iš RAM, jam tektų laukti lėtos dinaminės atminties ir ji visą laiką neveiktų. Tuo pačiu atveju, jei statinė atmintis būtų naudojama kaip RAM, kompiuterio kaina padidėtų kelis kartus.

    Štai kodėl buvo sukurtas pagrįstas kompromisas. Didžioji RAM dalis išliko dinamiška, o procesorius gavo savo sparčiąją talpyklą, pagrįstą statinėmis atminties lustais. Jo tūris palyginti nedidelis – pavyzdžiui, antrojo lygio talpyklos dydis siekia vos kelis megabaitus. Tačiau verta prisiminti, kad visa pirmųjų IBM PC kompiuterių RAM buvo mažesnė nei 1 MB.

    Be to, talpyklos technologijos diegimo tikslingumui įtakos turi ir tai, kad skirtingos operatyviojoje atmintyje esančios programos skirtingai apkrauna procesorių ir dėl to yra daug duomenų, kuriems, lyginant su kitomis, reikia apdoroti pirmenybę.

    Talpyklos istorija

    Griežtai kalbant, prieš perkeliant talpyklą į asmeninius kompiuterius, ji jau keletą dešimtmečių buvo sėkmingai naudojama superkompiuteriuose.

    Pirmą kartą tik 16 KB talpyklos atmintis pasirodė kompiuteryje, kurio pagrindas yra i80386 procesorius. Šiandien šiuolaikiniai procesoriai naudoja įvairaus lygio talpyklą – nuo ​​pirmojo (greičiausia mažiausio dydžio talpykla – dažniausiai 128 KB) iki trečiojo (lėčiausia didžiausio dydžio talpykla – iki dešimčių MB).

    Iš pradžių išorinė procesoriaus talpykla buvo atskiroje mikroschemoje. Tačiau laikui bėgant magistralė, esanti tarp talpyklos ir procesoriaus, tapo kliūtimi, sulėtinančia duomenų mainus. Šiuolaikiniuose mikroprocesoriuose tiek pirmasis, tiek antrasis talpyklos atminties lygiai yra pačiame procesoriaus šerdyje.

    Ilgą laiką procesoriai turėjo tik du talpyklos lygius, tačiau Intel Itanium CPU pirmasis turėjo trečiojo lygio talpyklą, bendrą visiems procesoriaus branduoliams. Taip pat yra procesorių su keturių lygių talpykla.

    Talpyklos architektūra ir principai

    Šiandien žinomi du pagrindiniai talpyklos atminties organizavimo tipai, kilę iš pirmųjų teorinių raidų kibernetikos srityje – Prinstono ir Harvardo architektūrose. Prinstono architektūra reiškia vieną atminties erdvę duomenims ir komandoms saugoti, o Harvardo architektūra – atskiras. Dauguma x86 asmeninių kompiuterių procesorių naudoja atskirą talpyklos atmintį. Be to, šiuolaikiniuose procesoriuose atsirado ir trečiojo tipo talpyklos atmintis – vadinamasis asociatyvinis vertimo buferis, skirtas operacinės sistemos virtualios atminties adresų konvertavimui į fizinės atminties adresus pagreitinti.

    Supaprastinta laikinosios atminties ir procesoriaus sąveikos diagrama gali būti aprašyta taip. Pirmiausia procesorius patikrina, ar procesoriui reikalinga informacija yra greičiausioje pirmojo lygio talpykloje, tada antrojo lygio talpykloje ir kt. Jei reikiamos informacijos nerandama jokiame talpyklos lygyje, jie tai vadina klaida arba talpyklos praleidimu. Jei talpykloje informacijos visai nėra, tai procesorius turi ją paimti iš RAM ar net iš išorinės atminties (iš standžiojo disko).

    Tvarka, kuria procesorius ieško informacijos atmintyje:

    Taip procesorius ieško informacijos

    Laikinosios atminties veikimui ir jos sąveikai su procesoriaus skaičiavimo blokais, taip pat RAM valdyti, yra specialus valdiklis.

    Procesoriaus branduolio, talpyklos ir RAM sąveikos organizavimo schema:

    Talpyklos valdiklis yra pagrindinis ryšys tarp procesoriaus, RAM ir talpyklos atminties

    Reikėtų pažymėti, kad duomenų kaupimas talpykloje yra sudėtingas procesas, kuriame naudojama daug technologijų ir matematinių algoritmų. Tarp pagrindinių sąvokų, naudojamų talpykloje, yra talpyklos rašymo metodai ir talpyklos asociatyvumo architektūra.

    Talpyklos rašymo metodai

    Yra du pagrindiniai informacijos įrašymo į talpyklos atmintį būdai:

    1. Atrašymo metodas – duomenys pirmiausia įrašomi į talpyklą, o tada, susidarius tam tikroms sąlygoms, į RAM.
    2. Perrašymo metodas – duomenys vienu metu įrašomi į RAM ir talpyklą.

    Talpyklos asociatyvumo architektūra

    Talpyklos asociatyvumo architektūra apibrėžia būdą, kuriuo duomenys iš RAM susiejami su talpykla. Pagrindinės talpyklos asociatyvumo architektūros parinktys yra šios:

    1. Tiesioginio susiejimo talpykla – tam tikra talpyklos dalis yra atsakinga už tam tikrą RAM skyrių
    2. Visiškai asociatyvi talpykla – bet kuri talpyklos dalis gali būti susieta su bet kuria RAM dalimi
    3. Mišri talpykla (asociatyvus rinkinys)

    Skirtinguose talpyklos lygiuose paprastai gali būti naudojamos skirtingos talpyklos asociatyvumo architektūros. Tiesioginis susietas RAM talpyklos kaupimas yra greičiausia talpyklos parinktis, todėl ši architektūra paprastai naudojama didelėms talpykloms. Savo ruožtu visiškai asociatyvi talpykla turi mažiau talpyklos klaidų (praleidžiamų).

    Išvada

    Šiame straipsnyje susipažinote su talpyklos sąvoka, talpyklos architektūra ir talpyklos kaupimo metodais bei sužinojote, kaip tai veikia šiuolaikinio kompiuterio našumą. Laikinosios atminties buvimas gali žymiai optimizuoti procesoriaus darbą, sutrumpinti jo tuščiosios eigos laiką ir atitinkamai padidinti visos sistemos našumą.

    Visi procesoriai nuo 90-ųjų pabaigos turi vidinę talpyklą (arba tiesiog talpyklą). Talpykla yra didelės spartos atmintis, į kurią perduodamos instrukcijos ir duomenys, kuriuos tiesiogiai apdoroja procesorius.

    Šiuolaikiniai procesoriai turi įmontuotą dviejų lygių talpyklą – pirmojo (L1) ir antrojo (L2). Procesorius yra šiek tiek greitesnis su L1 talpyklos turiniu, o L2 talpykla paprastai yra šiek tiek didesnė. Laikinoji atmintis pasiekiama be laukimo būsenos, t.y. 1 lygio talpykla (lusto talpykla) veikia procesoriaus greičiu.

    Tai reiškia, kad jei procesoriui reikalingi duomenys yra talpykloje, apdorojimo vėlavimų nėra. Priešingu atveju procesorius turi gauti duomenis iš pagrindinės atminties, o tai žymiai sumažina sistemos našumą.

    Norėdami kokybiškai suprasti abiejų lygių talpyklos veikimo principą, panagrinėkime kasdienę situaciją kaip pavyzdį.

    Ateini į kavinę papietauti kiekvieną dieną, tuo pačiu metu ir visada sėdi prie to paties stalo. Visada užsisakykite standartinį trijų patiekalų rinkinį.

    Padavėjas nubėga į virtuvę, virėjas padeda juos ant padėklo ir atneša jūsų užsakymą. Ir taip, tarkime, trečią dieną padavėjas, kad nereikėtų eilinį kartą bėgti į virtuvę, nustatytu laiku pasitinka su jau paruoštais karštais pietumis ant padėklo.

    Jums nereikės laukti užsakymo ir sutaupysite daug laiko. Padėklas su indais yra pirmojo lygio talpykla. Tačiau ketvirtą dieną staiga norisi įdėti dar vieną patiekalą, tarkime, desertą.

    Nors paskirtu laiku jūsų jau laukė padėklas su užsakymu, padavėjui vis tiek teko bėgti į virtuvę deserto.

    O penktoje – vėl trijų punktų meniu. Šeštą – vėl desertas, bet kitoks nei ankstesnis. O padavėjas, nežinodamas, kokį desertą norite užsisakyti (ir net nežinodamas, ar ką nors užsisakysite), nusprendžia žengti kitą žingsnį: šalia jūsų stalo pasistato spintelę su kelių rūšių desertu.

    O jei pareiški norą, viskas po ranka, nereikia bėgti į virtuvę. Desertų spintelė yra antrojo lygio talpykla.

    Procesoriaus našumas labai priklauso nuo L1 talpyklos dydžio (nuo 16 iki 128 KB) ir L2 (nuo 64 KB iki 512 KB, Pentium III Heop ir AMD Opteron – iki 4 MB).

    „Intel Pentium III“ procesoriai ir jo pagrindu sukurti „Celeron“ procesoriai turi 32 KB L1 talpyklos dydį. „Intel Pentium 4“, kaip ir jo pagrindu sukurtos „Celeron“ ir „Cheop“ versijos, turi tik 20 KB. AMD Duron, Athlon (įskaitant XP/MP) ir Opteron procesorius, taip pat VIA SZ turi 128 KB L1 talpyklos.

    Šiuolaikiniai dviejų branduolių procesoriai turi pirmojo lygio talpyklą kiekvienam branduoliui atskirai, todėl kartais talpyklos aprašyme galime pamatyti skaičių 128x2. Tai reiškia, kad kiekvienas procesoriaus branduolys turi 128 KB L1 talpyklos.

    L1 talpyklos dydis yra svarbus norint pasiekti aukštą našumą atliekant įprastas užduotis (biuro programos, žaidimai, dauguma serverio programų ir kt.). Jo efektyvumas ypač didelis srieginiams skaičiavimams (pavyzdžiui, vaizdo apdorojimui).

    Tai yra viena iš priežasčių, kodėl „Pentium 4“ yra gana neveiksmingas daugeliui įprastų programų (nors tai kompensuoja didelis jo laikrodžio greitis). L1 talpykla visada veikia (keičiasi informacija su procesoriaus šerdimi) vidiniu procesoriaus dažniu.

    Priešingai, L2 talpykla skirtinguose procesorių modeliuose veikia skirtingais dažniais (ir atitinkamai našumu). Pradedant nuo Intel Pentium II, daugelis procesorių naudojo L2 talpyklą, veikiančią puse procesoriaus vidinio dažnio.

    Šis sprendimas buvo naudojamas pasenusiuose Intel Pentium III procesoriuose (iki 550 MHz) ir pasenusiuose AMD Athlon (kai kuriuose iš jų vidinė L2 talpykla veikė trečdaliu procesoriaus branduolio dažnio). L2 talpyklos dydis taip pat skiriasi tarp procesorių.

    Senesniuose ir kai kuriuose naujesniuose Intel Pentium III procesoriuose L2 talpyklos dydis yra 512 KB, kituose Pentium III procesoriuose – 256 KB. „Pentium III“ pagrindu veikiantis „Intel Celeron“ procesorius buvo galimas su 128 ir 256 KB L2 talpykla, o „Pentium 4“ pagrindu pagamintas procesorius buvo galimas tik su 128 KB. Įvairios „Intel Pentium 4“ Xeon versijos versijos turi iki 4 MB L2 talpyklos.

    Naujieji Pentium 4 procesoriai (kai kurios serijos 2000 MHz dažniu ir visos skirtos aukštesniems dažniams) turi 512 KB L2 talpyklos, likusioje Pentium 4 dalyje – 256 KB. Xeop procesoriai (pagrįsti Pentium 4) turi 256 arba 512 KB L2 talpyklą.

    Be to, jie taip pat turi trečiojo lygio L3 talpyklą. Integruota L3 talpykla, kartu su greita sistemos magistrale, sudaro didelės spartos duomenų mainų kanalą su sistemos atmintimi.

    Paprastai tik serverių sprendimų procesoriai arba specialūs „stalinių“ procesorių modeliai turi L3 talpyklos atmintį. Pavyzdžiui, procesorių linijos, tokios kaip Xeon DP, Itanium 2 ir Xeon MP, turi L3 talpyklos atmintį.

    AMD Duron procesorius turi 128 KB L1 talpyklą ir 64 KB L2 talpyklą. „Athlon“ procesoriai (išskyrus seniausius), „Athlon MP“ ir dauguma „Athlon XP“ variantų turi 128 KB L1 talpyklos ir 256 KB L2 talpyklos, o naujausiuose „Athlon XP“ (2500+, 2800+, 3000+ ir naujesnėse) – 512 KB L2 talpykla. AMD Opteron turi 1 MB L2 talpyklos.

    Naujausi Intel Pentium D, Intel Pentium M, Intel Core 2 Duo procesorių modeliai yra su 6 MB L2 talpyklos ir Core 2 Quad – 12 MB L2 talpyklos.

    Naujausias Intel Core i7 procesorius šios knygos rašymo metu turi 64 KB L1 talpyklos atminties kiekvienam iš 4 branduolių, taip pat 256 KB L2 atminties kiekvienam branduoliui. Be pirmojo ir antrojo lygio talpyklos, procesorius taip pat turi trečiojo lygio talpyklą, bendrą visiems branduoliams, lygią 8 MB.

    Procesorių, kurie gali turėti skirtingus L2 talpyklos dydžius (arba Intel Xeon MP atveju - L3) tam pačiam modeliui, šis dydis turi būti nurodytas pardavimo metu (žinoma, nuo to priklauso procesoriaus kaina). Jei procesorius parduodamas „dėžutėje“ („In-Box“ pristatymas), dažniausiai ant jo nurodomas talpyklos atminties dydis.

    Įprastoms vartotojo užduotims (įskaitant žaidimus) L2 talpyklos greitis yra svarbesnis už jos dydį; serverio užduotims, atvirkščiai, garsumas yra svarbesnis. Labiausiai produktyviems serveriams, ypač turintiems daug RAM (keli gigabaitai), reikalingas maksimalus L2 talpyklos dydis ir didžiausias greitis.

    „Pentium III“ procesorių „Cheop“ versijos šiais parametrais išlieka nepralenkiamos. (Dėl didesnio paties procesoriaus ir atminties magistralės laikrodžio dažnio Xeon MP procesorius vis dar yra produktyvesnis serverio užduotims nei Pentium III Xeon.) Iš to, kas išdėstyta pirmiau, darome išvadą: talpyklos atmintis pagerina sąveiką tarp greitas procesorius ir lėtesnė operatyvioji atmintis, o taip pat leidžia sumažinti laukimo periodus, atsirandančius apdorojant duomenis. L2 talpykla, esanti procesoriaus mikroschemoje, vaidina lemiamą vaidmenį.

    Beveik visi kūrėjai žino, kad procesoriaus talpykla yra maža, 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 antras 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.

    To priežastis yra ta, 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 toks:

    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 kilpų viduje, turi skirtingas duomenų priklausomybes. Pirmosios komandos turi tokią priklausomybių grandinę:

    Antrame 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 lygiais 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 yra padalinta į eilučių rinkinius pagal mažiausiai reikšmingus jų indeksų bitus, eilutės iš kiekvieno rinkinio konkuruoja dėl vienos 16 L2 talpyklos ląstelių 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, 12 apatinių 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 blogo žingsnio 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 kiekvienos grupės talpykloje 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 prie tų pačių talpyklų grupių prisijungiama daug, 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 gali tilpti visi masyvo duomenys be konfliktų. 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 turiu 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 tai neįmanoma 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 Keistumai()
    {
    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 talpyklų struktūrą. Dabar galite pritaikyti šias žinias praktikoje, kad optimizuotumėte savo kodą.