Кіріспе

CPU архитектурасының өнімділікті жақсартуға бағытталған мүмкіндігі

Компьютерлік инженерияда, тіркелім терезелері – бұл ішкі тіркелімдердің белгілі бір бөлігін динамикалық түрде бағдарламашыға көрінетін, тұрақты тіркелімдерге бейімдеу арқылы кіші бағдарламаға арналған мүмкіндік. Тіркелім терезелері процессордың өнімділігін арттыру мақсатында, функцияны шақыру және қайтару үшін қажетті стек операцияларының санын азайту арқылы жүзеге асырылады. Беркли RISC дизайнының ең әсерлі мүмкіндіктерінің бірі болып табылатын бұл технология, кейіннен AMD Am29000, Intel i960, Sun Microsystems SPARC және Intel Itanium сияқты командалар жиынтығы архитектураларында қолданылды.

Жалпы пайдалану

Бағдарламаның әртүрлі бөліктері үшін бірнеше тізілімдер жинағы қарастырылған. Тіркелімдер бірнеше кіші бағдарламаларды процессор ресурстарын бөлісуге мәжбүрлеу үшін бағдарламашыдан қасақана жасырылады. Тіркелімдерді көрінбейтін ету тиімді жүзеге асырылуы мүмкін; процессор процедура шақырылғанда бағдарламаның бір бөлігінен екіншісіне өтуді анықтайды. Бұл, аз ғана нұсқаулардың бірімен (пролог) басталып, сондай-ақ аз ғана жиынтықпен (эпилог) аяқталады. Беркли дизайнында, осы шақырулар сол кезде жаңа тізілімдер жинағының "орнына қойылуына" немесе шақыру аяқталғанда "өлі" (немесе "қайта пайдалануға болатын") деп белгіленуіне себеп болады.

CPU-да қолдану

Беркли RISC дизайнында 64 тіркелімнің тек сегізін ғана бағдарламалар көреді. Тіркелімдердің толық жиынтығы – тіркелім файлы, ал сегізінің кез келген жиынтығы – терезе деп аталады. Файл сегізге дейін процедуралық шақыруларға өз тіркелім жиынтықтарын алуға мүмкіндік береді. Егер бағдарлама сегізден артық шақыру тізбегін шақырмаса, тіркелімдер ешқашан төгілмейді, яғни негізгі жадқа немесе кэшке сақталудың қажеті болмайды, бұл тіркелімге қол жеткізуге қарағанда баяу процесс. Қарама-қарсылығы, Sun Microsystems SPARC архитектурасы әрқайсысы сегіз тіркелімнен тұратын төрт жиынтықты бір мезгілде көруді қамтамасыз етеді. Әрқайсысы сегіз тіркелімнен тұратын үш жиынтық "терезеленген". Сегіз тіркелім (i0-ден i7-ге дейін) ағымдағы процедура деңгейіне кіретін тіркелімдерді құрайды. Сегіз тіркелім (L0-ден L7-ге дейін) ағымдағы процедура деңгейіне жергілікті, ал сегіз тіркелім (o0-дан o7-ге дейін) ағымдағы процедура деңгейінен шақырылған келесі деңгейге шығарылады. Процедура шақырылған кезде, тіркелім терезесі он алты тіркелімге жылжиды, ескі кіріс тіркелімдері мен ескі жергілікті тіркелімдерді жасырады және ескі шығыс тіркелімдерін жаңа кіріс тіркелімдері етеді. Параметрлерді беру үшін ортақ тіркелімдер (ескі шығыс тіркелімдері және жаңа кіріс тіркелімдері) қолданылады. Соңында, барлық процедура деңгейлерінде сегіз тіркелім (g0-дан g7-ге дейін) жалпыға бірдей көрінеді. AMD 29000 дизайнын терезелердің өзгермелі өлшемде болуына мүмкіндік беру арқылы жақсартты, бұл шақыру үшін сегіз тіркелімнен аз қажет болған жағдайда пайдалануды жеңілдетеді. Сонымен қатар, ол тіркелімдерді 64 жалпы жиынтыққа және терезелер үшін қосымша 128 бөлікке бөлді. Сол сияқты IA 64 (Itanium) архитектурасы 32 жаһандық тіркелімдермен және терезелер үшін 96-ға тең әр түрлі өлшемді терезелерді қолданды. Infineon C166 архитектурасында көптеген тіркелімдер жай ғана ішкі RAM-дегі орындар болып табылады, олар тіркелімдер ретінде қол жетімді болудың қосымша қасиетіне ие. Олардың ішінде 16 жалпы мақсаттағы тіркелімнің (R0-R15) мекенжайлары бекітілмеген. Оның орнына R0 тіркелімі "Context Pointer" (CP) тіркелімі көрсеткен мекенжайда орналасады, ал қалған 15 тіркелім одан кейін бірінен соң бірі келеді. Тіркелім терезелері оңай жаңарту жолын қамтамасыз етеді. Қосымша тіркелімдер бағдарламаларға көрінбейтіндіктен, қосымша терезелерді кез келген уақытта қосуға болады. Мысалы, объектіге бағытталған бағдарламалауды қолдану көбінесе "кішкентай" шақырулардың көп болуына әкеледі, мысалы, терезені сегізден он алтыға дейін ұлғайту арқылы орын алуға болады. Бұл SPARC-те қолданылған тәсіл, онда архитектураның жаңа буыны бар көбірек тіркелім терезелері бар. Нәтижесінде тіркелім терезелері жиі асып кетпегендіктен, тіркелім терезелерін төгу және толтыру операциялары азайтылады.

Сын

Тіркелім терезелері – тіркелімдердің жұмысын жақсартудың жалғыз жолы емес. Стэнфорд университетінің MIPS-ті жобалаған тобы Берклидегі жұмысты көріп, мәселе тіркелімдердің жетіспеушілігі емес, қазіргі тіркелімдерді тиімсіз пайдалану екенін түсінді. Олар MIPS-те бар үлкен жиынды ақылмен пайдалануын қамтамасыз ету үшін компилятордың тіркелімдерді бөлу жұмысына көбірек уақыт жұмсады. Бұл чиптің күрделілігін азайтып, жалпы тіркелімдер санын екі есеге кемітті, бірақ бір процедура үлкен көрінетін тіркелім кеңістігін пайдалана алатын жағдайларда, оның өнімділігі артуы мүмкін. Нәтижесінде, қазіргі заманғы компиляторлардың арқасында MIPS тіркелім кеңістігін процедура шақыру кезінде де тиімді пайдаланады.