Ада-95. Компилятор GNAT

         

Опции оптимизации компилятора


Существует несколько опций командной строки компилятора которые могут быть использованы для общей оптимизации программы:



-O0

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

-O или -O1  - 

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

-O2  - 

Экстенсивная оптимизация, позволяющая получить исполнимый файл меньшего размера.

-O3  - 

Полная оптимизация, с выполнением автоматической встроенной подстановки (inline) для подпрограмм и циклов маленького размера. Позволяет получить наиболее быстро исполняемый код.

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

При этом следует учитывать, что согласно замечаний в GCC FAQ округление вещественных чисел с плавающей точкой может вызвать проблемы при использовании опций командной строки компилятора -O2 и -O3

без одновременного использования опции -ffloat-store

(сохранение вещественных чисел с плавающей точкой вне регистров процессора, что замедляет выполнение программы).

На производительность результирующей программы оказывают влияние опции командной строки компилятора которые управляют встроенной подстановкой (inline):

-gnatn  - 

позволяет осуществлять встроенную подстановку между пакетами, когда директива компилятора Inline

используется в спецификациях пакетов.

-gnatN  - 

позволяет осуществлять автоматическую встроенную подстановку между пакетами (ведет к большему расходу памяти)

отсутствие
-gnatn / -gnatN
 - 

встроенная подстановка между пакетами не осуществляется даже в случаях, когда директива компилятора Inline

используется в спецификациях пакетов.

<


Следует заметить, что использование этих опций требует одновременного использования опции -O, иначе эти опции не приведут к ожидаемому результату.

Кроме того, использование опции -gnatp, которая отключает некоторые несущественные проверки (проверка ограничений и проверка диапазона), может также несколько повысить общую производительность программы.

Следует заметить, что действие этой опции аналогично использованию в исходном тексте директивы компилятора:

pragma Suppress (All_Checks);

Для общей оптимизации программы могут быть также использованы следующие опции gcc

(gnatgcc):

-ffast-math  -  GCC будет игнорировать некоторые требования математических правил ANSI и IEEE.

Например, в результате применения этой опции, перед вызовом функции sqrt

не будет выполняться проверка того, что число имеет не отрицательное значение.

Следует однако учитывать, что хотя применения этой опции может повысить производительность выполнения математических действий, в результате могут быть обнаружены побочные эффекты при использовании библиотек ожидающих соответствие требованиям математических правил ANSI/IEEE.
-fomit-frame-pointer  -  GCC будет освобождать регистры, которые обычно предназначены для сохранения указателя на кадр стека.

Это повышает производительность, но осложняет процесс отладки, поскольку многие утилиты отладки требуют наличие указателя на кадр стека.

Содержание раздела