Эффективность алгоритмов распределения регистров - PullRequest
0 голосов
/ 19 апреля 2010

Я пытаюсь провести исследование / проект по распределению регистров с использованием раскраски графов, где я должен проверить эффективность различных оптимизирующих алгоритмов распределения регистров в различных сценариях.

Как начать? Каковы предпосылки и основания, по которым я могу их проверить? Какие все алгоритмы я могу использовать?


Добавление

На самом деле я хочу получить быстрый выход из этого, я не провел более глубокого изучения, но хочу представить (бесстыдно) легкодоступный анализ в моем проекте с небольшим акцентом на «эффективность». Т.е. какие методы оптимизации лучше всего подходят для разных задач / компиляторов / интерпретаторов.

Итак, моя основная задача (как) реализовать распределение регистров в моих программах. Я использую 64-битную систему Linux на компьютере с Core2 Duo. Я знаю C, C ++ и Java.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 апреля 2010

LCC неоптимизирует, верно? Это нормально, я предполагаю, что вам понадобится много разных компиляторов, потому что никакие две версии одного и того же компилятора и два компилятора не будут реализовывать одну и ту же оптимизацию одинаково.

Я думаю, вам нужно сначала сосредоточиться на дизассемблере, затем проанализировать поток кода, а затем приступить к регистрации использования. На самом деле, перед этим выберите ISA (набор инструкций) и здесь один и тот же код и тот же компилятор будут выдавать разные результаты для одной и той же оптимизации в зависимости от конкретной цели, даже от конкретных целей в одном семействе.

Тема результатов распределения регистров благодаря алгоритмам оптимизации достаточно широка и очень динамична. Это на уровне сравнительного анализа. Несмотря на то, что это все еще звучит как интересная тема, я думаю, вы обнаружите, что с оптимизацией или без нее, с десятками регистров общего назначения или без них, большинство компиляторов заканчивают тем, что используют только несколько регистров. (Несколько для передачи аргументов и несколько функций для реализации функции)

0 голосов
/ 19 апреля 2010

Базовая линия - Предположительно, вам понадобится набор тестовых примеров - от простых до сложных - которые тестируют интенсивное использование регистров, особенно разлив. Я считаю, что есть некоторые общие / стандартные для этого. Вы хотели бы профилировать их на базовом компиляторе и на современном высокопроизводительном компиляторе и анализировать результаты сборки, чтобы выяснить, что происходит. Это даст вам базовый уровень.

Разработка - Выберите компилятор (или напишите один). Старшее - LCC - оно старое, маленькое, простое, но в нем есть книга, которая объясняет это полностью. Более новой альтернативой может быть LLVM или GCC. Некоторые компиляторы уже используются для такого рода исследований - вы даже можете переключаться между диапазонами распределителей с помощью переключателей командной строки.

Или уточните вопрос - Мы говорим на языках в стиле C? Динамические? JITted? Что вы пытаетесь выяснить? Какой целевой процессор?

...