The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз набора компиляторов GCC 9"
Отправлено opennews, 04-Май-19 01:22 
После года разработки опубликован (https://gcc.gnu.org/ml/gcc-announce/2019/msg00001.html) релиз свободного набора компиляторов GCC 9.1 (https://gcc.gnu.org/gcc-9), первый значительный выпуск в новой ветке GCC 9.x. В соответствии с новой схемой (https://gcc.gnu.org/develop.html#num_scheme) нумерации выпусков, версия 9.0 использовалась в процессе разработки, а незадолго до выхода GCC 9.1 уже ответвилась ветка GCC 10.0, на базе которой будет сформирован следующий значительный релиз GCC 10.1.


GCC 9.1 примечателен стабилизацией поддержки стандарта C++17, продолжением реализации возможностей будущего стандарта C++20 (кодовое название C++2a), включением в состав фронтэнда для языка D, частичным обеспечением поддержки OpenMP 5.0, почти полной поддержкой OpenACC 2.5, увеличением масштабируемости межпроцедурных оптимизаций и оптимизаций на этапе связывания, расширением средств диагностики и добавлением новых предупреждений, бэкендами для OpenRISC, C-SKY V2 и AMD GCN GPU .


Основные изменения (https://gcc.gnu.org/gcc-9/changes.html):

-  Добавлена поддержка языка программирования D. В основной состав GCC включены фронтэнд с компилятором GDC (https://gdcproject.org/) (Gnu D Compiler) и runtime-библиотеки (libphobos), которые позволяют использовать штатный GCC для сборки программ на языке программирования D. Процесс включения поддержки языка D в GCC начался (https://www.opennet.ru/opennews/art.shtml?num=28607) ещё в 2011 году, но затянулся (http://dconf.org/2017/talks/buclaw.pdf) из-за необходимости приведения кода к соответствию требованиям GCC и проблем с передачей прав на интеллектуальную собственность компании Digital Mars, развивающей язык программирования D;


-  Внесены улучшения в генератор кода. Например, реализовано применение разных стратегий раскрытия выражений Switch (jump table, bit test, decision tree)  в зависимости от ситуаций. Добавлена возможность трансформации линейных функций, включающих выражение Switch, с использованием оптимизации "-ftree-switch-conversion" (например, набор  условий вида "case 2: how = 205; break; case 3: how = 305; break;" будет преобразован в "100 * how + 5";

-  Улучшены межпроцедурные оптимизации. Настройки inline-развёртывания  адаптированы для современных кодовых баз на C++ и расширены новыми параметрами  max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns и uninlined-thunk-time. Повышена точность и агрессивность разделения "холодного" и "горячего" кода. Улучшена масшабируемость для очень больших единиц трансляции (https://ru.wikipedia.org/wiki/%D0%95%D0%... (например, при применении оптимизации на этапе связывания к большим программам);

-  Улучшен механизм оптимизации на основе результатов профилирования кода (PGO - Profile-guided optimization), который генерирует более оптимальный код на основе анализа особенностей выполнения кода. Сводная опция "-fprofile-use (https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Option... теперь включает режимы оптимизации "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" и "-ftree-loop-distribution". Удалено включение в файлы гистограмм со счётчиками, что позволило сократить размер файлов с профилями (гистограммы теперь генерируются на лету при  выполнении оптимизаций во время связывания);

-  Расширены оптимизации на этапе связывания (LTO). Обеспечено упрощение типов перед генерацией результата, что позволило существенно сократить размер объектных файлов LTO, уменьшить потребление памяти на этапе связывания и улучшить распараллеливание операций. Число разделов (--param lto-partitions) увеличено с 32 до 128, что повысило эффективность работы на системах с большим числом потоков в CPU.  Для управления числом процессов оптимизатора добавлен параметр
"--param lto-max-streaming-parallelism";


В итоге, по сравнению с GCC 8.3 внесённые в GCC 9 оптимизации позволили (http://hubicka.blogspot.com/2019/05/gcc-9-link-time-and-inte... примерно на 5% сократить время компиляции  Firefox 66 и LibreOffice 6.2.3. Размер объектных файлов снизился на 7%. Время связывания на 8-ядерном CPU уменьшилось  на 11%. Последовательная стадия оптимизации на этапе связывания теперь выполняется на 28% быстрее и потребляет на 20% меньше памяти. Потребление памяти каждого обработчика распараллеливаемой стадии LTO  снизилось на 30%;

-  Для языков C, C++ и Fortran реализована бо́льшая часть спецификации  параллельного программирования OpenACC 2.5 (https://gcc.gnu.org/wiki/OpenACC), определяющей средства для выноса операций (offloading)  на GPU и специализированные процессоры, такие как NVIDIA PTX;

-  Для С и С++ реализована частичная поддержка стандарта OpenMP 5.0 (https://www.opennet.ru/opennews/art.shtml?num=49585) (Open Multi-Processing), определяющего API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD);

-  Для языка Си добавлены новые предупреждения: "-Waddress-of-packed-member (https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options... (невыравненное значение указателя на упакованный элемент структуры или объединения) и
"-Wabsolute-value (https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options... (при обращении к функциям вычисления абсолютного значения, если для указанного аргумента имеется более подходящая функция, например, вместо abs(3.14)  следует использовать fabs(3.14)). Для C++ добавлены новые предупреждения: "-Wdeprecated-copy",
"-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" и     "-Wclass-conversion". Расширены многие ранее доступные предупреждения;

-  Добавлена экспериментальная поддержка части будущего стандарта языка Си, развиваемого под кодовым именем C2x. Для включения поддержки C2x следует использовать опции "-std=c2x" и "-std=gnu2x" (для включения расширений GNU). Стандарт пока на ранней стадии развития, поэтому из его возможностей поддерживается только выражение  _Static_assert с одним аргументом (_Static_assert c двумя аргументами стандартизировано в C11);

-  Объявлена стабильной поддержка стандарта C++17. Во фронтэнде языковые возможности  C++17 реализованы полностью, а в libstdc++ определённые в стандарте библиотечные функции близки к полной реализации;

-  Продолжена реализация (https://gcc.gnu.org/projects/cxx-status.html#cxx2a) элементов будущего стандарта C++2a. Например, добавлена возможность включения диапазонов при инициализации, реализованы расширения для лямбда-выражений, добавлена поддержка пустых членов структур данных и атрибутов likely/unlikely, обеспечена возможность вызова виртуальных функций в условных выражениях и т.п.
Для включения поддержки C++2a следует использовать опции "-std=c++2a" и "-std=gnu++2a". В libstdc++ для C++2a добавлены заголовочные файлы bit и version, типажи std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible и std::type_identity, функции std::midpoint, std::lerp, std::bind_front,
std::visit, std::is_constant_evaluated и std::assume_aligned, добавлена поддержка типа char8_t, реализована возможность проверки префикса и суффикса строк (starts_with, ends_with);

-  Добавлена поддержка новых процессоров ARM
Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE и Neoverse N1. Добавлена поддержка появившихся в Armv8.3-A инструкций для работы с комплексными числами, генерации псевдослучайных чисел (rng) и теггирования памяти (memtag), а также инструкций для блокирования атак, связанных со спекулятивным выполнением и работой блока предсказания переходов. Для архитектуры AArch64 добавлен режим защиты от пересечения стека и кучи (https://www.opennet.ru/opennews/art.shtml?num=46724) ("-fstack-clash-protection")....

URL: https://gcc.gnu.org/ml/gcc-announce/2019/msg00001.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=50622

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру