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