Релиз набора компиляторов GCC 4.9

Материал из Викиновостей, свободного источника новостей

22 апреля 2014 года

После 13 месяцев разработки увидел свет релиз свободного набора компиляторов GCC 4.9. Новый выпуск примечателен реализацией поддержки OpenMP 4.0 и Cilk Plus, улучшением поддержки стандартов C++11 и C++14, режимом подсветки предупреждений и ошибок при выводе на экран, включением в состав детектора неопределенного поведения программы.

Основные изменения:

  • Реализована поддержка спецификации OpenMP 4.0 (Open Multi-Processing), определяющей API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран (в GCC OpenMP 4.0 пока доступен только для Си и Си++ ). В OpenMP 4.0 обеспечена поддержка ускорения за счет привлечения мощностей GPU, представлены значительные улучшения в модели выполнения задач, добавлены механизмы обработки ошибок, добавлена поддержка определенных пользователем редукций, обеспечена векторизация циклов с использованием инструкции SIMD, добавлен ряд расширений для поддержки параллельного выполнения на уровне задач;
  • Частично реализована поддержка набора расширений Cilk Plus (Архивная копия от 5 марта 2017 на Wayback Machine), предлагающего новую эффективную методику параллельного программирования для языков Си и Си++, позволяющую существенно упростить разработку программ, части которых выполняются параллельно с задействованием разных процессорных ядер и векторных сопроцессоров (Vector Units). Для управления генерацией кода с улучшенной векторизацией предусмотрена pragma simd. Поддерживается два метода увеличения производительности - параллелизм данных и параллельное выполнение подпрограмм. В первом случае, обеспечиваются механизмы прозрачного распараллеливания типовых операций над массивами данных и автоматическое задействование SIMD-инструкций. Для организации параллелизма на уровне подпрограмм в обиход вводится три ключевых слова: _Cilk_spawn - запуск функции в параллельном режиме, _Cilk_sync - ожидание завершения параллельно выполняемой функции, и _Cilk_for - организация работы цикла в параллельном режиме. "_Cilk_for" в GCC пока не поддерживается.
  • Для языков C и C++ добавлен компонент UBSAN (Undefined Behavior Sanitizer) с реализацией детектора неопределенного поведения, выявляющего во время выполнения программы ситуации, когда поведение программы становится неопределенным (зависит от реализации компилятора) из-за ошибки программиста. Для включения UBSAN следует использовать опцию "-fsanitize=undefined";
  • Улучшена работа оптимизаций во время динамического связывания (LTO, Link Time Optimization) и межпроцедурных оптимизаций, в которых устранена серия негативно сказывающихся на масштабируемости узких мест. В реализации межпроцедурных оптимизаций добавлен новый проход для выполнения спекулятивной девиртуализации (-fdevirtualize-speculatively), а также добавлен новый модуль с анализов наследования типов. В LTO переписан код слияния типов, новая реализация значительно быстрее и потребляет меньше памяти. Реализована техника раннего удаления виртуальных методов и загрузки функций по мере необходимости, что позволило снизить потребление памяти во время связывания. В итоге потребление памяти при сборке Firefox в отладочном режиме удалось сократить с 15 до 3.5 Гб, а время связывания уменьшить с 1700 до 350 секунд;
  • Улучшена техника оптимизации на основе обратной связи (Feedback directed). Добавлен новый проход для изменения порядка функций (-freorder-functions), позволяющий значительно сократить время запуска больших приложений;
  • Распределитель локальных регистров (Local Register Allocator), ранее доступный только для ia32 и x86-64, теперь адаптирован и включен по умолчанию для целевых архитектур Aarch64, ARM, S/390 и ARC, а также реализован в качестве опции для платформ PowerPC и RX;
  • Существенно расширена поддержка архитектуры ARM. Внесены оптимизации для процессоров Cortex-A15, Cortex-M4, Cortex-A52, Cortex-A53 и Cortex-A57. Добавлены оптимизации для big.LITTLE. Обеспечена поддержка архитектуры ARMv8-A. Добавлены опции для поддержи процессоров Cortex-A12 (-mcpu=cortex-a12), Cortex-R7 (-mcpu=cortex-r7), Cortex-A53 - Cortex-A57 (-mcpu=cortex-a5x);
  • Поддержка новой little-endian платформы powerpc64le-linux для которой предлагается новый PowerPC ELFV2 ABI. Поддержка Power ISA 2.07, включая транзакционную память;
  • В компоненте Address Sanitizer обеспечена поддержка архитектуры ARM в дополнение к ранее поддерживаемым архитектурам x86 и x86_64. Address Sanitizer позволяет выявлять ошибки работы с памятью и факты некорректного обращения к памяти, такие как обращение к областям памяти, после их освобождения ("use-after-free"), разрушение кучи, повреждение стека и переполнение буферов;
  • Прекращена поддержка устаревшего runtime-детектора утечек памяти mudflap;
  • Добавлена поддержка некоторых новшеств, развиваемых в рамках будущего стандарта C++14, например, реализованы массивы переменного размера, форма инициализации "[x = 42]{ ... };", разделители цифр (int j = 1'048'576;). В стандартную библиотеку С++ добавлена поддержка компонента "regex". Внесена серия улучшений, связанная с поддержкой стандарта C++11;
  • По реализации возможностей уровень поддержки стандарта C11 доведён до C99. В новой версии добавлена поддержка таких компонентов С11, как _Atomic, _Generic и _Thread_local. Добавлено новое Си-расширение __auto_type, предоставляющее для GNU C подмножество функциональности "auto" из C++11;
  • Улучшена поддержка языка ADA. GNAT переведён на использование по умолчанию стандарта ADA 2012, вместо ADA 2005;
  • В компиляторе для языка Fortran улучшена поддержка спецификации Fortran 2008 и добавлена поддержка Fortran 2003 finalization;
  • Обеспечена поддержка развиваемого компанией Google языка программирования Go 1.2.1;
  • Реализовано поддержка микроархитектур Intel Silvermont (-march=silvermont) и Broadwell (-march=broadwell), процессоров 15 семейства процессоров AMD (Excavator, -march=bdver4 и -mtune=bdver4), процессоров IBM Power8 и RX100, RX200 и RX600;
  • Для процессоров Intel добавлена поддержка инструкций AVX-512, которая может использоваться для целевых архитектур x86-64 и ia32;
  • Возможность подсветки текста выводимых ошибок и предупреждений ("-fdiagnostics-color=auto");
  • Объявлена устаревшей поддержка платформы Solaris 9 (*-*-solaris2.9), код для которой будет удалён в выпуске GCC 4.10. Компания Oracle прекратила стандартную поддержку Solaris 9 в 2011 году, расширенная платная поддержка завершится в октябре 2014 года.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Релиз набора компиляторов GCC 4.9», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.