Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Межпроцедурный анализ указателей. Дроздов

Межпроцедурный анализ указателей. Дроздов, страница 7

PDF-файл Межпроцедурный анализ указателей. Дроздов, страница 7 Конструирование компиляторов (53440): Статья - 7 семестрМежпроцедурный анализ указателей. Дроздов: Конструирование компиляторов - PDF, страница 7 (53440) - СтудИзба2019-09-18СтудИзба

Описание файла

PDF-файл из архива "Межпроцедурный анализ указателей. Дроздов", который расположен в категории "". Всё это находится в предмете "конструирование компиляторов" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 7 страницы из PDF

Наличие же подобной информацииможет привести к более точной работе некоторых оптимизаций.Тем не менее, не следует рассматривать информацию о том, с какими фрагментамипамяти работает операция, как безусловное уточнение унаследованной информации.Ниже приведен пример (рис. 8), который показывает, что информация опользовательских именах в операции может давать более консервативный ответ озависимости между операциями.int a, b;voidh(void){f(&a, &b);f(&b, &a);}voidf(int*p, int*q){g(p, q);}voidg(int *par1, int *par2){*par1=0;*par2=0;}Рис. 8.

Пример показывает, что трансляция в пользовательские именаможет давать более грубый ответ.Если у функций f и g нет никаких других вызывающих контекстов, кроме тех, чтоуказаны в примере, то анализ определит, что обе операции записи процедуры g никогдане конфликтуют (им будут соответствовать разные нелокальные имена). Однакомножества пользовательских имен, с которыми эти операции работают, будутсовпадать.Рассмотренный пример показывает также, что поддержание в процессе анализасоответствия между нелокальными блоками и пользовательским именам, не решаетпроблемы.

Второй вызов функции f приведет к тому, что её ЧТФ будет использованабез дополнительного пересчета, ибо новый вызывающий контексте полностьюсовпадает с областью определения ЧТФ. Но в этом случае информация о новыхзначениях параметров не достигает процедуры g. Этого можно было бы избежать, есливключить в область определения ЧТФ те частные значения, которые принимали её РП.Но такое решение почти полностью лишает предложенный алгоритм возможностипереиспользования ЧТФ, что делает его неприменимым на практике. Для решенияуказанной проблемы предлагается следующий подход.После того, как отработала моноверсия алгоритма анализ, строится полный графвызовов программы. Затем выполняется следующее преобразование: каждаясильносвязная компонента этого графа стягивается в один узел.

Множество вершинполучившегося графа взаимнооднозначно со множеством ЧТФ, которые былипостроены в процессе проведения анализа. Получившийся граф являетсяациклическим. В узел этого графа, который соответствует ЧТФ главной процедурепрограммы не входит ни одна дуга. Начиная с этого узла, на графе проводится RPOнумерацию. После чего запускается процедура InheritUserNames (её псевдокодприведен на рис. 9), которая реализует алгоритм наследования в операцияхпользовательских имен.func InheritUserNames( ptf_graph){foreach i = 1 to NodeNumber(ptf_graph) {ptf = GetPtfByNumber(ptf_graph, i);foreach proc ∈ ptf and each node n ∈ ptf.proc.cfg {if ( n is call ) {/* Наследуем результаты для операции n.call */InheritNamesForNodeOpers(n);/* Для процедур, вызываемых из ЧТФ, строимфункцию связывания для нелокальных блоков.

*/foreach proc ∈ n {tgt_ptf = GetPtfByProc(proc);ConstructBindingFunction( n, tgt_ptf);endfor;} else if ( n is assign ) {/* Для операций работы с памятью, принадлежащихузлу n, наследуем результаты в терминахпользовательских имен */InheritNamesForNodeOpers(n);}endfor;endfor;}Рис. 9. Псевдокод функции наследования результатов анализав терминах пользовательских имен.В силу ацикличности графа и упомянутого ранее свойства RPO-нумерации, любой узелбудет обрабатываться лишь после того, как будут обработаны все егопредшественники, а, следовательно, станут известны объединенные значения всехфункций связывания во всех возможных вызывающих контекстах.

За вычисление такойфункции связывания отвечает процедура ConstructBindingFunction. Кроме того, всезначения функции связывания могут быть выражены в терминах пользовательскихимен. В самом деле, в ЧТФ, которая содержит главную процедуру программы, нетникаких имен, кроме пользовательских. Следовательно, для ЧТФ тех процедур,которые вызываются из неё, функция связывания будет содержать толькопользовательские имена.

Пусть теперь есть процедура, объединенная функциясвязывания которой содержит только пользовательские имена. Тогда для любой ЧТФпроцедуры, вызываемой из рассматриваемой процедуры, функцию связываниястроится так, как это делалось во время анализа. После этого все нелокальные имена,которые вошли во множество её значений, заменяются на пользовательские имена изфункции связывания рассматриваемой ЧТФ. Когда для каждого нелокального имениизвестно множество пользовательских имен, которое оно выражает, в операцияхпроцедуры (READ, WRITE, CALL) производятся соответствующие замены.РезультатыВ этой части работы приводятся результаты работы алгоритма анализа на некоторыхзадачах из тестовых пакетов SpecInt92 и SpecInt95.

Замеры проводились на машине соследующими характеристиками: Pentium Xeon CPU 3.06Hz, cashe size 512KB. Та версияалгоритма анализа, которая использовалась для получения нижеприведенныхрезультатов, обладал следующими характеристиками:••••моноверсия (единственная ЧТФ для процедуры);flow-insensitive (нечувствительность к потоку управления процедуры);не различаются имена одного блока имен;включены эвристики, ускоряющие сходимость анализа на рекурсивных циклах.Сложность каждой из приведенных в табл.

1 задачи характеризуется такимипараметрами, как:•число строк исходного кода задачи (строки).•число пользовательских процедур в задаче (проц.).•число процедур в самом большом рекурсивном цикле задачи (ССК – сильносвязная компонента).Работа алгоритма анализа на указанных задачах характеризуется следующимипараметрами:•временем работы алгоритма на указанной машине, выраженное в секундах(время);•степень переиспользования ЧТФ без дополнительного анализа (переисп.). Этотпараметр показывает среднее значение по всем обработанным процедурам отследующей величины: процентное отношение числа вызывающих контекстов, вкоторых ЧТФ процедуры была переиспользована без дополнительного анализа, к числувсех вызывающих контекстов этой процедуры, которые встретились в процессеанализа.•степень порывов зависимостей (разрывы). Этот параметр показывает среднеезначение по всем процедурам от следующей величины: процентное отношение числапорванных зависимостей к числу всех возможных пар операций READ, WRITE и CALLданной процедуры.Табл.1Результаты анализа на тестах из пакетов SpecInt92 и SpecInt95.Название тестаSpecInt92008.espresso022.li023.eqntott026.compress072.sc085.gccSpecInt95099.go124.m88ksim129.compress130.li134.perl147.vortexстрокипроц.ССКвремяпереисп.разрывы1350074133376150380868452438238062161661689231311735091621124150879.5%88.5%70.9%61.5%64.8%51.4%72.9%52.5%84.4%62.3%28547179391420691623678526333942863037329810721110311263792011895429075.2%83.7%68.5%87.9%89.5%79.3%71.2%64.0%47.8%53.0%68.1%50.9%Анализируя приведенные результаты, не сложно заметить, что время работы алгоритмазависит, во многом, не столько от величины анализируемой задачи (число её строк ипроцедур), сколько от размеров рекурсивных циклов этой задачи.

Именно это являетсяобоснованием того особого внимания, которое в описанной схеме их обработки. Крометого, следует отметить, что степень переиспользования ЧТФ весьма высока. Этосвидетельствует о том, что предложенные эвристики позволяют довольно быстрообобщить область определения ЧТФ процедур задачи для применения её во всехвызывающих контекстах данной процедуры.ЗаключениеНа сегодняшний день существует много хороших алгоритмов, которые решают задачумежпроцедурного анализа указателей с достаточной степенью детализации на уровнеодной процедуры [6].

Однако все они крайне консервативны на межпроцедурномуровне. Попытки создать алгоритм, обладающий хорошей межпроцедурнойдетализацией анализа, свелись к двум основным подходам. Первый из них основан наиспользовании графа активаций процедур; при таком подходе результаты анализапривязываются к его узлам [4]. Но в силу того, что размер этого графа растетэкспоненциально с увеличением некоторых параметров анализируемой программы, напрактике данный подход оказывается применимым для анализа только оченьнебольших программ.Второй подход основан на использовании описанного механизма ЧТФ имоделировании стека вызовов в процессе работы алгоритма.

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

Основная идея модификации состоит в том, что сильно-связныекомпоненты графа вызовов рассматривается как единое целое. Для всех процедур,входящих в цикл используется одна и та же ЧТФ. В результате этого теряется степеньдетализации результатов анализа, но происходит выигрыш в скорости его работы.Другими новшествами данной работы следует считать:•механизм наследования результатов анализа при таких межпроцедурныхпреобразованиях, как inline-подстановка и cloning.•механизм наследования результатов, выраженных в терминах пользовательскихимен.•гибкий механизм управления чувствительности анализа к контексту (contextsensitivity level).•алгоритм сравнения вызывающих контекстов и принятия решения опереприменимости ЧТФ.•система эвристик, ускоряющая сходимость алгоритма.Предлагаемый алгоритм тестировался на задачах из пакетов SPECint92 и SPECint95 [7].На входящих в эти пакеты приложениях модифицированный алгоритм показалхорошее время работы с минимальными потерями в точности вычисляемойинформации.Список литературы1.

Steven S. Muchnik “Advanced Compiler Design and Implementation”, MorganKaufmann Publishers, San Francisco CA.2. Brian R. Murphy, Monica S. Lam “Program Analysis with Partial TransferFunction”, Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluationand semantics-based program manipulation, January, 1999, pages 94-103.3.

Robert P. Wilson, Monica S. Lam “Efficient Context-Sensitive Pointer Analysis CPrograms”, ACM SIGPLAN, Conference on Programming Language Design andImplementation, June 1995.4. Maryam Emami “A practical interprocedural alias analysis foroptimizing/parallelizing C compiler”. Master’s thesis, School of Computer Science,McGill University, August 1993.5. P. Cousot, R. Cousot, “Abstract interpretation framework”. Journal of logic andComputation, 2(4) 511-547, August 1992.6.

Marc Shapiro, Susan Horwitz “Fast and Flow-Insensitive Points-To Analysis”.Proceedings of 24th ACM SIGPLAN-SIGACT symposium of programming language,pp.1-14, Paris, France, January (1997).7. Standard Performance Evaluation Corporation (www.spec.org)..

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