aloitetaan tästä:
mielestäni uusimmat SMP-prosessorit käyttävät 3-tason välimuisteja, joten haluan ymmärtää Välimuistitason hierarkiaa ja niiden arkkitehtuuria .
kätköjen ymmärtämiseksi täytyy tietää muutama asia:
suorittimessa on rekisterit. Arvoja, jotka voidaan suoraan käyttää. Mikään ei ole nopeampaa.
emme kuitenkaan voi lisätä äärettömiä rekistereitä siruun. Nämä vievät tilaa. Jos teemme sirusta isomman, se tulee kalliimmaksi. Osittain se johtuu siitä, että tarvitsemme suuremman sirun (enemmän piitä), mutta myös siitä, että ongelmallisten sirujen määrä kasvaa.
(Kuva kuvitteellinen kiekko, jonka koko on 500 cm2. Leikkasin siitä 10 pelimerkkiä, jokainen siru 50cm2 kooltaan. Yksi on rikki. Hylkään sen ja olen jättänyt sen 9 working pelimerkkejä. Ota nyt sama kiekko ja leikkaan siitä 100 pelimerkkiä, jokainen kymmenen kertaa niin pieni. Yksi niistä, jos se on rikki. Heitän rikkinäisen sirun pois ja jäljelle jää 99 toimivaa sirua. Se on murto-osa siitä menetyksestä, jonka olisin muuten saanut. Kompensoidakseni isompia pelimerkkejä minun pitäisi pyytää korkeampia hintoja. Enemmän kuin vain hinta ylimääräiselle Piille)
tämä on yksi syy, miksi haluamme pieniä, edullisia siruja.
kuitenkin mitä lähempänä välimuistia suoritin on, sitä nopeammin sitä pääsee käsiksi.
tämäkin on helppo selittää; sähköiset signaalit kulkevat lähellä valonnopeutta. Se on nopea, mutta silti rajallinen nopeus. Moderni suoritin toimii GHz kelloilla. Sekin on nopeaa. Jos otan 4 GHz CPU sitten sähköinen signaali voi matkustaa noin 7,5 cm per kello rasti. Se on 7,5 cm suorassa linjassa. (Sirut ovat kaikkea muuta kuin suoria yhteyksiä). Käytännössä tarvitset huomattavasti vähemmän kuin 7,5 cm, koska se ei salli mitään aikaa sirut esittää pyydetyt tiedot ja signaalin matkustaa takaisin.
pohjimmiltaan haluamme kätkön fyysisesti mahdollisimman lähelle. Eli isoja pelimerkkejä.
näiden kahden on oltava tasapainossa (suorituskyky vs. kustannukset).
missä L1 -, L2-ja L3-välimuistit tarkalleen sijaitsevat tietokoneessa?
olettaen, että PC-tyylinen vain laitteisto (pääkehykset ovat aivan erilaisia, myös suorituskyvyssä vs. cost balance);
IBM XT
the original 4.77 Mhz one: No cache. Suoritin käyttää muistia suoraan. Ulkomuistista lukeminen noudattaisi tätä kaavaa:
- suoritin laittaa haluamansa osoitteen muistiväylälle ja puolustaa lukulippua
- muisti laittaa tiedot dataväylälle.
- suoritin kopioi tiedot dataväylältä sisäisiin rekistereihinsä.
80286 (1982)
ei vieläkään kätköä. Muistin käyttö ei ollut suuri ongelma pienempinopeuksisille versioille (6Mhz), mutta nopeampi malli kesti jopa 20Mhz: iin asti ja sitä jouduttiin usein viivyttämään muistia käytettäessä.
saat sitten tällaisen skenaarion:
- suoritin laittaa haluamansa osoitteen muistiväylälle ja puolustaa lukulippua
- muisti alkaa laittaa dataa dataväylälle. Keskusyksikkö odottaa.
- muisti sai datan valmiiksi ja se on nyt vakaa dataväylällä.
- suoritin kopioi tiedot dataväylältä sisäisiin rekistereihinsä.
se on ylimääräinen muistoa odotellessa kulunut askel. Nykyaikaisessa järjestelmässä, joka voi helposti olla 12 vaihetta, minkä vuoksi meillä on välimuisti.
80386: (1985)
suorittimet nopeutuvat. Sekä kelloa kohti että kulkemalla suuremmilla kellotaajuuksilla.
RAM nopeutuu, mutta ei yhtä paljon kuin suorittimet.
tämän vuoksi tarvitaan lisää odotustiloja.Jotkut emolevyt toimivat tämän ympärillä lisäämällä välimuistin (joka olisi 1.tason välimuisti) emolevylle.
lukeminen muistista alkaa nyt tarkistuksella, onko tieto jo välimuistissa. Jos se on se luetaan paljon nopeampi välimuisti. Jos ei ole sama menettely kuin kuvattu kanssa 80286
80486: (1989)
tämä on tämän sukupolven ensimmäinen suoritin, jossa on jonkin verran välimuistia suorittimessa.
se on 8KB yhtenäinen välimuisti eli sitä käytetään dataan ja ohjeisiin.
näihin aikoihin yleistyy, että emolevylle laitetaan 256KB nopeaa staattista muistia 2. tason välimuistiksi. Siten 1. tason välimuisti suorittimelle, 2. tason välimuisti emolevylle.
80586 (1993)
586 tai Pentium-1 käyttää jaetun tason 1 välimuistia. 8 KB tietoja ja ohjeita varten. Välimuisti halkaistiin niin, että tieto-ja ohjekätköt voitiin virittää yksilöllisesti niiden tiettyyn käyttötarkoitukseen. Sinulla on vielä pieni mutta erittäin nopea 1.välimuisti lähellä suoritinta, ja suurempi mutta hitaampi 2. välimuisti emolevyllä. (Suuremmalla fyysisellä etäisyydellä).
samalla pentium 1-alueella Intel valmisti Pentium Pro: n (”80686”). Mallista riippuen tämä siru oli 256KB, 512Kb tai 1MB aluksella välimuisti. Se oli myös paljon kalliimpi, mikä on helppo selittää seuraavalla kuvalla.
huomaa, että välimuisti käyttää puolet piirissä olevasta tilasta. Ja tämä on 256KB malliin. Enemmän välimuistia oli teknisesti mahdollista ja joitakin malleja, joissa tuotettiin 512KB ja 1MB välimuistit. Niiden markkinahinta oli korkea.
huomaa myös, että tämä siru sisältää kaksi stanssia. Yksi todellinen CPU ja 1. välimuisti, ja toinen kuolee 256KB 2. välimuisti.
Pentium-2
Pentium 2 on Pentium pro-ydin. Taloudellisuussyistä suorittimessa ei ole 2.välimuistia. Sen sijaan mitä myydään a CPU meille PCB erilliset sirut CPU (ja 1.välimuisti) ja 2. välimuisti.
tekniikan edetessä ja alamme laittaa pienempien komponenttien luomia siruja, on taloudellisesti mahdollista laittaa 2. välimuisti takaisin varsinaiseen suorittimeen. Ero on kuitenkin edelleen olemassa. Erittäin nopea 1st cache snuggled jopa CPU. Yksi 1. välimuisti suoritinydintä kohti ja suurempi, mutta vähemmän nopea 2.välimuisti ytimen vieressä.
Pentium-3
Pentium-4
tämä ei muutu Pentium-3: lla eikä Pentium-4: llä.
näihin aikoihin olemme saavuttaneet käytännön rajan sille, kuinka nopeasti voimme kellottaa suorittimia. 8086 tai 80286 ei tarvinnut jäähdytystä. 3,0 GHz: n taajuudella toimiva pentium-4 tuottaa niin paljon lämpöä ja käyttää niin paljon tehoa, että on käytännöllisempää laittaa emolevylle kaksi erillistä suoritinta yhden nopean sijaan.
(kaksi 2,0 GHz: n suoritinta käyttäisi vähemmän tehoa kuin yksi identtinen 3,0 GHz: n suoritin, mutta voisi silti tehdä enemmän työtä).
tämä voitiin ratkaista kolmella tavalla:
- tehosta suorittimia, niin ne tekevät enemmän työtä samalla nopeudella.
- Käytä useita suorittimia
- Käytä useita suorittimia samalla ”sirulla”.
1) on jatkuva prosessi. Se ei ole uutta eikä se lopu.
2) tehtiin jo varhain (mm.dual Pentium-1-emolevyillä ja NX-piirisarjalla). Tähän asti se oli ainoa vaihtoehto rakentaa nopeampi PC.
3) vaatii suorittimia, joissa useita ”suorittimen ytimiä” rakennetaan yhdeksi siruksi. (Me sitten kutsutaan, että CPU dual core CPU lisätä sekaannusta. Thank you marketing:))
näinä päivinä kutsumme suoritinta vain ”ytimeksi” sekaannusten välttämiseksi.
saat nyt pelimerkkejä kuten Pentium-D: n (duo), joka on käytännössä kaksi Pentium-4-ydintä samalla sirulla.
Muistatko kuvan vanhasta pentium-Prosta? Valtava välimuisti?
Näetkö kuvassa kaksi suurta aluetta?
kävi ilmi, että voimme jakaa tuon toisen välimuistin molempien suoritinytimien kesken. Nopeus laskisi hieman, mutta 512kib jaettu 2.välimuisti on usein nopeampi kuin lisäämällä kaksi itsenäistä 2. tason välimuistia puolet koosta.
tämä on tärkeää kysymyksesi kannalta.
se tarkoittaa, että jos luet jotain yhdeltä suorittimen ytimeltä ja yrität myöhemmin lukea sen toiselta ytimeltä, joka jakaa saman välimuistin, saat välimuistin osuman. Muistia ei tarvitse käyttää.
koska ohjelmat siirtyvät suorittimen välillä, riippuen kuormituksesta, ytimen määrästä ja ajastimesta, voit saada lisätehoa kiinnittämällä ohjelmat, jotka käyttävät samaa dataa samaan suorittimeen (välimuistin osumat L1: ssä ja sitä alemmissa) tai samoille suorittimille, jotka jakavat L2-välimuistin (ja siten saada huteja L1: ssä, mutta osumia L2-välimuistissa lukee).
näin myöhemmissä malleissa nähdään jaettuja tason 2 kätköjä.
jos ohjelmoit nykyaikaisia suorittimia, sinulla on kaksi vaihtoehtoa:
- älä vaivaudu. Käyttöjärjestelmän pitäisi osata ajoittaa asioita. Ajastimella on suuri vaikutus tietokoneen suorituskykyyn ja ihmiset ovat käyttäneet paljon vaivaa tämän optimoimiseksi. Ellet tee jotain outoa tai optimoit tietyn mallin PC olet parempi kanssa oletuksena ajoitus.
- jos tarvitset viimeisenkin pätkän suorituskykyä ja nopeampi laitteisto ei ole vaihtoehto, yritä jättää samaa dataa käyttävät askelmat samaan ytimeen tai ytimeen, jossa on pääsy jaettuun välimuistiin.
ymmärrän, että en ole vielä maininnut L3-välimuistia, mutta ne eivät ole erilaisia. L3-välimuisti toimii samalla tavalla. Suurempi kuin L2, hitaampi kuin L2. Ja se jaetaan usein ytimien kesken. Jos se on läsnä on on paljon suurempi kuin L2 välimuisti (muuten ottaa se ei olisi järkeä) ja se on usein jaettu kaikkien ydinten.