Выбор инструкций

редактировать

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

. Например, для следующей последовательности IR-кода среднего уровня

t1 = a t2 = b t3 = t1 + t2 a = t3 b = t1

хорошей последовательностью команд для архитектуры x86 является

MOV EAX, XCHG EAX, b ADD a, EAX

Подробный обзор выбора инструкций см. в разделе.

Расширение макросов

Простейший подход к выбору команд известен как расширение макросов или генерация интерпретирующего кода. Селектор инструкций с расширением макроса работает путем сопоставления шаблонов в IR среднего уровня. После совпадения выполняется соответствующий макрос с использованием согласованной части IR в качестве ввода, который выдает соответствующие целевые инструкции. Макрорасширение может быть выполнено либо непосредственно в текстовом представлении IR среднего уровня, либо IR можно сначала преобразовать в графическое представление, которое затем просматривается в глубину. В последнем случае шаблон соответствует одному или нескольким смежным узлам в графе.

Если целевая машина не очень проста, изолированное расширение макроса обычно генерирует неэффективный код. Чтобы смягчить это ограничение, компиляторы, применяющие этот подход, обычно комбинируют его с оптимизацией на глазок, чтобы заменить комбинации простых инструкций более сложными эквивалентами, которые увеличивают производительность и уменьшают размер кода. Это известно как подход Дэвидсона-Фрейзера и в настоящее время применяется в GCC.

График, охватывающий

. Другой подход состоит в том, чтобы сначала преобразовать IR среднего уровня в графическое представление, а затем покрыть график, используя узоры. Шаблон - это шаблон, который соответствует части графика и может быть реализован с помощью одной инструкции, предоставляемой целевой машиной. Цель состоит в том, чтобы охватить график таким образом, чтобы общая стоимость выбранных шаблонов была минимальной, где стоимость обычно представляет собой количество циклов, необходимых для выполнения инструкции. Для древовидных графов наименьшую стоимость покрытия можно найти за линейное время с помощью динамического программирования, но для DAG и полноценных графов проблема становится NP-полной и поэтому чаще всего решается с использованием либо жадные алгоритмы или методы комбинаторной оптимизации.

Стратегия наименьшего общего знаменателя

Стратегия наименьшего общего знаменателя - это метод выбора инструкций, используемый на платформах с процессором - существуют дополнительные инструкции, позволяющие переносить исполняемые программы на широкий спектр компьютеров. При стратегии наименьшего общего знаменателя поведение по умолчанию компилятора заключается в построении для наименьшей общей архитектуры. Использование любого доступного расширения процессора отключено по умолчанию, если оно явно не включено переключателями командной строки.

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

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-24 03:39:41
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте