+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.01 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Параметр компилятора помогает отлаживать оптимизированный код

22.04.2013 12:30

Проблема отладки оптимизированного кода

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

Поддержка отладки в IBM XL C/C++ и XL Fortran

IBM XL C/C++ и XL Fortran предоставляют набор механизмов для поддержки отладки.

  • Параметр компилятора -g генерирует отладочную информацию для символьного отладчика. Он обеспечивает полную поддержку отладки кода без оптимизации, но плохо работает с оптимизированным кодом. Как говорилось в предыдущем разделе, состояние программы при оптимизации не сохраняется.
  • Параметр компилятора -qkeepparm ориентирован главным образом на параметры процедуры. Он гарантирует доступность для отладчика начальных значений параметров процедуры даже при оптимизации. Это оказывает незначительное влияние на производительность при выполнении программы. Затем параметр -qkeepparm предоставляет отладчику доступ к значениям входящих параметров, просто сохраняя эти значения в стеке.
  • Параметр компилятора -qoptdebug по завершении некоторых высокоуровневых преобразований создает измененный исходный код, соответствующий оптимизированному коду. Этот псевдокод лучше сопоставим с инструкциями и значениями оптимизированный программы, чем первоначальный исходный код. Когда программа, скомпилированная с этим параметром, загружается в отладчик, отлаживается псевдокод, а не исходный код.

Усовершенствования для отладки оптимизированного кода

Параметр отладки -g дополнен возможностью управления поддержкой отладки и упрощает отладку оптимизированного кода, в частности, с использованием уровня -O2. Когда включен уровень оптимизации -O2, поддерживаются все возможности отладки. Если уровень оптимизации выше, чем -O2, возможности отладки ограничены. Параметр отладки -g имеет уровни от 0 до 9.

  • -g0: отладочные данные не генерируются. Состояние программы не сохраняется (наилучшая производительность).
  • -g1: создается отладочная информация о номерах строк и именах исходных файлов. Состояние программы не сохраняется.
  • -g2: создается отладочная информация о типах, номерах строк, именах исходных файлов, а также отладочная информация о переменных ― только для отображения. При оптимизации кода состояние программы не гарантировано.
  • -g3, -g4: то же, что и для -g2, плюс то, что в начале каждой процедуры отладчику доступны значения ее параметров.
  • -g5, -g6, -g7: то же, что и для -g3 и -g4, плюс то, что отладчику доступно состояние программы в следующих избранных конструкциях языка на уровне -O2:
    • до и после циклов;
    • до и после операторов условного перехода;
    • до и после вызовов функций, а также первого исполняемого оператора функции.
  • -g8: то же, что и для -g3 и -g4, плюс то, что отладчику доступно состояние программы в начале каждого исполняемого оператора на уровне -O2.
  • -g9: то же, что и для -g8, плюс то, что пользователи могут изменять переменную в отладчике на уровне -O2. Возможность изменять переменную в отладчике также является поведением по умолчанию при отладке неоптимизированного кода (наилучшая поддержка отладки).

Поддержка отладки оптимизированного кода улучшается при значениях параметра -g5 и выше, когда становится доступным состояние программы на уровне -O2. Например, рассмотрим отладку следующего фрагмента кода с параметром -g8:

T1 = X * Y - 1;

T2 = X * Y * 3;

Q = T1 + T2;


На уровне -O2 без поддержки отладки компилятор может сгенерировать следующий код, где GRX и GRY ― регистры:

GRX = X * Y;

GRY = GRX << 2;

Q = GRY вЂ" 1;


Так как программа не вычисляет значения T1 и T2, отладчик не может отобразить правильные значения T1 и T2.

При использовании -g8 компилятор создает следующий код:

GRX = X * Y;

GRY = GRX << 2;

T1 = GRY вЂ" 1;

T2 вЂ" GRY вЂ" GRX;

Q = GRY вЂ" 1;


Программа сохраняет текущие значения T1 и T2 в памяти, так что они доступны для отладчика.

Отладка встроенной функции

Встраивание функций ― один из распространенных методов оптимизации. Но при отладке таких функций создается много проблем. Отладчик даже не распознает, что это встроенная функция, потому что генерируются только записи с номерами строк. После встраивания функций их формальные параметры и локальные переменные могут быть недоступны для отладчика.

Для улучшения поддержки отладки компилятор делает область встроенной функции явной, чтобы пользователи могли проследить тело функции по шагам. Пользователи также видят формальные параметры и локальные переменные встроенной функции. Однако пока они не могут "остановиться в функции" и заставить отладчик искать встроенные экземпляры таких функций.

Соображения производительности

Хотя расширенная поддержка отладки отрицательно влияет на производительность (потому что сохранение состояния программы исключает некоторые возможности оптимизации), компиляторы по-прежнему создают полностью отлаживаемый код, оптимизированный на уровне -O2. Согласно нашим измерениям, при использовании -g8 -O2 время выполнения можно сократить в среднем до 80% по сравнению с -O2 при увеличении времени компиляции на 14%. Конечно, время выполнения и время компиляции в значительной мере зависит от приложения.

Чтобы ограничить влияние на производительность, можно также поэкспериментировать с разными уровнями параметра -g. Например, -g5 сохраняет состояние программы только до и после вычислительных циклов, так что эта отладочная информация не мешает алгоритмам оптимизации, применяемым в теле цикла, где они особенно эффективны.

Заключение

Поддержка отладки оптимизированного кода улучшилась. Теперь пользователь может выбирать между возможностями отладки и производительностью. Пока оптимизация с полной поддержкой отладки выполняется только на уровне -O2. Мы продолжаем работу над совершенствованием поддержки отладки на более высоких уровнях оптимизации.

Демонстрации и ознакомительные версии:

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

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



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года