Koľko vyrovnávacej pamäte. Nový prístup k vyrovnávacej pamäti procesora. Balenie a vybaľovanie

Pri vykonávaní rôznych úloh procesor vášho počítača prijíma potrebné bloky informácií z pamäte RAM. Po ich spracovaní CPU zapisuje výsledky výpočtov do pamäte a prijíma následné bloky údajov na spracovanie. Toto pokračuje, kým sa úloha neskončí.

Vyššie uvedené procesy sa vykonávajú pri veľmi vysokej rýchlosti. Rýchlosť aj najrýchlejšej pamäte RAM je však výrazne nižšia ako rýchlosť akéhokoľvek slabého procesora. Každá akcia, či už ide o zapisovanie informácií alebo čítanie z nich, zaberie veľa času. Rýchlosť pamäte RAM je desaťkrát nižšia ako rýchlosť procesora.

Napriek takémuto rozdielu v rýchlosti spracovania informácií procesor PC nezaháľa a nečaká, kým RAM vydá a prijme dáta. Procesor vždy funguje a to všetko vďaka prítomnosti vyrovnávacej pamäte v ňom.

Cache je špeciálny druh pamäte RAM. Procesor používa vyrovnávaciu pamäť na ukladanie tých kópií informácií z hlavnej pamäte RAM počítača, ku ktorým bude pravdepodobne v blízkej budúcnosti pristupovať.

Cache pamäť v podstate funguje ako vysokorýchlostná vyrovnávacia pamäť, ktorá ukladá informácie, ktoré môže procesor potrebovať. Procesor tak dostane potrebné dáta desaťkrát rýchlejšie ako pri ich čítaní z RAM.

Hlavným rozdielom medzi vyrovnávacou pamäťou a bežnou vyrovnávacou pamäťou sú vstavané logické funkcie. Vo vyrovnávacej pamäti sú uložené náhodné dáta, ktoré sa zvyčajne spracúvajú podľa schémy „prvý prijatý, prvý vydaný“ alebo „prvý prijatý, posledný vydaný“. Vyrovnávacia pamäť obsahuje údaje, ku ktorým sa pravdepodobne v blízkej budúcnosti pristúpi. Vďaka „smart cache“ teda môže procesor bežať na plné obrátky a nečakať na načítanie dát z pomalšej RAM.

Hlavné typy a úrovne vyrovnávacej pamäte L1 L2 L3

Vyrovnávacia pamäť sa vyrába vo forme čipov statickej pamäte s náhodným prístupom (SRAM), ktoré sú nainštalované na systémovej doske alebo zabudované do procesora. V porovnaní s inými typmi pamäte môže statická pamäť pracovať pri veľmi vysokých rýchlostiach.

Rýchlosť vyrovnávacej pamäte závisí od veľkosti konkrétneho čipu, čím väčšia je veľkosť čipu, tým ťažšie je dosiahnuť vysokú rýchlosť pre jeho prevádzku. Vzhľadom na túto vlastnosť sa pri výrobe procesora cache pamäť vykonáva vo forme niekoľkých malých blokov, nazývaných úrovne. Najbežnejší je dnes trojúrovňový systém vyrovnávacej pamäte L1, L2, L3:

Vyrovnávacia pamäť prvej úrovne L1 - objemovo najmenší (len niekoľko desiatok kilobajtov), ​​ale najrýchlejší v rýchlosti a najdôležitejší. Obsahuje dáta najčastejšie používané procesorom a beží bez oneskorenia. Typicky sa počet pamäťových čipov L1 rovná počtu procesorových jadier, pričom každé jadro pristupuje iba k svojmu vlastnému čipu L1.

L2 cache rýchlosť je nižšia ako pamäť L1, ale víťazí v objeme, ktorý sa už meria v niekoľkých stovkách kilobajtov. Je navrhnutý tak, aby dočasne uložil dôležité informácie, ku ktorým je menej pravdepodobné, že sa k nim dostanete ako k informáciám uloženým vo vyrovnávacej pamäti L1.

Cache tretej úrovne L3 - má najväčší objem z troch úrovní (môže dosiahnuť desiatky megabajtov), ​​ale má aj najpomalšiu rýchlosť, ktorá je stále výrazne vyššia ako rýchlosť RAM. Cache L3 je zdieľaná medzi všetkými jadrami procesora. Pamäťová úroveň L3 je určená na dočasné uloženie tých dôležitých dát, ktorých pravdepodobnosť prístupu je o niečo nižšia ako pri informáciách uložených v prvých dvoch úrovniach L1, L2. Zabezpečuje tiež vzájomnú interakciu jadier procesora.

Niektoré modely procesorov sa vyrábajú s dvoma úrovňami vyrovnávacej pamäte, v ktorej L2 kombinuje všetky funkcie L2 a L3.

Keď je užitočné veľké množstvo vyrovnávacej pamäte.

Výrazný efekt z veľkého množstva vyrovnávacej pamäte pocítite pri používaní archivačných programov, v 3D hrách, pri spracovaní a kódovaní videa. V relatívne „ľahkých“ programoch a aplikáciách rozdiel prakticky nie je badateľný (kancelárske programy, prehrávače a pod.).

Aké je najšpinavšie miesto na počítači? Myslíš košík? Používateľské priečinky? Chladiaci systém? Nehádal som! Najšpinavšie miesto je cache! Koniec koncov, musí sa neustále čistiť!

V skutočnosti je v počítači veľa vyrovnávacích pamätí a neslúžia ako skládka odpadu, ale ako urýchľovače zariadení a aplikácií. Odkiaľ pochádza ich povesť „systémového žľabu na odpadky“? Pozrime sa, čo je to cache, ako sa to deje, ako to funguje a prečo.

Koncepcia a typy vyrovnávacej pamäte

Esh alebo cache pamäť je špeciálne úložisko často používaných dát, ku ktorému sa pristupuje desať, stovky a tisíckrát rýchlejšie ako RAM alebo iné pamäťové médium.

Aplikácie (webové prehliadače, audio a video prehrávače, editory databáz a pod.), komponenty operačného systému (vyrovnávacia pamäť miniatúr, vyrovnávacia pamäť DNS) a hardvér (vyrovnávacia pamäť CPU L1-L3, grafický framebuffer) majú vlastnú vyrovnávaciu pamäť. čip, vyrovnávacie pamäte jednotiek) . Realizuje sa rôznymi spôsobmi – softvérovo a hardvérovo.

  • Vyrovnávacia pamäť programu je len samostatný priečinok alebo súbor, kam sa sťahujú napríklad obrázky, menu, skripty, multimediálny obsah a ďalší obsah navštívených stránok. Toto je priečinok, do ktorého sa prehliadač prvýkrát ponorí, keď znova otvoríte webovú stránku. Výmena časti obsahu z lokálneho úložiska urýchľuje jeho načítanie a .

  • Najmä v pevných diskoch je vyrovnávacou pamäťou samostatný čip RAM s kapacitou 1-256 Mb, ktorý sa nachádza na doske elektroniky. Prijíma informácie načítané z magnetickej vrstvy a ešte nenačítané do pamäte RAM, ako aj údaje, ktoré si operačný systém najčastejšie vyžaduje.

  • Moderný centrálny procesor obsahuje 2-3 hlavné úrovne vyrovnávacej pamäte (nazýva sa aj stieracia pamäť), ktorá sa nachádza vo forme hardvérových modulov na tom istom čipe. Najrýchlejšia a objemovo najmenšia (32-64 Kb) je cache Level 1 (L1) – beží na rovnakej frekvencii ako procesor. L2 je v rýchlosti a kapacite na strednej pozícii (od 128 Kb do 12 Mb). A L3 je najpomalší a najobjemnejší (do 40 Mb), na niektorých modeloch absentuje. Rýchlosť L3 je len nízka v porovnaní s rýchlejšími náprotivkami, ale je tiež stokrát rýchlejšia ako najproduktívnejšia RAM.

Zápisníková pamäť procesora sa používa na ukladanie neustále používaných údajov čerpaných z pamäte RAM a inštrukcií strojového kódu. Čím je väčší, tým je procesor rýchlejší.

Dnes už nie sú limitom tri úrovne ukladania do vyrovnávacej pamäte. S príchodom architektúry Sandy Bridge implementoval Intel do svojich produktov dodatočnú vyrovnávaciu pamäť L0 (určenú na ukladanie dešifrovaných mikroinštrukcií). A najvýkonnejšie procesory majú tiež vyrovnávaciu pamäť štvrtej úrovne, vyrobenú vo forme samostatného mikroobvodu.

Schematicky interakcia úrovní vyrovnávacej pamäte L0-L3 vyzerá takto (napríklad Intel Xeon):

Ľudská reč o tom, ako to všetko funguje

Aby ste pochopili, ako funguje vyrovnávacia pamäť, predstavte si osobu pracujúcu pri stole. Priečinky a dokumenty, ktoré neustále používa, sú na stole ( vo vyrovnávacej pamäti). Pre prístup k nim stačí natiahnuť ruku.

Papiere, ktoré potrebuje menej často, sú uložené neďaleko na policiach ( v RAM). Aby ste ich získali, musíte vstať a prejsť niekoľko metrov. A to, s čím človek momentálne nepracuje, bolo archivované ( zaznamenané na pevnom disku).

Čím je tabuľka širšia, tým viac dokumentov sa na ňu zmestí, čo znamená, že zamestnanec bude mať rýchly prístup k ďalším informáciám ( čím väčšia je kapacita vyrovnávacej pamäte, tým rýchlejšie program alebo zariadenie teoreticky funguje).

Občas sa pomýli – necháva si na stole papiere, ktoré obsahujú nesprávne informácie a používa ich pri svojej práci. V dôsledku toho sa znižuje kvalita jeho práce ( chyby vyrovnávacej pamäte vedú k zlyhaniam softvéru a hardvéru). Na nápravu situácie musí zamestnanec vyhodiť dokumenty s chybami a na ich miesto umiestniť správne ( vymazať vyrovnávaciu pamäť).

Stôl má obmedzenú plochu ( vyrovnávacia pamäť je obmedzená). Niekedy sa dá rozšíriť napríklad presunutím druhej tabuľky a niekedy nie (veľkosť vyrovnávacej pamäte sa môže zvýšiť, ak program poskytuje takúto príležitosť; hardvérovú vyrovnávaciu pamäť nemožno zmeniť, pretože je implementovaná v hardvéri) .

Ďalším spôsobom, ako urýchliť prístup k väčšiemu počtu dokumentov, ako sa na stôl zmestí, je nájsť si asistenta, ktorý pracovníkovi papier naservíruje z police (operačný systém môže časť nevyužitej pamäte RAM alokovať na vyrovnávaciu pamäť údajov zariadenia). Ale stále je to pomalšie, ako ich zložiť zo stola.

Dostupné dokumenty by mali byť relevantné pre aktuálne úlohy. Za to zodpovedá samotný zamestnanec. Papiere je potrebné pravidelne čistiť (vytláčanie nepodstatných údajov z vyrovnávacej pamäte padá „na plecia“ aplikácií, ktoré ju využívajú, niektoré programy majú funkciu automatického vymazania vyrovnávacej pamäte).

Ak zamestnanec zabudne udržiavať poriadok na pracovisku a aktualizovať dokumentáciu, môže si sám nakresliť harmonogram čistenia stola a použiť ho ako pripomienku. V krajnom prípade to zverte asistentovi (ak je aplikácia závislá od vyrovnávacej pamäte pomalšia alebo často načítava neaktuálne údaje, použite nástroje na plánované čistenie vyrovnávacej pamäte alebo to urobte ručne každých pár dní).

S „funkciami ukladania do vyrovnávacej pamäte“ sa stretávame vlastne všade. Ide o nákup produktov do budúcnosti a rôzne úkony, ktoré vykonávame len tak mimochodom, v rovnakom čase a podobne. V skutočnosti je to všetko, čo nás šetrí od zbytočného rozruchu a zbytočných pohybov tela, zefektívňuje život a uľahčuje prácu. Počítač robí to isté. Jedným slovom, keby neexistovala žiadna vyrovnávacia pamäť, fungovalo by to stovky a tisíckrát pomalšie. A to by sa nám nepáčilo.

Čo je cache, prečo je potrebná a ako funguje aktualizované: 25. februára 2017 používateľom: Johnny Mnemotechnický prostriedok

Takmer všetci vývojári vedia, že vyrovnávacia pamäť procesora je taká malá, ale rýchla pamäť, ktorá ukladá dáta z nedávno navštívených oblastí pamäte – definícia je krátka a celkom presná. Znalosť „nudných“ detailov o mechanizmoch vyrovnávacej pamäte je však potrebná na pochopenie faktorov, ktoré ovplyvňujú výkon kódu.

V tomto článku sa pozrieme na množstvo príkladov ilustrujúcich rôzne funkcie cache a ich vplyv na výkon. Príklady budú v C#, výber jazyka a platformy až tak neovplyvňuje hodnotenie výkonu a konečné závery. Prirodzene, v rozumných medziach, ak si vyberiete jazyk, v ktorom sa čítanie hodnoty z poľa rovná prístupu k hašovacej tabuľke, nezískate žiadne výsledky vhodné na interpretáciu. Poznámky prekladateľa sú uvedené kurzívou.

habracut - - -

Príklad 1: Prístup k pamäti a výkon

Čo myslíte, o koľko rýchlejšia je druhá slučka ako prvá?
int arr = new int ;

// najprv
pre (int i = 0; i< arr.Length; i++) arr[i] *= 3;

// sekunda
pre (int i = 0; i< arr.Length; i += 16) arr[i] *= 3;


Prvá slučka vynásobí všetky hodnoty poľa 3, druhá slučka vynásobí iba každú šestnástu hodnotu. Iba druhý cyklus 6% práce prvý cyklus, ale na moderných strojoch oba cykly trvajú približne rovnaký čas: 80 ms A 78 ms respektíve (na mojom stroji).

Odpoveď je jednoduchá – prístup do pamäte. Rýchlosť týchto slučiek je primárne určená rýchlosťou pamäťového subsystému a nie rýchlosťou celočíselného násobenia. Ako uvidíme v nasledujúcom príklade, počet prístupov k RAM je rovnaký v prvom aj druhom prípade.

Príklad 2: Vplyv riadkov vyrovnávacej pamäte

Poďme hlbšie – skúsme iné hodnoty krokov, nielen 1 a 16:
pre (int i = 0; i< arr.Length; i += K /* шаг */ ) arr[i] *= 3;

Tu je čas chodu tohto cyklu pre rôzne hodnoty kroku K:

Upozorňujeme, že s hodnotami krokov od 1 do 16 sa prevádzkový čas prakticky nemení. Ale s hodnotami väčšími ako 16 sa čas chodu skráti zhruba na polovicu zakaždým, keď zdvojnásobíme krok. Neznamená to, že sa slučka akosi magicky rozbehne rýchlejšie, len sa zníži aj počet iterácií. Kľúčovým bodom je rovnaký čas chodu s hodnotami krokov od 1 do 16.

Dôvodom je, že moderné procesory nepristupujú k pamäti po bajtoch, ale po malých blokoch nazývaných vyrovnávacie riadky. Veľkosť reťazca je zvyčajne 64 bajtov. Pri čítaní akejkoľvek hodnoty z pamäte sa do vyrovnávacej pamäte dostane aspoň jeden riadok vyrovnávacej pamäte. Následný prístup k akejkoľvek hodnote z tohto reťazca je veľmi rýchly.

Pretože hodnoty 16 int zaberajú 64 bajtov, slučky s krokmi od 1 do 16 pristupujú k rovnakému počtu riadkov vyrovnávacej pamäte, presnejšie ku všetkým riadkom vyrovnávacej pamäte poľa. V kroku 32 sa sprístupní každý druhý riadok, v kroku 64 každý štvrtý.

Pochopenie tohto je veľmi dôležité pre niektoré metódy optimalizácie. Počet prístupov k nemu závisí od umiestnenia údajov v pamäti. Napríklad nesprávne zarovnané údaje môžu vyžadovať dva prístupy k pamäti RAM namiesto jedného. Ako sme zistili vyššie, rýchlosť práce bude dvakrát nižšia.

Príklad 3: Veľkosť vyrovnávacej pamäte prvej a druhej úrovne (L1 a L2).

Moderné procesory majú zvyčajne dve alebo tri úrovne vyrovnávacej pamäte, bežne označované ako L1, L2 a L3. Na zistenie veľkostí vyrovnávacích pamätí na rôznych úrovniach môžete použiť pomôcku CoreInfo alebo funkciu Windows API GetLogicalProcessorInfo. Obe metódy tiež poskytujú informácie o veľkosti riadku vyrovnávacej pamäte pre každú úroveň.

Na mojom počítači CoreInfo hlási 32 KB vyrovnávacej pamäte L1, 32 KB vyrovnávacej pamäte inštrukcií L1 a 4 MB vyrovnávacej pamäte L2. Každé jadro má svoje osobné vyrovnávacie pamäte L1, vyrovnávacie pamäte L2 sú spoločné pre každý pár jadier:

Logický procesor na mapu vyrovnávacej pamäte: *--- Data Cache 0, Level 1, 32 KB, Assoc 8, LineSize 64 *--- Instruction Cache 0, Level 1, 32 KB, Assoc 8, LineSize 64 -*-- Data Cache 1, úroveň 1, 32 KB, Assoc 8, LineSize 64 -*-- Inštrukčná vyrovnávacia pamäť 1, Úroveň 1, 32 KB, Assoc 8, LineSize 64 **-- Unified Cache 0, Level 2, 4 MB, Assoc 16, LineSize 64 --*- Data Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 --*- Instruction Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Data Cache 3, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Inštrukčná vyrovnávacia pamäť 3, Úroveň 1, 32 KB, Assoc 8, LineSize 64 --** Unified Cache 1, Level 2, 4 MB, Assoc 16, LineSize 64
Overme si tieto informácie experimentálne. Aby sme to urobili, prejdime si naše pole, ktoré sa zvyšuje každú 16. hodnotu – jednoduchý spôsob, ako zmeniť údaje v každom riadku vyrovnávacej pamäte. Po dosiahnutí konca sa vrátime na začiatok. Pozrime sa na rôzne veľkosti polí, mali by sme vidieť pokles výkonu, keď sa pole už nezmestí do vyrovnávacích pamätí rôznych úrovní.

Kód je takýto:

int kroky = 64 * 1024 * 1024; // počet opakovaní
int dlzkaMod = arr.Length - 1; // veľkosť poľa -- mocnina dvoch

pre (int i = 0; i< steps; i++)
{
// x & dĺžkaMod = x % arr.Length pretože mocniny dvoch
arr[(i * 16) & lengthMod]++;
}


Výsledky testu:

Na mojom počítači sú výrazné poklesy výkonu po 32 KB a 4 MB - to sú veľkosti vyrovnávacej pamäte L1 a L2.

Príklad 4: Inštrukcia paralelizmus

Teraz sa pozrime na niečo iné. Čo si myslíte, ktorá z týchto dvoch slučiek pobeží rýchlejšie?
int kroky = 256 * 1024 * 1024;
int a = new int ;

// najprv
pre (int i = 0; i< steps; i++) { a++; a++; }

// sekunda
pre (int i = 0; i< steps; i++) { a++; a++; }


Ukázalo sa, že druhá slučka beží takmer dvakrát rýchlejšie, aspoň na všetkých strojoch, ktoré som testoval. prečo? Pretože príkazy vo vnútri slučiek majú rôzne dátové závislosti. Príkazy prvého majú nasledujúci reťazec závislostí:

V druhom cykle sú tieto závislosti:

Funkčné časti moderných procesorov sú schopné vykonávať určitý počet určitých operácií súčasne, zvyčajne nie príliš veľký počet. Napríklad je možný paralelný prístup k údajom z vyrovnávacej pamäte L1 na dvoch adresách, ako aj súčasné vykonávanie dvoch jednoduchých aritmetických inštrukcií. V prvom cykle procesor tieto funkcie využiť nemôže, no v druhom áno.

Príklad 5: Asociativita vyrovnávacej pamäte

Jednou z kľúčových otázok, ktoré je potrebné zodpovedať pri návrhu cache je, či dáta z určitej oblasti pamäte môžu byť uložené v ľubovoľných bunkách cache alebo len v niektorých z nich. Tri možné riešenia:
  1. Vyrovnávacia pamäť priameho mapovania, údaje každého riadku vyrovnávacej pamäte v RAM sú uložené iba v jednej preddefinovanej bunke vyrovnávacej pamäte. Najjednoduchší spôsob, ako vypočítať mapovanie, je: row_in_index % number_of_cache_cells. Dva riadky namapované do rovnakej bunky nemožno uložiť do vyrovnávacej pamäte súčasne.
  2. N-entry čiastočne asociatívna cache, každý riadok môže byť uložený v N rôznych miestach vyrovnávacej pamäte. Napríklad v 16-cestnej vyrovnávacej pamäti môže byť riadok uložený v jednej zo 16 buniek, ktoré tvoria skupinu. Reťazce s rovnako nízkymi bitmi indexov zvyčajne zdieľajú jednu skupinu.
  3. Plne asociatívna vyrovnávacia pamäť, ľubovoľný reťazec môže byť uložený v ľubovoľnom umiestnení vyrovnávacej pamäte. Riešenie je svojím správaním ekvivalentné hašovacej tabuľke.
Priamo mapované cache sú náchylné na konflikty, napríklad keď dva riadky súperia o jednu bunku, pričom sa striedavo vytláčajú z cache, efektivita je veľmi nízka. Na druhej strane, plne asociatívne cache, aj keď bez tejto nevýhody, sú veľmi zložité a nákladné na implementáciu. Čiastočne asociatívne cache sú typickým kompromisom medzi zložitosťou implementácie a efektívnosťou.

Napríklad na mojom počítači je vyrovnávacia pamäť L2 s veľkosťou 4 MB 16-cestná semi-asociačná vyrovnávacia pamäť. Všetka RAM je rozdelená do množín riadkov podľa najmenej významných bitov ich indexov, riadky z každej množiny súťažia o jednu skupinu 16 buniek vyrovnávacej pamäte L2.

Keďže vyrovnávacia pamäť L2 má 65 536 buniek (4 * 2 20 / 64) a každá skupina pozostáva zo 16 buniek, máme spolu 4 096 skupín. Spodných 12 bitov indexu riadku teda určuje, do ktorej skupiny tento riadok patrí (2 12 = 4 096). Výsledkom je, že riadky s adresami deliteľnými 262 144 (4 096 * 64) zdieľajú rovnakú skupinu 16 buniek a súperia o miesto v nej.

Aby efekty asociativity fungovali, musíme neustále pristupovať k veľkému počtu riadkov z rovnakej skupiny, napríklad pomocou nasledujúceho kódu:

public static long UpdateEveryKthByte(byte arr, int K)
{
const int rep = 1024 * 1024; // počet opakovaní

Stopky sw = Stopky.StartNew();

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

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

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


Metóda inkrementuje každý K-tý prvok poľa. Keď sa dostaneme na koniec, začneme odznova. Po dosť veľkom počte opakovaní (2 20) zastavujeme. Urobil som behy pre rôzne veľkosti polí a hodnoty krokov K. Výsledky (modrá - dlhý čas chodu, biela - malá):

Modré oblasti zodpovedajú prípadom, keď sa pri neustálej zmene údajov vyrovnávacia pamäť nedokáže prispôsobiť všetky požadované údaje súčasne. Jasná modrá farba udáva prevádzkový čas cca 80 ms, takmer biela - 10 ms.

Poďme sa zaoberať modrými oblasťami:

  1. Prečo sa objavujú zvislé čiary? Zvislé čiary zodpovedajú hodnotám krokov, pri ktorých sa pristupuje k príliš veľa riadkom (viac ako 16) z jednej skupiny. Pre tieto hodnoty nemôže 16-cestná vyrovnávacia pamäť môjho počítača pojať všetky údaje, ktoré potrebuje.

    Niektoré z hodnôt zlého kroku sú mocniny dvoch: 256 a 512. Uvažujme napríklad krok 512 a pole s veľkosťou 8 MB. V tomto kroku je v poli 32 sekcií (8 * 2 20 / 262 144), ktoré medzi sebou súťažia o bunky v 512 skupinách vyrovnávacej pamäte (262 144 / 512). Existuje 32 pozemkov a v cache je len 16 buniek pre každú skupinu, takže nie je dosť miesta pre každého.

    Iné hodnoty krokov, ktoré nie sú mocninou 2, majú smolu, čo spôsobuje veľa prístupov k rovnakým skupinám vyrovnávacej pamäte a tiež spôsobuje, že sa na obrázku objavujú zvislé modré čiary. V tomto bode sú milovníci teórie čísel pozvaní zamyslieť sa.

  2. Prečo sa zvislé čiary zlomia na hranici 4 MB? Pri veľkosti poľa 4 MB alebo menej sa 16-cestná vyrovnávacia pamäť správa rovnako ako plne asociatívna vyrovnávacia pamäť, to znamená, že sa do nej zmestia všetky údaje v poli bez konfliktov. O jednu skupinu cache bojuje najviac 16 oblastí (262 144 * 16 = 4 * 2 20 = 4 MB).
  3. Prečo je vľavo hore veľký modrý trojuholník? Pretože pri malom kroku a veľkom poli nie je vyrovnávacia pamäť schopná zmestiť všetky potrebné údaje. Miera asociatívnosti cache tu hrá druhoradú úlohu, obmedzenie súvisí s veľkosťou L2 cache.

    Napríklad s veľkosťou poľa 16 MB a krokom 128 pristupujeme ku každému 128. bajtu, čím aktualizujeme každý druhý riadok vyrovnávacej pamäte poľa. Uloženie každého druhého riadku do vyrovnávacej pamäte trvá 8 MB, ale môj počítač má iba 4 MB.

    Aj keby bola vyrovnávacia pamäť plne asociatívna, neumožnilo by to uložiť do nej 8 MB údajov. Všimnite si, že vo vyššie uvedenom príklade s krokom 512 a veľkosťou poľa 8 MB potrebujeme iba 1 MB vyrovnávacej pamäte na uloženie všetkých údajov, ktoré potrebujeme, ale nie je to možné z dôvodu nedostatočnej asociatívnosti vyrovnávacej pamäte.

  4. Prečo ľavá strana trojuholníka postupne naberá na intenzite? Maximálna intenzita pripadá na hodnotu kroku 64 bajtov, čo sa rovná veľkosti riadku vyrovnávacej pamäte. Ako sme videli v prvom a druhom príklade, sekvenčný prístup k rovnakému reťazcu nestojí takmer nič. Povedzme, že s krokom 16 bajtov máme štyri prístupy do pamäte za cenu jedného.

    Keďže počet iterácií je v našom teste rovnaký pre akúkoľvek hodnotu kroku, lacnejší krok má za následok kratší čas chodu.

Zistené účinky sa zachovajú aj pri veľkých hodnotách parametrov:

Asociativita vyrovnávacej pamäte je zaujímavá vec, ktorá sa môže prejaviť za určitých podmienok. Na rozdiel od iných problémov, o ktorých sa hovorí v tomto článku, to nie je také vážne. Určite to nie je niečo, čo si vyžaduje neustálu pozornosť pri písaní programov.

Príklad 6: Falošné zdieľanie vyrovnávacej pamäte

Na viacjadrových strojoch môžete naraziť na ďalší problém – vyrovnávaciu pamäť. Jadrá procesorov majú čiastočne alebo úplne oddelené vyrovnávacie pamäte. Na mojom počítači sú vyrovnávacie pamäte L1 oddelené (ako obvykle) a každá dvojica jadier zdieľa dve vyrovnávacie pamäte L2. Podrobnosti sa môžu líšiť, ale vo všeobecnosti majú moderné viacjadrové procesory viacúrovňové hierarchické vyrovnávacie pamäte. Navyše najrýchlejšie, ale aj najmenšie cache patria jednotlivým jadrám.

Keď jedno z jadier upraví hodnotu vo svojej vyrovnávacej pamäti, ostatné jadrá už nemôžu používať starú hodnotu. Hodnota v cache iných jadier sa musí aktualizovať. Okrem toho by sa mala aktualizovať celý riadok vyrovnávacej pamäte pretože vyrovnávacie pamäte pracujú s údajmi na úrovni riadkov.

Poďme demonštrovať tento problém s nasledujúcim kódom:

private static int s_counter = new int ;

private void UpdateCounter(int position)
{
pre (int j = 0; j< 100000000; j++)
{
s_counter = s_counter + 3;
}
}


Ak na svojom štvorjadrovom stroji zavolám túto metódu s parametrami 0, 1, 2, 3 súčasne zo štyroch vlákien, čas behu bude 4,3 sekundy. Ale ak zavolám metódu s parametrami 16, 32, 48, 64, tak doba behu bude len 0,28 sekundy.

prečo? V prvom prípade je veľmi pravdepodobné, že všetky štyri hodnoty spracované vláknami v danom čase skončia v rovnakom riadku vyrovnávacej pamäte. Zakaždým, keď jedno jadro zvýši hodnotu, označí miesta vyrovnávacej pamäte obsahujúce túto hodnotu v iných jadrách ako neplatné. Po tejto operácii budú musieť všetky ostatné jadrá znova uložiť linku do vyrovnávacej pamäte. Tým je mechanizmus ukladania do vyrovnávacej pamäte nefunkčný, čím sa znižuje výkon.

Príklad 7: hardvérová zložitosť

Aj teraz, keď pre vás princípy fungovania cache nie sú tajomstvom, vás hardvér stále prekvapí. Procesory sa navzájom líšia v metódach optimalizácie, heuristike a iných jemnostiach implementácie.

Cache L1 niektorých procesorov môže pristupovať k dvom bunkám paralelne, ak patria do rôznych skupín, ale ak patria do rovnakej skupiny, iba postupne. Pokiaľ viem, niektorí môžu dokonca paralelne pristupovať k rôznym častiam tej istej bunky.

Procesory vás môžu prekvapiť šikovnými optimalizáciami. Napríklad kód z predchádzajúceho príkladu o falošnom zdieľaní vyrovnávacej pamäte na mojom domácom počítači nefunguje podľa predstáv – v najjednoduchších prípadoch dokáže procesor optimalizovať výkon a znížiť negatívne efekty. Ak je kód mierne upravený, všetko zapadne na svoje miesto.

Tu je ďalší príklad podivných železných vtipov:

private static int A, B, C, D, E, F, G;

private static void Weirdness()
{
pre (int i = 0; i< 200000000; i++)
{
<какой-то код>
}
}


Ak namiesto toho<какой-то код>nahradiť tri rôzne možnosti, môžete získať nasledujúce výsledky:

Zvyšovanie polí A, B, C, D trvá dlhšie ako zvyšovanie polí A, C, E, G. Ešte čudnejšie je, že zvyšovanie polí A a C trvá dlhšie ako polia A, C A E, G. Neviem presne, aké sú na to dôvody, ale možno sú spojené s pamäťovými bankami ( áno, áno, s bežnými trojlitrovými pamäťovými sporiteľňami, a nie to, čo ste si mysleli). Ak máte k tomu nejaké myšlienky, neváhajte ich komentovať.

Na mojom počítači vyššie uvedené nie je dodržané, niekedy sú však abnormálne zlé výsledky - s najväčšou pravdepodobnosťou plánovač úloh robí svoje vlastné "opravy".

Z tohto príkladu si treba vziať ponaučenie, že je veľmi ťažké plne predpovedať správanie hardvéru. Áno, Môcť predpovedať veľa, ale svoje predpovede musíte neustále potvrdzovať meraniami a testovaním.

Záver

Dúfam, že všetko, o čom sa diskutovalo, vám pomohlo pochopiť štruktúru vyrovnávacej pamäte procesora. Teraz môžete použiť to, čo ste sa naučili, do praxe a optimalizovať svoj kód.

Čipy na väčšine moderných desktopov majú štyri jadrá, ale výrobcovia čipov už oznámili plány na prechod na šesť jadier a 16-jadrové procesory dnes nie sú pre špičkové servery ani zďaleka nezvyčajné.

Čím viac jadier, tým väčší je problém alokácie pamäte medzi všetky jadrá pri spoločnej práci. S nárastom počtu jadier je čoraz výhodnejšie minimalizovať stratu času na správu jadier pri spracovaní dát - pretože rýchlosť výmeny dát zaostáva za rýchlosťou procesora a spracovaním dát v pamäti. Môžete fyzicky pristupovať k rýchlej vyrovnávacej pamäti niekoho iného alebo môžete použiť vlastnú pomalú, ale ušetríte čas prenosu dát. Úloha je komplikovaná skutočnosťou, že množstvo pamäte požadované programami jasne nezodpovedá veľkosti vyrovnávacej pamäte každého typu.

Fyzicky je možné umiestniť čo najbližšie k procesoru len veľmi obmedzené množstvo pamäte - vyrovnávacej pamäte procesora úrovne L1, ktorej objem je mimoriadne zanedbateľný. Daniel Sanchez, Po-An Tsai a Nathan Beckmann, výskumníci z Computer Science and Artificial Intelligence Laboratory na MIT, naučili počítač konfigurovať rôzne typy pamäte na flexibilnú hierarchiu programov v režime v reálnom čase. Nový systém s názvom Jenga analyzuje objemové potreby a frekvenciu prístupov k programovej pamäti a prerozdeľuje výkon každého z 3 typov vyrovnávacej pamäte procesora v kombináciách, ktoré poskytujú zvýšenú efektivitu a úsporu energie.


Na začiatok výskumníci testovali zvýšenie výkonu s kombináciou statickej a dynamickej pamäte pri práci na programoch pre jednojadrový procesor a získali primárnu hierarchiu - kedy je lepšie použiť kombináciu. Z 2 typov pamäte alebo z jednej. Hodnotili sa dva parametre – oneskorenie signálu (latencia) a energia spotrebovaná počas prevádzky každého z programov. Približne 40% programov začalo pracovať horšie s kombináciou typov pamäte, zvyšok - lepšie. Po stanovení, ktoré programy „majú rád“ zmiešaný výkon a ktoré ako veľkosť pamäte, výskumníci vytvorili svoj systém Jenga.

Virtuálne testovali 4 druhy programov na virtuálnom stroji s 36 jadrami. Testované programy:

  • omnet - Objective Modular Network Testbed, C simulačná knižnica a platforma sieťového simulátora (modrá na obrázku)
  • mcf – Meta Content Framework (červená farba)
  • astar – softvér na zobrazenie virtuálnej reality (zelený)
  • bzip2 - archivátor (fialový)


Obrázok ukazuje, kde a ako boli spracované údaje každého z programov. Písmená ukazujú, kde beží každá aplikácia (jedna na kvadrant), farby ukazujú, kde sa nachádzajú jej údaje, a tieňovanie označuje druhú úroveň virtuálnej hierarchie, ak je prítomná.

Úrovne vyrovnávacej pamäte

Cache CPU je rozdelená do niekoľkých úrovní. Pre univerzálne procesory - až 3. Najrýchlejšia pamäť je vyrovnávacia pamäť prvej úrovne - vyrovnávacia pamäť L1, pretože je umiestnená na rovnakom čipe ako procesor. Pozostáva z vyrovnávacej pamäte inštrukcií a vyrovnávacej pamäte údajov. Niektoré procesory bez vyrovnávacej pamäte L1 nemôžu fungovať. Cache L1 pracuje na frekvencii procesora a je prístupná pri každom takte. Často je možné vykonávať viacero operácií čítania/zápisu súčasne. Objem je zvyčajne malý - nie viac ako 128 kB.

Cache L1 interaguje s vyrovnávacou pamäťou druhej úrovne - L2. Je druhý najrýchlejší. Zvyčajne sa nachádza buď na čipe, ako napríklad L1, alebo v tesnej blízkosti jadra, napríklad v kazete procesora. V starších procesoroch čipset na základnej doske. Objem vyrovnávacej pamäte L2 je od 128 KB do 12 MB. V moderných viacjadrových procesoroch je vyrovnávacia pamäť druhej úrovne umiestnená na rovnakom čipe samostatnou pamäťou - s celkovou veľkosťou vyrovnávacej pamäte 8 MB má každé jadro 2 MB. Latencia vyrovnávacej pamäte L2 umiestnenej na jadrovom čipe je zvyčajne od 8 do 20 cyklov jadra. V úlohách zahŕňajúcich početné prístupy k obmedzenej oblasti pamäte, napríklad DBMS, jej plné využitie poskytuje desaťnásobné zvýšenie výkonu.

Cache L3 je zvyčajne ešte väčšia, aj keď o niečo pomalšia ako L2 (kvôli skutočnosti, že zbernica medzi L2 a L3 je užšia ako zbernica medzi L1 a L2). L3 je zvyčajne umiestnený oddelene od jadra CPU, ale môže byť veľký - viac ako 32 MB. L3 cache je pomalšia ako predchádzajúce cache, ale stále rýchlejšia ako RAM. Vo viacprocesorových systémoch sa bežne používa. Použitie vyrovnávacej pamäte tretej úrovne je opodstatnené vo veľmi úzkom rozsahu úloh a nemusí nielen poskytnúť zvýšenie výkonu, ale naopak a viesť k všeobecnému zníženiu výkonu systému.

Vypnutie vyrovnávacej pamäte druhej a tretej úrovne je najužitočnejšie pri matematických problémoch, keď je množstvo údajov menšie ako veľkosť vyrovnávacej pamäte. V tomto prípade môžete načítať všetky údaje naraz do vyrovnávacej pamäte L1 a potom ich spracovať.


Jenga z času na čas prekonfiguruje virtuálne hierarchie na úrovni OS, aby minimalizovala objem výmeny údajov, pričom zohľadňuje obmedzenia zdrojov a správanie aplikácií. Každá rekonfigurácia pozostáva zo štyroch krokov.

Jenga distribuuje dáta nielen v závislosti od toho, ktoré programy sú odosielané – pre tých, ktorí milujú veľkú jednorýchlostnú pamäť alebo pre tých, ktorí milujú rýchlosť zmiešaných cache, ale aj v závislosti od fyzickej blízkosti pamäťových buniek k spracovávaným dátam. Bez ohľadu na to, aký typ vyrovnávacej pamäte program vyžaduje predvolene alebo podľa hierarchie. Hlavná vec je minimalizovať oneskorenie signálu a spotrebu energie. V závislosti od toho, koľko typov pamäte má program rád, Jenga modeluje latenciu každej virtuálnej hierarchie s jednou alebo dvoma úrovňami. Dvojúrovňové hierarchie tvoria povrch, jednoúrovňové hierarchie tvoria krivku. Jenga potom premietne minimálne oneskorenie do rozmerov VL1, čoho výsledkom sú dve krivky. Nakoniec Jenga používa tieto krivky na výber najlepšej hierarchie (t. j. veľkosti VL1).

Použitie Jenga prinieslo hmatateľný efekt. 36-jadrový virtuálny čip je o 30 percent rýchlejší a využíva o 85 percent menej energie. Samozrejme, zatiaľ je Jenga len simuláciou bežiaceho počítača a potrvá nejaký čas, kým uvidíte skutočné príklady tejto vyrovnávacej pamäte a dokonca kým ju výrobcovia čipov prijmú, ak sa im táto technológia páči.

Konfigurácia podmieneného 36 jadrového stroja

  • Procesory. 36 jadier, x86-64 ISA, 2,4 GHz, Silvermont-like LLC: 8B-wide
    ifetch; 2-úrovňový bpred s 512x10-bitovými BHSR + 1024x2-bitové PHT, 2-cestné dekódovanie/vydanie/premenovanie/potvrdenie, 32-vstupové IQ a ROB, 10-vstupové LQ, 16-vstupové SQ; 371pJ/inštrukcia, 163mW/jadrový statický výkon
  • L1 cache. 32 KB, 8-smerná sada-asociačná, delená vyrovnávacia pamäť údajov a inštrukcií,
    3-cyklová latencia; 15/33 pJ na zásah/minutie
  • Služba prefetchers. 16-vstupové predvýbery toku modelované a overené podľa
    Nehalem
  • L2 cache. 128 kB súkromných na jadro, 8-cestná sada-asociačná, vrátane, 6-cyklová latencia; 46/93 pJ na zásah/min
  • Koherentný režim (Koherencia). 16-cestné, 6-cyklové latencie adresárových bánk pre Jenga; adresáre L3 vo vyrovnávacej pamäti pre ostatných
  • Globálne NOC. 6×6 mesh, 128-bitové prechody a prepojenia, X-Y smerovanie, 2-cyklové pipeline routery, 1-cyklové prepojenia; 63/71 pJ na smerovač/odkaz, statický výkon 12/4 mW smerovač/odkaz
  • Bloky statickej pamäte SRAM. 18 MB, jedna 512 KB banka na dlaždicu, 4-cestná 52-kandidátska zcache, 9-cyklová latencia banky, rozdelenie Vantage; 240/500 pJ na zásah/minutie, statický výkon 28 mW/bank
  • Viacvrstvová dynamická pamäť DRAM. 1152 MB, jeden 128 MB trezor na 4 dlaždice, zliatina s MAP-I DDR3-3200 (1600 MHz), 128-bitová zbernica, 16 radov, 8 bánk/rank, 2 KB riadková vyrovnávacia pamäť; 4,4/6,2 nJ na zásah/minutie, 88 mW/statický výkon trezoru
  • Hlavná pamäť. 4 kanály DDR3-1600, 64-bitová zbernica, 2 úrovne/kanál, 8 bánk/poradie, 8 KB riadková vyrovnávacia pamäť; 20 nJ/prístup, 4W statický výkon
  • DRAM časovanie. tCAS=8, tRCD=8, tRTP=4, tRAS=24, tRP=8, tRRD=4, tWTR=4, tWR=8, tFAW=18 (všetky časovania v tCK; naskladaná DRAM má polovicu tCK ako hlavná pamäť )

Cache je pamäť zabudovaná v procesore, do ktorej sa zapisujú najčastejšie používané dáta (príkazy) operačnej pamäte, čo výrazne urýchľuje prácu.

Veľkosť vyrovnávacej pamäte L1 (od 8 do 128 kB)
Množstvo vyrovnávacej pamäte na prvej úrovni.
L1 cache je blok vysokorýchlostnej pamäte umiestnenej priamo na jadre procesora.
Kopíruje dáta získané z RAM.

Uloženie základných príkazov umožňuje zvýšiť výkon procesora vďaka vyššej rýchlosti spracovania dát (spracovanie z cache je rýchlejšie ako z RAM).

Kapacita vyrovnávacej pamäte prvej úrovne je malá a počíta sa v kilobajtoch.
Typicky majú „staršie“ modely procesorov veľkú vyrovnávaciu pamäť L1.
Pri viacjadrových modeloch je uvedené množstvo vyrovnávacej pamäte L1 pre jedno jadro.

Veľkosť vyrovnávacej pamäte L2 (od 128 do 12288 kB)
Množstvo vyrovnávacej pamäte v druhej úrovni.
Cache L2 je blok vysokorýchlostnej pamäte, ktorý vykonáva rovnaké funkcie ako vyrovnávacia pamäť L1 (pozri "Veľkosť vyrovnávacej pamäte L1"), ale s nižšou rýchlosťou a väčším objemom.

Ak si vyberiete procesor pre úlohy náročné na zdroje, potom bude vhodnejší model s veľkým množstvom vyrovnávacej pamäte L2.
Pre viacjadrové procesory je uvedené celkové množstvo vyrovnávacej pamäte L2.

Veľkosť vyrovnávacej pamäte L3 (od 0 do 16384 kB)
Množstvo vyrovnávacej pamäte v tretej úrovni.
Integrovaná vyrovnávacia pamäť L3 v kombinácii s rýchlou systémovou zbernicou tvorí vysokorýchlostné dátové spojenie do systémovej pamäte.

Cache tretej úrovne sú spravidla vybavené iba CPU pre serverové riešenia alebo špeciálne edície "desktopových" procesorov.

L3 cache je dostupná napríklad v takých procesorových radoch ako Intel Pentium 4 Extreme Edition, Xeon DP, Itanium 2, Xeon MP a ďalších.

Twin BiCS FLASH - nová technológia 3D flash pamäte

Dňa 11. decembra 2019 na IEEE International Electronic Devices Meeting (IEDM) spoločnosť TOKYO-Kioxia Corporation oznámila technológiu 3D flash pamäte – Twin BiCS FLASH.

Ovládač AMD Radeon Software Adrenalin Edition 2020 19.12.2 WHQL (pridaný)

10. decembra AMD predstavilo mega ovládač Radeon Software Adrenalin 2020 Edition 19.12.2 WHQL.

Kumulatívna aktualizácia systému Windows 10 1909 KB4530684

Dňa 10. decembra 2019 spoločnosť Microsoft vydala kumulatívnu aktualizáciu KB4530684 (zostava 18363.535) pre Windows 10 Aktualizácia z novembra 2019 (verzia 1909) na systémoch x86, x64 (amd64), ARM64 a Windows Server 2019 (1909 pre systémy s procesorom x4) .

NVIDIA Game Ready ovládač GeForce 441.66 WHQL

Ovládač NVIDIA GeForce Game Ready 441.66 WHQL obsahuje podporu pre MechWarrior 5: Mercenaries a Detroit: Become Human a pridáva podporu G-SYNC pre monitory MSI MAG251RX a ViewSonic XG270.