Регистрлік терезелер: процессор өнімділігін арттыру мүмкіндігі
Register window
Регистрлік терезелер – процессор өнімділігін арттыру үшін қосымша регистрлерді бөліп, функция шақырулары мен қайтаруларын жеңілдететін архитектуралық мүмкіндік.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
CPU архитектурасының өнімділікті жақсартуға бағытталған мүмкіндігі
CPU architecture feature to improve performance
Компьютерлік инженерияда, тіркелім терезелері – бұл ішкі тіркелімдердің белгілі бір бөлігін динамикалық түрде бағдарламашыға көрінетін, тұрақты тіркелімдерге бейімдеу арқылы кіші бағдарламаға арналған мүмкіндік. Тіркелім терезелері процессордың өнімділігін арттыру мақсатында, функцияны шақыру және қайтару үшін қажетті стек операцияларының санын азайту арқылы жүзеге асырылады. Беркли RISC дизайнының ең әсерлі мүмкіндіктерінің бірі болып табылатын бұл технология, кейіннен AMD Am29000, Intel i960, Sun Microsystems SPARC және Intel Itanium сияқты командалар жиынтығы архитектураларында қолданылды.
In computer engineering, register windows are a feature which dedicates registers to a subroutine by dynamically aliasing a subset of internal registers to fixed, programmer visible registers. Register windows are implemented to improve the performance of a processor by reducing the number of stack operations required for function calls and returns. One of the most influential features of the Berkeley RISC design, they were later implemented in instruction set architectures such as AMD Am29000, Intel i960, Sun Microsystems SPARC, and Intel Itanium.
Жалпы пайдалану
Бағдарламаның әртүрлі бөліктері үшін бірнеше тізілімдер жинағы қарастырылған. Тіркелімдер бірнеше кіші бағдарламаларды процессор ресурстарын бөлісуге мәжбүрлеу үшін бағдарламашыдан қасақана жасырылады. Тіркелімдерді көрінбейтін ету тиімді жүзеге асырылуы мүмкін; процессор процедура шақырылғанда бағдарламаның бір бөлігінен екіншісіне өтуді анықтайды. Бұл, аз ғана нұсқаулардың бірімен (пролог) басталып, сондай-ақ аз ғана жиынтықпен (эпилог) аяқталады. Беркли дизайнында, осы шақырулар сол кезде жаңа тізілімдер жинағының "орнына қойылуына" немесе шақыру аяқталғанда "өлі" (немесе "қайта пайдалануға болатын") деп белгіленуіне себеп болады.
Several sets of registers are provided for the different parts of the program. Registers are deliberately hidden from the programmer to force several subroutines to share processor resources. Rendering the registers invisible can be implemented efficiently; the CPU recognizes the movement from one part of the program to another during a procedure call. It is accomplished by one of a small number of instructions (prologue) and ends with one of a similarly small set (epilogue). In the Berkeley design, these calls would cause a new set of registers to be "swapped in" at that point, or marked as "dead" (or "reusable") when the call ends.
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-те қолданылған тәсіл, онда архитектураның жаңа буыны бар көбірек тіркелім терезелері бар. Нәтижесінде тіркелім терезелері жиі асып кетпегендіктен, тіркелім терезелерін төгу және толтыру операциялары азайтылады.
In the Berkeley RISC design, only eight registers out of a total of 64 are visible to the programs. The complete set of registers are known as the register file, and any particular set of eight as a window. The file allows up to eight procedure calls to have their own register sets. As long as the program does not call down chains longer than eight calls deep, the registers never have to be spilled, i. e. saved out to main memory or cache which is a slow process compared to register access. By comparison, the Sun Microsystems SPARC architecture provides simultaneous visibility into four sets of eight registers each. Three sets of eight registers each are "windowed". Eight registers (i0 through i7) form the input registers to the current procedure level. Eight registers (L0 through L7) are local to the current procedure level, and eight registers (o0 through o7) are the outputs from the current procedure level to the next level called. When a procedure is called, the register window shifts by sixteen registers, hiding the old input registers and old local registers and making the old output registers the new input registers. The common registers (old output registers and new input registers) are used for parameter passing. Finally, eight registers (g0 through g7) are globally visible to all procedure levels. The AMD 29000 improved the design by allowing the windows to be of variable size, which helps utilization in the common case where fewer than eight registers are needed for a call. It also separated the registers into a global set of 64, and an additional 128 for the windows. Similarly, the IA 64 (Itanium) architecture used variable sized windows, with 32 global registers and 96 for the windows. In the Infineon C166 architecture, most registers are simply locations in internal RAM which have the additional property of being accessible as registers. Of these, the addresses of the 16 general purpose registers (R0 R15) are not fixed. Instead, the R0 register is located at the address pointed to by the "Context Pointer" (CP) register, and the remaining 15 registers follow sequentially thereafter. Register windows also provide an easy upgrade path. Since the additional registers are invisible to the programs, additional windows can be added at any time. For instance, the use of object oriented programming often results in a greater number of "smaller" calls, which can be accommodated by increasing the windows from eight to sixteen for instance. This was the approach used in the SPARC, which has included more register windows with newer generations of the architecture. The end result is fewer slow register window spill and fill operations because the register windows overflow less often.
Сын
Тіркелім терезелері – тіркелімдердің жұмысын жақсартудың жалғыз жолы емес. Стэнфорд университетінің MIPS-ті жобалаған тобы Берклидегі жұмысты көріп, мәселе тіркелімдердің жетіспеушілігі емес, қазіргі тіркелімдерді тиімсіз пайдалану екенін түсінді. Олар MIPS-те бар үлкен жиынды ақылмен пайдалануын қамтамасыз ету үшін компилятордың тіркелімдерді бөлу жұмысына көбірек уақыт жұмсады. Бұл чиптің күрделілігін азайтып, жалпы тіркелімдер санын екі есеге кемітті, бірақ бір процедура үлкен көрінетін тіркелім кеңістігін пайдалана алатын жағдайларда, оның өнімділігі артуы мүмкін. Нәтижесінде, қазіргі заманғы компиляторлардың арқасында MIPS тіркелім кеңістігін процедура шақыру кезінде де тиімді пайдаланады.
Register windows are not the only way to improve register performance. The group at Stanford University designing the MIPS saw the Berkeley work and decided that the problem was not a shortage of registers, but poor utilization of the existing ones. They instead invested more time in their compiler's register allocation, making sure it wisely used the larger set available in MIPS. This resulted in reduced complexity of the chip, with one half the total number of registers, while offering potentially higher performance in those cases where a single procedure could make use of the larger visible register space. In the end, with modern compilers, MIPS makes better use of its register space even during procedure calls.