Във всички процесори на произволен компютър, независимо дали това е евтин лаптоп или сървър за милиони долари, се използва кеш памет. И е много голяма вероятността, тя да е разделена на няколко нива. Сигурно кешът е важен, иначе защо щяха да го вграждат в процесорите? Нека да се спрем по-подробно и накрая да разберем какво означава ’12-канален асоциативен кеш’ (12-way set associative).
Какво е кешът?
Това е малка, но много бърза памет, разположена съвсем близо до изчислителните блокове на процесора. Но разбира се, ние искаме да разберем много повече…
Нека да си представим хипотетичен компютър с безкрайно бърза система за съхранение на данните и командите. Разбира се, нищо подобно няма, но в този случай устройството на CPU би било много по-опростено. Той би имал само логически блокове за извършване на събиране, изваждане, умножение и т.н. И тъй като тази хипотетична система може мигновено да изпраща и получава всички необходими данни, на нито един от блоковете на процесора няма да се налага да изчаква получаването на инструкции или данни.
Но вместо това ние разполагаме с хард и флаш дискове, които са изключително бавни в сравнение с възможностите на процесора. Очевидно е, че тези устройства няма как да бъдат вградени вътре в чипа и между процесора и запомнящото устройство има определено физическо разстояние. А това добавя допълнително време за придвижване на данните, с което ситуацията се усложнява.
Ето защо ни е необходима още една, междинна система за запис и четене на данни, която се разполага между процесора и запомнящите устройства. Тя трябва да е по-бърза от HDD или SSD, да може да извършва няколко едновременни операции за обмен на данни и да се намира много по-близо до процесора.
Има такава памет и това в оперативната памет (RAM), която присъства във всеки компютър и върши точно това. Пори всички хранилища от този тип се използват DRAM (dynamic random access memory) памети, които могат да работят с данните много по-бързо от който и да било диск.
Само че оперативната памет наистина работи с висока скорост, но не може да съхранява толкова информация, колкото дисковете на периферията.
DRAM по принцип могат да се вграждат в корпуса на чиповете и това се нарича вградена (embedded) DRAM. Но процесорите са твърде малки и в тях не може да се интегрира много DRAM памет.

Но повечето DRAM памети е във вид на плочки включени в слотовете на дънната платка, които са разположени в непосредствена близост до процесора и това е винаги най-близко разположеният до CPU компонент. Но въпреки това, DRAM паметта не е достатъчно бърза…
Съвременните процесори са невероятно бързи – те имат нужда от само един тактов цикъл, за да извършат събиране на две 64-битови цели числа. И ако процесорът работи с тактова честота 4 GHz, то това са едва 0,00000000025 от секундата или една четвърт от наносекундата. DRAM от своя страна има нужда от около 100 наносекунди за намиране и подаване или записване на данните. По всичко личи, че е необходима още една степен от памет, която да бъде поставена между процесора и DRAM оперативната памет.
Тази степен е SRAM (static random access memory) паметта. DRAM използва микроскопични кондензатори за запазване на данните във вид на електрически заряд. А при SRAM за същата цел се използват тригери от транзистори, които работят със същата скорост като логическите блокове на процесора – около 10 пъти по-бързо от DRAM паметта.
Паметта с транзистори заема много повече място в сравнение с DRAM. В същия размер на 4 GB DRAM чип се събират по-малко от 100 MB SRAM. Но тя се произвежда чрез същия технологичен процес като при процесора и SRAM паметта може да бъде вградена в чипа и да се намира максимално близо до неговите логически блокове.
Забелязва се определена закономерност – с всяка нова степен се увеличава скоростта на обмен на данните, но с цената на намаляване на информационния обем. Тоест, ние можем да добавяме нови степени от памет, които ще бъдат по-бързи, но и с по-малък капацитет.
И така, можем да обобщим, че кеш паметта е комплект от SRAM блокове, вградени в чипа, които осигуряват максималната заетост на процесора чрез четене и запис на данни с много висока скорост.
Многото нива на кеша
Съвременните централни и графични процесори имат редица SRAM блокове със строго определена йерархия. Това е последователност от кешове със следната структура:
В показаното по-горе изображение процесорът (CPU) е обозначен с правоъгълна пунктирана линия. Отляво са разположени ALU (arithmetic logic units) – аритметично-логическото устройство, което всъщност извършва математическите операции. Най-близко разположени до ALU-то са регистрите, които строго казано, не са кеш.
Всеки регистър може да запише едно число – например, 64-битово цяло число, значението на което може да бъде елемент от някакви данни или код на процесорна инструкция, или част от адрес на паметта, или нещо друго.
Регистърният файл (register file) на десктоп процесорите е доста малък – така например, във всяко ядро на процесора Intel Core i9-9900K има по две банки от тези файлове, а регистърният файл за целите числа може да съхранява само 180 64-битови цели числа. Другият регистърен файл за векторните пресмятания (малки масиви от числа) съдържа 128 256-битови числа. Тоест, общият регистърен файл на всяко ядро на този процесор е малко по-малко от 7 KB. За сравнение, регистърният файл при графичните процесори, например в Nvidia GeForce RTX 2080 Ti е с размер 256 KB.
Регистрите, също както и кеша, са SRAM, но тяхната скорост е равна на скоростта на работа на обслужваните от тях няколко ALU и те обменят данните за един тактов цикъл на процесора. Но те не могат да съхраняват голям обем от данни (само един елемент) и ето защо, до тях винаги се намират по-големите блокове SRAM памет. Това е кешът от първо ниво (Level 1).

В показаното по-горе изображение регистърните файлове се намират отляво и са маркирани със зелена рамка. В горната част на тази снимка с бял контур е обозначен кешът за данни от първо ниво (Level 1 Data cache). Той не може да съхранява много информация – едва 32 KB и подобно на регистрите, се намира много близо до логическите блокове и работи с тяхната скорост.
Другият бял правоъгълник е кешът за инструкции от първо ниво (Level 1 Instruction cache), който също може да побере 32 KB информация. От името на този кеш се разбира, че в него са записани различните процесорни команди, които след това се раздробяват на микроинструкции (обикновено се обозначават като μops), които трябва да изпълни ALU-то. За тях също има кеш, който може да бъде класифициран като Level 0 и побира само 1500 инструкции, като се намира по-близо до ALU-то от L1 кешовете.
Навярно ще се запитате, защо тези SRAM блокове са толкова малки? Защо не ги направят по един или няколко MB?
От една страна, кешът за данни и кешът за инструкции заемат същата площ в чипа, колкото останалите логически блокове и големият кеш би увеличил твърде много размера на кристала. Но основната причина за малкия кеш е, че при увеличаване на неговия капацитет, се увеличава и времето за търсене и получаване на данните. L1 кешът трябва да е много бърз и затова е необходимо да бъде направен компромис между размера и скоростта – в най-добрия случай за получаване на данните от този кеш са необходими 5 тактови цикъла, а за числата с плаваща запетая – повече.
L2 кешът на процесор Skylake: 256 KB SRAM
Но ако това бе единственият кеш в процесора, то пред неговата производителност би се натъкнала на неочаквано препятствие. Ето защо в процесорите се вгражда още едно ниво памет – кешът от второ ниво (L2). Това е обобщена памет, която съдържа както инструкции, така и данни.
Level 2 кешът винаги е по-голям от Level 1. В процесорите AMD Zen 2 например, той е 512 KB, за да могат кешовете от по-ниски нива да получават достатъчно данни. Но по-големият капацитет иска жертви – за търсенето и подаването на данни от L2 е необходимо два пъти повече време от това на L1.
Във времената на първия Intel Pentium, кешът от второ ниво бе отделен чип, а в някои компютри това бе неголяма платка, която се включваше към дъното, Имаше и L2 кеш директно вграден в дънната платка. Постепенно той бе интегриран в самия процесор и накрая бе изцяло вграден в кристала на чипа. Това стана при процесорите Pentium III и AMD K6-III.
Но след известно време се наложи да бъде добавено още едно ниво кеш памет. Това стана в разцвета на многоядрените процесори.

В показаното по-горе изображение на Intel Kaby Lake процесор, в лявата част се виждат четирите ядра, като интегрираната графика заема почти целия кристал и заема неговата дясна част. Всяко ядро си има своите Level 1 и 2 кеш памети, показани като бели и жълти правоъгълници, но има и трети комплект SRAM блокове памет.
Кешът от трето ниво (Level 3), въпреки че е разположен близо до едното ядро, е изцяло общ за всички останали – всяко ядро може да получи достъп до L3 кеша. Той е много по-голям – от 2 до 32 MB, но и много по-бавен – достъпът до данните се осъществява за около 30 цикъла и времето за достъп най-голямо, когато някое ядро трябва да получи данните от L3 кеша, разположен на най-голямо разстояние.
По-долу е показно процесорно ядро с архитектура AMD Zen 2: кешовете от първо ниво L1 за инструкции и за данни с размер от по 32 KB (белите правоъгълници, Level 2 кешът с капацитет 512 KB (жълтите правоъгълници) и огромният L3 кеш с размер 4 MB (червеният правоъгълник).

Но чакайте малко: как така 32 KB кеш могат да заемат по-голямо физическо пространство от 512 KB? Ако Level 1 съхранява толкова малко данни, защо той е така непропорционално по-голям в сравнение с L2 и L3 кешовете?
Край на първа част. Във втората част ще разгледаме какво се записва в различните нива на кеш паметта, как необходимата информация жонглира между различните потоци от инструкции и някои особености на кеш паметта в графичните процесори.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!



