Содержание к диссертации
Введение
1. Двоичная трансляция и проблемы оптимизации вещественого контекста 11
1.1 Двоично-транслирующая система (дтс) 12
1.1.1 Основные понятия дтс 12
1.1.2 Проблемы двоичной трансляции 12
1.1.3 Структура двоично-транслирующей системы 13
1.1.4 Классификация существующих двоично-транслирующих систем 14
1.1.5 Оптимизирующий компилятор в двоично-транслирующей системе 17
1.2 Двоичная трансляция вещественного контекста 19
1.2.1 Описание вещественного контекста исходной intel х86 (ia32) архитектуры. 20
1.2.2. Описание реализации поддержки семантической корректности
Вещественного контекста исходной архитектуры на целевой платформе 22
1.3 Проблемы оптимизации вещественного контекста 25
1.4 Возможные пути решения. Обзор существующих систем двоичной трансляции 26
1.5 Постановка задачи 32
Выводы 33
2. Базовая методика обработки вещественного Контекста 34
2.1. Технология переименования вещественного контекста 34
2.2 Введение оптимистических предположений. 35
2.3 Анализ неоптимизированного кода на применимость метода переименования . 38
2.4 Сбор ста тической информации для применения метода переименования 45
2.4.1 Локальный анализ применимости метода переименования 48
2.4.2 Глобальный анализ применимости метода 50
2.5 Построение контрольных условий. 55
2.6 Построение распаковок. 58
2.7 Механизм переименования. 60
2.8 Восстановление исходного контекста 63
2.9 Преимущества и недостатки метода переименования 67
2.10 Результаты. 70
Выводы 71
3. Расширенные возможности применения базовой методики ;...73
3.1 Недокументированные особенности обработки вещественного контекста на исходной архитектуре. адаптация метода переименования 73
3.2 Специфические оптимизации вещественного контекста 75
3.2.1 Удаление избыточности форматных преобразований операндов 76
3.2.2 Удаление диагностической избыточности 82
3.2.3 Модификация построения условий переходов 84
3.2.4 Результаты 86
3.3 Обработка смешанного мультимедийного/вещественного контекста 88
3.3.1 Общее описание 88
3.3.2 Особенности обработки смешанного кода 92
3.3.3 Преимущества и недостатки оптимизаций смешанного кода 98
3.3.4 Результаты 98
Выводы 99
Заключение 101
Приложение 103
Приложение 1. Результаты использования метода переименования на пакете Тестов specperfb 103
Приложение 2. Результаты использования специфических оптимизаций Вещественного контекста на пакете тестов specperfb 104
Приложение 3. Результаты использования метода переименования на пакете смешанных вещественных / мультимедийных тестов промышленного генератора Тестов 105
Приложение 4. Соотношение представлений элементов исходного вещественного кода него неоптимизированного двоично-транслированного
Аналога 109
Литература
- Структура двоично-транслирующей системы
- Анализ неоптимизированного кода на применимость метода переименования
- Специфические оптимизации вещественного контекста
- Обработка смешанного мультимедийного/вещественного контекста
Введение к работе
Актуальность работы
Исследования в области вычислительных технологий поражают своей масштабностью. Поколения вычислительных машин и комплексов сменяют друг друга. Новые технологии позволяют делать микропроцессорную технику меньше по размеру, сложнее по функциональности. Одним из наиболее важных требований к новым разработкам является повышение производительности. Применение различных способов распараллеливания вычислений позволяет достичь желаемых результатов.
Одним из наиболее распространенных на сегодняшний день способов обеспечения параллельности остается применение аппаратных решений. Ярким примером такого решения могут служить целые поколения процессоров фирмы Intel (Pentium, Pentium Pro) с набором команд CISC (Complex Instruction Set Computing), представляющих собой суперскалярное ядро на базе RISC архитектуры и аппаратный перекодировщик из CISC в RISC инструкции ядра. В то же время данный способ приводит к дополнительным затратам оборудования, ухудшению физических характеристик, таких как размеры кристаллов и энергопотребление.
Обеспечение требуемой для современных задач параллельности можно достичь и путем существенных изменений микропроцессорных архитектур па хорошо зарекомендовавшую себя архитектуру VLIW (Very Long Instruction Word) [4]. Новые алгоритмы планирования и распределения ресурсов, реструктуризация управления позволяют получить значительный прирост производительности по сравнению с суперскалярными методами. Дополнительным преимуществом VLIW архитектуры является возможность эффективно применить к ней методы формальной верификации [50]. Однако наряду с полученными преимуществами такие архитектуры приобрели и полную двоичную несовместимость [1] с другими архитектурными решениями.
Проблема программной несовместимости может быть разрешена несколькими различными методами. Один из таких методов, полностью аппаратный, когда перекодировка команд исходной архитектуры в широкие команды производится на уровне аппаратуры [32][33]. Реализация подобной функциональности требует дополнительных аппаратных ресурсов и затрат энергопотребления. В свою очередь борьба за сокращение энергопотребления вводит ограничения на параллелизм, и тем самым, на логическую скорость вычислений.
Двоичная трансляция является программным способом обеспечения программной совместимости[26][31]. Основная идея двоичной трансляции сводится к преобразованию двоичных кодов одной архитектуры в функционально эквивалентные коды другой архитектуры. Данный способ обладает рядом преимуществ по сравнению с аппаратной перекодировкой, таких как:
эффективность. Получение наиболее оптимального кода за счет более глубокого распараллеливания и минимизации потерь на компиляцию при использовании кеша транслированного кода в памяти или базе данных; экономия оборудования. Отсутствует необходимость использовать аппаратные перекодировщики и оптимизаторы;
независимость от изменений архитектуры. Появляется возможность использования новых микроархитектурных решений (оптимизация конвейера), а также и архитектурных ( изменение системы команд).
Перечисленные особенности позволяют сохранить двоичную совместимость кодов исходной архитектуры при переносе на несовместимую целевую архитектуру при минимальном усложнении оборудования.
Двоичная трансляция является достаточно новой технологией и, поэтому, не одинаково эффективна на всем множестве программных приложений, особенно вещественных. Причинами этому могут служить такие факторы как:
- неполная совместимость с исходной эмулируемой архитектурой
(несовместимость по операциям и типам данных);
недостаточно эффективный результирующий код (ограничения на применение оптимизаций);
- переносимость только пользовательских приложений (жесткая привязка к
операционной системе либо полная эмуляция привилегированной части).
Таким образом, наблюдается явное противоречие между преимуществами метода программной двоичной трансляции и практическими ограничениями существующих двоично-транслирующих систем. В жертву скорости исполнения транслированных кодов вещественных приложений приносится совместимость, другими словами, часть архитектурных особенностей перестает корректно отображаться, либо вносимые ограничения не позволяют достичь желаемой производительности на двоично-транслированных кодах. Решение данного противоречия максимально эффективными программными средствами, опирающимися на архитектурные особенности исходной и целевой платформ, и обеспечивающими максимально полную двоичную совместимость, является одной из актуальных задач.
Обеспечение высокой производительности двоично-транслированных мультимедийных приложений в некоторых случаях является обязательным требованием. Эффективность мультимедийных приложений в большей степени зависит от алгоритмов используемых в их написании. Очевидно, что обработка потоков данных или видеоизображений является хорошо распараллеливаемой задачей [49]. В результате чего, программы, реализующие данную обработку, интенсивно используют вещественную и мультимедийную математические библиотеки. Обеспечение двоичной совместимости такого рода исполняемых кодов осложнено наличием большого числа специфических свойств, в том числе и аппаратно зависимых, у операций обработки вещественного и мультимедийного контекстов. В отличие от большинства целочисленных задач почти все мультимедийные программные продукты, например, семейство медиаплейеров, производят обработку потока данных в реальном времени. Следовательно, гарантировать двоичную совместимость для таких задач необходимое, но не достаточное требование. Важным является также и временной фактор.
Ввиду специфики данной проблематики, существующие на данный момент в мировой практике системы двоичной трансляции [16,25,26,27,29,30,55] не уделяют должного внимания путям решения проблеме повышения производительности двоично- транслированных мультимедийных приложений. Это происходит по нескольким причинам, таким как:
семантика двоичного представления вещественного и мультимедийного
контекстов сложна для анализа и оптимизации, в том числе и
распараллел и ван ия;
в существующих аппаратных реализациях не достаточно средств для
обеспечения возможности распараллеливания вещественных вычислений;
- возникает необходимость применения новых специализированных методов
обработки данных контекстов.
Поэтому предлагаемые данными системами решения либо гарантируют полную двоичную совместимость такого рода кодов при низких показателях производительности, либо получают сравнимые с исходными кодами показатели производительности, но только исключительно для ограниченного набора программных приложений. Решение задачи обеспечения полной двоичной совместимости вещественных и мультимедийных кодов при сравнимых с исходными
кодами показателями производительности позволит применить двоично-транслирующие системы на всем множестве существующих программных продуктов.
Цель исследования
Целью диссертационной работы является теоретический анализ проблем двоичной трансляции вещественных и мультимедийных кодов, разработка механизма эффективной реализации технологии их двоичной трансляции с использованием элементов аппаратной поддержки двоично-транслирующей системы, обеспечение полной совместимости двоично-транслированного вещественного и мультимедийного кода с исходной суперскалярной архитектуры Intel х86 (IA32) [7] на целевую архитектуру с явно выраженным параллелизмом Эльбрус ЗМ (ЭЗМ) [8, 9, 10].
В соответствии с этим были определены следующие задачи диссертационного исследования:
Анализ существующих двоично-транслирующих систем (ДТС).
Оценка различных принятых решений в ДТС по обработке вещественного/мультимедийного контекста.
Теоретическая разработка метода повышения производительности ДТС при обработке вещественного и мультимедийного контекстов.
Практическая реализация данного метода в ДТС для архитектуры с явно выраженным параллелизмом команд и механизмами аппаратной поддержки двоичной трансляции.
Научная новизна
Решение поставленных в диссертационной работе задач определяет новизну исследований в области оптимизации вещественного и мультимедийного контекстов. Незначительный прогресс в разработке данной тематики в известных системах двоичной трансляции обуславливается сложностью анализа и обработки вещественного контекста. Ввиду сказанного, кардинально новыми решениями являются:
- методология представления вещественного контекста транслированного с исходной платформы на целевую платформу кода приложений, позволяющая не только упростить полученное представление, но и снять запрет на оптимизацию целого класса операций обработки вещественного контекста; механизмы разделения областей оптимизаций по принципу обработки вещественного или мультимедийного контекста в пределах единого смешанного (вещественного/мультимедийного) исходного кода приложений; разработанный ряд специфических оптимизаций вещественных операций, позволяющих повысить производительность двоично-транслированного кода.
Результаты работы, выносимые на защиту
В диссертационной работе рассматриваются и решаются проблемы оптимизации двоично-транслированных кодов с элементами вещественного и мультимедийного контекста. В качестве инструмента исследований взят оптимизирующий компилятор двоично-транслирующей системы с платформы Intel х86 (IA32) на платформу Эльбрус ЗМ (ЭЗМ) с явно выраженным параллелизмом и аппаратной поддержкой механизмов двоичной трансляции.
В процессе проведения исследований автором получены следующие результаты: предложен метод модификации представления вещественного контекста в неоптимизированном двоично-транслированном коде приложений, в результате работы которого станговиться возможным эффективное применение оптимизирующего компилятора, двоично-транслирующей системы; реализован ряд алгоритмов быстрого (линейной сложности) анализа кода, а также алгоритмов его модификации, построенных наосновании предложенного метода;
разработаны и реализованы алгоритмы обработки смешанного вещественного/мультимедийного кода;
разработан ряд оптимизирующих алгоритмов, специализированных на обработке освобожденного от дополнительной функциональности вещественного контекста.
Практическая ценность
Результаты исследований, выполненных по теме диссертационной работы, нашли практическое применение в следующих программных и аппаратных системах:
оптимизирующий двоичный транслятор с кодов архитектуры Intel х86 на архитектуру Эльбрус-ЗМ, работающий в составе многоязыковой системы программирования "Эльбрус-ЗМ", разработанной в ЗАО "МЦСТ" по заказу МО РФ; - микропроцессор "Эльбрус-ЗМ", разработанный в ЗАО "МЦСТ", обеспечивающий совместимость с рядом архитектурных платформ, в том числе с Intel х86.
Апробация
Основные положения диссертационной работы докладывались и обсуждались на научно-технических конференциях Московского-Физико-Технического Института, Международной молодежной научной конференции «XXX Гагаринские чтения», презентациях оптимизирующей двоично-транслирующей системы, разработанных для фиры Intel.
Публикации
Автором опубликовано 9 печатных работ по теме диссертационной работы:
Статья «Оптимизация обработки вещественного контекста в двоично-оптимизирующей системе». Информационные технологии и вычислительные системы 3/2004.
Статья «Обработка смешанного вещественного/мультимедийного контекста в оптимизирующих двоично-транслирующих системах». Компьютеры в учебном процессе. 9/2005.
Статья «Оптимизирующая двоичная трансляция вещественных приложений». Информационные технологии. 6/2006.
Статья «Специфика оптимизации вещественных приложений в оптимизирующем двоичном компиляторе». Компьютеры в учебном процессе. 3/2006.
Статья «Методика представления конвейера при формальной верификации микропроцессоров». Информационные технологии и вычислительные системы 1/1999.
Статья «Совместимость MPEG-1 и MPEG-2 стандартов». Информационные технологии и вычислительные системы. Сборник научных трудов ИМВС РАН, 2002.
Тезисы доклада «Обработка вещественного контекста в оптимизирующей двоично-транслирующей системе». XXI научно-техническая конференция войсковой части 03425. - М.:, в/ч 03425, 2003.
Тезисы доклада «Метод повышения производительности вещественных и мультимедийных кодов в процессе двоичной трансляции с архитектуры Intel х86 IA32 на архитектуру с явно выраженным параллелизмом». XXXI Гагаринские чтения, международная молодежная научная конференция, Москва, 2005 Том 4.
Тезисы доклада «Специфические оптимизации вещественных кодов в процессе оптимизирующей двоичной трансляции с архитектуры Intel х86 на архитектуру Эльбрус-ЗМ», XXXII Гагаринские чтения, международная молодежная научная конференция, Москва, 2006.
Структура и объем работы
Работа состоит из введения, трех глав и заключения.
В первой главе диссертационной работы рассматривается вопрос описания двоично-транслирующей системы и ее отличия от других способов обработки двоичных кодов. В процессе описания двоично-транслирующей системы поднимается проблематика совместимости микропроцессорных архитектур, вводится ряд понятий, которыми оперирует работа.
При классификации существующих на сегодняшний день двоично-транслирующих систем затрагиваются проблемы двоичной трансляции. На их фоне строятся критерии построения наиболее эффективной модели двоично-транслирующей системы, подчеркивается роль оптимизирующей компоненты в составе двоично-транслирующей системы, проводится обзор решаемых ею задач.
В главе также вводится важнейшее сточки зрения данной работы понятие двоичной трансляции вещественного контекста. Дано достаточно полное описание вещественного контекста исходной архитектуры. На основании данного описания вводятся элементы целевой платформы, обеспечивающие семантическую корректность при трансляции вещественного контекста. Кроме того в главе исследуется вопрос оптимизации вещественного контекста, рассматриваются связанные с этим проблемы и возможные пути их решения. Формулируется постановка задачи.
Вторая глава полностью посвящена предлагаемой методике преобразования вещественного контекста с целью решения поставленных в работе задач. Проводится обзорное описание метода переименования, с целью введения в курс дела. Излагаются основные этапы метода переименования:
оптимистические предположения;
анализ применимости; сбор информации;
построение контрольных условий;
механизм переименования;
восстановление контекста.
При описании этапов метода переименования затрагиваются вопросы двоичной совместимости, производительности кода, сложности принимаемых решений. В завершении третьей главы отмечаются все преимущества и недостатки принятых решений, приводятся результаты применения описанной методики.
Третья глава посвящена вопросам расширения областей применимости предложенной во второй главе методики на примере трех наиболее существенных задач, таких как:
обработка недокументированныз особенностей исходной архитектуры;
специфические оптимизации представления вещественного контекста; обработка смешанного вещественного/мультимедийного контекста.
Первый раздел главы посвящен решению задачи адаптации базовой методики к недокументированным особенностям исходной архитектуры.
Второй раздел главы посвящен специфике оптимизаций вещественного контекста. Основу данного раздела составляют алгоритмы, позволяющие найти дополнительные резервы для оптимизации вещественного кода. При описании вводимых алгоритмов акцентируется внимание на тех свойствах вещественного контекста, препятствующих их использованию до момента применения базовой методики. В главе приводятся результаты, которых удалось достичь путем применения, описанных ранее оптимизаций.
Заключительный раздел освещает вопрос оптимизации смешанного вещественного и мультимедийного контекста. С этой целью, как и в главе 1, проводится описание мультимедийного контекста исходной архитектуры, а также реализации поддержки данного контекста на целевой платформе. Среди особенностей обработки смешанного контекста особое внимание уделяется проблематики перекрестного использования архитектурных ресурсов вещественным и мультимедийным контекстом. Рассматриваются задачи расширения анализа исходного кода и специфика всех этапов переименования в условиях смешанного кода. Подчеркиваются преимущества и недостатки принятых решений. Завершают раздел результаты, достигнутые при оптимизации смешанного контекста.
В заключении диссертационной работы формулируются результаты работы, полученные автором на основе исследований, проведенных в диссертации, отмечаются возможные пути дальнейших исследований с целью повышения производительности оптимизированных двоично-транслированных кодов.
Структура двоично-транслирующей системы
Существующие на данный момент двоично-транслирующие системы можно разделить по уровню предъявляемых к исходному коду требований на два различных класса: закрытые и открытые системы [5].
Закрытые двоично-транслирующие системы строятся по принципу, что весь код исходного программного продукта становится доступным до момента начала трансляции. Для получения полностью оттранслированного кода в закрытой двоично-транслирующей системе необходимо предоставить все используемые библиотеки, указать случаи динамически создаваемого кода и самомодификации кода. Широко распространенные методы динамически порождаемого кода и динамических библиотек являются недоступными для закрытых двоично-транслирующих систем, что абсолютно лишает их свойства прозрачности двоичной совместимости или, другими словами, степени участия человеческого фактора в работе системы.
В отличие от закрытых систем открытые двоично-транслирующие системы лишены ограничений на использование динамических элементов кода и допускают его модификацию в процессе исполнения. При доступности подобных методов двоично-транслирующей системой гарантируется корректность обработки исходного кода. С данной целью в системе реализуются механизмы контроля целостности исходного кода, автоматического восстановления в случае необходимости и продолжения исполнения без внешнего участия в работе системы. Тем самым в открытых двоично-транслирующих системах реализуются свойства прозрачности, недоступные для закрытых двоично-транслирующих систем.
По схеме работы двоичной трансляции двоично-транслирующие системы можно разделить, также на два класса: статические и динамические системы [15].
Статическая схема двоичной трансляции (рисунок 2) характеризуется разделением этапов двоичной трансляции кода и исполнения двоично-транслированного кода. Такая схема обработки чаще всего используется в закрытых двоично-транслирующих системах, однако возможно ее использовать и в открытых системах при наличии обратных связей. Транслятор анализирует поступаемый в обработку исходный код с целью выделения точек входа по управлению, а также разделение кода и данных.
Дальнейший семантический разбор выделенных пусков кода позволяет построить функционально-эквивалентный код целевой архитектуры. Полученный код сохраняется на внешнем носителе и исполняется по мере обращения к данной задаче. Получаемый таким способом двоично-транслированный код предоставляет максимальную свободу действий оптимизирующей компоненте двоично-транслирующей системы.
В отличие от языковых компиляторов, двоично-транслирующие компиляторы при наличии меньшего количества информации об исходном коде способны применить оптимизации не менее эффективно. В случае положительного решение проблемы исключения дополнительной функциональности у вещественных операций, статиченская схема позволяет произвести максимально эффективную оптимизацию кодов вещественных приложений.
При исполнении полученного двоично-транслированного кода могут возникнуть аварийные ситуации, вызванные возникновением прерываний или генерацией нового кода в момент исполнения. В таком случае в статической схеме присутствует подсистема динамической поддержки процесса исполнения кода. В задачу данной подсистемы входит обеспечение корректного восстановления состояния исходного кода, продолжения вычислений до момента возврата в статический код, а также сбор дополнительной информации о поведении программы и новых точках входа в нее. Восстановление корректного исполнения исходного кода в местах, нераспознанных статической трансляцией, возможно путем использования либо динамической схемы трансляции, либо в режиме покомандного исполнения. Однако оба данных подхода понижают скорость исполнения транслированного кода. Следовательно, максимальная эффективность статической схемы трансляции достигается при наибольшей распознаваемости исходного кода и применимости оптимизаций.
В отличие от статической схемы трансляции динамическая двоичная трансляция (рисунок 3) выполняет генерацию кода небольшими кусками по ходу исполнения задачи. Получаемые участки кода не сохраняются на носителях, а держатся в специальном буфере трансляции для ускорения последующих исполнений ранее пройденных участков. Однако ввиду необходимости попеременного запуска процессов трансляции и исполнения транслированных кодов динамические схемы вынуждены обрабатывать достаточно небольшие куски исходного кода. Также становится невозможным производить оптимизации, отнимающие достаточно много времени. Использование только динамической трансляции не позволяет получить коды с хорошими показателями производительности (сравнимыми с языковыми компиляторами).
Анализ неоптимизированного кода на применимость метода переименования
Важно заметить, что предлагаемый метод основывается на статистическом анализе изменения положения указателя вершины вещественного стека, а также определенности всех позиций вещественного стека в любой точке управляющего графа. Данный подход не единственный из возможных для получения требуемой информации, однако он является самым оптимальным по использованию вычислительных возможностей оптимизирующего компилятора (экономия времени работы самого компилятора), а также по догрузке получаемого после его применения кода дополнительными вычислениями (производительность полученного кода).
Ранее упоминался тот факт, что в рамках целевой архитектуры изменить положение указателя вершины вещественного стека (а он и является основной целью статического анализа) возможно двумя способами: прямой записью в системный регистр BGR нового состояния; - специализированной операцией продвижения указателя вершины вещественного стека ABG, как в сторону увеличения его значения, так и в сторону уменьшения. abgi -увеличить базу вращения глобальных числовых регистров NR; abgd - уменьшить базу вращения глобальных числовых регистров NR. Выполнение:
Непреодолимыми для работы анализа являются точки в неоптимизированном представлении, где невозможно предсказать статическим способом состояние системного регистра BGR, в частности положение указателя вершины вещественного стека. Такие точки в дальнейшем рассмотрении будем называть "полюсами" анализа. К таким точкам можно отнести: прямую запись в регистр BGR; - точки схождения управляющего графа с отличными друг от друга смещениями указателя вершины вещественного стека относительно входов в регион; вызовы библиотечных процедур, модифицирующих тем или иным образом вещественный контекст; циклы, несбалансированные по смещению указателя вершины вещественного стека.
Описанные ранее ситуации возникновения "полюсов" можно подразделить на группы по методам их преодоления: 1.Преодоление путем завершения анализа перед данным полюсом и его возобновлением после прохождения данного полюса. 2.Преодолимый путем совершения модификаций управляющего графа с целью изменения в представлении путей исполнения кода. 3.Абсолютно непреодолимые.
К последней группе можно отнести статистически редкий случай циклов с несбалансированным изменением значения положения указателя вершины вещественного стека (рисунок 11).
В данной ситуации никакой статический анализ не поможет. На каждой итерации цикла в фиксированной точке значение изменение указателя вершины вещественного стека будет различным.
Если случай возникновения несбалансированного по смещению указателя вершины вещественного стека цикла в теле региона является крайне редким, можно сказать экзотическим, то возникновение прямой записи в статусный регистр BGR происходит с изрядной периодичностью в транслированных кодах. Наиболее часто встречаются два варианта записи константного значения в регистр BGR. Это запись нулевого положения указателя стека при полной определенности вещественного стека (RWs Oxff — BGR), а также запись полного сброса битов определенности значений регистров вещественного стека (RWs 0 - BGR). Первая запись возникает перед процедурами, производящими чтение состояния вещественного стека, и на границах окончания исполнения вещественных операций и начала мультимедийных, обрабатываемых на тех же регистрах вещественного стека в режиме его полной определенности и при нулевом смещении указателя. Вторая запись часто используется для инициализации статусного регистра BGR перед вещественными операциями. В частности, команда исходной архитектуры emms производит подобную инициализацию и часть используется для разграничения конца ММХ операций и начала вещественных операций. Операции прямой записи являются полюсами первого типа и требуют произведения разграничения областей анализа до и после их возникновения.
Макровызовы библиотечных процедур, тем или иным образом затрагивающие вещественный контекст, относятся к той же группе, что и операции прямой записи в регистр BGR. Однако в рамках оптимизирующего компилятора макровызовы обладают дополнительной информацией о том, какие элементы исходного контекста они используют либо модифицируют в процессе исполнения. Обладание данной информацией позволяет в случае их возникновения в процессе исполнения вещественного кода производить восстановление только затрагиваемых ими элементов вещественного контекста. Необходимо отметить, что подобных вызовов сравнительно немного и вероятность их возникновения в коде близка к нулю.
Из всех перечисленных групп возникновения "полюсов" случай обнаружения точек схождения управляющего графа с отличными друг от друга относительными смещениями (изменениями положения указателя вершины вещественного стека относительно входа в регион) наиболее распространенный (рисунок 13). Многообразие возникающих ситуаций при несбалансированных по смещению схождений управляющего графа требует использование разных методов (способов) из разрешения.
Специфические оптимизации вещественного контекста
В процессе отладки и тестирования на практике предложенного к рассмотрению в работе метода переименования вещественного контекста была найдена и зафиксирована характерная особенность в поведении исходной архитектуры при обработке вещественных кодов. Вещественная операция FSTP, читающая значение из первого регистра вещественного стека относительно текущего положения указателя вершины стека и затем изменяющая значение указателя на единицу освобождая считанную позицию в стеке, совершает дополнительное действие.
Данная дополнительная функциональность действительна только для операций FSTP, пишущих считанное значение обратно в стек. Отличительной чертой этой функциональности является прописывание бита определенности той позиции вещественного стека, куда совершается запись. Данная особенность иллюстрируется на простом примере, из которого становится видно негативное влияние на введенный ранее метод вещественного переименования. Рассмотрим короткий кусок исходного кода
На момент исполнения команды 8050235: fstp %st (5) состояние статусного регистра BGR в терминах целевой архитектуры было равным 0x3f8. Другими словами, величина указателя вершины вещественного стека была равна 3, а маска определенных значений вещественного стека вполне соответствовала введенной модели анализа стека [11111000]. Соотношение физических регистров исходной архитектуры, битов определенности стека, а также значений вращающихся регистров приведено на рисунке. физические регистры R7 R6 R5 R4 R3 R2 Rl R0 маска определенности 1 1 11 1000 top = 3 вращающиеся регистры st4 st3 st2 stl stO st7 st6 st5 Согласно документации исходной архитектуры состояние стека должно было измениться в приведенное на рисунке и равное 0х4ГО физические регистры R7 R6 R5 R4 R3 R2 Rl R0 маска определенности 11110000 top = 4 вращающиеся регистры st3 st2 stl stO st7 st6 st5 st4
Однако позиция в маске определенности регистров вещественного стека, соответствующая вращающемуся регистру st5 до изменения положения указателя стека, и в которую была совершена запись согласно описанию команды, тоже оказывается определенной. Состояние регистра BGR, соответствующее данному описанию оказывается равным не 0х4ГО, а 0х4П и уже никак не соответствует требованиям оптимистического предположения об однородности регистра состояния вещественного стека BGR.
Ввиду обнаружения незадокументированной особенности в поведении статусного регистра вещественного стека исходной архитектуры в методе переименования пришлось произвести определенные доработки по обнаружению и обработке описанной ситуации. Дополнительные доработки затронули не только сам механизм переименования. Для облегчения анализа подобной ситуации на стадии трансляции были добавлены признаки трансляции именно тех операций FSTP, результат которых пишется обратно в вещественный стек FSTP st(0) - st(x), х = {0, 7}
В коде оптимизирующего компилятора введенный признак был представлен в виде псевдооперации SBGRBs (х). Аббревиатура команды складывается из фразы (Set BGR Bit) установка (определение) бита регистра BGR, а аргументом данной псевдооперации является константное значение позиции вещественного стека, в которую была произведена запись.
При глобальном анализе метода переименования операции SBGRBs обрабатываются по специальному дополнительному алгоритму. Статически собранные данные на момент появления операции в представлении способны однозначно разрешить ситуацию либо в сторону ее безопасности для применимости метода, либо в сторону полной непроходимости анализа.
Согласно собранной информации метод переименования способен собрать статическое значение статусного регистра BGR относительно нулевого смещения на входах в регион анализа. Так, например, в приведенной ситуации подобным значением было бы состояние 0x31В. Имея в распоряжении анализа значение состояния регистра BGR и номер анализируемой позиции относительно все того же нулевого смещения, становится очевидным принимаемое решение. Ncheck_pos = (BGR.top + х) mod8 В примере анализ выглядит: {BGIUop = 3} = N = (3 + 5) mod8 = О { х = 5 }
Следовательно, необходимо проверить определенность нулевой позиции маски определенности на момент проявления операции SBGRB. В примере младшие три позиции, включая и нулевую, не определены. К сожалению, такая ситуация является неразрешимой для предлагаемого метода статического анализа состояния регистра BGR.
В то же время описанная в примере ситуация записи в неопределенную позицию вещественного стека является крайне редкой. И поэтому найденная незадокументированная особенность покрывается дополнительным оптимистическим предположением о редкости описанной ситуации, а в анализе появляется дополнительная проверка введенных на генерации целевого кода псевдоопераций SBGRBs с последующим удалением их из кода.
В рамках применимости метода переименования неоптимизированный код освобождается от ряда существенных ограничений. Вещественные операции теперь не строятся в параллель с контрольными точками, гарантирующими восстановление. В результате механизма переименования операции переводятся в спекулятивный режим исполнения, что позволяет нарушать порядок их исполнения, распараллеливать их. Однако перевод в спекулятивный режим сопряжен с необходимостью тем или иным образом отслеживать возможное нарушение исполнения команд. Другими словами, появляется необходимость контроля диагностической информации при исполнении вещественных операций. В представление оптимизирующего компилятора введена специализированная команда, обеспечивающая такой контроль - TEST VirtReg.
При детальном рассмотрении представления вещественного кода исходной архитектуры можно выделить ряд черт, которые ей присуще. Одной из самых ярких черт можно считать исполнение вещественных вычислений на традиционном наборе команд 80-ти разрядной арифметики. Использование 80-ти разрядной арифметики наследуется архитектурой х86 IA32 с момента выпуска своих первых микропроцессоров. Однако программы, написанные на языках высокого уровня, обыкновенно оперируют форматами (single) 32-х разрядных или (double) 64-х разрядных представлений вещественных данных. Ввиду такого рода постановки возникает неоптимальность получаемого исходного кода, так как даже для простого вещественного сложения необходимо произвести расширение формата данных, сложение обратно, сужение формата.
Обилие операций преобразования формата в транслированном с исходной архитектуры коде значительно замедляет его исполнение, так как они обладают меньшей степенью свободы исполнения на архитектуре с явно выраженным параллелизмом.
Трансляция вещественных операций с исходной архитектуры производится путем подстановки их аналогов из набора команд целевой архитектуры. Используемые для этих целей команды составляют лишь малую часть того многообразия вещественных команд, введенных на целевой архитектуре. Например, наряду с командой вещественного сложения двух 80-ти разрядных операндов с записью в 80-ти разрядный результат. Существует целое семейство вещественных операций сложения (FXADDxx).
Обработка смешанного мультимедийного/вещественного контекста
Для обеспечения сохранности свойства двоичной совместимости мультимедийного контекста на целевой архитектуре были добавлены элементы контекста, позволяющие корректно отобразить весь мультимедийный контекст исходной архитектуры.
При описании элементов мультимедийного контекста исходной архитектуры отмечалось, что 64 битовые ММХ регистры данных мапируются (отображаются) на младшие части 80 битовых регистров вещественного стека. Представление отображения вещественного стека довольно полно приводилось в п.2.1.2. Отличительной особенностью отображения ММХ регистров является всегда определенное состояние статусного регистра BGR: нулевое значение положения указателя вершины вещественного стека
Отображение мультимедийного SSE контекста более широко, чем ММХ контекста. Регистр MXCSR, совмещающий функции контроля и отображения статусного состояния SSE контекста, полностью перенесен на свой аналог на целевой архитектуре PFPFR (Packed Floating Point Flag Register).
При отображении восьми 128 битовых регистров SSE контекста возник неприятный для разработчиков оптимизирующего компилятора казус. Просто не хватило 64 битовых глобальных регистров целевой архитектуры. Поэтому было принято решение произвести размещение максимально возможного количества xmm регистров на глобальных регистрах, а остальные разместить в памяти целевой архитектуры.
Таким образом, исходный мультимедийный контекст на целевой архитектуре отображается с помощью ( рисунок 35): глобальных регистров с G14 по G23, хранящих текущие значения SSE регистров xmmO- xmm4; элементов памяти целевой архитектуры, хранящих текущие значения SSE регистров xmm5 - xmm7; контрольного и статусного регистра SSE контекста PFPFR; глобальных регистров G24 - G31, хранящих значения плавающего стека, на котором в свою очередь хранятся значения ММХ регистров; статусного регистра BGR. переводимого в рабочее мультимедийное состояние любой первой командой обработки ММХ контекста. 0 64 Gd23 с» зі 0 128 контекста на целевой архитектуре.
Перечисленные элементы целевой архитектуры позволяют полностью промоделировать обработку мультимедийного контекста исходной архитектуры. Важно отметить тот факт, что обращение мультимедийных ММХ операций к регистрам вещественного стека происходит всегда при полной валидации всех его позиций и нулевом положении указателя вершины вещественного стека.
Применение метода переименования к элементам мультимедийного контекста позволяет, как и в случае с вещественным контекстом, перенести всю обработку на рабочие регистры целевой архитектуры, что в свою очередь позволяет более эффективно оптимизировать код с элементами мультимедийного характера.
Переименование SSE класса операций сводится к трехуровневой схеме обработки:
1. Распаковка с глобальных регистров и из памяти 8-ми xmm регистров, а также первоначального состояния PFPFR.
2. Переименование в теле региона всех обращений к xmm регистрам и модификации чтений и записей регистра PFPFR аналогично обработке регистра FPCR вещественного контекста.
3. Запаковка по мере необходимости модифицированных значений. Переименование ММХ класса операций повторяет ту же схему, что и SSE операции с небольшим дополнением, касающимся обращений к вещественному стеку. Любая ММХ операция модифицирует состояние регистра BGR в инициализированное ММХ состояние: положение указателя вершины вещественного стека равно нулю, а все значения стека доступны. Система команд исходной архитектуры позволяет сбросить инициализированное ММХ состояние регистра BGR в состояние полностью пустого стека. Данное действие выполняет операция emms, интерпретируемая на целевую архитектуру в виде RWs 0 — BGR. При условии, что каждая ММХ операция работает при инициализированном ММХ состоянии регистра BGR, никаких продвижений указателя вершины вещественного стека нет и не нужно. Процесс переименования можно производить без какого-либо дополнительного анализа и построения контрольных условий на входах в регион (рисунок 36).
Во избежание введения неоптимальности постоянной необходимости записи инициализированного состояния BGR на стадии трансляции кода операция записи в регистр BGR строится только в началах ММХ блоков, а сброс данного состояния -только на выходах из таких блоков или региона, если операции ММХ класса присутствуют в коде до самых выходов.
Убедившись, что применение предложенного в рамках диссертационной работы метода переименования возможно не только к вещественному, но и к мультимедийному коду, рассмотрим смешанный код. Самый простой способ получения подобного кода на исходной архитектуре заключается в выставлении дополнительного флага компиляции вещественного теста языковым компилятором ice, позволяющим оптимизировать код путем замены части арифметики мультимедийными операциями. Очевидно, что если в результирующем коде операции вещественного и мультимедийного контекста будут часто чередоваться, то даже на исходной платформе данный код будет работать крайне медленно.
Основная проблема потери производительности заключается в постоянной необходимости переключения контекста. Возникает необходимость в случае использования метода переименования точно знать точки кода, где закончилась обработка одного и началась обработка другого контекста. Подобная задача возникает только в случае конфликтов по ресурсам. Другими словами, обработка вещественного контекста никоим образом не пересекается с обработкой SSE контекста. Конфликт возникает при обращениях к вещественному стеку, то есть при обработке ММХ контекста в рамках вещественного кода.
Знание точек переключения контекста позволяет рассматривать их как блокирующие продолжение анализа полюса. До возникновения подобного полюса производятся описанные в методе переименования преобразования с корректной запаковкой непосредственно перед ним. Далее производится распаковка, проверка контрольных условий и работа в рамках уже другого контекста. Однако для получения информации о точках переключения контекста необходимо совершить дополнительный анализ.