The OpenNET Project / Index page

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

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

22.04.2014 19:48

После 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, предлагающего новую эффективную методику параллельного программирования для языков Си и Си++, позволяющую существенно упростить разработку программ, части которых выполняются параллельно с задействованием разных процессорных ядер и векторных сопроцессоров (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 года.


  1. Главная ссылка к новости (http://gcc.gnu.org/ml/gcc/2014...)
  2. OpenNews: В условиях конкуренции с Clang Эрик Реймонд предложил отменить ограничения GCC в области плагинов
  3. OpenNews: Ричард Столлман указал на недопустимость проприетарных надстроек над GCC
  4. OpenNews: Для GCC подготовлен фронтэнд с поддержкой языка Rust, развиваемого проектом Mozilla
  5. OpenNews: Наиболее интересные новшества, ожидаемые в GCC 4.9
  6. OpenNews: Выпущен набор компиляторов GCC 4.8
Лицензия: CC-BY
Тип: Интересно / Программы
Ключевые слова: gcc, compile
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (47) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, MSlinux (?), 20:37, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Теперь мы будем ждать новой версии Cygwin
     
     
  • 2.71, Аноним (-), 15:20, 25/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Теперь мы будем ждать новой версии Cygwin

    Чувак, не мучай себя, переходи на пингвины :). Это я тебе как бывший юзер цыгвина и msys говорю. Если уж хочется могущество гнутого инструментария и *никсовых утилей - виндой при этом пользоваться столь же удобно, сколь удобно бежать стометровку в ластах и противогазе.

     

  • 1.2, Константин (??), 20:44, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    отличнейшая новость для тех кто любит все усорять без большого геммороя > Реализована поддержка спецификации OpenMP 4.0
     
     
  • 2.3, ананим (?), 20:54, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > усорять

    Хорошо сказал.
    И главное правда.

     
     
  • 3.17, metallica (ok), 23:27, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> усорять
    > Хорошо сказал.
    > И главное правда.

    Из всех способов размножения потоков, самый практичный, удобный и даже элегантный-это API из omp.
    Другие API, начиная от clone и заканчивая всякими boost::context, в сравнении с omp, кучи мусора просто.


     
     
  • 4.21, ананим (?), 00:41, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Другие API, начиная от clone

    Ложь. И это мягко говоря.
    Вообще-то сикол называется clone2 (Через него тотже форк реализован например).
    И он настолько гибок, что в граничных условиях от потока ядра практически не отличается.
    Первое.
    Второе. По поводу "усорять" — не разделяю эйфорию из-за того, что теперь каждый юзерспейсный быдлoкод (чуть ли не на js) способен зaсрaть все 8 процов на все 100% каждый.
    Не, отрубим конечно, но задолбали.

    [сообщение отредактировано модератором]

     
     
  • 5.25, Crazy Alex (ok), 02:34, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Насчет "засрать" поддерживаю, но omp таки удобно там, где нужно просто наплодить потоки, что-то посчитать и успокоиться. Руками для этого потоки ляпать - это искать себе проблемы там, где их можно избежать - так как получите больший объем вашего кода и, соответственно, больше шансов поймать баг. а в многопоточке их ловить - то ещё удовольствие, особенно на сях.
     
     
  • 6.60, arisu (ok), 12:35, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Насчет "засрать" поддерживаю, но omp таки удобно там, где нужно просто наплодить
    > потоки, что-то посчитать и успокоиться.

    (внимательно осматривая снова) что-то мне std.parallelism из D больше нравится.

     
  • 5.33, Аноним (-), 06:31, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Прописывать лимиты на процесс снова внезапно в цене? :)
    Дык это - скорее хорошо чем плохо.
     
  • 5.45, metallica (ok), 11:27, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Другие API, начиная от clone
    > Пинздёж. И это мягко говоря.
    > Вообще-то сикол называется clone2 (Через него тотже форк реализован например).
    > И он настолько гибок, что в граничных условиях от потока ядра практически
    > не отличается.

    Как ещё изящнее могу запустить пару потоков, чем так?

    [code]

    #pragma omp parallel num_threads(2)
    {

    prl();

      }

    [/code]

     
     
  • 6.46, анонимище (?), 11:59, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Как ещё изящнее могу запустить пару потоков, чем так?

    std::thread(prl).detach();
    std::thread(prl).detach();

     
     
  • 7.47, metallica (ok), 12:42, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Как ещё изящнее могу запустить пару потоков, чем так?
    > std::thread(prl).detach();
    > std::thread(prl).detach();

    Ничего изящного. А если 30 потоков? И чтоб без циклов.

     
     
  • 8.48, анонимище (?), 12:57, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что за дурные ограничения, парниша Я так же могу А сделай с OMP что пользовате... текст свёрнут, показать
     
     
  • 9.49, pavlinux (ok), 14:33, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    pragma omp parallel for for i 0, i 20 i pthread_create thread i , ... текст свёрнут, показать
     
     
  • 10.59, Аноним (-), 11:24, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Создавать несколько потоков только для того, чтобы каждый из них породил по ещё ... текст свёрнут, показать
     
     
  • 11.67, Аноним (-), 08:10, 25/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Чаво ... текст свёрнут, показать
     
  • 11.68, Аноним (-), 14:34, 25/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы там что, форкбомбу оптимизируете под мнеогоядерность ... текст свёрнут, показать
     
  • 2.6, Вук (?), 21:20, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А вы из тех, кто любит удалять всё "лишнее" из рабочей системы? Гг
     

  • 1.4, Аноним (-), 21:15, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ждем-с чем ответит Цланг, хо-хо-хо!
     
     
  • 2.32, Аноним (-), 04:43, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Что значит догонять? Во-первых, он никогда не был отстающим, он шёл и идёт параллельным курсом, и, надо сказать, это gcc сильно свернуло в его сторону, иначе так бы и сидело с нечитабельными варнингами и дубовой архитектурой в которой нельзя разобраться. А то что он отстаёт по каким-то фичам - так gcc отстаёт по другим.
     

  • 1.7, Аноним (-), 21:27, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Никто не знает, как работает UBSAN? И что за неопределённое поведение?
     
     
  • 2.8, _ (??), 21:55, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    http://stackoverflow.com/questions/20738232/gcc-4-9-undefined-behavior-saniti
     
  • 2.9, Vkni (ok), 21:55, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Никто не знает, как работает UBSAN? И что за неопределённое поведение?

    Как работает - не знаем. Что такое UB - вот:
    http://www.viva64.com/ru/t/0066/

     
     
  • 3.72, Аноним (-), 15:23, 25/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Жаль что вам не объяснили что пиарить проприетарный win-only продукт при рассказе о тривиальной вещи, которая описана в вике - некультурно, а за данный маневр на ресурсе по открытым технологиям - двукратный бонус к вашей наглости.
     
     
  • 4.73, Vkni (ok), 06:13, 30/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Жаль что вам не объяснили что пиарить проприетарный win-only продукт при рассказе
    > о тривиальной вещи, которая описана в вике - некультурно,

    Некультурно делать в слове из 4-х букв одну ошибку. :-)

    > а за данный маневр на ресурсе по открытым технологиям - двукратный бонус к
    > вашей наглости.

    Не надо компостировать мозги анонимными постами. Открытость - не самоцель, а инструмент, повышающий удобство использования софта.

     
  • 2.26, Crazy Alex (ok), 02:37, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если вы не знаете, что такое неопределенное поведение - для начала надо хотя бы одну хорошую книгу по сям или плюсам прочесть. Потому что это понятие будет в ЛЮБОМ хоть сколько-нибудь приличном учебнике. И если вы его не знаете - значит либо учились по чему-то совсем печальному либо читали крайне невнимательно.
     
  • 2.50, pavlinux (ok), 14:48, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > И что за неопределённое поведение?

    Это когда ничего не делаешь, а оно делается и при это ошибки не возникает.
    И при этом думаешь, почему оно что-то сделало, и ничего не произошло, ведь
    я что-то не делал, а оно сделало, но не должно было так как я сделал, чтоб
    ничего не делало.    О_о

     
  • 2.61, arisu (ok), 12:37, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Никто не знает, как работает UBSAN? И что за неопределённое поведение?

    если человек задаёт второй вопрос, то ответ на первый ему не нужен. ему хороший учебник нужен, и к написанию софта не подпускать минимум год.

     

  • 1.11, Аноним (-), 22:18, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    К сожалению, не попало: "Кроме этого, в состав GCC 4.9 имеют шанс попасть библиотеки для поддержки JIT-компиляции средствами GCC".
    И где же движение в сторону https://www.opennet.ru/opennews/art.shtml?num=33396 ?
     
     
  • 2.62, arisu (ok), 12:39, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > К сожалению, не попало

    к счастью. надеюсь, эту фиготень тихонько закопают. если не уже.

     

  • 1.13, Аноним (-), 22:42, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Прекращена поддержка устаревшего runtime-детектора утечек памяти mudflap; Подскажите, что сейчас вместо mudflap?
     
     
  • 2.15, cdome (ok), 23:04, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    -fsanitize=address
     
  • 2.69, Аноним (-), 15:14, 25/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Подскажите, что сейчас вместо mudflap?

    Valgrind.

     

  • 1.19, kachsheev (ok), 23:54, 22/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, когда-нибудь из thread уберут макрос проверки версии языка/компилятора?
     
     
  • 2.51, Аноним (-), 15:36, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Используйте llvm'ский libc++ вместо убогого libstdc++
     
     
  • 3.53, kachsheev (ok), 16:33, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Желаю Вам успешно скомпилировать Linux клэнгом.
     
     
  • 4.54, Аноним (-), 17:23, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    FreeBSD скомпилировали. Над Linux усиленно работают. Если чере пару минорных релизов - РАЗ! и соберут - что будешь делать?
     
     
  • 5.55, kachsheev (ok), 17:48, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Похлопаю, порадуюсь и продолжу использовать OpenMP с gcc.
     
     
  • 6.57, Аноним (-), 03:13, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Все соснули http://clang-omp.github.io/
     
     
  • 7.66, kachsheev (ok), 22:08, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Хлопаю, радуюсь... и прохожу мимо.
     
  • 5.70, Аноним (-), 15:18, 25/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > РАЗ! и соберут

    Да у бздюков вечно какие-то PoC крутизны. А как до дела - уйма грабель на ровном месте. Зато лицееееееензия расово верная. Правда, поскольку я не собираюсь зажимать ни код системы, ни код компилера, ибо не имею мощностей для поддержания форка со всеми наворотами - вот пусть полтора жирных корпораса которым не лень ресурсы на проприетарные форки тратить, имхо этим и пользуются. Прикольно же когда как в PS4, соня игры гоняет во всю, а у бздюков дырка от бублика вместо драйверов для амдшных APU.

    >  - что будешь делать?

    Что делал слон, когда пришел Наполеон? :)

     

  • 1.20, Аноним (-), 00:29, 23/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А std::function всё так же память выделяет на каждый чих, млять, вместо того, чтобы внутренний буфер использовать. Опять из boost это тащить :(
     
     
  • 2.52, Аноним (-), 15:37, 23/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А std::function всё так же память выделяет на каждый чих, млять, вместо
    > того, чтобы внутренний буфер использовать. Опять из boost это тащить :(

    Используйте llvm'ский libc++ вместо убогого libstdc++

     
     
  • 3.63, arisu (ok), 12:40, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Используйте llvm'ский libc++ вместо убогого libstdc++

    у llvm появился libc++? откуда? зачем? O_O

     
     
  • 4.64, Andrey Mitrofanov (?), 12:47, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Используйте llvm'ский libc++ вместо убогого libstdc++
    > у llvm появился libc++? откуда?

    ""libstd++ was moved to a port and libc++ was imported"" http://wiki.freebsd.org/GPLinBase

    > зачем? O_O

    Надо! http://www.freebsd.org/doc/en/articles/bsdl-gpl/article.html Фатальный недостаток: аппле от gplv3 пучит.

    ---Just removing it from base will meet opposition.

     
     
  • 5.65, arisu (ok), 12:49, 24/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    я спрашиваю, откуда оно в llvm и зачем оно там. в clang++ — это я бы ещё понял, но в llvm-то нафига?!
     

  • 1.36, Аноним (-), 07:43, 23/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вау. сколько ВСЕГО полезного и Нужного !! =)
    из оффтопа:
    скоро Эскаватор и Пауэр8 ?
    даже Броадвелл полноразмерный - вроде нескоро-ж ?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    MIRhosting
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

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