Moderni procesori rade nevjerojatno brzo; mogu značajno nadmašiti sistemsku RAM memoriju. Ova neravnoteža brzine između CPU-a i memorije dovela bi do toga da vaš procesor često miruje, čekajući da mu se pošalju podaci kako bi mogao nastaviti s pokretanjem procesa. Kako bi se to spriječilo, omogućavajući CPU-ima da nastave raditi brže i brže, koristi se CPU cache.
Kako CPU cache ubrzava CPU?
Predmemorija CPU-a je dizajnirana da bude što je brža i da potom predmemorije podatke koje CPU zahtijeva. Brzina CPU-a je optimizirana na tri načina: latencija, propusnost i blizina. Predmemorija CPU-a radi s vrlo malim latencijama, minimizirajući vrijeme potrebno da se rezultat vrati. Na primjer, Intel i9-9900k ima latenciju predmemorije od 0,8, 2,4 i 11,1 nanosekunde za L1, L2 i L3 predmemoriju. Za usporedbu, latencija modernog RAM-a velike brzine je reda veličine 14 nanosekundi.
Savjet: Razine predmemorije bit će detaljnije objašnjene kasnije, ali jednostavno rečeno, niži slojevi predmemorije su brži, ali su skuplji pa imaju manji kapacitet. Nanosekunda je milijardni dio sekunde, tako da latencija od 0,8 sekundi znači da je potrebno manje od milijardnog dijela sekunde da se vrati rezultat.
Što se tiče propusnosti, CPU cache nudi značajna poboljšanja performansi u odnosu na tradicionalnu pohranu i RAM. Brzine čitanja L1 i L3 predmemorije mogu dostići 2,3 TB/s odnosno 370 GB/s, dok je propusnost RAM-a obično oko 40 GB/s. Ova povećana propusnost znači da CPU predmemorija može prenijeti podatke na CPU puno brže nego RAM.
Kako bi se postigle maksimalne moguće brzine, CPU cache je zapravo ugrađen u silicij same CPU matrice. Time se minimizira udaljenost koju svi električni signali trebaju prijeći, a time i zadržavanje latencije što je moguće niže. Na primjer, kada je L3 predmemorija prvi put premještena s matične ploče na CPU matricu, tadašnji procesor (Pentium 4 EE) uspio je postići poboljšanje performansi od 10-20%.
Arhitektura CPU predmemorije
Moderni CPU općenito koriste tri sloja CPU predmemorije označene L1-3, pri čemu su predmemorije s nižim brojem bliže jezgri CPU-a, brže i skuplje. Svaka pojedinačna jezgra CPU-a u višejezgrenom CPU-u ima svoju L1 predmemoriju. Obično se dijeli na dva dijela, L1I i L1D. L1I se koristi za keširanje instrukcija za CPU dok se L1D koristi za keširanje podataka na kojima se te upute treba izvesti.
Svaka CPU jezgra obično također ima svoju L2 predmemoriju na modernom CPU-u. L2 predmemorija je veća i sporija od L1 predmemorije i koristi se prvenstveno za pohranjivanje podataka koji inače ne bi stali u L2 predmemoriju. Imajući namjensku L2 predmemoriju po jezgri, izbjegnuta je svađa predmemorije. Sukob za predmemoriju je mjesto gdje se različite jezgre bore da zatraže prostor predmemorije za vlastita radna opterećenja, što može dovesti do brisanja važnih podataka iz predmemorije.
L3 cache obično se dijeli između svih CPU jezgri procesora. Opet, L3 cache je sporiji od L2 predmemorije, ali je jeftiniji i veći. Pružanjem dijeljene predmemorije moguće je smanjiti količinu podataka koji bi se duplicirali na nižim razinama predmemorije po jezgri.
Savjet: Na primjer, u veličinama predmemorije, Intelov i9-9900K ima 64 KB L1 i 256 KB L2 predmemorije po jezgri (za ukupno 512 KB L1 i 2 MB L2), također ima 16 MB dijeljene L3 predmemorije.
Kako se koristi CPU cache?
Sve razine predmemorije CPU-a koriste se za ubrzavanje performansi procesora keširanjem podataka iz RAM-a. Kada CPU zatraži podatke, obično prvo pretražuje svoje slojeve predmemorije u pokušaju da dobije podatke što je brže moguće. Ako se podaci pronađu u pogotku u predmemoriji, tada CPU može nastaviti svoju obradu. Ako podaci nisu u predmemoriji, u onome što se zove promašaj predmemorije, onda CPU mora provjeriti RAM, a zatim tvrdi disk ako ni podataka nema. Brži slojevi uvijek se prvo provjeravaju radi maksimalne izvedbe.
Kako bi pomogao CPU-u da ima podatke koji su mu potrebni u predmemoriji kada mu zatreba, predmemorija pokušava unaprijed isprazniti podatke koji bi CPU mogli sljedeće trebati. Na primjer, ako je CPU zatražio neke podatke za sliku koju renderira, predmemorija može pokušati preventivno predmemorirati više slikovnih podataka kako bi se mogli dostaviti CPU-u što je brže moguće.