Ако не се интересувате особено от компютри, ще ви бъде простено да приемете, че единствените форми на памет в компютъра са твърдият диск и RAM. Тези от вас, които се интересуват от компютри, вероятно ще знаят, че това не е така и че Процесорът също има набор от кешове, които се използват за кеширане на данни от RAM, така че процесорът да има достъп до тях по-бързо. Всичко това са рекламирани функции, главно защото скоростта и/или капацитетът са прилична точка за продажба и като цяло засягат нивата на производителност.
Всъщност има още един слой памет. Колкото и да си мислите, че L1 кешът е възможно най-близо до действителното процесорно ядро, има още един по-висок слой в йерархията на паметта. Това са регистрите на процесора. Причината, поради която те наистина не се рекламират или споменават, е, че те изобщо не са променени. Технически може да са, но броят и размерът на регистрите всъщност са основни за архитектурата. Това означава, че всички процесори x86-64 имат еднакъв брой регистри. Те не се предлагат на пазара, защото не са конкурентна точка.
Какво прави регистърът?
Регистърът е бързо достъпно място за съхранение на процесора. Достъпът до регистър е незабавен с нулева латентност, докато дори L1 кешът има латентност от приблизително 4-5 цикъла в съвременните процесори. Тази непосредственост на достъпа намеква за случая на използване на регистрите. Регистрите се използват за съхраняване на инструкциите, които се обработват активно от процесора. Те също така съхраняват точки от данни, които трябва да бъдат обработени. Някои регистри са с общо предназначение, докато други имат много специфично предназначение. Пример за регистър със специално предназначение би бил програмният брояч, който е мястото, където процесорът проследява позицията си в своята програмна последователност.
Много регистри се считат за достъпни за потребителя. Това обаче не означава, че потребителят на компютър може да избере каква стойност да постави в тях. Това означава, че работещият софтуер може да посочи данни, които да бъдат заредени в тези регистри. По-малък брой регистри са вътрешни, което означава, че софтуерът изобщо не може да ги адресира. Регистърът на инструкциите, който съхранява инструкцията, която се изпълнява в момента, е пример за вътрешен регистър.
Регистрирайте преименуване
Въпреки че архитектурата на процесора може да позволява само една конфигурация на регистрите, всъщност има малко нюанс в това. Всички съвременни процесори използват преименуване на регистъра. Това е техника, при която можете да имате повече физически регистри и да ги използвате за предварително зареждане на данни или съхраняване на данни, свързани с инструкция извън реда, която иначе би била презаписана. Когато процесорът стигне до точката, в която се нуждае от данните в допълнителните регистри, той просто ги преименува, така че да могат да бъдат адресирани, като в същото време прави адресируем регистър неадресируем.
Процесът на преименуване на регистър може да бъде много полезен за изпълнение извън реда. Например, ако място в паметта е програмирано да бъде прочетено от след това записано и инструкциите са били изпълнени в този ред, това е добре. Ако обаче инструкциите се пренаредят така, че първо да извършат записа, инструкцията за четене ще получи грешна стойност. За да се предотврати това, оригиналната стойност за четене се съхранява в неизползван регистър, който след това се преименува, когато се обработва съответната инструкция.
Заключение
Регистрите са най-високото ниво в йерархията на паметта. Те са единствената част, адресируема директно от процесора и нямат латентност. Регистрите се използват за съхраняване на данните, които се изпълняват активно от процесора. Те се използват и за съхраняване на други точки от данни, като програмния брояч, който следи коя инструкция е следващата за изпълнение. Налични са много ограничен брой регистри с архитектурата x86-64, която има 16 регистъра с общо предназначение и 16 или 32 регистъра с плаваща запетая в зависимост от това дали се поддържа AVX-512.