Кіріспе

Компьютерлік архитектурада тіркелімді қайта атау – физикалық тіркелімдерден логикалық тіркелімдерді абстракциялайтын техника. Әрбір логикалық тіркелімге оған сәйкес физикалық тіркелімдер жиынтығы тағайындалады. Машиналық тіл нұсқауы белгілі бір логикалық тіркелімге сілтеме жасағанда, процессор осы атауды дереу нақты бір физикалық тіркелімге ауыстырады. Физикалық тіркелімдер тікелей қолжетімді емес, оларға тек канондық атаулар арқылы ғана сілтеме жасауға болады. Бұл техника бір-бірімен деректер бойынша байланысы жоқ, бірінен соң бірі орындалатын нұсқаулардың тіркелімдерді қайта пайдалануынан туындайтын жалған деректер тәуелділігін жою үшін қолданылады. Осы жалған тәуелділікті жою нұсқаулар ағынындағы нұсқаулық деңгейдегі параллелизмді ашады, оны суперскалярлық және реттіліксіз орындау сияқты әртүрлі және толықтыратын техникалар арқылы өнімділікті арттыру үшін пайдалануға болады.

Проблемаға көзқарас

Бағдарламалар мәндермен жұмыс істейтін нұсқаулардан құралады. Нұсқаулар осы мәндерді бір-бірінен ажырату үшін атауы керек. Типик нұсқау мынадай болуы мүмкін: қосу және және нәтижені сақтау орынында. Осы нұсқауда , және сақтау орындарының атаулары болып табылады. Манипуляцияланатын мәндерді бірнеше рет қатарынан пайдалану жиі кездеседі. Регистрлік машиналар осы мәндерді сақтайтын жоғары жылдамдықты жад орындары – процессор тіркелімдерін енгізу арқылы осы мүмкіндікті пайдаланады. Регистрлерді аралық мәндер ретінде пайдаланатын нұсқаулар негізгі жадқа кіретін нұсқаулардан әлдеқайда жылдам орындалады. Бұл өнімділіктің артуы RISC процессор дизайнының маңызды элементі болып табылады, ол өзінің барлық негізгі математикалық және логикалық нұсқаулары үшін регистрлерді қолданады. Нақты дизайндегі регистрлер жиынтығы тіркелім файлы деп аталады. Файлдағы жеке регистрлер машиналық кодта нөмірмен анықталады. Машиналық кодта санды кодтау үшін бірнеше бит қажет. Мысалы, Zilog Z80-де файлда сегіз жалпы мақсаттағы регистр болған. Сегіз мәннің біреуін таңдау үшін үш бит керек, өйткені 23 = 8. Файлдағы регистрлердің саны көбейсе, өнімділік жақсарады, себебі уақытша мәндердің көбірек саны файлда сақталады, соның арқасында жадтан сақтау немесе жүктеудің қымбат операцияларынан аулақ болуға болады. Әдетте, қазіргі заманғы процессорлар және үлкен нұсқау сөздері бар процессорлар мүмкіндігінше көбірек регистрлерді пайдаланады. Мысалы, x86 нұсқаулар жиынтығы архитектурасында 8 жалпы мақсаттағы регистр бар, x86 64-те 16, көптеген RISC процессорларында 32, ал IA 64-те 128 регистр бар. Үлкен тіркелім файлының артықшылықтары регистр нөмірін кодтау үшін көбірек биттерді пайдалану қажеттілігімен теңестіріледі. Мысалы, 32 биттік нұсқауларды қолданатын жүйеде үш регистр болуы мүмкін, сондықтан = түріндегі операцияларды орындауға болады. Егер тіркелім файлында 32 жазба болса, әр сілтемеге 5 бит керек болады, ал үш регистрдің жиынтығы 15 бит алады, операцияны және басқа ақпаратты кодтау үшін 17 бит қалады. Тіркелім файлын 64 жазбаға дейін кеңейту үшін 6 бит, барлығы 18 бит қажет болады. Бұл орындалу жылдамдығын арттырса да, нұсқауды кодтау үшін азырақ биттер қалады. Осыдан келіп, файлдың мөлшерін мүмкін болатын нұсқаулар санымен теңестіруге тырысу қажеттігі туындайды.

Тегтер индекстелген тіркелім файлы

Бұл MIPS R10000, Alpha 21264 және AMD Athlon FP бөлімінде қолданылатын қайта атау стилі. Атауды өзгерту кезеңінде әрбір сәулеттік тіркелгіге сілтеме жасалғанда (оқу немесе жазу үшін), сәулеттік индексті қайта карталау файлында іздеу жүргізіледі. Бұл файл тег пен дайындық битін қайтарады. Егер оған әлі орындалмаған кезекте тұрған нұсқаулық болса, тег дайын емес деп белгіленеді. Оқу операциялары үшін бұл тег нұсқаулықтағы сәулеттік тіркелгінің орнын басады. Әрбір тіркелгіге жазу үшін, бос тегтердің FIFO кезектерінен жаңа тег алынады және жаңа карталау қайта карталау файлына жазылады, соның арқасында болашақ нұсқаулар сәулеттік тіркелгіні оқығанда осы жаңа тегке сілтеме жасайды. Нұсқаулық әлі орындалмағандықтан тег дайын емес деп белгіленеді. Бұл сәулеттік тіркелгі үшін бұрын бөлінген физикалық тіркелгі, қайта реттеу буферіндегі нұсқаулықпен бірге сақталады – бұл FIFO, кодтау және аяқтау кезеңдері арасындағы бағдарламалық тәртіпте нұсқаулықтарды сақтайды. Содан кейін нұсқаулықтар әртүрлі кезектерге орналастырылады. Нұсқаулықтар орындалғанда, олардың нәтижелеріне арналған тегтер таратылады, ал кезектер осы тегтерді олардың дайын емес кіріс операндаларының тегтерімен сәйкестендіреді. Сәйкестік операнд дайын екенін білдіреді. Қайта карталау файлы да осы тегтермен сәйкес келеді, соның арқасында тиісті физикалық тіркелгілер дайын деп белгіленеді. Кезектегі бір нұсқаулықтың барлық кіріс операндалары дайын болғанда, ол нұсқаулық орындалуға дайын болады. Кезектер әр циклда әртүрлі функционалдық бөлімдерге жіберу үшін дайын нұсқаулықтарды таңдайды. Дайын емес нұсқаулықтар кезектерде қалады. Кезектерден нұсқаулықтарды ретсіз алып тастау оларды үлкен және энергияны көп тұтынатын етеді. Орындалған нұсқаулықтар тегтермен индекстелген физикалық тіркелгілер файлынан оқылады (тек тарату операндаларын айналып өтеді), содан кейін орындалады. Орындау нәтижелері тегтермен индекстелген физикалық тіркелгілер файлына жазылады, сондай-ақ әрбір функционалдық бөлімге дейінгі айналма желісіне таратылады. Аяқтау кезеңі жазылған сәулеттік тіркелгінің бұрынғы тегін бос кезекке қояды, соның арқасында оны жаңа кодталған нұсқаулық үшін қайта пайдалануға болады. Қателік немесе тармақ болжамының қатесі, қайта карталау файлының соңғы жарамды нұсқаулықтағы қайта карталау күйіне дейін күйдің көшірмелерін біріктіру және реттелген алдын ала аяқтау кезектеріндегі бұрынғы тегтер арқылы кері қайтаруға себеп болады. Бұл механизм қажет болғандықтан және кез келген қайта карталау күйін қалпына келтіре алатындықтан (тек ағымдағы аяқталатын нұсқаулықтан бұрынғы күйін ғана емес), тармақ болжамының қатесін тармақ аяқталуына дейін өңдеуге болады, ықтимал тармақ болжамының қатесіне байланысты кідірістің уақытын жасыра отырып.

Резервтік станциялар

Бұл AMD K7 және K8 жобаларының бүтін сандар бөлімінде қолданылатын стиль. Атын өзгерту кезеңінде, оқылатын әрбір архитектуралық регистр болашақтағы файлда да, қайта атау файлында да ізделеді. Болашақтағы файлдан оқылу, егер оған жазуға күтіліп отырған нұсқау болмаса, сол регистрдің мәнін береді (яғни, ол дайын). Нұсқау орындалу кезегіне қойылғанда, болашақтағы файлдан оқылған мәндер брондау станцияларындағы сәйкес жазбаларға жазылады. Нұсқаудағы регистр жазуы, қайта атау файлына жаңа, дайын емес белгі жазылуына себеп болады. Белгі нөмірі әдетте нұсқаулар тізбегімен беріледі – бос белгілерге арналған FIFO қажет емес. Белгілермен индекстелген схемадағыдай, орындалу кезегі дайын емес операндар үшін сәйкес белгілердің хабарламаларын күтеді. Белгілермен индекстелген схемадан айырмашылығы, сәйкес белгілер орындалу кезегі жазбасының брондау станциясына сәйкес хабарлама мәнін жазуға мәжбүрлейді. Орындалған нұсқаулар өз аргументтерін брондау станциясынан оқиды, жаңа ғана хабарланған операндарды айналып өтеді, содан кейін орындалады. Бұрын айтылғандай, брондау станциясының регистрлік файлдары көбінесе кішкентай болады, мысалы, сегіз жазбаға дейін. Орындау нәтижелері қайта реттеу буферіне, брондау станцияларына (егер орындалу кезегі жазбасында сәйкес белгі болса) және егер бұл архитектуралық регистрді нысаналайтын соңғы нұсқау болса, болашақтағы файлға жазылады (осы жағдайда регистр дайын деп белгіленеді). Бітіру кезінде мән қайта реттеу буферінен архитектуралық регистрлік файлға көшіріледі. Архитектуралық регистрлік файлдың жалғыз мақсаты – ерекше жағдайларды және тармақталу қателіктерін қалпына келтіру. Бітіру кезінде анықталған ерекше жағдайлар мен тармақталу қателіктері архитектуралық файлдың болашақтағы файлға көшірілуіне және қайта атау файлындағы барлық регистрлердің дайын деп белгіленуіне себеп болады. Декодтау мен бітіру арасында болашақтағы файлдың күйін қайта құрудың әдетте жолы болмайды, сондықтан тармақталу қателіктерінен ерте қалпына келтіру мүмкін емес.

Схемаларды салыстыру

Екі схемада да нұсқаулар кезекке ретпен енгізіледі, бірақ ретсіз алынып тасталады. Егер кезектер бос ұяларды біріктірмесе, онда олар көптеген қолданылмаған жазбаларға ие болады немесе бірнеше нұсқау бір уақытта дайын болғанда айнымалы басымдықпен кодтау қажет болады. Ұяларды біріктіретін кезектерде басымдықпен кодтау оңайырақ, бірақ нұсқауларды кезек бойынша жылжыту үшін қарапайым, бірақ үлкен тізбектер қажет. Резервтік станциялар қайта аттаудан орындауға дейінгі уақытты жақсырақ қысқартады, себебі қайта аттау кезеңінде физикалық регистр нөмірін іздеудің орнына тікелей регистр мәндерін табады, содан кейін мәнді табу үшін оны пайдаланады. Бұл кідіріс тармақ болжауының қатесінен туындайтын кідірістің бір бөлігі болып табылады. Резервтік станциялар нұсқауды беруден орындауға дейінгі уақытты да жақсартады, өйткені әрбір жергілікті регистрлік файл тегтермен индекстелген схеманың үлкен орталық файлынан кішірек. Тегтерді жасау және ерекше жағдайларды өңдеу резервтік станция схемасында оңайырақ, төменде талқыланғандай. Резервтік станциялар қолданатын физикалық регистрлік файлдар әдетте қызмет ететін кезекпен бірге қолданылмаған жазбаларды біріктіреді, бұл осы регистрлік файлдарды жиынтық бойынша үлкен етеді, көбірек қуатты тұтынады және тегтермен индекстелген схемада қолданылатын қарапайым регистрлік файлдарға қарағанда күрделірек жасайды. Жағдайды нашарлату үшін, әр резервтік станцияның әрбір жазбасын әрбір нәтижелік шина жаза алады, сондықтан, мысалы, функционалдық бірлікке 8 кезек жазбасы бар резервтік станция машинасы теңдестірілген тегтермен индекстелген машинаға қарағанда әдетте 9 есе көп айналма желілеріне ие болады. Осылайша, нәтижелерді жіберу тегтермен индекстелген дизайнға қарағанда әлдеқайда көп қуат пен аумаққа талап етеді. Сонымен қатар, резервтік станция схемасында нәтижелік мәнді сақтауға болатын төрт орын бар (Болашақ файлы, резервтік станция, қайта реттеу буфері және архитектуралық файл), ал тегтермен индекстелген схемада тек біреу ғана (физикалық регистрлік файл) бар. Функционалдық бірліктерден алынған нәтижелер осы сақтау орындарының барлығына жіберілгендіктен, тегтермен индекстелген схемаға қарағанда машинадағы көптеген орындарға жетуі керек, бұл функцияға көбірек қуат, аумақ және уақыт қажет етеді. Дегенмен, өте дәл тармақ болжау схемаларымен жабдықталған машиналарда және егер орындалу уақыты маңызды мәселе болса, резервтік станциялар өте жақсы жұмыс істей алады.