23:18 Вышел GCC 4.3.4 | ||
По сравнению с GCC 4.3.3 главные изменения коснулись исправления накопившихся регрессий и серьезных ошибок найденных в предыдущей версии.
Следующая корректирующая версия ветки 4.3.x ожидается, вскоре после релиза 4.4.2.
Релиз 4.3.4 уже доступен на всех FTP мира.
GCC - основной компилятор проекта GNU. Он поддерживает набор всех наиболее используемых языков программирования и обеспечивает перенос программ на десятки аппаратных платформ. Все свободно распространяемое программное обеспечение, включая и компиляторы, на том или ином уровне основываются на GCC.
Основные преимущества GCC 4
Четвертая версия привнесла множество изменений в компиляторы GCC, но основное - это улучшенная оптимизация и применение SSA-представлений на основе деревьев (SSA - Static Single Assignment, статическое одноразовое присвоение). Улучшений много, а главное - некоторые режимы оптимизации стали давать более быстрый код и появилась поддержка новых целевых платформ. Также улучшился вывод предупреждений и сообщений об ошибках (например, в ряде случав одни и те же ситуации вызывают уже не предупреждение, как в GCC 3, а ошибку). Но появилось и неудобство: объектные файлы, полученные с помощью GCC 3, несовместимы с GCC 4, поэтому их придется перекомпилировать. Смиримся с этим, так как никакой прогресс не дается даром.
С этой веткой пришли главные изменения, а завершилась она на 4.0.4. Эти версии не объявлены стабильными, поэтому их не рекомендуется использовать для серьезных целей. Изменений множество, но главное - это появление новой модели оптимизации (SSA-формы на основе деревьев) и поддержки автовекторизации.
В предыдущих версиях (до 4) для оптимизации использовалось промежуточное представление на основе RTL (см. выше), которое очень близко к языку ассемблера и напоминает S-выражения языка LISP. Недостаток в том, что оптимизация RTL-представлений сильно зависит от целевой платформы. Оптимизировать на более высоком уровне не удается, так как высокоуровневые выражения теряются на RTL-стадии. Для устранения указанной проблемы были введены SSA-формы на основе дерева, которые далеки и от исходного языка, и от целевой платформы и при этом дают более продвинутый анализ и оптимизацию.
Применение SSA-форм предполагает наличие двух промежуточных представлений. Первое называется GENERIC, состоящее из обычных деревьев, полученных в свою очередь из деревьев исходного текста. Далее GENERIC-деревья преобразуются в GIMPLE-представление и создается граф управляющей логики, необходимый для оптимизации при помощи SSA. Затем SSA-деревья преобразуются в RTL-формы, которые передаются на вход модуля генерации платформенно-зависимого кода. В действительности все не так просто, но смысл состоит именно в появлении новой промежуточной стадии, дающей более эффективную оптимизацию на разных уровнях.
С появлением новой модели стало возможно реализовать новые виды оптимизации. К моменту написания статьи некоторые из них уже добавлены, однако большая часть работы еще впереди - разработчики GCC не пожалеют сил на то, чтобы GCC создавал максимально компактный и быстрый код.
Еще одно интересное новшество GCC 4 - векторизатор циклов, основанный на SSA. Появилась автовекторизация, т.е. автоматическое нахождение последовательных циклов и попытка реализовать их при помощи векторных команд выбранной целевой платформы. В результате получается более компактный и эффективный код. Появился еще один вид оптимизации циклов, который называется планирование на основе свободных модулей (Swing Modulo Scheduling, SMS). Он позволяет загружать конвейер команд процессора таким образом, чтобы минимизировать количество циклов за счет параллелизма на уровне команд.
Наконец, в версии 4.0 обновлен языковой модуль Fortran, поддерживающий не только старый Fortran 77 (как GCC 3), но и Fortran 90 и 95. Множество изменений претерпел
C и C++ . Также отражены особенности языка Ada 2005 и реализована поддержка Ada на большем количестве целевых платформ.Уже имея новую модель оптимизации, начиная с версии 4.1 мы встречаем еще больше видов оптимизации, таких как улучшенная поддержка профилирования и более точная оценка вероятности ветвления. Еще два полезных улучшения - усовершенствованная поддержка inline-функций и способность эффективно использовать наличие разных уровней кэша инструкций. Например, гораздо лучше создавать как inline только функции те, которые вызываются часто, а не все подряд. Поэтому компилятор теперь применяет inline только к "ходовым" участкам кода, в результате чего мы имеем все преимущества inline-вызовов, а получаемый код остается небольшим. Помимо этого GCC классифицирует участки кода на "горячие" (часто используемые) и "холодные" (редко используемые). Код первых группируется вместе, что дает более оптимальную работу кэша инструкций, так как присутствие редких функций в кэше снижает его эффективность.
Языковой модуль претерпел изменения; в частности, был добавлен интерпретатор Objective-
C++ . Множество обновлений было сделано для базовой библиотеки Java (libgc). В модуль генерации кода добавлена начальная поддержка процессора IBM® System z™ 9-109, которая включает в себя операции с 128-разрядными числами с плавающей запятой (согласно стандарту IEEE - Institute of Electrical and Electronics Engineers, Институт инженеров по электротехнике и электронике) и встроенные атомарные операции с памятью. И это далеко не все. Теперь в создаваемый двоичный код можно добавить защиту от атаки на срыв стека, что достигается путем обнаружения переполнения буферов и благодаря переупорядочиванию данных во избежание порчи указателей. Некоторые встроенные функции также были наделены защитой от переполнения буферов, однако это не сильно сказалось на скорости их работы.В этой версии улучшения продолжаются - и в области оптимизации, и в сфере поддерживаемых языков и процессорных архитектур. Теперь можно получать код для процессора Sun UltraSPARC T1 (кодовое имя Niagara) и Broadcom SB-1A с MIPS-ядром.
В версии 4.2 изменения не обошли стороной и языковой модуль: подвергся рефакторингу механизм работы с областями видимости в
C++ , а также появилась поддержка расширений потокового ввода/вывода для Fortran 2003. Но самое интересное - в компиляторах C , C++ и Fortran добавлен интерфейс OpenMP, реализованный на основе потоков. За счет OpenMP в получаемом коде достигается параллелизм инструкций и данных.Одним из способов задействовать OpenMP является обрамление с помощью директив препроцессора того участка кода, который нужно выполнить параллельно. Выделенный блок будет выполнен в несколько потоков, а последующий код продолжит выполнение после того как все потоки блока завершатся.
Это текущая ветка GCC, в которой функциональность продолжает расти, как и поддержка новых архитектур (вместе с тем удаляются некоторые устаревшие и не поддерживаемые разработчиками архитектуры и платформы). Улучшена поддержка языка Fortran 2003, а оптимизатор получил новые заметные усовершенствования. Среди новых поддерживаемых платформ отметим некоторые процессоры семейства Coldfire, процессор IBM System z9 EC/BC, высокопроизводительный блок синергетических процессоров (Synergistic Processor Unit, SPU) архитектуры Cell, SmartMIPS и многие другие. Компилятор и библиотеки GCC теперь поддерживают Thumb2 (разновидность архитектуры ARM c сокращенным командным словом) и ARMv7. Улучшения затронули также поддержку процессоров Core2 и Geode. Что касается верхнего уровня в целом, то была переопределена внутренняя структура GIMPLE-представления, после чего компилятор стал потреблять меньше памяти. Уже начата работа над версией 4.4, которая скоро станет основной веткой. В ней будет исправлено множество дефектов и улучшен оптимизатор. Реализована спецификация OpenMP 3.0 для языков Появится возможность задавать уровень оптимизации не только на уровне файла, как сейчас, но и на уровне функции. Для этого введен новый атрибут И, наконец, добавлена поддержка нового 16-разрядного многоядерного процессора Picochip. Этот процессор интересен тем, что его ядра программируются независимо и образуют многосвязную топологию. Очевидно, GCC ждет успешное будущее. Компиляторы продолжают развиваться - как в плане своей архитектуры, так и в плане функциональности, и охватывают все больше современных процессоров и платформ. Да и охват языков программирования поистине велик. На стадии разработки находятся еще несколько языков, включая Mercury, GHDL (GCC-вариант VHDL) и Унифицированный Параллельный Как результат прогресса GCC, нас ждет и улучшение качества самого разного ПО - Linux, Berkeley Software Distribution (BSD), Apache и многого другого. Код, скомпилированный GCC4, выигрывает в скорости и размере, что наилучшим образом отразится на всей отрасли программного обеспечения. | ||
Категория: Новости программного обеспечения под Linux |
Просмотров: 781 |
Добавил: Diskosuperstar
| Теги: |
Всего комментариев: 0 | |