Главная » Просмотр файлов » А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий

А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (1114947), страница 147

Файл №1114947 А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий) 147 страницаА.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (1114947) страница 1472019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 147)

Обозначим значения потока данных непосредственно перед и непосредственно после каждого базового блока В как пч [В] и оит[В] соответственно. Ограничения для пч [В] и оит[В] можно вывести из ограничений на пч [в] и оит [а] для различных инструкций з в базовом блоке В следующим образом. Предположим, что блок В состоит из инструкций аи...,в„в указанном порядке. Если в1 — первая инструкция базового блока В, то пч[В] = пч[з1]. Аналогично если а„ вЂ” последняя инструкция базового блока В, то оит[В] = = оит[а„,]. Передаточная функция базового блока В, которую мы обозначим как 5у, может быть получена как композиция передаточных функций инструкций базового блока.

Пусть у,, — передаточная функция для инструкции аь Тогда Ун = = — г",„о . о гвв с ~„. Соотношение между началом блока и его концом имеет вид оит[В] = ~н (пч [В]) Ограничения, накладываемые потоком управления между базовыми блоками, можно легко переписать, заменяя пч [В] и оит [В] на пч [з1] и оит [а„] соответственно. Например, если значения потока данных представляют собой информацию о множествах констант, которые могут быть присвоены переменным, то мы получаем задачу прямого потока, в которой пч[В] =[ ] оит [Р] ~г Р— пввдшественвик В При обратном потоке — например, как мы вскоре увидим, в случае анализа живых переменных — уравнения аналогичны, но пч и оит меняются местами, т.е.

пч [В] = ун (оит[В]) оит[В] = О пч[В] В отличие от линейных арифметических уравнений, уравнения потоков данных обычно не имеют единственного решения. Наша цель заключается в том, чтобы найти наиболее "точное" решение, которое удовлетворяет двум множествам ограничений: ограничениям потока управления и ограничениям передачи. Иначе говоря, нам нужно решение, которое приводит к корректному улучшению кода и не допускает небезопасных преобразований, которые могут изменить результат вычислений компьютера. Этот вопрос вкратце рассматривается во врезке "Консерватизм анализа потоков данных" и более подробно — в разделе 9.3.4.

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

Если фиктивное определение х достигает точки р, где х может быть использовано, то возможно использование этой переменной до ее определения. Заметим, что никогда нельзя быть абсолютно уверенным, что в программе имеется ошибка, поскольку могут быть причины (возможно, со сложным логическим доказательством), по которым путь р, на котором нет реального определения х, никогда не будет пройден. 9.2.4 Достигающие определения Достигающие определения (геас!т!пя г)ебп!йопя) — одна из наиболее распространенных и полезных схем потока данных. Зная, где именно в программе может быть определена каждая переменная х при достижении потоком управления каждой точки р.

можно получить много информации об этой переменной. В частности„компилятор может выяснить, является ли х константой в точке р, а отладчик может сообщить о возможном использовании в точке р не инициализированной переменной х. Мы говорим, что определение е! досглигаепг точки р, если существует путь от точки, непосредственно следующей за г1, к точке р, такой, что д не уничтожается вдоль этого пути. Мы уничтожаем (Ы1!) определение переменной х, если существует иное определение х где-то вдоль путиз. Интуитивно понятно, что, если определение д некоторой переменной х достигает точки р, то г! может быть местом, где последний раз определяется значение х, используемое в р. Определением переменной х является инструкция, которая присваивает или может присваивать значение переменной х.

Параметры процедур, обращения к массивам и косвенные обращения могут использовать псевдонимы, так что не так легко сказать, обращается ли некоторая инструкция к конкретной переменной х. Анализ программы должен быть консервативным: если мы не знаем, присваивает ли инструкция а значение переменной х, то мы должны считать, что она может сделать это, т.е. что переменная х после инструкции я может иметь либо исходное значение, бывшее у нее до инструкции в, либо новое значение, созданное гь Для простоты в оставшейся части главы предполагается, что мы работаем только с переменными, не имеющими псевдонимов. Этот класс пере- 'Заметим, что путь может иметь циклы, так что можно прийти к другому определению Н вдоль пути, который не уничтожает г!.

726 Глава 9. Машинно-независимые оптимизации менных включает все локальные скалярные переменные в большинстве языков программирования; в случае С и С++ исключаются локальные переменные, адре- са которых были вычислены в некоторой точке программы. Пример 9.9. На рис. 9.13 показан граф потока с семью определениями. Нас интересуют определения, достигающие блока Вз. Все определения в блоке В| достигают начала блока Вз.

Определение йз . з = ) — 1 в блоке Вз также достигает начала блока Вз, поскольку других определений з в цикле, приводящем к началу блока Вз, нет. Однако это определение уничтожает определение в(з . )' = п, не позволяя ему достичь блоков Вз или В4. Инструкция г(4: г = в+1 в Вз недостигает начала Вз, поскольку переменная г всегда переопределяется в 1т . ( = иЗ.

Наконец, определение да . а = и2 также достигает начала блока Вз. и авив =(«г иг и, ) В, ( в' г в, вепа = ( ви в' ылв, авив = ( в' вглв =(и, ) явив, =( в, ) Гияв ( ~, '~„) в, Рнс. 9.13. Граф потока для иллюстрации достигающих определений (а == Ь) ииструкцил1г е1ае 1й (а == Ь) ииструкция2; При используемом нами определении достигающих определений иногда допускаются неточности. Однако все они — в безопасном направлении.

Например, вспомним о нашем предположении, что могут быть обойдены все ребра графа потока. На практике это предположение может оказаться неверным. Например, ни для каких значений а и 6 поток управления не сможет достичь инструкции 2 в приведенном далее фрагменте: 9.2. Введение в анализ потоков данных Консерватизм анализа потоков данных Поскольку все схемы потоков данных вычисляют всего лишь приближения (определяемые всеми возможными путями выполнения программы), следует гарантировать, что любые ошибки будут допущены только в "безопасном направлении".

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

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

Таким образом, мы допускаем наличие путей, которые не могут быть пройдены при выполнении программы, и разрешаем определениям проходить через неоднозначные определения той же переменной. 728 Глава 9. Машинно-независимые оптимизации Уравнения передачи для достигающих определений Теперь займемся ограничениями для задачи достигающих определений. Начнем с детального изучения единственной инструкции. Рассмотрим определение и =ч+и Здесь, как и в большинстве случаев далее, + обозначает обобщенный бинарный оператор.

Эта инструкция "генерирует" определение П переменной и и "уничтожает" все другие определения этой переменной в программе. Передаточная функция определения д может быть записана как ~а (х) = 8епа О (х — Ы1а) (9.!) Здесь Пепл — — (Н) — множество определений, генерируемых инструкцией, а Ы!а— множество всех прочих определений и в программе. Как говорилось в разделе 9.2.2, передаточная функция базового блока может быть получена путем композиции передаточных функций содержащихся в нем инструкций. Композиция функций вида !9.1), о котором мы будем говорить как о "виде !или форме) дел-lоП", имеет тот же вид, что легко увидеть.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6392
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее