Розподілом регістрів у процесі компіляції називають відображення множини великого числа змінних фрагмента комп'ютерної програми (віртуальних регістрів проміжного подання) на, як правило, невелику множину фізичних регістрів процесора. Розподіл регістрів може виконуватися в окремо взятому базовому блоці (локальний розподіл регістрів) або у всій процедурі (глобальний розподіл регістрів).
Як правило комп'ютерним програмам доводиться працювати з великою кількістю даних, проте більшість мікропроцесорів підтримує операції тільки на фіксованому числі невеликих «комірок», званих регістрами. Деякі процесори дозволяють використовувати операнди, що зберігаються в пам'яті, однак звернення до регістрів відбувається значно швидше, ніж звернення до пам'яті (навіть з урахуванням того, що зазначена ділянка пам'яті може міститися в кеші).
Проблеми
Задача розподілу регістрів є NP-повною. Зазвичай кількість змінних у програмі значно перевершує кількість доступних фізичних регістрів, тому деякі змінні доводиться зберігати в локальному стеку. Звернення до пам'яті можна мінімізувати, якщо зберігати там найрідше використовувані змінні, проте визначити, які змінні використовуються найрідше, не завжди легко.
Крім того, деякі регістри часто мають системне або службове призначення і їх використання обмежене.
Глобальний розподіл регістрів
Як і більшість інших оптимізацій, розподіл регістрів базується на використанні деякого аналізу. В цьому випадку це, найчастіше, аналіз часу життя змінних і аналіз потоку даних.
Традиційним алгоритмом розподілу регістрів вважається розфарбовування графу несумісності, запропоноване математиком Грегорі Хайтіном.
Кожній змінній (символьному регістру) відповідає вузол графа . Якщо часи життя змінних перетинаються, відповідні їм вузли з'єднують дугою. Граф потрібно розфарбувати кольорами (де відповідає кількості доступних фізичних регістрів) так, щоб жодна пара сусідніх вузлів не мала однакового кольору.
Степенем вузла графа називається кількість його сусідів. Якщо степінь вузла графа менше , то для нього завжди можна знайти колір, не призначений жодному із сусідів. Якщо всі вузли мають степінь більше , одна зі змінних зберігається в пам'яті, і утворюється кілька вузлів меншого степеня.
Поки граф G не можна розфарбувати R кольорами Ітеративно видаляти всі вузли графа зі степенем < R, поміщаючи їх у стек Якщо всі вузли графа видалено, граф можна розфарбувати R кольорами Виштовхнути вузол N зі стека і додати його в граф, призначивши йому колір В іншому випадку граф G не можна розфарбувати R кольорами Спростити G, вибравши вузол для збереження в пам'яті і розбивши його на кілька вузлів (вузол для збереження в пам'яті вибирається евристично)
Престон Бріггс (Preston Briggs) запропонував модифікувати алгоритм Хайтіна, відкладаючи збереження змінної в пам'яті до призначення кольорів вузлам графа. Для деяких нерозфарбовуваних кольорами графів це дозволяє обійтися без збереження змінних у пам'яті. Наприклад, квадрат з вузлами у вершинах можна розфарбувати кольорами, тоді як степінь усіх його вузлів дорівнює двом і за алгоритмом Хайтіна доведеться зберегти одну зі змінних у пам'яті.
Примітки
- . Архів оригіналу за 28 липня 2021. Процитовано 28 липня 2021.
- Gregory J. Chaitin, Mark A. Auslander, Ashok K. Chandra, John Cocke, Martin E. Hopkins, and Peter W. Markstein. «Register allocation via coloring.» Computer Languages, 6:47-57, 1981.(англ.)
- Fernando Magno Quintão Pereira, Jens Palsberg, «Register Allocation after Classical SSA Elimination is NP-complete»(англ.), http://pike.cs.ucla.edu/~palsberg/paper/fossacs06.pdf [ 4 березня 2016 у Wayback Machine.]
- Preston Briggs, Keith D. Cooper, Ken Kennedy, Linda Torczon. «Coloring Heuristics for Register Allocation.» ACM SIGPLAN Notices, Volume 24, Issue 7, 275—284, 1989.(англ.)
Посилання
- http://www.intuit.ru/studies/courses/1157/173/lecture/4707?page=5 [ 28 липня 2021 у Wayback Machine.] 7
- Компіляція. 7: Призначення регістрів [ 1 грудня 2017 у Wayback Machine.], 2010
- Караваєв Д. Ю. Про реалізацію методу розподілу регістрів при компіляції [ 7 липня 2017 у Wayback Machine.], RSDN 2012
- Hadi Brais, Оптимізації компілятором — Що кожен програміст повинен знати про оптимізації коду компілятором. Частина 2 [ 1 грудня 2017 у Wayback Machine.], травень 2015
- Keith Schwarz, Register Allocation [ 11 травня 2021 у Wayback Machine.], Stanford's cs143 Compilers, 2012
В іншому мовному розділі є повніша стаття Register allocation(англ.). Ви можете допомогти, розширивши поточну статтю за допомогою з англійської.
|
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Rozpodilom registriv u procesi kompilyaciyi nazivayut vidobrazhennya mnozhini velikogo chisla zminnih fragmenta komp yuternoyi programi virtualnih registriv promizhnogo podannya na yak pravilo neveliku mnozhinu fizichnih registriv procesora Rozpodil registriv mozhe vikonuvatisya v okremo vzyatomu bazovomu bloci lokalnij rozpodil registriv abo u vsij proceduri globalnij rozpodil registriv Yak pravilo komp yuternim programam dovoditsya pracyuvati z velikoyu kilkistyu danih prote bilshist mikroprocesoriv pidtrimuye operaciyi tilki na fiksovanomu chisli nevelikih komirok zvanih registrami Deyaki procesori dozvolyayut vikoristovuvati operandi sho zberigayutsya v pam yati odnak zvernennya do registriv vidbuvayetsya znachno shvidshe nizh zvernennya do pam yati navit z urahuvannyam togo sho zaznachena dilyanka pam yati mozhe mistitisya v keshi ProblemiZadacha rozpodilu registriv ye NP povnoyu Zazvichaj kilkist zminnih u programi znachno perevershuye kilkist dostupnih fizichnih registriv tomu deyaki zminni dovoditsya zberigati v lokalnomu steku Zvernennya do pam yati mozhna minimizuvati yaksho zberigati tam najridshe vikoristovuvani zminni prote viznachiti yaki zminni vikoristovuyutsya najridshe ne zavzhdi legko Krim togo deyaki registri chasto mayut sistemne abo sluzhbove priznachennya i yih vikoristannya obmezhene Globalnij rozpodil registrivYak i bilshist inshih optimizacij rozpodil registriv bazuyetsya na vikoristanni deyakogo analizu V comu vipadku ce najchastishe analiz chasu zhittya zminnih i analiz potoku danih Tradicijnim algoritmom rozpodilu registriv vvazhayetsya rozfarbovuvannya grafu nesumisnosti zaproponovane matematikom Gregori Hajtinom Kozhnij zminnij simvolnomu registru vidpovidaye vuzol N displaystyle N grafa G displaystyle G Yaksho chasi zhittya zminnih peretinayutsya vidpovidni yim vuzli z yednuyut dugoyu Graf potribno rozfarbuvati R displaystyle R kolorami de R displaystyle R vidpovidaye kilkosti dostupnih fizichnih registriv tak shob zhodna para susidnih vuzliv ne mala odnakovogo koloru Stepenem vuzla grafa nazivayetsya kilkist jogo susidiv Yaksho stepin vuzla grafa menshe R displaystyle R to dlya nogo zavzhdi mozhna znajti kolir ne priznachenij zhodnomu iz susidiv Yaksho vsi vuzli mayut stepin bilshe R displaystyle R odna zi zminnih zberigayetsya v pam yati i utvoryuyetsya kilka vuzliv menshogo stepenya Poki graf G ne mozhna rozfarbuvati R kolorami Iterativno vidalyati vsi vuzli grafa zi stepenem lt R pomishayuchi yih u stek Yaksho vsi vuzli grafa vidaleno graf mozhna rozfarbuvati R kolorami Vishtovhnuti vuzol N zi steka i dodati jogo v graf priznachivshi jomu kolir V inshomu vipadku graf G ne mozhna rozfarbuvati R kolorami Sprostiti G vibravshi vuzol dlya zberezhennya v pam yati i rozbivshi jogo na kilka vuzliv vuzol dlya zberezhennya v pam yati vibirayetsya evristichno Preston Briggs Preston Briggs zaproponuvav modifikuvati algoritm Hajtina vidkladayuchi zberezhennya zminnoyi v pam yati do priznachennya koloriv vuzlam grafa Dlya deyakih nerozfarbovuvanih R displaystyle R kolorami grafiv ce dozvolyaye obijtisya bez zberezhennya zminnih u pam yati Napriklad kvadrat z vuzlami u vershinah mozhna rozfarbuvati R 2 displaystyle R 2 kolorami todi yak stepin usih jogo vuzliv dorivnyuye dvom i za algoritmom Hajtina dovedetsya zberegti odnu zi zminnih u pam yati Primitki Arhiv originalu za 28 lipnya 2021 Procitovano 28 lipnya 2021 Gregory J Chaitin Mark A Auslander Ashok K Chandra John Cocke Martin E Hopkins and Peter W Markstein Register allocation via coloring Computer Languages 6 47 57 1981 angl Fernando Magno Quintao Pereira Jens Palsberg Register Allocation after Classical SSA Elimination is NP complete angl http pike cs ucla edu palsberg paper fossacs06 pdf 4 bereznya 2016 u Wayback Machine Preston Briggs Keith D Cooper Ken Kennedy Linda Torczon Coloring Heuristics for Register Allocation ACM SIGPLAN Notices Volume 24 Issue 7 275 284 1989 angl Posilannyahttp www intuit ru studies courses 1157 173 lecture 4707 page 5 28 lipnya 2021 u Wayback Machine 7 Kompilyaciya 7 Priznachennya registriv 1 grudnya 2017 u Wayback Machine 2010 Karavayev D Yu Pro realizaciyu metodu rozpodilu registriv pri kompilyaciyi 7 lipnya 2017 u Wayback Machine RSDN 2012 Hadi Brais Optimizaciyi kompilyatorom Sho kozhen programist povinen znati pro optimizaciyi kodu kompilyatorom Chastina 2 1 grudnya 2017 u Wayback Machine traven 2015 Keith Schwarz Register Allocation 11 travnya 2021 u Wayback Machine Stanford s cs143 Compilers 2012 V inshomu movnomu rozdili ye povnisha stattya Register allocation angl Vi mozhete dopomogti rozshirivshi potochnu stattyu za dopomogoyu perekladu z anglijskoyi Divitis avtoperekladenu versiyu statti z movi anglijska Perekladach povinen rozumiti sho vidpovidalnist za kincevij vmist statti u Vikipediyi nese same avtor redaguvan Onlajn pereklad nadayetsya lishe yak korisnij instrument pereglyadu vmistu zrozumiloyu movoyu Ne vikoristovujte nevichitanij i nevidkorigovanij mashinnij pereklad u stattyah ukrayinskoyi Vikipediyi Mashinnij pereklad Google ye korisnoyu vidpravnoyu tochkoyu dlya perekladu ale perekladacham neobhidno vipravlyati pomilki ta pidtverdzhuvati tochnist perekladu a ne prosto skopiyuvati mashinnij pereklad do ukrayinskoyi Vikipediyi Ne perekladajte tekst yakij vidayetsya nedostovirnim abo neyakisnim Yaksho mozhlivo perevirte tekst za posilannyami podanimi v inshomovnij statti Dokladni rekomendaciyi div Vikipediya Pereklad