Релиз набора компиляторов GCC 6
После года разработки состоялся релиз свободного набора компиляторов GCC 6.1, первый значительный выпуск в новой ветке GCC 6.x. В соответствии с новой схемой нумерации выпусков, версия 6.0 использовалась в процессе разработки, а незадолго до выхода GCC 6.1 уже ответвилась ветка GCC 7.0, на базе которой будет сформирован следующий значительный релиз GCC 7.1.
GCC 6.1 примечателен применением в компиляторе C++ по умолчанию стандарта C++14 вместо ранее предлагаемого C++98, улучшением экспериментальной поддержки C++17, расширением средств диагностики, полной поддержкой OpenMP 4.5, новыми оптимизациями, поддержка системной библиотеки musl, улучшением поддержки платформ ARM, поддержкой процессоров AMD Zen (17 поколение CPU AMD), Intel Skylake, IBM z13 и IBM POWER 9.
Основные изменения:
- Для языка C++ по умолчанию активировано использование стандарта C++17 (применяется режим »-std=gnu++14» вместо »-std=gnu++98»). Добавлена поддержка расширения системы шаблонов C++ Concepts, активируемая опцией »-fconcepts». Реализованы некоторые новые элементы будущего стандарта C++17, такие как выражения fold, символьные литералы u8, расширенный static_assert и вложенное определение пространств имён. Реализована возможность вычисления констант для всех бестиповых аргументов шаблонов. Добавлена поддержка транзакционной памяти (C++ Transactional Memory) при сборке с опцией »-fgnu-tm»;
- В runtime-библиотеке libstdc++ расширен набор специальных математических функций (ISO/IEC 29124:2010), добавлена экспериментальная поддержка стандарта C++17 (в том числе новые функции std: size, std: empty, std: data для контейнеров и массивов, std: uncaught_exceptions, std: invoke, std: shared_mutex, std: void_t и std: bool_constant), экспериментальная поддержка File System TS, экспериментальная поддержка второй версии Library Fundamentals TS, поддержка std: locale для DragonFly и FreeBSD;
- Добавлена поддержка Си-библиотеки musl, которую можно использовать на Linux-системах с архитектурой AArch64, ARM, MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 и x86_64. Поддержка включается опцией »-mmusl»;
- Многочисленные улучшения оптимизатора: Добавлены новые внутрипроцедурные оптимизации и оптимизаций во время динамического связывания, улучшена работа детектора неопределенного поведения (Undefined Behavior Sanitizer);
- Значительно расширена поддержка спецификации OpenACC 2.0a, определяющей средства для выноса операций на плечи GPU. Добавлена начальная поддержка параллельного выполнения ядер OpenACC. Для выноса вычислений могут быть задействованы GNU NVIDIA PTX на Linux-системах с процессорами x86_64 и PowerPC. Поддерживается распараллеливание с запуском до 32 обработчиков и 32 векторов.
- В компиляторах C и C++ полностью реализована спецификация OpenMP 4.0 (Open Multi-Processing), позволяющая ускорить вычисления за счёт выноса операций (offloading) на специализированные процессоры Intel XeonPhi Knights Landing и AMD HSAIL.
- Начальная поддержка гетерогенных вычислительных систем на базе архитектуры HSA. Реализована возможность генерации промежуточного языка HSAIL (Heterogeneous System Architecture Intermediate Language) для простых устройств OpenMP при сборке с опцией »--enable-offload-targets=hsa». Добавлен плагин libgomp, позволяющий запустить ядра HSA GPU на GPU, совместимых с HSA.
- Расширены средства сборки генератора кода в форме разделяемой библиотеки libgccjit для встраивания в другие процессы и использования для организации JIT-компиляции байткода в машинный код;
- Объявлена устаревшей поддержка старых архитектур ARM, предшествующих ARMv4t: arm2, arm250, arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di, arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500, arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm, strongarm110, strongarm1100, strongarm1110, fa526, fa626. В будущем поддержка данных систем будет прекращена.
- Добавлена поддержка новых процессоров ARM: ARM Cortex-A32 (cortex-a32), ARM Cortex-A35 (cortex-a35);
- Улучшения для процессоров IA-32/x86–64: Добавлена поддержка процессоров AMD Zen (-march=znver1 и -mtune=znver1) и Intel Skylake с расширениями AVX-512 (-march=skylake-avx512) AVX-512F, AVX512VL, AVX-512CD, AVX-512BW и AVX-512DQ. Добавлена поддержка инструкций monitorx и mwaitx, используемых в CPU AMD. Добавлена поддержка адресных пространств __seg_fs, __seg_gs и __seg_tls;
- Начальная поддержка процессоров POWER9, использующих набор инструкций OpenPOWER ISA 3.0. Для систем PowerPC64 обеспечена поддержка 128-разрядных чисел с плавающей запятой (IEEE 128-bit floating-point) с использованием типа __float128 (»-mfloat128»);
- Добавлена поддержка процессоров IBM z13 (-march=z13), используемых в новых платформах IBM z Systems;
- Расширены возможности порта AArch64 и добавлены специфичные для данной архитектуры опции. На системах GNU/Linux AArch64 реализована поддержка опций »-march=native» и »-mcpu=native», при которых GCC сам определяет тип CPU и выбирает набор оптимальных настроек. Реализована поддержка опций »-mtls-size=» и »-fno-plt». Добавлена поддержка архитектуры ARMv8.1-A (»-march=armv8.1-a»), процессора ARM Cortex-A35 (»-mcpu=cortex-a35»,»-mtune=cortex-a35») и расширений для крупных систем (Large System Extensions). Улучшена генерация кода для процессоров ARM Cortex-A53 и Samsung Exynos M1.
- В разряд устаревших переведены платформы SH5 / SH64 (sh64-*-*) и MeP (mep-elf).
© OpenNet
