Критерии для размещения переменной регистра в регистре процессора? - PullRequest
3 голосов
/ 04 октября 2010

Объявление регистра переменных является предложением для компилятора, что конкретная автоматическая переменная должна быть назначена регистру процессора, если это возможно.

Но как компилятор решает, когда поместить переменную регистра в регистр процессора?Какой алгоритм / механизм он использует, чтобы решить?

Спасибо,

Навин

Ответы [ 4 ]

5 голосов
/ 04 октября 2010

В случае, если Норман Рэмси не заметит этого и не ответит, возможно, указатель на одну из его статей будет в порядке.

Раскраска графика используется главным образом в статических компиляторах (иначераньше времени компиляторы).Для динамических (Just In Time) компиляторов вы обычно используете что-то, что дает результаты быстрее (например, алгоритм linear scan ), даже при том, что это обычно не так хорошо, как работа по распределению регистров.

1 голос
/ 04 октября 2010

Помимо упомянутых, GCC (4.5.x +) использует распределитель регистров на основе дерева SSA * (более подробно в разделе Passes ), хотя здесь хороший пример SSA регистр распределения

1 голос
/ 04 октября 2010

Как говорит Джерри, компилятор использует распределитель регистров. Распределение регистров является одной из тех простых, но трудных проблем.

В былые времена компилятор ценил вашу помощь в решении проблемы, какие переменные и в какие регистры вносить. Но сегодня задача лучше понятна, и компилятор слишком занят анализом программ, чтобы на самом деле выслушать то, что вы хотите сказать.

Если оптимизация полностью не отключена, ваш компилятор, скорее всего, будет игнорировать спецификатор register.

0 голосов
/ 04 октября 2010

Вы можете указать ключевое слово регистра для переменной. Но дело за компилятором, чтобы определить, помещать это в реестр или нет. Обычно в статической компиляции графа используется раскраска, которая обеспечивает эффективное распределение. Принимая во внимание, что при динамической (JIT) компиляции метод, называемый линейным сканированием, является предпочтительным, поскольку раскраска графа занимает больше времени.
Направленные ациклические графы (DAG) могут использоваться для получения оптимальных последовательностей команд (или минимальной последовательности выделения регистров).
Для более подробного прочтения см .: 1. На пути к более принципиальному компилятору: распределение регистров и выбор инструкций, вновь рассмотренный Дэвидом Райаном Коэсом
2 Принципы компиляции Альфреда V Aho

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...