Компиляторы. интерактивные системы.

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

GNU Compiler Collection (обычно используется сокращение GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.

Изначально названный GNU C Compiler поддерживал только язык Си. Позднее GCC был расширен для компиляции исходных кодов на таких языках программирования, как C++, Objective-C, Java, Фортран, Ada и Go.

Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си, как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением.

ТИПЫ ОПТИМИЗАЦИЙ.

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

• процессорные оптимизации (планирование инструкций, оптимизация под конкретный процессор, автоматическая и ручная диспетчеризация процессоров)

• дополнительные оптимизации (управление точностью вычислений с плавающей точкой, математические библиотеки стандартных функций)

ОПЦИИ ОПТИМИЗАЦИИ

• /Od (Linux: -O0) • Отключает возможности оптимизации• Следует использовать для проведенияотладки и быстрой компиляции• Данную функцию можно использоватьна начальных стадиях разработкиприложения до того момента, когда Выубедитесь в его корректной работе.

• /O1 (Linux: -O0) Оптимизация скорости пока есть благоприятствование размеру кода • O1 может повысить производительность приложений с кодом большого размера и множеством разветвлений, а также сократить время выполнения, устранив код внутри циклов • В большинстве случаев обеспечивает создание кода наименьшего размера • Эта функция применяется для приложений с высокими требованиями к размеру кода и его размещению, как, например, приложения больших баз данных и коды со множеством разветвлений без

использования циклов

• /O2 (Linux: -O2) По умолчанию. Оптимизация скорости приложения. Рекомендуемый уровень • В большинстве случаев создает самый быстрый код, но может увеличить код до размера, значительно превышающего -O1 • Для наилучшей общей производительности при работе с типичными приложениями целочисленных вычислений, которые мало используют вычисления с плавающей запятой

• /O3 (Linux: -O3) (Оптимизации высокого уровня) Включает /O2 на ряду с более агрессивными оптимизациями

• Иногда может замедлить код в сравнении с /O2 • Рекомендуется для приложений с циклами, интенсивно использующими вычисления с плавающей точкой, и для обработки больших массивов данных • Использование этой функции может увеличить время компиляции • Повышение производительности зависит от типа приложения; производительность некоторых приложений может остаться прежней

• -fast Увеличивает скорость работы всей программы:

i64 Linux: Поддерживает -O3 -ipo -static

i64 Windows: Поддерживает -O3 -Qipo (Qipo ~ ipo)

i32 Linux: Поддерживает -O3 -ipo -static -xP (-xP – векторизация)

i32 Windows: Поддерживает -O3 -Qipo -QxP

IPO (Interprocedural Optimization)– межпроцедурный анализ и оптимизации, которые делает компилятор над нашим кодом. Подключается он опцией -ipo и позволяет проводить оптимизации не для одного отдельного файла с исходным кодом, а для всех исходников одновременно. В этом случае компилятор знает намного больше и может сделать значительно больше выводов и, соответственно, преобразований/оптимизаций. При компиляции с -ipo меняется привычный нам порядок компиляции и линковки.

• -ip (между процедурами) • -ipo (между процедурами и между исходными файлами)

-static – Предотвращает линкование с общими библиотеками

ОТЛАДКА

• Используйте опции /Zi (Windows) и –g (Linux) для генерации информации символьной отладки (symbolic debugging), которую используют инструментальные средства анализа производительности. • Создает информацию по отладке • Добавляет информацию в объектный файл с тем, чтобы любая отдельная сборочная линия могла быть связана с соответствующим кодом • Выберите эту функцию наряду с требуемым вариантом оптимизации, например, -O2. В противном случае -Od (Linux: -O0) выбирается по умолчанию



Наши рекомендации