|
|
|||||||||||||||||||||||||||||
|
Параметр компилятора помогает отлаживать оптимизированный кодИсточник: IBM
Проблема отладки оптимизированного кода Отладка оптимизированного кода всегда была сложной задачей, потому что программа может находиться в состоянии, недоступном для отладчиков. При оптимизации может измениться последовательность операций, добавиться или сократиться код, измениться расположение переменных, и могут произойти другие преобразования, затрудняющие сопоставление сгенерированного кода с оригинальными исходными операторами. Например, если переменная используется только при вычислении выражения, то компилятор может сгенерировать значение конечного выражения непосредственно, не указывая значение переменной в этом месте. Это усложняет процесс отладки, потому что в оптимизированной программе не будет переменной, которую программист ожидал увидеть. Поддержка отладки в IBM XL C/C++ и XL Fortran IBM XL C/C++ и XL Fortran предоставляют набор механизмов для поддержки отладки.
Усовершенствования для отладки оптимизированного кода Параметр отладки -g дополнен возможностью управления поддержкой отладки и упрощает отладку оптимизированного кода, в частности, с использованием уровня -O2. Когда включен уровень оптимизации -O2, поддерживаются все возможности отладки. Если уровень оптимизации выше, чем -O2, возможности отладки ограничены. Параметр отладки -g имеет уровни от 0 до 9.
Поддержка отладки оптимизированного кода улучшается при значениях параметра -g5 и выше, когда становится доступным состояние программы на уровне -O2. Например, рассмотрим отладку следующего фрагмента кода с параметром -g8:
На уровне -O2 без поддержки отладки компилятор может сгенерировать следующий код, где GRX и GRY ― регистры:
Так как программа не вычисляет значения T1 и T2, отладчик не может отобразить правильные значения T1 и T2. При использовании -g8 компилятор создает следующий код:
Программа сохраняет текущие значения T1 и T2 в памяти, так что они доступны для отладчика. Встраивание функций ― один из распространенных методов оптимизации. Но при отладке таких функций создается много проблем. Отладчик даже не распознает, что это встроенная функция, потому что генерируются только записи с номерами строк. После встраивания функций их формальные параметры и локальные переменные могут быть недоступны для отладчика. Для улучшения поддержки отладки компилятор делает область встроенной функции явной, чтобы пользователи могли проследить тело функции по шагам. Пользователи также видят формальные параметры и локальные переменные встроенной функции. Однако пока они не могут "остановиться в функции" и заставить отладчик искать встроенные экземпляры таких функций. Соображения производительности Хотя расширенная поддержка отладки отрицательно влияет на производительность (потому что сохранение состояния программы исключает некоторые возможности оптимизации), компиляторы по-прежнему создают полностью отлаживаемый код, оптимизированный на уровне -O2. Согласно нашим измерениям, при использовании -g8 -O2 время выполнения можно сократить в среднем до 80% по сравнению с -O2 при увеличении времени компиляции на 14%. Конечно, время выполнения и время компиляции в значительной мере зависит от приложения. Чтобы ограничить влияние на производительность, можно также поэкспериментировать с разными уровнями параметра -g. Например, -g5 сохраняет состояние программы только до и после вычислительных циклов, так что эта отладочная информация не мешает алгоритмам оптимизации, применяемым в теле цикла, где они особенно эффективны. Поддержка отладки оптимизированного кода улучшилась. Теперь пользователь может выбирать между возможностями отладки и производительностью. Пока оптимизация с полной поддержкой отладки выполняется только на уровне -O2. Мы продолжаем работу над совершенствованием поддержки отладки на более высоких уровнях оптимизации. Демонстрации и ознакомительные версии:
Ссылки по теме
|
|